summaryrefslogtreecommitdiffstats
path: root/meta/packages/gtk+/gtk+-2.6.4-1.osso7/gtklabel.c.diff
diff options
context:
space:
mode:
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.diff390
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+