diff options
Diffstat (limited to 'meta/packages/gtk+/gtk+-2.6.4-1.osso7/gtklabel.c.diff')
-rw-r--r-- | meta/packages/gtk+/gtk+-2.6.4-1.osso7/gtklabel.c.diff | 390 |
1 files changed, 390 insertions, 0 deletions
diff --git a/meta/packages/gtk+/gtk+-2.6.4-1.osso7/gtklabel.c.diff b/meta/packages/gtk+/gtk+-2.6.4-1.osso7/gtklabel.c.diff new file mode 100644 index 0000000000..e730b66b7f --- /dev/null +++ b/meta/packages/gtk+/gtk+-2.6.4-1.osso7/gtklabel.c.diff | |||
@@ -0,0 +1,390 @@ | |||
1 | --- gtk+-2.6.4/gtk/gtklabel.c 2005-02-28 06:32:03.000000000 +0200 | ||
2 | +++ gtk+-2.6.4/gtk/gtklabel.c 2005-04-06 16:19:36.878931912 +0300 | ||
3 | @@ -23,6 +23,11 @@ | ||
4 | * GTK+ at ftp://ftp.gtk.org/pub/gtk/. | ||
5 | */ | ||
6 | |||
7 | + | ||
8 | +/* Modified for Nokia Oyj during 2004. See CHANGES file for list | ||
9 | + * of changes. | ||
10 | + */ | ||
11 | + | ||
12 | #include <config.h> | ||
13 | #include <math.h> | ||
14 | #include <string.h> | ||
15 | @@ -52,6 +57,7 @@ | ||
16 | guint single_line_mode : 1; | ||
17 | guint have_transform : 1; | ||
18 | gdouble angle; | ||
19 | + gboolean request_full_width; | ||
20 | } | ||
21 | GtkLabelPrivate; | ||
22 | |||
23 | @@ -75,6 +81,9 @@ | ||
24 | LAST_SIGNAL | ||
25 | }; | ||
26 | |||
27 | +/* Hildon mod. | ||
28 | + A property PROP_TRANSLATABLE has been added here. If new Gtk+ | ||
29 | + versions add items here, the compability will break. */ | ||
30 | enum { | ||
31 | PROP_0, | ||
32 | PROP_LABEL, | ||
33 | @@ -89,6 +98,7 @@ | ||
34 | PROP_MNEMONIC_WIDGET, | ||
35 | PROP_CURSOR_POSITION, | ||
36 | PROP_SELECTION_BOUND, | ||
37 | + PROP_TRANSLATABLE, | ||
38 | PROP_ELLIPSIZE, | ||
39 | PROP_WIDTH_CHARS, | ||
40 | PROP_SINGLE_LINE_MODE, | ||
41 | @@ -96,6 +106,12 @@ | ||
42 | PROP_MAX_WIDTH_CHARS | ||
43 | }; | ||
44 | |||
45 | +/* Hildon mod. A few keys. These are used to store data for label | ||
46 | + * without changing the private structures. */ | ||
47 | +#define LABEL_KEY_TRANSLATABLE "label_translatable" | ||
48 | +#define LABEL_KEY_TRANSLATABLETEXT "label_translatabletext" | ||
49 | +#define LABEL_KEY_ORIGINAL_LAYOUT "label_original_layout" | ||
50 | + | ||
51 | static guint signals[LAST_SIGNAL] = { 0 }; | ||
52 | |||
53 | static void gtk_label_class_init (GtkLabelClass *klass); | ||
54 | @@ -149,7 +165,7 @@ | ||
55 | static void gtk_label_set_uline_text_internal (GtkLabel *label, | ||
56 | const gchar *str); | ||
57 | static void gtk_label_set_pattern_internal (GtkLabel *label, | ||
58 | - const gchar *pattern); | ||
59 | + const gchar *pattern); | ||
60 | static void set_markup (GtkLabel *label, | ||
61 | const gchar *str, | ||
62 | gboolean with_uline); | ||
63 | @@ -516,6 +532,24 @@ | ||
64 | G_MAXINT, | ||
65 | -1, | ||
66 | G_PARAM_READWRITE)); | ||
67 | + /* Hildon mod. Add property for a widget - whether it supports run-time | ||
68 | + + locale change. Please note that this functionality is not yet | ||
69 | + + completed and may change. */ | ||
70 | + g_object_class_install_property (gobject_class, | ||
71 | + PROP_TRANSLATABLE, | ||
72 | + g_param_spec_boolean ("translatable", | ||
73 | + _("Is translatable"), | ||
74 | + _("Whether label should be translatable."), | ||
75 | + FALSE, | ||
76 | + G_PARAM_READWRITE)); | ||
77 | + | ||
78 | + /* Hildonlike class property */ | ||
79 | + gtk_widget_class_install_style_property (widget_class, | ||
80 | + g_param_spec_boolean ("hildonlike", | ||
81 | + _("hildonlike looks"), | ||
82 | + _("Changes wrapping etc behaviour, 1/0"), | ||
83 | + FALSE, | ||
84 | + G_PARAM_READABLE)); | ||
85 | /* | ||
86 | * Key bindings | ||
87 | */ | ||
88 | @@ -650,6 +684,10 @@ | ||
89 | case PROP_MAX_WIDTH_CHARS: | ||
90 | gtk_label_set_max_width_chars (label, g_value_get_int (value)); | ||
91 | break; | ||
92 | +/* Hildon add. */ | ||
93 | + case PROP_TRANSLATABLE: | ||
94 | + gtk_label_set_translatable (label, g_value_get_boolean (value)); | ||
95 | + break; | ||
96 | default: | ||
97 | G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); | ||
98 | break; | ||
99 | @@ -730,6 +768,10 @@ | ||
100 | case PROP_MAX_WIDTH_CHARS: | ||
101 | g_value_set_int (value, gtk_label_get_max_width_chars (label)); | ||
102 | break; | ||
103 | +/* Hildon mod. */ | ||
104 | + case PROP_TRANSLATABLE: | ||
105 | + g_value_set_boolean (value, gtk_label_get_translatable (label)); | ||
106 | + break; | ||
107 | |||
108 | default: | ||
109 | G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); | ||
110 | @@ -748,6 +790,7 @@ | ||
111 | priv->width_chars = -1; | ||
112 | priv->angle = 0.0; | ||
113 | priv->max_width_chars = -1; | ||
114 | + priv->request_full_width = FALSE; | ||
115 | label->label = NULL; | ||
116 | |||
117 | label->jtype = GTK_JUSTIFY_LEFT; | ||
118 | @@ -766,6 +809,15 @@ | ||
119 | label->mnemonic_window = NULL; | ||
120 | |||
121 | gtk_label_set_text (label, ""); | ||
122 | + | ||
123 | +/* Hildon Addition. */ | ||
124 | + | ||
125 | + g_object_set_data (G_OBJECT (label), LABEL_KEY_TRANSLATABLE, FALSE); | ||
126 | + g_object_set_data (G_OBJECT (label), LABEL_KEY_TRANSLATABLETEXT, NULL); | ||
127 | + g_object_set_data (G_OBJECT (label), LABEL_KEY_ORIGINAL_LAYOUT, NULL); | ||
128 | + | ||
129 | +/* /Hildon Addition. */ | ||
130 | + | ||
131 | } | ||
132 | |||
133 | /** | ||
134 | @@ -822,7 +874,7 @@ | ||
135 | |||
136 | if (str && *str) | ||
137 | gtk_label_set_text_with_mnemonic (label, str); | ||
138 | - | ||
139 | + | ||
140 | return GTK_WIDGET (label); | ||
141 | } | ||
142 | |||
143 | @@ -1257,7 +1309,7 @@ | ||
144 | GError *error = NULL; | ||
145 | PangoAttrList *attrs = NULL; | ||
146 | gunichar accel_char = 0; | ||
147 | - | ||
148 | + | ||
149 | if (!pango_parse_markup (str, | ||
150 | -1, | ||
151 | with_uline ? '_' : 0, | ||
152 | @@ -1340,12 +1392,14 @@ | ||
153 | g_return_if_fail (GTK_IS_LABEL (label)); | ||
154 | |||
155 | last_keyval = label->mnemonic_keyval; | ||
156 | + | ||
157 | gtk_label_set_label_internal (label, g_strdup (str ? str : "")); | ||
158 | gtk_label_set_use_markup_internal (label, TRUE); | ||
159 | gtk_label_set_use_underline_internal (label, TRUE); | ||
160 | - | ||
161 | gtk_label_recalculate (label); | ||
162 | + | ||
163 | gtk_label_setup_mnemonic (label, last_keyval); | ||
164 | + | ||
165 | } | ||
166 | |||
167 | /** | ||
168 | @@ -1409,7 +1463,7 @@ | ||
169 | |||
170 | static void | ||
171 | gtk_label_set_pattern_internal (GtkLabel *label, | ||
172 | - const gchar *pattern) | ||
173 | + const gchar *pattern) | ||
174 | { | ||
175 | PangoAttrList *attrs; | ||
176 | g_return_if_fail (GTK_IS_LABEL (label)); | ||
177 | @@ -1421,7 +1475,16 @@ | ||
178 | |||
179 | if (label->effective_attrs) | ||
180 | pango_attr_list_unref (label->effective_attrs); | ||
181 | +/* Following will disable undercores from | ||
182 | + keyboard shortcuts if DISABLE_KEYBOARD_SHORTCUTS | ||
183 | + is enabled during compile time | ||
184 | + */ | ||
185 | +#ifndef DISABLE_KEYBOARD_SHORTCUTS | ||
186 | label->effective_attrs = attrs; | ||
187 | +#else | ||
188 | + pango_attr_list_unref (attrs); | ||
189 | +#endif /* DISABLE_KEYBOARD_SHORTCUTS */ | ||
190 | + | ||
191 | } | ||
192 | |||
193 | void | ||
194 | @@ -1742,8 +1805,13 @@ | ||
195 | { | ||
196 | PangoLayout *layout; | ||
197 | GtkStyle *style = GTK_WIDGET (label)->style; | ||
198 | - | ||
199 | + | ||
200 | + gboolean hildonlike; | ||
201 | LabelWrapWidth *wrap_width = g_object_get_data (G_OBJECT (style), "gtk-label-wrap-width"); | ||
202 | + | ||
203 | + /* Hildon: get hildonlike property */ | ||
204 | + gtk_widget_style_get (GTK_WIDGET (label), "hildonlike", &hildonlike, NULL); | ||
205 | + | ||
206 | if (!wrap_width) | ||
207 | { | ||
208 | wrap_width = g_new0 (LabelWrapWidth, 1); | ||
209 | @@ -1763,7 +1831,12 @@ | ||
210 | "This long string gives a good enough length for any line to have."); | ||
211 | pango_layout_get_size (layout, &wrap_width->width, NULL); | ||
212 | g_object_unref (layout); | ||
213 | - | ||
214 | + /* A hildon mod for "fixing line wrapping". Remember to remove this | ||
215 | + when GtkLabel will implement width for height size negotiation.*/ | ||
216 | + if (hildonlike) | ||
217 | + { | ||
218 | + wrap_width->width = wrap_width->width * 1.25; | ||
219 | + } | ||
220 | return wrap_width->width; | ||
221 | } | ||
222 | |||
223 | @@ -1774,8 +1847,12 @@ | ||
224 | PangoRectangle logical_rect; | ||
225 | gint rwidth, rheight; | ||
226 | gboolean rtl; | ||
227 | + gboolean hildonlike; | ||
228 | |||
229 | widget = GTK_WIDGET (label); | ||
230 | + | ||
231 | + /* Hildon: get hildonlike property */ | ||
232 | + gtk_widget_style_get (widget, "hildonlike", &hildonlike, NULL); | ||
233 | |||
234 | rtl = gtk_widget_get_direction(widget) == GTK_TEXT_DIR_RTL; | ||
235 | rwidth = label->misc.xpad * 2; | ||
236 | @@ -1864,8 +1941,18 @@ | ||
237 | |||
238 | wrap_width = get_label_wrap_width (label); | ||
239 | width = MIN (width, wrap_width); | ||
240 | - width = MIN (width, | ||
241 | + | ||
242 | + if (!hildonlike) | ||
243 | + { | ||
244 | + width = MIN (width, | ||
245 | PANGO_SCALE * (gdk_screen_get_width (screen) + 1) / 2); | ||
246 | + } | ||
247 | + else | ||
248 | + { | ||
249 | + width = MIN (width, | ||
250 | + PANGO_SCALE * (gdk_screen_get_width (screen) + 1)); | ||
251 | + } | ||
252 | + | ||
253 | |||
254 | pango_layout_set_width (label->layout, width); | ||
255 | pango_layout_get_extents (label->layout, NULL, &logical_rect); | ||
256 | @@ -1910,6 +1997,7 @@ | ||
257 | else /* !label->wrap */ | ||
258 | pango_layout_set_width (label->layout, -1); | ||
259 | } | ||
260 | + | ||
261 | } | ||
262 | |||
263 | /* Gets the bounds of a layout in device coordinates. Note cut-and-paste | ||
264 | @@ -2017,7 +2105,8 @@ | ||
265 | priv->width_chars > 0 || priv->max_width_chars > 0) && | ||
266 | aux_info && aux_info->width > 0) | ||
267 | width += aux_info->width; | ||
268 | - else if (label->ellipsize || priv->width_chars > 0 || priv->max_width_chars > 0) | ||
269 | + else if ((label->ellipsize || priv->width_chars > 0 || priv->max_width_chars > 0) && | ||
270 | + !priv->request_full_width) | ||
271 | { | ||
272 | PangoContext *context; | ||
273 | PangoFontMetrics *metrics; | ||
274 | @@ -2081,11 +2170,24 @@ | ||
275 | GtkAllocation *allocation) | ||
276 | { | ||
277 | GtkLabel *label; | ||
278 | + GtkRequisition req; | ||
279 | + GtkLabelPrivate *priv; | ||
280 | |||
281 | label = GTK_LABEL (widget); | ||
282 | + priv = GTK_LABEL_GET_PRIVATE (label); | ||
283 | |||
284 | (* GTK_WIDGET_CLASS (parent_class)->size_allocate) (widget, allocation); | ||
285 | |||
286 | + gtk_widget_get_child_requisition (widget, &req); | ||
287 | + | ||
288 | + if (allocation->width < req.width && !label->wrap) | ||
289 | + { | ||
290 | + gtk_label_set_ellipsize (label, PANGO_ELLIPSIZE_END); | ||
291 | + priv->request_full_width = TRUE; | ||
292 | + } | ||
293 | + else | ||
294 | + priv->request_full_width = FALSE; | ||
295 | + | ||
296 | if (label->ellipsize) | ||
297 | { | ||
298 | if (label->layout) | ||
299 | @@ -2479,7 +2581,7 @@ | ||
300 | } | ||
301 | *dest = 0; | ||
302 | *pattern_dest = 0; | ||
303 | - | ||
304 | + | ||
305 | gtk_label_set_text_internal (label, new_str); | ||
306 | gtk_label_set_pattern_internal (label, pattern); | ||
307 | |||
308 | @@ -2541,13 +2643,11 @@ | ||
309 | last_keyval = label->mnemonic_keyval; | ||
310 | |||
311 | g_object_freeze_notify (G_OBJECT (label)); | ||
312 | - | ||
313 | gtk_label_set_label_internal (label, g_strdup (str ? str : "")); | ||
314 | gtk_label_set_use_markup_internal (label, FALSE); | ||
315 | gtk_label_set_use_underline_internal (label, TRUE); | ||
316 | - | ||
317 | - gtk_label_recalculate (label); | ||
318 | |||
319 | + gtk_label_recalculate (label); | ||
320 | gtk_label_setup_mnemonic (label, last_keyval); | ||
321 | |||
322 | g_object_thaw_notify (G_OBJECT (label)); | ||
323 | @@ -3948,3 +4048,67 @@ | ||
324 | popup_position_func, label, | ||
325 | 0, gtk_get_current_event_time ()); | ||
326 | } | ||
327 | + | ||
328 | +/* Hildon mod. | ||
329 | + * Functions for run-time locale changing. Beware though that this | ||
330 | + functionality is not yet completed. Therefore it's suggested | ||
331 | + that these functions shouldn't be used yet outside testing. */ | ||
332 | + | ||
333 | +void gtk_label_set_translatable (GtkLabel *label, gboolean newstatus) | ||
334 | +{ | ||
335 | + if (newstatus == gtk_label_get_translatable (label)) return; | ||
336 | + | ||
337 | + if (newstatus == TRUE) | ||
338 | + { | ||
339 | + if (g_object_get_data (G_OBJECT (label), LABEL_KEY_TRANSLATABLETEXT) != NULL) | ||
340 | + g_free (g_object_get_data (G_OBJECT (label), LABEL_KEY_TRANSLATABLETEXT)); | ||
341 | + g_object_set_data (G_OBJECT (label), LABEL_KEY_TRANSLATABLETEXT, g_strdup (label->label)); | ||
342 | + g_object_set_data (G_OBJECT (label), LABEL_KEY_TRANSLATABLE, (void*) TRUE); | ||
343 | + if (label->text != NULL) | ||
344 | + g_free (label->text); | ||
345 | + if (label->label != NULL) | ||
346 | + g_free (label->label); | ||
347 | + label->text = g_strdup(_(g_object_get_data (G_OBJECT (label), LABEL_KEY_TRANSLATABLETEXT))); | ||
348 | + label->label = g_strdup(_(g_object_get_data (G_OBJECT (label), LABEL_KEY_TRANSLATABLETEXT))); | ||
349 | + } | ||
350 | + else | ||
351 | + { | ||
352 | + if (label->text != NULL) | ||
353 | + g_free (label->text); | ||
354 | + if (label->label != NULL) | ||
355 | + g_free (label->label); | ||
356 | + label->text = g_strdup (g_object_get_data (G_OBJECT (label), LABEL_KEY_TRANSLATABLETEXT)); | ||
357 | + label->label = g_strdup (g_object_get_data (G_OBJECT (label), LABEL_KEY_TRANSLATABLETEXT)); | ||
358 | + g_object_set_data (G_OBJECT (label), LABEL_KEY_TRANSLATABLE, FALSE); | ||
359 | + if (g_object_get_data (G_OBJECT (label), LABEL_KEY_TRANSLATABLETEXT) != NULL) | ||
360 | + g_free (g_object_get_data (G_OBJECT (label), LABEL_KEY_TRANSLATABLETEXT)); | ||
361 | + g_object_set_data (G_OBJECT (label), LABEL_KEY_TRANSLATABLETEXT, NULL); | ||
362 | + } | ||
363 | + gtk_label_recalculate (label); | ||
364 | +} | ||
365 | + | ||
366 | +gboolean gtk_label_get_translatable (GtkLabel *label) | ||
367 | +{ | ||
368 | + return (gboolean) (g_object_get_data (G_OBJECT (label), LABEL_KEY_TRANSLATABLE)); | ||
369 | +} | ||
370 | + | ||
371 | + | ||
372 | +void gtk_label_retranslate (GtkLabel *label) | ||
373 | +{ | ||
374 | + g_object_freeze_notify (G_OBJECT (label)); | ||
375 | + if (gtk_label_get_translatable (label) == TRUE) | ||
376 | + { | ||
377 | + if (label->label != NULL) | ||
378 | + g_free (label->label); | ||
379 | + label->label = g_strdup(gettext(g_object_get_data (G_OBJECT (label), LABEL_KEY_TRANSLATABLETEXT))); | ||
380 | + } | ||
381 | + if (g_object_get_data (G_OBJECT (label), LABEL_KEY_ORIGINAL_LAYOUT)) g_object_unref (g_object_get_data (G_OBJECT (label), LABEL_KEY_ORIGINAL_LAYOUT)); | ||
382 | + g_object_set_data (G_OBJECT (label), LABEL_KEY_ORIGINAL_LAYOUT, NULL); | ||
383 | + g_object_notify (G_OBJECT (label), "label"); | ||
384 | + gtk_label_recalculate (label); | ||
385 | + g_object_thaw_notify (G_OBJECT (label)); | ||
386 | + gtk_label_set_text (label, label->label); | ||
387 | +} | ||
388 | + | ||
389 | +/* End of hildon mods for run-time locale change. */ | ||
390 | + | ||