Add <menu><separateIconic> option
authorMikael Magnusson <mikachu@gmail.com>
Thu, 29 Dec 2022 19:39:26 +0000 (20:39 +0100)
committerMikael Magnusson <mikachu@gmail.com>
Mon, 20 Mar 2023 06:28:01 +0000 (07:28 +0100)
Add option to change the client list menus back to separating iconified windows with a line instead of bracketing them.

openbox/client_list_combined_menu.c
openbox/client_list_menu.c
openbox/config.c
openbox/config.h

index c26b6fa036f3da35c874d068c07b67e50ee13b07..8aeb6058dd6daa36947b4be3071b16596ee204f7 100644 (file)
@@ -54,6 +54,7 @@ static gboolean self_update(ObMenuFrame *frame, gpointer data)
     for (desktop = 0; desktop < screen_num_desktops; desktop++) {
         gboolean empty = TRUE;
         gboolean onlyiconic = TRUE;
+        gboolean noicons = TRUE;
 
         menu_add_separator(menu, SEPARATOR, screen_desktop_names[desktop]);
         for (it = focus_order; it; it = g_list_next(it)) {
@@ -65,9 +66,17 @@ static gboolean self_update(ObMenuFrame *frame, gpointer data)
                 empty = FALSE;
 
                 if (c->iconic) {
-                    gchar *title = g_strdup_printf("(%s)", c->icon_title);
-                    e = menu_add_normal(menu, desktop, title, NULL, FALSE);
-                    g_free(title);
+                    if (config_menu_separate_iconic) {
+                        if (noicons) {
+                            menu_add_separator(menu, -1, NULL);
+                            noicons = FALSE;
+                        }
+                        e = menu_add_normal(menu, desktop, c->icon_title, NULL, FALSE);
+                    } else {
+                        gchar *title = g_strdup_printf("(%s)", c->icon_title);
+                        e = menu_add_normal(menu, desktop, title, NULL, FALSE);
+                        g_free(title);
+                    }
                 } else {
                     onlyiconic = FALSE;
                     e = menu_add_normal(menu, desktop, c->title, NULL, FALSE);
index f3df2a5aec1ba5a4e209bfad744e006cfd6e5ad3..1fab80cb51047a85308a528516861adc1d15e9f2 100644 (file)
@@ -49,6 +49,7 @@ static gboolean desk_menu_update(ObMenuFrame *frame, gpointer data)
     GList *it;
     gboolean empty = TRUE;
     gboolean onlyiconic = TRUE;
+    gboolean noicons = TRUE;
 
     menu_clear_entries(menu);
 
@@ -61,9 +62,17 @@ static gboolean desk_menu_update(ObMenuFrame *frame, gpointer data)
             empty = FALSE;
 
             if (c->iconic) {
-                gchar *title = g_strdup_printf("(%s)", c->icon_title);
-                e = menu_add_normal(menu, d->desktop, title, NULL, FALSE);
-                g_free(title);
+                if (config_menu_separate_iconic) {
+                    if (noicons) {
+                        menu_add_separator(menu, -1, NULL);
+                        noicons = FALSE;
+                    }
+                    e = menu_add_normal(menu, d->desktop, c->icon_title, NULL, FALSE);
+                } else {
+                    gchar *title = g_strdup_printf("(%s)", c->icon_title);
+                    e = menu_add_normal(menu, d->desktop, title, NULL, FALSE);
+                    g_free(title);                    
+                }
             } else {
                 onlyiconic = FALSE;
                 e = menu_add_normal(menu, d->desktop, c->title, NULL, FALSE);
index 6fd03966d974980e46c902f0110eb1845efd8b5d..8cc52841a377af32ad61000793f73a589c97a054 100644 (file)
@@ -100,6 +100,7 @@ guint    config_submenu_show_delay;
 guint    config_submenu_hide_delay;
 gboolean config_menu_manage_desktops;
 gboolean config_menu_show_icons;
+gboolean config_menu_separate_iconic;
 
 GSList *config_menu_files;
 
@@ -976,6 +977,8 @@ static void parse_menu(xmlNodePtr node, gpointer d)
             g_message(_("Openbox was compiled without image loading support. Icons in menus will not be loaded."));
 #endif
     }
+    if ((n = obt_xml_find_node(node, "separateIconic")))
+        config_menu_separate_iconic = obt_xml_node_bool(n);
 
     for (node = obt_xml_find_node(node, "file");
          node;
@@ -1187,6 +1190,7 @@ void config_startup(ObtXmlInst *i)
     config_menu_manage_desktops = TRUE;
     config_menu_files = NULL;
     config_menu_show_icons = TRUE;
+    config_menu_separate_iconic = FALSE;
 
     obt_xml_register(i, "menu", parse_menu, NULL);
 
index 51944b374ea3d5be05c8ad9b696d025f8595767b..277d8b4764b163a90fa2c2855244a9c9fa39bc9e 100644 (file)
@@ -215,6 +215,8 @@ extern guint    config_submenu_hide_delay;
 extern gboolean config_menu_manage_desktops;
 /*! Load & show icons in user-defined menus */
 extern gboolean config_menu_show_icons;
+/*! Separate iconic windows instead of bracketing */
+extern gboolean config_menu_separate_iconic;
 /*! User-specified menu files */
 extern GSList *config_menu_files;
 /*! Per app settings */