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



commit 475220e733e5cd557379e36766df000fcf2d90dc
Author: Carlos Garnacho <carlos lanedo com>
Date:   Wed Jun 27 15:50:47 2012 +0200

    textview: Handle GtkIMContext::clear-area

 gtk/gtktextview.c |   23 +++++++++++++++++++++++
 1 files changed, 23 insertions(+), 0 deletions(-)
---
diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c
index 6611673..c942259 100644
--- a/gtk/gtktextview.c
+++ b/gtk/gtktextview.c
@@ -194,6 +194,8 @@ struct _GtkTextViewPrivate
 
   GtkTextPendingScroll *pending_scroll;
 
+  gint osk_dy;
+
   /* Default style settings */
   gint pixels_above_lines;
   gint pixels_below_lines;
@@ -441,6 +443,10 @@ static gboolean gtk_text_view_delete_surrounding_handler   (GtkIMContext  *conte
 							    gint           offset,
 							    gint           n_chars,
 							    GtkTextView   *text_view);
+static void     gtk_text_view_clear_area_handler           (GtkIMContext  *context,
+                                                            GdkRectangle  *clear_area,
+                                                            GdkRectangle  *cursor_area,
+                                                            GtkTextView   *text_view);
 
 static void gtk_text_view_mark_set_handler       (GtkTextBuffer     *buffer,
                                                   const GtkTextIter *location,
@@ -1403,6 +1409,8 @@ gtk_text_view_init (GtkTextView *text_view)
  		    G_CALLBACK (gtk_text_view_retrieve_surrounding_handler), text_view);
   g_signal_connect (priv->im_context, "delete-surrounding",
  		    G_CALLBACK (gtk_text_view_delete_surrounding_handler), text_view);
+  g_signal_connect (priv->im_context, "clear-area",
+ 		    G_CALLBACK (gtk_text_view_clear_area_handler), text_view);
 
   priv->cursor_visible = TRUE;
 
@@ -7858,6 +7866,21 @@ gtk_text_view_delete_surrounding_handler (GtkIMContext  *context,
 }
 
 static void
+gtk_text_view_clear_area_handler (GtkIMContext          *context,
+                                  cairo_rectangle_int_t *clear_area,
+                                  cairo_rectangle_int_t *cursor_rect,
+                                  GtkTextView           *text_view)
+{
+  GtkWidget *widget;
+
+  widget = GTK_WIDGET (text_view);
+  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);
+}
+
+static void
 gtk_text_view_mark_set_handler (GtkTextBuffer     *buffer,
                                 const GtkTextIter *location,
                                 GtkTextMark       *mark,



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