Author: olivier
Date: 2006-07-11 21:47:03 +0000 (Tue, 11 Jul 2006)
New Revision: 22407

Modified:
   xfwm4/trunk/src/client.c
   xfwm4/trunk/src/tabwin.c
   xfwm4/trunk/src/tabwin.h
Log:
Make sure the icon selected in the tabwin matches the selected window in all 
cases (fix bug #2008)

Modified: xfwm4/trunk/src/client.c
===================================================================
--- xfwm4/trunk/src/client.c    2006-07-11 21:37:28 UTC (rev 22406)
+++ xfwm4/trunk/src/client.c    2006-07-11 21:47:03 UTC (rev 22407)
@@ -4434,8 +4434,8 @@
         TRACE ("entering cycle loop");
         passdata.wireframe = wireframeCreate (passdata.c);
         icon = getAppIcon (display_info, passdata.c->window, 32, 32);
-        passdata.tabwin = tabwinCreate (passdata.c->screen_info->gscr, c, 
-                                        passdata.cycle_range, 
+        passdata.tabwin = tabwinCreate (passdata.c->screen_info->gscr, c,
+                                        passdata.c, passdata.cycle_range,
                                         screen_info->params->cycle_workspaces);
         eventFilterPush (display_info->xfilter, clientCycle_event_filter, 
&passdata);
         gtk_main ();

Modified: xfwm4/trunk/src/tabwin.c
===================================================================
--- xfwm4/trunk/src/tabwin.c    2006-07-11 21:37:28 UTC (rev 22406)
+++ xfwm4/trunk/src/tabwin.c    2006-07-11 21:47:03 UTC (rev 22407)
@@ -162,13 +162,13 @@
 }
 
 static GtkWidget *
-createWindowlist (GdkScreen * scr, Client * c, unsigned int cycle_range, 
Tabwin * t)
+createWindowlist (GdkScreen * scr, Client * current, Client * new, unsigned 
int cycle_range, Tabwin * t)
 {
     ScreenInfo *screen_info;
-    Client *c2 = NULL;
-    GList *next;
+    Client *c2;
     GdkRectangle monitor_sz;
     GtkWidget *windowlist, *icon;
+    GList *next;
     unsigned int grid_cols;
     unsigned int n_clients;
     unsigned int grid_rows;
@@ -176,13 +176,15 @@
     int msx, msy;
     gint monitor;
 
-    g_return_val_if_fail (c != NULL, NULL);
+    g_return_val_if_fail (current != NULL, NULL);
 
     i = 0;
     packpos = 0;
+    c2 = NULL;
+    next = NULL;
 
     /* calculate the wrapping */
-    screen_info = c->screen_info;
+    screen_info = current->screen_info;
     n_clients = screen_info->client_count;
     
     g_return_val_if_fail (n_clients > 0, NULL);
@@ -199,7 +201,7 @@
     t->grid_cols = grid_cols;
     t->grid_rows = grid_rows;
     /* pack the client icons */
-    for (c2 = c, i = 0; c2 && i < n_clients; i++, c2 = c2->next)
+    for (c2 = current, i = 0; c2 && i < n_clients; i++, c2 = c2->next)
     {
         if (!clientSelectMask (c2, cycle_range, WINDOW_REGULAR_FOCUSABLE))
             continue;
@@ -210,23 +212,21 @@
             GTK_FILL, GTK_FILL, 7, 7);
         packpos++;
         t->head = g_list_append (t->head, icon);
+        if (c2 == new)
+        {
+            next = g_list_last (t->head);
+        }
     }
-
-    next = g_list_next (t->head);
-    if (!next)
-    {
-        next = t->head;
-    }
-    t->current = next;
     if (next)
     {
         tabwinSetSelected (t, next->data);
     }
+    t->current = next;
     return windowlist;
 }
 
 Tabwin *
-tabwinCreate (GdkScreen * scr, Client * c, unsigned int cycle_range, gboolean 
display_workspace)
+tabwinCreate (GdkScreen * scr, Client * current, Client * new, unsigned int 
cycle_range, gboolean display_workspace)
 {
     Tabwin *tabwin;
     GtkWidget *frame;
@@ -278,7 +278,7 @@
     gtk_box_pack_start (GTK_BOX (vbox), tabwin->label, TRUE, TRUE, 0);
     gtk_widget_set_size_request (GTK_WIDGET (tabwin->label), 240, -1);
 
-    windowlist = createWindowlist (scr, c, cycle_range, tabwin);
+    windowlist = createWindowlist (scr, current, new, cycle_range, tabwin);
     tabwin->container = windowlist;
     gtk_container_add (GTK_CONTAINER (frame), windowlist);
 

Modified: xfwm4/trunk/src/tabwin.h
===================================================================
--- xfwm4/trunk/src/tabwin.h    2006-07-11 21:37:28 UTC (rev 22406)
+++ xfwm4/trunk/src/tabwin.h    2006-07-11 21:47:03 UTC (rev 22407)
@@ -48,7 +48,7 @@
     int grid_rows;
 };
 
-Tabwin *tabwinCreate (GdkScreen *, Client *, unsigned int, gboolean);
+Tabwin *tabwinCreate (GdkScreen *, Client *, Client *, unsigned int, gboolean);
 Client *tabwinGetSelected (Tabwin *);
 Client *tabwinSelectNext (Tabwin *);
 Client *tabwinSelectPrev (Tabwin *);

_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to