From c8301e5e860f71f8dd0951f6d2dedb044a355495 Mon Sep 17 00:00:00 2001 From: Aleksandr Mezin Date: Thu, 6 Nov 2025 22:24:14 +0200 Subject: [PATCH] pref/shortcuts: delay global keybinding updates until key release Workaround for a bug in Mutter 49.1.1 https://gitlab.gnome.org/GNOME/mutter/-/issues/4416 Fixes https://github.com/ddterm/gnome-shell-extension-ddterm/issues/1561 --- ddterm/pref/shortcuts.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/ddterm/pref/shortcuts.js b/ddterm/pref/shortcuts.js index 9fadd809..5d99f93a 100644 --- a/ddterm/pref/shortcuts.js +++ b/ddterm/pref/shortcuts.js @@ -77,6 +77,14 @@ function remove_shortcut(settings, model, renderer, path, accel_key = null, acce }); } +function delay_changes(settings) { + settings.delay(); +} + +function apply_changes(settings) { + settings.apply(); +} + export const ShortcutsWidget = GObject.registerClass({ GTypeName: 'DDTermPrefsShortcuts', Template: ui_file_uri('prefs-shortcuts.ui'), @@ -106,11 +114,30 @@ export const ShortcutsWidget = GObject.registerClass({ ), }, }, class PrefsShortcuts extends Gtk.Box { + #key_controller; + constructor(params) { super(params); insert_settings_actions(this, this.settings, ['shortcuts-enabled']); + if (IS_GTK3) { + this.#key_controller = Gtk.EventControllerKey.new(this); + } else { + this.#key_controller = Gtk.EventControllerKey.new(); + this.add_controller(this.#key_controller); + } + + this.#key_controller.connect( + 'key-released', + apply_changes.bind(globalThis, this.settings) + ); + + this.global_accel_renderer.connect( + 'accel-edited', + delay_changes.bind(globalThis, this.settings) + ); + for (const renderer of [this.accel_renderer, this.global_accel_renderer]) { for (const model of [this.shortcuts_list, this.global_shortcuts_list]) { renderer.connect(