]> Dogcows Code - chaz/openbox/blobdiff - openbox/action.c
the coordiantes are from the client, not the frame
[chaz/openbox] / openbox / action.c
index 4ff6bdb95b7049c6e310c4834b807e5e39fadfda..bcd1b60fd1f05cee66e17e7b6733d38959e11560 100644 (file)
@@ -1199,7 +1199,9 @@ void action_execute(union ActionData *data)
 void action_activate(union ActionData *data)
 {
     if (data->client.any.c) {
-        if (!data->any.button || client_mouse_focusable(data->client.any.c)) {
+        if (!data->any.button || client_mouse_focusable(data->client.any.c) ||
+            data->any.context != OB_FRAME_CONTEXT_CLIENT)
+        {
             /* if using focus_delay, stop the timer now so that focus doesn't
                go moving on us */
             event_halt_focus_delay();
@@ -1217,7 +1219,9 @@ void action_activate(union ActionData *data)
 void action_focus(union ActionData *data)
 {
     if (data->client.any.c) {
-        if (!data->any.button || client_mouse_focusable(data->client.any.c)) {
+        if (!data->any.button || client_mouse_focusable(data->client.any.c) ||
+            data->any.context != OB_FRAME_CONTEXT_CLIENT)
+        {
             /* if using focus_delay, stop the timer now so that focus doesn't
                go moving on us */
             event_halt_focus_delay();
@@ -1517,11 +1521,6 @@ void action_send_to_desktop(union ActionData *data)
 
 void action_desktop(union ActionData *data)
 {
-    static guint first = (unsigned) -1;
-
-    if (data->inter.any.interactive && first == (unsigned) -1)
-        first = screen_desktop;
-
     if (!data->inter.any.interactive ||
         (!data->inter.cancel && !data->inter.final))
     {
@@ -1532,14 +1531,8 @@ void action_desktop(union ActionData *data)
             if (data->inter.any.interactive)
                 screen_desktop_popup(data->desktop.desk, TRUE);
         }
-    } else if (data->inter.cancel) {
-        screen_set_desktop(first, TRUE);
-    }
-
-    if (!data->inter.any.interactive || data->inter.final) {
+    } else
         screen_desktop_popup(0, FALSE);
-        first = (unsigned) -1;
-    }
 }
 
 void action_desktop_dir(union ActionData *data)
@@ -1556,7 +1549,7 @@ void action_desktop_dir(union ActionData *data)
         !data->sendtodir.inter.final ||
         data->sendtodir.inter.cancel)
     {
-        screen_set_desktop(d, TRUE);
+        if (d != screen_desktop) screen_set_desktop(d, TRUE);
     }
 }
 
@@ -1577,7 +1570,7 @@ void action_send_to_desktop_dir(union ActionData *data)
         data->sendtodir.inter.cancel)
     {
         client_set_desktop(c, d, data->sendtodir.follow);
-        if (data->sendtodir.follow)
+        if (data->sendtodir.follow && d != screen_desktop)
             screen_set_desktop(d, TRUE);
     }
 }
@@ -1596,7 +1589,8 @@ void action_toggle_decorations(union ActionData *data)
     client_action_end(data);
 }
 
-static guint32 pick_corner(gint x, gint y, gint cx, gint cy, gint cw, gint ch)
+static guint32 pick_corner(gint x, gint y, gint cx, gint cy, gint cw, gint ch,
+                           gboolean shaded)
 {
     /* let's make x and y client relative instead of screen relative */
     x = x - cx;
@@ -1636,11 +1630,11 @@ static guint32 pick_corner(gint x, gint y, gint cx, gint cy, gint cw, gint ch)
       |CCCCCCC              |     A           B     |              DDDDDDD|
       |       CCCCCCCC      |     A |       | B     |      DDDDDDDD       |
       |               CCCCCCC      A         B      DDDDDDD               |
-      - - - - - - - - - - - +CCCCCCC+aaaaaaa+DDDDDDD+ - - - - - - - - - - -
-      |                     |       b       c       |                     |
-      |             west    |       b  move c       |   east              |
-      |                     |       b       c       |                     |
-      - - - - - - - - - - - +EEEEEEE+ddddddd+FFFFFFF+- - - - - - - - - - - 
+      - - - - - - - - - - - +CCCCCCC+aaaaaaa+DDDDDDD+ - - - - - - - - - - - -
+      |                     |       b       c       |                     | sh
+      |             west    |       b  move c       |   east              | ad
+      |                     |       b       c       |                     | ed
+      - - - - - - - - - - - +EEEEEEE+ddddddd+FFFFFFF+- - - - - - - - - - -  -
       |               EEEEEEE      G         H      FFFFFFF               |
       |       EEEEEEEE      |     G |       | H     |      FFFFFFFF       |
       |EEEEEEE              |     G           H     |              FFFFFFF|
@@ -1657,6 +1651,15 @@ static guint32 pick_corner(gint x, gint y, gint cx, gint cy, gint cw, gint ch)
       +---------------------G-------|-------|-------H---------------------+
     */
 
+    if (shaded) {
+        /* for shaded windows, you can only resize west/east and move */
+        if (b)
+            return prop_atoms.net_wm_moveresize_size_left;
+        if (c)
+            return prop_atoms.net_wm_moveresize_size_right;
+        return prop_atoms.net_wm_moveresize_move;
+    }
+
     if (y < A && y >= C)
         return prop_atoms.net_wm_moveresize_size_topleft;
     else if (y >= A && y >= B && a)
@@ -1696,8 +1699,6 @@ void action_moveresize(union ActionData *data)
     ObClient *c = data->moveresize.any.c;
     guint32 corner;
 
-    if (!client_normal(c)) return;
-
     if (data->moveresize.keyboard) {
         corner = (data->moveresize.move ?
                   prop_atoms.net_wm_moveresize_move_keyboard :
@@ -1714,7 +1715,7 @@ void action_moveresize(union ActionData *data)
                               c->area.width + c->frame->size.left +
                               c->frame->size.right,
                               c->area.height + c->frame->size.top +
-                              c->frame->size.bottom));
+                              c->frame->size.bottom, c->shaded));
     }
 
     moveresize_start(c, data->any.x, data->any.y, data->any.button, corner);
This page took 0.025214 seconds and 4 git commands to generate.