add raise action

This commit is contained in:
Dana Jansens 2007-06-22 14:24:23 +00:00
parent 6c5f6ed1f5
commit a07465f376
8 changed files with 65 additions and 51 deletions

View file

@ -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 \

View file

@ -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
{
@ -498,11 +469,6 @@ ActionString actionstrings[] =
action_raiselower,
setup_client_action
},
{
"raise",
action_raise,
setup_client_action
},
{
"lower",
action_lower,
@ -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)

View file

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

View file

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

View file

@ -14,4 +14,5 @@ void action_all_startup()
action_close_startup();
action_move_startup();
action_focus_startup();
action_raise_startup();
}

View file

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

View file

@ -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();
}

24
openbox/actions/raise.c Normal file
View file

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