tiling drag: left-click needs threshold, mod-click doesn’t

related to https://github.com/i3/i3/issues/5155
This commit is contained in:
Michael Stapelberg 2022-10-16 17:21:01 +02:00 committed by Michael Stapelberg
parent 6479cb7deb
commit 2ba393f084
3 changed files with 6 additions and 5 deletions

View File

@ -13,4 +13,4 @@
* Initiates a mouse drag operation on a tiled window. * Initiates a mouse drag operation on a tiled window.
* *
*/ */
void tiling_drag(Con *con, xcb_button_press_event_t *event); void tiling_drag(Con *con, xcb_button_press_event_t *event, bool use_threshold);

View File

@ -229,7 +229,8 @@ static void route_click(Con *con, xcb_button_press_event_t *event, const bool mo
/* 2: floating modifier pressed, initiate a drag */ /* 2: floating modifier pressed, initiate a drag */
if (mod_pressed && event->detail == XCB_BUTTON_INDEX_1 && !floatingcon) { if (mod_pressed && event->detail == XCB_BUTTON_INDEX_1 && !floatingcon) {
tiling_drag(con, event); const bool use_threshold = !mod_pressed;
tiling_drag(con, event, use_threshold);
allow_replay_pointer(event->time); allow_replay_pointer(event->time);
return; return;
} }
@ -307,7 +308,8 @@ static void route_click(Con *con, xcb_button_press_event_t *event, const bool mo
/* 8: floating modifier pressed, initiate a drag */ /* 8: floating modifier pressed, initiate a drag */
if ((mod_pressed || dest == CLICK_DECORATION) && event->detail == XCB_BUTTON_INDEX_1) { if ((mod_pressed || dest == CLICK_DECORATION) && event->detail == XCB_BUTTON_INDEX_1) {
allow_replay_pointer(event->time); allow_replay_pointer(event->time);
tiling_drag(con, event); const bool use_threshold = !mod_pressed;
tiling_drag(con, event, use_threshold);
return; return;
} }

View File

@ -267,7 +267,7 @@ static xcb_window_t create_drop_indicator(Rect rect) {
* Initiates a mouse drag operation on a tiled window. * Initiates a mouse drag operation on a tiled window.
* *
*/ */
void tiling_drag(Con *con, xcb_button_press_event_t *event) { void tiling_drag(Con *con, xcb_button_press_event_t *event, bool use_threshold) {
DLOG("Start dragging tiled container: con = %p\n", con); DLOG("Start dragging tiled container: con = %p\n", con);
bool set_focus = (con == focused); bool set_focus = (con == focused);
bool set_fs = con->fullscreen_mode != CF_NONE; bool set_fs = con->fullscreen_mode != CF_NONE;
@ -283,7 +283,6 @@ void tiling_drag(Con *con, xcb_button_press_event_t *event) {
xcb_window_t indicator = 0; xcb_window_t indicator = 0;
const struct callback_params params = {&indicator, &target, &direction, &drop_type}; const struct callback_params params = {&indicator, &target, &direction, &drop_type};
const bool use_threshold = true;
drag_result_t drag_result = drag_pointer(con, event, XCB_NONE, XCURSOR_CURSOR_MOVE, use_threshold, drag_callback, &params); drag_result_t drag_result = drag_pointer(con, event, XCB_NONE, XCURSOR_CURSOR_MOVE, use_threshold, drag_callback, &params);
/* Dragging is done. We don't need the indicator window any more. */ /* Dragging is done. We don't need the indicator window any more. */