[gnome-games/wip/exalm/cleanups: 5/5] media-selector: Merge into MediaMenuButton
- From: Alexander Mikhaylenko <alexm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-games/wip/exalm/cleanups: 5/5] media-selector: Merge into MediaMenuButton
- Date: Wed, 29 May 2019 14:03:38 +0000 (UTC)
commit d352c6003e16d03b7b7c15a1883fc865b30c12cb
Author: Alexander Mikhaylenko <exalm7659 gmail com>
Date: Wed May 29 18:35:57 2019 +0500
media-selector: Merge into MediaMenuButton
Also fix a visual bug.
data/org.gnome.Games.gresource.xml | 1 -
data/ui/media-menu-button.ui | 19 +++++++++
data/ui/media-selector.ui | 23 -----------
src/meson.build | 1 -
src/ui/display-header-bar.vala | 11 +-----
src/ui/media-menu-button.vala | 80 ++++++++++++++++++++++++++++++++-----
src/ui/media-selector.vala | 81 --------------------------------------
7 files changed, 91 insertions(+), 125 deletions(-)
---
diff --git a/data/org.gnome.Games.gresource.xml b/data/org.gnome.Games.gresource.xml
index 8c6cb252..2a73870a 100644
--- a/data/org.gnome.Games.gresource.xml
+++ b/data/org.gnome.Games.gresource.xml
@@ -29,7 +29,6 @@
<file preprocess="xml-stripblanks">ui/keyboard-mapper.ui</file>
<file preprocess="xml-stripblanks">ui/keyboard-tester.ui</file>
<file preprocess="xml-stripblanks">ui/media-menu-button.ui</file>
- <file preprocess="xml-stripblanks">ui/media-selector.ui</file>
<file preprocess="xml-stripblanks">ui/platforms-view.ui</file>
<file preprocess="xml-stripblanks">ui/platform-list-item.ui</file>
<file preprocess="xml-stripblanks">ui/preferences-page.ui</file>
diff --git a/data/ui/media-menu-button.ui b/data/ui/media-menu-button.ui
index 9a023388..4c53dde8 100644
--- a/data/ui/media-menu-button.ui
+++ b/data/ui/media-menu-button.ui
@@ -7,6 +7,7 @@
<property name="visible">True</property>
<property name="valign">center</property>
<property name="use-underline">True</property>
+ <property name="popover">popover</property>
<style>
<class name="image-button"/>
</style>
@@ -23,4 +24,22 @@
</object>
</child>
</template>
+ <object class="GtkPopover" id="popover">
+ <property name="visible">False</property>
+ <property name="relative-to">menu_button</property>
+ <child>
+ <object class="GtkFrame">
+ <property name="visible">True</property>
+ <property name="margin">6</property>
+ <property name="shadow-type">in</property>
+ <child>
+ <object class="GtkListBox" id="list_box">
+ <property name="visible">True</property>
+ <property name="selection-mode">none</property>
+ <signal name="row-activated" after="yes" handler="on_row_activated"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
</interface>
diff --git a/src/meson.build b/src/meson.build
index 735a4951..e679c6d7 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -154,7 +154,6 @@ vala_sources = [
'ui/keyboard-mapper.vala',
'ui/keyboard-tester.vala',
'ui/konami-code.vala',
- 'ui/media-selector.vala',
'ui/media-menu-button.vala',
'ui/message-dialog.vala',
'ui/platform-list-item.vala',
diff --git a/src/ui/display-header-bar.vala b/src/ui/display-header-bar.vala
index 9fc09f10..f8346573 100644
--- a/src/ui/display-header-bar.vala
+++ b/src/ui/display-header-bar.vala
@@ -19,14 +19,9 @@ private class Games.DisplayHeaderBar : Gtk.Bin {
public bool is_fullscreen { get; set; }
public MediaSet? media_set {
- set {
- media_button.media_set = value;
- media_selector.media_set = value;
- }
+ set { media_button.media_set = value; }
}
- private MediaSelector media_selector;
-
[GtkChild]
private InputModeSwitcher input_mode_switcher;
private Runner _runner;
@@ -71,10 +66,6 @@ private class Games.DisplayHeaderBar : Gtk.Bin {
construct {
settings = new Settings ("org.gnome.Games");
-
- media_selector = new MediaSelector ();
- media_selector.relative_to = media_button;
- media_button.popover = media_selector;
}
[GtkCallback]
diff --git a/src/ui/media-menu-button.vala b/src/ui/media-menu-button.vala
index 4fdc0a14..0cfc7a7f 100644
--- a/src/ui/media-menu-button.vala
+++ b/src/ui/media-menu-button.vala
@@ -5,27 +5,89 @@ private class Games.MediaMenuButton : Gtk.Bin {
[GtkChild]
private Gtk.Image media_image;
[GtkChild]
- private Gtk.MenuButton menu_button;
+ private Gtk.Popover popover;
+ [GtkChild]
+ private Gtk.ListBox list_box;
private MediaSet _media_set;
public MediaSet media_set {
get { return _media_set; }
set {
+ if (media_set_changed_id != 0) {
+ _media_set.disconnect (media_set_changed_id);
+ media_set_changed_id = 0;
+ }
+
_media_set = value;
- if (media_set == null || media_set.get_size () < 2) {
- hide ();
+ if (_media_set != null) {
+ media_set_changed_id = _media_set.notify["selected-media-number"].connect
(reset_media);
+ media_image.set_from_gicon (media_set.icon, Gtk.IconSize.BUTTON);
+ }
+
+ reset_media ();
+ }
+ }
+
+ private ulong media_set_changed_id = 0;
+
+ private void reset_media () {
+ remove_media ();
+ update_media ();
+
+ visible = (media_set != null && media_set.get_size () > 1);
+ }
- return;
+ private void update_media () {
+ var media_number = 0;
+
+ if (_media_set == null)
+ return;
+
+ _media_set.foreach_media ((media) => {
+ string media_name;
+ if (media.title == null)
+ media_name = _("Media %d").printf (media_number);
+ else {
+ try {
+ media_name = media.title.get_title ();
+ }
+ catch (Error e) {
+ warning (e.message);
+
+ media_name = "";
+ }
}
- media_image.set_from_gicon (media_set.icon, Gtk.IconSize.BUTTON);
+ var checkmark_item = new CheckmarkItem (media_name);
+ var media_has_uris = (media.get_uris ().length != 0);
+ checkmark_item.sensitive = media_has_uris;
+ var is_current_media = (_media_set.selected_media_number == media_number);
+ checkmark_item.checkmark_visible = is_current_media;
+ list_box.add (checkmark_item);
- show ();
- }
+ media_number++;
+ });
+ }
+
+ private void remove_media () {
+ list_box.foreach ((child) => child.destroy ());
}
- public Gtk.Popover popover {
- set { menu_button.popover = value; }
+ [GtkCallback]
+ private void on_row_activated (Gtk.ListBoxRow activated_row) {
+ var media_number = activated_row.get_index ();
+ _media_set.selected_media_number = media_number;
+
+ var i = 0;
+ var row = list_box.get_row_at_index (i);
+ while (row != null) {
+ var checkmark_item = row as CheckmarkItem;
+ checkmark_item.checkmark_visible = (i == media_number);
+
+ row = list_box.get_row_at_index (++i);
+ }
+
+ popover.popdown ();
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]