audrey/src/application.rs
2024-11-04 10:13:24 +01:00

66 lines
1.6 KiB
Rust

mod imp {
use crate::ui;
use adw::{prelude::*, subclass::prelude::*};
use gtk::glib;
use tracing::{event, Level};
#[derive(Default)]
pub struct Application {}
#[glib::object_subclass]
impl ObjectSubclass for Application {
const NAME: &'static str = "AudreyApplication";
type Type = super::Application;
type ParentType = adw::Application;
}
impl ObjectImpl for Application {}
impl ApplicationImpl for Application {
fn activate(&self) {
self.parent_activate();
match self.obj().active_window() {
None => {
let window = ui::Window::new(self.obj().as_ref());
window.present();
}
Some(win) => win.present(),
}
}
}
impl GtkApplicationImpl for Application {}
impl AdwApplicationImpl for Application {}
impl Application {}
impl Drop for Application {
fn drop(&mut self) {
event!(Level::DEBUG, "dropping AudreyApplication");
}
}
}
use gtk::{gio, glib};
glib::wrapper! {
pub struct Application(ObjectSubclass<imp::Application>)
@extends adw::Application, gtk::Application, gio::Application,
@implements gio::ActionGroup, gio::ActionMap;
}
impl Default for Application {
fn default() -> Self {
glib::Object::builder::<Application>()
.property("application-id", crate::APP_ID)
.property("flags", gio::ApplicationFlags::default())
.build()
}
}
impl Application {
pub fn new() -> Self {
Self::default()
}
}