aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rootston/desktop.c4
-rw-r--r--rootston/wl_shell.c17
-rw-r--r--rootston/xdg_shell_v6.c17
-rw-r--r--rootston/xwayland.c18
4 files changed, 31 insertions, 25 deletions
diff --git a/rootston/desktop.c b/rootston/desktop.c
index faaefd05..e36ae6a4 100644
--- a/rootston/desktop.c
+++ b/rootston/desktop.c
@@ -298,6 +298,10 @@ void view_damage_whole(struct roots_view *view) {
}
void view_update_position(struct roots_view *view, double x, double y) {
+ if (view->x == x && view->y == y) {
+ return;
+ }
+
view_damage_whole(view);
view->x = x;
view->y = y;
diff --git a/rootston/wl_shell.c b/rootston/wl_shell.c
index 25ef9a3c..f7b09db0 100644
--- a/rootston/wl_shell.c
+++ b/rootston/wl_shell.c
@@ -88,22 +88,23 @@ static void handle_surface_commit(struct wl_listener *listener, void *data) {
struct roots_view *view = roots_surface->view;
struct wlr_surface *wlr_surface = view->wlr_surface;
+ view_apply_damage(view);
+
int width = wlr_surface->current->width;
int height = wlr_surface->current->height;
+ double x = view->x;
+ double y = view->y;
if (view->pending_move_resize.update_x) {
- double x = view->pending_move_resize.x +
- view->pending_move_resize.width - width;
- view_update_position(view, x, view->y);
+ x = view->pending_move_resize.x + view->pending_move_resize.width -
+ width;
view->pending_move_resize.update_x = false;
}
if (view->pending_move_resize.update_y) {
- double y = view->pending_move_resize.y +
- view->pending_move_resize.height - height;
- view_update_position(view, view->x, y);
+ y = view->pending_move_resize.y + view->pending_move_resize.height -
+ height;
view->pending_move_resize.update_y = false;
}
-
- view_apply_damage(view);
+ view_update_position(view, x, y);
}
static void handle_destroy(struct wl_listener *listener, void *data) {
diff --git a/rootston/xdg_shell_v6.c b/rootston/xdg_shell_v6.c
index 225886ad..295be6a2 100644
--- a/rootston/xdg_shell_v6.c
+++ b/rootston/xdg_shell_v6.c
@@ -197,29 +197,30 @@ static void handle_commit(struct wl_listener *listener, void *data) {
struct roots_view *view = roots_surface->view;
struct wlr_xdg_surface_v6 *surface = view->xdg_surface_v6;
+ view_apply_damage(view);
+
uint32_t pending_serial =
roots_surface->pending_move_resize_configure_serial;
if (pending_serial > 0 && pending_serial >= surface->configure_serial) {
struct wlr_box size;
get_size(view, &size);
+ double x = view->x;
+ double y = view->y;
if (view->pending_move_resize.update_x) {
- double x = view->pending_move_resize.x +
- view->pending_move_resize.width - size.width;
- view_update_position(view, x, view->y);
+ x = view->pending_move_resize.x + view->pending_move_resize.width -
+ size.width;
}
if (view->pending_move_resize.update_y) {
- double y = view->pending_move_resize.y +
- view->pending_move_resize.height - size.height;
- view_update_position(view, view->x, y);
+ y = view->pending_move_resize.y + view->pending_move_resize.height -
+ size.height;
}
+ view_update_position(view, x, y);
if (pending_serial == surface->configure_serial) {
roots_surface->pending_move_resize_configure_serial = 0;
}
}
-
- view_apply_damage(view);
}
static void handle_destroy(struct wl_listener *listener, void *data) {
diff --git a/rootston/xwayland.c b/rootston/xwayland.c
index 856c3d70..81f91b4f 100644
--- a/rootston/xwayland.c
+++ b/rootston/xwayland.c
@@ -204,23 +204,23 @@ static void handle_surface_commit(struct wl_listener *listener, void *data) {
struct roots_view *view = roots_surface->view;
struct wlr_surface *wlr_surface = view->wlr_surface;
+ view_apply_damage(view);
+
int width = wlr_surface->current->width;
int height = wlr_surface->current->height;
-
+ double x = view->x;
+ double y = view->y;
if (view->pending_move_resize.update_x) {
- double x = view->pending_move_resize.x +
- view->pending_move_resize.width - width;
- view_update_position(view, x, view->y);
+ x = view->pending_move_resize.x + view->pending_move_resize.width -
+ width;
view->pending_move_resize.update_x = false;
}
if (view->pending_move_resize.update_y) {
- double y = view->pending_move_resize.y +
- view->pending_move_resize.height - height;
- view_update_position(view, view->x, y);
+ y = view->pending_move_resize.y + view->pending_move_resize.height -
+ height;
view->pending_move_resize.update_y = false;
}
-
- view_apply_damage(view);
+ view_update_position(view, x, y);
}
static void handle_map_notify(struct wl_listener *listener, void *data) {