[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.org
Date: Tue Jan 23 13:53:48 EET 2007
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 */


More information about the maemo-commits mailing list