From 453154a00f0f17e20340e408055e224ea57cc4e8 Mon Sep 17 00:00:00 2001 From: Stefano Karapetsas Date: Mon, 17 Feb 2014 17:02:14 +0100 Subject: Fix mate-panel --reset --- mate-panel/applet.c | 3 ++- mate-panel/panel-action-protocol.c | 2 +- mate-panel/panel-menu-bar.c | 3 +++ mate-panel/panel-menu-items.c | 3 +++ mate-panel/panel-profile.c | 9 +++++++++ mate-panel/panel-reset.c | 14 ++++++++------ mate-panel/panel-reset.h | 2 +- 7 files changed, 27 insertions(+), 9 deletions(-) diff --git a/mate-panel/applet.c b/mate-panel/applet.c index ce637d29..3d81eab4 100644 --- a/mate-panel/applet.c +++ b/mate-panel/applet.c @@ -180,7 +180,8 @@ mate_panel_applet_locked_change_notify (GSettings *settings, AppletInfo *info; PanelWidget *panel_widget; - g_assert (applet != NULL); + if (applet == NULL || !GTK_IS_WIDGET (applet)) + return; info = (AppletInfo *) g_object_get_data (G_OBJECT (applet), "applet_info"); diff --git a/mate-panel/panel-action-protocol.c b/mate-panel/panel-action-protocol.c index 12a7f667..3a4efa72 100644 --- a/mate-panel/panel-action-protocol.c +++ b/mate-panel/panel-action-protocol.c @@ -118,8 +118,8 @@ panel_action_protocol_filter (GdkXEvent *gdk_xevent, display = gdk_screen_get_display (screen); window = gdk_x11_window_lookup_for_display (display, xevent->xclient.window); #else - screen = gdk_drawable_get_screen (window); window = gdk_window_lookup (xevent->xclient.window); + screen = gdk_drawable_get_screen (window); #endif if (!window) return GDK_FILTER_CONTINUE; diff --git a/mate-panel/panel-menu-bar.c b/mate-panel/panel-menu-bar.c index 358eac95..9776fa1f 100644 --- a/mate-panel/panel-menu-bar.c +++ b/mate-panel/panel-menu-bar.c @@ -115,6 +115,9 @@ static void panel_menu_bar_update_visibility (GSettings* settings, gchar* key, P GtkWidget* image; gchar *str; + if (!GTK_IS_WIDGET (menubar)) + return; + gtk_widget_set_visible (GTK_WIDGET (menubar->priv->applications_item), g_settings_get_boolean (settings, PANEL_MENU_BAR_SHOW_APPLICATIONS_KEY)); gtk_widget_set_visible (GTK_WIDGET (menubar->priv->places_item), g_settings_get_boolean (settings, PANEL_MENU_BAR_SHOW_PLACES_KEY)); gtk_widget_set_visible (GTK_WIDGET (menubar->priv->desktop_item), g_settings_get_boolean (settings, PANEL_MENU_BAR_SHOW_DESKTOP_KEY)); diff --git a/mate-panel/panel-menu-items.c b/mate-panel/panel-menu-items.c index 5db5265b..1f4e6475 100644 --- a/mate-panel/panel-menu-items.c +++ b/mate-panel/panel-menu-items.c @@ -1117,6 +1117,9 @@ panel_place_menu_item_recreate_menu (GtkWidget *widget) { PanelPlaceMenuItem *place_item; + if (!GTK_IS_WIDGET (widget)) + return; + place_item = PANEL_PLACE_MENU_ITEM (widget); if (place_item->priv->menu) { diff --git a/mate-panel/panel-profile.c b/mate-panel/panel-profile.c index 3dad813b..b5504a7e 100644 --- a/mate-panel/panel-profile.c +++ b/mate-panel/panel-profile.c @@ -82,6 +82,7 @@ static GQuark queued_changes_quark = 0; static GQuark commit_timeout_quark = 0; static void panel_profile_object_id_list_update (gchar **objects); +static void panel_profile_ensure_toplevel_per_screen (void); static void panel_profile_set_toplevel_id (PanelToplevel *toplevel, @@ -778,6 +779,8 @@ panel_profile_toplevel_change_notify (GSettings *settings, gchar *key, PanelToplevel *toplevel) { + if (toplevel == NULL || !PANEL_IS_TOPLEVEL (toplevel)) + return; #define UPDATE_STRING(k, n) \ if (!strcmp (key, k)) { \ @@ -880,6 +883,8 @@ panel_profile_background_change_notify (GSettings *settings, PanelWidget *panel_widget; PanelBackground *background; + if (toplevel == NULL || !PANEL_IS_TOPLEVEL (toplevel)) + return; panel_widget = panel_toplevel_get_panel_widget (toplevel); if (panel_widget == NULL) return; @@ -1594,6 +1599,10 @@ panel_profile_toplevel_id_list_notify (GSettings *settings, (PanelProfileGetIdFunc) panel_profile_get_toplevel_id, (PanelProfileDestroyFunc) panel_profile_destroy_toplevel); + /* if there are no panels, reset layout to default */ + if (g_slist_length (toplevel_ids) == 0) + panel_profile_ensure_toplevel_per_screen (); + g_slist_free (existing_toplevels); g_slist_free (toplevel_ids); } diff --git a/mate-panel/panel-reset.c b/mate-panel/panel-reset.c index e441f554..6670fc17 100644 --- a/mate-panel/panel-reset.c +++ b/mate-panel/panel-reset.c @@ -30,17 +30,19 @@ #include #include "panel-reset.h" #include "panel-schemas.h" -#include void panel_reset() { - panel_dconf_recursive_reset (PANEL_GENERAL_PATH, NULL); - panel_dconf_recursive_reset (PANEL_TOPLEVEL_PATH, NULL); - panel_dconf_recursive_reset (PANEL_OBJECT_PATH, NULL); + GSettings *settings; - /* TODO: send a dbus message to mate-panel, if active, to reload the panel - * configuration */ + settings = g_settings_new (PANEL_SCHEMA); + g_settings_set_strv (settings, PANEL_OBJECT_ID_LIST_KEY, NULL); + g_settings_sync (); + g_settings_set_strv (settings, PANEL_TOPLEVEL_ID_LIST_KEY, NULL); + g_settings_sync (); + + g_object_unref (settings); } #endif /* !__PANEL_RESET_C__ */ diff --git a/mate-panel/panel-reset.h b/mate-panel/panel-reset.h index 242fb3ca..125b6b3d 100644 --- a/mate-panel/panel-reset.h +++ b/mate-panel/panel-reset.h @@ -28,7 +28,7 @@ extern "C" { #endif /* __cplusplus */ -void panel_reset(); +void panel_reset(void); #ifdef __cplusplus } -- cgit v1.2.1