From be89478f7acb35880950e4af2b06dbf0876bec77 Mon Sep 17 00:00:00 2001 From: Johan Malm Date: Fri, 7 Jan 2022 20:53:48 +0000 Subject: [PATCH] view: fix bug in view_snap_to_edge() Use view_move() and view_move_resize() correctly. view_move_resize() should only be used when the view actually changes width and/or height, otherwise the serials might cause a delay in moving xdg-shell clients. Issue #201 --- include/labwc.h | 9 +++++++++ src/view.c | 24 ++++++++++++++++-------- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/include/labwc.h b/include/labwc.h index 9749223b..2ab577f8 100644 --- a/include/labwc.h +++ b/include/labwc.h @@ -368,6 +368,15 @@ void view_subsurface_create(struct view *view, void view_set_activated(struct view *view, bool activated); void view_close(struct view *view); struct border view_border(struct view *view); + +/** + * view_move_resize - resize and move view + * @view: view to be resized and moved + * @geo: the new geometry + * NOTE: Only use this when the view actually changes width and/or height + * otherwise the serials might cause a delay in moving xdg-shell clients. + * For move only, use view_move() + */ void view_move_resize(struct view *view, struct wlr_box geo); void view_move(struct view *view, double x, double y); void view_minimize(struct view *view, bool minimized); diff --git a/src/view.c b/src/view.c index fe4099da..0ea556c8 100644 --- a/src/view.c +++ b/src/view.c @@ -25,21 +25,24 @@ view_close(struct view *view) } void -view_move_resize(struct view *view, struct wlr_box geo) +view_move(struct view *view, double x, double y) { - if (view->impl->configure) { - view->impl->configure(view, geo); + if (view->impl->move) { + view->impl->move(view, x, y); } - ssd_update_title(view); view_discover_output(view); } void -view_move(struct view *view, double x, double y) +view_move_resize(struct view *view, struct wlr_box geo) { - if (view->impl->move) { - view->impl->move(view, x, y); + if (view->w == geo.width && view->h == geo.height) { + wlr_log(WLR_ERROR, "use view_move() if not resizing"); + } + if (view->impl->configure) { + view->impl->configure(view, geo); } + ssd_update_title(view); view_discover_output(view); } @@ -602,7 +605,12 @@ view_snap_to_edge(struct view *view, const char *direction) view_edge_invert(edge)); } - view_move_resize(view, dst); + if (view->w == dst.width && view->h == dst.height) { + /* move horizontally/vertically without changing size */ + view_move(view, dst.x, dst.y); + } else { + view_move_resize(view, dst); + } } const char * -- 2.52.0