Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 21 additions & 29 deletions src/KeyboardManager.vala
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
* Copyright 2016 Santiago León
* Copyright 2023 elementary, Inc. <https://elementary.io>
* Copyright 2023-2025 elementary, Inc. <https://elementary.io>
* SPDX-License-Identifier: GPL-3.0-or-later
*/

Expand All @@ -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
Expand All @@ -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") {
Expand Down
12 changes: 3 additions & 9 deletions src/WindowManager.vala
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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 ()) {
Expand Down Expand Up @@ -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}
*/
Expand Down
Loading