diff options
| author | Marco Trevisan (Treviño) <mail@3v1n0.net> | 2017-04-15 00:44:19 +0800 | 
|---|---|---|
| committer | Marco Trevisan (Treviño) <mail@3v1n0.net> | 2017-04-15 00:44:19 +0800 | 
| commit | 39cac7a104b7c468e9fb10f48da89665d1027313 (patch) | |
| tree | 4feb2eb7d14849dfbb3c17f2a927acb5fa2bc873 | |
| parent | c5af63802f87d551700c6384dad4d376018bc0b0 (diff) | |
UPS: remove unity saved geometries when unity disappears
 In this case we'd just need to get a full resync from it. (bzr r4228.1.3)
| -rw-r--r-- | services/panel-main.c | 36 | ||||
| -rw-r--r-- | services/panel-service.c | 8 | ||||
| -rw-r--r-- | services/panel-service.h | 2 | 
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, | 
