summaryrefslogtreecommitdiffstats
path: root/meta/packages/gtk+/gtk+-2.6.4-1.osso7/gtktextview.c.diff
diff options
context:
space:
mode:
Diffstat (limited to 'meta/packages/gtk+/gtk+-2.6.4-1.osso7/gtktextview.c.diff')
-rw-r--r--meta/packages/gtk+/gtk+-2.6.4-1.osso7/gtktextview.c.diff417
1 files changed, 417 insertions, 0 deletions
diff --git a/meta/packages/gtk+/gtk+-2.6.4-1.osso7/gtktextview.c.diff b/meta/packages/gtk+/gtk+-2.6.4-1.osso7/gtktextview.c.diff
new file mode 100644
index 0000000000..7323574a64
--- /dev/null
+++ b/meta/packages/gtk+/gtk+-2.6.4-1.osso7/gtktextview.c.diff
@@ -0,0 +1,417 @@
1--- gtk+-2.6.4/gtk/gtktextview.c 2005-03-01 08:28:56.000000000 +0200
2+++ gtk+-2.6.4/gtk/gtktextview.c 2005-04-06 16:19:38.152738264 +0300
3@@ -99,6 +99,11 @@
4
5 #define SPACE_FOR_CURSOR 1
6
7+typedef struct _GtkTextViewPrivate GtkTextViewPrivate;
8+
9+#define GTK_TEXT_VIEW_GET_PRIVATE(obj) ( G_TYPE_INSTANCE_GET_PRIVATE ((obj),\
10+ GTK_TYPE_TEXT_VIEW, GtkTextViewPrivate) )
11+
12 struct _GtkTextPendingScroll
13 {
14 GtkTextMark *mark;
15@@ -145,6 +150,8 @@
16 PROP_BUFFER,
17 PROP_OVERWRITE,
18 PROP_ACCEPTS_TAB,
19+ PROP_AUTOCAP,
20+ PROP_INPUT_MODE,
21 LAST_PROP
22 };
23
24@@ -343,6 +350,13 @@
25
26 static void gtk_text_view_update_im_spot_location (GtkTextView *text_view);
27
28+static void gtk_text_view_set_autocap (GtkTextView *text_view,
29+ gboolean autocap);
30+static gboolean gtk_text_view_get_autocap (GtkTextView *text_view);
31+static void gtk_text_view_set_input_mode (GtkTextView *text_view,
32+ gint mode);
33+static gint gtk_text_view_get_input_mode (GtkTextView *text_view);
34+
35 /* Container methods */
36 static void gtk_text_view_add (GtkContainer *container,
37 GtkWidget *child);
38@@ -412,6 +426,10 @@
39 static gint text_window_get_width (GtkTextWindow *win);
40 static gint text_window_get_height (GtkTextWindow *win);
41
42+struct _GtkTextViewPrivate
43+{
44+ guint release_selection : 1;
45+};
46
47 static const GtkTargetEntry target_table[] = {
48 { "GTK_TEXT_BUFFER_CONTENTS", GTK_TARGET_SAME_APP, 0 },
49@@ -481,6 +499,7 @@
50
51 parent_class = g_type_class_peek_parent (klass);
52
53+ g_type_class_add_private( klass, sizeof(GtkTextViewPrivate) );
54 /* Default handlers and virtual methods
55 */
56 gobject_class->set_property = gtk_text_view_set_property;
57@@ -667,6 +686,24 @@
58 TRUE,
59 G_PARAM_READWRITE));
60
61+ g_object_class_install_property (gobject_class,
62+ PROP_AUTOCAP,
63+ g_param_spec_boolean ("autocap",
64+ P_("auto capitalization"),
65+ P_("Enable autocap support"),
66+ TRUE,
67+ G_PARAM_READABLE | G_PARAM_WRITABLE));
68+
69+ g_object_class_install_property (gobject_class,
70+ PROP_INPUT_MODE,
71+ g_param_spec_int ("input_mode",
72+ P_("input mode"),
73+ P_("Define widget's input mode"),
74+ 0,
75+ 9, /* keep me updated */
76+ 0,
77+ G_PARAM_READABLE | G_PARAM_WRITABLE));
78+
79 /*
80 * Style properties
81 */
82@@ -676,6 +713,14 @@
83 P_("Color with which to draw error-indication underlines"),
84 GDK_TYPE_COLOR,
85 G_PARAM_READABLE));
86+
87+ gtk_widget_class_install_style_property (widget_class,
88+ g_param_spec_boolean ("autocap",
89+ _("auto capitalization"),
90+ _("Enable autocap support"),
91+ TRUE,
92+ G_PARAM_READABLE));
93+
94
95 /*
96 * Signals
97@@ -1040,8 +1085,9 @@
98 gtk_text_view_init (GtkTextView *text_view)
99 {
100 GtkWidget *widget;
101-
102+ GtkTextViewPrivate *priv = NULL;
103 widget = GTK_WIDGET (text_view);
104+ priv = GTK_TEXT_VIEW_GET_PRIVATE(text_view);
105
106 GTK_WIDGET_SET_FLAGS (widget, GTK_CAN_FOCUS);
107
108@@ -1057,6 +1103,8 @@
109 text_view->tabs = NULL;
110 text_view->editable = TRUE;
111
112+ priv->release_selection = TRUE;
113+
114 gtk_drag_dest_set (widget,
115 0,
116 target_table, G_N_ELEMENTS (target_table),
117@@ -1070,6 +1118,10 @@
118 * to it; so we create it here and destroy it in finalize ().
119 */
120 text_view->im_context = gtk_im_multicontext_new ();
121+ /* Set default stuff. */
122+ gtk_text_view_set_autocap (text_view, TRUE);
123+ gtk_text_view_set_input_mode (text_view, 0); /* alpha-numeric-special */
124+ g_object_set (G_OBJECT (text_view->im_context), "use-show-hide", TRUE, NULL);
125
126 g_signal_connect (text_view->im_context, "commit",
127 G_CALLBACK (gtk_text_view_commit_handler), text_view);
128@@ -2664,6 +2716,14 @@
129 gtk_text_view_set_accepts_tab (text_view, g_value_get_boolean (value));
130 break;
131
132+ case PROP_AUTOCAP:
133+ gtk_text_view_set_autocap (text_view, g_value_get_boolean (value));
134+ break;
135+
136+ case PROP_INPUT_MODE:
137+ gtk_text_view_set_input_mode (text_view, g_value_get_int (value));
138+ break;
139+
140 default:
141 g_assert_not_reached ();
142 break;
143@@ -2738,6 +2798,14 @@
144 g_value_set_boolean (value, text_view->accepts_tab);
145 break;
146
147+ case PROP_AUTOCAP:
148+ g_value_set_boolean (value, gtk_text_view_get_autocap (text_view));
149+ break;
150+
151+ case PROP_INPUT_MODE:
152+ g_value_set_int (value, gtk_text_view_get_input_mode (text_view));
153+ break;
154+
155 default:
156 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
157 break;
158@@ -3916,7 +3984,7 @@
159 GtkTextView *text_view = GTK_TEXT_VIEW (widget);
160 GtkTextMark *insert;
161 GtkTextIter iter;
162-
163+
164 if (text_view->layout == NULL || get_buffer (text_view) == NULL)
165 return FALSE;
166
167@@ -4039,6 +4107,9 @@
168 if (event->window != text_view->text_window->bin_window)
169 return FALSE;
170
171+ if (text_view->editable)
172+ gtk_im_context_show (text_view->im_context);
173+
174 if (event->button == 1)
175 {
176 if (text_view->drag_start_x >= 0)
177@@ -4083,7 +4154,15 @@
178 static gint
179 gtk_text_view_focus_in_event (GtkWidget *widget, GdkEventFocus *event)
180 {
181+ /*gboolean have_selection;
182+ GtkTextIter sel_start, sel_end;*/
183+
184 GtkTextView *text_view = GTK_TEXT_VIEW (widget);
185+
186+ /*have_selection = gtk_text_buffer_get_selection_bounds(text_view->buffer, &sel_start, &sel_end);
187+
188+ if(!have_selection)
189+ gtk_text_view_move_cursor(text_view, GTK_MOVEMENT_BUFFER_ENDS, 1, FALSE);*//*FIXME some other way to place the cursor in the end*/
190
191 gtk_widget_queue_draw (widget);
192
193@@ -4100,8 +4179,10 @@
194 G_CALLBACK (keymap_direction_changed), text_view);
195 gtk_text_view_check_keymap_direction (text_view);
196
197+ /* Keyboard hack */
198 text_view->need_im_reset = TRUE;
199 gtk_im_context_focus_in (GTK_TEXT_VIEW (widget)->im_context);
200+ gtk_text_view_reset_im_context (text_view);
201
202 return FALSE;
203 }
204@@ -4110,6 +4191,14 @@
205 gtk_text_view_focus_out_event (GtkWidget *widget, GdkEventFocus *event)
206 {
207 GtkTextView *text_view = GTK_TEXT_VIEW (widget);
208+ GtkTextViewPrivate *priv = GTK_TEXT_VIEW_GET_PRIVATE(text_view);
209+ /*{
210+ GtkTextIter start;
211+ GtkTextIter end;
212+
213+ gtk_text_buffer_get_bounds(text_view->buffer, &start, &end);
214+ gtk_text_buffer_select_range(text_view->buffer, &start, &start);
215+ }*//*FIXME need a hack here to take away the focus*/
216
217 gtk_widget_queue_draw (widget);
218
219@@ -4125,8 +4214,11 @@
220 keymap_direction_changed,
221 text_view);
222
223- text_view->need_im_reset = TRUE;
224- gtk_im_context_focus_out (GTK_TEXT_VIEW (widget)->im_context);
225+ /* This is commented out to disable unselect feature.
226+ When the decition of this has been made, we can either remove this patch
227+ or to leave it.
228+ if( priv->release_selection )
229+ gtk_text_view_unselect( text_view );*/
230
231 return FALSE;
232 }
233@@ -5082,7 +5174,8 @@
234 GtkTextIter end;
235 gboolean leave_one = FALSE;
236
237- gtk_text_view_reset_im_context (text_view);
238+ /*gtk_text_view_reset_im_context (text_view);*/ /*backspace should not clear
239+ the word completion*/
240
241 if (type == GTK_DELETE_CHARS)
242 {
243@@ -5200,7 +5293,8 @@
244 {
245 GtkTextIter insert;
246
247- gtk_text_view_reset_im_context (text_view);
248+ /*gtk_text_view_reset_im_context (text_view);*/ /*backspace should not clear
249+ the word completion*/
250
251 /* Backspace deletes the selection, if one exists */
252 if (gtk_text_buffer_delete_selection (get_buffer (text_view), TRUE,
253@@ -5928,11 +6022,11 @@
254 static void
255 gtk_text_view_reset_im_context (GtkTextView *text_view)
256 {
257- if (text_view->need_im_reset)
258+/* if (text_view->need_im_reset)
259 {
260- text_view->need_im_reset = FALSE;
261+ text_view->need_im_reset = FALSE;*/
262 gtk_im_context_reset (text_view->im_context);
263- }
264+/* }*/
265 }
266
267 /*
268@@ -6665,18 +6759,23 @@
269 {
270 GtkTextIter start;
271 GtkTextIter end;
272- gint pos;
273+ gint pos, endpos;
274 gchar *text;
275
276- gtk_text_buffer_get_iter_at_mark (text_view->buffer, &start,
277+ gtk_text_buffer_get_iter_at_line (text_view->buffer, &start, 0);
278+ gtk_text_buffer_get_iter_at_mark (text_view->buffer, &end,
279 gtk_text_buffer_get_insert (text_view->buffer));
280- end = start;
281
282- pos = gtk_text_iter_get_line_index (&start);
283- gtk_text_iter_set_line_offset (&start, 0);
284+ pos = gtk_text_iter_get_line_index (&end);
285+
286 gtk_text_iter_forward_to_line_end (&end);
287+ endpos = gtk_text_iter_get_line_index (&end);
288
289 text = gtk_text_iter_get_slice (&start, &end);
290+ if (text)
291+ pos = strlen (text) - (endpos - pos); /* want bytes, not characters */
292+ else
293+ pos = 0;
294 gtk_im_context_set_surrounding (context, text, -1, pos);
295 g_free (text);
296
297@@ -6726,8 +6825,8 @@
298 need_reset = TRUE;
299 }
300
301- if (need_reset)
302- gtk_text_view_reset_im_context (text_view);
303+ /*if (need_reset)
304+ gtk_text_view_reset_im_context (text_view);*//*FIXME need a hack here*/
305 }
306
307 static void
308@@ -6957,6 +7056,13 @@
309 }
310
311 static void
312+block_selection_change( GtkMenuShell *menushell, gpointer user_data )
313+{
314+ GtkTextViewPrivate *priv = GTK_TEXT_VIEW_GET_PRIVATE(user_data);
315+ priv->release_selection = TRUE;
316+}
317+
318+static void
319 unichar_chosen_func (const char *text,
320 gpointer data)
321 {
322@@ -7064,7 +7170,12 @@
323 signals[POPULATE_POPUP],
324 0,
325 text_view->popup_menu);
326-
327+ {
328+ GtkTextViewPrivate *priv = GTK_TEXT_VIEW_GET_PRIVATE(text_view);
329+ g_signal_connect( GTK_WIDGET(text_view->popup_menu), "selection-done",
330+ G_CALLBACK(block_selection_change), text_view );
331+ priv->release_selection = FALSE;
332+ }
333 if (info->button)
334 gtk_menu_popup (GTK_MENU (text_view->popup_menu), NULL, NULL,
335 NULL, NULL,
336@@ -8301,3 +8412,81 @@
337
338 return gtk_text_layout_move_iter_visually (text_view->layout, iter, count);
339 }
340+
341+/*
342+ * gtk_text_view_set_autocap:
343+ * @entry: a #GtkTextView
344+ * @autocap: autocap
345+ *
346+ * Sets autocapitalization of the widget.
347+ */
348+static void
349+gtk_text_view_set_autocap (GtkTextView *text_view,
350+ gboolean autocap)
351+{
352+ g_return_if_fail (GTK_IS_TEXT_VIEW (text_view));
353+
354+ if (gtk_text_view_get_autocap (text_view) != autocap)
355+ {
356+ g_object_set (G_OBJECT (text_view->im_context), "autocap", autocap, NULL);
357+ g_object_notify (G_OBJECT (text_view), "autocap");
358+ }
359+}
360+
361+/*
362+ * gtk_text_view_get_autocap:
363+ * @entry: a #GtkTextView
364+ *
365+ * Gets autocapitalization state of the widget.
366+ *
367+ * Return value: a state
368+ */
369+static gboolean
370+gtk_text_view_get_autocap (GtkTextView *text_view)
371+{
372+ gboolean autocap;
373+ g_return_val_if_fail (GTK_IS_TEXT_VIEW (text_view), FALSE);
374+
375+ g_object_get (G_OBJECT (text_view->im_context), "autocap", &autocap, NULL);
376+
377+ return autocap;
378+}
379+
380+/*
381+ * gtk_text_view_set_input_mode:
382+ * @text_view: a #GtkTextView
383+ * @mode: input mode
384+ *
385+ * Sets autocapitalization of the widget.
386+ */
387+static void
388+gtk_text_view_set_input_mode (GtkTextView *text_view,
389+ gint mode)
390+{
391+ g_return_if_fail (GTK_IS_TEXT_VIEW (text_view));
392+
393+ if (gtk_text_view_get_input_mode (text_view) != mode)
394+ {
395+ g_object_set (G_OBJECT (text_view->im_context), "input_mode", mode, NULL);
396+ g_object_notify (G_OBJECT (text_view), "input_mode");
397+ }
398+}
399+
400+/*
401+ * gtk_text_view_get_input_mode:
402+ * @text_view: a #GtkTextView
403+ *
404+ * Gets input mode of the widget.
405+ *
406+ * Return value: input mode
407+ */
408+static gint
409+gtk_text_view_get_input_mode (GtkTextView *text_view)
410+{
411+ gint mode;
412+ g_return_val_if_fail (GTK_IS_TEXT_VIEW (text_view), FALSE);
413+
414+ g_object_get (G_OBJECT (text_view->im_context), "input_mode", &mode, NULL);
415+
416+ return mode;
417+}