summaryrefslogtreecommitdiff
diff options
-rw-r--r--services/panel-main.c36
-rw-r--r--services/panel-service.c8
-rw-r--r--services/panel-service.h2
3 files changed, 46 insertions, 0 deletions
diff --git a/services/panel-main.c b/services/panel-main.c
index 14535fcde..f6488ba38 100644
--- a/services/panel-main.c
+++ b/services/panel-main.c
@@ -343,6 +343,31 @@ on_icon_theme_changed (GtkIconTheme* theme, GDBusConnection *connection)
}
}
+void
+on_unity_dbus_name_owner_changed_cb (GDBusConnection *connection,
+ const gchar *sender_name,
+ const gchar *object_path,
+ const gchar *interface_name,
+ const gchar *signal_name,
+ GVariant *parameters,
+ gpointer user_data)
+{
+ PanelService *service;
+ const gchar *owner_name;
+ const gchar *old_address;
+ const gchar *new_address;
+
+ g_variant_get (parameters, "(&s&s&s)", &owner_name, &old_address, &new_address);
+ g_debug ("%s: %s, %s -> %s", G_STRFUNC, owner_name, old_address, new_address);
+
+ service = user_data;
+
+ if (!new_address || *new_address == '\0')
+ {
+ panel_service_clear_remote_data (service);
+ }
+}
+
static void
on_bus_acquired (GDBusConnection *connection,
const gchar *name,
@@ -368,6 +393,17 @@ on_bus_acquired (GDBusConnection *connection,
g_signal_connect (gtk_icon_theme_get_default(), "changed",
G_CALLBACK (on_icon_theme_changed), connection);
+ g_dbus_connection_signal_subscribe (connection,
+ /*sender*/ NULL,
+ /*interface_name*/ "org.freedesktop.DBus",
+ /*member*/ "NameOwnerChanged",
+ /*object_path*/ "/org/freedesktop/DBus",
+ /*arg0*/ "com.canonical.Unity",
+ G_DBUS_SIGNAL_FLAGS_NONE,
+ on_unity_dbus_name_owner_changed_cb,
+ service,
+ NULL);
+
g_debug ("%s", G_STRFUNC);
g_assert (reg_id > 0);
}
diff --git a/services/panel-service.c b/services/panel-service.c
index 4451fffa5..f65647d4d 100644
--- a/services/panel-service.c
+++ b/services/panel-service.c
@@ -195,6 +195,14 @@ panel_service_class_dispose (GObject *self)
G_OBJECT_CLASS (panel_service_parent_class)->dispose (self);
}
+void
+panel_service_clear_remote_data (PanelService *self)
+{
+ g_return_if_fail (PANEL_IS_SERVICE (self));
+
+ g_hash_table_remove_all (self->priv->panel2entries_hash);
+}
+
static void
panel_service_class_finalize (GObject *object)
{
diff --git a/services/panel-service.h b/services/panel-service.h
index 5d267c23f..1c3de10ec 100644
--- a/services/panel-service.h
+++ b/services/panel-service.h
@@ -76,6 +76,8 @@ void panel_service_remove_indicator (PanelService *self, IndicatorO
void panel_service_clear_indicators (PanelService *self);
+void panel_service_clear_remote_data (PanelService *self);
+
GVariant * panel_service_sync (PanelService *self);
GVariant * panel_service_sync_one (PanelService *self,