Handle window geometry with a new struct.
This commit is contained in:
parent
524e0bb0a8
commit
c458b27573
@ -13,6 +13,7 @@ use hammond_data::utils::delete_show;
|
|||||||
|
|
||||||
use appnotif::*;
|
use appnotif::*;
|
||||||
use headerbar::Header;
|
use headerbar::Header;
|
||||||
|
use settings::WindowGeometry;
|
||||||
use stacks::Content;
|
use stacks::Content;
|
||||||
use utils;
|
use utils;
|
||||||
use widgets::mark_all_watched;
|
use widgets::mark_all_watched;
|
||||||
@ -74,7 +75,7 @@ impl App {
|
|||||||
let window_clone = window.clone();
|
let window_clone = window.clone();
|
||||||
let settings_clone = settings.clone();
|
let settings_clone = settings.clone();
|
||||||
window.connect_delete_event(move |_, _| {
|
window.connect_delete_event(move |_, _| {
|
||||||
store_window_geometry(&window_clone, &settings_clone);
|
WindowGeometry::from_window(&window_clone).write(&settings_clone);
|
||||||
app_clone.quit();
|
app_clone.quit();
|
||||||
Inhibit(false)
|
Inhibit(false)
|
||||||
});
|
});
|
||||||
@ -152,7 +153,7 @@ impl App {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn run(self) {
|
pub fn run(self) {
|
||||||
restore_window_geometry(&self.window, &self.settings);
|
WindowGeometry::from_settings(&self.settings).apply(&self.window);
|
||||||
|
|
||||||
let window = self.window.clone();
|
let window = self.window.clone();
|
||||||
|
|
||||||
@ -264,34 +265,3 @@ fn build_ui(window: >k::Window, app: >k::Application) {
|
|||||||
window.activate();
|
window.activate();
|
||||||
app.connect_activate(move |_| ());
|
app.connect_activate(move |_| ());
|
||||||
}
|
}
|
||||||
|
|
||||||
fn restore_window_geometry(window: >k::Window, settings: &Settings) {
|
|
||||||
let top = settings.get_int("persist-window-geometry-top");
|
|
||||||
let left = settings.get_int("persist-window-geometry-left");
|
|
||||||
let width = settings.get_int("persist-window-geometry-width");
|
|
||||||
let height = settings.get_int("persist-window-geometry-height");
|
|
||||||
let is_maximized = settings.get_boolean("persist-window-geometry-maximized");
|
|
||||||
|
|
||||||
if width > 0 && height > 0 {
|
|
||||||
window.resize(width, height);
|
|
||||||
}
|
|
||||||
|
|
||||||
if is_maximized {
|
|
||||||
window.maximize();
|
|
||||||
}
|
|
||||||
|
|
||||||
else if top > 0 && left > 0 {
|
|
||||||
window.move_(left, top);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn store_window_geometry(window: >k::Window, settings: &Settings) {
|
|
||||||
let position = window.get_position();
|
|
||||||
let size = window.get_size();
|
|
||||||
|
|
||||||
settings.set_int("persist-window-geometry-left", position.0);
|
|
||||||
settings.set_int("persist-window-geometry-top", position.1);
|
|
||||||
settings.set_int("persist-window-geometry-width", size.0);
|
|
||||||
settings.set_int("persist-window-geometry-height", size.1);
|
|
||||||
settings.set_boolean("persist-window-geometry-maximized", window.is_maximized());
|
|
||||||
}
|
|
||||||
|
|||||||
@ -67,6 +67,7 @@ pub mod stacks;
|
|||||||
pub mod headerbar;
|
pub mod headerbar;
|
||||||
pub mod app;
|
pub mod app;
|
||||||
|
|
||||||
|
pub mod settings;
|
||||||
pub mod utils;
|
pub mod utils;
|
||||||
pub mod manager;
|
pub mod manager;
|
||||||
pub mod static_resource;
|
pub mod static_resource;
|
||||||
|
|||||||
90
hammond-gtk/src/settings.rs
Normal file
90
hammond-gtk/src/settings.rs
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
use gio;
|
||||||
|
use gio::SettingsExt;
|
||||||
|
use gtk;
|
||||||
|
use gtk::GtkWindowExt;
|
||||||
|
|
||||||
|
pub struct WindowGeometry {
|
||||||
|
left: i32,
|
||||||
|
top: i32,
|
||||||
|
width: i32,
|
||||||
|
height: i32,
|
||||||
|
is_maximized: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl WindowGeometry {
|
||||||
|
pub fn from_window(window: >k::Window) -> WindowGeometry {
|
||||||
|
let position = window.get_position();
|
||||||
|
let size = window.get_size();
|
||||||
|
let left = position.0;
|
||||||
|
let top = position.1;
|
||||||
|
let width = size.0;
|
||||||
|
let height = size.1;
|
||||||
|
let is_maximized = window.is_maximized();
|
||||||
|
|
||||||
|
WindowGeometry {
|
||||||
|
left,
|
||||||
|
top,
|
||||||
|
width,
|
||||||
|
height,
|
||||||
|
is_maximized,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn from_settings(settings: &gio::Settings) -> WindowGeometry {
|
||||||
|
let top = settings.get_int("persist-window-geometry-top");
|
||||||
|
let left = settings.get_int("persist-window-geometry-left");
|
||||||
|
let width = settings.get_int("persist-window-geometry-width");
|
||||||
|
let height = settings.get_int("persist-window-geometry-height");
|
||||||
|
let is_maximized = settings.get_boolean("persist-window-geometry-maximized");
|
||||||
|
|
||||||
|
WindowGeometry {
|
||||||
|
left,
|
||||||
|
top,
|
||||||
|
width,
|
||||||
|
height,
|
||||||
|
is_maximized,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn apply(&self, window: >k::Window) {
|
||||||
|
if self.width > 0 && self.height > 0 {
|
||||||
|
window.resize(self.width, self.height);
|
||||||
|
}
|
||||||
|
|
||||||
|
if self.is_maximized {
|
||||||
|
window.maximize();
|
||||||
|
} else if self.top > 0 && self.left > 0 {
|
||||||
|
window.move_(self.left, self.top);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn write(&self, settings: &gio::Settings) {
|
||||||
|
settings.set_int("persist-window-geometry-left", self.left);
|
||||||
|
settings.set_int("persist-window-geometry-top", self.top);
|
||||||
|
settings.set_int("persist-window-geometry-width", self.width);
|
||||||
|
settings.set_int("persist-window-geometry-height", self.height);
|
||||||
|
settings.set_boolean("persist-window-geometry-maximized", self.is_maximized);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// #[test]
|
||||||
|
// fn test_apply_window_geometry() {
|
||||||
|
// gtk::init().expect("Error initializing gtk.");
|
||||||
|
|
||||||
|
// let window = gtk::Window::new(gtk::WindowType::Toplevel);
|
||||||
|
// let _geometry = WindowGeometry {
|
||||||
|
// left: 0,
|
||||||
|
// top: 0,
|
||||||
|
// width: 100,
|
||||||
|
// height: 100,
|
||||||
|
// is_maximized: true
|
||||||
|
// };
|
||||||
|
|
||||||
|
// assert!(!window.is_maximized());
|
||||||
|
|
||||||
|
// window.show();
|
||||||
|
// window.activate();
|
||||||
|
// geometry.apply(&window);
|
||||||
|
|
||||||
|
// assert!(window.is_maximized());
|
||||||
|
// }
|
||||||
Loading…
Reference in New Issue
Block a user