Save fullscreen state using glib settings
This commit is contained in:
parent
ac261f0761
commit
a7ea7bd6d7
10
de.frajul.music-reader.gschema.xml
Normal file
10
de.frajul.music-reader.gschema.xml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- GTK settings schema / configuration. Deploy this e.g. to $HOME/.local/share/glib-2.0/schemas -->
|
||||||
|
<schemalist>
|
||||||
|
<schema id="de.frajul.music-reader" path="/de/frajul/music-reader/">
|
||||||
|
<key name="fullscreen" type="b">
|
||||||
|
<default>false</default>
|
||||||
|
<summary>Whether the application is in fullscreen mode</summary>
|
||||||
|
</key>
|
||||||
|
</schema>
|
||||||
|
</schemalist>
|
@ -42,6 +42,10 @@
|
|||||||
|
|
||||||
mkdir -p $out/share/icons
|
mkdir -p $out/share/icons
|
||||||
cp ${./music-reader.png} $out/share/icons/music-reader.png
|
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 =
|
devShell =
|
||||||
|
@ -5,9 +5,9 @@ mod ui;
|
|||||||
|
|
||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
use env_logger::Env;
|
use env_logger::Env;
|
||||||
|
use gio::Settings;
|
||||||
use gtk::prelude::*;
|
use gtk::prelude::*;
|
||||||
use gtk::Application;
|
use gtk::Application;
|
||||||
use log::debug;
|
|
||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
@ -27,7 +27,8 @@ fn main() {
|
|||||||
let app = Application::builder().application_id(APP_ID).build();
|
let app = Application::builder().application_id(APP_ID).build();
|
||||||
|
|
||||||
app.connect_activate(move |app| {
|
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() {
|
if let Some(file) = cli.file.as_ref() {
|
||||||
ui::load_document(file, Rc::clone(&ui), 0);
|
ui::load_document(file, Rc::clone(&ui), 0);
|
||||||
}
|
}
|
||||||
@ -36,6 +37,6 @@ fn main() {
|
|||||||
app.run_with_args(&[] as &[&str]);
|
app.run_with_args(&[] as &[&str]);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn build_ui(app: &Application) -> Rc<RefCell<Ui>> {
|
fn build_ui(app: &Application, settings: Settings) -> Rc<RefCell<Ui>> {
|
||||||
Ui::build(app)
|
Ui::build(app, settings)
|
||||||
}
|
}
|
||||||
|
37
src/ui.rs
37
src/ui.rs
@ -5,6 +5,7 @@ use std::{
|
|||||||
time::{Duration, Instant},
|
time::{Duration, Instant},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
use gio::Settings;
|
||||||
use gtk::{
|
use gtk::{
|
||||||
glib, Application, ApplicationWindow, Box, Button, FileChooserAction, FileChooserDialog,
|
glib, Application, ApplicationWindow, Box, Button, FileChooserAction, FileChooserDialog,
|
||||||
HeaderBar, Label, Overlay, Picture, ResponseType, ToggleButton,
|
HeaderBar, Label, Overlay, Picture, ResponseType, ToggleButton,
|
||||||
@ -19,6 +20,7 @@ use glib::clone;
|
|||||||
use gtk::prelude::*;
|
use gtk::prelude::*;
|
||||||
|
|
||||||
pub struct Ui {
|
pub struct Ui {
|
||||||
|
settings: Settings,
|
||||||
window: ApplicationWindow,
|
window: ApplicationWindow,
|
||||||
bottom_bar: gtk::Box,
|
bottom_bar: gtk::Box,
|
||||||
header_bar: gtk::HeaderBar,
|
header_bar: gtk::HeaderBar,
|
||||||
@ -114,22 +116,24 @@ impl DocumentCanvas {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn toggle_fullscreen(ui: &Ui) {
|
pub fn set_fullscreen(ui: &Ui, fullscreen: bool) {
|
||||||
match !ui.window.is_fullscreen() {
|
match fullscreen {
|
||||||
true => {
|
true => {
|
||||||
ui.header_bar.hide();
|
ui.header_bar.hide();
|
||||||
ui.bottom_bar.hide();
|
ui.bottom_bar.hide();
|
||||||
ui.window.fullscreen();
|
ui.window.fullscreen();
|
||||||
|
|
||||||
let new_area_height = ui.image_container.height() + ui.header_bar.height();
|
let new_area_height = ui.image_container.height() + ui.header_bar.height();
|
||||||
ui.document_canvas
|
if ui.document_canvas.is_some() {
|
||||||
.as_ref()
|
ui.document_canvas
|
||||||
.unwrap()
|
.as_ref()
|
||||||
.priority_cache_current_pages(new_area_height);
|
.unwrap()
|
||||||
ui.document_canvas
|
.priority_cache_current_pages(new_area_height);
|
||||||
.as_ref()
|
ui.document_canvas
|
||||||
.unwrap()
|
.as_ref()
|
||||||
.cache_surrounding_pages(new_area_height);
|
.unwrap()
|
||||||
|
.cache_surrounding_pages(new_area_height);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
false => {
|
false => {
|
||||||
ui.header_bar.show();
|
ui.header_bar.show();
|
||||||
@ -137,6 +141,11 @@ pub fn toggle_fullscreen(ui: &Ui) {
|
|||||||
ui.window.unfullscreen();
|
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) {
|
fn update_page_status(ui: &Ui) {
|
||||||
@ -213,7 +222,7 @@ fn process_left_click(ui: &mut Ui, x: f64, y: f64) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Ui {
|
impl Ui {
|
||||||
pub fn build(app: &Application) -> Rc<RefCell<Ui>> {
|
pub fn build(app: &Application, settings: Settings) -> Rc<RefCell<Ui>> {
|
||||||
debug!("building ui");
|
debug!("building ui");
|
||||||
let open_file_button = Button::from_icon_name("document-open");
|
let open_file_button = Button::from_icon_name("document-open");
|
||||||
let fullscreen_button = Button::from_icon_name("view-fullscreen");
|
let fullscreen_button = Button::from_icon_name("view-fullscreen");
|
||||||
@ -284,6 +293,7 @@ impl Ui {
|
|||||||
window.present();
|
window.present();
|
||||||
|
|
||||||
let ui = Ui {
|
let ui = Ui {
|
||||||
|
settings,
|
||||||
window,
|
window,
|
||||||
app_wrapper,
|
app_wrapper,
|
||||||
bottom_bar: Box::builder()
|
bottom_bar: Box::builder()
|
||||||
@ -351,6 +361,11 @@ impl Ui {
|
|||||||
);
|
);
|
||||||
|
|
||||||
ui.borrow().window.present();
|
ui.borrow().window.present();
|
||||||
|
|
||||||
|
if ui.borrow().settings.boolean("fullscreen") {
|
||||||
|
set_fullscreen(&ui.borrow(), true);
|
||||||
|
}
|
||||||
|
|
||||||
ui
|
ui
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user