[gnome-builder] sourceview: make completion window translucent on ctrl toggle



commit 800af930cda2a46026fffd252f52c9d4dc854b36
Author: Christian Hergert <chergert redhat com>
Date:   Thu Mar 28 13:34:00 2019 -0700

    sourceview: make completion window translucent on ctrl toggle
    
    This requires libdazzle 3.33.0 for shortcut fixes.
    
    When pressing Control while the completion window is present, it will
    become translucent. Pressing Control a second time will restore that
    visibility.
    
    Whenever the completion window is displayed, it will be forced back to
    full opacity.
    
    This allows for seeing text around the completion window without having
    to dismiss the completion window fully.

 src/libide/sourceview/ide-completion-overlay.c | 10 ++++++++++
 src/libide/sourceview/ide-completion-window.c  |  1 +
 src/libide/sourceview/ide-source-view.c        | 18 ++++++++++++++++++
 3 files changed, 29 insertions(+)
---
diff --git a/src/libide/sourceview/ide-completion-overlay.c b/src/libide/sourceview/ide-completion-overlay.c
index 038737734..bc57c4819 100644
--- a/src/libide/sourceview/ide-completion-overlay.c
+++ b/src/libide/sourceview/ide-completion-overlay.c
@@ -49,6 +49,14 @@ G_DEFINE_TYPE_WITH_CODE (IdeCompletionOverlay, ide_completion_overlay, GTK_TYPE_
 
 static GParamSpec *properties [N_PROPS];
 
+static void
+ide_completion_overlay_show (GtkWidget *widget)
+{
+  gtk_widget_set_opacity (widget, 1.0);
+
+  GTK_WIDGET_CLASS (ide_completion_overlay_parent_class)->show (widget);
+}
+
 static void
 ide_completion_overlay_get_property (GObject    *object,
                                      guint       prop_id,
@@ -96,6 +104,8 @@ ide_completion_overlay_class_init (IdeCompletionOverlayClass *klass)
   object_class->get_property = ide_completion_overlay_get_property;
   object_class->set_property = ide_completion_overlay_set_property;
 
+  widget_class->show = ide_completion_overlay_show;
+
   properties [PROP_CONTEXT] =
     g_param_spec_object ("context",
                          "Context",
diff --git a/src/libide/sourceview/ide-completion-window.c b/src/libide/sourceview/ide-completion-window.c
index b4882dc5d..59b1dfc2f 100644
--- a/src/libide/sourceview/ide-completion-window.c
+++ b/src/libide/sourceview/ide-completion-window.c
@@ -136,6 +136,7 @@ ide_completion_window_real_show (GtkWidget *widget)
   g_assert (IDE_IS_COMPLETION_WINDOW (self));
 
   ide_completion_window_reposition (self);
+  gtk_widget_set_opacity (widget, 1.0);
 
   GTK_WIDGET_CLASS (ide_completion_window_parent_class)->show (widget);
 }
diff --git a/src/libide/sourceview/ide-source-view.c b/src/libide/sourceview/ide-source-view.c
index 6e74a9257..736bb3bef 100644
--- a/src/libide/sourceview/ide-source-view.c
+++ b/src/libide/sourceview/ide-source-view.c
@@ -2028,6 +2028,24 @@ ide_source_view_key_press_event (GtkWidget   *widget,
       return TRUE;
     }
 
+  /*
+   * If we got Control alone, with no key, and the completion window is
+   * visible, then request that it make itself less visible.
+   */
+  if (event->keyval == GDK_KEY_Control_L &&
+      event->state == 0 &&
+      ide_completion_is_visible (priv->completion))
+    {
+      IdeCompletionDisplay *display = ide_completion_get_display (priv->completion);
+
+      if (gtk_widget_get_opacity (GTK_WIDGET (display)) == 1.0)
+        gtk_widget_set_opacity (GTK_WIDGET (display), 0.33);
+      else
+        gtk_widget_set_opacity (GTK_WIDGET (display), 1.0);
+
+      return TRUE;
+    }
+
   /*
    * Are we currently recording a macro? If so lets stash the event for later.
    */


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