X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Faction.c;h=c6e66c3517ceaa1f8b5cf3162d802e6780f4722d;hb=fe7eefc13100f103a0262b3786f0c373fd0cac94;hp=0e4d570f97f662fca3ea4b3835b43250297b5e2e;hpb=904327a0c8ef2e1ee6cb3053d786c30f4693d8f3;p=chaz%2Fopenbox diff --git a/openbox/action.c b/openbox/action.c index 0e4d570f..c6e66c35 100644 --- a/openbox/action.c +++ b/openbox/action.c @@ -33,17 +33,33 @@ #include -#define ACT_START(d) \ - ((d->any.context != OB_FRAME_CONTEXT_CLIENT && config_focus_follow) ? \ - grab_pointer(TRUE, OB_CURSOR_NONE), 0 : 0) +inline void client_action_start(union ActionData *data) +{ + if (config_focus_follow) + if (data->any.context != OB_FRAME_CONTEXT_CLIENT && !data->any.button) + grab_pointer(TRUE, OB_CURSOR_NONE); +} + +inline void client_action_end(union ActionData *data) +{ + if (config_focus_follow) + if (data->any.context != OB_FRAME_CONTEXT_CLIENT) { + if (!data->any.button) { + grab_pointer(FALSE, OB_CURSOR_NONE); + } else { + ObClient *c; -#define ACT_END(d) \ - ((d->any.context != OB_FRAME_CONTEXT_CLIENT && config_focus_follow) ? \ - grab_pointer(FALSE, OB_CURSOR_NONE), \ - (d->any.button ? focus_fallback(OB_FOCUS_FALLBACK_NOFOCUS), 1 : 0) : \ - 0) + /* usually this is sorta redundant, but with a press action + the enter event will come as a GrabNotify which is + ignored, so this will handle that case */ + if ((c = client_under_pointer())) + event_enter_client(c); + } + } +} -typedef struct ActionString { +typedef struct +{ const gchar *name; void (*func)(union ActionData *); void (*setup)(ObAction **, ObUserAction uact); @@ -916,22 +932,22 @@ void action_raiselower(union ActionData *data) } if (raise) { - ACT_START(data); + client_action_start(data); stacking_raise(CLIENT_AS_WINDOW(c)); - ACT_END(data); + client_action_end(data); } else { - ACT_START(data); + client_action_start(data); stacking_lower(CLIENT_AS_WINDOW(c)); - ACT_END(data); + client_action_end(data); } } void action_raise(union ActionData *data) { if (data->client.any.c) { - ACT_START(data); + client_action_start(data); stacking_raise(CLIENT_AS_WINDOW(data->client.any.c)); - ACT_END(data); + client_action_end(data); } } @@ -939,13 +955,13 @@ void action_unshaderaise(union ActionData *data) { if (data->client.any.c) { if (data->client.any.c->shaded) { - ACT_START(data); + client_action_start(data); client_shade(data->client.any.c, FALSE); - ACT_END(data); + client_action_end(data); } else { - ACT_START(data); + client_action_start(data); stacking_raise(CLIENT_AS_WINDOW(data->client.any.c)); - ACT_END(data); + client_action_end(data); } } } @@ -956,9 +972,9 @@ void action_shadelower(union ActionData *data) if (data->client.any.c->shaded) stacking_lower(CLIENT_AS_WINDOW(data->client.any.c)); else { - ACT_START(data); + client_action_start(data); client_shade(data->client.any.c, TRUE); - ACT_END(data); + client_action_end(data); } } } @@ -966,9 +982,9 @@ void action_shadelower(union ActionData *data) void action_lower(union ActionData *data) { if (data->client.any.c) { - ACT_START(data); + client_action_start(data); stacking_lower(CLIENT_AS_WINDOW(data->client.any.c)); - ACT_END(data); + client_action_end(data); } } @@ -987,27 +1003,27 @@ void action_kill(union ActionData *data) void action_shade(union ActionData *data) { if (data->client.any.c) { - ACT_START(data); + client_action_start(data); client_shade(data->client.any.c, TRUE); - ACT_END(data); + client_action_end(data); } } void action_unshade(union ActionData *data) { if (data->client.any.c) { - ACT_START(data); + client_action_start(data); client_shade(data->client.any.c, FALSE); - ACT_END(data); + client_action_end(data); } } void action_toggle_shade(union ActionData *data) { if (data->client.any.c) { - ACT_START(data); + client_action_start(data); client_shade(data->client.any.c, !data->client.any.c->shaded); - ACT_END(data); + client_action_end(data); } } @@ -1023,9 +1039,9 @@ void action_move_relative_horz(union ActionData *data) { ObClient *c = data->relative.any.c; if (c) { - ACT_START(data); + client_action_start(data); client_move(c, c->area.x + data->relative.delta, c->area.y); - ACT_END(data); + client_action_end(data); } } @@ -1033,9 +1049,9 @@ void action_move_relative_vert(union ActionData *data) { ObClient *c = data->relative.any.c; if (c) { - ACT_START(data); + client_action_start(data); client_move(c, c->area.x, c->area.y + data->relative.delta); - ACT_END(data); + client_action_end(data); } } @@ -1043,11 +1059,11 @@ void action_resize_relative_horz(union ActionData *data) { ObClient *c = data->relative.any.c; if (c) { - ACT_START(data); + client_action_start(data); client_resize(c, c->area.width + data->relative.delta * c->size_inc.width, c->area.height); - ACT_END(data); + client_action_end(data); } } @@ -1055,96 +1071,96 @@ void action_resize_relative_vert(union ActionData *data) { ObClient *c = data->relative.any.c; if (c && !c->shaded) { - ACT_START(data); + client_action_start(data); client_resize(c, c->area.width, c->area.height + data->relative.delta * c->size_inc.height); - ACT_END(data); + client_action_end(data); } } void action_maximize_full(union ActionData *data) { if (data->client.any.c) { - ACT_START(data); + client_action_start(data); client_maximize(data->client.any.c, TRUE, 0, TRUE); - ACT_END(data); + client_action_end(data); } } void action_unmaximize_full(union ActionData *data) { if (data->client.any.c) { - ACT_START(data); + client_action_start(data); client_maximize(data->client.any.c, FALSE, 0, TRUE); - ACT_END(data); + client_action_end(data); } } void action_toggle_maximize_full(union ActionData *data) { if (data->client.any.c) { - ACT_START(data); + client_action_start(data); client_maximize(data->client.any.c, !(data->client.any.c->max_horz || data->client.any.c->max_vert), 0, TRUE); - ACT_END(data); + client_action_end(data); } } void action_maximize_horz(union ActionData *data) { if (data->client.any.c) { - ACT_START(data); + client_action_start(data); client_maximize(data->client.any.c, TRUE, 1, TRUE); - ACT_END(data); + client_action_end(data); } } void action_unmaximize_horz(union ActionData *data) { if (data->client.any.c) { - ACT_START(data); + client_action_start(data); client_maximize(data->client.any.c, FALSE, 1, TRUE); - ACT_END(data); + client_action_end(data); } } void action_toggle_maximize_horz(union ActionData *data) { if (data->client.any.c) { - ACT_START(data); + client_action_start(data); client_maximize(data->client.any.c, !data->client.any.c->max_horz, 1, TRUE); - ACT_END(data); + client_action_end(data); } } void action_maximize_vert(union ActionData *data) { if (data->client.any.c) { - ACT_START(data); + client_action_start(data); client_maximize(data->client.any.c, TRUE, 2, TRUE); - ACT_END(data); + client_action_end(data); } } void action_unmaximize_vert(union ActionData *data) { if (data->client.any.c) { - ACT_START(data); + client_action_start(data); client_maximize(data->client.any.c, FALSE, 2, TRUE); - ACT_END(data); + client_action_end(data); } } void action_toggle_maximize_vert(union ActionData *data) { if (data->client.any.c) { - ACT_START(data); + client_action_start(data); client_maximize(data->client.any.c, !data->client.any.c->max_vert, 2, TRUE); - ACT_END(data); + client_action_end(data); } } @@ -1209,10 +1225,10 @@ void action_toggle_decorations(union ActionData *data) ObClient *c = data->client.any.c; if (c) { - ACT_START(data); + client_action_start(data); c->decorate = !c->decorate; client_setup_decor_and_functions(c); - ACT_END(data); + client_action_end(data); } } @@ -1327,9 +1343,9 @@ void action_movetoedge(union ActionData *data) g_assert_not_reached(); } frame_frame_gravity(c->frame, &x, &y); - ACT_START(data); + client_action_start(data); client_move(c, x, y); - ACT_END(data); + client_action_end(data); } @@ -1393,9 +1409,9 @@ void action_growtoedge(union ActionData *data) frame_frame_gravity(c->frame, &x, &y); width -= c->frame->size.left + c->frame->size.right; height -= c->frame->size.top + c->frame->size.bottom; - ACT_START(data); + client_action_start(data); client_move_resize(c, x, y, width, height); - ACT_END(data); + client_action_end(data); } void action_send_to_layer(union ActionData *data) @@ -1409,12 +1425,12 @@ void action_toggle_layer(union ActionData *data) ObClient *c = data->layer.any.c; if (c) { - ACT_START(data); + client_action_start(data); if (data->layer.layer < 0) client_set_layer(c, c->below ? 0 : -1); else if (data->layer.layer > 0) client_set_layer(c, c->above ? 0 : 1); - ACT_END(data); + client_action_end(data); } }