Comment activer les mnémoniques dans 12.04 et / ou 14.04 GTK3?

La rumeur dit que “gtk-enable-mnemonics” est obsolète depuis la version 3.10 et je ne sais pas du tout comment obtenir que mon application affiche les mnémoniques.

Ils ne s’afficheront que si j’appuie sur la touche alt .

S’il vous plaît voir ici:

  • wxPython Button Shortcut Accelerator Comment ‘& spam’ | Débordement de stack

J’ai essayé tout ce qui est suggéré dans cet article en ce qui concerne settings.ini, en inversant le bool:

  • Comment désactiver les mnémoniques dans GTK3? | Demandez à Ubuntu

En relation:

  • GTK + 3 Référence Manua | Centre de développement GNOME

Pour “désactiver” les mnémoniques de Nautilus 3.10.1 sur Ubuntu 14.04 qui utilise GTK3:

  1. Créez le chemin et le fichier suivants s’il n’existe pas déjà.
    /home/YOURUSERNAME/.config/gtk-3.0/settings.ini
  2. Puis append:
    [Settings]
    gtk-enable-mnemonics = 0
  3. Puis déconnectez-vous et reconnectez-vous.

Sources:

  • Existe-t-il un équivalent de .gtkrc-2.0 dans gtk 3? | Services de messagerie GNOME
  • Paramètres: Manuel de référence GTK + 3 | Centre de développement GNOME

ps Notez que la documentation GTK indique que vous devriez avoir une variable d’environnement appelée XDG_CONFIG_HOME mais que je n’en ai pas. J’avais un dossier ~/.config/gtk-3.0 existant et il semble qu’il le recherche par défaut, sans la variable d’environnement.

On dirait que GTK + -3 a perdu le paramètre “gtk-auto-mnemonics” après la version 3.8 (à partir de la version 3.10).

Le correctif suivant pour 3.14.4 devrait réactiver “gtk-auto-mnemonics”. Cela fonctionnera probablement aussi avec les autres versions de GTK + -3 comme 3.16. Après la compilation, vous aurez seulement besoin de ces fichiers (les deux premiers sont des liens symboliques):

 libgtk-3.so -> libgtk-3.so.0.1400.4 libgtk-3.so.0 -> libgtk-3.so.0.1400.4 libgtk-3.so.0.1400.4 

http://ftp.gnome.org/pub/gnome/sources/gtk+/3.14/gtk+-3.14.4.tar.xz

Vous pouvez facilement commencer à utiliser les éléments compilés par ceci (remplacez lib64 par lib si nécessaire):

 LD_LIBRARY_PATH=/folder/where/you/installed/lib64 file-roller 

Je ne sais pas pourquoi, mais il semble que les développeurs de GTK + sont devenus vraiment géniaux en supprimant du code qui fournissait des fonctionnalités utiles comme celle-ci … !!!

Si un développeur de GTK + lit ceci: Comment ces lignes de code ont-elles blessé quelqu’un ou pourquoi ont-elles été supprimées ???

Si quelqu’un est intéressé par le commit original:

On dirait que les personnes de GTK + ont eu une exécution de suppression de fonctionnalités à ce moment-là:

==========

 diff -ur gtk+-3.14.4.old/gtk/gtklabel.c gtk+-3.14.4.new/gtk/gtklabel.c --- gtk+-3.14.4.old/gtk/gtklabel.c 2014-10-21 16:20:55.000000000 +0200 +++ gtk+-3.14.4.new/gtk/gtklabel.c 2015-05-06 23:01:45.447209817 +0200 @@ -2561,11 +2561,12 @@ if (with_uline) { - gboolean enable_mnemonics = TRUE; - gboolean auto_mnemonics = TRUE; + gboolean enable_mnemonics; + gboolean auto_mnemonics; g_object_get (gtk_widget_get_settings (GTK_WIDGET (label)), "gtk-enable-mnemonics", &enable_mnemonics, + "gtk-auto-mnemonics", &auto_mnemonics, NULL); if (!(enable_mnemonics && priv->mnemonics_visible && @@ -2775,8 +2776,8 @@ { GtkLabelPrivate *priv = label->priv; PangoAttrList *attrs; - gboolean enable_mnemonics = TRUE; - gboolean auto_mnemonics = TRUE; + gboolean enable_mnemonics; + gboolean auto_mnemonics; if (priv->pattern_set) return; @@ -2784,8 +2785,9 @@ if (is_mnemonic) { g_object_get (gtk_widget_get_settings (GTK_WIDGET (label)), - "gtk-enable-mnemonics", &enable_mnemonics, - NULL); + "gtk-enable-mnemonics", &enable_mnemonics, + "gtk-auto-mnemonics", &auto_mnemonics, + NULL); if (enable_mnemonics && priv->mnemonics_visible && pattern && (!auto_mnemonics || diff -ur gtk+-3.14.4.old/gtk/gtkmain.c gtk+-3.14.4.new/gtk/gtkmain.c --- gtk+-3.14.4.old/gtk/gtkmain.c 2014-10-21 16:20:55.000000000 +0200 +++ gtk+-3.14.4.new/gtk/gtkmain.c 2015-05-06 22:47:35.375311109 +0200 @@ -1717,18 +1717,26 @@ ((event->key.state & (gtk_accelerator_get_default_mod_mask ()) & ~(GDK_RELEASE_MASK|GDK_MOD1_MASK)) == 0) && !GTK_IS_MENU_SHELL (grab_widget)) { - gboolean mnemonics_visible; - GtkWidget *window; + gboolean auto_mnemonics; - mnemonics_visible = (event->type == GDK_KEY_PRESS); + g_object_get (gtk_widget_get_settings (grab_widget), + "gtk-auto-mnemonics", &auto_mnemonics, NULL); - window = gtk_widget_get_toplevel (grab_widget); - if (GTK_IS_WINDOW (window)) + if (auto_mnemonics) { - if (mnemonics_visible) - _gtk_window_schedule_mnemonics_visible (GTK_WINDOW (window)); - else - gtk_window_set_mnemonics_visible (GTK_WINDOW (window), FALSE); + gboolean mnemonics_visible; + GtkWidget *window; + + mnemonics_visible = (event->type == GDK_KEY_PRESS); + + window = gtk_widget_get_toplevel (grab_widget); + if (GTK_IS_WINDOW (window)) + { + if (mnemonics_visible) + _gtk_window_schedule_mnemonics_visible (GTK_WINDOW (window)); + else + gtk_window_set_mnemonics_visible (GTK_WINDOW (window), FALSE); + } } } /* else fall through */ diff -ur gtk+-3.14.4.old/gtk/gtkmenushell.c gtk+-3.14.4.new/gtk/gtkmenushell.c --- gtk+-3.14.4.old/gtk/gtkmenushell.c 2014-08-15 16:38:05.000000000 +0200 +++ gtk+-3.14.4.new/gtk/gtkmenushell.c 2015-05-06 22:53:03.442086931 +0200 @@ -898,9 +898,17 @@ _gtk_menu_shell_update_mnemonics (GtkMenuShell *menu_shell) { GtkMenuShell *target; + gboolean auto_mnemonics; gboolean found; gboolean mnemonics_visible; + g_object_get (gtk_widget_get_settings (GTK_WIDGET (menu_shell)), + "gtk-auto-mnemonics", &auto_mnemonics, + NULL); + + if (!auto_mnemonics) + return; + target = menu_shell; found = FALSE; while (target) diff -ur gtk+-3.14.4.old/gtk/gtkwindow.c gtk+-3.14.4.new/gtk/gtkwindow.c --- gtk+-3.14.4.old/gtk/gtkwindow.c 2014-10-21 16:20:55.000000000 +0200 +++ gtk+-3.14.4.new/gtk/gtkwindow.c 2015-05-06 22:59:47.780956630 +0200 @@ -5878,6 +5878,8 @@ GtkWindow *window = GTK_WINDOW (widget); GtkWindowPrivate *priv = window->priv; GdkWindow *gdk_window; + gboolean auto_mnemonics; + GtkPolicyType visible_focus; GList *link; if (!gtk_widget_is_toplevel (widget)) @@ -5966,10 +5968,15 @@ } } - /* if mnemonics visible is not already set + /* if auto-mnemonics is enabled and mnemonics visible is not already set * (as in the case of popup menus), then hide mnemonics initially */ - if (!priv->mnemonics_visible_set) + g_object_get (gtk_widget_get_settings (widget), + "gtk-auto-mnemonics", &auto_mnemonics, + "gtk-visible-focus", &visible_focus, + NULL); + + if (auto_mnemonics && !priv->mnemonics_visible_set) gtk_window_set_mnemonics_visible (window, FALSE); /* inherit from transient parent, so that a dialog that is @@ -7834,6 +7841,7 @@ GdkEventFocus *event) { GtkWindow *window = GTK_WINDOW (widget); + gboolean auto_mnemonics; /* It appears spurious focus in events can occur when * the window is hidden. So we'll just check to see if @@ -7845,7 +7853,9 @@ _gtk_window_set_has_toplevel_focus (window, TRUE); _gtk_window_set_is_active (window, TRUE); - if (gtk_window_has_mnemonic_modifier_pressed (window)) + g_object_get (gtk_widget_get_settings (widget), + "gtk-auto-mnemonics", &auto_mnemonics, NULL); + if (auto_mnemonics && gtk_window_has_mnemonic_modifier_pressed (window)) _gtk_window_schedule_mnemonics_visible (window); } @@ -7857,12 +7867,16 @@ GdkEventFocus *event) { GtkWindow *window = GTK_WINDOW (widget); + gboolean auto_mnemonics; _gtk_window_set_has_toplevel_focus (window, FALSE); _gtk_window_set_is_active (window, FALSE); /* set the mnemonic-visible property to false */ - gtk_window_set_mnemonics_visible (window, FALSE); + g_object_get (gtk_widget_get_settings (widget), + "gtk-auto-mnemonics", &auto_mnemonics, NULL); + if (auto_mnemonics) + gtk_window_set_mnemonics_visible (window, FALSE); return FALSE; } 

Je pense que je changeais le mauvais thème. Oops.

Les étapes ont suivi.

https://stackoverflow.com/a/24095212/2026508

Changer de: gtk-auto-mnemonics = 0 <---- désactivé

Changer en: gtk-auto-mnemonics = 1 <---- Activé

Dans GTK3, changez le /usr/share/themes/CURRENT_THEME_NAME/gtk3.0/settings.ini settings.ini: /usr/share/themes/CURRENT_THEME_NAME/gtk3.0/settings.ini

Dans GTK2, modification dans gtkrc: /usr/share/themes/CURRENT_THEME_NAME/gtk2.0/gtkrc

Mais assurez-vous que c’est le bon thème / actuel.