2022-01-02 01:46:44 -05:00
|
|
|
use gtk4::glib;
|
2021-12-30 16:54:35 -05:00
|
|
|
use gtk4::subclass::prelude::*;
|
2022-01-02 01:46:44 -05:00
|
|
|
use gtk4::Box;
|
2021-12-16 09:38:20 -05:00
|
|
|
use gtk4::DropTarget;
|
2021-12-14 16:36:28 -05:00
|
|
|
use gtk4::EventControllerMotion;
|
|
|
|
|
use gtk4::Revealer;
|
2021-12-14 11:53:18 -05:00
|
|
|
use once_cell::sync::OnceCell;
|
|
|
|
|
|
2022-01-02 01:46:44 -05:00
|
|
|
use crate::dock_list::DockList;
|
|
|
|
|
|
2021-12-14 11:53:18 -05:00
|
|
|
// Object holding the state
|
2021-12-30 19:01:59 -05:00
|
|
|
#[derive(Default)]
|
2021-12-14 11:53:18 -05:00
|
|
|
pub struct Window {
|
2021-12-30 19:01:59 -05:00
|
|
|
pub revealer: OnceCell<Revealer>,
|
|
|
|
|
pub cursor_handle: OnceCell<Box>,
|
2021-12-30 15:35:10 -05:00
|
|
|
pub cursor_motion_controller: OnceCell<EventControllerMotion>,
|
2022-01-02 01:46:44 -05:00
|
|
|
pub window_drop_controller: OnceCell<DropTarget>,
|
|
|
|
|
pub saved_list: OnceCell<DockList>,
|
|
|
|
|
pub active_list: OnceCell<DockList>,
|
2021-12-14 11:53:18 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// The central trait for subclassing a GObject
|
|
|
|
|
#[glib::object_subclass]
|
|
|
|
|
impl ObjectSubclass for Window {
|
|
|
|
|
// `NAME` needs to match `class` attribute of template
|
2021-12-30 22:23:17 -05:00
|
|
|
const NAME: &'static str = "DockWindow";
|
2021-12-14 11:53:18 -05:00
|
|
|
type Type = super::Window;
|
2021-12-30 16:54:35 -05:00
|
|
|
type ParentType = gtk4::ApplicationWindow;
|
2021-12-14 11:53:18 -05:00
|
|
|
}
|
2021-12-29 17:31:01 -05:00
|
|
|
|
2021-12-14 11:53:18 -05:00
|
|
|
// Trait shared by all GObjects
|
2021-12-30 19:01:59 -05:00
|
|
|
impl ObjectImpl for Window {}
|
2021-12-29 17:31:01 -05:00
|
|
|
|
2021-12-14 11:53:18 -05:00
|
|
|
// Trait shared by all widgets
|
|
|
|
|
impl WidgetImpl for Window {}
|
|
|
|
|
|
|
|
|
|
// Trait shared by all windows
|
|
|
|
|
impl WindowImpl for Window {}
|
|
|
|
|
|
|
|
|
|
// Trait shared by all application
|
|
|
|
|
impl ApplicationWindowImpl for Window {}
|