Bagaimana cara mengaktifkan mnemonik dalam 12,04 dan / atau 14,04 GTK3?

8

Kata di jalan adalah bahwa "gtk-enable-mnemonics" telah ditinggalkan sejak versi 3.10, dan saya sama sekali tidak yakin bagaimana cara mendapatkan aplikasi saya untuk menampilkan mnemonics.

Mereka hanya akan ditampilkan jika saya menekan alttombol.

Silakan lihat di sini:

Saya telah mencoba semua yang disarankan dalam artikel ini sehubungan dengan settings.ini, mengganti bool ke yang sebaliknya:

Terkait:

jmunsch
sumber

Jawaban:

3

Untuk "menonaktifkan" mnemonik untuk Nautilus 3.10.1 di Ubuntu 14.04 yang menggunakan GTK3:

  1. Buat jalur & file berikut jika belum ada.
    /home/YOURUSERNAME/.config/gtk-3.0/settings.ini
  2. Kemudian tambahkan:
    [Settings]
    gtk-enable-mnemonics = 0
  3. Kemudian logout dan masuk kembali.

Sumber:

ps Perhatikan bahwa dokumen GTK mengatakan Anda harus memiliki variabel lingkungan bernama XDG_CONFIG_HOMEtetapi saya tidak memilikinya. Saya memang memiliki ~/.config/gtk-3.0folder yang sudah ada dan tampaknya sedang mencari di sana secara default, tanpa variabel lingkungan.

Elijah Lynn
sumber
1
Saya benar-benar bingung dengan jawaban ini karena pertanyaannya tampaknya bertanya bagaimana mengaktifkan selalu menampilkan mnemonik, tetapi jawaban ini berbicara tentang menonaktifkannya.
jamesdlin
Poin bagus, saya tidak tahu mengapa saya memposting ini sebagai jawaban.
Elijah Lynn
4

Sepertinya GTK + -3 kehilangan pengaturan "gtk-auto-mnemonics" setelah versi 3.8 (mulai dari versi 3.10 aktif).

Patch berikut untuk 3.14.4 harus mengaktifkan kembali "gtk-auto-mnemonics". Mungkin juga akan bekerja dengan versi GTK + -3 lainnya seperti 3.16. Setelah dikompilasi, Anda hanya perlu file-file ini (dua yang pertama adalah symlink):

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

Anda dapat dengan mudah mulai menggunakan hal-hal yang dikompilasi dengan ini (ganti lib64dengan libjika perlu):

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

-

Tidak tahu mengapa, tetapi sepertinya para pengembang GTK + menjadi sangat hebat dalam menghapus kode yang menyediakan fitur-fitur bermanfaat seperti ini ... !!!

Jika ada pengembang GTK + membaca ini: Bagaimana kode-baris itu menyakiti siapa pun atau mengapa di mana mereka dihapus ???

Jika seseorang tertarik pada komitmen asli:

Sepertinya orang-orang GTK + menjalankan fitur-remove saat itu:

==========

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
sumber
1

Saya pikir saya mengubah tema yang salah. Ups.

Langkah-langkah diikuti.

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

Ubah dari: gtk-auto-mnemonics = 0 <---- Dinonaktifkan

Ubah ke: gtk-auto-mnemonics = 1 <---- Diaktifkan

Dalam perubahan GTK3 di setting.ini: /usr/share/themes/CURRENT_THEME_NAME/gtk3.0/settings.ini

Di GTK2, ubah gtkrc: /usr/share/themes/CURRENT_THEME_NAME/gtk2.0/gtkrc

Tetapi pastikan itu adalah tema yang benar / terkini.

jmunsch
sumber