Commit e51be6c1 authored by Alexander Mikhaylenko's avatar Alexander Mikhaylenko

nintendo-ds: Reduce GSettings usage

This will make it easier to replace GSettings usage completely and replace
it with a savestate in a later commit.
parent a8ebc37c
......@@ -13,15 +13,16 @@ private class Games.NintendoDsLayoutSwitcher : Gtk.Box {
[GtkChild]
private Gtk.ListBox list_box;
private Settings settings;
private HashTable<NintendoDsLayout, NintendoDsLayoutItem> items;
public NintendoDsRunner runner { get; construct; }
static construct {
var icon_theme = Gtk.IconTheme.get_default ();
icon_theme.add_resource_path ("/org/gnome/Games/plugins/nintendo-ds/icons");
}
construct {
public override void constructed () {
items = new HashTable<NintendoDsLayout, NintendoDsLayoutItem> (direct_hash, direct_equal);
foreach (var layout in NintendoDsLayout.get_layouts ()) {
var item = new NintendoDsLayoutItem (layout);
......@@ -30,42 +31,45 @@ private class Games.NintendoDsLayoutSwitcher : Gtk.Box {
list_box.add (item);
}
settings = new Settings ("org.gnome.Games.plugins.nintendo-ds");
settings.changed.connect (update_ui);
layout_popover.show.connect (update_ui);
update_ui ();
runner.notify["screen-layout"].connect (update_ui);
runner.notify["view-bottom-screen"].connect (update_ui);
base.constructed ();
}
public NintendoDsLayoutSwitcher (NintendoDsRunner runner) {
Object (runner: runner);
}
private void update_ui () {
var layout_value = settings.get_string ("screen-layout");
var view_bottom = settings.get_boolean ("view-bottom-screen");
var layout = runner.screen_layout;
var view_bottom = runner.view_bottom_screen;
var layout = NintendoDsLayout.from_value (layout_value);
layout_image.icon_name = layout.get_icon ();
var item = items[layout];
list_box.select_row (item);
change_screen_revealer.reveal_child = (layout == NintendoDsLayout.QUICK_SWITCH);
change_screen_image.icon_name = view_bottom ? "view-top-screen-symbolic" : "view-bottom-screen-symbolic-symbolic";
change_screen_image.icon_name = view_bottom ?
"view-top-screen-symbolic" :
"view-bottom-screen-symbolic";
}
[GtkCallback]
private void on_screen_changed (Gtk.Button button) {
var view_bottom = settings.get_boolean ("view-bottom-screen");
settings.set_boolean ("view-bottom-screen", !view_bottom);
runner.view_bottom_screen = !runner.view_bottom_screen;
}
[GtkCallback]
private void on_row_activated (Gtk.ListBoxRow row) {
var layout_item = row as NintendoDsLayoutItem;
var layout = layout_item.layout;
settings.set_string ("screen-layout", layout.get_value ());
runner.screen_layout = layout_item.layout;
layout_popover.popdown ();
}
......
......@@ -9,6 +9,24 @@ private class Games.NintendoDsRunner : RetroRunner {
private const string SCREENS_LAYOUT_OPTION = "desmume_screens_layout";
private NintendoDsLayout _screen_layout;
public NintendoDsLayout screen_layout {
get { return _screen_layout; }
set {
_screen_layout = value;
settings.set_string ("screen-layout", value.get_value ());
}
}
private bool _view_bottom_screen;
public bool view_bottom_screen {
get { return _view_bottom_screen; }
set {
_view_bottom_screen = value;
settings.set_boolean ("view-bottom-screen", value);
}
}
static construct {
layouts = new HashTable<uint, NintendoDsLayout?> (direct_hash, direct_equal);
......@@ -33,6 +51,9 @@ private class Games.NintendoDsRunner : RetroRunner {
settings = new Settings ("org.gnome.Games.plugins.nintendo-ds");
settings_changed_id = settings.changed.connect (on_changed);
_screen_layout = NintendoDsLayout.from_value (settings.get_string ("screen-layout"));
_view_bottom_screen = settings.get_boolean ("view-bottom-screen");
var core = get_core ();
core.options_set.connect (update_screen_layout);
......@@ -48,7 +69,14 @@ private class Games.NintendoDsRunner : RetroRunner {
}
private void on_changed (string key) {
if (key == "screen-layout" || key == "view-bottom-screen")
if (key == "screen-layout")
_screen_layout = NintendoDsLayout.from_value (settings.get_string (key));
else
if (key == "view-bottom-screen")
_view_bottom_screen = settings.get_boolean (key);
else
return;
update_screen_layout ();
}
......@@ -60,14 +88,9 @@ private class Games.NintendoDsRunner : RetroRunner {
var option = core.get_option (SCREENS_LAYOUT_OPTION);
var setting_value = settings.get_string ("screen-layout");
var option_value = setting_value;
if (setting_value == "quick switch") {
var bottom = settings.get_boolean ("view-bottom-screen");
option_value = bottom ? "bottom only" : "top only";
}
var option_value = screen_layout.get_value ();
if (screen_layout == NintendoDsLayout.QUICK_SWITCH)
option_value = view_bottom_screen ? "bottom only" : "top only";
try {
option.set_value (option_value);
......@@ -81,7 +104,7 @@ private class Games.NintendoDsRunner : RetroRunner {
if (!core_supports_layouts ())
return null;
return new NintendoDsLayoutSwitcher ();
return new NintendoDsLayoutSwitcher (this);
}
public override bool key_press_event (Gdk.EventKey event) {
......@@ -93,19 +116,16 @@ private class Games.NintendoDsRunner : RetroRunner {
var shortcut_layout = layouts[event.keyval];
if (shortcut_layout != null) {
settings.set_string ("screen-layout", shortcut_layout.get_value ());
screen_layout = shortcut_layout;
return true;
}
}
var layout = settings.get_string ("screen-layout");
if (layout != "quick switch")
if (screen_layout != NintendoDsLayout.QUICK_SWITCH)
return false;
var view_bottom = settings.get_boolean ("view-bottom-screen");
var switch_keyval = view_bottom ? Gdk.Key.Page_Up : Gdk.Key.Page_Down;
var switch_keyval = view_bottom_screen ? Gdk.Key.Page_Up : Gdk.Key.Page_Down;
if (event.keyval == switch_keyval)
return swap_screens ();
......@@ -120,13 +140,10 @@ private class Games.NintendoDsRunner : RetroRunner {
}
private bool swap_screens () {
var layout = settings.get_string ("screen-layout");
if (layout != "quick switch")
if (screen_layout != NintendoDsLayout.QUICK_SWITCH)
return false;
var view_bottom = settings.get_boolean ("view-bottom-screen");
settings.set_boolean ("view-bottom-screen", !view_bottom);
view_bottom_screen = !view_bottom_screen;
return true;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment