aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backend/x11/output.c13
-rw-r--r--include/backend/x11.h2
2 files changed, 15 insertions, 0 deletions
diff --git a/backend/x11/output.c b/backend/x11/output.c
index 585e037a..58c90a89 100644
--- a/backend/x11/output.c
+++ b/backend/x11/output.c
@@ -63,6 +63,10 @@ static bool output_set_custom_mode(struct wlr_output *wlr_output,
struct wlr_x11_output *output = get_x11_output_from_output(wlr_output);
struct wlr_x11_backend *x11 = output->x11;
+ if (width == output->win_width && height == output->win_height) {
+ return true;
+ }
+
const uint32_t values[] = { width, height };
xcb_void_cookie_t cookie = xcb_configure_window_checked(
x11->xcb, output->win,
@@ -76,6 +80,9 @@ static bool output_set_custom_mode(struct wlr_output *wlr_output,
return false;
}
+ output->win_width = width;
+ output->win_height = height;
+
// Move the pointer to its new location
update_x11_pointer_position(output, output->x11->time);
@@ -598,6 +605,9 @@ struct wlr_output *wlr_x11_output_create(struct wlr_backend *backend) {
x11->screen->root, 0, 0, wlr_output->width, wlr_output->height, 0,
XCB_WINDOW_CLASS_INPUT_OUTPUT, x11->visualid, mask, values);
+ output->win_width = wlr_output->width;
+ output->win_height = wlr_output->height;
+
struct {
xcb_input_event_mask_t head;
xcb_input_xi_event_mask_t mask;
@@ -659,6 +669,9 @@ void handle_x11_configure_notify(struct wlr_x11_output *output,
return;
}
+ output->win_width = ev->width;
+ output->win_height = ev->height;
+
struct wlr_output_state state;
wlr_output_state_init(&state);
wlr_output_state_set_custom_mode(&state, ev->width, ev->height, 0);
diff --git a/include/backend/x11.h b/include/backend/x11.h
index 06834c1c..9eb208b1 100644
--- a/include/backend/x11.h
+++ b/include/backend/x11.h
@@ -35,6 +35,8 @@ struct wlr_x11_output {
xcb_window_t win;
xcb_present_event_t present_event_id;
+ int32_t win_width, win_height;
+
struct wlr_pointer pointer;
struct wlr_touch touch;