[maemo-commits] [maemo-commits] r9249 - in projects/haf/branches/gtk+/maemo-gtk-2-10: . gtk
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Tue Jan 23 13:53:48 EET 2007
- Previous message: [maemo-commits] r9248 - in projects/haf/branches/maemo-af-desktop/hildon-desktop: . src
- Next message: [maemo-commits] r9250 - projects/haf/branches/gtk+/maemo-gtk-2-10
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: mitch Date: 2007-01-23 13:53:46 +0200 (Tue, 23 Jan 2007) New Revision: 9249 Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtktextview.c Log: 2007-01-16 Michael Natterer <mitch at imendio.com> * gtk/gtktextview.c: port over all IM and hildon-input-mode related changes. Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog =================================================================== --- projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog 2007-01-23 11:37:17 UTC (rev 9248) +++ projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog 2007-01-23 11:53:46 UTC (rev 9249) @@ -1,5 +1,10 @@ 2007-01-23 Michael Natterer <mitch at imendio.com> + * gtk/gtktextview.c: port over all IM and hildon-input-mode + related changes. + +2007-01-23 Michael Natterer <mitch at imendio.com> + Merge remaining gdkinput changes: 2006-11-28 Tommi Komulainen <tommi.komulainen at nokia.com> Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtktextview.c =================================================================== --- projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtktextview.c 2007-01-23 11:37:17 UTC (rev 9248) +++ projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtktextview.c 2007-01-23 11:53:46 UTC (rev 9249) @@ -146,6 +146,9 @@ PROP_BUFFER, PROP_OVERWRITE, PROP_ACCEPTS_TAB, + /* MAEMO START */ + PROP_HILDON_INPUT_MODE, + /* MAEMO END */ LAST_PROP }; @@ -308,6 +311,13 @@ gint offset, gint n_chars, GtkTextView *text_view); +/* MAEMO START */ +static gboolean gtk_text_view_has_selection_handler (GtkIMContext *context, + GtkTextView *text_view); +static void gtk_text_view_clipboard_operation_handler (GtkIMContext *context, + GtkIMContextClipboardOperation op, + GtkTextView *text_view); +/* MAEMO END */ static void gtk_text_view_mark_set_handler (GtkTextBuffer *buffer, const GtkTextIter *location, @@ -638,6 +648,26 @@ TRUE, GTK_PARAM_READWRITE)); + /* MAEMO START */ + /** + * GtkTextView:hildon-input-mode: + * + * Allowed characters and input mode for the text view. + * See #HildonGtkInputMode. + * + * Since: maemo 2.0 + **/ + g_object_class_install_property (gobject_class, + PROP_HILDON_INPUT_MODE, + g_param_spec_flags ("hildon-input-mode", + P_("Hildon input mode"), + P_("Define widget's input mode"), + GTK_TYPE_GTK_INPUT_MODE, + HILDON_GTK_INPUT_MODE_FULL | + HILDON_GTK_INPUT_MODE_AUTOCAP, + GTK_PARAM_READWRITE)); + /* MAEMO END */ + /* * Style properties */ @@ -1054,6 +1084,12 @@ G_CALLBACK (gtk_text_view_retrieve_surrounding_handler), text_view); g_signal_connect (text_view->im_context, "delete_surrounding", G_CALLBACK (gtk_text_view_delete_surrounding_handler), text_view); + /* MAEMO START */ + g_signal_connect (text_view->im_context, "has_selection", + G_CALLBACK (gtk_text_view_has_selection_handler), text_view); + g_signal_connect (text_view->im_context, "clipboard_operation", + G_CALLBACK (gtk_text_view_clipboard_operation_handler), text_view); + /* MAEMO END */ text_view->cursor_visible = TRUE; @@ -2650,7 +2686,13 @@ case PROP_ACCEPTS_TAB: gtk_text_view_set_accepts_tab (text_view, g_value_get_boolean (value)); break; - + + /* MAEMO START */ + case PROP_HILDON_INPUT_MODE: + hildon_gtk_text_view_set_input_mode (text_view, g_value_get_int (value)); + break; + /* MAEMO END */ + default: g_assert_not_reached (); break; @@ -2724,7 +2766,13 @@ case PROP_ACCEPTS_TAB: g_value_set_boolean (value, text_view->accepts_tab); break; - + + /* MAEMO START */ + case PROP_HILDON_INPUT_MODE: + g_value_set_int (value, hildon_gtk_text_view_get_input_mode (text_view)); + break; + /* MAEMO END */ + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -3944,6 +3992,15 @@ gtk_widget_grab_focus (widget); + /* MAEMO START */ + if (text_view->editable && + hildon_gtk_im_context_filter_event (text_view->im_context, (GdkEvent*)event)) + { + text_view->need_im_reset = TRUE; + return TRUE; + } + /* MAEMO END */ + if (event->window != text_view->text_window->bin_window) { /* Remove selection if any. */ @@ -4042,6 +4099,15 @@ if (event->window != text_view->text_window->bin_window) return FALSE; + /* MAEMO START */ + if (text_view->editable && + hildon_gtk_im_context_filter_event (text_view->im_context, (GdkEvent*)event)) + { + text_view->need_im_reset = TRUE; + return TRUE; + } + /* MAEMO END */ + if (event->button == 1) { if (text_view->drag_start_x >= 0) @@ -4103,8 +4169,10 @@ "direction_changed", G_CALLBACK (keymap_direction_changed), text_view); gtk_text_view_check_keymap_direction (text_view); - - text_view->need_im_reset = TRUE; + + /* MAEMO START */ + /* text_view->need_im_reset = TRUE; */ + /* MAEMO END */ gtk_im_context_focus_in (GTK_TEXT_VIEW (widget)->im_context); return FALSE; @@ -4129,8 +4197,10 @@ keymap_direction_changed, text_view); - text_view->need_im_reset = TRUE; - gtk_im_context_focus_out (GTK_TEXT_VIEW (widget)->im_context); + /* MAEMO START */ + /* text_view->need_im_reset = TRUE; */ + /* gtk_im_context_focus_out (GTK_TEXT_VIEW (widget)->im_context); */ + /* MAEMO END */ return FALSE; } @@ -5141,7 +5211,10 @@ GtkTextIter end; gboolean leave_one = FALSE; - gtk_text_view_reset_im_context (text_view); + /* MAEMO START */ + /* backspace should not clear the word completion */ + /* gtk_text_view_reset_im_context (text_view); */ + /* MAEMO END */ if (type == GTK_DELETE_CHARS) { @@ -5268,7 +5341,10 @@ { GtkTextIter insert; - gtk_text_view_reset_im_context (text_view); + /* MAEMO START */ + /* backspace should not clear the word completion */ + /* gtk_text_view_reset_im_context (text_view); */ + /* MAEMO END */ /* Backspace deletes the selection, if one exists */ if (gtk_text_buffer_delete_selection (get_buffer (text_view), TRUE, @@ -6016,11 +6092,17 @@ static void gtk_text_view_reset_im_context (GtkTextView *text_view) { + /* MAEMO START */ +#if 0 if (text_view->need_im_reset) { text_view->need_im_reset = FALSE; +#endif gtk_im_context_reset (text_view->im_context); +#if 0 } +#endif + /* MAEMO END */ } /* @@ -6918,7 +7000,44 @@ return TRUE; } +/* MAEMO START */ + +static gboolean +gtk_text_view_has_selection_handler (GtkIMContext *context, + GtkTextView *text_view) +{ + GtkTextBuffer *buffer; + + buffer = gtk_text_view_get_buffer (text_view); + return gtk_text_buffer_get_selection_bounds (buffer, NULL, NULL); +} + static void +gtk_text_view_clipboard_operation_handler (GtkIMContext *context, + GtkIMContextClipboardOperation op, + GtkTextView *text_view) +{ + /* Similar to gtk_editable_*_clipboard(), handle these by sending + * signals instead of directly calling our internal functions. That + * way the application can hook into them if needed. + */ + switch (op) + { + case GTK_IM_CONTEXT_CLIPBOARD_OP_COPY: + g_signal_emit_by_name (text_view, "copy_clipboard"); + break; + case GTK_IM_CONTEXT_CLIPBOARD_OP_CUT: + g_signal_emit_by_name (text_view, "cut_clipboard"); + break; + case GTK_IM_CONTEXT_CLIPBOARD_OP_PASTE: + g_signal_emit_by_name (text_view, "paste_clipboard"); + break; + } +} + +/* MAEMO END */ + +static void gtk_text_view_mark_set_handler (GtkTextBuffer *buffer, const GtkTextIter *location, GtkTextMark *mark, @@ -6939,8 +7058,12 @@ need_reset = TRUE; } + /* MAEMO START (FIXME HACK) */ +#if 0 if (need_reset) gtk_text_view_reset_im_context (text_view); +#endif + /* MAEMO END */ } static void @@ -8650,16 +8773,50 @@ /* MAEMO_START */ +/** + * hildon_gtk_text_view_set_input_mode: + * @text_view: a #GtkTextView + * @mode: a #HildonGtkInputMode + * + * Sets input mode of the widget. + * + * Since: maemo 2.0 + */ void hildon_gtk_text_view_set_input_mode (GtkTextView *text_view, HildonGtkInputMode mode) { + g_return_if_fail (GTK_IS_TEXT_VIEW (text_view)); + + if (hildon_gtk_text_view_get_input_mode (text_view) != mode) + { + g_object_set (G_OBJECT (text_view->im_context), + "hildon-input-mode", mode, NULL); + g_object_notify (G_OBJECT (text_view), "hildon-input-mode"); + } } +/** + * hildon_gtk_text_view_get_input_mode: + * @text_view: a #GtkTextView + * + * Gets input mode of the widget. + * + * Return value: the input mode of the widget. + * + * Since: maemo 2.0 + */ HildonGtkInputMode -hildon_gtk_text_view_get_input_mode (GtkTextView *text_view) +hildon_gtk_text_view_get_input_mode (GtkTextView *text_view) { - return 0; + HildonGtkInputMode mode; + + g_return_val_if_fail (GTK_IS_TEXT_VIEW (text_view), FALSE); + + g_object_get (G_OBJECT (text_view->im_context), + "hildon-input-mode", &mode, NULL); + + return mode; } /* MAEMO END */
- Previous message: [maemo-commits] r9248 - in projects/haf/branches/maemo-af-desktop/hildon-desktop: . src
- Next message: [maemo-commits] r9250 - projects/haf/branches/gtk+/maemo-gtk-2-10
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]