From 553e2dd7296e4f046d8436386fc9be85c60a9738 Mon Sep 17 00:00:00 2001 From: lenemter Date: Thu, 8 May 2025 17:30:16 +0300 Subject: [PATCH] KeyboardManager: cleanup --- src/KeyboardManager.vala | 50 +++++++++++++++++----------------------- src/WindowManager.vala | 12 +++------- 2 files changed, 24 insertions(+), 38 deletions(-) diff --git a/src/KeyboardManager.vala b/src/KeyboardManager.vala index b8edb9493..c8b7f4be6 100644 --- a/src/KeyboardManager.vala +++ b/src/KeyboardManager.vala @@ -1,6 +1,6 @@ /* * Copyright 2016 Santiago León - * Copyright 2023 elementary, Inc. + * Copyright 2023-2025 elementary, Inc. * SPDX-License-Identifier: GPL-3.0-or-later */ @@ -11,43 +11,36 @@ public class Gala.KeyboardManager : Object { "grp:ctrl_shift_toggle", "grp:shift_caps_toggle" }; - private static KeyboardManager? instance; - private static GLib.Settings settings; + public Meta.Display display { construct; private get; } - public unowned Meta.Display display { construct; private get; } + private GLib.Settings settings; - public static void init (Meta.Display display) { - if (instance != null) { - return; - } - - instance = new KeyboardManager (display); - - display.modifiers_accelerator_activated.connect ((display) => KeyboardManager.handle_modifiers_accelerator_activated (display, false)); + public KeyboardManager (Meta.Display display) { + Object (display: display); } - static construct { - var schema = GLib.SettingsSchemaSource.get_default ().lookup ("org.gnome.desktop.input-sources", true); - if (schema == null) { - critical ("org.gnome.desktop.input-sources not found."); - } + construct { + settings = new GLib.Settings ("org.gnome.desktop.input-sources"); - settings = new GLib.Settings.full (schema, null, null); - } + on_settings_changed ("sources"); // Update the list of layouts + on_settings_changed ("current"); // Set current layout - construct { - settings.changed.connect (set_keyboard_layout); + settings.changed.connect (on_settings_changed); - set_keyboard_layout (settings, "sources"); // Update the list of layouts - set_keyboard_layout (settings, "current"); // Set current layout + display.modifiers_accelerator_activated.connect (() => switch_input_source (false)); + + var keybinding_settings = new GLib.Settings ("io.elementary.desktop.wm.keybindings"); + display.add_keybinding ("switch-input-source", keybinding_settings, IGNORE_AUTOREPEAT, handle_keybinding); + display.add_keybinding ("switch-input-source-backward", keybinding_settings, IGNORE_AUTOREPEAT, handle_keybinding); } - private KeyboardManager (Meta.Display display) { - Object (display: display); + private void handle_keybinding ( + Meta.Display display, Meta.Window? window, Clutter.KeyEvent? event, Meta.KeyBinding binding + ) { + switch_input_source (binding.get_name ().has_suffix ("-backward")); } - [CCode (instance_pos = -1)] - public static bool handle_modifiers_accelerator_activated (Meta.Display display, bool backward) { + private bool switch_input_source (bool backward) { #if HAS_MUTTER46 display.get_compositor ().backend.ungrab_keyboard (display.get_current_time ()); #else @@ -72,8 +65,7 @@ public class Gala.KeyboardManager : Object { return true; } - [CCode (instance_pos = -1)] - private void set_keyboard_layout (GLib.Settings settings, string key) { + private void on_settings_changed (string key) { unowned var backend = display.get_context ().get_backend (); if (key == "sources" || key == "xkb-options" || key == "xkb-model") { diff --git a/src/WindowManager.vala b/src/WindowManager.vala index be717db11..1cb02d7e8 100644 --- a/src/WindowManager.vala +++ b/src/WindowManager.vala @@ -72,6 +72,8 @@ namespace Gala { private HotCornerManager? hot_corner_manager = null; + private KeyboardManager keyboard_manager; + public WindowTracker? window_tracker { get; private set; } private NotificationsManager notifications_manager; @@ -171,7 +173,7 @@ namespace Gala { DBus.init (this, notifications_manager, screenshot_manager); WindowListener.init (display); - KeyboardManager.init (display); + keyboard_manager = new KeyboardManager (display); window_tracker = new WindowTracker (); WindowStateSaver.init (window_tracker); window_tracker.init (display); @@ -294,8 +296,6 @@ namespace Gala { display.add_keybinding ("cycle-workspaces-next", keybinding_settings, Meta.KeyBindingFlags.NONE, (Meta.KeyHandlerFunc) handle_cycle_workspaces); display.add_keybinding ("cycle-workspaces-previous", keybinding_settings, Meta.KeyBindingFlags.NONE, (Meta.KeyHandlerFunc) handle_cycle_workspaces); display.add_keybinding ("panel-main-menu", keybinding_settings, Meta.KeyBindingFlags.IGNORE_AUTOREPEAT, (Meta.KeyHandlerFunc) handle_applications_menu); - display.add_keybinding ("switch-input-source", keybinding_settings, Meta.KeyBindingFlags.IGNORE_AUTOREPEAT, (Meta.KeyHandlerFunc) handle_switch_input_source); - display.add_keybinding ("switch-input-source-backward", keybinding_settings, Meta.KeyBindingFlags.IGNORE_AUTOREPEAT, (Meta.KeyHandlerFunc) handle_switch_input_source); display.add_keybinding ("expose-all-windows", keybinding_settings, Meta.KeyBindingFlags.IGNORE_AUTOREPEAT, () => { if (window_overview.is_opened ()) { @@ -525,12 +525,6 @@ namespace Gala { launch_action (ActionKeys.PANEL_MAIN_MENU_ACTION); } - [CCode (instance_pos = -1)] - private void handle_switch_input_source (Meta.Display display, Meta.Window? window, - Clutter.KeyEvent event, Meta.KeyBinding binding) { - KeyboardManager.handle_modifiers_accelerator_activated (display, binding.get_name ().has_suffix ("-backward")); - } - /** * {@inheritDoc} */