Wayland KDE: Fix window background blur not adapting when window is grown. Also fix turning it on and off not working.

Fixes #7351
This commit is contained in:
Kovid Goyal
2024-04-16 18:11:26 +05:30
parent e531791f79
commit 6c1a83ffd7
2 changed files with 17 additions and 6 deletions

View File

@@ -50,6 +50,11 @@ consumption to do the same tasks.
Detailed list of changes Detailed list of changes
------------------------------------- -------------------------------------
0.34.1 [future]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Wayland KDE: Fix window background blur not adapting when window is grown. Also fix turning it on and off not working. (:iss:`7351`)
0.34.0 [2024-04-15] 0.34.0 [2024-04-15]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

18
glfw/wl_window.c vendored
View File

@@ -316,7 +316,6 @@ checkScaleChange(_GLFWwindow* window) {
static void static void
update_regions(_GLFWwindow* window) { update_regions(_GLFWwindow* window) {
if (window->wl.transparent && !window->wl.org_kde_kwin_blur) return;
struct wl_region* region = wl_compositor_create_region(_glfw.wl.compositor); struct wl_region* region = wl_compositor_create_region(_glfw.wl.compositor);
if (!region) return; if (!region) return;
wl_region_add(region, 0, 0, window->wl.width, window->wl.height); wl_region_add(region, 0, 0, window->wl.width, window->wl.height);
@@ -324,9 +323,18 @@ update_regions(_GLFWwindow* window) {
if (!window->wl.transparent) wl_surface_set_opaque_region(window->wl.surface, region); if (!window->wl.transparent) wl_surface_set_opaque_region(window->wl.surface, region);
// Set blur region // Set blur region
if (window->wl.org_kde_kwin_blur) { if (_glfw.wl.org_kde_kwin_blur_manager) {
org_kde_kwin_blur_set_region(window->wl.org_kde_kwin_blur, window->wl.has_blur ? region: NULL); // NULL means entire window
org_kde_kwin_blur_commit(window->wl.org_kde_kwin_blur); if (window->wl.has_blur) {
if (!window->wl.org_kde_kwin_blur)
window->wl.org_kde_kwin_blur = org_kde_kwin_blur_manager_create(_glfw.wl.org_kde_kwin_blur_manager, window->wl.surface);
if (window->wl.org_kde_kwin_blur)
org_kde_kwin_blur_set_region(window->wl.org_kde_kwin_blur, NULL);
org_kde_kwin_blur_commit(window->wl.org_kde_kwin_blur);
} else {
org_kde_kwin_blur_manager_unset(_glfw.wl.org_kde_kwin_blur_manager, window->wl.surface);
if (window->wl.org_kde_kwin_blur) { org_kde_kwin_blur_release(window->wl.org_kde_kwin_blur); window->wl.org_kde_kwin_blur = NULL; }
}
} }
wl_region_destroy(region); wl_region_destroy(region);
@@ -2618,8 +2626,6 @@ _glfwPlatformSetWindowBlur(_GLFWwindow *window, int blur_radius) {
bool has_blur = window->wl.has_blur; bool has_blur = window->wl.has_blur;
bool new_has_blur = blur_radius > 0; bool new_has_blur = blur_radius > 0;
if (new_has_blur != has_blur) { if (new_has_blur != has_blur) {
if (!window->wl.org_kde_kwin_blur)
window->wl.org_kde_kwin_blur = org_kde_kwin_blur_manager_create(_glfw.wl.org_kde_kwin_blur_manager, window->wl.surface);
window->wl.has_blur = new_has_blur; window->wl.has_blur = new_has_blur;
update_regions(window); update_regions(window);
} }