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 @@ -24,16 +24,6 @@ view_close(struct view *view) } } -void -view_move_resize(struct view *view, struct wlr_box geo) -{ - if (view->impl->configure) { - view->impl->configure(view, geo); - } - ssd_update_title(view); - view_discover_output(view); -} - void view_move(struct view *view, double x, double y) { @@ -43,6 +33,19 @@ view_move(struct view *view, double x, double y) view_discover_output(view); } +void +view_move_resize(struct view *view, struct wlr_box geo) +{ + 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); +} + #define MIN_VIEW_WIDTH (100) #define MIN_VIEW_HEIGHT (60) @@ -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 *