[four-in-a-row/arnaudb/wip/gtk4: 70/92] Make HistoryButton a ToggleButton.




commit 45ac34f3a284c2fe0f4b1c2b2aee5fbaeb5daa93
Author: Arnaud Bonatti <arnaud bonatti gmail com>
Date:   Sun Apr 19 23:32:58 2020 +0200

    Make HistoryButton a ToggleButton.

 data/ui/history-button.ui |  2 +-
 src/history-button.vala   | 14 +++++++++++++-
 2 files changed, 14 insertions(+), 2 deletions(-)
---
diff --git a/data/ui/history-button.ui b/data/ui/history-button.ui
index 8a53ae0..731e6bc 100644
--- a/data/ui/history-button.ui
+++ b/data/ui/history-button.ui
@@ -19,7 +19,7 @@
 -->
 <interface>
   <requires lib="gtk+" version="3.12"/>
-  <template class="HistoryButton" parent="GtkMenuButton">
+  <template class="HistoryButton" parent="GtkToggleButton">
     <property name="visible">True</property>
     <property name="valign">center</property>
     <property name="can-focus">True</property>
diff --git a/src/history-button.vala b/src/history-button.vala
index e28bc36..309dfbc 100644
--- a/src/history-button.vala
+++ b/src/history-button.vala
@@ -21,13 +21,22 @@
 using Gtk;
 
 [GtkTemplate (ui = "/org/gnome/Four-in-a-row/ui/history-button.ui")]
-private class HistoryButton : MenuButton, AdaptativeWidget
+private class HistoryButton : ToggleButton, AdaptativeWidget
 {
     [CCode (notify = false)] public ThemeManager theme_manager { private get; protected construct; }
 
     [GtkChild] private Stack stack;
     [GtkChild] private DrawingArea drawing;
 
+    public GLib.Menu menu_model { protected construct {
+            PopoverMenu popover = new PopoverMenu.from_model (value);
+            popover.set_parent (this);
+            popover.set_autohide (false);
+            toggled.connect (() => { if (get_active ()) popover.popup (); else popover.popdown (); }); // 
toggled is run-first
+            popover.closed.connect (() => set_active (false));
+        }
+    }
+
     internal HistoryButton (ref GLib.Menu menu, ThemeManager theme_manager)
     {
         Object (menu_model: menu, theme_manager: theme_manager);
@@ -35,6 +44,9 @@ private class HistoryButton : MenuButton, AdaptativeWidget
 
     construct
     {
+        BinLayout layout = new BinLayout ();
+        set_layout_manager (layout);
+
         drawing.size_allocate.connect (configure_drawing);
         drawing.set_draw_func (update_drawing);
         theme_manager.theme_changed.connect (() => {


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