add raise action
This commit is contained in:
parent
6c5f6ed1f5
commit
a07465f376
8 changed files with 65 additions and 51 deletions
|
@ -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 \
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -14,4 +14,5 @@ void action_all_startup()
|
|||
action_close_startup();
|
||||
action_move_startup();
|
||||
action_focus_startup();
|
||||
action_raise_startup();
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
24
openbox/actions/raise.c
Normal 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;
|
||||
}
|
Loading…
Reference in a new issue