]> git.saurik.com Git - wxWidgets.git/commitdiff
Workaround for Ubuntu 12.04 run time warning
authorPaul Cornett <paulcor@bullseye.com>
Tue, 5 Jun 2012 16:49:28 +0000 (16:49 +0000)
committerPaul Cornett <paulcor@bullseye.com>
Tue, 5 Jun 2012 16:49:28 +0000 (16:49 +0000)
"LIBDBUSMENU-GLIB-WARNING **: Trying to remove a child that doesn't believe we're it's parent."
Avoid calling gtk_widget_destroy() on a wxMenuBar attached to a frame
Fixes #14292

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71648 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/gtk/menu.h
src/gtk/menu.cpp

index 9e2f53f5a29b740a706f075e1438e7767fe63bd1..92bb3146d419d50f3bd297e4fcdfe7006e449239 100644 (file)
@@ -21,6 +21,7 @@ public:
     wxMenuBar();
     wxMenuBar(long style);
     wxMenuBar(size_t n, wxMenu *menus[], const wxString titles[], long style = 0);
     wxMenuBar();
     wxMenuBar(long style);
     wxMenuBar(size_t n, wxMenu *menus[], const wxString titles[], long style = 0);
+    ~wxMenuBar();
 
     // implement base class (pure) virtuals
     virtual bool Append( wxMenu *menu, const wxString &title );
 
     // implement base class (pure) virtuals
     virtual bool Append( wxMenu *menu, const wxString &title );
index 83bece8ee67467671804f66003fe2629cc99ec99..f0dbd471f767bdb18be9e2e8107fbf926f22f6aa 100644 (file)
@@ -58,6 +58,18 @@ static void DoCommonMenuCallbackCode(wxMenu *menu, wxMenuEvent& event)
 // wxMenuBar
 //-----------------------------------------------------------------------------
 
 // wxMenuBar
 //-----------------------------------------------------------------------------
 
+wxMenuBar::~wxMenuBar()
+{
+    if (m_widget)
+    {
+        // Work around a probable bug in Ubuntu 12.04 which causes a warning if
+        // gtk_widget_destroy() is called on a wxMenuBar attached to a frame
+        GtkWidget* widget = m_widget;
+        m_widget = NULL;
+        g_object_unref(widget);
+    }
+}
+
 void wxMenuBar::Init(size_t n, wxMenu *menus[], const wxString titles[], long style)
 {
 #if wxUSE_LIBHILDON || wxUSE_LIBHILDON2
 void wxMenuBar::Init(size_t n, wxMenu *menus[], const wxString titles[], long style)
 {
 #if wxUSE_LIBHILDON || wxUSE_LIBHILDON2
@@ -91,7 +103,7 @@ void wxMenuBar::Init(size_t n, wxMenu *menus[], const wxString titles[], long st
     GTKApplyWidgetStyle();
 #endif // wxUSE_LIBHILDON || wxUSE_LIBHILDON2/!wxUSE_LIBHILDON && !wxUSE_LIBHILDON2
 
     GTKApplyWidgetStyle();
 #endif // wxUSE_LIBHILDON || wxUSE_LIBHILDON2/!wxUSE_LIBHILDON && !wxUSE_LIBHILDON2
 
-    g_object_ref(m_widget);
+    g_object_ref_sink(m_widget);
 
     for (size_t i = 0; i < n; ++i )
         Append(menus[i], titles[i]);
 
     for (size_t i = 0; i < n; ++i )
         Append(menus[i], titles[i]);