X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Factions.c;h=67dc3d31ee38c79b26ea780d4e972d341619999b;hb=bf0179b7ebdd354cb63a05762e8a602063cd0596;hp=9a5d193c4a2b33200416867eff81d769c0d224e2;hpb=9dacac5e5e6b9ed86e76680b048bc227d8866ac6;p=chaz%2Fopenbox diff --git a/openbox/actions.c b/openbox/actions.c index 9a5d193c..67dc3d31 100644 --- a/openbox/actions.c +++ b/openbox/actions.c @@ -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" @@ -190,28 +194,28 @@ void actions_act_unref(ObActionsAct *act) static void actions_setup_data(ObActionsData *data, ObUserAction uact, - Time time, guint state, gint x, gint y, + gint button, ObFrameContext con, struct _ObClient *client) { data->uact = uact; - data->time = time; data->state = state; data->x = x; data->y = y; + data->button = button; data->context = con; data->client = client; } void actions_run_acts(GSList *acts, ObUserAction uact, - Time time, guint state, gint x, gint y, + gint button, ObFrameContext con, struct _ObClient *client) { @@ -230,7 +234,7 @@ void actions_run_acts(GSList *acts, ObActionsAct *act = it->data; gboolean ok = TRUE; - actions_setup_data(&data, uact, time, state, x, y, con, client); + actions_setup_data(&data, uact, state, x, y, button, con, client); if (actions_act_is_interactive(act) && (!interactive_act || interactive_act->def != act->def)) @@ -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); + } + } + } +}