summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2007-06-22 14:24:23 +0000
committerDana Jansens <danakj@orodu.net>2007-06-22 14:24:23 +0000
commita07465f376b0a33270532501127ec812efe2c2b2 (patch)
tree43af75958d6e3f7b9a7e36c1ece9cd3e09d2302c
parent6c5f6ed1f5d501c79977a55c0f2430ebdd32ef6c (diff)
add raise action
-rw-r--r--Makefile.am1
-rw-r--r--openbox/action.c47
-rw-r--r--openbox/actions.c32
-rw-r--r--openbox/actions.h3
-rw-r--r--openbox/actions/all.c1
-rw-r--r--openbox/actions/all.h1
-rw-r--r--openbox/actions/focus.c7
-rw-r--r--openbox/actions/raise.c24
8 files changed, 65 insertions, 51 deletions
diff --git a/Makefile.am b/Makefile.am
index a1bc2645..cebec407 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -164,6 +164,7 @@ openbox_openbox_SOURCES = \
openbox/actions/exit.c \
openbox/actions/focus.c \
openbox/actions/move.c \
+ openbox/actions/raise.c \
openbox/actions/reconfigure.c \
openbox/actions/restart.c \
openbox/actions/showdesktop.c \
diff --git a/openbox/action.c b/openbox/action.c
index cdf48df3..f0fe691e 100644
--- a/openbox/action.c
+++ b/openbox/action.c
@@ -39,36 +39,7 @@
#include <glib.h>
-static gulong ignore_start = 0;
-static void client_action_start(union ActionData *data)
-{
- ignore_start = event_start_ignore_all_enters();
-}
-
-static void client_action_end(union ActionData *data, gboolean allow_enters)
-{
- if (config_focus_follow)
- if (data->any.context != OB_FRAME_CONTEXT_CLIENT) {
- if (!data->any.button && data->any.c && !allow_enters) {
- event_end_ignore_all_enters(ignore_start);
- } else {
- ObClient *c;
-
- /* usually this is sorta redundant, but with a press action
- that moves windows our from under the cursor, the enter
- event will come as a GrabNotify which is ignored, so this
- makes a fake enter event
- */
- if ((c = client_under_pointer()) && c != data->any.c) {
- ob_debug_type(OB_DEBUG_FOCUS,
- "Generating fake enter because we did a "
- "mouse-event action");
- event_enter_client(c);
- }
- }
- }
-}
typedef struct
{
@@ -499,11 +470,6 @@ ActionString actionstrings[] =
setup_client_action
},
{
- "raise",
- action_raise,
- setup_client_action
- },
- {
"lower",
action_lower,
setup_client_action
@@ -957,12 +923,6 @@ ObAction *action_parse(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
prop_atoms.net_wm_moveresize_size_bottomright;
g_free(s);
}
- } else if (act->func == action_raise ||
- act->func == action_lower ||
- act->func == action_raiselower ||
- act->func == action_shadelower ||
- act->func == action_unshaderaise) {
- }
INTERACTIVE_LIMIT(act, uact);
}
g_free(actname);
@@ -1097,13 +1057,6 @@ void action_raiselower(union ActionData *data)
client_action_end(data, config_focus_under_mouse);
}
-void action_raise(union ActionData *data)
-{
- client_action_start(data);
- stacking_raise(CLIENT_AS_WINDOW(data->client.any.c));
- client_action_end(data, config_focus_under_mouse);
-}
-
void action_unshaderaise(union ActionData *data)
{
if (data->client.any.c->shaded)
diff --git a/openbox/actions.c b/openbox/actions.c
index a4308e62..67dc3d31 100644
--- a/openbox/actions.c
+++ b/openbox/actions.c
@@ -20,6 +20,10 @@
#include "gettext.h"
#include "grab.h"
#include "screen.h"
+#include "event.h"
+#include "config.h"
+#include "client.h"
+#include "debug.h"
#include "actions/all.h"
@@ -307,3 +311,31 @@ gboolean actions_interactive_input_event(XEvent *e)
}
return used;
}
+
+void actions_client_move(ObActionsData *data, gboolean start)
+{
+ static gulong ignore_start = 0;
+ if (start)
+ ignore_start = event_start_ignore_all_enters();
+ else if (config_focus_follow &&
+ data->context != OB_FRAME_CONTEXT_CLIENT)
+ {
+ if (!data->button && data->client && !config_focus_under_mouse)
+ event_end_ignore_all_enters(ignore_start);
+ else {
+ struct _ObClient *c;
+
+ /* usually this is sorta redundant, but with a press action
+ that moves windows our from under the cursor, the enter
+ event will come as a GrabNotify which is ignored, so this
+ makes a fake enter event
+ */
+ if ((c = client_under_pointer()) && c != data->client) {
+ ob_debug_type(OB_DEBUG_FOCUS,
+ "Generating fake enter because we did a "
+ "mouse-event action");
+ event_enter_client(c);
+ }
+ }
+ }
+}
diff --git a/openbox/actions.h b/openbox/actions.h
index 7c69b10f..477e4ba1 100644
--- a/openbox/actions.h
+++ b/openbox/actions.h
@@ -90,3 +90,6 @@ gboolean actions_interactive_act_running();
void actions_interactive_cancel_act();
gboolean actions_interactive_input_event(XEvent *e);
+
+/*! Function for actions to call when they are moving a client around */
+void actions_client_move(ObActionsData *data, gboolean start);
diff --git a/openbox/actions/all.c b/openbox/actions/all.c
index 71e439e6..4bc4814a 100644
--- a/openbox/actions/all.c
+++ b/openbox/actions/all.c
@@ -14,4 +14,5 @@ void action_all_startup()
action_close_startup();
action_move_startup();
action_focus_startup();
+ action_raise_startup();
}
diff --git a/openbox/actions/all.h b/openbox/actions/all.h
index 2f2cf18a..01716e39 100644
--- a/openbox/actions/all.h
+++ b/openbox/actions/all.h
@@ -15,5 +15,6 @@ void action_breakchroot_startup();
void action_close_startup();
void action_move_startup();
void action_focus_startup();
+void action_raise_startup();
#endif
diff --git a/openbox/actions/focus.c b/openbox/actions/focus.c
index 9be6741c..254850ec 100644
--- a/openbox/actions/focus.c
+++ b/openbox/actions/focus.c
@@ -51,10 +51,9 @@ static gboolean run_func(ObActionsData *data, gpointer options)
{
client_activate(data->client, o->here, FALSE, FALSE, TRUE);
}
- } else {
- /* focus action on something other than a client, make keybindings
- work for this openbox instance, but don't focus any specific client
- */
+ } else if (data->context == OB_FRAME_CONTEXT_DESKTOP) {
+ /* focus action on the root window. make keybindings work for this
+ openbox instance, but don't focus any specific client */
focus_nothing();
}
diff --git a/openbox/actions/raise.c b/openbox/actions/raise.c
new file mode 100644
index 00000000..916c27b5
--- /dev/null
+++ b/openbox/actions/raise.c
@@ -0,0 +1,24 @@
+#include "openbox/actions.h"
+#include "openbox/stacking.h"
+
+static gboolean run_func(ObActionsData *data, gpointer options);
+
+void action_raise_startup()
+{
+ actions_register("Raise",
+ NULL, NULL,
+ run_func,
+ NULL, NULL);
+}
+
+/* Always return FALSE because its not interactive */
+static gboolean run_func(ObActionsData *data, gpointer options)
+{
+ if (data->client) {
+ actions_client_move(data, TRUE);
+ stacking_raise(CLIENT_AS_WINDOW(data->client));
+ actions_client_move(data, FALSE);
+ }
+
+ return FALSE;
+}