#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
{
setup_action_directional_focus_northwest
},
{
- "unfocus",
- action_unfocus,
- setup_client_action
- },
- {
- "focustobottom",
- action_focus_order_to_bottom,
- setup_client_action
- },
- {
- "raiselower",
- action_raiselower,
- setup_client_action
- },
- {
- "raise",
- action_raise,
- setup_client_action
- },
- {
- "lower",
- action_lower,
- setup_client_action
- },
- {
"kill",
action_kill,
setup_client_action
setup_client_action
},
{
- "maximizefull",
- action_maximize_full,
- setup_client_action
- },
- {
- "unmaximizefull",
- action_unmaximize_full,
- setup_client_action
- },
- {
- "togglemaximizefull",
- action_toggle_maximize_full,
- setup_client_action
- },
- {
"maximizehorz",
action_maximize_horz,
setup_client_action
setup_client_action
},
{
- "togglefullscreen",
- action_toggle_fullscreen,
- setup_client_action
- },
- {
"sendtodesktop",
action_send_to_desktop,
setup_action_send_to_desktop
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);
action_run(l, c, 0, time);
}
-void action_unfocus (union ActionData *data)
-{
- if (data->client.any.c == focus_client)
- focus_fallback(FALSE, FALSE, TRUE);
-}
-
-void action_iconify(union ActionData *data)
-{
- client_action_start(data);
- client_iconify(data->client.any.c, TRUE, TRUE, FALSE);
- client_action_end(data, config_focus_under_mouse);
-}
-
-void action_focus_order_to_bottom(union ActionData *data)
-{
- focus_order_to_bottom(data->client.any.c);
-}
-
-void action_raiselower(union ActionData *data)
-{
- 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);
-}
-
void action_unshaderaise(union ActionData *data)
{
if (data->client.any.c->shaded)
action_shade(data);
}
-void action_lower(union ActionData *data)
-{
- client_action_start(data);
- stacking_lower(CLIENT_AS_WINDOW(data->client.any.c));
- client_action_end(data, config_focus_under_mouse);
-}
-
void action_kill(union ActionData *data)
{
client_kill(data->client.any.c);
client_action_end(data, FALSE);
}
-void action_maximize_full(union ActionData *data)
-{
- client_action_start(data);
- client_maximize(data->client.any.c, TRUE, 0);
- client_action_end(data, config_focus_under_mouse);
-}
-
-void action_unmaximize_full(union ActionData *data)
-{
- client_action_start(data);
- client_maximize(data->client.any.c, FALSE, 0);
- client_action_end(data, config_focus_under_mouse);
-}
-
-void action_toggle_maximize_full(union ActionData *data)
-{
- client_action_start(data);
- client_maximize(data->client.any.c,
- !(data->client.any.c->max_horz ||
- data->client.any.c->max_vert),
- 0);
- client_action_end(data, config_focus_under_mouse);
-}
-
void action_maximize_horz(union ActionData *data)
{
client_action_start(data);
client_action_end(data, config_focus_under_mouse);
}
-void action_toggle_fullscreen(union ActionData *data)
-{
- client_action_start(data);
- client_fullscreen(data->client.any.c, !(data->client.any.c->fullscreen));
- client_action_end(data, config_focus_under_mouse);
-}
-
void action_send_to_desktop(union ActionData *data)
{
ObClient *c = data->sendto.any.c;