From ec39d7d1a18684025dbd868ecb49a6934bfa72f5 Mon Sep 17 00:00:00 2001 From: Bjoern Michaelsen Date: Mon, 1 Oct 2012 04:54:09 +0200 Subject: refactor out dbus setup --- vcl/unx/gtk/window/gtkframe.cxx | 38 ++++++++++++++++---------------------- 1 file changed, 16 insertions(+), 22 deletions(-) (limited to 'vcl') diff --git a/vcl/unx/gtk/window/gtkframe.cxx b/vcl/unx/gtk/window/gtkframe.cxx index 1abdbde1fb21..12c4caeca447 100644 --- a/vcl/unx/gtk/window/gtkframe.cxx +++ b/vcl/unx/gtk/window/gtkframe.cxx @@ -513,15 +513,9 @@ static void ObjectDestroyedNotify( gpointer data ) } static void -on_registrar_available (GDBusConnection * /*connection*/, - const gchar * /*name*/, - const gchar * /*name_owner*/, - gpointer user_data) +ensure_dbus_setup(GdkWindow* gdkWindow, GtkSalFrame* pSalFrame) { - SolarMutexGuard aGuard; - GtkSalFrame* pSalFrame = static_cast< GtkSalFrame* >( user_data ); - GdkWindow *gdkWindow = gtk_widget_get_window( pSalFrame->getWindow() ); - if ( gdkWindow != NULL ) + if ( gdkWindow != NULL && g_object_get_data( G_OBJECT( gdkWindow ), "g-lo-menubar" ) == NULL ) { GMenuModel* pMenuModel = G_MENU_MODEL(g_lo_menu_new()); GActionGroup* pActionGroup = ((GActionGroup*)g_lo_action_group_new(reinterpret_cast(pSalFrame))); @@ -564,6 +558,18 @@ on_registrar_available (GDBusConnection * /*connection*/, bDBusIsAvailable = sal_True; } +} + +static void +on_registrar_available (GDBusConnection * /*connection*/, + const gchar * /*name*/, + const gchar * /*name_owner*/, + gpointer user_data) +{ + SolarMutexGuard aGuard; + GtkSalFrame* pSalFrame = static_cast< GtkSalFrame* >( user_data ); + GdkWindow* gdkWindow = gtk_widget_get_window( pSalFrame->getWindow() ); + ensure_dbus_setup(gdkWindow, pSalFrame); GtkSalMenu* pSalMenu = static_cast< GtkSalMenu* >( pSalFrame->GetMenu() ); if ( pSalMenu != NULL ) { @@ -597,20 +603,7 @@ on_registrar_unavailable (GDBusConnection * /*connection*/, void GtkSalFrame::EnsureAppMenuWatch() { if(m_nWatcherId) - return; - GObject* pWindow = G_OBJECT(gtk_widget_get_window( GTK_WIDGET(getWindow()) )); - if(!pWindow) - return; - g_object_set_data_full( - pWindow, - "g-lo-menubar", - G_MENU_MODEL(g_lo_menu_new()), - ObjectDestroyedNotify); - g_object_set_data_full( - pWindow, - "g-lo-action-group", - G_ACTION_GROUP(g_lo_action_group_new( reinterpret_cast(this))), - ObjectDestroyedNotify); + g_bus_unwatch_name(m_nWatcherId); // Publish the menu only if AppMenu registrar is available. m_nWatcherId = g_bus_watch_name(G_BUS_TYPE_SESSION, "com.canonical.AppMenu.Registrar", @@ -619,6 +612,7 @@ void GtkSalFrame::EnsureAppMenuWatch() on_registrar_unavailable, reinterpret_cast(this), NULL); + ensure_dbus_setup(gtk_widget_get_window( GTK_WIDGET(getWindow()) ), this); } struct DisposeData -- cgit v1.2.3