]> Dogcows Code - chaz/openbox/blobdiff - openbox/action.c
refix for managing iconic windows, without having the frame map which caused flashing.
[chaz/openbox] / openbox / action.c
index 097eaf8d165db736d3acea1b3a146c7c8cc5a85d..6d455f1f6d3a38a0e55e5eccede066ca37314aad 100644 (file)
@@ -1164,7 +1164,8 @@ void action_focus(union ActionData *data)
            moving on us */
         event_halt_focus_delay();
 
-        client_focus(data->client.any.c);
+        if (client_validate(data->client.any.c))
+            client_focus(data->client.any.c);
     }
 }
 
@@ -1344,28 +1345,35 @@ void action_move_relative(union ActionData *data)
 void action_resize_relative(union ActionData *data)
 {
     ObClient *c = data->relative.any.c;
+    gint x, y, ow, w, oh, h, lw, lh;
+
     client_action_start(data);
-    client_move_resize(c,
-                  c->area.x - data->relative.deltaxl * c->size_inc.width,
-                  c->area.y - data->relative.deltayu * c->size_inc.height,
-                  c->area.width + data->relative.deltax  * c->size_inc.width
-                                + data->relative.deltaxl * c->size_inc.width,
-                  c->area.height + data->relative.deltay  * c->size_inc.height
-                                 + data->relative.deltayu * c->size_inc.height);
+
+    x = c->area.x;
+    y = c->area.y;
+    ow = c->area.width;
+    w = ow + data->relative.deltax * c->size_inc.width
+        + data->relative.deltaxl * c->size_inc.width;
+    oh = c->area.height;
+    h = oh + data->relative.deltay * c->size_inc.height
+        + data->relative.deltayu * c->size_inc.height;
+    
+    client_try_configure(c, OB_CORNER_TOPLEFT, &x, &y, &w, &h, &lw, &lh, TRUE);
+    client_move_resize(c, x + (ow - w), y + (oh - h), w, h);
     client_action_end(data);
 }
 
 void action_maximize_full(union ActionData *data)
 {
     client_action_start(data);
-    client_maximize(data->client.any.c, TRUE, 0, TRUE);
+    client_maximize(data->client.any.c, TRUE, 0);
     client_action_end(data);
 }
 
 void action_unmaximize_full(union ActionData *data)
 {
     client_action_start(data);
-    client_maximize(data->client.any.c, FALSE, 0, TRUE);
+    client_maximize(data->client.any.c, FALSE, 0);
     client_action_end(data);
 }
 
@@ -1375,21 +1383,21 @@ void action_toggle_maximize_full(union ActionData *data)
     client_maximize(data->client.any.c,
                     !(data->client.any.c->max_horz ||
                       data->client.any.c->max_vert),
-                    0, TRUE);
+                    0);
     client_action_end(data);
 }
 
 void action_maximize_horz(union ActionData *data)
 {
     client_action_start(data);
-    client_maximize(data->client.any.c, TRUE, 1, TRUE);
+    client_maximize(data->client.any.c, TRUE, 1);
     client_action_end(data);
 }
 
 void action_unmaximize_horz(union ActionData *data)
 {
     client_action_start(data);
-    client_maximize(data->client.any.c, FALSE, 1, TRUE);
+    client_maximize(data->client.any.c, FALSE, 1);
     client_action_end(data);
 }
 
@@ -1397,21 +1405,21 @@ void action_toggle_maximize_horz(union ActionData *data)
 {
     client_action_start(data);
     client_maximize(data->client.any.c,
-                    !data->client.any.c->max_horz, 1, TRUE);
+                    !data->client.any.c->max_horz, 1);
     client_action_end(data);
 }
 
 void action_maximize_vert(union ActionData *data)
 {
     client_action_start(data);
-    client_maximize(data->client.any.c, TRUE, 2, TRUE);
+    client_maximize(data->client.any.c, TRUE, 2);
     client_action_end(data);
 }
 
 void action_unmaximize_vert(union ActionData *data)
 {
     client_action_start(data);
-    client_maximize(data->client.any.c, FALSE, 2, TRUE);
+    client_maximize(data->client.any.c, FALSE, 2);
     client_action_end(data);
 }
 
@@ -1419,15 +1427,14 @@ void action_toggle_maximize_vert(union ActionData *data)
 {
     client_action_start(data);
     client_maximize(data->client.any.c,
-                    !data->client.any.c->max_vert, 2, TRUE);
+                    !data->client.any.c->max_vert, 2);
     client_action_end(data);
 }
 
 void action_toggle_fullscreen(union ActionData *data)
 {
     client_action_start(data);
-    client_fullscreen(data->client.any.c,
-                      !(data->client.any.c->fullscreen), TRUE);
+    client_fullscreen(data->client.any.c, !(data->client.any.c->fullscreen));
     client_action_end(data);
 }
 
This page took 0.023406 seconds and 4 git commands to generate.