From edd6813c826edc2311548da53eb83e7f1bc18d2b Mon Sep 17 00:00:00 2001 From: Paul Cornett Date: Tue, 18 Mar 2008 04:06:50 +0000 Subject: [PATCH] remove duplicate wxTaskBarIconAreaBase::DoPopupMenu, extracting the one-line difference into a new virtual git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@52605 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/gtk/taskbarpriv.h | 2 +- include/wx/gtk/window.h | 1 + src/gtk/taskbar.cpp | 66 ++------------------------------------------ src/gtk/window.cpp | 23 +++++++-------- 4 files changed, 14 insertions(+), 78 deletions(-) diff --git a/include/wx/gtk/taskbarpriv.h b/include/wx/gtk/taskbarpriv.h index f92b680..f4bb0a2 100644 --- a/include/wx/gtk/taskbarpriv.h +++ b/include/wx/gtk/taskbarpriv.h @@ -26,7 +26,7 @@ public: protected: #if wxUSE_MENUS_NATIVE - virtual bool DoPopupMenu( wxMenu *menu, int x, int y ); + virtual void DoPopupMenuUpdateUI(wxMenu* menu); #endif // wxUSE_MENUS_NATIVE }; diff --git a/include/wx/gtk/window.h b/include/wx/gtk/window.h index 7d8e2a9..f2af094 100644 --- a/include/wx/gtk/window.h +++ b/include/wx/gtk/window.h @@ -324,6 +324,7 @@ protected: #if wxUSE_MENUS_NATIVE virtual bool DoPopupMenu( wxMenu *menu, int x, int y ); + virtual void DoPopupMenuUpdateUI(wxMenu* menu); #endif // wxUSE_MENUS_NATIVE virtual void DoCaptureMouse(); diff --git a/src/gtk/taskbar.cpp b/src/gtk/taskbar.cpp index 86e5433..8035e5b 100644 --- a/src/gtk/taskbar.cpp +++ b/src/gtk/taskbar.cpp @@ -82,72 +82,10 @@ bool wxTaskBarIconAreaBase::IsProtocolSupported() // Pop-up menu stuff //----------------------------------------------------------------------------- -extern "C" WXDLLIMPEXP_CORE void gtk_pop_hide_callback( GtkWidget *widget, bool* is_waiting ); - -extern WXDLLIMPEXP_CORE void SetInvokingWindow( wxMenu *menu, wxWindow* win ); - -extern "C" WXDLLIMPEXP_CORE - void wxPopupMenuPositionCallback( GtkMenu *menu, - gint *x, gint *y, - gboolean * WXUNUSED(whatever), - gpointer user_data ); - #if wxUSE_MENUS_NATIVE -bool wxTaskBarIconAreaBase::DoPopupMenu( wxMenu *menu, int x, int y ) +void wxTaskBarIconAreaBase::DoPopupMenuUpdateUI(wxMenu* menu) { - wxCHECK_MSG( m_widget != NULL, false, wxT("invalid window") ); - - wxCHECK_MSG( menu != NULL, false, wxT("invalid popup-menu") ); - - // NOTE: if you change this code, you need to update - // the same code in window.cpp as well. This - // is ugly code duplication, I know, - - SetInvokingWindow( menu, this ); - - menu->UpdateUI( m_invokingWindow ); - - bool is_waiting = true; - - gulong handler = g_signal_connect (menu->m_menu, "hide", - G_CALLBACK (gtk_pop_hide_callback), - &is_waiting); - - wxPoint pos; - gpointer userdata; - GtkMenuPositionFunc posfunc; - if ( x == -1 && y == -1 ) - { - // use GTK's default positioning algorithm - userdata = NULL; - posfunc = NULL; - } - else - { - pos = ClientToScreen(wxPoint(x, y)); - userdata = &pos; - posfunc = wxPopupMenuPositionCallback; - } - - gtk_menu_popup( - GTK_MENU(menu->m_menu), - (GtkWidget *) NULL, // parent menu shell - (GtkWidget *) NULL, // parent menu item - posfunc, // function to position it - userdata, // client data - 0, // button used to activate it - gtk_get_current_event_time() - ); - - while (is_waiting) - { - gtk_main_iteration(); - } - - g_signal_handler_disconnect (menu->m_menu, handler); - - return true; + menu->UpdateUI(m_invokingWindow); } - #endif // wxUSE_MENUS_NATIVE #endif // wxUSE_TASKBARICON diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index 6fd6144..2ea22d82 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -3833,13 +3833,7 @@ bool wxWindowGTK::SetBackgroundStyle(wxBackgroundStyle style) #if wxUSE_MENUS_NATIVE -extern "C" WXDLLIMPEXP_CORE -void gtk_pop_hide_callback( GtkWidget *WXUNUSED(widget), bool* is_waiting ) -{ - *is_waiting = false; -} - -WXDLLIMPEXP_CORE void SetInvokingWindow( wxMenu *menu, wxWindow* win ) +static void SetInvokingWindow( wxMenu *menu, wxWindow* win ) { menu->SetInvokingWindow( win ); @@ -3856,7 +3850,8 @@ WXDLLIMPEXP_CORE void SetInvokingWindow( wxMenu *menu, wxWindow* win ) } } -extern "C" WXDLLIMPEXP_CORE +extern "C" { +static void wxPopupMenuPositionCallback( GtkMenu *menu, gint *x, gint *y, gboolean * WXUNUSED(whatever), @@ -3875,6 +3870,12 @@ void wxPopupMenuPositionCallback( GtkMenu *menu, *x = pos->x < xmax ? pos->x : xmax; *y = pos->y < ymax ? pos->y : ymax; } +} + +void wxWindowGTK::DoPopupMenuUpdateUI(wxMenu* menu) +{ + menu->UpdateUI(); +} bool wxWindowGTK::DoPopupMenu( wxMenu *menu, int x, int y ) { @@ -3882,13 +3883,9 @@ bool wxWindowGTK::DoPopupMenu( wxMenu *menu, int x, int y ) wxCHECK_MSG( menu != NULL, false, wxT("invalid popup-menu") ); - // NOTE: if you change this code, you need to update - // the same code in taskbar.cpp as well. This - // is ugly code duplication, I know. - SetInvokingWindow( menu, this ); - menu->UpdateUI(); + DoPopupMenuUpdateUI(menu); wxPoint pos; gpointer userdata; -- 2.7.4