diff --git a/de.frajul.music-reader.gschema.xml b/de.frajul.music-reader.gschema.xml
new file mode 100644
index 0000000..a23894b
--- /dev/null
+++ b/de.frajul.music-reader.gschema.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+ false
+ Whether the application is in fullscreen mode
+
+
+
diff --git a/flake.nix b/flake.nix
index 1d66cb2..6c7bbdd 100644
--- a/flake.nix
+++ b/flake.nix
@@ -42,6 +42,10 @@
mkdir -p $out/share/icons
cp ${./music-reader.png} $out/share/icons/music-reader.png
+
+ mkdir -p $out/share/glib-2.0/schemas
+ cp ${./de.frajul.music-reader.gschema.xml} $out/share/glib-2.0/schemas/de.frajul.music-reader.gschema.xml
+ glib-compile-schemas $out/share/glib-2.0/schemas/
'';
};
devShell =
diff --git a/src/main.rs b/src/main.rs
index 8adbc26..eda062b 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -5,9 +5,9 @@ mod ui;
use clap::Parser;
use env_logger::Env;
+use gio::Settings;
use gtk::prelude::*;
use gtk::Application;
-use log::debug;
use std::cell::RefCell;
use std::path::PathBuf;
use std::rc::Rc;
@@ -27,7 +27,8 @@ fn main() {
let app = Application::builder().application_id(APP_ID).build();
app.connect_activate(move |app| {
- let ui = build_ui(app);
+ let settings = Settings::new(APP_ID);
+ let ui = build_ui(app, settings);
if let Some(file) = cli.file.as_ref() {
ui::load_document(file, Rc::clone(&ui), 0);
}
@@ -36,6 +37,6 @@ fn main() {
app.run_with_args(&[] as &[&str]);
}
-fn build_ui(app: &Application) -> Rc> {
- Ui::build(app)
+fn build_ui(app: &Application, settings: Settings) -> Rc> {
+ Ui::build(app, settings)
}
diff --git a/src/ui.rs b/src/ui.rs
index f22e1da..9a3e0d6 100644
--- a/src/ui.rs
+++ b/src/ui.rs
@@ -5,6 +5,7 @@ use std::{
time::{Duration, Instant},
};
+use gio::Settings;
use gtk::{
glib, Application, ApplicationWindow, Box, Button, FileChooserAction, FileChooserDialog,
HeaderBar, Label, Overlay, Picture, ResponseType, ToggleButton,
@@ -19,6 +20,7 @@ use glib::clone;
use gtk::prelude::*;
pub struct Ui {
+ settings: Settings,
window: ApplicationWindow,
bottom_bar: gtk::Box,
header_bar: gtk::HeaderBar,
@@ -114,22 +116,24 @@ impl DocumentCanvas {
}
}
-pub fn toggle_fullscreen(ui: &Ui) {
- match !ui.window.is_fullscreen() {
+pub fn set_fullscreen(ui: &Ui, fullscreen: bool) {
+ match fullscreen {
true => {
ui.header_bar.hide();
ui.bottom_bar.hide();
ui.window.fullscreen();
let new_area_height = ui.image_container.height() + ui.header_bar.height();
- ui.document_canvas
- .as_ref()
- .unwrap()
- .priority_cache_current_pages(new_area_height);
- ui.document_canvas
- .as_ref()
- .unwrap()
- .cache_surrounding_pages(new_area_height);
+ if ui.document_canvas.is_some() {
+ ui.document_canvas
+ .as_ref()
+ .unwrap()
+ .priority_cache_current_pages(new_area_height);
+ ui.document_canvas
+ .as_ref()
+ .unwrap()
+ .cache_surrounding_pages(new_area_height);
+ }
}
false => {
ui.header_bar.show();
@@ -137,6 +141,11 @@ pub fn toggle_fullscreen(ui: &Ui) {
ui.window.unfullscreen();
}
}
+ ui.settings.set_boolean("fullscreen", fullscreen).unwrap();
+}
+
+pub fn toggle_fullscreen(ui: &Ui) {
+ set_fullscreen(ui, !ui.window.is_fullscreen());
}
fn update_page_status(ui: &Ui) {
@@ -213,7 +222,7 @@ fn process_left_click(ui: &mut Ui, x: f64, y: f64) {
}
impl Ui {
- pub fn build(app: &Application) -> Rc> {
+ pub fn build(app: &Application, settings: Settings) -> Rc> {
debug!("building ui");
let open_file_button = Button::from_icon_name("document-open");
let fullscreen_button = Button::from_icon_name("view-fullscreen");
@@ -284,6 +293,7 @@ impl Ui {
window.present();
let ui = Ui {
+ settings,
window,
app_wrapper,
bottom_bar: Box::builder()
@@ -351,6 +361,11 @@ impl Ui {
);
ui.borrow().window.present();
+
+ if ui.borrow().settings.boolean("fullscreen") {
+ set_fullscreen(&ui.borrow(), true);
+ }
+
ui
}
}