From 708caa431f5a53d0820c7fe1d7871eaa76bc7557 Mon Sep 17 00:00:00 2001 From: Vivianne Langdon Date: Wed, 23 Mar 2022 00:29:22 -0700 Subject: [PATCH] allow setting videos/screensaver based on tab --- src/candy/base.vala | 4 ++- src/candy/video.vala | 4 +-- src/candy/xscreensaver.vala | 4 +-- src/desktop_window.vala | 2 +- src/window.ui | 5 +++- src/window.vala | 60 +++++++++++++++++++++++++++++-------- 6 files changed, 59 insertions(+), 20 deletions(-) diff --git a/src/candy/base.vala b/src/candy/base.vala index fa5ef46..ba3125b 100644 --- a/src/candy/base.vala +++ b/src/candy/base.vala @@ -1,10 +1,12 @@ namespace Deskcandy.Candy { public abstract class BaseCandy : Object { + public string name { get; set; } + protected BaseCandy() { } public abstract async void initialize() throws Error; - public abstract Subprocess launch(uint socket_id, string path) throws Error; + public abstract Subprocess launch(uint socket_id) throws Error; } } diff --git a/src/candy/video.vala b/src/candy/video.vala index 2c18f47..1de39cd 100644 --- a/src/candy/video.vala +++ b/src/candy/video.vala @@ -6,9 +6,9 @@ namespace Deskcandy.Candy { public override async void initialize() throws Error { } - public override Subprocess launch(uint socket_id, string path) throws Error { + public override Subprocess launch(uint socket_id) throws Error { message("Launching mpv video..."); - return new Subprocess(SubprocessFlags.NONE, "mpv", @"--wid=$socket_id", "--no-audio", "--video-unscaled=downscale-big", "--video-zoom=20", path); + return new Subprocess(SubprocessFlags.NONE, "mpv", @"--wid=$socket_id", "--no-audio", "--video-unscaled=downscale-big", "--video-zoom=20", this.name); } } } diff --git a/src/candy/xscreensaver.vala b/src/candy/xscreensaver.vala index ccc62a7..140cf52 100644 --- a/src/candy/xscreensaver.vala +++ b/src/candy/xscreensaver.vala @@ -28,9 +28,9 @@ namespace Deskcandy.Candy { message(@"Found $(this.configs.length()) screensavers."); } - public override Subprocess launch(uint socket_id, string saver) throws Error { + public override Subprocess launch(uint socket_id) throws Error { message("Launching XScreensaver..."); - return new Subprocess(SubprocessFlags.NONE, @"$(this.saver_path)/$saver", "-window-id", socket_id.to_string()); + return new Subprocess(SubprocessFlags.NONE, @"$(this.saver_path)/$(this.name)", "-window-id", socket_id.to_string()); } private async void hacky_determine_directories() { diff --git a/src/desktop_window.vala b/src/desktop_window.vala index bec33c5..985a593 100644 --- a/src/desktop_window.vala +++ b/src/desktop_window.vala @@ -28,7 +28,7 @@ namespace Deskcandy { this.visible = true; try { - this.proc = candy.launch((uint)this.socket.get_id(), "unknownpleasures"); + //this.proc = candy.launch((uint)this.socket.get_id()); } catch (Error e) { error(e.message); } diff --git a/src/window.ui b/src/window.ui index 784c065..4c1d1e2 100644 --- a/src/window.ui +++ b/src/window.ui @@ -314,7 +314,8 @@ True False 5 - slide-left-right + over-up-down + True @@ -579,6 +580,7 @@ True False slide-left-right + True @@ -649,6 +651,7 @@ start video_file_filter Select Video + video_page diff --git a/src/window.vala b/src/window.vala index b929a86..ae31c92 100644 --- a/src/window.vala +++ b/src/window.vala @@ -13,12 +13,18 @@ namespace Deskcandy { [GtkChild] private unowned Gtk.Stack main_stack; [GtkChild] + private unowned Gtk.Stack preset_type_stack; + [GtkChild] private unowned Gtk.Label candy_status; [GtkChild] private unowned Gtk.ListStore screensavers_liststore; + [GtkChild] + private unowned Gtk.FileChooserButton video_chooser; + private BaseCandy active_candy; private Subprocess proc; private XScreensaver xss; + private Video video; public Window (Application app) { Object (application: app); @@ -43,20 +49,19 @@ namespace Deskcandy { } public void on_initialized(BaseCandy[] candies) { - foreach (BaseCandy candy in candies) { - if (candy is XScreensaver) { - this.xss = (XScreensaver)candy; - Gtk.TreeIter iter; - this.screensavers_liststore.clear(); - foreach (XScreensaverConfig config in this.xss.configs) { - this.screensavers_liststore.append(out iter); - this.screensavers_liststore.set(iter, 0, config.label, 1, config.description, 2, config.name); - } - } + this.xss = (XScreensaver)candies[0]; + Gtk.TreeIter iter; + this.screensavers_liststore.clear(); + foreach (XScreensaverConfig config in this.xss.configs) { + this.screensavers_liststore.append(out iter); + this.screensavers_liststore.set(iter, 0, config.label, 1, config.description, 2, config.name); } + + this.video = (Video)candies[1]; + this.active_candy = this.xss; } - private void refresh_socket(BaseCandy candy, string name) { + private void refresh_socket() { if (this.socket != null) { this.preview.remove(this.socket); this.proc.send_signal(15); @@ -67,7 +72,7 @@ namespace Deskcandy { this.preview.add(this.socket); try { - this.proc = candy.launch((uint)this.socket.get_id(), name); + this.proc = this.active_candy.launch((uint)this.socket.get_id()); } catch (Error e) { error(e.message); } @@ -85,10 +90,17 @@ namespace Deskcandy { if (treeview.model.get_iter(out iter, path)) { string name; treeview.model.get(iter, 2, out name); - this.refresh_socket(this.xss, name); + this.xss.name = name; + this.refresh_socket(); } } + [GtkCallback] + private void on_video_chooser_file_set() { + this.video.name = this.video_chooser.get_filename(); + this.refresh_socket(); + } + private void on_create_preset(SimpleAction a, Variant? v) { this.main_stack.visible_child_name = "editor_page"; } @@ -111,6 +123,28 @@ namespace Deskcandy { popover.popdown(); } + [GtkCallback] + private void on_main_stack_visible_child_name_notify(Object o, ParamSpec param) { + message(@"page: $(this.main_stack.visible_child_name)"); + } + + [GtkCallback] + private void on_preset_type_stack_visible_child_name_notify(Object o, ParamSpec param) { + message(@"preset type: $(this.preset_type_stack.visible_child_name)"); + switch (this.preset_type_stack.visible_child_name) { + case "video_page": + this.active_candy = this.video; + break; + case "screensaver_page": + this.active_candy = this.xss; + break; + } + + if (this.active_candy.name != null && this.active_candy.name != "") { + this.refresh_socket(); + } + } + private void on_delete_preset(SimpleAction a, Variant? v) { message("delete"); }