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, FALSE, OB_CURSOR_NONE);
- } else {
- ObClient *c;
-
- /* 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);
- }
- }
+ if (data->any.context != OB_FRAME_CONTEXT_CLIENT && !data->any.button)
+ grab_pointer(FALSE, FALSE, OB_CURSOR_NONE);
}
typedef struct
(c && c->type == OB_CLIENT_TYPE_DESKTOP &&
context == OB_FRAME_CONTEXT_DESKTOP)) &&
(a->func == action_focus ||
- a->func == action_activate))
+ a->func == action_activate ||
+ a->func == action_showmenu))
{
/* XXX MORE UGLY HACK
actions from clicks on client windows are NOT queued.
so, this is just for that bug, and it will only NOT queue it
if it is a focusing action that can be used with the mouse
pointer. ugh.
+
+ also with the menus, there is a race going on. if the
+ desktop wants to pop up a menu, and we do to, we send them
+ the button before we pop up the menu, so they pop up their
+ menu first. but not always. if we pop up our menu before
+ sending them the button press, then the result is
+ deterministic. yay.
*/
a->func(&a->data);
} else
if (cit == c) break;
if (client_normal(cit) == client_normal(c) &&
- cit->layer == c->layer &&
- cit->frame->visible &&
- !client_search_transient(c, cit))
+ cit->layer == c->layer &&
+ cit->frame->visible &&
+ !client_search_transient(c, cit))
{
if (RECT_INTERSECTS_RECT(cit->frame->area, c->frame->area)) {
raise = TRUE;
void action_toggle_show_desktop(union ActionData *data)
{
- screen_show_desktop(!screen_showing_desktop);
+ screen_show_desktop(!screen_showing_desktop, TRUE);
}
void action_show_desktop(union ActionData *data)
{
- screen_show_desktop(TRUE);
+ screen_show_desktop(TRUE, TRUE);
}
void action_unshow_desktop(union ActionData *data)
{
- screen_show_desktop(FALSE);
+ screen_show_desktop(FALSE, TRUE);
}
void action_break_chroot(union ActionData *data)