]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/event.h
check that the version of __sync_sub_and_fetch that returns a value is supported...
[wxWidgets.git] / include / wx / event.h
index f7e28edb762200c3f533030b975910da60722a75..ffea5e3562f68ce87b5215c226891bcca8c5f96b 100644 (file)
@@ -9,8 +9,8 @@
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#ifndef _WX_EVENT_H__
-#define _WX_EVENT_H__
+#ifndef _WX_EVENT_H_
+#define _WX_EVENT_H_
 
 #include "wx/defs.h"
 #include "wx/cpp.h"
 
 #include "wx/defs.h"
 #include "wx/cpp.h"
     #include "wx/cursor.h"
 #endif
 
     #include "wx/cursor.h"
 #endif
 
-#include "wx/thread.h"
-
 #include "wx/dynarray.h"
 
 // ----------------------------------------------------------------------------
 // forward declarations
 // ----------------------------------------------------------------------------
 
 #include "wx/dynarray.h"
 
 // ----------------------------------------------------------------------------
 // forward declarations
 // ----------------------------------------------------------------------------
 
-class WXDLLIMPEXP_BASE wxList;
-
+class WXDLLIMPEXP_FWD_BASE wxList;
+#if wxUSE_THREADS
+    class WXDLLIMPEXP_FWD_BASE wxCriticalSection;
+#endif
 #if wxUSE_GUI
 #if wxUSE_GUI
-    class WXDLLIMPEXP_CORE wxDC;
-    class WXDLLIMPEXP_CORE wxMenu;
-    class WXDLLIMPEXP_CORE wxWindow;
-    class WXDLLIMPEXP_CORE wxWindowBase;
+    class WXDLLIMPEXP_FWD_CORE wxDC;
+    class WXDLLIMPEXP_FWD_CORE wxMenu;
+    class WXDLLIMPEXP_FWD_CORE wxWindow;
+    class WXDLLIMPEXP_FWD_CORE wxWindowBase;
 #endif // wxUSE_GUI
 
 #endif // wxUSE_GUI
 
-class WXDLLIMPEXP_BASE wxEvtHandler;
+class WXDLLIMPEXP_FWD_BASE wxEvtHandler;
 
 // ----------------------------------------------------------------------------
 // Event types
 
 // ----------------------------------------------------------------------------
 // Event types
@@ -155,9 +155,12 @@ BEGIN_DECLARE_EVENT_TYPES()
     DECLARE_EVENT_TYPE(wxEVT_COMMAND_TOOL_ENTER, 17)
     DECLARE_EVENT_TYPE(wxEVT_COMMAND_SPINCTRL_UPDATED, 18)
 
     DECLARE_EVENT_TYPE(wxEVT_COMMAND_TOOL_ENTER, 17)
     DECLARE_EVENT_TYPE(wxEVT_COMMAND_SPINCTRL_UPDATED, 18)
 
+    // Toolbar dropdown arrows
+    DECLARE_EVENT_TYPE(wxEVT_COMMAND_TOOL_DROPDOWN_CLICKED, 19)
+
         // Sockets and timers send events, too
     DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_BASE, wxEVT_SOCKET, 50)
         // Sockets and timers send events, too
     DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_BASE, wxEVT_SOCKET, 50)
-    DECLARE_EVENT_TYPE(wxEVT_TIMER , 80)
+    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_BASE, wxEVT_TIMER , 80)
 
         // Mouse event types
     DECLARE_EVENT_TYPE(wxEVT_LEFT_DOWN, 100)
 
         // Mouse event types
     DECLARE_EVENT_TYPE(wxEVT_LEFT_DOWN, 100)
@@ -176,6 +179,12 @@ BEGIN_DECLARE_EVENT_TYPES()
     DECLARE_EVENT_TYPE(wxEVT_KILL_FOCUS, 113)
     DECLARE_EVENT_TYPE(wxEVT_CHILD_FOCUS, 114)
     DECLARE_EVENT_TYPE(wxEVT_MOUSEWHEEL, 115)
     DECLARE_EVENT_TYPE(wxEVT_KILL_FOCUS, 113)
     DECLARE_EVENT_TYPE(wxEVT_CHILD_FOCUS, 114)
     DECLARE_EVENT_TYPE(wxEVT_MOUSEWHEEL, 115)
+    DECLARE_EVENT_TYPE(wxEVT_AUX1_DOWN, 116)
+    DECLARE_EVENT_TYPE(wxEVT_AUX1_UP, 117)
+    DECLARE_EVENT_TYPE(wxEVT_AUX1_DCLICK, 118)
+    DECLARE_EVENT_TYPE(wxEVT_AUX2_DOWN, 119)
+    DECLARE_EVENT_TYPE(wxEVT_AUX2_UP, 120)
+    DECLARE_EVENT_TYPE(wxEVT_AUX2_DCLICK, 121)
 
         // Non-client mouse events
     DECLARE_EVENT_TYPE(wxEVT_NC_LEFT_DOWN, 200)
 
         // Non-client mouse events
     DECLARE_EVENT_TYPE(wxEVT_NC_LEFT_DOWN, 200)
@@ -266,13 +275,15 @@ 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_UPDATE_UI, 440)
     DECLARE_EVENT_TYPE(wxEVT_SIZING, 441)
     DECLARE_EVENT_TYPE(wxEVT_MOVING, 442)
-    DECLARE_EVENT_TYPE(wxEVT_HIBERNATE, 443)
+    DECLARE_EVENT_TYPE(wxEVT_MOVE_START, 443)
+    DECLARE_EVENT_TYPE(wxEVT_MOVE_END, 444)
+    DECLARE_EVENT_TYPE(wxEVT_HIBERNATE, 445)
     // more power events follow -- see wx/power.h
 
         // Clipboard events
     // more power events follow -- see wx/power.h
 
         // Clipboard events
-    DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_COPY, 444)
-    DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_CUT, 445)
-    DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_PASTE, 446)
+    DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_COPY, 446)
+    DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_CUT, 447)
+    DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_PASTE, 448)
 
         // Generic command events
         // Note: a click is a higher-level event than button down/up
 
         // Generic command events
         // Note: a click is a higher-level event than button down/up
@@ -353,7 +364,7 @@ public:
     // to allow the event processing by the base classes (calling event.Skip()
     // is the analog of calling the base class version of a virtual function)
     void Skip(bool skip = true) { m_skipped = skip; }
     // to allow the event processing by the base classes (calling event.Skip()
     // is the analog of calling the base class version of a virtual function)
     void Skip(bool skip = true) { m_skipped = skip; }
-    bool GetSkipped() const { return m_skipped; };
+    bool GetSkipped() const { return m_skipped; }
 
     // this function is used to create a copy of the event polymorphically and
     // all derived classes must implement it because otherwise wxPostEvent()
 
     // this function is used to create a copy of the event polymorphically and
     // all derived classes must implement it because otherwise wxPostEvent()
@@ -384,11 +395,7 @@ public:
         m_propagationLevel = propagationLevel;
     }
 
         m_propagationLevel = propagationLevel;
     }
 
-#if WXWIN_COMPATIBILITY_2_4
-public:
-#else
 protected:
 protected:
-#endif
     wxObject*         m_eventObject;
     wxEventType       m_eventType;
     long              m_timeStamp;
     wxObject*         m_eventObject;
     wxEventType       m_eventType;
     long              m_timeStamp;
@@ -406,17 +413,13 @@ protected:
     // backwards compatibility as it is new
     int               m_propagationLevel;
 
     // backwards compatibility as it is new
     int               m_propagationLevel;
 
-#if WXWIN_COMPATIBILITY_2_4
-public:
-#else
 protected:
 protected:
-#endif
     bool              m_skipped;
     bool              m_isCommandEvent;
 
 private:
     // it needs to access our m_propagationLevel
     bool              m_skipped;
     bool              m_isCommandEvent;
 
 private:
     // it needs to access our m_propagationLevel
-    friend class WXDLLIMPEXP_BASE wxPropagateOnce;
+    friend class WXDLLIMPEXP_FWD_BASE wxPropagateOnce;
 
     DECLARE_ABSTRACT_CLASS(wxEvent)
 };
 
     DECLARE_ABSTRACT_CLASS(wxEvent)
 };
@@ -492,26 +495,6 @@ private:
  wxEVT_COMMAND_TOGGLEBUTTON_CLICKED
 */
 
  wxEVT_COMMAND_TOGGLEBUTTON_CLICKED
 */
 
-#if WXWIN_COMPATIBILITY_2_4
-// Backwards compatibility for wxCommandEvent::m_commandString, will lead to compilation errors in some cases of usage
-class WXDLLIMPEXP_CORE wxCommandEvent;
-
-class WXDLLIMPEXP_CORE wxCommandEventStringHelper
-{
-public:
-    wxCommandEventStringHelper(wxCommandEvent * evt)
-        : m_evt(evt)
-        { }
-
-    void operator=(const wxString &str);
-    operator wxString();
-    const wxChar* c_str() const;
-
-private:
-    wxCommandEvent* m_evt;
-};
-#endif
-
 class WXDLLIMPEXP_CORE wxCommandEvent : public wxEvent
 {
 public:
 class WXDLLIMPEXP_CORE wxCommandEvent : public wxEvent
 {
 public:
@@ -519,9 +502,6 @@ public:
 
     wxCommandEvent(const wxCommandEvent& event)
         : wxEvent(event),
 
     wxCommandEvent(const wxCommandEvent& event)
         : wxEvent(event),
-#if WXWIN_COMPATIBILITY_2_4
-          m_commandString(this),
-#endif
           m_cmdString(event.m_cmdString),
           m_commandInt(event.m_commandInt),
           m_extraLong(event.m_extraLong),
           m_cmdString(event.m_cmdString),
           m_commandInt(event.m_commandInt),
           m_extraLong(event.m_extraLong),
@@ -558,12 +538,7 @@ public:
 
     virtual wxEvent *Clone() const { return new wxCommandEvent(*this); }
 
 
     virtual wxEvent *Clone() const { return new wxCommandEvent(*this); }
 
-#if WXWIN_COMPATIBILITY_2_4
-public:
-    wxCommandEventStringHelper m_commandString;
-#else
 protected:
 protected:
-#endif
     wxString          m_cmdString;     // String event argument
     int               m_commandInt;
     long              m_extraLong;     // Additional information (e.g. select/deselect)
     wxString          m_cmdString;     // String event argument
     int               m_commandInt;
     long              m_extraLong;     // Additional information (e.g. select/deselect)
@@ -574,23 +549,6 @@ private:
     DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxCommandEvent)
 };
 
     DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxCommandEvent)
 };
 
-#if WXWIN_COMPATIBILITY_2_4
-inline void wxCommandEventStringHelper::operator=(const wxString &str)
-{
-    m_evt->SetString(str);
-}
-
-inline wxCommandEventStringHelper::operator wxString()
-{
-    return m_evt->GetString();
-}
-
-inline const wxChar* wxCommandEventStringHelper::c_str() const
-{
-    return m_evt->GetString().c_str();
-}
-#endif
-
 // this class adds a possibility to react (from the user) code to a control
 // notification: allow or veto the operation being reported.
 class WXDLLIMPEXP_CORE wxNotifyEvent  : public wxCommandEvent
 // this class adds a possibility to react (from the user) code to a control
 // notification: allow or veto the operation being reported.
 class WXDLLIMPEXP_CORE wxNotifyEvent  : public wxCommandEvent
@@ -682,11 +640,7 @@ public:
 
     virtual wxEvent *Clone() const { return new wxScrollWinEvent(*this); }
 
 
     virtual wxEvent *Clone() const { return new wxScrollWinEvent(*this); }
 
-#if WXWIN_COMPATIBILITY_2_4
-public:
-#else
 protected:
 protected:
-#endif
     int               m_commandInt;
     long              m_extraLong;
 
     int               m_commandInt;
     long              m_extraLong;
 
@@ -730,14 +684,17 @@ enum
     wxMOUSE_BTN_NONE    = 0,
     wxMOUSE_BTN_LEFT    = 1,
     wxMOUSE_BTN_MIDDLE  = 2,
     wxMOUSE_BTN_NONE    = 0,
     wxMOUSE_BTN_LEFT    = 1,
     wxMOUSE_BTN_MIDDLE  = 2,
-    wxMOUSE_BTN_RIGHT   = 3
+    wxMOUSE_BTN_RIGHT   = 3,
+    wxMOUSE_BTN_AUX1    = 4,
+    wxMOUSE_BTN_AUX2    = 5,
+    wxMOUSE_BTN_MAX
 };
 
 class WXDLLIMPEXP_CORE wxMouseEvent : public wxEvent
 {
 public:
     wxMouseEvent(wxEventType mouseType = wxEVT_NULL);
 };
 
 class WXDLLIMPEXP_CORE wxMouseEvent : public wxEvent
 {
 public:
     wxMouseEvent(wxEventType mouseType = wxEVT_NULL);
-    wxMouseEvent(const wxMouseEvent& event)    : wxEvent(event)
+    wxMouseEvent(const wxMouseEvent& event) : wxEvent(event)
         { Assign(event); }
 
     // Was it a button event? (*doesn't* mean: is any button *down*?)
         { Assign(event); }
 
     // Was it a button event? (*doesn't* mean: is any button *down*?)
@@ -779,20 +736,28 @@ public:
     bool LeftDown() const { return (m_eventType == wxEVT_LEFT_DOWN); }
     bool MiddleDown() const { return (m_eventType == wxEVT_MIDDLE_DOWN); }
     bool RightDown() const { return (m_eventType == wxEVT_RIGHT_DOWN); }
     bool LeftDown() const { return (m_eventType == wxEVT_LEFT_DOWN); }
     bool MiddleDown() const { return (m_eventType == wxEVT_MIDDLE_DOWN); }
     bool RightDown() const { return (m_eventType == wxEVT_RIGHT_DOWN); }
+    bool Aux1Down() const { return (m_eventType == wxEVT_AUX1_DOWN); }
+    bool Aux2Down() const { return (m_eventType == wxEVT_AUX2_DOWN); }
 
     bool LeftUp() const { return (m_eventType == wxEVT_LEFT_UP); }
     bool MiddleUp() const { return (m_eventType == wxEVT_MIDDLE_UP); }
     bool RightUp() const { return (m_eventType == wxEVT_RIGHT_UP); }
 
     bool LeftUp() const { return (m_eventType == wxEVT_LEFT_UP); }
     bool MiddleUp() const { return (m_eventType == wxEVT_MIDDLE_UP); }
     bool RightUp() const { return (m_eventType == wxEVT_RIGHT_UP); }
+    bool Aux1Up() const { return (m_eventType == wxEVT_AUX1_UP); }
+    bool Aux2Up() const { return (m_eventType == wxEVT_AUX2_UP); }
 
     bool LeftDClick() const { return (m_eventType == wxEVT_LEFT_DCLICK); }
     bool MiddleDClick() const { return (m_eventType == wxEVT_MIDDLE_DCLICK); }
     bool RightDClick() const { return (m_eventType == wxEVT_RIGHT_DCLICK); }
 
     bool LeftDClick() const { return (m_eventType == wxEVT_LEFT_DCLICK); }
     bool MiddleDClick() const { return (m_eventType == wxEVT_MIDDLE_DCLICK); }
     bool RightDClick() const { return (m_eventType == wxEVT_RIGHT_DCLICK); }
+    bool Aux1DClick() const { return (m_eventType == wxEVT_AUX1_UP); }
+    bool Aux2DClick() const { return (m_eventType == wxEVT_AUX2_UP); }
 
     // Find the current state of the mouse buttons (regardless
     // of current event type)
     bool LeftIsDown() const { return m_leftDown; }
     bool MiddleIsDown() const { return m_middleDown; }
     bool RightIsDown() const { return m_rightDown; }
 
     // Find the current state of the mouse buttons (regardless
     // of current event type)
     bool LeftIsDown() const { return m_leftDown; }
     bool MiddleIsDown() const { return m_middleDown; }
     bool RightIsDown() const { return m_rightDown; }
+    bool Aux1IsDown() const { return m_aux1Down; }
+    bool Aux2IsDown() const { return m_aux2Down; }
 
     // True if a button is down and the mouse is moving
     bool Dragging() const
 
     // True if a button is down and the mouse is moving
     bool Dragging() const
@@ -812,6 +777,10 @@ public:
     // True if the mouse is just leaving the window
     bool Leaving() const { return (m_eventType == wxEVT_LEAVE_WINDOW); }
 
     // True if the mouse is just leaving the window
     bool Leaving() const { return (m_eventType == wxEVT_LEAVE_WINDOW); }
 
+    // Returns the number of mouse clicks associated with this event.
+    int GetClickCount() const { return m_clickCount; }
+
+
     // Find the position of the event
     void GetPosition(wxCoord *xpos, wxCoord *ypos) const
     {
     // Find the position of the event
     void GetPosition(wxCoord *xpos, wxCoord *ypos) const
     {
@@ -863,7 +832,7 @@ public:
     // Returns the configured number of lines (or whatever) to be scrolled per
     // wheel action.  Defaults to one.
     int GetLinesPerAction() const { return m_linesPerAction; }
     // Returns the configured number of lines (or whatever) to be scrolled per
     // wheel action.  Defaults to one.
     int GetLinesPerAction() const { return m_linesPerAction; }
-    
+
     // Is the system set to do page scrolling?
     bool IsPageScroll() const { return ((unsigned int)m_linesPerAction == UINT_MAX); }
 
     // Is the system set to do page scrolling?
     bool IsPageScroll() const { return ((unsigned int)m_linesPerAction == UINT_MAX); }
 
@@ -877,12 +846,16 @@ public:
     bool          m_leftDown;
     bool          m_middleDown;
     bool          m_rightDown;
     bool          m_leftDown;
     bool          m_middleDown;
     bool          m_rightDown;
+    bool          m_aux1Down;
+    bool          m_aux2Down;
 
     bool          m_controlDown;
     bool          m_shiftDown;
     bool          m_altDown;
     bool          m_metaDown;
 
     bool          m_controlDown;
     bool          m_shiftDown;
     bool          m_altDown;
     bool          m_metaDown;
-    
+
+    int           m_clickCount;
+
     int           m_wheelAxis;
     int           m_wheelRotation;
     int           m_wheelDelta;
     int           m_wheelAxis;
     int           m_wheelRotation;
     int           m_wheelDelta;
@@ -1148,11 +1121,7 @@ public:
 
     virtual wxEvent *Clone() const { return new wxMoveEvent(*this); }
 
 
     virtual wxEvent *Clone() const { return new wxMoveEvent(*this); }
 
-#if WXWIN_COMPATIBILITY_2_4
-public:
-#else
 protected:
 protected:
-#endif
     wxPoint m_pos;
     wxRect m_rect;
 
     wxPoint m_pos;
     wxRect m_rect;
 
@@ -1240,11 +1209,7 @@ public:
 
     virtual wxEvent *Clone() const { return new wxEraseEvent(*this); }
 
 
     virtual wxEvent *Clone() const { return new wxEraseEvent(*this); }
 
-#if WXWIN_COMPATIBILITY_2_4
-public:
-#else
 protected:
 protected:
-#endif
     wxDC *m_dc;
 
 private:
     wxDC *m_dc;
 
 private:
@@ -1530,11 +1495,7 @@ enum
 
 class WXDLLIMPEXP_CORE wxJoystickEvent : public wxEvent
 {
 
 class WXDLLIMPEXP_CORE wxJoystickEvent : public wxEvent
 {
-#if WXWIN_COMPATIBILITY_2_4
-public:
-#else
 protected:
 protected:
-#endif
     wxPoint   m_pos;
     int       m_zPosition;
     int       m_buttonChange;   // Which button changed?
     wxPoint   m_pos;
     int       m_zPosition;
     int       m_buttonChange;   // Which button changed?
@@ -1797,7 +1758,7 @@ public:
 
     virtual wxEvent *Clone() const { return new wxMouseCaptureChangedEvent(*this); }
 
 
     virtual wxEvent *Clone() const { return new wxMouseCaptureChangedEvent(*this); }
 
-    wxWindow* GetCapturedWindow() const { return m_gainedCapture; };
+    wxWindow* GetCapturedWindow() const { return m_gainedCapture; }
 
 private:
     wxWindow* m_gainedCapture;
 
 private:
     wxWindow* m_gainedCapture;
@@ -2134,6 +2095,8 @@ private:
     DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxContextMenuEvent)
 };
 
     DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxContextMenuEvent)
 };
 
+#endif // wxUSE_GUI
+
 // Idle event
 /*
  wxEVT_IDLE
 // Idle event
 /*
  wxEVT_IDLE
@@ -2153,7 +2116,7 @@ enum wxIdleMode
     wxIDLE_PROCESS_SPECIFIED
 };
 
     wxIDLE_PROCESS_SPECIFIED
 };
 
-class WXDLLIMPEXP_CORE wxIdleEvent : public wxEvent
+class WXDLLIMPEXP_BASE wxIdleEvent : public wxEvent
 {
 public:
     wxIdleEvent()
 {
 public:
     wxIdleEvent()
@@ -2178,9 +2141,6 @@ public:
     // Returns the idle event mode
     static wxIdleMode GetMode() { return sm_idleMode; }
 
     // Returns the idle event mode
     static wxIdleMode GetMode() { return sm_idleMode; }
 
-    // Can we send an idle event?
-    static bool CanSend(wxWindow* win);
-
 protected:
     bool m_requestMore;
     static wxIdleMode sm_idleMode;
 protected:
     bool m_requestMore;
     static wxIdleMode sm_idleMode;
@@ -2189,8 +2149,6 @@ private:
     DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxIdleEvent)
 };
 
     DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxIdleEvent)
 };
 
-#endif // wxUSE_GUI
-
 /* TODO
  wxEVT_MOUSE_CAPTURE_CHANGED,
  wxEVT_SETTING_CHANGED, // WM_WININICHANGE (NT) / WM_SETTINGCHANGE (Win95)
 /* TODO
  wxEVT_MOUSE_CAPTURE_CHANGED,
  wxEVT_SETTING_CHANGED, // WM_WININICHANGE (NT) / WM_SETTINGCHANGE (Win95)
@@ -2354,8 +2312,10 @@ public:
     // Clear table
     void Clear();
 
     // Clear table
     void Clear();
 
+#if defined(__WXDEBUG__) && wxUSE_MEMORY_TRACING
     // Clear all tables
     static void ClearAll();
     // Clear all tables
     static void ClearAll();
+#endif // __WXDEBUG__ && wxUSE_MEMORY_TRACING
 
 protected:
     // Init the hash table with the entries of the static event table.
 
 protected:
     // Init the hash table with the entries of the static event table.
@@ -2403,13 +2363,19 @@ public:
     // process an event right now
     virtual bool ProcessEvent(wxEvent& event);
 
     // process an event right now
     virtual bool ProcessEvent(wxEvent& event);
 
+    // Process an event by calling ProcessEvent and handling any exceptions
+    // thrown by event handlers. It's mostly useful when processing wx events
+    // when called from C code (e.g. in GTK+ callback) when the exception
+    // wouldn't correctly propagate to wxEventLoop.
+    bool SafelyProcessEvent(wxEvent& event);
+
     // add an event to be processed later
     // add an event to be processed later
-    void AddPendingEvent(wxEvent& event);
+    virtual void AddPendingEvent(const wxEvent& event);
 
     void ProcessPendingEvents();
 
 #if wxUSE_THREADS
 
     void ProcessPendingEvents();
 
 #if wxUSE_THREADS
-    bool ProcessThreadEvent(wxEvent& event);
+    bool ProcessThreadEvent(const wxEvent& event);
 #endif
 
     // Dynamic association of a member function handler with the event handler,
 #endif
 
     // Dynamic association of a member function handler with the event handler,
@@ -2565,7 +2531,7 @@ private:
 
 // Post a message to the given eventhandler which will be processed during the
 // next event loop iteration
 
 // Post a message to the given eventhandler which will be processed during the
 // next event loop iteration
-inline void wxPostEvent(wxEvtHandler *dest, wxEvent& event)
+inline void wxPostEvent(wxEvtHandler *dest, const wxEvent& event)
 {
     wxCHECK_RET( dest, wxT("need an object to post event to in wxPostEvent") );
 
 {
     wxCHECK_RET( dest, wxT("need an object to post event to in wxPostEvent") );
 
@@ -2641,13 +2607,6 @@ typedef void (wxEvtHandler::*wxMouseCaptureChangedEventFunction)(wxMouseCaptureC
 typedef void (wxEvtHandler::*wxMouseCaptureLostEventFunction)(wxMouseCaptureLostEvent&);
 typedef void (wxEvtHandler::*wxClipboardTextEventFunction)(wxClipboardTextEvent&);
 
 typedef void (wxEvtHandler::*wxMouseCaptureLostEventFunction)(wxMouseCaptureLostEvent&);
 typedef void (wxEvtHandler::*wxClipboardTextEventFunction)(wxClipboardTextEvent&);
 
-// these typedefs don't have the same name structure as the others, keep for
-// backwards compatibility only
-#if WXWIN_COMPATIBILITY_2_4
-    typedef wxSysColourChangedEventFunction wxSysColourChangedFunction;
-    typedef wxDisplayChangedEventFunction wxDisplayChangedFunction;
-#endif // WXWIN_COMPATIBILITY_2_4
-
 
 #define wxCommandEventHandler(func) \
     (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxCommandEventFunction, &func)
 
 #define wxCommandEventHandler(func) \
     (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxCommandEventFunction, &func)
@@ -2901,6 +2860,8 @@ typedef void (wxEvtHandler::*wxClipboardTextEventFunction)(wxClipboardTextEvent&
 #define EVT_SIZING(func)  wx__DECLARE_EVT0(wxEVT_SIZING, wxSizeEventHandler(func))
 #define EVT_MOVE(func)  wx__DECLARE_EVT0(wxEVT_MOVE, wxMoveEventHandler(func))
 #define EVT_MOVING(func)  wx__DECLARE_EVT0(wxEVT_MOVING, wxMoveEventHandler(func))
 #define EVT_SIZING(func)  wx__DECLARE_EVT0(wxEVT_SIZING, wxSizeEventHandler(func))
 #define EVT_MOVE(func)  wx__DECLARE_EVT0(wxEVT_MOVE, wxMoveEventHandler(func))
 #define EVT_MOVING(func)  wx__DECLARE_EVT0(wxEVT_MOVING, wxMoveEventHandler(func))
+#define EVT_MOVE_START(func)  wx__DECLARE_EVT0(wxEVT_MOVE_START, wxMoveEventHandler(func))
+#define EVT_MOVE_END(func)  wx__DECLARE_EVT0(wxEVT_MOVE_END, wxMoveEventHandler(func))
 #define EVT_CLOSE(func)  wx__DECLARE_EVT0(wxEVT_CLOSE_WINDOW, wxCloseEventHandler(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_CLOSE(func)  wx__DECLARE_EVT0(wxEVT_CLOSE_WINDOW, wxCloseEventHandler(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))
@@ -2956,19 +2917,31 @@ typedef void (wxEvtHandler::*wxClipboardTextEventFunction)(wxClipboardTextEvent&
 #define EVT_LEAVE_WINDOW(func) wx__DECLARE_EVT0(wxEVT_LEAVE_WINDOW, wxMouseEventHandler(func))
 #define EVT_ENTER_WINDOW(func) wx__DECLARE_EVT0(wxEVT_ENTER_WINDOW, wxMouseEventHandler(func))
 #define EVT_MOUSEWHEEL(func) wx__DECLARE_EVT0(wxEVT_MOUSEWHEEL, wxMouseEventHandler(func))
 #define EVT_LEAVE_WINDOW(func) wx__DECLARE_EVT0(wxEVT_LEAVE_WINDOW, wxMouseEventHandler(func))
 #define EVT_ENTER_WINDOW(func) wx__DECLARE_EVT0(wxEVT_ENTER_WINDOW, wxMouseEventHandler(func))
 #define EVT_MOUSEWHEEL(func) wx__DECLARE_EVT0(wxEVT_MOUSEWHEEL, wxMouseEventHandler(func))
+#define EVT_MOUSE_AUX1_DOWN(func) wx__DECLARE_EVT0(wxEVT_AUX1_DOWN, wxMouseEventHandler(func))
+#define EVT_MOUSE_AUX1_UP(func) wx__DECLARE_EVT0(wxEVT_AUX1_UP, wxMouseEventHandler(func))
+#define EVT_MOUSE_AUX1_DCLICK(func) wx__DECLARE_EVT0(wxEVT_AUX1_DCLICK, wxMouseEventHandler(func))
+#define EVT_MOUSE_AUX2_DOWN(func) wx__DECLARE_EVT0(wxEVT_AUX2_DOWN, wxMouseEventHandler(func))
+#define EVT_MOUSE_AUX2_UP(func) wx__DECLARE_EVT0(wxEVT_AUX2_UP, wxMouseEventHandler(func))
+#define EVT_MOUSE_AUX2_DCLICK(func) wx__DECLARE_EVT0(wxEVT_AUX2_DCLICK, wxMouseEventHandler(func))
 
 // All mouse events
 #define EVT_MOUSE_EVENTS(func) \
     EVT_LEFT_DOWN(func) \
     EVT_LEFT_UP(func) \
 
 // All mouse events
 #define EVT_MOUSE_EVENTS(func) \
     EVT_LEFT_DOWN(func) \
     EVT_LEFT_UP(func) \
+    EVT_LEFT_DCLICK(func) \
     EVT_MIDDLE_DOWN(func) \
     EVT_MIDDLE_UP(func) \
     EVT_MIDDLE_DOWN(func) \
     EVT_MIDDLE_UP(func) \
+    EVT_MIDDLE_DCLICK(func) \
     EVT_RIGHT_DOWN(func) \
     EVT_RIGHT_UP(func) \
     EVT_RIGHT_DOWN(func) \
     EVT_RIGHT_UP(func) \
-    EVT_MOTION(func) \
-    EVT_LEFT_DCLICK(func) \
-    EVT_MIDDLE_DCLICK(func) \
     EVT_RIGHT_DCLICK(func) \
     EVT_RIGHT_DCLICK(func) \
+    EVT_MOUSE_AUX1_DOWN(func) \
+    EVT_MOUSE_AUX1_UP(func) \
+    EVT_MOUSE_AUX1_DCLICK(func) \
+    EVT_MOUSE_AUX2_DOWN(func) \
+    EVT_MOUSE_AUX2_UP(func) \
+    EVT_MOUSE_AUX2_DCLICK(func) \
+    EVT_MOTION(func) \
     EVT_LEAVE_WINDOW(func) \
     EVT_ENTER_WINDOW(func) \
     EVT_MOUSEWHEEL(func)
     EVT_LEAVE_WINDOW(func) \
     EVT_ENTER_WINDOW(func) \
     EVT_MOUSEWHEEL(func)
@@ -3064,6 +3037,7 @@ typedef void (wxEvtHandler::*wxClipboardTextEventFunction)(wxClipboardTextEvent&
 #define EVT_VLBOX(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_VLBOX_SELECTED, winid, wxCommandEventHandler(func))
 #define EVT_COMBOBOX(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_COMBOBOX_SELECTED, winid, wxCommandEventHandler(func))
 #define EVT_TOOL(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_TOOL_CLICKED, winid, wxCommandEventHandler(func))
 #define EVT_VLBOX(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_VLBOX_SELECTED, winid, wxCommandEventHandler(func))
 #define EVT_COMBOBOX(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_COMBOBOX_SELECTED, winid, wxCommandEventHandler(func))
 #define EVT_TOOL(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_TOOL_CLICKED, winid, wxCommandEventHandler(func))
+#define EVT_TOOL_DROPDOWN(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_TOOL_DROPDOWN_CLICKED, winid, wxCommandEventHandler(func))
 #define EVT_TOOL_RANGE(id1, id2, func) wx__DECLARE_EVT2(wxEVT_COMMAND_TOOL_CLICKED, id1, id2, wxCommandEventHandler(func))
 #define EVT_TOOL_RCLICKED(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_TOOL_RCLICKED, winid, wxCommandEventHandler(func))
 #define EVT_TOOL_RCLICKED_RANGE(id1, id2, func) wx__DECLARE_EVT2(wxEVT_COMMAND_TOOL_RCLICKED, id1, id2, wxCommandEventHandler(func))
 #define EVT_TOOL_RANGE(id1, id2, func) wx__DECLARE_EVT2(wxEVT_COMMAND_TOOL_CLICKED, id1, id2, wxCommandEventHandler(func))
 #define EVT_TOOL_RCLICKED(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_TOOL_RCLICKED, winid, wxCommandEventHandler(func))
 #define EVT_TOOL_RCLICKED_RANGE(id1, id2, func) wx__DECLARE_EVT2(wxEVT_COMMAND_TOOL_RCLICKED, id1, id2, wxCommandEventHandler(func))
@@ -3086,12 +3060,6 @@ typedef void (wxEvtHandler::*wxClipboardTextEventFunction)(wxClipboardTextEvent&
 #define EVT_JOY_MOVE(func) wx__DECLARE_EVT0(wxEVT_JOY_MOVE, wxJoystickEventHandler(func))
 #define EVT_JOY_ZMOVE(func) wx__DECLARE_EVT0(wxEVT_JOY_ZMOVE, wxJoystickEventHandler(func))
 
 #define EVT_JOY_MOVE(func) wx__DECLARE_EVT0(wxEVT_JOY_MOVE, wxJoystickEventHandler(func))
 #define EVT_JOY_ZMOVE(func) wx__DECLARE_EVT0(wxEVT_JOY_ZMOVE, wxJoystickEventHandler(func))
 
-// These are obsolete, see _BUTTON_ events
-#if WXWIN_COMPATIBILITY_2_4
-    #define EVT_JOY_DOWN(func) EVT_JOY_BUTTON_DOWN(func)
-    #define EVT_JOY_UP(func) EVT_JOY_BUTTON_UP(func)
-#endif // WXWIN_COMPATIBILITY_2_4
-
 // All joystick events
 #define EVT_JOYSTICK_EVENTS(func) \
     EVT_JOY_BUTTON_DOWN(func) \
 // All joystick events
 #define EVT_JOYSTICK_EVENTS(func) \
     EVT_JOY_BUTTON_DOWN(func) \
@@ -3144,4 +3112,4 @@ WXDLLIMPEXP_CORE wxWindow* wxFindFocusDescendant(wxWindow* ancestor);
 
 #endif // wxUSE_GUI
 
 
 #endif // wxUSE_GUI
 
-#endif // _WX_EVENT_H__
+#endif // _WX_EVENT_H_