use std::cell::RefCell; use std::rc::Rc; use glib::SignalHandlerId; use gtk4::subclass::prelude::*; use gtk4::DragSource; use gtk4::DropTarget; use gtk4::EventControllerMotion; use gtk4::ListView; use gtk4::Revealer; use gtk4::{gio, glib}; use gtk4::{Box, GestureClick}; use once_cell::sync::OnceCell; // Object holding the state #[derive(Default)] pub struct Window { pub saved_app_list_view: OnceCell, pub active_app_list_view: OnceCell, pub revealer: OnceCell, pub cursor_handle: OnceCell, pub saved_app_model: OnceCell, pub active_app_model: OnceCell, pub cursor_motion_controller: OnceCell, pub saved_click_controller: Rc>, pub active_click_controller: Rc>, pub drop_controller: OnceCell, pub saved_drag_source: Rc>, pub active_drag_source: Rc>, pub saved_drag_end_signal: Rc>>, pub active_drag_end_signal: Rc>>, pub saved_drag_cancel_signal: Rc>>, pub active_drag_cancel_signal: Rc>>, pub window_drop_controller: Rc>, } // The central trait for subclassing a GObject #[glib::object_subclass] impl ObjectSubclass for Window { // `NAME` needs to match `class` attribute of template const NAME: &'static str = "DockWindow"; type Type = super::Window; type ParentType = gtk4::ApplicationWindow; } // Trait shared by all GObjects impl ObjectImpl for Window {} // 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 {}