]> Dogcows Code - chaz/openbox/blobdiff - openbox/screen.c
memory leak in xinerama setup code
[chaz/openbox] / openbox / screen.c
index 0d4f2fb3debe21d6a3ce9e037f48492de1fca40c..8f1f9396208cf7e3f1f7c1e7e4402d69eb185dfe 100644 (file)
@@ -372,7 +372,7 @@ void screen_resize()
 
 void screen_set_num_desktops(guint num)
 {
-    guint i, old;
+    guint old;
     gulong *viewport;
     GList *it;
 
@@ -410,16 +410,6 @@ void screen_set_num_desktops(guint num)
     /* change our desktop if we're on one that no longer exists! */
     if (screen_desktop >= screen_num_desktops)
         screen_set_desktop(num - 1);
-
-   /* update the focus lists */
-    /* free our lists for the desktops which have disappeared */
-    for (i = num; i < old; ++i)
-        g_list_free(focus_order[i]);
-    /* realloc the array */
-    focus_order = g_renew(GList*, focus_order, num);
-    /* set the new lists to be empty */
-    for (i = old; i < num; ++i)
-        focus_order[i] = NULL;
 }
 
 void screen_set_desktop(guint num)
@@ -463,7 +453,7 @@ void screen_set_desktop(guint num)
 
     event_ignore_queued_enters();
 
-    focus_hilite = focus_fallback_target(TRUE);
+    focus_hilite = focus_fallback_target(TRUE, focus_client);
     if (focus_hilite) {
         frame_adjust_focus(focus_hilite->frame, TRUE);
 
@@ -888,10 +878,13 @@ void screen_show_desktop(gboolean show)
 
     if (show) {
         /* focus desktop */
-        for (it = focus_order[screen_desktop]; it; it = g_list_next(it))
-            if (((ObClient*)it->data)->type == OB_CLIENT_TYPE_DESKTOP &&
+        for (it = focus_order; it; it = g_list_next(it)) {
+            ObClient *c = it->data;
+            if (c->type == OB_CLIENT_TYPE_DESKTOP &&
+                (c->desktop == screen_desktop || c->desktop == DESKTOP_ALL) &&
                 client_validate(it->data) && client_focus(it->data))
                 break;
+        }
     } else {
         focus_fallback(TRUE);
     }
This page took 0.024771 seconds and 4 git commands to generate.