diff --git a/Cargo.lock b/Cargo.lock index f6a1a4d..ead60d7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1067,7 +1067,7 @@ dependencies = [ [[package]] name = "rclone-shuttle" -version = "0.1.7" +version = "0.1.8" dependencies = [ "chrono", "confy", diff --git a/Cargo.toml b/Cargo.toml index e1b710d..d292e32 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rclone-shuttle" -version = "0.1.7" +version = "0.1.8" edition = "2021" exclude = [ ".flatpak-builder", diff --git a/build.rs b/build.rs index 407527b..c7a0008 100644 --- a/build.rs +++ b/build.rs @@ -29,6 +29,7 @@ fn main() { "info-outline", "minus-circle-filled", "brush", + "leaflet", ], ); } diff --git a/icons.toml b/icons.toml deleted file mode 100644 index 94d1470..0000000 --- a/icons.toml +++ /dev/null @@ -1,17 +0,0 @@ -icons = [ - "left-large", - "right-large", - "up-large", - "arrow-circular-top-right", - "warning-outline", - "plus", - "folder-filled", - "paper-filled", - "check-round-outline", - "error-outline", - "padlock2", - "menu", - "info-outline", - "minus-circle-filled", - "brush", -] diff --git a/meta/io.github.pieterdd.RcloneShuttle.metainfo.xml b/meta/io.github.pieterdd.RcloneShuttle.metainfo.xml index 86a30a7..99a94be 100644 --- a/meta/io.github.pieterdd.RcloneShuttle.metainfo.xml +++ b/meta/io.github.pieterdd.RcloneShuttle.metainfo.xml @@ -46,6 +46,7 @@ https://github.com/pieterdd/RcloneShuttle + https://github.com/pieterdd/RcloneShuttle @@ -81,6 +82,11 @@ + + + Improve compatibility with small screens + + @@ -147,4 +153,14 @@ io.github.pieterdd.RcloneShuttle.desktop + + + keyboard + pointing + touch + + + + 410 + diff --git a/src/components/queue_dialog.rs b/src/components/queue_dialog.rs index 511a9c2..447e94d 100644 --- a/src/components/queue_dialog.rs +++ b/src/components/queue_dialog.rs @@ -73,7 +73,6 @@ impl Component for QueueDialog { set_margin_all: 20, set_margin_top: 0, set_spacing: 20, - set_width_request: 500, #[local_ref] ongoing_queue_view -> adw::PreferencesGroup { @@ -106,6 +105,7 @@ impl Component for QueueDialog { set_sensitive: !model.terminated_queue_wrapper.is_empty(), set_tooltip_text: Some("Clear terminated jobs"), connect_clicked => Self::Input::CleanNonOngoingJobs, + set_margin_start: 10, }, add = &adw::PreferencesRow { diff --git a/src/main.rs b/src/main.rs index 202b496..ff21ccc 100644 --- a/src/main.rs +++ b/src/main.rs @@ -25,14 +25,14 @@ use globals::JOBS; use model::{RcloneJob, RcloneJobType}; use path_tools::RclonePath; use relm4::actions::{AccelsPlus, RelmAction, RelmActionGroup}; -use relm4::adw::prelude::{AlertDialogExt, NavigationPageExt}; +use relm4::adw::prelude::{AdwApplicationWindowExt, AlertDialogExt, NavigationPageExt}; use relm4::adw::ToolbarStyle; use relm4::factory::FactoryVecDeque; use relm4::gtk::gdk::{DragAction, FileList}; use relm4::gtk::prelude::{ BoxExt, EntryExt, FileExt, GtkWindowExt, OrientableExt, StaticType, WidgetExt, }; -use relm4::gtk::{self}; +use relm4::gtk::{self, glib}; use relm4::typed_view::list::TypedListView; use relm4::ComponentParts; use relm4::ComponentSender; @@ -122,6 +122,8 @@ pub enum AppInMsg { FilePickerModeChange(FilePickerMode), DownloadRequested, DownloadPathConfirmed(RclonePath), + RevealSidebar, + SplitCollapsed(bool), NoOperation, } @@ -153,6 +155,8 @@ struct App { selected_file_listing_copy: Option, active_string_prompt: Option>, save_copy_dialog: Option>, + split_collapsed: bool, + reveal_files_on_small_screens: bool, } impl App { @@ -186,14 +190,34 @@ impl Component for App { set_title: Some("Rclone Shuttle"), set_default_size: (800, 600), + add_breakpoint = adw::Breakpoint::new(adw::BreakpointCondition::new_length( + adw::BreakpointConditionLengthType::MaxWidth, + 500.0, + adw::LengthUnit::Sp, + )) { + add_setter: ( + &split_view, + "collapsed", + Some(&glib::Value::from(&true)) + ) + }, adw::ToolbarView { set_top_bar_style: ToolbarStyle::Raised, add_top_bar = &adw::HeaderBar { - pack_start = >k::MenuButton { - set_icon_name: icon_names::MENU, - set_tooltip_text: Some("Menu"), - #[wrap(Some)] - set_popover = >k::PopoverMenu::from_model(Some(&main_menu)) {} + pack_start = >k::Box { + gtk::Button { + #[watch] + set_visible: model.reveal_files_on_small_screens && model.split_collapsed, + set_icon_name: icon_names::LEAFLET, + set_tooltip_text: Some("Open sidebar"), + connect_clicked => Self::Input::RevealSidebar, + }, + gtk::MenuButton { + set_icon_name: icon_names::MENU, + set_tooltip_text: Some("Menu"), + #[wrap(Some)] + set_popover = >k::PopoverMenu::from_model(Some(&main_menu)) {} + } } }, @@ -216,7 +240,13 @@ impl Component for App { set_icon_name: Some(icon_names::INFO_OUTLINE), } } else { + #[name = "split_view"] adw::NavigationSplitView { + #[watch] + set_show_content: model.reveal_files_on_small_screens, + connect_collapsed_notify[sender] => move |value| { + sender.input(Self::Input::SplitCollapsed(value.is_collapsed())); + }, #[wrap(Some)] set_sidebar = &adw::NavigationPage { set_title: "Remotes", @@ -561,6 +591,8 @@ impl Component for App { selected_file_listing_copy: None, active_string_prompt: None, save_copy_dialog: None, + reveal_files_on_small_screens: false, + split_collapsed: false, }; let remotes_view = model.remotes_view_wrapper.widget(); let file_listing_view = &model.file_listing_view_wrapper.view; @@ -771,6 +803,7 @@ impl Component for App { dialog.show(Some(root)); } Self::Input::RemoteSelectionChanged(row) => { + self.reveal_files_on_small_screens = true; let raw_path = self.remotes_view_wrapper.get(row).unwrap().name.clone(); let path = RclonePath::from(&raw_path); if path != self.path { @@ -1186,6 +1219,12 @@ impl Component for App { }); } }, + Self::Input::RevealSidebar => { + self.reveal_files_on_small_screens = false; + } + Self::Input::SplitCollapsed(value) => { + self.split_collapsed = value; + } Self::Input::NoOperation => {}, } }
@@ -81,6 +82,11 @@
Improve compatibility with small screens