[gnome-games/wip/exalm/cleanups: 4/5] media-menu-button: Don't subclass GtkMenuButton



commit f7ee2c24c11b89d6d2f746e4aabd4f53236b9566
Author: Alexander Mikhaylenko <exalm7659 gmail com>
Date:   Wed May 29 16:57:08 2019 +0500

    media-menu-button: Don't subclass GtkMenuButton

 data/ui/display-header-bar.ui |  6 +-----
 data/ui/media-menu-button.ui  | 28 +++++++++++++++++-----------
 src/ui/media-menu-button.vala | 31 ++++++++++++++++++++-----------
 3 files changed, 38 insertions(+), 27 deletions(-)
---
diff --git a/data/ui/display-header-bar.ui b/data/ui/display-header-bar.ui
index 09e57473..61514a69 100644
--- a/data/ui/display-header-bar.ui
+++ b/data/ui/display-header-bar.ui
@@ -89,11 +89,7 @@
           </packing>
         </child>
         <child>
-          <object class="GamesMediaMenuButton" id="media_button">
-            <property name="visible">False</property>
-            <property name="valign">center</property>
-            <property name="use-underline">True</property>
-          </object>
+          <object class="GamesMediaMenuButton" id="media_button"/>
           <packing>
             <property name="pack-type">end</property>
           </packing>
diff --git a/data/ui/media-menu-button.ui b/data/ui/media-menu-button.ui
index 2d7440d2..9a023388 100644
--- a/data/ui/media-menu-button.ui
+++ b/data/ui/media-menu-button.ui
@@ -1,19 +1,25 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <interface>
   <requires lib="gtk+" version="3.24"/>
-  <template class="GamesMediaMenuButton" parent="GtkMenuButton">
-    <style>
-      <class name="image-button"/>
-    </style>
-    <signal name="notify::media-set" handler="on_media_set_changed"/>
-    <child internal-child="accessible">
-      <object class="AtkObject" id="a11y-display-discs">
-        <property name="accessible-name" translatable="yes">Media</property>
-      </object>
-    </child>
+  <template class="GamesMediaMenuButton" parent="GtkBin">
     <child>
-      <object class="GtkImage" id="media_image">
+      <object class="GtkMenuButton" id="menu_button">
         <property name="visible">True</property>
+        <property name="valign">center</property>
+        <property name="use-underline">True</property>
+        <style>
+          <class name="image-button"/>
+        </style>
+        <child internal-child="accessible">
+          <object class="AtkObject" id="a11y-display-discs">
+            <property name="accessible-name" translatable="yes">Media</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkImage" id="media_image">
+            <property name="visible">True</property>
+          </object>
+        </child>
       </object>
     </child>
   </template>
diff --git a/src/ui/media-menu-button.vala b/src/ui/media-menu-button.vala
index dd074a3b..4fdc0a14 100644
--- a/src/ui/media-menu-button.vala
+++ b/src/ui/media-menu-button.vala
@@ -1,22 +1,31 @@
 // This file is part of GNOME Games. License: GPL-3.0+.
 
 [GtkTemplate (ui = "/org/gnome/Games/ui/media-menu-button.ui")]
-private class Games.MediaMenuButton : Gtk.MenuButton {
-       public MediaSet media_set { get; set; }
-
+private class Games.MediaMenuButton : Gtk.Bin {
        [GtkChild]
        private Gtk.Image media_image;
+       [GtkChild]
+       private Gtk.MenuButton menu_button;
 
-       [GtkCallback]
-       private void on_media_set_changed () {
-               if (media_set == null || media_set.get_size () < 2) {
-                       hide ();
+       private MediaSet _media_set;
+       public MediaSet media_set {
+               get { return _media_set; }
+               set {
+                       _media_set = value;
 
-                       return;
-               }
+                       if (media_set == null || media_set.get_size () < 2) {
+                               hide ();
+
+                               return;
+                       }
 
-               media_image.set_from_gicon (media_set.icon, Gtk.IconSize.BUTTON);
+                       media_image.set_from_gicon (media_set.icon, Gtk.IconSize.BUTTON);
+
+                       show ();
+               }
+       }
 
-               show ();
+       public Gtk.Popover popover {
+               set { menu_button.popover = value; }
        }
 }


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