all repos — openbox @ a07465f376b0a33270532501127ec812efe2c2b2

openbox fork - make it a bit more like ryudo

add raise action
Dana Jansens danakj@orodu.net
commit

a07465f376b0a33270532501127ec812efe2c2b2

parent

6c5f6ed1f5d501c79977a55c0f2430ebdd32ef6c

M Makefile.amMakefile.am

@@ -164,6 +164,7 @@ openbox/actions/execute.c \

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 \
M openbox/action.copenbox/action.c

@@ -39,36 +39,7 @@ #include "gettext.h"

#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 {

@@ -496,11 +467,6 @@ },

{ "raiselower", action_raiselower, - setup_client_action - }, - { - "raise", - action_raise, setup_client_action }, {

@@ -957,12 +923,6 @@ act->data.moveresize.corner =

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);

@@ -1094,13 +1054,6 @@ ObClient *c = data->client.any.c;

client_action_start(data); stacking_restack_request(c, NULL, Opposite); - 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); }
M openbox/actions.copenbox/actions.c

@@ -20,6 +20,10 @@ #include "actions.h"

#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 @@ }

} 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); + } + } + } +}
M openbox/actions.hopenbox/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);
M openbox/actions/all.copenbox/actions/all.c

@@ -14,4 +14,5 @@ action_breakchroot_startup();

action_close_startup(); action_move_startup(); action_focus_startup(); + action_raise_startup(); }
M openbox/actions/all.hopenbox/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
M openbox/actions/focus.copenbox/actions/focus.c

@@ -51,10 +51,9 @@ data->context != OB_FRAME_CONTEXT_FRAME)

{ 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(); }
A 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; +}