]> Dogcows Code - chaz/openbox/blobdiff - openbox/focus.c
windows on other desktops are iconic state too
[chaz/openbox] / openbox / focus.c
index 755b6ceabe787f8f3f94f86a042d4d25b361f4da..eead6000dba9e41dcf2d9aeb56f6b080a7c2b2ca 100644 (file)
@@ -295,8 +295,10 @@ static void popup_cycle(ObClient *c, gboolean show)
         icon_popup_hide(focus_cycle_popup);
     } else {
         Rect *a;
-        ObClient *p = c;
+        ObClient *p;
+        gchar *text;
         gchar *title = NULL;
+        const gchar *desk = NULL;
 
         a = screen_physical_area_monitor(0);
         icon_popup_position(focus_cycle_popup, CenterGravity,
@@ -304,21 +306,30 @@ static void popup_cycle(ObClient *c, gboolean show)
         icon_popup_width(focus_cycle_popup, MAX(a->width/3, POPUP_WIDTH));
         icon_popup_height(focus_cycle_popup, POPUP_HEIGHT);
 
-        /* use the transient's parent's title/icon */
-        while (p->transient_for && p->transient_for != OB_TRAN_GROUP)
-            p = p->transient_for;
+        /* find our highest direct parent, including non-normal windows */
+        for (p = c; p->transient_for && p->transient_for != OB_TRAN_GROUP;
+             p = p->transient_for);
 
+        if (c->desktop != DESKTOP_ALL && c->desktop != screen_desktop)
+            desk = screen_desktop_names[c->desktop];
+
+        /* use the transient's parent's title/icon if we don't have one */
         if (p != c && !strcmp("", (c->iconic ? c->icon_title : c->title)))
             title = g_strdup(p->iconic ? p->icon_title : p->title);
-            /*title = g_strconcat((c->iconic ? c->icon_title : c->title),
+            /*ptitle = g_strconcat((c->iconic ? c->icon_title : c->title),
                                 " - ",
                                 (p->iconic ? p->icon_title : p->title),
                                 NULL);
             */
-        icon_popup_show(focus_cycle_popup,
-                        (title ? title :
-                         (c->iconic ? c->icon_title : c->title)),
-                        client_icon(p, 48, 48));
+        if (title == NULL)
+            title = g_strdup(c->iconic ? c->icon_title : c->title);
+        if (desk)
+            text = g_strdup_printf("%s [%s]", title, desk);
+        else
+            text = g_strdup(title);
+
+        icon_popup_show(focus_cycle_popup, text, client_icon(p, 48, 48));
+        g_free(text);
         g_free(title);
     }
 }
This page took 0.021841 seconds and 4 git commands to generate.