add the move action
authorDana Jansens <danakj@orodu.net>
Fri, 22 Jun 2007 05:17:10 +0000 (05:17 +0000)
committerDana Jansens <danakj@orodu.net>
Fri, 22 Jun 2007 05:17:10 +0000 (05:17 +0000)
12 files changed:
Makefile.am
openbox/action.c
openbox/actions.c
openbox/actions.h
openbox/actions/activate.c
openbox/actions/all.c
openbox/actions/all.h
openbox/actions/move.c [new file with mode: 0644]
openbox/actions/showmenu.c
openbox/keyboard.c
openbox/menuframe.c
openbox/mouse.c

index bddea96..61bc0b3 100644 (file)
@@ -158,10 +158,12 @@ openbox_openbox_SOURCES = \
        openbox/actions/all.h \
        openbox/actions/activate.c \
        openbox/actions/breakchroot.c \
+       openbox/actions/close.c \
        openbox/actions/cyclewindows.c \
        openbox/actions/debug.c \
        openbox/actions/execute.c \
        openbox/actions/exit.c \
+       openbox/actions/move.c \
        openbox/actions/reconfigure.c \
        openbox/actions/restart.c \
        openbox/actions/showdesktop.c \
index 2288dcb..cdf48df 100644 (file)
@@ -416,16 +416,6 @@ void setup_action_bottom_layer(ObAction **a, ObUserAction uact)
     (*a)->data.layer.layer = -1;
 }
 
-void setup_action_move(ObAction **a, ObUserAction uact)
-{
-    (*a)->data.moveresize.any.client_action = OB_CLIENT_ACTION_ALWAYS;
-    (*a)->data.moveresize.keyboard =
-        (uact == OB_USER_ACTION_NONE ||
-         uact == OB_USER_ACTION_KEYBOARD_KEY ||
-         uact == OB_USER_ACTION_MENU_SELECTION);
-    (*a)->data.moveresize.corner = 0;
-}
-
 void setup_action_resize(ObAction **a, ObUserAction uact)
 {
     (*a)->data.moveresize.any.client_action = OB_CLIENT_ACTION_ALWAYS;
@@ -499,11 +489,6 @@ ActionString actionstrings[] =
         setup_client_action
     },
     {
-        "iconify",
-        action_iconify,
-        setup_client_action
-    },
-    {
         "focustobottom",
         action_focus_order_to_bottom,
         setup_client_action
@@ -524,11 +509,6 @@ ActionString actionstrings[] =
         setup_client_action
     },
     {
-        "close",
-        action_close,
-        setup_client_action
-    },
-    {
         "kill",
         action_kill,
         setup_client_action
@@ -724,11 +704,6 @@ ActionString actionstrings[] =
         setup_client_action
     },
     {
-        "move",
-        action_move,
-        setup_action_move
-    },
-    {
         "resize",
         action_resize,
         setup_action_resize
@@ -1152,11 +1127,6 @@ void action_lower(union ActionData *data)
     client_action_end(data, config_focus_under_mouse);
 }
 
-void action_close(union ActionData *data)
-{
-    client_close(data->client.any.c);
-}
-
 void action_kill(union ActionData *data)
 {
     client_kill(data->client.any.c);
@@ -1545,19 +1515,6 @@ static guint32 pick_corner(gint x, gint y, gint cx, gint cy, gint cw, gint ch,
 #undef d
 }
 
-void action_move(union ActionData *data)
-{
-    ObClient *c = data->moveresize.any.c;
-    guint32 corner;
-
-    if (data->moveresize.keyboard)
-        corner = prop_atoms.net_wm_moveresize_move_keyboard;
-    else
-        corner = prop_atoms.net_wm_moveresize_move;
-
-    moveresize_start(c, data->any.x, data->any.y, data->any.button, corner);
-}
-
 void action_resize(union ActionData *data)
 {
     ObClient *c = data->moveresize.any.c;
index b56d834..a4308e6 100644 (file)
@@ -193,6 +193,7 @@ static void actions_setup_data(ObActionsData *data,
                                guint state,
                                gint x,
                                gint y,
+                               gint button,
                                ObFrameContext con,
                                struct _ObClient *client)
 {
@@ -200,6 +201,7 @@ static void actions_setup_data(ObActionsData *data,
     data->state = state;
     data->x = x;
     data->y = y;
+    data->button = button;
     data->context = con;
     data->client = client;
 }
@@ -209,6 +211,7 @@ void actions_run_acts(GSList *acts,
                       guint state,
                       gint x,
                       gint y,
+                      gint button,
                       ObFrameContext con,
                       struct _ObClient *client)
 {
@@ -227,7 +230,7 @@ void actions_run_acts(GSList *acts,
         ObActionsAct *act = it->data;
         gboolean ok = TRUE;
 
-        actions_setup_data(&data, uact, state, x, y, con, client);
+        actions_setup_data(&data, uact, state, x, y, button, con, client);
 
         if (actions_act_is_interactive(act) &&
             (!interactive_act || interactive_act->def != act->def))
index 8e3154b..7c69b10 100644 (file)
@@ -46,6 +46,7 @@ struct _ObActionsData {
     guint state;
     gint x;
     gint y;
+    gint button;
 
     struct _ObClient *client;
     ObFrameContext context;
@@ -81,6 +82,7 @@ void actions_run_acts(GSList *acts,
                       guint state,
                       gint x,
                       gint y,
+                      gint button,
                       ObFrameContext con,
                       struct _ObClient *client);
 
index a431baf..c3f3f98 100644 (file)
@@ -53,12 +53,7 @@ static gboolean run_func(ObActionsData *data, gpointer options)
     Options *o = options;
 
     if (data->client) {
-        gboolean mouse = (data->uact == OB_USER_ACTION_MOUSE_PRESS ||
-                          data->uact == OB_USER_ACTION_MOUSE_RELEASE ||
-                          data->uact == OB_USER_ACTION_MOUSE_CLICK ||
-                          data->uact == OB_USER_ACTION_MOUSE_DOUBLE_CLICK ||
-                          data->uact == OB_USER_ACTION_MOUSE_MOTION);
-        if (!mouse || client_mouse_focusable(data->client) ||
+        if (data->button == 0 || client_mouse_focusable(data->client) ||
             data->context != OB_FRAME_CONTEXT_CLIENT ||
             data->context != OB_FRAME_CONTEXT_FRAME)
         {
index e3ad2b1..a65d76b 100644 (file)
@@ -12,4 +12,6 @@ void action_all_startup()
     action_cyclewindows_startup();
     action_activate_startup();
     action_breakchroot_startup();
+    action_close_startup();
+    action_move_startup();
 }
index 5db2e55..fa25249 100644 (file)
@@ -13,5 +13,7 @@ void action_restart_startup();
 void action_cyclewindows_startup();
 void action_activate_startup();
 void action_breakchroot_startup();
+void action_close_startup();
+void action_move_startup();
 
 #endif
diff --git a/openbox/actions/move.c b/openbox/actions/move.c
new file mode 100644 (file)
index 0000000..bf140c3
--- /dev/null
@@ -0,0 +1,29 @@
+#include "openbox/actions.h"
+#include "openbox/prop.h"
+#include "openbox/moveresize.h"
+
+static gboolean run_func(ObActionsData *data, gpointer options);
+
+void action_move_startup()
+{
+    actions_register("Move",
+                     NULL, NULL,
+                     run_func,
+                     NULL, NULL);
+}
+
+/* Always return FALSE because its not interactive */
+static gboolean run_func(ObActionsData *data, gpointer options)
+{
+    if (data->client) {
+        guint32 corner;
+
+        corner = data->button != 0 ?
+            prop_atoms.net_wm_moveresize_move :
+            prop_atoms.net_wm_moveresize_move_keyboard;
+
+        moveresize_start(data->client, data->x, data->y, data->button, corner);
+    }
+
+    return FALSE;
+}
index ec22de5..4b12548 100644 (file)
@@ -1,4 +1,5 @@
 #include "openbox/actions.h"
+#include "openbox/menu.h"
 #include <glib.h>
 
 typedef struct {
@@ -49,13 +50,7 @@ static gboolean run_func(ObActionsData *data, gpointer options)
     if (data->uact == OB_USER_ACTION_MENU_SELECTION) return FALSE;
 
     if (o->name) {
-        gboolean mouse = (data->uact == OB_USER_ACTION_MOUSE_PRESS ||
-                          data->uact == OB_USER_ACTION_MOUSE_RELEASE ||
-                          data->uact == OB_USER_ACTION_MOUSE_CLICK ||
-                          data->uact == OB_USER_ACTION_MOUSE_DOUBLE_CLICK ||
-                          data->uact == OB_USER_ACTION_MOUSE_MOTION);
-
-        menu_show(o->name, data->x, data->y, mouse, data->client);
+        menu_show(o->name, data->x, data->y, data->button != 0, data->client);
     }
 
     return FALSE;
index b12ad53..6e45e5c 100644 (file)
@@ -256,7 +256,7 @@ void keyboard_event(ObClient *client, const XEvent *e)
 
                 actions_run_acts(p->actions, OB_USER_ACTION_KEYBOARD_KEY,
                                  e->xkey.state, e->xkey.x_root, e->xkey.y_root,
-                                 OB_FRAME_CONTEXT_NONE, client);
+                                 0, OB_FRAME_CONTEXT_NONE, client);
             }
             break;
         }
index 6a25a9a..2abd870 100644 (file)
@@ -1203,7 +1203,7 @@ void menu_entry_frame_execute(ObMenuEntryFrame *self, guint state)
             func(entry, frame, client, state, data);
         else
             actions_run_acts(acts, OB_USER_ACTION_MENU_SELECTION,
-                             state, -1, -1, OB_FRAME_CONTEXT_NONE, client);
+                             state, -1, -1, 0, OB_FRAME_CONTEXT_NONE, client);
     }
 }
 
index 493e100..97abf70 100644 (file)
@@ -196,7 +196,7 @@ static gboolean fire_binding(ObMouseAction a, ObFrameContext context,
     if (it == NULL) return FALSE;
 
     actions_run_acts(b->actions[a], mouse_action_to_user_action(a),
-                     state, x, y, context, c);
+                     state, x, y, button, context, c);
     return TRUE;
 }