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/exit.c \
|
||||||
openbox/actions/focus.c \
|
openbox/actions/focus.c \
|
||||||
openbox/actions/move.c \
|
openbox/actions/move.c \
|
||||||
|
openbox/actions/raise.c \
|
||||||
openbox/actions/reconfigure.c \
|
openbox/actions/reconfigure.c \
|
||||||
openbox/actions/restart.c \
|
openbox/actions/restart.c \
|
||||||
openbox/actions/showdesktop.c \
|
openbox/actions/showdesktop.c \
|
||||||
|
|
|
@ -39,36 +39,7 @@
|
||||||
|
|
||||||
#include <glib.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
|
typedef struct
|
||||||
{
|
{
|
||||||
|
@ -498,11 +469,6 @@ ActionString actionstrings[] =
|
||||||
action_raiselower,
|
action_raiselower,
|
||||||
setup_client_action
|
setup_client_action
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"raise",
|
|
||||||
action_raise,
|
|
||||||
setup_client_action
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"lower",
|
"lower",
|
||||||
action_lower,
|
action_lower,
|
||||||
|
@ -957,12 +923,6 @@ ObAction *action_parse(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
|
||||||
prop_atoms.net_wm_moveresize_size_bottomright;
|
prop_atoms.net_wm_moveresize_size_bottomright;
|
||||||
g_free(s);
|
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);
|
INTERACTIVE_LIMIT(act, uact);
|
||||||
}
|
}
|
||||||
g_free(actname);
|
g_free(actname);
|
||||||
|
@ -1097,13 +1057,6 @@ void action_raiselower(union ActionData *data)
|
||||||
client_action_end(data, config_focus_under_mouse);
|
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)
|
void action_unshaderaise(union ActionData *data)
|
||||||
{
|
{
|
||||||
if (data->client.any.c->shaded)
|
if (data->client.any.c->shaded)
|
||||||
|
|
|
@ -20,6 +20,10 @@
|
||||||
#include "gettext.h"
|
#include "gettext.h"
|
||||||
#include "grab.h"
|
#include "grab.h"
|
||||||
#include "screen.h"
|
#include "screen.h"
|
||||||
|
#include "event.h"
|
||||||
|
#include "config.h"
|
||||||
|
#include "client.h"
|
||||||
|
#include "debug.h"
|
||||||
|
|
||||||
#include "actions/all.h"
|
#include "actions/all.h"
|
||||||
|
|
||||||
|
@ -307,3 +311,31 @@ gboolean actions_interactive_input_event(XEvent *e)
|
||||||
}
|
}
|
||||||
return used;
|
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();
|
void actions_interactive_cancel_act();
|
||||||
|
|
||||||
gboolean actions_interactive_input_event(XEvent *e);
|
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_close_startup();
|
||||||
action_move_startup();
|
action_move_startup();
|
||||||
action_focus_startup();
|
action_focus_startup();
|
||||||
|
action_raise_startup();
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,5 +15,6 @@ void action_breakchroot_startup();
|
||||||
void action_close_startup();
|
void action_close_startup();
|
||||||
void action_move_startup();
|
void action_move_startup();
|
||||||
void action_focus_startup();
|
void action_focus_startup();
|
||||||
|
void action_raise_startup();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -51,10 +51,9 @@ static gboolean run_func(ObActionsData *data, gpointer options)
|
||||||
{
|
{
|
||||||
client_activate(data->client, o->here, FALSE, FALSE, TRUE);
|
client_activate(data->client, o->here, FALSE, FALSE, TRUE);
|
||||||
}
|
}
|
||||||
} else {
|
} else if (data->context == OB_FRAME_CONTEXT_DESKTOP) {
|
||||||
/* focus action on something other than a client, make keybindings
|
/* focus action on the root window. make keybindings work for this
|
||||||
work for this openbox instance, but don't focus any specific client
|
openbox instance, but don't focus any specific client */
|
||||||
*/
|
|
||||||
focus_nothing();
|
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