From 5478f2210d58ae594b5981695f4004c2ec9655bd Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 25 Aug 2006 13:22:32 +0000 Subject: [PATCH] changed GTKCallbackCommonPrologue() to return -1 in addition to true and false to allow returning immediately with true return code git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@40818 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/gtk/window.h | 6 ++++-- src/gtk/window.cpp | 34 +++++++++++++++++----------------- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/include/wx/gtk/window.h b/include/wx/gtk/window.h index 8106f545cd..87003b1e69 100644 --- a/include/wx/gtk/window.h +++ b/include/wx/gtk/window.h @@ -161,8 +161,10 @@ public: virtual GtkWidget* GetConnectWidget(); void ConnectWidget( GtkWidget *widget ); - // Called from several event handlers - bool GTKCallbackCommonPrologue(struct _GdkEventAny *event) const; + // Called from several event handlers, if it returns true or false, the + // same value should be immediately returned by the handler without doing + // anything else. If it returns -1, the handler should continue as usual + int GTKCallbackCommonPrologue(struct _GdkEventAny *event) const; protected: // Override GTKWidgetNeedsMnemonic and return true if your diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index b5ebaaea80..c52acc6241 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -1410,7 +1410,7 @@ wxWindowGTK *FindWindowForMouseEvent(wxWindowGTK *win, wxCoord& x, wxCoord& y) // common event handlers helpers // ---------------------------------------------------------------------------- -bool wxWindowGTK::GTKCallbackCommonPrologue(GdkEventAny *event) const +int wxWindowGTK::GTKCallbackCommonPrologue(GdkEventAny *event) const { DEBUG_MAIN_THREAD @@ -1418,23 +1418,23 @@ bool wxWindowGTK::GTKCallbackCommonPrologue(GdkEventAny *event) const wxapp_install_idle_handler(); if (!m_hasVMT) - return false; + return FALSE; if (g_blockEventsOnDrag) - return true; + return TRUE; if (g_blockEventsOnScroll) - return true; + return TRUE; if (!GTKIsOwnWindow(event->window)) - return false; + return FALSE; - return true; + return -1; } // overloads for all GDK event types we use here: we need to have this as // GdkEventXXX can't be implicitly cast to GdkEventAny even if it, in fact, // derives from it in the sense that the structs have the same layout #define wxDEFINE_COMMON_PROLOGUE_OVERLOAD(T) \ - static bool wxGtkCallbackCommonPrologue(T *event, wxWindowGTK *win) \ + static int wxGtkCallbackCommonPrologue(T *event, wxWindowGTK *win) \ { \ return win->GTKCallbackCommonPrologue((GdkEventAny *)event); \ } @@ -1445,6 +1445,11 @@ wxDEFINE_COMMON_PROLOGUE_OVERLOAD(GdkEventCrossing) #undef wxDEFINE_COMMON_PROLOGUE_OVERLOAD +#define wxCOMMON_CALLBACK_PROLOGUE(event, win) \ + const int rc = wxGtkCallbackCommonPrologue(event, win); \ + if ( rc != -1 ) \ + return rc + // send the wxChildFocusEvent and wxFocusEvent, common code of // gtk_window_focus_in_callback() and SetFocus() static bool DoSendFocusEvents(wxWindow *win) @@ -1473,8 +1478,7 @@ gtk_window_button_press_callback( GtkWidget *widget, GdkEventButton *gdk_event, wxWindowGTK *win ) { - if ( !wxGtkCallbackCommonPrologue(gdk_event, win) ) - return FALSE; + wxCOMMON_CALLBACK_PROLOGUE(gdk_event, win); if (win->m_wxwindow && (g_focusWindow != win) && win->AcceptsFocus()) { @@ -1646,8 +1650,7 @@ gtk_window_button_release_callback( GtkWidget *widget, GdkEventButton *gdk_event, wxWindowGTK *win ) { - if ( !wxGtkCallbackCommonPrologue(gdk_event, win) ) - return FALSE; + wxCOMMON_CALLBACK_PROLOGUE(gdk_event, win); wxEventType event_type = wxEVT_NULL; @@ -1703,8 +1706,7 @@ gtk_window_motion_notify_callback( GtkWidget *widget, GdkEventMotion *gdk_event, wxWindowGTK *win ) { - if ( !wxGtkCallbackCommonPrologue(gdk_event, win) ) - return FALSE; + wxCOMMON_CALLBACK_PROLOGUE(gdk_event, win); if (gdk_event->is_hint) { @@ -1956,8 +1958,7 @@ gtk_window_enter_callback( GtkWidget *widget, GdkEventCrossing *gdk_event, wxWindowGTK *win ) { - if ( !wxGtkCallbackCommonPrologue(gdk_event, win) ) - return FALSE; + wxCOMMON_CALLBACK_PROLOGUE(gdk_event, win); // Event was emitted after a grab if (gdk_event->mode != GDK_CROSSING_NORMAL) return FALSE; @@ -2001,8 +2002,7 @@ gtk_window_leave_callback( GtkWidget *widget, GdkEventCrossing *gdk_event, wxWindowGTK *win ) { - if ( !wxGtkCallbackCommonPrologue(gdk_event, win) ) - return FALSE; + wxCOMMON_CALLBACK_PROLOGUE(gdk_event, win); // Event was emitted after an ungrab if (gdk_event->mode != GDK_CROSSING_NORMAL) return FALSE; -- 2.45.2