From 81f84728231816fbb49ecc4912828f991cd8f0cf Mon Sep 17 00:00:00 2001 From: Leonhard <106322251+leolost2605@users.noreply.github.com> Date: Mon, 17 Jun 2024 19:07:12 +0200 Subject: [PATCH] Dialogs: Implement InhibitShortcutsDialog (#1948) --- src/Dialogs.vala | 56 ++++++++++++++++++++++++++++++++++++++++++ src/WindowManager.vala | 4 +++ 2 files changed, 60 insertions(+) diff --git a/src/Dialogs.vala b/src/Dialogs.vala index 6e0364ef..0898eb7d 100644 --- a/src/Dialogs.vala +++ b/src/Dialogs.vala @@ -196,4 +196,60 @@ namespace Gala { } } } + + public class InhibitShortcutsDialog : AccessDialog, Meta.InhibitShortcutsDialog { + public Meta.Window window { + owned get { return parent; } + construct { parent = value; } + } + + public App app { get; construct; } + + public InhibitShortcutsDialog (Gala.App app, Meta.Window window) { + Object (app: app, window: window); + } + + construct { + icon = "preferences-desktop-keyboard"; + + var window_title = app.name; + if (window_title != null) { + title = _("ā€œ%sā€ wants to inhibit system shortcuts").printf (window_title); + } else { + title = _("An application wants to inhibit system shortcuts"); + } + + body = _("All system shortcuts will be redirected to the application."); + accept_label = _("Allow"); + deny_label = _("Deny"); + } + + public override void show () { + if (path != null) { + return; + } + + // Naive check to always allow inhibiting by our settings app. This is needed for setting custom shortcuts + if (app.id == "io.elementary.settings.desktop") { + on_response (0); + return; + } + + base.show (); + } + + public void hide () { + if (path != null) { + close (); + } + } + + protected override void on_response (uint response_id) { + if (response_id == 0) { + base.response (Meta.InhibitShortcutsDialogResponse.ALLOW); + } else { + base.response (Meta.InhibitShortcutsDialogResponse.DENY); + } + } + } } diff --git a/src/WindowManager.vala b/src/WindowManager.vala index b7714a5e..b6c87ad2 100644 --- a/src/WindowManager.vala +++ b/src/WindowManager.vala @@ -2336,6 +2336,10 @@ namespace Gala { return new CloseDialog (window_tracker.get_app_for_window (window), window); } + public override Meta.InhibitShortcutsDialog create_inhibit_shortcuts_dialog (Meta.Window window) { + return new InhibitShortcutsDialog (window_tracker.get_app_for_window (window), window); + } + public override unowned Meta.PluginInfo? plugin_info () { return info; }