From 72c29b2a51c9f22a9832066e710f9d9523b6ff64 Mon Sep 17 00:00:00 2001
From: youzhengcai <youzhengcai@kylinsec.com.cn>
Date: Mon, 4 Sep 2023 17:25:15 +0800
Subject: [PATCH] fix(*): Fixed issue with empty taskbar due to empty object id
 list.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

- 修复了由于 object-id-list 为空导致的任务栏为空问题。

Close #14053 #11856
---
 mate-panel/panel-profile.c | 31 ++++++++++++++++++++++++++++++-
 1 file changed, 30 insertions(+), 1 deletion(-)

diff --git a/mate-panel/panel-profile.c b/mate-panel/panel-profile.c
index 13a04ab..7e1a039 100644
--- a/mate-panel/panel-profile.c
+++ b/mate-panel/panel-profile.c
@@ -86,6 +86,7 @@ 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 GSList* panel_profile_object_id_list(GSettings *panel_settings);
 
 static void
 panel_profile_set_toplevel_id (PanelToplevel *toplevel,
@@ -1554,6 +1555,13 @@ panel_profile_object_id_list_notify (GSettings *settings,
 	gchar **objects;
 	objects = g_settings_get_strv (settings, key);
 	panel_profile_object_id_list_update (objects);
+
+    GSList *object_ids = panel_profile_object_id_list(settings);
+    if (g_slist_length(object_ids) == 0){
+        g_settings_set_strv (settings, PANEL_TOPLEVEL_ID_LIST_KEY, NULL);
+    }
+    g_slist_free (object_ids);
+
 	g_strfreev (objects);
 }
 
@@ -1583,6 +1591,19 @@ panel_profile_load_list (GSettings              *settings,
 		g_strfreev (list);
 }
 
+static GSList*
+panel_profile_object_id_list(GSettings *panel_settings) {
+    gchar **objects = g_settings_get_strv(panel_settings, PANEL_OBJECT_ID_LIST_KEY);
+
+    GSList *object_ids;
+    object_ids = mate_gsettings_strv_to_gslist ((const gchar **) objects);
+    object_ids = panel_g_slist_make_unique (object_ids,
+                                            (GCompareFunc) g_strcmp0,
+                                            FALSE);
+    g_strfreev(objects);
+    return object_ids;
+}
+
 static void
 panel_profile_ensure_toplevel_per_screen ()
 {
@@ -1608,7 +1629,15 @@ panel_profile_ensure_toplevel_per_screen ()
 	for (l = empty_screens; l; l = l->next)
 		panel_layout_apply_default_from_gkeyfile (l->data);
 
-	g_slist_free (empty_screens);
+    GSettings *panel_settings = g_settings_new (PANEL_SCHEMA);
+    GSList *object_ids = panel_profile_object_id_list(panel_settings);
+    if (g_slist_length(object_ids) == 0){
+        g_settings_set_strv (panel_settings, PANEL_TOPLEVEL_ID_LIST_KEY, NULL);
+    }
+    g_slist_free (object_ids);
+    g_object_unref(panel_settings);
+
+    g_slist_free (empty_screens);
 }
 
 void
-- 
2.27.0

