Làm cách nào để bật tính năng ghi nhớ trong 12.04 và / hoặc 14.04 GTK3?


8

Tin tức trên đường phố là "gtk-enable-mnemonics" đã không còn được sử dụng kể từ phiên bản 3.10, và tôi không chắc chắn làm thế nào để ứng dụng của mình hiển thị ghi nhớ.

Họ sẽ chỉ hiển thị nếu tôi nhấn altphím.

Xin vui lòng xem tại đây:

Tôi đã thử mọi thứ được đề xuất trong bài viết này liên quan đến settings.ini, chuyển bool sang ngược lại:

Liên quan:

Câu trả lời:


3

Để "vô hiệu hóa" tính năng ghi nhớ cho Nautilus 3.10.1 trên Ubuntu 14.04 sử dụng GTK3:

  1. Tạo đường dẫn & tệp sau nếu nó chưa tồn tại.
    /home/YOURUSERNAME/.config/gtk-3.0/settings.ini
  2. Sau đó thêm:
    [Settings]
    gtk-enable-mnemonics = 0
  3. Sau đó đăng xuất và đăng nhập lại.

Nguồn:

ps Lưu ý rằng các tài liệu GTK nói rằng bạn nên có một biến môi trường được gọi XDG_CONFIG_HOMEnhưng tôi không có biến. Tôi đã có một ~/.config/gtk-3.0thư mục hiện có và nó xuất hiện theo mặc định, không có biến môi trường.


1
Tôi thật sự bối rối bởi câu trả lời này kể từ khi câu hỏi dường như được hỏi làm thế nào để kích hoạt tính năng mnemonics luôn hiển thị, nhưng câu trả lời này nói về việc vô hiệu hóa chúng.
jamesdlin

Điểm tốt, tôi không biết tại sao tôi đăng bài này như một câu trả lời sau đó.
Elijah Lynn

4

Có vẻ như GTK + -3 đã mất cài đặt "gtk-auto-mnemonics" sau phiên bản 3.8 (bắt đầu từ phiên bản 3.10 trở đi).

Bản vá sau cho 3.14.4 sẽ kích hoạt lại "gtk-auto-mnemonics". Nó có thể cũng sẽ hoạt động với các phiên bản GTK + -3 khác như 3.16. Sau khi biên dịch, bạn sẽ chỉ cần các tệp này (hai tệp đầu tiên là liên kết tượng trưng):

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/source/gtk+/3.14/gtk+-3.14.4.tar.xz

Bạn có thể dễ dàng bắt đầu sử dụng các công cụ được biên dịch bằng cách này (thay thế lib64bằng libnếu cần thiết):

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

-

Không biết tại sao, nhưng có vẻ như các nhà phát triển GTK + đã thực sự tuyệt vời trong việc xóa mã cung cấp các tính năng hữu ích như thế này ... !!!

Nếu bất kỳ nhà phát triển GTK + nào đọc được điều này: Làm thế nào mà những dòng mã đó làm tổn thương bất cứ ai hoặc tại sao họ xóa?

Nếu ai đó quan tâm đến cam kết ban đầu:

Có vẻ như những người GTK + đã có một tính năng loại bỏ tính năng tại thời điểm đó:

==========

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;
 }

1

Tôi nghĩ rằng tôi đã thay đổi chủ đề sai. Giáo sư.

Các bước tiếp theo.

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

Thay đổi từ: gtk-auto-mnemonics = 0 <---- Đã tắt

Thay đổi thành: gtk-auto-mnemonics = 1 <---- Đã bật

Trong GTK3 thay đổi trong settings.ini: /usr/share/themes/CURRENT_THEME_NAME/gtk3.0/settings.ini

Trong GTK2 thay đổi trong gtkrc: /usr/share/themes/CURRENT_THEME_NAME/gtk2.0/gtkrc

Nhưng hãy chắc chắn rằng đó là chủ đề chính xác / hiện tại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.