Wie aktiviere ich Mnemonics in 12.04 und / oder 14.04 GTK3?

8

Auf der Straße heißt es, dass "gtk-enable-mnemonics" seit Version 3.10 veraltet ist und ich nicht sicher bin, wie ich meine Anwendung dazu bringen soll, Mnemonics anzuzeigen.

Sie werden nur angezeigt, wenn ich die altTaste drücke .

Bitte sehen Sie hier:

Ich habe alles versucht, was in diesem Artikel in Bezug auf settings.ini vorgeschlagen wurde, und den Bool auf das Gegenteil umgeschaltet:

Verbunden:

jmunsch
quelle

Antworten:

3

So "deaktivieren" Sie Mnemonics für Nautilus 3.10.1 unter Ubuntu 14.04, das GTK3 verwendet:

  1. Erstellen Sie den folgenden Pfad und die folgende Datei, falls diese noch nicht vorhanden ist.
    /home/YOURUSERNAME/.config/gtk-3.0/settings.ini
  2. Dann füge hinzu:
    [Settings]
    gtk-enable-mnemonics = 0
  3. Dann abmelden und wieder anmelden.

Quellen:

ps Beachten Sie, dass in den GTK-Dokumenten angegeben ist, dass Sie eine Umgebungsvariable namens haben sollten, XDG_CONFIG_HOMEaber ich hatte keine. Ich hatte einen vorhandenen ~/.config/gtk-3.0Ordner und es sieht so aus, als würde er dort standardmäßig ohne die Umgebungsvariable suchen.

Elijah Lynn
quelle
1
Ich bin wirklich verwirrt von dieser Antwort, da die Frage zu sein scheint, wie man es ermöglicht, immer Mnemonics anzuzeigen, aber diese Antwort spricht davon, sie zu deaktivieren.
Jamesdlin
Guter Punkt, ich habe keine Ahnung, warum ich dies dann als Antwort gepostet habe.
Elijah Lynn
4

Es sieht so aus, als hätte GTK + -3 nach Version 3.8 (ab Version 3.10) die Einstellung "gtk-auto-mnemonics" verloren.

Der folgende Patch für 3.14.4 sollte "gtk-auto-mnemonics" wieder aktivieren. Es wird wahrscheinlich auch mit anderen GTK + -3-Versionen wie 3.16 funktionieren. Nach dem Kompilieren benötigen Sie nur diese Dateien (die ersten beiden sind Symlinks):

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

Sie können das kompilierte Material ganz einfach damit verwenden ( lib64bei libBedarf durch ersetzen ):

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

- -

Ich weiß nicht warum, aber es sieht so aus, als ob die GTK + -Entwickler wirklich großartig darin geworden sind, Code zu entfernen, der nützliche Funktionen wie diese bietet ... !!!

Wenn ein GTK + -Entwickler Folgendes liest: Wie haben diese Codezeilen jemanden verletzt oder warum wurden sie entfernt?

Wenn sich jemand für das ursprüngliche Commit interessiert:

Es sieht so aus, als ob die GTK + -Personen zu diesem Zeitpunkt einen Lauf zum Entfernen von Funktionen hatten:

==========

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;
 }
kolAflash
quelle
1

Ich glaube, ich habe das falsche Thema geändert. Hoppla.

Schritte folgten.

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

Änderung von: gtk-auto-mnemonics = 0 <---- Deaktiviert

Ändern Sie zu: gtk-auto-mnemonics = 1 <---- Aktiviert

In GTK3 ändern Sie in settings.ini: /usr/share/themes/CURRENT_THEME_NAME/gtk3.0/settings.ini

In GTK2 Änderung in gtkrc: /usr/share/themes/CURRENT_THEME_NAME/gtk2.0/gtkrc

Stellen Sie jedoch sicher, dass es sich um das richtige / aktuelle Thema handelt.

jmunsch
quelle