aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoremersion <contact@emersion.fr>2017-09-30 14:02:09 +0200
committeremersion <contact@emersion.fr>2017-09-30 14:02:09 +0200
commit74f2d0cd63131ab782c309270241bcbf0e47db12 (patch)
tree7ab395a1afe10759a4481eae94d6b24d49b41459
parent77d28183b53a9fc85efe4788f3a53f3077084f6b (diff)
Completely fix resize offset
-rw-r--r--include/rootston/view.h2
-rw-r--r--rootston/cursor.c6
-rw-r--r--rootston/desktop.c10
-rw-r--r--rootston/xdg_shell_v6.c6
4 files changed, 19 insertions, 5 deletions
diff --git a/include/rootston/view.h b/include/rootston/view.h
index d690fd48..39ff80db 100644
--- a/include/rootston/view.h
+++ b/include/rootston/view.h
@@ -61,11 +61,13 @@ struct roots_view {
// configure event from the xdg_shell
// If not then this should follow the typical type/impl pattern we use
// elsewhere
+ void (*get_size)(struct roots_view *view, struct wlr_box *box);
void (*get_input_bounds)(struct roots_view *view, struct wlr_box *box);
void (*activate)(struct roots_view *view, bool active);
void (*resize)(struct roots_view *view, uint32_t width, uint32_t height);
};
+void view_get_size(struct roots_view *view, struct wlr_box *box);
void view_get_input_bounds(struct roots_view *view, struct wlr_box *box);
void view_activate(struct roots_view *view, bool active);
void view_resize(struct roots_view *view, uint32_t width, uint32_t height);
diff --git a/rootston/cursor.c b/rootston/cursor.c
index bef30746..bd8f91d2 100644
--- a/rootston/cursor.c
+++ b/rootston/cursor.c
@@ -37,8 +37,10 @@ void view_begin_resize(struct roots_input *input, struct wlr_cursor *cursor,
input->offs_y = cursor->y;
input->view_x = view->x;
input->view_y = view->y;
- input->view_width = view->wlr_surface->current.width;
- input->view_height = view->wlr_surface->current.height;
+ struct wlr_box size;
+ view_get_size(view, &size);
+ input->view_width = size.width;
+ input->view_height = size.height;
input->resize_edges = edges;
wlr_seat_pointer_clear_focus(input->wl_seat);
}
diff --git a/rootston/desktop.c b/rootston/desktop.c
index 00657bc6..8ddd9444 100644
--- a/rootston/desktop.c
+++ b/rootston/desktop.c
@@ -25,6 +25,16 @@ void view_destroy(struct roots_view *view) {
free(view);
}
+void view_get_size(struct roots_view *view, struct wlr_box *box) {
+ if (view->get_size) {
+ view->get_size(view, box);
+ return;
+ }
+ box->x = box->y = 0;
+ box->width = view->wlr_surface->current.width;
+ box->height = view->wlr_surface->current.height;
+}
+
void view_get_input_bounds(struct roots_view *view, struct wlr_box *box) {
if (view->get_input_bounds) {
view->get_input_bounds(view, box);
diff --git a/rootston/xdg_shell_v6.c b/rootston/xdg_shell_v6.c
index 8f5b405c..ab34f52a 100644
--- a/rootston/xdg_shell_v6.c
+++ b/rootston/xdg_shell_v6.c
@@ -10,12 +10,12 @@
#include "rootston/server.h"
#include "rootston/input.h"
-/*static void get_input_bounds(struct roots_view *view, struct wlr_box *box) {
+static void get_size(struct roots_view *view, struct wlr_box *box) {
assert(view->type == ROOTS_XDG_SHELL_V6_VIEW);
struct wlr_xdg_surface_v6 *surf = view->xdg_surface_v6;
// TODO: surf->geometry can be NULL
memcpy(box, surf->geometry, sizeof(struct wlr_box));
-}*/
+}
static void activate(struct roots_view *view, bool active) {
assert(view->type == ROOTS_XDG_SHELL_V6_VIEW);
@@ -104,7 +104,7 @@ void handle_xdg_shell_v6_surface(struct wl_listener *listener, void *data) {
view->xdg_surface_v6 = surface;
view->roots_xdg_surface_v6 = roots_surface;
view->wlr_surface = surface->surface;
- //view->get_input_bounds = get_input_bounds;
+ view->get_size = get_size;
view->activate = activate;
view->resize = resize;
view->desktop = desktop;