]> Dogcows Code - chaz/openbox/blobdiff - openbox/screen.c
Change resizing terminals to work for top and left edges too, the code is a little...
[chaz/openbox] / openbox / screen.c
index 707d0b6b29fb649c9a4e897af168e4c38bdc14cb..8bab662f10b9e57ce7cbe97b12425f4371e48f50 100644 (file)
@@ -282,8 +282,10 @@ gboolean screen_annex()
     supported[i++] = prop_atoms.net_wm_state_demands_attention;
     supported[i++] = prop_atoms.net_moveresize_window;
     supported[i++] = prop_atoms.net_wm_moveresize;
+/*
     supported[i++] = prop_atoms.net_wm_user_time;
     supported[i++] = prop_atoms.net_wm_user_time_window;
+*/
     supported[i++] = prop_atoms.net_frame_extents;
     supported[i++] = prop_atoms.net_request_frame_extents;
     supported[i++] = prop_atoms.net_restack_window;
@@ -532,7 +534,7 @@ void screen_set_num_desktops(guint num)
                 stacking_raise(CLIENT_AS_WINDOW(c));
         }
     }
+
     /* change our struts/area to match (after moving windows) */
     screen_update_areas();
 
@@ -552,7 +554,7 @@ void screen_set_desktop(guint num, gboolean dofocus)
     guint old;
     gulong ignore_start;
     gboolean allow_omni;
-     
+
     g_assert(num < screen_num_desktops);
 
     old = screen_desktop;
@@ -641,8 +643,14 @@ void screen_add_desktop(gboolean current)
 
         for (it = client_list; it; it = g_list_next(it)) {
             ObClient *c = it->data;
-            if (c->desktop != DESKTOP_ALL && c->desktop >= screen_desktop)
+            if (c->desktop != DESKTOP_ALL && c->desktop >= screen_desktop &&
+                /* don't move direct children, they'll be moved with their
+                   parent - which will have to be on the same desktop */
+                !client_direct_parent(c))
+            {
+                ob_debug("moving window %s\n", c->title);
                 client_set_desktop(c, c->desktop+1, FALSE, TRUE);
+            }
         }
     }
 }
@@ -670,9 +678,13 @@ void screen_remove_desktop(gboolean current)
         if (WINDOW_IS_CLIENT(it->data)) {
             ObClient *c = it->data;
             guint d = c->desktop;
-            if (d != DESKTOP_ALL && d >= movedesktop) {
-                client_set_desktop(c, c->desktop - 1, TRUE, TRUE);
+            if (d != DESKTOP_ALL && d >= movedesktop &&
+                /* don't move direct children, they'll be moved with their
+                   parent - which will have to be on the same desktop */
+                !client_direct_parent(c))
+            {
                 ob_debug("moving window %s\n", c->title);
+                client_set_desktop(c, c->desktop - 1, TRUE, TRUE);
             }
             /* raise all the windows that are on the current desktop which
                is being merged */
@@ -1008,7 +1020,7 @@ void screen_update_layout()
     if (PROP_GETA32(RootWindow(ob_display, ob_screen),
                     net_desktop_layout, cardinal, &data, &num)) {
         if (num == 3 || num == 4) {
-            
+
             if (data[0] == prop_atoms.net_wm_orientation_vert)
                 l.orientation = OB_ORIENTATION_VERT;
             else if (data[0] == prop_atoms.net_wm_orientation_horz)
@@ -1090,7 +1102,7 @@ void screen_update_desktop_names()
 void screen_show_desktop(gboolean show, ObClient *show_only)
 {
     GList *it;
-     
+
     if (show == screen_showing_desktop) return; /* no change */
 
     screen_showing_desktop = show;
@@ -1353,7 +1365,7 @@ Rect* screen_area_all_monitors(guint desktop)
 
         g_free(m);
     }
-        
+
     return a;
 }
 #endif
@@ -1545,7 +1557,9 @@ Rect* screen_physical_area_active()
     Rect *a;
     gint x, y;
 
-    if (focus_client)
+    if (moveresize_client)
+        a = screen_physical_area_monitor(client_monitor(focus_client));
+    else if (focus_client)
         a = screen_physical_area_monitor(client_monitor(focus_client));
     else {
         Rect mon;
This page took 0.028028 seconds and 4 git commands to generate.