[gnome-builder/wip/chergert/hover] hover: be more restrictive in where we display



commit 2ad295e1e54e950b73ac053f69919ef4d0a59b7a
Author: Christian Hergert <chergert redhat com>
Date:   Sun Jul 8 08:40:56 2018 +0200

    hover: be more restrictive in where we display
    
    We don't want to be obnoxious, so only show when we have the
    pointer over text and/or over a non-empty line.

 src/libide/hover/ide-hover.c | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)
---
diff --git a/src/libide/hover/ide-hover.c b/src/libide/hover/ide-hover.c
index f849505c0..a7b38f029 100644
--- a/src/libide/hover/ide-hover.c
+++ b/src/libide/hover/ide-hover.c
@@ -170,7 +170,7 @@ ide_hover_popover_destroy_cb (IdeHover        *self,
   self->state = IDE_HOVER_STATE_INITIAL;
 }
 
-static void
+static gboolean
 ide_hover_get_bounds (IdeHover    *self,
                       GtkTextIter *begin,
                       GtkTextIter *end)
@@ -187,7 +187,7 @@ ide_hover_get_bounds (IdeHover    *self,
     {
       memset (begin, 0, sizeof *begin);
       memset (end, 0, sizeof *end);
-      return;
+      return FALSE;
     }
 
   g_assert (GTK_IS_TEXT_VIEW (view));
@@ -198,7 +198,8 @@ ide_hover_get_bounds (IdeHover    *self,
                                          self->motion_y,
                                          &x, &y);
 
-  gtk_text_view_get_iter_at_location (view, &iter, x, y);
+  if (!gtk_text_view_get_iter_at_location (view, &iter, x, y))
+    return FALSE;
 
   if (!_ide_source_iter_inside_word (&iter))
     {
@@ -208,7 +209,7 @@ ide_hover_get_bounds (IdeHover    *self,
       *end = *begin;
       gtk_text_iter_forward_to_line_end (end);
 
-      return;
+      return TRUE;
     }
 
   if (!_ide_source_iter_starts_full_word (&iter))
@@ -218,6 +219,8 @@ ide_hover_get_bounds (IdeHover    *self,
   *end = iter;
 
   _ide_source_iter_forward_full_word_end (end);
+
+  return TRUE;
 }
 
 static gboolean
@@ -242,6 +245,10 @@ ide_hover_motion_timeout_cb (gpointer data)
   if (self->state != IDE_HOVER_STATE_INITIAL)
     return G_SOURCE_REMOVE;
 
+  /* Make sure we're over text */
+  if (!ide_hover_get_bounds (self, &begin, &end))
+    return G_SOURCE_REMOVE;
+
   if (self->popover == NULL)
     {
       self->popover = g_object_new (IDE_TYPE_HOVER_POPOVER,
@@ -281,8 +288,6 @@ ide_hover_motion_timeout_cb (gpointer data)
     }
 
   self->state = IDE_HOVER_STATE_DISPLAY;
-
-  ide_hover_get_bounds (self, &begin, &end);
   gtk_text_view_get_iter_location (GTK_TEXT_VIEW (view), &begin, &begin_rect);
   gtk_text_view_get_iter_location (GTK_TEXT_VIEW (view), &end, &end_rect);
   gdk_rectangle_union (&begin_rect, &end_rect, &rect);


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