]> git.saurik.com Git - wxWidgets.git/commitdiff
remove duplicate wxTaskBarIconAreaBase::DoPopupMenu, extracting the one-line differen...
authorPaul Cornett <paulcor@bullseye.com>
Tue, 18 Mar 2008 04:06:50 +0000 (04:06 +0000)
committerPaul Cornett <paulcor@bullseye.com>
Tue, 18 Mar 2008 04:06:50 +0000 (04:06 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@52605 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/gtk/taskbarpriv.h
include/wx/gtk/window.h
src/gtk/taskbar.cpp
src/gtk/window.cpp

index f92b680ee15bd924c4e5812e30907de31b3ec77e..f4bb0a27f8f020d73a3d16065ebec0420171bd6d 100644 (file)
@@ -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
 };
 
index 7d8e2a90687fb510ca38fc1c51f63d33e6e7c94a..f2af094363a48456ea787459c3c71bbc001f0e53 100644 (file)
@@ -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();
index 86e5433c6be0bb4d2f1974ca230715f2619ea363..8035e5b3424ab6d59be2f2da24a9da3bbe2e7951 100644 (file)
@@ -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
index 6fd61448e0f9a8533dbec1d793b77d693dc57102..2ea22d82b23b2b0e209763f410cde89309db0f18 100644 (file)
@@ -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;