[libdazzle] menu-button: allow disabling transitions



commit 093c58c85605f93873a82e3ecff3af43bbb2bd8d
Author: Christian Hergert <chergert redhat com>
Date:   Sun Jul 9 18:27:32 2017 -0700

    menu-button: allow disabling transitions
    
    This can be useful when the content underneath the popover is
    also animating and the dual transitions are distracting or
    slow due to multiple composite phases.

 src/menus/dzl-menu-button-item.c |   12 +++++++++++-
 src/menus/dzl-menu-button.c      |   20 ++++++++++++++++++++
 2 files changed, 31 insertions(+), 1 deletions(-)
---
diff --git a/src/menus/dzl-menu-button-item.c b/src/menus/dzl-menu-button-item.c
index a95cb60..e4f0692 100644
--- a/src/menus/dzl-menu-button-item.c
+++ b/src/menus/dzl-menu-button-item.c
@@ -18,6 +18,7 @@
 
 #define G_LOG_DOMAIN "dzl-menu-button-item"
 
+#include "menus/dzl-menu-button.h"
 #include "menus/dzl-menu-button-item.h"
 #include "shortcuts/dzl-shortcut-label.h"
 #include "shortcuts/dzl-shortcut-simple-label.h"
@@ -56,13 +57,22 @@ static GParamSpec *properties [N_PROPS];
 static void
 dzl_menu_button_item_clicked (DzlMenuButtonItem *self)
 {
+  gboolean transitions_enabled = FALSE;
+  GtkWidget *button;
   GtkWidget *popover;
 
   g_assert (DZL_IS_MENU_BUTTON_ITEM (self));
 
+  button = dzl_gtk_widget_get_relative (GTK_WIDGET (self), DZL_TYPE_MENU_BUTTON);
+  if (button != NULL)
+    g_object_get (button, "transitions-enabled", &transitions_enabled, NULL);
+
   popover = gtk_widget_get_ancestor (GTK_WIDGET (self), GTK_TYPE_POPOVER);
-  if (popover != NULL)
+
+  if (transitions_enabled)
     gtk_popover_popdown (GTK_POPOVER (popover));
+  else
+    gtk_widget_hide (popover);
 }
 
 static gboolean
diff --git a/src/menus/dzl-menu-button.c b/src/menus/dzl-menu-button.c
index 6912fb5..e024cb8 100644
--- a/src/menus/dzl-menu-button.c
+++ b/src/menus/dzl-menu-button.c
@@ -40,6 +40,7 @@ typedef struct
 
   guint           show_accels : 1;
   guint           show_icons : 1;
+  guint           transitions_enabled : 1;
 } DzlMenuButtonPrivate;
 
 enum {
@@ -50,6 +51,7 @@ enum {
   PROP_SHOW_ACCELS,
   PROP_SHOW_ARROW,
   PROP_SHOW_ICONS,
+  PROP_TRANSITIONS_ENABLED,
   N_PROPS
 };
 
@@ -221,6 +223,7 @@ dzl_menu_button_get_property (GObject    *object,
                               GParamSpec *pspec)
 {
   DzlMenuButton *self = DZL_MENU_BUTTON (object);
+  DzlMenuButtonPrivate *priv = dzl_menu_button_get_instance_private (self);
 
   switch (prop_id)
     {
@@ -240,6 +243,10 @@ dzl_menu_button_get_property (GObject    *object,
       g_value_set_boolean (value, dzl_menu_button_get_show_icons (self));
       break;
 
+    case PROP_TRANSITIONS_ENABLED:
+      g_value_set_boolean (value, priv->transitions_enabled);
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
     }
@@ -280,6 +287,10 @@ dzl_menu_button_set_property (GObject      *object,
       dzl_menu_button_set_show_icons (self, g_value_get_boolean (value));
       break;
 
+    case PROP_TRANSITIONS_ENABLED:
+      priv->transitions_enabled = g_value_get_boolean (value);
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
     }
@@ -296,6 +307,13 @@ dzl_menu_button_class_init (DzlMenuButtonClass *klass)
 
   widget_class->destroy = dzl_menu_button_destroy;
 
+  properties [PROP_TRANSITIONS_ENABLED] =
+    g_param_spec_boolean ("transitions-enabled",
+                          "Transitions Enabled",
+                          "If transitions should be allowed",
+                          TRUE,
+                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
   /**
    * DzlMenuButton:menu-id:
    *
@@ -362,6 +380,8 @@ dzl_menu_button_init (DzlMenuButton *self)
 {
   DzlMenuButtonPrivate *priv = dzl_menu_button_get_instance_private (self);
 
+  priv->transitions_enabled = TRUE;
+
   gtk_widget_init_template (GTK_WIDGET (self));
 
   priv->menu_signals = dzl_signal_group_new (G_TYPE_MENU_MODEL);


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