[gtk+/wip/im-osk-position: 5/6] entry: Handle GtkIMContext::clear-area



commit 12d9c93aff610fccd3c943a5e23d95a205993ad8
Author: Carlos Garnacho <carlos lanedo com>
Date:   Wed Jun 27 15:52:04 2012 +0200

    entry: Handle GtkIMContext::clear-area

 gtk/gtkentry.c |   25 +++++++++++++++++++++++++
 1 files changed, 25 insertions(+), 0 deletions(-)
---
diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c
index 335cb0f..2f4c890 100644
--- a/gtk/gtkentry.c
+++ b/gtk/gtkentry.c
@@ -501,6 +501,10 @@ static gboolean gtk_entry_delete_surrounding_cb   (GtkIMContext *context,
 						   gint          offset,
 						   gint          n_chars,
 						   GtkEntry     *entry);
+static void     gtk_entry_clear_area_cb           (GtkIMContext          *context,
+                                                   cairo_rectangle_int_t *clear_area,
+                                                   cairo_rectangle_int_t *cursor_rect,
+                                                   GtkEntry              *entry);
 
 /* Internal routines
  */
@@ -2488,6 +2492,8 @@ gtk_entry_init (GtkEntry *entry)
 		    G_CALLBACK (gtk_entry_retrieve_surrounding_cb), entry);
   g_signal_connect (priv->im_context, "delete-surrounding",
 		    G_CALLBACK (gtk_entry_delete_surrounding_cb), entry);
+  g_signal_connect (priv->im_context, "clear-area",
+		    G_CALLBACK (gtk_entry_clear_area_cb), entry);
 
   context = gtk_widget_get_style_context (GTK_WIDGET (entry));
   gtk_style_context_add_class (context, GTK_STYLE_CLASS_ENTRY);
@@ -5404,6 +5410,25 @@ gtk_entry_delete_surrounding_cb (GtkIMContext *slave,
   return TRUE;
 }
 
+static void
+gtk_entry_clear_area_cb (GtkIMContext          *context,
+                         cairo_rectangle_int_t *clear_area,
+                         cairo_rectangle_int_t *cursor_rect,
+                         GtkEntry              *entry)
+{
+  GtkEntryPrivate *priv = entry->priv;
+  GtkWidget *widget;
+
+  if (!priv->editable)
+    return;
+
+  widget = GTK_WIDGET (entry);
+  gtk_widget_unset_clear_area (widget, TRUE);
+
+  if (clear_area->width != 0 && clear_area->height != 0)
+    gtk_widget_request_clear_area (widget, clear_area, cursor_rect);
+}
+
 /* Internal functions
  */
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]