From 6f80299eb0aaf344a386dee88c7dc9cb67dc79a4 Mon Sep 17 00:00:00 2001 From: wheaney <42350981+wheaney@users.noreply.github.com> Date: Sat, 8 Mar 2025 15:25:17 -0800 Subject: [PATCH] Attempt to fix a GNOME 48 issue with the enable_unredirect call, v2.0.8 --- VERSION | 2 +- gnome/src/cursormanager.js | 2 -- gnome/src/extension.js | 13 ++++++++-- gnome/src/virtualdisplaysactor.js | 43 ++++++++++++++++++++++++------- 4 files changed, 46 insertions(+), 14 deletions(-) diff --git a/VERSION b/VERSION index 6a0ca2d..e8f41f0 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.0.7 \ No newline at end of file +2.0.8 \ No newline at end of file diff --git a/gnome/src/cursormanager.js b/gnome/src/cursormanager.js index b8470d1..dd4a77d 100644 --- a/gnome/src/cursormanager.js +++ b/gnome/src/cursormanager.js @@ -117,7 +117,6 @@ export class CursorManager { this._updateMouseSprite(); this._cursorTracker.connectObject('cursor-changed', this._updateMouseSprite.bind(this), this); - Meta.Compositor?.disable_unredirect?.() ?? Meta.disable_unredirect_for_display(global.display); // cap the refresh rate for performance reasons const interval = 1000.0 / Math.min(this._refreshRate, 60); @@ -141,7 +140,6 @@ export class CursorManager { if (this._cursorTracker) this._cursorTracker.disconnectObject(this); if (this._mouseSprite?.content?.texture) this._mouseSprite.content.texture = null; - Meta.Compositor?.enable_unredirect?.() ?? Meta.enable_unredirect_for_display(global.display); if (!this._systemCursorShown) this._showSystemCursor(); } diff --git a/gnome/src/extension.js b/gnome/src/extension.js index 29559f4..26a37dc 100644 --- a/gnome/src/extension.js +++ b/gnome/src/extension.js @@ -295,7 +295,11 @@ export default class BreezyDesktopExtension extends Extension { this._virtual_displays_actor.connect('notify::focused-monitor-details', this._update_display_distance.bind(this)); this._follow_threshold_connection = this.settings.connect('changed::follow-threshold', this._update_follow_threshold.bind(this)); - Meta.Compositor?.disable_unredirect?.() ?? Meta.disable_unredirect_for_display(global.display); + if (Meta.Compositor?.disable_unredirect) { + Meta.Compositor.disable_unredirect(); + } else { + Meta.disable_unredirect_for_display(global.display); + } this._add_settings_keybinding('toggle-xr-effect-shortcut', this._toggle_xr_effect.bind(this)); this._add_settings_keybinding('recenter-display-shortcut', this._recenter_display.bind(this)); @@ -538,7 +542,12 @@ export default class BreezyDesktopExtension extends Extension { Main.wm.removeKeybinding('recenter-display-shortcut'); Main.wm.removeKeybinding('toggle-display-distance-shortcut'); Main.wm.removeKeybinding('toggle-follow-shortcut'); - Meta.Compositor?.enable_unredirect?.() ?? Meta.enable_unredirect_for_display(global.display); + + if (Meta.Compositor?.enable_unredirect) { + Meta.Compositor.enable_unredirect(); + } else { + Meta.enable_unredirect_for_display(global.display); + } for (let settings_key of this._effect_settings_bindings) { Gio.Settings.unbind(this.settings, settings_key); diff --git a/gnome/src/virtualdisplaysactor.js b/gnome/src/virtualdisplaysactor.js index e1fec8c..538fa8c 100644 --- a/gnome/src/virtualdisplaysactor.js +++ b/gnome/src/virtualdisplaysactor.js @@ -586,16 +586,41 @@ export const VirtualDisplaysActor = GObject.registerClass({ try { const calibratingBanner = GdkPixbuf.Pixbuf.new_from_file(`${Globals.extension_dir}/textures/calibrating.png`); - const calibratingImage = new Clutter.Image(); - calibratingImage.set_data(calibratingBanner.get_pixels(), Cogl.PixelFormat.RGB_888, - calibratingBanner.width, calibratingBanner.height, calibratingBanner.rowstride); - this.bannerContent = Clutter.TextureContent.new_from_texture(calibratingImage.get_texture(), null); - const customBanner = GdkPixbuf.Pixbuf.new_from_file(`${Globals.extension_dir}/textures/custom_banner.png`); - const customBannerImage = new Clutter.Image(); - customBannerImage.set_data(customBanner.get_pixels(), Cogl.PixelFormat.RGB_888, - customBanner.width, customBanner.height, customBanner.rowstride); - this.customBannerContent = Clutter.TextureContent.new_from_texture(customBannerImage.get_texture(), null); + + if (Clutter.Image) { + const calibratingImage = new Clutter.Image(); + calibratingImage.set_data(calibratingBanner.get_pixels(), Cogl.PixelFormat.RGB_888, + calibratingBanner.width, calibratingBanner.height, calibratingBanner.rowstride); + this.bannerContent = Clutter.TextureContent.new_from_texture(calibratingImage.get_texture(), null); + + const customBannerImage = new Clutter.Image(); + customBannerImage.set_data(customBanner.get_pixels(), Cogl.PixelFormat.RGB_888, + customBanner.width, customBanner.height, customBanner.rowstride); + this.customBannerContent = Clutter.TextureContent.new_from_texture(customBannerImage.get_texture(), null); + } else { + const backend = global.stage.get_context?.().get_backend() ?? Clutter.get_default_backend(); + const coglContext = backend.get_cogl_context(); + this.bannerContent = St.ImageContent.new_with_preferred_size(calibratingBanner.width, calibratingBanner.height); + this.bannerContent.set_bytes( + coglContext, + calibratingBanner.get_pixels(), + Cogl.PixelFormat.RGB_888, + calibratingBanner.width, + calibratingBanner.height, + calibratingBanner.rowstride + ) + + this.customBannerContent = St.ImageContent.new_with_preferred_size(customBanner.width, customBanner.height); + this.customBannerContent.set_bytes( + coglContext, + customBanner.get_pixels(), + Cogl.PixelFormat.RGB_888, + customBanner.width, + customBanner.height, + customBanner.rowstride + ); + } this.bannerActor = new Clutter.Actor({ width: calibratingBanner.width,