dont queue up interative end actions
This commit is contained in:
parent
4ea5a21fe1
commit
9bd60fd92b
4 changed files with 37 additions and 13 deletions
|
@ -949,7 +949,11 @@ void action_run_list(GSList *acts, ObClient *c, ObFrameContext context,
|
|||
keyboard_interactive_grab(state, a->data.any.c, a);
|
||||
}
|
||||
|
||||
/* closing interactive actions are not queued */
|
||||
if (!done)
|
||||
ob_main_loop_queue_action(ob_main_loop, a);
|
||||
else
|
||||
a->func(&a->data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -531,6 +531,7 @@ void event_enter_client(ObClient *client)
|
|||
config_focus_delay,
|
||||
focus_delay_func,
|
||||
client, NULL);
|
||||
ob_debug("added focus timeout\n");
|
||||
} else
|
||||
focus_delay_func(client);
|
||||
}
|
||||
|
@ -679,10 +680,11 @@ static void event_handle_client(ObClient *client, XEvent *e)
|
|||
} else {
|
||||
#ifdef DEBUG_FOCUS
|
||||
ob_debug("%sNotify mode %d detail %d on %lx, "
|
||||
"focusing window\n",
|
||||
"focusing window: %d\n",
|
||||
(e->type == EnterNotify ? "Enter" : "Leave"),
|
||||
e->xcrossing.mode,
|
||||
e->xcrossing.detail, client?client->window:0);
|
||||
e->xcrossing.detail, (client?client->window:0),
|
||||
!nofocus);
|
||||
#endif
|
||||
if (!nofocus && config_focus_follow)
|
||||
event_enter_client(client);
|
||||
|
@ -1175,6 +1177,7 @@ static gboolean focus_delay_func(gpointer data)
|
|||
{
|
||||
ObClient *c = data;
|
||||
|
||||
ob_debug("focus timeout %d\n", focus_client != c);
|
||||
if (focus_client != c) {
|
||||
client_focus(c);
|
||||
if (config_focus_raise)
|
||||
|
@ -1195,12 +1198,23 @@ void event_ignore_queued_enters()
|
|||
|
||||
XSync(ob_display, FALSE);
|
||||
|
||||
ob_debug("Trying to ignore\n");
|
||||
|
||||
/* count the events */
|
||||
while (TRUE) {
|
||||
e = g_new(XEvent, 1);
|
||||
if (XCheckTypedEvent(ob_display, EnterNotify, e)) {
|
||||
saved = g_slist_append(saved, e);
|
||||
ObWindow *win;
|
||||
|
||||
win = g_hash_table_lookup(window_map, &e->xany.window);
|
||||
if (win && WINDOW_IS_CLIENT(win)) {
|
||||
ob_debug("skipping enter event on 0x%lx\n", e->xany.window);
|
||||
++ignore_enter_focus;
|
||||
} else
|
||||
ob_debug("NOT skipping enter event on 0x%lx\n",
|
||||
e->xany.window);
|
||||
|
||||
saved = g_slist_append(saved, e);
|
||||
} else {
|
||||
g_free(e);
|
||||
break;
|
||||
|
|
|
@ -77,6 +77,7 @@ gboolean grab_pointer(gboolean grab, ObCursor cur)
|
|||
False, GRAB_PTR_MASK, GrabModeAsync,
|
||||
GrabModeAsync, FALSE,
|
||||
ob_cursor(cur), event_lasttime) == Success;
|
||||
ob_debug("GRABBING\n");
|
||||
if (!ret)
|
||||
--pgrabs;
|
||||
} else
|
||||
|
@ -84,6 +85,9 @@ gboolean grab_pointer(gboolean grab, ObCursor cur)
|
|||
} else if (pgrabs > 0) {
|
||||
if (--pgrabs == 0) {
|
||||
XUngrabPointer(ob_display, event_lasttime);
|
||||
|
||||
ob_debug("UNGRABBING\n");
|
||||
event_ignore_queued_enters();
|
||||
}
|
||||
ret = TRUE;
|
||||
}
|
||||
|
|
|
@ -101,6 +101,8 @@ int main(int argc, char **argv)
|
|||
|
||||
g_set_prgname(argv[0]);
|
||||
|
||||
chdir(g_get_home_dir());
|
||||
|
||||
parse_paths_startup();
|
||||
|
||||
session_startup(&argc, &argv);
|
||||
|
|
Loading…
Reference in a new issue