[gnome-music/wip/mschraal/tracker-only-features: 3/4] songwidget: Adhere to is_tracker CoreSong property



commit 647d4ad7bdeb4dd214e6eb440f6addf4c8350e6d
Author: Marinus Schraal <mschraal gnome org>
Date:   Wed Aug 7 14:52:01 2019 +0200

    songwidget: Adhere to is_tracker CoreSong property
    
    When CoreSong is not based on a Tracker based media item:
    
    * Do not show the selection and star widgets
    * In selection mode make the widget insensitive

 data/ui/SongWidget.ui            | 44 ++++++++++++++++++++++++++--------------
 gnomemusic/widgets/songwidget.py | 12 ++++++++++-
 2 files changed, 40 insertions(+), 16 deletions(-)
---
diff --git a/data/ui/SongWidget.ui b/data/ui/SongWidget.ui
index 27d54fcf..11748098 100644
--- a/data/ui/SongWidget.ui
+++ b/data/ui/SongWidget.ui
@@ -150,30 +150,44 @@
           </object>
         </child>
         <child>
-          <object class="GtkEventBox" id="_star_eventbox">
+          <object class="GtkStack" id="_star_stack">
+            <property name="can-focus">False</property>
             <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="no_show_all">True</property>
-            <property name="halign">end</property>
-            <property name="valign">center</property>
-            <property name="visible_window">True</property>
-            <property name="margin_right">12</property>
-            <signal name="button-release-event" handler="_on_star_toggle" swapped="no"/>
-            <signal name="enter-notify-event" handler="_on_star_hover" swapped="no"/>
-            <signal name="leave-notify-event" handler="_on_star_unhover" swapped="no"/>
             <child>
-              <object class="StarImage" id="_star_image">
+              <object class="GtkEventBox" id="_star_eventbox">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
+                <property name="halign">end</property>
                 <property name="valign">center</property>
-                <property name="margin_start">10</property>
+                <property name="visible_window">True</property>
+                <property name="margin_right">12</property>
+                <signal name="button-release-event" handler="_on_star_toggle" swapped="no"/>
+                <signal name="enter-notify-event" handler="_on_star_hover" swapped="no"/>
+                <signal name="leave-notify-event" handler="_on_star_unhover" swapped="no"/>
+                <child>
+                  <object class="StarImage" id="_star_image">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="valign">center</property>
+                    <property name="margin_start">10</property>
+                  </object>
+                </child>
               </object>
+              <packing>
+                <property name="name">star</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkBox">
+                <property name="visible">True</property>
+              </object>
+              <packing>
+                <property name="name">empty</property>
+                <property name="position">1</property>
+              </packing>
             </child>
           </object>
         </child>
-        <child>
-          <placeholder/>
-        </child>
       </object>
     </child>
   </template>
diff --git a/gnomemusic/widgets/songwidget.py b/gnomemusic/widgets/songwidget.py
index 14f84b85..3a796ed5 100644
--- a/gnomemusic/widgets/songwidget.py
+++ b/gnomemusic/widgets/songwidget.py
@@ -74,6 +74,7 @@ class SongWidget(Gtk.EventBox):
     _duration_label = Gtk.Template.Child()
     _star_eventbox = Gtk.Template.Child()
     _star_image = Gtk.Template.Child()
+    _star_stack = Gtk.Template.Child()
     _play_icon = Gtk.Template.Child()
     _size_group = Gtk.Template.Child()
 
@@ -141,7 +142,6 @@ class SongWidget(Gtk.EventBox):
         self.bind_property(
             'show-favorite', self._star_eventbox, 'visible',
             GObject.BindingFlags.SYNC_CREATE)
-        self._star_eventbox.set_no_show_all(True)
         self.bind_property(
             'show-song-number', self._number_label, 'visible',
             GObject.BindingFlags.SYNC_CREATE)
@@ -155,6 +155,9 @@ class SongWidget(Gtk.EventBox):
         self.props.coresong.connect(
             "notify::validation", self._on_validation_changed)
 
+        if not self.props.coresong.props.is_tracker:
+            self._star_stack.props.visible_child_name = "empty"
+
         self._number_label.props.no_show_all = True
 
         if can_dnd is True:
@@ -254,6 +257,13 @@ class SongWidget(Gtk.EventBox):
 
         :param bool value: Selection mode
         """
+        if (not self.props.coresong.props.is_tracker
+                and value):
+            self.props.sensitive = False
+            return
+
+        self.props.sensitive = True
+
         self._selection_mode = value
         self._select_button.set_visible(value)
 


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