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
This commit is contained in:
Vadim Zeitlin
2006-08-25 13:22:32 +00:00
parent 06a7419e71
commit 5478f2210d
2 changed files with 21 additions and 19 deletions

View File

@@ -161,8 +161,10 @@ public:
virtual GtkWidget* GetConnectWidget(); virtual GtkWidget* GetConnectWidget();
void ConnectWidget( GtkWidget *widget ); void ConnectWidget( GtkWidget *widget );
// Called from several event handlers // Called from several event handlers, if it returns true or false, the
bool GTKCallbackCommonPrologue(struct _GdkEventAny *event) const; // 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: protected:
// Override GTKWidgetNeedsMnemonic and return true if your // Override GTKWidgetNeedsMnemonic and return true if your

View File

@@ -1410,7 +1410,7 @@ wxWindowGTK *FindWindowForMouseEvent(wxWindowGTK *win, wxCoord& x, wxCoord& y)
// common event handlers helpers // common event handlers helpers
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
bool wxWindowGTK::GTKCallbackCommonPrologue(GdkEventAny *event) const int wxWindowGTK::GTKCallbackCommonPrologue(GdkEventAny *event) const
{ {
DEBUG_MAIN_THREAD DEBUG_MAIN_THREAD
@@ -1418,23 +1418,23 @@ bool wxWindowGTK::GTKCallbackCommonPrologue(GdkEventAny *event) const
wxapp_install_idle_handler(); wxapp_install_idle_handler();
if (!m_hasVMT) if (!m_hasVMT)
return false; return FALSE;
if (g_blockEventsOnDrag) if (g_blockEventsOnDrag)
return true; return TRUE;
if (g_blockEventsOnScroll) if (g_blockEventsOnScroll)
return true; return TRUE;
if (!GTKIsOwnWindow(event->window)) 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 // 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, // 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 // derives from it in the sense that the structs have the same layout
#define wxDEFINE_COMMON_PROLOGUE_OVERLOAD(T) \ #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); \ return win->GTKCallbackCommonPrologue((GdkEventAny *)event); \
} }
@@ -1445,6 +1445,11 @@ wxDEFINE_COMMON_PROLOGUE_OVERLOAD(GdkEventCrossing)
#undef wxDEFINE_COMMON_PROLOGUE_OVERLOAD #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 // send the wxChildFocusEvent and wxFocusEvent, common code of
// gtk_window_focus_in_callback() and SetFocus() // gtk_window_focus_in_callback() and SetFocus()
static bool DoSendFocusEvents(wxWindow *win) static bool DoSendFocusEvents(wxWindow *win)
@@ -1473,8 +1478,7 @@ gtk_window_button_press_callback( GtkWidget *widget,
GdkEventButton *gdk_event, GdkEventButton *gdk_event,
wxWindowGTK *win ) wxWindowGTK *win )
{ {
if ( !wxGtkCallbackCommonPrologue(gdk_event, win) ) wxCOMMON_CALLBACK_PROLOGUE(gdk_event, win);
return FALSE;
if (win->m_wxwindow && (g_focusWindow != win) && win->AcceptsFocus()) if (win->m_wxwindow && (g_focusWindow != win) && win->AcceptsFocus())
{ {
@@ -1646,8 +1650,7 @@ gtk_window_button_release_callback( GtkWidget *widget,
GdkEventButton *gdk_event, GdkEventButton *gdk_event,
wxWindowGTK *win ) wxWindowGTK *win )
{ {
if ( !wxGtkCallbackCommonPrologue(gdk_event, win) ) wxCOMMON_CALLBACK_PROLOGUE(gdk_event, win);
return FALSE;
wxEventType event_type = wxEVT_NULL; wxEventType event_type = wxEVT_NULL;
@@ -1703,8 +1706,7 @@ gtk_window_motion_notify_callback( GtkWidget *widget,
GdkEventMotion *gdk_event, GdkEventMotion *gdk_event,
wxWindowGTK *win ) wxWindowGTK *win )
{ {
if ( !wxGtkCallbackCommonPrologue(gdk_event, win) ) wxCOMMON_CALLBACK_PROLOGUE(gdk_event, win);
return FALSE;
if (gdk_event->is_hint) if (gdk_event->is_hint)
{ {
@@ -1956,8 +1958,7 @@ gtk_window_enter_callback( GtkWidget *widget,
GdkEventCrossing *gdk_event, GdkEventCrossing *gdk_event,
wxWindowGTK *win ) wxWindowGTK *win )
{ {
if ( !wxGtkCallbackCommonPrologue(gdk_event, win) ) wxCOMMON_CALLBACK_PROLOGUE(gdk_event, win);
return FALSE;
// Event was emitted after a grab // Event was emitted after a grab
if (gdk_event->mode != GDK_CROSSING_NORMAL) return FALSE; if (gdk_event->mode != GDK_CROSSING_NORMAL) return FALSE;
@@ -2001,8 +2002,7 @@ gtk_window_leave_callback( GtkWidget *widget,
GdkEventCrossing *gdk_event, GdkEventCrossing *gdk_event,
wxWindowGTK *win ) wxWindowGTK *win )
{ {
if ( !wxGtkCallbackCommonPrologue(gdk_event, win) ) wxCOMMON_CALLBACK_PROLOGUE(gdk_event, win);
return FALSE;
// Event was emitted after an ungrab // Event was emitted after an ungrab
if (gdk_event->mode != GDK_CROSSING_NORMAL) return FALSE; if (gdk_event->mode != GDK_CROSSING_NORMAL) return FALSE;