Merge lp:~attente/gtk/x-canonical-accel into lp:~ubuntu-desktop/gtk/ubuntugtk3

Proposed by William Hua
Status: Merged
Merged at revision: 333
Proposed branch: lp:~attente/gtk/x-canonical-accel
Merge into: lp:~ubuntu-desktop/gtk/ubuntugtk3
Diff against target: 252 lines (+225/-0)
3 files modified
debian/changelog (+5/-0)
debian/patches/series (+1/-0)
debian/patches/x-canonical-accel.patch (+219/-0)
To merge this branch: bzr merge lp:~attente/gtk/x-canonical-accel
Reviewer Review Type Date Requested Status
Lars Karlitski (community) Approve
Ubuntu Desktop Pending
Review via email: mp+213395@code.launchpad.net

Commit message

* debian/patches/x-canonical-accel.patch:
  - allow setting menu item accelerator text directly (lp: #1208019)

Description of the change

Add a custom GMenuItem attribute called "x-canonical-accel" that allows the accelerator text to be set directly without needing a key code and modifier. We need this because sometimes all we have is the translated accelerator text, and parsing this is difficult considering the user's language may not be English.

To post a comment you must log in.
Revision history for this message
Lars Karlitski (larsu) wrote :

It's unlikely that this will make it upstream. We should try to get apps to fix their menus in the medium term.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'debian/changelog'
--- debian/changelog 2014-03-06 14:09:33 +0000
+++ debian/changelog 2014-03-31 01:03:48 +0000
@@ -1,10 +1,15 @@
1gtk+3.0 (3.10.7-0ubuntu5) UNRELEASED; urgency=medium1gtk+3.0 (3.10.7-0ubuntu5) UNRELEASED; urgency=medium
22
3 [ Sebastien Bacher ]
3 * debian/patches/git_grid_theming.patch:4 * debian/patches/git_grid_theming.patch:
4 - "grid: draw css background and borders", that's needed to be able to5 - "grid: draw css background and borders", that's needed to be able to
5 workraround background color issues with our scrollbars/theme,6 workraround background color issues with our scrollbars/theme,
6 thanks Lars Uebernickel7 thanks Lars Uebernickel
78
9 [ William Hua ]
10 * debian/patches/x-canonical-accel.patch:
11 - allow setting menu item accelerator text directly (lp: #1208019)
12
8 -- Sebastien Bacher <seb128@ubuntu.com> Thu, 06 Mar 2014 15:04:42 +010013 -- Sebastien Bacher <seb128@ubuntu.com> Thu, 06 Mar 2014 15:04:42 +0100
914
10gtk+3.0 (3.10.7-0ubuntu4) trusty; urgency=medium15gtk+3.0 (3.10.7-0ubuntu4) trusty; urgency=medium
1116
=== modified file 'debian/patches/series'
--- debian/patches/series 2014-03-06 14:09:33 +0000
+++ debian/patches/series 2014-03-31 01:03:48 +0000
@@ -24,3 +24,4 @@
24git_subtitle_typo.patch24git_subtitle_typo.patch
25git_popup_menu_shift.patch25git_popup_menu_shift.patch
26git_grid_theming.patch26git_grid_theming.patch
27x-canonical-accel.patch
2728
=== added file 'debian/patches/x-canonical-accel.patch'
--- debian/patches/x-canonical-accel.patch 1970-01-01 00:00:00 +0000
+++ debian/patches/x-canonical-accel.patch 2014-03-31 01:03:48 +0000
@@ -0,0 +1,219 @@
1Description: Allow setting menu item accelerator text directly
2 Add a custom GMenuItem attribute called "x-canonical-accel" that
3 allows the accelerator text to be set directly without needing a
4 key code and modifier. We need this because sometimes all we have
5 is the translated accelerator text, and parsing this is difficult
6 considering the user's language may not be English.
7
8Author: William Hua <william.hua@canonical.com>
9Bug-Ubuntu: https://bugs.launchpad.net/bugs/1208019
10
11Index: gtk+3.0-3.10.7/gtk/gtkmenutrackeritem.c
12===================================================================
13--- gtk+3.0-3.10.7.orig/gtk/gtkmenutrackeritem.c 2014-03-31 10:57:23.969527294 +1300
14+++ gtk+3.0-3.10.7/gtk/gtkmenutrackeritem.c 2014-03-31 11:01:19.941518966 +1300
15@@ -104,6 +104,7 @@
16 PROP_ROLE,
17 PROP_TOGGLED,
18 PROP_ACCEL,
19+ PROP_ACCEL_TEXT,
20 PROP_SUBMENU_SHOWN,
21 N_PROPS
22 };
23@@ -174,6 +175,9 @@
24 case PROP_ACCEL:
25 g_value_set_string (value, gtk_menu_tracker_item_get_accel (self));
26 break;
27+ case PROP_ACCEL_TEXT:
28+ g_value_set_string (value, gtk_menu_tracker_item_get_accel_text (self));
29+ break;
30 case PROP_SUBMENU_SHOWN:
31 g_value_set_boolean (value, gtk_menu_tracker_item_get_submenu_shown (self));
32 break;
33@@ -229,6 +233,8 @@
34 g_param_spec_boolean ("toggled", "", "", FALSE, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE);
35 gtk_menu_tracker_item_pspecs[PROP_ACCEL] =
36 g_param_spec_string ("accel", "", "", NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE);
37+ gtk_menu_tracker_item_pspecs[PROP_ACCEL_TEXT] =
38+ g_param_spec_string ("accel-text", "", "", NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE);
39 gtk_menu_tracker_item_pspecs[PROP_SUBMENU_SHOWN] =
40 g_param_spec_boolean ("submenu-shown", "", "", FALSE, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE);
41
42@@ -551,6 +557,16 @@
43 return accel;
44 }
45
46+const gchar *
47+gtk_menu_tracker_item_get_accel_text (GtkMenuTrackerItem *self)
48+{
49+ const gchar *accel_text = NULL;
50+
51+ g_menu_item_get_attribute (self->item, "x-canonical-accel", "&s", &accel_text);
52+
53+ return accel_text;
54+}
55+
56 GMenuModel *
57 _gtk_menu_tracker_item_get_submenu (GtkMenuTrackerItem *self)
58 {
59Index: gtk+3.0-3.10.7/gtk/gtkmenutrackeritem.h
60===================================================================
61--- gtk+3.0-3.10.7.orig/gtk/gtkmenutrackeritem.h 2014-03-31 10:57:23.969527294 +1300
62+++ gtk+3.0-3.10.7/gtk/gtkmenutrackeritem.h 2014-03-31 10:59:10.013523551 +1300
63@@ -68,6 +68,8 @@
64
65 const gchar * gtk_menu_tracker_item_get_accel (GtkMenuTrackerItem *self);
66
67+const gchar * gtk_menu_tracker_item_get_accel_text (GtkMenuTrackerItem *self);
68+
69 GMenuModel * _gtk_menu_tracker_item_get_submenu (GtkMenuTrackerItem *self);
70
71 gchar * _gtk_menu_tracker_item_get_submenu_namespace (GtkMenuTrackerItem *self);
72Index: gtk+3.0-3.10.7/gtk/gtkmodelmenuitem.c
73===================================================================
74--- gtk+3.0-3.10.7.orig/gtk/gtkmodelmenuitem.c 2014-01-28 11:40:16.000000000 +1300
75+++ gtk+3.0-3.10.7/gtk/gtkmodelmenuitem.c 2014-03-31 11:20:07.301479178 +1300
76@@ -43,7 +43,8 @@
77 PROP_ICON,
78 PROP_TEXT,
79 PROP_TOGGLED,
80- PROP_ACCEL
81+ PROP_ACCEL,
82+ PROP_ACCEL_TEXT
83 };
84
85 static void
86@@ -286,6 +287,44 @@
87 }
88 }
89
90+void _gtk_accel_label_set_accel_text (GtkAccelLabel *accel_label,
91+ const gchar *accel_text);
92+
93+static void
94+gtk_model_menu_item_set_accel_text (GtkModelMenuItem *item,
95+ const gchar *accel_text)
96+{
97+ GtkWidget *child;
98+ GList *children;
99+
100+ child = gtk_bin_get_child (GTK_BIN (item));
101+ if (child == NULL)
102+ {
103+ gtk_menu_item_get_label (GTK_MENU_ITEM (item));
104+ child = gtk_bin_get_child (GTK_BIN (item));
105+ g_assert (GTK_IS_LABEL (child));
106+ }
107+
108+ if (GTK_IS_LABEL (child))
109+ {
110+ _gtk_accel_label_set_accel_text (GTK_ACCEL_LABEL (child), accel_text);
111+ return;
112+ }
113+
114+ if (!GTK_IS_CONTAINER (child))
115+ return;
116+
117+ children = gtk_container_get_children (GTK_CONTAINER (child));
118+
119+ while (children)
120+ {
121+ if (GTK_IS_ACCEL_LABEL (children->data))
122+ _gtk_accel_label_set_accel_text (children->data, accel_text);
123+
124+ children = g_list_delete_link (children, children);
125+ }
126+}
127+
128 void
129 gtk_model_menu_item_set_property (GObject *object, guint prop_id,
130 const GValue *value, GParamSpec *pspec)
131@@ -314,6 +353,10 @@
132 gtk_model_menu_item_set_accel (item, g_value_get_string (value));
133 break;
134
135+ case PROP_ACCEL_TEXT:
136+ gtk_model_menu_item_set_accel_text (item, g_value_get_string (value));
137+ break;
138+
139 default:
140 g_assert_not_reached ();
141 }
142@@ -355,6 +398,9 @@
143 g_object_class_install_property (object_class, PROP_ACCEL,
144 g_param_spec_string ("accel", "accel", "accel", NULL,
145 G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
146+ g_object_class_install_property (object_class, PROP_ACCEL_TEXT,
147+ g_param_spec_string ("accel-text", "accel-text", "accel-text", NULL,
148+ G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
149 }
150
151 GtkWidget *
152Index: gtk+3.0-3.10.7/gtk/gtkmenushell.c
153===================================================================
154--- gtk+3.0-3.10.7.orig/gtk/gtkmenushell.c 2014-03-31 10:57:23.969527294 +1300
155+++ gtk+3.0-3.10.7/gtk/gtkmenushell.c 2014-03-31 11:09:20.221502015 +1300
156@@ -2192,6 +2192,7 @@
157 g_object_bind_property (item, "role", widget, "action-role", G_BINDING_SYNC_CREATE);
158 g_object_bind_property (item, "toggled", widget, "toggled", G_BINDING_SYNC_CREATE);
159 g_object_bind_property (item, "accel", widget, "accel", G_BINDING_SYNC_CREATE);
160+ g_object_bind_property (item, "accel-text", widget, "accel-text", G_BINDING_SYNC_CREATE);
161
162 g_signal_connect (widget, "activate", G_CALLBACK (gtk_menu_shell_item_activate), item);
163 }
164Index: gtk+3.0-3.10.7/gtk/gtkaccellabel.c
165===================================================================
166--- gtk+3.0-3.10.7.orig/gtk/gtkaccellabel.c 2014-01-28 11:40:16.000000000 +1300
167+++ gtk+3.0-3.10.7/gtk/gtkaccellabel.c 2014-03-31 11:34:42.961448273 +1300
168@@ -107,6 +107,8 @@
169
170 guint accel_key; /* manual accel key specification if != 0 */
171 GdkModifierType accel_mods;
172+
173+ gchar *accel_text; /* already-translated accel_string */
174 };
175
176 static void gtk_accel_label_set_property (GObject *object,
177@@ -259,6 +261,7 @@
178 priv->accel_closure = NULL;
179 priv->accel_group = NULL;
180 priv->accel_string = NULL;
181+ priv->accel_text = NULL;
182 }
183
184 /**
185@@ -300,6 +303,7 @@
186 GtkAccelLabel *accel_label = GTK_ACCEL_LABEL (object);
187
188 g_free (accel_label->priv->accel_string);
189+ g_free (accel_label->priv->accel_text);
190
191 G_OBJECT_CLASS (gtk_accel_label_parent_class)->finalize (object);
192 }
193@@ -902,6 +906,12 @@
194 accel_label->priv->accel_string = NULL;
195 }
196
197+ if (accel_label->priv->accel_text)
198+ {
199+ accel_label->priv->accel_string = g_strdup (accel_label->priv->accel_text);
200+ return FALSE;
201+ }
202+
203 g_object_get (gtk_widget_get_settings (GTK_WIDGET (accel_label)),
204 "gtk-enable-accels", &enable_accels,
205 NULL);
206@@ -986,3 +996,13 @@
207
208 gtk_accel_label_reset (accel_label);
209 }
210+
211+void
212+_gtk_accel_label_set_accel_text (GtkAccelLabel *accel_label,
213+ const gchar *accel_text)
214+{
215+ g_free (accel_label->priv->accel_text);
216+ accel_label->priv->accel_text = g_strdup (accel_text);
217+
218+ gtk_accel_label_reset (accel_label);
219+}

Subscribers

People subscribed via source and target branches

to all changes: