]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/event.h
cleanup - remove duplicate decl., added #include, etc.
[wxWidgets.git] / include / wx / event.h
index 884459101c20e70f07fe48fbd6617d9e8f2a2ed0..54ac43c70dbca46375e37393a7a74a93bbd1df01 100644 (file)
 #ifndef _WX_EVENT_H__
 #define _WX_EVENT_H__
 
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) && !defined(__EMX__)
-// Some older compilers (such as EMX) cannot handle
-// #pragma interface/implementation correctly, iff
-// #pragma implementation is used in _two_ translation
-// units (as created by e.g. event.cpp compiled for
-// libwx_base and event.cpp compiled for libwx_gui_core).
-// So we must not use those pragmas for those compilers in
-// such files.
-    #pragma interface "event.h"
-#endif
-
 #include "wx/defs.h"
 #include "wx/object.h"
 #include "wx/clntdata.h"
@@ -78,9 +67,12 @@ typedef int wxEventType;
 //     change the switch()es to if()s
 //
 // if these are real problems for you, define WXWIN_COMPATIBILITY_EVENT_TYPES
-// to get 100% old behaviour, however you won't be able to use the libraries
-// using the new dynamic event type allocation in such case, so avoid it if
-// possible.
+// as 1 to get 100% old behaviour, however you won't be able to use the
+// libraries using the new dynamic event type allocation in such case, so avoid
+// it if possible.
+#ifndef WXWIN_COMPATIBILITY_EVENT_TYPES
+    #define WXWIN_COMPATIBILITY_EVENT_TYPES 0
+#endif
 
 #if WXWIN_COMPATIBILITY_EVENT_TYPES
 
@@ -219,7 +211,7 @@ BEGIN_DECLARE_EVENT_TYPES()
     DECLARE_EVENT_TYPE(wxEVT_SCROLL_PAGEDOWN, 305)
     DECLARE_EVENT_TYPE(wxEVT_SCROLL_THUMBTRACK, 306)
     DECLARE_EVENT_TYPE(wxEVT_SCROLL_THUMBRELEASE, 307)
-    DECLARE_EVENT_TYPE(wxEVT_SCROLL_ENDSCROLL, 308)
+    DECLARE_EVENT_TYPE(wxEVT_SCROLL_CHANGED, 308)
 
         // Scroll events from wxWindow
     DECLARE_EVENT_TYPE(wxEVT_SCROLLWIN_TOP, 320)
@@ -273,6 +265,7 @@ BEGIN_DECLARE_EVENT_TYPES()
     DECLARE_EVENT_TYPE(wxEVT_UPDATE_UI, 440)
     DECLARE_EVENT_TYPE(wxEVT_SIZING, 441)
     DECLARE_EVENT_TYPE(wxEVT_MOVING, 442)
+    DECLARE_EVENT_TYPE(wxEVT_HIBERNATE, 443)
 
         // Generic command events
         // Note: a click is a higher-level event than button down/up
@@ -511,11 +504,6 @@ private:
 };
 #endif
 
-#ifdef __VISUALC__
-    // 'this' : used in base member initializer list (for m_commandString)
-    #pragma warning(disable:4355)
-#endif
-
 class WXDLLIMPEXP_CORE wxCommandEvent : public wxEvent
 {
 public:
@@ -578,10 +566,6 @@ private:
     DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxCommandEvent)
 };
 
-#ifdef __VISUALC__
-    #pragma warning(default:4355)
-#endif
-
 #if WXWIN_COMPATIBILITY_2_4
 inline void wxCommandEventStringHelper::operator=(const wxString &str)
 {
@@ -641,7 +625,7 @@ private:
  wxEVT_SCROLL_PAGEDOWN
  wxEVT_SCROLL_THUMBTRACK
  wxEVT_SCROLL_THUMBRELEASE
- wxEVT_SCROLL_ENDSCROLL
+ wxEVT_SCROLL_CHANGED
 */
 
 class WXDLLIMPEXP_CORE wxScrollEvent : public wxCommandEvent
@@ -951,11 +935,22 @@ public:
     wxKeyEvent(wxEventType keyType = wxEVT_NULL);
     wxKeyEvent(const wxKeyEvent& evt);
 
+    // can be used check if the key event has exactly the given modifiers:
+    // "GetModifiers() = wxMOD_CONTROL" is easier to write than "ControlDown()
+    // && !MetaDown() && !AltDown() && !ShiftDown()"
+    int GetModifiers() const
+    {
+        return (m_controlDown ? wxMOD_CONTROL : 0) |
+               (m_shiftDown ? wxMOD_SHIFT : 0) |
+               (m_metaDown ? wxMOD_META : 0) |
+               (m_altDown ? wxMOD_ALT : 0);
+    }
+
     // Find state of shift/control keys
     bool ControlDown() const { return m_controlDown; }
+    bool ShiftDown() const { return m_shiftDown; }
     bool MetaDown() const { return m_metaDown; }
     bool AltDown() const { return m_altDown; }
-    bool ShiftDown() const { return m_shiftDown; }
 
     // "Cmd" is a pseudo key which is Control for PC and Unix platforms but
     // Apple ("Command") key under Macs: it makes often sense to use it instead
@@ -1045,10 +1040,13 @@ public:
 
     long          m_keyCode;
 
+    // TODO: replace those with a single m_modifiers bitmask of wxMOD_XXX?
     bool          m_controlDown;
     bool          m_shiftDown;
     bool          m_altDown;
     bool          m_metaDown;
+
+    // FIXME: what is this for? relation to m_rawXXX?
     bool          m_scanCode;
 
 #if wxUSE_UNICODE
@@ -1090,7 +1088,7 @@ public:
 
     wxSize GetSize() const { return m_size; }
     wxRect GetRect() const { return m_rect; }
-    void SetRect(wxRect rect) { m_rect = rect; }
+    void SetRect(const wxRect& rect) { m_rect = rect; }
 
     virtual wxEvent *Clone() const { return new wxSizeEvent(*this); }
 
@@ -1130,7 +1128,7 @@ public:
     wxPoint GetPosition() const { return m_pos; }
     void SetPosition(const wxPoint& pos) { m_pos = pos; }
     wxRect GetRect() const { return m_rect; }
-    void SetRect(wxRect rect) { m_rect = rect; }
+    void SetRect(const wxRect& rect) { m_rect = rect; }
 
     virtual wxEvent *Clone() const { return new wxMoveEvent(*this); }
 
@@ -1288,6 +1286,7 @@ private:
 /*
  wxEVT_ACTIVATE
  wxEVT_ACTIVATE_APP
+ wxEVT_HIBERNATE
  */
 
 class WXDLLIMPEXP_CORE wxActivateEvent : public wxEvent
@@ -1387,7 +1386,15 @@ public:
         m_canVeto(event.m_canVeto) {}
 
     void SetLoggingOff(bool logOff) { m_loggingOff = logOff; }
-    bool GetLoggingOff() const { return m_loggingOff; }
+    bool GetLoggingOff() const
+    {
+        // m_loggingOff flag is only used by wxEVT_[QUERY_]END_SESSION, it
+        // doesn't make sense for wxEVT_CLOSE_WINDOW
+        wxASSERT_MSG( m_eventType != wxEVT_CLOSE_WINDOW,
+                      _T("this flag is for end session events only") );
+
+        return m_loggingOff;
+    }
 
     void Veto(bool veto = true)
     {
@@ -1398,19 +1405,18 @@ public:
         m_veto = veto;
     }
     void SetCanVeto(bool canVeto) { m_canVeto = canVeto; }
-    // No more asserts here please, the one you put here was wrong.
     bool CanVeto() const { return m_canVeto; }
     bool GetVeto() const { return m_canVeto && m_veto; }
 
     virtual wxEvent *Clone() const { return new wxCloseEvent(*this); }
 
 protected:
-    bool m_loggingOff;
-    bool m_veto, m_canVeto;
+    bool m_loggingOff,
+         m_veto,
+         m_canVeto;
 
 private:
     DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxCloseEvent)
-
 };
 
 /*
@@ -1859,7 +1865,7 @@ class WXDLLIMPEXP_CORE wxNavigationKeyEvent : public wxEvent
 public:
     wxNavigationKeyEvent()
         : wxEvent(0, wxEVT_NAVIGATION_KEY),
-          m_flags(IsForward),    // defaults are for TAB
+          m_flags(IsForward | FromTab),    // defaults are for TAB
           m_focus((wxWindow *)NULL)
         {
             m_propagationLevel = wxEVENT_PROPAGATE_NONE;
@@ -1884,6 +1890,13 @@ public:
     void SetWindowChange(bool bIs)
         { if ( bIs ) m_flags |= WinChange; else m_flags &= ~WinChange; }
 
+    // Set to true under MSW if the event was generated using the tab key.
+    // This is required for proper navogation over radio buttons
+    bool IsFromTab() const
+        { return (m_flags & FromTab) != 0; }
+    void SetFromTab(bool bIs)
+        { if ( bIs ) m_flags |= FromTab; else m_flags &= ~FromTab; }
+
     // the child which has the focus currently (may be NULL - use
     // wxWindow::FindFocus then)
     wxWindow* GetCurrentFocus() const { return m_focus; }
@@ -1898,7 +1911,8 @@ public:
     {
         IsBackward = 0x0000,
         IsForward = 0x0001,
-        WinChange = 0x0002
+        WinChange = 0x0002,
+        FromTab = 0x0004
     };
 
     long m_flags;
@@ -2097,7 +2111,10 @@ private:
 // event handler and related classes
 // ============================================================================
 
-typedef void (wxEvtHandler::*wxObjectEventFunction)(wxEvent&);
+// for backwards compatibility and to prevent eVC 4 for ARM from crashing with
+// internal compiler error when compiling wx, we define wxObjectEventFunction
+// as a wxObject method even though it can only be a wxEvtHandler one
+typedef void (wxObject::*wxObjectEventFunction)(wxEvent&);
 
 // we can't have ctors nor base struct in backwards compatibility mode or
 // otherwise we won't be able to initialize the objects with an agregate, so
@@ -2174,8 +2191,6 @@ private:
     wxEventTableEntry& operator=(const wxEventTableEntry&);
 };
 
-class WXDLLIMPEXP_BASE wxEvtHandler;
-
 // an entry used in dynamic event table managed by wxEvtHandler::Connect()
 struct WXDLLIMPEXP_BASE wxDynamicEventTableEntry : public wxEventTableEntryBase
 {
@@ -2216,7 +2231,6 @@ struct WXDLLIMPEXP_BASE wxEventTable
 // ----------------------------------------------------------------------------
 
 WX_DEFINE_ARRAY_PTR(const wxEventTableEntry*, wxEventTableEntryPointerArray);
-class WXDLLIMPEXP_BASE wxEvtHandler;
 
 class WXDLLIMPEXP_BASE wxEventHashTable
 {
@@ -2342,6 +2356,11 @@ public:
                     wxEvtHandler *eventSink = (wxEvtHandler *) NULL)
         { return Disconnect(winid, wxID_ANY, eventType, func, userData, eventSink); }
 
+    bool Disconnect(wxEventType eventType,
+                    wxObjectEventFunction func,
+                    wxObject *userData = (wxObject *) NULL,
+                    wxEvtHandler *eventSink = (wxEvtHandler *) NULL)
+        { return Disconnect(wxID_ANY, eventType, func, userData, eventSink); }
 
     wxList* GetDynamicEventTable() const { return m_dynamicEvents ; }
 
@@ -2385,7 +2404,7 @@ protected:
     // NB: This method is intentionally *not* inside wxUSE_VALIDATORS!
     //     It is part of wxBase which doesn't use validators and the code
     //     is compiled out when building wxBase w/o GUI classes, which affects
-    //     binary compatiblity and wxBase library can't be used by GUI
+    //     binary compatibility and wxBase library can't be used by GUI
     //     ports.
     virtual bool TryValidator(wxEvent& WXUNUSED(event)) { return false; }
 
@@ -2409,8 +2428,14 @@ protected:
 
 #if wxUSE_THREADS
 #if defined (__VISAGECPP__)
+    const wxCriticalSection& Lock() const { return m_eventsLocker; }
+    wxCriticalSection& Lock() { return m_eventsLocker; }
+
     wxCriticalSection   m_eventsLocker;
 #  else
+    const wxCriticalSection& Lock() const { return *m_eventsLocker; }
+    wxCriticalSection& Lock() { return *m_eventsLocker; }
+
     wxCriticalSection*  m_eventsLocker;
 #  endif
 #endif
@@ -2505,76 +2530,76 @@ typedef void (wxEvtHandler::*wxMouseCaptureChangedEventFunction)(wxMouseCaptureC
 
 
 #define wxCommandEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxCommandEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxCommandEventFunction, &func)
 #define wxScrollEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxScrollEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxScrollEventFunction, &func)
 #define wxScrollWinEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxScrollWinEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxScrollWinEventFunction, &func)
 #define wxSizeEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxSizeEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxSizeEventFunction, &func)
 #define wxMoveEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxMoveEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxMoveEventFunction, &func)
 #define wxPaintEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxPaintEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxPaintEventFunction, &func)
 #define wxNcPaintEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxNcPaintEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxNcPaintEventFunction, &func)
 #define wxEraseEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxEraseEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxEraseEventFunction, &func)
 #define wxMouseEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxMouseEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxMouseEventFunction, &func)
 #define wxCharEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxCharEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxCharEventFunction, &func)
 #define wxKeyEventHandler(func) wxCharEventHandler(func)
 #define wxFocusEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxFocusEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxFocusEventFunction, &func)
 #define wxChildFocusEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxChildFocusEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxChildFocusEventFunction, &func)
 #define wxActivateEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxActivateEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxActivateEventFunction, &func)
 #define wxMenuEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxMenuEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxMenuEventFunction, &func)
 #define wxJoystickEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxJoystickEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxJoystickEventFunction, &func)
 #define wxDropFilesEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxDropFilesEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxDropFilesEventFunction, &func)
 #define wxInitDialogEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxInitDialogEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxInitDialogEventFunction, &func)
 #define wxSysColourChangedEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxSysColourChangedEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxSysColourChangedEventFunction, &func)
 #define wxDisplayChangedEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxDisplayChangedEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxDisplayChangedEventFunction, &func)
 #define wxUpdateUIEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxUpdateUIEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxUpdateUIEventFunction, &func)
 #define wxIdleEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxIdleEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxIdleEventFunction, &func)
 #define wxCloseEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxCloseEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxCloseEventFunction, &func)
 #define wxShowEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxShowEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxShowEventFunction, &func)
 #define wxIconizeEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxIconizeEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxIconizeEventFunction, &func)
 #define wxMaximizeEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxMaximizeEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxMaximizeEventFunction, &func)
 #define wxNavigationKeyEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxNavigationKeyEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxNavigationKeyEventFunction, &func)
 #define wxPaletteChangedEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxPaletteChangedEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxPaletteChangedEventFunction, &func)
 #define wxQueryNewPaletteEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxQueryNewPaletteEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxQueryNewPaletteEventFunction, &func)
 #define wxWindowCreateEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxWindowCreateEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxWindowCreateEventFunction, &func)
 #define wxWindowDestroyEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxWindowDestroyEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxWindowDestroyEventFunction, &func)
 #define wxSetCursorEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxSetCursorEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxSetCursorEventFunction, &func)
 #define wxNotifyEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxNotifyEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxNotifyEventFunction, &func)
 #define wxHelpEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxHelpEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxHelpEventFunction, &func)
 #define wxContextMenuEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxContextMenuEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxContextMenuEventFunction, &func)
 #define wxMouseCaptureChangedEventHandler(func) \
-    (wxObjectEventFunction)wxStaticCastEvent(wxMouseCaptureChangedEventFunction, &func)
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxMouseCaptureChangedEventFunction, &func)
 
 #endif // wxUSE_GUI
 
@@ -2669,6 +2694,7 @@ typedef void (wxEvtHandler::*wxMouseCaptureChangedEventFunction)(wxMouseCaptureC
 #define EVT_CHILD_FOCUS(func)  wx__DECLARE_EVT0(wxEVT_CHILD_FOCUS, wxChildFocusEventHandler(func))
 #define EVT_ACTIVATE(func)  wx__DECLARE_EVT0(wxEVT_ACTIVATE, wxActivateEventHandler(func))
 #define EVT_ACTIVATE_APP(func)  wx__DECLARE_EVT0(wxEVT_ACTIVATE_APP, wxActivateEventHandler(func))
+#define EVT_HIBERNATE(func)  wx__DECLARE_EVT0(wxEVT_HIBERNATE, wxActivateEventHandler(func))
 #define EVT_END_SESSION(func)  wx__DECLARE_EVT0(wxEVT_END_SESSION, wxCloseEventHandler(func))
 #define EVT_QUERY_END_SESSION(func)  wx__DECLARE_EVT0(wxEVT_QUERY_END_SESSION, wxCloseEventHandler(func))
 #define EVT_DROP_FILES(func)  wx__DECLARE_EVT0(wxEVT_DROP_FILES, wxDropFilesEventHandler(func))
@@ -2746,7 +2772,7 @@ typedef void (wxEvtHandler::*wxMouseCaptureChangedEventFunction)(wxMouseCaptureC
 #define EVT_SCROLL_PAGEDOWN(func) wx__DECLARE_EVT0(wxEVT_SCROLL_PAGEDOWN, wxScrollEventHandler(func))
 #define EVT_SCROLL_THUMBTRACK(func) wx__DECLARE_EVT0(wxEVT_SCROLL_THUMBTRACK, wxScrollEventHandler(func))
 #define EVT_SCROLL_THUMBRELEASE(func) wx__DECLARE_EVT0(wxEVT_SCROLL_THUMBRELEASE, wxScrollEventHandler(func))
-#define EVT_SCROLL_ENDSCROLL(func) wx__DECLARE_EVT0(wxEVT_SCROLL_ENDSCROLL, wxScrollEventHandler(func))
+#define EVT_SCROLL_CHANGED(func) wx__DECLARE_EVT0(wxEVT_SCROLL_CHANGED, wxScrollEventHandler(func))
 
 #define EVT_SCROLL(func) \
     EVT_SCROLL_TOP(func) \
@@ -2756,7 +2782,8 @@ typedef void (wxEvtHandler::*wxMouseCaptureChangedEventFunction)(wxMouseCaptureC
     EVT_SCROLL_PAGEUP(func) \
     EVT_SCROLL_PAGEDOWN(func) \
     EVT_SCROLL_THUMBTRACK(func) \
-    EVT_SCROLL_THUMBRELEASE(func)
+    EVT_SCROLL_THUMBRELEASE(func) \
+    EVT_SCROLL_CHANGED(func)
 
 // Scrolling from wxSlider and wxScrollBar, with an id
 #define EVT_COMMAND_SCROLL_TOP(winid, func) wx__DECLARE_EVT1(wxEVT_SCROLL_TOP, winid, wxScrollEventHandler(func))
@@ -2767,7 +2794,7 @@ typedef void (wxEvtHandler::*wxMouseCaptureChangedEventFunction)(wxMouseCaptureC
 #define EVT_COMMAND_SCROLL_PAGEDOWN(winid, func) wx__DECLARE_EVT1(wxEVT_SCROLL_PAGEDOWN, winid, wxScrollEventHandler(func))
 #define EVT_COMMAND_SCROLL_THUMBTRACK(winid, func) wx__DECLARE_EVT1(wxEVT_SCROLL_THUMBTRACK, winid, wxScrollEventHandler(func))
 #define EVT_COMMAND_SCROLL_THUMBRELEASE(winid, func) wx__DECLARE_EVT1(wxEVT_SCROLL_THUMBRELEASE, winid, wxScrollEventHandler(func))
-#define EVT_COMMAND_SCROLL_ENDSCROLL(winid, func) wx__DECLARE_EVT1(wxEVT_SCROLL_ENDSCROLL, winid, wxScrollEventHandler(func))
+#define EVT_COMMAND_SCROLL_CHANGED(winid, func) wx__DECLARE_EVT1(wxEVT_SCROLL_CHANGED, winid, wxScrollEventHandler(func))
 
 #define EVT_COMMAND_SCROLL(winid, func) \
     EVT_COMMAND_SCROLL_TOP(winid, func) \
@@ -2777,7 +2804,13 @@ typedef void (wxEvtHandler::*wxMouseCaptureChangedEventFunction)(wxMouseCaptureC
     EVT_COMMAND_SCROLL_PAGEUP(winid, func) \
     EVT_COMMAND_SCROLL_PAGEDOWN(winid, func) \
     EVT_COMMAND_SCROLL_THUMBTRACK(winid, func) \
-    EVT_COMMAND_SCROLL_THUMBRELEASE(winid, func)
+    EVT_COMMAND_SCROLL_THUMBRELEASE(winid, func) \
+    EVT_COMMAND_SCROLL_CHANGED(winid, func)
+
+// compatibility macros for the old name, to be deprecated in 2.8
+#define wxEVT_SCROLL_ENDSCROLL wxEVT_SCROLL_CHANGED
+#define EVT_COMMAND_SCROLL_ENDSCROLL EVT_COMMAND_SCROLL_CHANGED
+#define EVT_SCROLL_ENDSCROLL EVT_SCROLL_CHANGED
 
 // Convenience macros for commonly-used commands
 #define EVT_CHECKBOX(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_CHECKBOX_CLICKED, winid, wxCommandEventHandler(func))
@@ -2870,7 +2903,7 @@ extern WXDLLIMPEXP_BASE wxList *wxPendingEvents;
 
 // Find a window with the focus, that is also a descendant of the given window.
 // This is used to determine the window to initially send commands to.
-wxWindow* wxFindFocusDescendant(wxWindow* ancestor);
+WXDLLIMPEXP_CORE wxWindow* wxFindFocusDescendant(wxWindow* ancestor);
 
 #endif // wxUSE_GUI