Add sensible discretion to UnmapNotify drag abort
Only abort a drag action on UnmapNotify when the unmapping window is managed on the current workspace. fixes #1108
This commit is contained in:
parent
e08215896e
commit
f3bf314662
|
@ -629,6 +629,8 @@ drag_result_t drag_pointer(Con *con, const xcb_button_press_event_t *event, xcb_
|
||||||
xcb_flush(conn);
|
xcb_flush(conn);
|
||||||
|
|
||||||
xcb_generic_event_t *inside_event, *last_motion_notify = NULL;
|
xcb_generic_event_t *inside_event, *last_motion_notify = NULL;
|
||||||
|
Con *inside_con = NULL;
|
||||||
|
|
||||||
drag_result_t drag_result = DRAGGING;
|
drag_result_t drag_result = DRAGGING;
|
||||||
/* I’ve always wanted to have my own eventhandler… */
|
/* I’ve always wanted to have my own eventhandler… */
|
||||||
while (drag_result == DRAGGING && (inside_event = xcb_wait_for_event(conn))) {
|
while (drag_result == DRAGGING && (inside_event = xcb_wait_for_event(conn))) {
|
||||||
|
@ -654,8 +656,16 @@ drag_result_t drag_pointer(Con *con, const xcb_button_press_event_t *event, xcb_
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case XCB_UNMAP_NOTIFY:
|
case XCB_UNMAP_NOTIFY:
|
||||||
DLOG("Unmap-notify, aborting\n");
|
inside_con = con_by_window_id(((xcb_unmap_notify_event_t*)inside_event)->window);
|
||||||
drag_result = DRAG_ABORT;
|
|
||||||
|
if (inside_con != NULL) {
|
||||||
|
DLOG("UnmapNotify for window 0x%08x (container %p)\n", ((xcb_unmap_notify_event_t*)inside_event)->window, inside_con);
|
||||||
|
|
||||||
|
if (con_get_workspace(inside_con) == con_get_workspace(focused)) {
|
||||||
|
DLOG("UnmapNotify for a managed window on the current workspace, aborting\n");
|
||||||
|
drag_result = DRAG_ABORT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
handle_event(type, inside_event);
|
handle_event(type, inside_event);
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue