X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Faction.c;h=f106697971ee4c3617821e48cecc2f07dd65ec60;hb=ed4d0ca31a9c1c6c815cb87a058bb1d36a0888c1;hp=13152f72d9b1382ba3796319db624c9ec3cb1dad;hpb=d3e524420f87b3aedaf3076f3677cb1c3213f06f;p=chaz%2Fopenbox diff --git a/openbox/action.c b/openbox/action.c index 13152f72..f1066979 100644 --- a/openbox/action.c +++ b/openbox/action.c @@ -20,6 +20,7 @@ #include "debug.h" #include "client.h" #include "focus.h" +#include "focus_cycle.h" #include "moveresize.h" #include "menu.h" #include "prop.h" @@ -38,19 +39,16 @@ #include -inline void client_action_start(union ActionData *data) +static void client_action_start(union ActionData *data) { - if (config_focus_follow) - if (data->any.context != OB_FRAME_CONTEXT_CLIENT && !data->any.button) - grab_pointer(FALSE, FALSE, OB_CURSOR_NONE); } -inline void client_action_end(union ActionData *data) +static void client_action_end(union ActionData *data) { if (config_focus_follow) if (data->any.context != OB_FRAME_CONTEXT_CLIENT) { - if (!data->any.button) { - ungrab_pointer(); + if (!data->any.button && data->any.c) { + event_ignore_all_queued_enters(); } else { ObClient *c; @@ -1141,9 +1139,15 @@ void action_run_list(GSList *acts, ObClient *c, ObFrameContext context, /* XXX UGLY HACK race with motion event starting a move and the button release gettnig processed first. answer: don't queue - moveresize starts. UGLY HACK XXX */ + moveresize starts. UGLY HACK XXX + + XXX ALSO don't queue showmenu events, because on button press + events we need to know if a mouse grab is going to take place, + and set the button to 0, so that later motion events don't think + that a drag is going on. since showmenu grabs the pointer.. + */ if (a->data.any.interactive || a->func == action_move || - a->func == action_resize) + a->func == action_resize || a->func == action_showmenu) { /* interactive actions are not queued */ a->func(&a->data); @@ -1296,7 +1300,7 @@ void action_focus(union ActionData *data) go moving on us */ event_halt_focus_delay(); - client_focus(data->client.any.c, FALSE); + client_focus(data->client.any.c); } } else { /* focus action on something other than a client, make keybindings