We don't want the application to fight with the user when manually resizing a window.
Signed-off-by: Louis-Francis Ratté-Boulianne <[email protected]> --- xwayland/window-manager.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/xwayland/window-manager.c b/xwayland/window-manager.c index bea3cc68..3ee76027 100644 --- a/xwayland/window-manager.c +++ b/xwayland/window-manager.c @@ -173,6 +173,7 @@ struct weston_wm_window { int delete_window; int maximized_vert; int maximized_horz; + int resizing; int64_t sync_request_serial; int configure_pending; int sync_disabled; @@ -701,6 +702,11 @@ weston_wm_handle_configure_request(struct weston_wm *wm, xcb_generic_event_t *ev return; } + if (window->frame && window->resizing) { + wm_log("Ignore configure request while resizing window\n"); + return; + } + if (configure_request->value_mask & XCB_CONFIG_WINDOW_WIDTH) window->width = configure_request->width; if (configure_request->value_mask & XCB_CONFIG_WINDOW_HEIGHT) @@ -1672,9 +1678,11 @@ weston_wm_window_handle_moveresize(struct weston_wm_window *window, case _NET_WM_MOVERESIZE_SIZE_BOTTOM: case _NET_WM_MOVERESIZE_SIZE_BOTTOMLEFT: case _NET_WM_MOVERESIZE_SIZE_LEFT: + window->resizing = 1; xwayland_interface->resize(window->shsurf, pointer, map[detail]); break; case _NET_WM_MOVERESIZE_CANCEL: + window->resizing = 0; break; } } @@ -2110,6 +2118,10 @@ weston_wm_handle_button(struct weston_wm *wm, xcb_generic_event_t *event) WL_POINTER_BUTTON_STATE_RELEASED; button_id = button->detail == 1 ? BTN_LEFT : BTN_RIGHT; + if (window->resizing && button_id == BTN_LEFT && + button_state == WL_POINTER_BUTTON_STATE_PRESSED) + window->resizing = 0; + if (button_state == WL_POINTER_BUTTON_STATE_PRESSED) { if (button->time - window->last_button_time <= DOUBLE_CLICK_PERIOD) { double_click = 1; @@ -2147,8 +2159,10 @@ weston_wm_handle_button(struct weston_wm *wm, xcb_generic_event_t *event) } if (frame_status(window->frame) & FRAME_STATUS_RESIZE) { - if (pointer && weston_wm_window_is_resizable(window)) + if (pointer && weston_wm_window_is_resizable(window)) { + window->resizing = 1; xwayland_interface->resize(window->shsurf, pointer, location); + } frame_status_clear(window->frame, FRAME_STATUS_RESIZE); } -- 2.12.2 _______________________________________________ wayland-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/wayland-devel
