From 472d7c466d33bd1fe4cd293b354e52bf16384520 Mon Sep 17 00:00:00 2001 From: Gordon Norman Squash Date: Tue, 10 Sep 2024 01:28:29 -0400 Subject: Initial commit This is where I have started tracking development with Git. I declare this as version 0.89. --- patches/persistent-mnemonics.c | 100 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 patches/persistent-mnemonics.c (limited to 'patches/persistent-mnemonics.c') diff --git a/patches/persistent-mnemonics.c b/patches/persistent-mnemonics.c new file mode 100644 index 0000000..311815e --- /dev/null +++ b/patches/persistent-mnemonics.c @@ -0,0 +1,100 @@ +/* Persistent mnemonics: + * (from 'sgm-flexible-mnemonics.c' [https://github.com/thesquash/sgm]) + * + * Restores the behaviour of the GTK setting 'gtk-auto-mnemonics'. When this + * setting is set (TRUE, the default), mnemonic letters on buttons and menu + * items will be underlined only while the key is pressed; when unset + * (FALSE), mnemonics will always be underlined. + * + * Enable the latter behaviour by adding to your settings.ini file: + * + * gtk-auto-mnemonics = 0 + */ + + +#include +#include + +#include + + +#undef G_LOG_DOMAIN +#define G_LOG_DOMAIN "Gtk3-Classic::Persistent-Mnemonics" + + +INTERCEPTED_CLASS_METHOD (gtk_window, notify, + (GObject * object, + GParamSpec * pspec), + void) + + +INTERCEPTED_CLASS_METHOD (gtk_menu_shell, deactivate, + (GtkMenuShell * menu_shell), + void) + + +void persistent_mnemonics_init () +{ + { + GtkWindowClass * gtk_window_class = + g_type_class_ref (GTK_TYPE_WINDOW); + + INTERCEPT_CLASS_METHOD (gtk_window, G_OBJECT_CLASS, notify) + + g_type_class_unref (gtk_window_class); + } + + + { + GtkMenuShellClass * gtk_menu_shell_class = + g_type_class_ref (GTK_TYPE_MENU_SHELL); + + INTERCEPT_CLASS_METHOD (gtk_menu_shell, GTK_MENU_SHELL_CLASS, + deactivate) + + g_type_class_unref (gtk_menu_shell_class); + } +} + + +static void +new_gtk_window_notify +(GObject * object, + GParamSpec * pspec) +{ + GtkSettings * settings; + gboolean auto_mnemonics; + + + CALL_ORIGINAL_CLASS_METHOD (gtk_window, notify, (object, pspec)); + + if (strcmp (pspec->name, "mnemonics-visible") != 0) + return; + + if (! gtk_window_get_mnemonics_visible (GTK_WINDOW (object))) + { + settings = gtk_widget_get_settings (GTK_WIDGET (object)); + g_object_get (settings, + "gtk-auto-mnemonics", &auto_mnemonics, + NULL); + if (! auto_mnemonics) + gtk_window_set_mnemonics_visible (GTK_WINDOW (object), + TRUE); + } +} + + +static void +new_gtk_menu_shell_deactivate +(GtkMenuShell * menu_shell) +{ + GtkWidget * toplevel; + + + CALL_ORIGINAL_CLASS_METHOD (gtk_menu_shell, deactivate, (menu_shell)); + + + toplevel = gtk_widget_get_toplevel (GTK_WIDGET (menu_shell)); + if (toplevel) + g_object_notify (G_OBJECT (toplevel), "mnemonics-visible"); +} -- cgit