wayland: Don't commit the surface on a resize
This fixes weirdness with GNOME. On a resize, we will schedule a new frame anyway which will commit the wl_surface for us anyway. If we don't resize, we'll commit to stay true to the wayland spec.
This commit is contained in:
parent
39e75e39e8
commit
99a5843595
13
glfw/wl_window.c
vendored
13
glfw/wl_window.c
vendored
@ -234,7 +234,7 @@ clipboard_mime(void) {
|
||||
return buf;
|
||||
}
|
||||
|
||||
static void
|
||||
static bool
|
||||
dispatchChangesAfterConfigure(_GLFWwindow *window, int32_t width, int32_t height) {
|
||||
bool size_changed = width != window->wl.width || height != window->wl.height;
|
||||
bool scale_changed = checkScaleChange(window);
|
||||
@ -252,6 +252,8 @@ dispatchChangesAfterConfigure(_GLFWwindow *window, int32_t width, int32_t height
|
||||
}
|
||||
|
||||
_glfwInputWindowDamage(window);
|
||||
|
||||
return size_changed || scale_changed;
|
||||
}
|
||||
|
||||
static void
|
||||
@ -510,10 +512,11 @@ static void xdgSurfaceHandleConfigure(void* data,
|
||||
window->wl.current.decoration_mode = mode;
|
||||
}
|
||||
|
||||
bool resized = false;
|
||||
if (window->wl.pending_state) {
|
||||
int width = window->wl.pending.width, height = window->wl.pending.height;
|
||||
set_csd_window_geometry(window, &width, &height);
|
||||
dispatchChangesAfterConfigure(window, width, height);
|
||||
resized = dispatchChangesAfterConfigure(window, width, height);
|
||||
if (window->wl.decorations.serverSide) {
|
||||
free_csd_surfaces(window);
|
||||
} else {
|
||||
@ -523,7 +526,11 @@ static void xdgSurfaceHandleConfigure(void* data,
|
||||
}
|
||||
|
||||
inform_compositor_of_window_geometry(window, "configure");
|
||||
wl_surface_commit(window->wl.surface);
|
||||
|
||||
if (!resized) {
|
||||
wl_surface_commit(window->wl.surface);
|
||||
}
|
||||
|
||||
window->wl.pending_state = 0;
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user