[gtk+/touch-text-selection] textview: Optionally update handles on focus in



commit 2a537b5b8b99051326a540d7a69940fe67665355
Author: Carlos Garnacho <carlos lanedo com>
Date:   Fri Aug 24 19:13:31 2012 +0200

    textview: Optionally update handles on focus in
    
    This is so toplevels being moved/resized don't leave a selection
    with no possibility of being further manipulated

 gtk/gtktextview.c |   19 ++++++++++++++-----
 1 files changed, 14 insertions(+), 5 deletions(-)
---
diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c
index c2df3a3..43e3f23 100644
--- a/gtk/gtktextview.c
+++ b/gtk/gtktextview.c
@@ -234,6 +234,7 @@ struct _GtkTextViewPrivate
 
   guint cursor_handle_dragged : 1;
   guint selection_handle_dragged : 1;
+  guint update_handles_on_focus : 1
 };
 
 struct _GtkTextPendingScroll
@@ -4789,8 +4790,16 @@ gtk_text_view_button_press_event (GtkWidget *widget, GdkEventButton *event)
 
   if (event->type == GDK_BUTTON_PRESS)
     {
+      GdkDevice *device;
+      gboolean is_touchscreen;
+
       gtk_text_view_reset_im_context (text_view);
 
+      device = gdk_event_get_source_device ((GdkEvent *) event);
+      is_touchscreen = test_touchscreen ||
+        gdk_device_get_source (device) == GDK_SOURCE_TOUCHSCREEN;
+      priv->update_handles_on_focus = is_touchscreen;
+
       if (gdk_event_triggers_context_menu ((GdkEvent *) event))
         {
 	  gtk_text_view_do_popup (text_view, event);
@@ -4824,14 +4833,10 @@ gtk_text_view_button_press_event (GtkWidget *widget, GdkEventButton *event)
           else
             {
               GtkTextHandleMode mode;
-              GdkDevice *device;
 
               gtk_text_view_start_selection_drag (text_view, &iter, event);
-              device = gdk_event_get_source_device ((GdkEvent *) event);
 
-              if (priv->editable &&
-                  (test_touchscreen ||
-                   gdk_device_get_source (device) == GDK_SOURCE_TOUCHSCREEN))
+              if (priv->editable && is_touchscreen)
                 mode = GTK_TEXT_HANDLE_MODE_CURSOR;
               else
                 mode = GTK_TEXT_HANDLE_MODE_NONE;
@@ -4980,6 +4985,10 @@ gtk_text_view_focus_in_event (GtkWidget *widget, GdkEventFocus *event)
       gtk_im_context_focus_in (priv->im_context);
     }
 
+  if (priv->update_handles_on_focus &&
+      gtk_text_buffer_get_selection_bounds (get_buffer (text_view), NULL, NULL))
+    _gtk_text_view_update_handles (text_view, GTK_TEXT_HANDLE_MODE_SELECTION);
+
   return FALSE;
 }
 



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