From 65f43a930074f1a25d5a5a960a3aea9cd4ccdc0b Mon Sep 17 00:00:00 2001 From: Ashley Wulber Date: Wed, 29 Dec 2021 17:31:01 -0500 Subject: [PATCH] revert X Property change, and cleanup formatting --- examples/app_library/app_group/imp.rs | 8 +- examples/app_library/app_group/mod.rs | 6 +- examples/app_library/grid_item/grid_item.ui | 48 +++---- examples/app_library/grid_item/imp.rs | 10 +- examples/app_library/grid_item/mod.rs | 11 +- examples/app_library/main.rs | 14 +- examples/app_library/style.css | 3 + examples/app_library/utils.rs | 2 +- examples/app_library/window/imp.rs | 10 +- examples/app_library/window/mod.rs | 68 +++++----- examples/app_library/window/window.ui | 122 +++++++++--------- examples/dock/dock_item/dock_item.ui | 35 ++--- examples/dock/dock_item/imp.rs | 7 +- examples/dock/dock_item/mod.rs | 6 +- examples/dock/dock_object/imp.rs | 8 +- examples/dock/dock_object/mod.rs | 8 +- examples/dock/main.rs | 51 ++++---- examples/dock/style.css | 6 +- examples/dock/utils.rs | 7 +- examples/dock/window/imp.rs | 14 +- examples/dock/window/mod.rs | 67 +++++----- examples/dock/window/window.ui | 118 ++++++++--------- examples/launcher/main.rs | 26 ++-- examples/launcher/search_result_object/imp.rs | 7 +- examples/launcher/search_result_object/mod.rs | 6 +- .../search_result_row/application_row.ui | 106 +++++++-------- examples/launcher/search_result_row/imp.rs | 7 +- examples/launcher/search_result_row/mod.rs | 11 +- examples/launcher/style.css | 3 + examples/launcher/window/imp.rs | 9 +- examples/launcher/window/mod.rs | 42 +++--- examples/launcher/window/window.ui | 42 +++--- 32 files changed, 459 insertions(+), 429 deletions(-) diff --git a/examples/app_library/app_group/imp.rs b/examples/app_library/app_group/imp.rs index 07dcc776..734e1b77 100644 --- a/examples/app_library/app_group/imp.rs +++ b/examples/app_library/app_group/imp.rs @@ -1,12 +1,12 @@ +use std::cell::RefCell; +use std::rc::Rc; + use glib::{FromVariant, ParamFlags, ParamSpec, ToVariant, Value, Variant, VariantTy}; use gtk4::glib; use gtk4::prelude::*; use gtk4::subclass::prelude::*; use once_cell::sync::Lazy; -use std::cell::RefCell; -use std::rc::Rc; - use super::AppGroupData; // Object holding the state @@ -142,7 +142,7 @@ impl ObjectImpl for AppGroup { .get::() .expect("The icon needs to be a Variant"), ) - .expect("The icon variant needs to be a Vec"); + .expect("The icon variant needs to be a Vec"); self.data.borrow_mut().app_names = appnames; } _ => unimplemented!(), diff --git a/examples/app_library/app_group/mod.rs b/examples/app_library/app_group/mod.rs index 832128e9..8b3622dd 100644 --- a/examples/app_library/app_group/mod.rs +++ b/examples/app_library/app_group/mod.rs @@ -1,5 +1,3 @@ -mod imp; - use glib::Object; use glib::ObjectExt; use glib::ToVariant; @@ -7,6 +5,8 @@ use gtk4::glib; use gtk4::subclass::prelude::*; use serde::{Deserialize, Serialize}; +mod imp; + glib::wrapper! { pub struct AppGroup(ObjectSubclass); } @@ -20,7 +20,7 @@ impl AppGroup { ("icon", &data.icon), ("category", &data.category), ]) - .expect("Failed to create `ApplicationObject`."); + .expect("Failed to create `ApplicationObject`."); if let Err(e) = self_.set_property("appnames", data.app_names.to_variant()) { println!("failed to set category icon property"); dbg!(e); diff --git a/examples/app_library/grid_item/grid_item.ui b/examples/app_library/grid_item/grid_item.ui index 6e32859b..d29d4943 100644 --- a/examples/app_library/grid_item/grid_item.ui +++ b/examples/app_library/grid_item/grid_item.ui @@ -1,28 +1,28 @@ - diff --git a/examples/app_library/grid_item/imp.rs b/examples/app_library/grid_item/imp.rs index 4707da76..3a7d22aa 100644 --- a/examples/app_library/grid_item/imp.rs +++ b/examples/app_library/grid_item/imp.rs @@ -1,10 +1,10 @@ +use std::cell::Cell; + +use gtk4 as gtk; +use gtk::CompositeTemplate; use gtk::glib; use gtk::prelude::*; use gtk::subclass::prelude::*; -use gtk4 as gtk; -use std::cell::Cell; - -use gtk::CompositeTemplate; #[derive(Debug, Default, CompositeTemplate)] #[template(file = "grid_item.ui")] @@ -32,5 +32,7 @@ impl ObjectSubclass for GridItem { } impl ObjectImpl for GridItem {} + impl WidgetImpl for GridItem {} + impl BoxImpl for GridItem {} diff --git a/examples/app_library/grid_item/mod.rs b/examples/app_library/grid_item/mod.rs index 4c4c7384..da1d8e60 100644 --- a/examples/app_library/grid_item/mod.rs +++ b/examples/app_library/grid_item/mod.rs @@ -1,17 +1,18 @@ -use crate::app_group::AppGroup; use gdk4::ContentProvider; use gdk4::Display; use gio::File; use gio::Icon; +use gtk::{gio, glib}; use gtk4 as gtk; -use gtk4::traits::WidgetExt; use gtk4::DragSource; use gtk4::IconTheme; -mod imp; - +use gtk4::traits::WidgetExt; use gtk::prelude::*; use gtk::subclass::prelude::*; -use gtk::{gio, glib}; + +use crate::app_group::AppGroup; + +mod imp; glib::wrapper! { pub struct GridItem(ObjectSubclass) diff --git a/examples/app_library/main.rs b/examples/app_library/main.rs index e3315579..ae3e90b4 100644 --- a/examples/app_library/main.rs +++ b/examples/app_library/main.rs @@ -1,18 +1,18 @@ -mod app_group; -mod grid_item; -mod utils; -mod window; - -use gtk::gdk::Display; -use gtk::prelude::*; use gtk4 as gtk; use gtk4::CssProvider; use gtk4::StyleContext; +use gtk::gdk::Display; +use gtk::prelude::*; use once_cell::sync::OnceCell; use x11rb::rust_connection::RustConnection; use window::Window; +mod app_group; +mod grid_item; +mod utils; +mod window; + static X11_CONN: OnceCell = OnceCell::new(); fn main() { diff --git a/examples/app_library/style.css b/examples/app_library/style.css index fef7259d..5197b578 100644 --- a/examples/app_library/style.css +++ b/examples/app_library/style.css @@ -2,12 +2,15 @@ child:hover { transition: 100ms; background: #888888; } + child { border-radius: 5px; } + gridview { background: #333333; } + window { background: #333333; border-radius: 15px; diff --git a/examples/app_library/utils.rs b/examples/app_library/utils.rs index e320b8ed..db4d2e23 100644 --- a/examples/app_library/utils.rs +++ b/examples/app_library/utils.rs @@ -1,7 +1,7 @@ -use gtk4::ScrolledWindow; use std::path::PathBuf; use gtk4::glib; +use gtk4::ScrolledWindow; pub fn data_path() -> PathBuf { let mut path = glib::user_data_dir(); diff --git a/examples/app_library/window/imp.rs b/examples/app_library/window/imp.rs index e57c49e1..13694ed3 100644 --- a/examples/app_library/window/imp.rs +++ b/examples/app_library/window/imp.rs @@ -1,13 +1,13 @@ -use gtk4 as gtk; -use gtk4::ScrolledWindow; use std::fs::File; use glib::signal::Inhibit; use glib::subclass::InitializingObject; -use gtk::prelude::*; -use gtk::subclass::prelude::*; use gtk::{gio, glib}; use gtk::{CompositeTemplate, GridView, SearchEntry}; +use gtk4 as gtk; +use gtk4::ScrolledWindow; +use gtk::prelude::*; +use gtk::subclass::prelude::*; use once_cell::sync::OnceCell; use crate::app_group::AppGroup; @@ -45,6 +45,7 @@ impl ObjectSubclass for Window { obj.init_template(); } } + // Trait shared by all GObjects impl ObjectImpl for Window { fn constructed(&self, obj: &Self::Type) { @@ -58,6 +59,7 @@ impl ObjectImpl for Window { obj.setup_factory(); } } + // Trait shared by all widgets impl WidgetImpl for Window {} diff --git a/examples/app_library/window/mod.rs b/examples/app_library/window/mod.rs index 8678d9d8..0405a7ba 100644 --- a/examples/app_library/window/mod.rs +++ b/examples/app_library/window/mod.rs @@ -1,31 +1,33 @@ -mod imp; -use crate::app_group::AppGroup; -use crate::app_group::AppGroupData; -use crate::grid_item::GridItem; -use crate::utils::data_path; -use crate::utils::set_group_scroll_policy; -use crate::X11_CONN; +use std::fs::File; + use gdk4::Rectangle; use gdk4_x11::X11Display; use gdk4_x11::X11Surface; use glib::FromVariant; use glib::Object; use glib::Variant; -use gtk::prelude::*; -use gtk::subclass::prelude::*; use gtk::{gio, glib}; use gtk::{Application, SignalListItemFactory}; use gtk4 as gtk; use gtk4::Dialog; use gtk4::Entry; use gtk4::Label; -use libcosmic::x; -use std::fs::File; +use gtk::prelude::*; +use gtk::subclass::prelude::*; use x11rb::connection::Connection; use x11rb::protocol::xproto; -use x11rb::protocol::xproto::ConnectionExt as OtherConnectionExt; -use x11rb::protocol::xproto::*; -use x11rb::wrapper::ConnectionExt; +use x11rb::protocol::xproto::ConnectionExt; + +use libcosmic::x; + +use crate::app_group::AppGroup; +use crate::app_group::AppGroupData; +use crate::grid_item::GridItem; +use crate::utils::data_path; +use crate::utils::set_group_scroll_policy; +use crate::X11_CONN; + +mod imp; glib::wrapper! { pub struct Window(ObjectSubclass) @@ -170,10 +172,10 @@ impl Window { category: "".to_string(), }), ] - .iter() - .for_each(|group| { - group_model.append(group); - }); + .iter() + .for_each(|group| { + group_model.append(group); + }); let group_selection = gtk4::SingleSelection::new(Some(&group_model)); imp.group_grid_view.set_model(Some(&group_selection)); } @@ -407,27 +409,15 @@ impl Window { .downcast::() .expect("Failed to downgrade X11 Display."); xdisplay.error_trap_push(); - let conn = X11_CONN.get().expect("Failed to get X11 connection"); - let window_type_atom = conn - .intern_atom(false, b"_NET_WM_WINDOW_TYPE") - .unwrap() - .reply() - .unwrap() - .atom; - let dock_type_atom = conn - .intern_atom(false, b"_NET_WM_WINDOW_TYPE_DIALOG") - .unwrap() - .reply() - .unwrap() - .atom; - conn.change_property32( - PropMode::REPLACE, - surface.xid().try_into().unwrap(), - window_type_atom, - AtomEnum::ATOM, - &[dock_type_atom], - ) - .unwrap(); + unsafe { + x::change_property( + &display, + &surface, + "_NET_WM_WINDOW_TYPE", + x::PropMode::Replace, + &[x::Atom::new(&display, "_NET_WM_WINDOW_TYPE_DIALOG").unwrap()], + ); + } let resize = glib::clone!(@weak window => move || { let s = window.surface().expect("Failed to get Surface for Window"); let height = window.height(); diff --git a/examples/app_library/window/window.ui b/examples/app_library/window/window.ui index 986f3efc..4690cb7d 100644 --- a/examples/app_library/window/window.ui +++ b/examples/app_library/window/window.ui @@ -1,66 +1,66 @@ - diff --git a/examples/dock/dock_item/dock_item.ui b/examples/dock/dock_item/dock_item.ui index 2876e9c7..b4e698fb 100644 --- a/examples/dock/dock_item/dock_item.ui +++ b/examples/dock/dock_item/dock_item.ui @@ -1,20 +1,21 @@ - + diff --git a/examples/dock/dock_item/imp.rs b/examples/dock/dock_item/imp.rs index 3b67118c..63154bc9 100644 --- a/examples/dock/dock_item/imp.rs +++ b/examples/dock/dock_item/imp.rs @@ -1,9 +1,8 @@ +use gtk4 as gtk; +use gtk::CompositeTemplate; use gtk::glib; use gtk::prelude::*; use gtk::subclass::prelude::*; -use gtk4 as gtk; - -use gtk::CompositeTemplate; #[derive(Debug, Default, CompositeTemplate)] #[template(file = "dock_item.ui")] @@ -30,5 +29,7 @@ impl ObjectSubclass for DockItem { } impl ObjectImpl for DockItem {} + impl WidgetImpl for DockItem {} + impl BoxImpl for DockItem {} diff --git a/examples/dock/dock_item/mod.rs b/examples/dock/dock_item/mod.rs index c6cf8d30..d652d597 100644 --- a/examples/dock/dock_item/mod.rs +++ b/examples/dock/dock_item/mod.rs @@ -1,14 +1,14 @@ -use crate::utils::BoxedWindowList; use gio::DesktopAppInfo; use gio::Icon; use gtk4 as gtk; -mod imp; - use gtk::glib; use gtk::prelude::*; use gtk::subclass::prelude::*; use crate::dock_object::DockObject; +use crate::utils::BoxedWindowList; + +mod imp; glib::wrapper! { pub struct DockItem(ObjectSubclass) diff --git a/examples/dock/dock_object/imp.rs b/examples/dock/dock_object/imp.rs index e717b6dd..79d6f078 100644 --- a/examples/dock/dock_object/imp.rs +++ b/examples/dock/dock_object/imp.rs @@ -1,12 +1,14 @@ -use crate::utils::BoxedWindowList; +use std::cell::Cell; +use std::cell::RefCell; + use gio::DesktopAppInfo; use glib::{ParamFlags, ParamSpec, Value}; use gtk4::glib; use gtk4::prelude::*; use gtk4::subclass::prelude::*; use once_cell::sync::Lazy; -use std::cell::Cell; -use std::cell::RefCell; + +use crate::utils::BoxedWindowList; // Object holding the state #[derive(Default)] diff --git a/examples/dock/dock_object/mod.rs b/examples/dock/dock_object/mod.rs index a9f7fa00..d6e00ea8 100644 --- a/examples/dock/dock_object/mod.rs +++ b/examples/dock/dock_object/mod.rs @@ -1,11 +1,13 @@ -mod imp; +use std::path::Path; -use crate::utils::BoxedWindowList; use gdk4::glib::Object; use gio::DesktopAppInfo; use gtk4::glib; use gtk4::prelude::AppInfoExt; -use std::path::Path; + +use crate::utils::BoxedWindowList; + +mod imp; glib::wrapper! { pub struct DockObject(ObjectSubclass); diff --git a/examples/dock/main.rs b/examples/dock/main.rs index e5111484..eccb4326 100644 --- a/examples/dock/main.rs +++ b/examples/dock/main.rs @@ -1,31 +1,34 @@ -mod dock_item; -mod dock_object; -mod utils; -mod window; +use std::collections::BTreeMap; +use std::time::Duration; -use self::dock_object::DockObject; -use self::window::Window; -use crate::utils::BoxedWindowList; use futures::executor::block_on; use gdk4::Display; use gio::DesktopAppInfo; -use gtk::gio; -use gtk::glib; -use gtk::prelude::*; -use gtk::Application; use gtk4 as gtk; use gtk4::CssProvider; use gtk4::StyleContext; +use gtk::Application; +use gtk::gio; +use gtk::glib; +use gtk::prelude::*; use once_cell::sync::OnceCell; use postage::mpsc::Sender; use postage::prelude::*; use serde::{Deserialize, Serialize}; -use std::collections::BTreeMap; -use std::time::Duration; use x11rb::rust_connection::RustConnection; use zbus::Connection; use zvariant_derive::Type; +use crate::utils::BoxedWindowList; + +use self::dock_object::DockObject; +use self::window::Window; + +mod dock_item; +mod dock_object; +mod utils; +mod window; + const DEST: &str = "com.System76.PopShell"; const PATH: &str = "/com/System76/PopShell"; const NUM_LAUNCHER_ITEMS: u8 = 10; @@ -129,7 +132,7 @@ fn main() { match event { Event::Activate(e) => { let _activate_window = zbus_conn - .call_method(Some(DEST), PATH, Some(DEST), "WindowFocus", &((e,))) + .call_method(Some(DEST), PATH, Some(DEST), "WindowFocus", &((e, ))) .await .expect("Failed to focus selected window"); } @@ -223,16 +226,16 @@ fn main() { // skip if equal if cached_results.len() == results.len() && results.iter().zip(cached_results.iter()).fold( - 0, - |acc, z: (&Item, &Item)| { - let (a, b) = z; - if a.name == b.name { - acc + 1 - } else { - acc - } - }, - ) == cached_results.len() + 0, + |acc, z: (&Item, &Item)| { + let (a, b) = z; + if a.name == b.name { + acc + 1 + } else { + acc + } + }, + ) == cached_results.len() { continue; // skip this update } diff --git a/examples/dock/style.css b/examples/dock/style.css index 520093a2..0f112128 100644 --- a/examples/dock/style.css +++ b/examples/dock/style.css @@ -3,17 +3,21 @@ row:hover { background: #888888; border-radius: 12px; } + row { background: #333333; border-radius: 12px; } + listview { border-radius: 12px; background: #333333; } + window { - background: rgba(50,50,50,0.0); + background: rgba(50, 50, 50, 0.0); } + box#dock-container { border-radius: 12px; background: #333333; diff --git a/examples/dock/utils.rs b/examples/dock/utils.rs index 0bc76a8e..e432005d 100644 --- a/examples/dock/utils.rs +++ b/examples/dock/utils.rs @@ -1,11 +1,14 @@ +use std::path::PathBuf; + +use gtk4::glib; + use crate::DockObject; use crate::Item; -use gtk4::glib; -use std::path::PathBuf; #[derive(Clone, Debug, Default, glib::GBoxed)] #[gboxed(type_name = "BoxedWindowList")] pub struct BoxedWindowList(pub Vec); + #[derive(Clone, Debug, Default, glib::GBoxed)] #[gboxed(type_name = "BoxedDockObject")] pub struct BoxedDockObject(pub Option); diff --git a/examples/dock/window/imp.rs b/examples/dock/window/imp.rs index 1e9c93c6..078fc282 100644 --- a/examples/dock/window/imp.rs +++ b/examples/dock/window/imp.rs @@ -1,18 +1,18 @@ +use std::cell::RefCell; +use std::rc::Rc; + use glib::SignalHandlerId; +use glib::subclass::InitializingObject; +use gtk::{gio, glib}; +use gtk::{CompositeTemplate, ListView}; use gtk4 as gtk; use gtk4::Box; use gtk4::DragSource; use gtk4::DropTarget; use gtk4::EventControllerMotion; use gtk4::Revealer; -use std::cell::RefCell; -use std::rc::Rc; - -use glib::subclass::InitializingObject; use gtk::prelude::*; use gtk::subclass::prelude::*; -use gtk::{gio, glib}; -use gtk::{CompositeTemplate, ListView}; use once_cell::sync::OnceCell; // Object holding the state @@ -56,6 +56,7 @@ impl ObjectSubclass for Window { obj.init_template(); } } + // Trait shared by all GObjects impl ObjectImpl for Window { fn constructed(&self, obj: &Self::Type) { @@ -72,6 +73,7 @@ impl ObjectImpl for Window { obj.setup_factory(); } } + // Trait shared by all widgets impl WidgetImpl for Window {} diff --git a/examples/dock/window/mod.rs b/examples/dock/window/mod.rs index e8eafb42..2e3e7853 100644 --- a/examples/dock/window/mod.rs +++ b/examples/dock/window/mod.rs @@ -1,12 +1,6 @@ -mod imp; -// use crate::ApplicationObject; -use crate::dock_item::DockItem; -use crate::dock_object::DockObject; -use crate::utils::data_path; -use crate::BoxedWindowList; -use crate::Event; -use crate::TX; -use crate::X11_CONN; +use std::fs::File; +use std::path::Path; + use gdk4::ContentProvider; use gdk4::Display; use gdk4::Rectangle; @@ -14,28 +8,36 @@ use gdk4_x11::X11Display; use gdk4_x11::X11Surface; use gio::DesktopAppInfo; use gio::Icon; +// use crate::application_row::ApplicationRow; +use glib::Object; use glib::Type; +use gtk::{gio, glib}; +use gtk::{Application, SignalListItemFactory}; use gtk4 as gtk; -use gtk4::prelude::ListModelExt; use gtk4::DragSource; use gtk4::DropTarget; use gtk4::EventControllerMotion; use gtk4::IconTheme; -use postage::prelude::Sink; -use std::fs::File; -use std::path::Path; -use x11rb::connection::Connection; -use x11rb::protocol::xproto::ConnectionExt as OtherConnectionExt; -use x11rb::protocol::xproto::*; -use x11rb::wrapper::ConnectionExt; -// use crate::application_row::ApplicationRow; -use glib::Object; +use gtk4::prelude::ListModelExt; use gtk::prelude::*; use gtk::subclass::prelude::*; -use gtk::{gio, glib}; -use gtk::{Application, SignalListItemFactory}; -use libcosmic::x; +use postage::prelude::Sink; +use x11rb::connection::Connection; use x11rb::protocol::xproto; +use x11rb::protocol::xproto::ConnectionExt; + +use libcosmic::x; + +use crate::BoxedWindowList; +// use crate::ApplicationObject; +use crate::dock_item::DockItem; +use crate::dock_object::DockObject; +use crate::Event; +use crate::TX; +use crate::utils::data_path; +use crate::X11_CONN; + +mod imp; glib::wrapper! { pub struct Window(ObjectSubclass) @@ -178,16 +180,15 @@ impl Window { // ignore all x11 errors... let xdisplay = display.clone().downcast::().expect("Failed to downgrade X11 Display."); xdisplay.error_trap_push(); - let conn = X11_CONN.get().expect("Failed to get X11 connection"); - let window_type_atom = conn.intern_atom(false, b"_NET_WM_WINDOW_TYPE").unwrap().reply().unwrap().atom; - let dock_type_atom = conn.intern_atom(false, b"_NET_WM_WINDOW_TYPE_DOCK").unwrap().reply().unwrap().atom; - conn.change_property32( - PropMode::REPLACE, - surface.xid().try_into().unwrap(), - window_type_atom, - AtomEnum::ATOM, - &[dock_type_atom] - ).unwrap(); + unsafe { + x::change_property( + &display, + &surface, + "_NET_WM_WINDOW_TYPE", + x::PropMode::Replace, + &[x::Atom::new(&display, "_NET_WM_WINDOW_TYPE_DOCK").unwrap()], + ); + } let resize = glib::clone!(@weak window, @weak revealer => move || { let s = window.surface().expect("Failed to get Surface for Window"); let height = if revealer.reveals_child() { window.height() } else { 4 }; @@ -203,6 +204,8 @@ impl Window { width: monitor_width, height: monitor_height, } = monitor.geometry(); + // dbg!(monitor_x); + // dbg!(monitor_y); // dbg!(monitor_width); // dbg!(monitor_height); // dbg!(width); diff --git a/examples/dock/window/window.ui b/examples/dock/window/window.ui index 3dcc7137..0dcbcb4f 100644 --- a/examples/dock/window/window.ui +++ b/examples/dock/window/window.ui @@ -1,69 +1,69 @@ - diff --git a/examples/launcher/main.rs b/examples/launcher/main.rs index 166078d0..0aa59856 100644 --- a/examples/launcher/main.rs +++ b/examples/launcher/main.rs @@ -1,26 +1,28 @@ -mod search_result_object; -mod search_result_row; -mod utils; -mod window; - -use self::search_result_object::SearchResultObject; -use self::window::Window; -use crate::utils::BoxedSearchResult; use gdk4::Display; use gio::DesktopAppInfo; -use gtk::gio; -use gtk::glib; -use gtk::prelude::*; -use gtk::Application; use gtk4 as gtk; use gtk4::CssProvider; use gtk4::StyleContext; +use gtk::Application; +use gtk::gio; +use gtk::glib; +use gtk::prelude::*; use once_cell::sync::OnceCell; use pop_launcher_service::IpcClient; use postage::mpsc::Sender; use postage::prelude::*; use x11rb::rust_connection::RustConnection; +use crate::utils::BoxedSearchResult; + +use self::search_result_object::SearchResultObject; +use self::window::Window; + +mod search_result_object; +mod search_result_row; +mod utils; +mod window; + const NUM_LAUNCHER_ITEMS: u8 = 10; static TX: OnceCell> = OnceCell::new(); static X11_CONN: OnceCell = OnceCell::new(); diff --git a/examples/launcher/search_result_object/imp.rs b/examples/launcher/search_result_object/imp.rs index da29af01..8f5acd2b 100644 --- a/examples/launcher/search_result_object/imp.rs +++ b/examples/launcher/search_result_object/imp.rs @@ -1,12 +1,13 @@ -use crate::utils::BoxedSearchResult; +use std::cell::RefCell; +use std::rc::Rc; + use glib::{ParamFlags, ParamSpec, Value}; use gtk4::glib; use gtk4::prelude::*; use gtk4::subclass::prelude::*; use once_cell::sync::Lazy; -use std::cell::RefCell; -use std::rc::Rc; +use crate::utils::BoxedSearchResult; // Object holding the state #[derive(Default)] diff --git a/examples/launcher/search_result_object/mod.rs b/examples/launcher/search_result_object/mod.rs index 53d470cf..547fdc4f 100644 --- a/examples/launcher/search_result_object/mod.rs +++ b/examples/launcher/search_result_object/mod.rs @@ -1,7 +1,9 @@ -mod imp; -use crate::utils::BoxedSearchResult; use gdk4::glib::Object; +use crate::utils::BoxedSearchResult; + +mod imp; + glib::wrapper! { pub struct SearchResultObject(ObjectSubclass); } diff --git a/examples/launcher/search_result_row/application_row.ui b/examples/launcher/search_result_row/application_row.ui index 0bee2349..f878eccf 100644 --- a/examples/launcher/search_result_row/application_row.ui +++ b/examples/launcher/search_result_row/application_row.ui @@ -1,61 +1,61 @@ - diff --git a/examples/launcher/search_result_row/imp.rs b/examples/launcher/search_result_row/imp.rs index 789536eb..8b64e79e 100644 --- a/examples/launcher/search_result_row/imp.rs +++ b/examples/launcher/search_result_row/imp.rs @@ -1,9 +1,8 @@ +use gtk4 as gtk; +use gtk::CompositeTemplate; use gtk::glib; use gtk::prelude::*; use gtk::subclass::prelude::*; -use gtk4 as gtk; - -use gtk::CompositeTemplate; #[derive(Debug, Default, CompositeTemplate)] #[template(file = "application_row.ui")] @@ -36,5 +35,7 @@ impl ObjectSubclass for SearchResultRow { } impl ObjectImpl for SearchResultRow {} + impl WidgetImpl for SearchResultRow {} + impl BoxImpl for SearchResultRow {} diff --git a/examples/launcher/search_result_row/mod.rs b/examples/launcher/search_result_row/mod.rs index 266a1999..9cb393f7 100644 --- a/examples/launcher/search_result_row/mod.rs +++ b/examples/launcher/search_result_row/mod.rs @@ -1,13 +1,14 @@ -use crate::icon_source; -use crate::BoxedSearchResult; use gtk4 as gtk; -mod imp; - -use crate::SearchResultObject; use gtk::glib; use gtk::prelude::*; use gtk::subclass::prelude::*; +use crate::BoxedSearchResult; +use crate::icon_source; +use crate::SearchResultObject; + +mod imp; + glib::wrapper! { pub struct SearchResultRow(ObjectSubclass) @extends gtk::Widget, gtk::Box; diff --git a/examples/launcher/style.css b/examples/launcher/style.css index 4bfa4acf..5c2ffa45 100644 --- a/examples/launcher/style.css +++ b/examples/launcher/style.css @@ -2,12 +2,15 @@ row:hover { transition: 100ms; background: #888888; } + row { background: #333333; } + listview { background: #333333; } + window { background: #333333; border-radius: 15px; diff --git a/examples/launcher/window/imp.rs b/examples/launcher/window/imp.rs index 901181cf..36f3be99 100644 --- a/examples/launcher/window/imp.rs +++ b/examples/launcher/window/imp.rs @@ -1,10 +1,9 @@ -use gtk4 as gtk; - use glib::subclass::InitializingObject; -use gtk::prelude::*; -use gtk::subclass::prelude::*; use gtk::{gio, glib}; use gtk::{CompositeTemplate, Entry, ListView}; +use gtk4 as gtk; +use gtk::prelude::*; +use gtk::subclass::prelude::*; use once_cell::sync::OnceCell; // Object holding the state @@ -34,6 +33,7 @@ impl ObjectSubclass for Window { obj.init_template(); } } + // Trait shared by all GObjects impl ObjectImpl for Window { fn constructed(&self, obj: &Self::Type) { @@ -46,6 +46,7 @@ impl ObjectImpl for Window { obj.setup_factory(); } } + // Trait shared by all widgets impl WidgetImpl for Window {} diff --git a/examples/launcher/window/mod.rs b/examples/launcher/window/mod.rs index c05a9d10..e81ca1ce 100644 --- a/examples/launcher/window/mod.rs +++ b/examples/launcher/window/mod.rs @@ -1,24 +1,25 @@ -mod imp; -use crate::search_result_row::SearchResultRow; -use crate::SearchResultObject; -use crate::TX; -use crate::X11_CONN; use gdk4::Rectangle; use gdk4_x11::X11Display; use gdk4_x11::X11Surface; use glib::Object; -use gtk::prelude::*; -use gtk::subclass::prelude::*; use gtk::{gio, glib}; use gtk::{Application, SignalListItemFactory}; use gtk4 as gtk; -use libcosmic::x; +use gtk::prelude::*; +use gtk::subclass::prelude::*; use postage::prelude::Sink; use x11rb::connection::Connection; use x11rb::protocol::xproto; -use x11rb::protocol::xproto::ConnectionExt as OtherConnectionExt; -use x11rb::protocol::xproto::*; -use x11rb::wrapper::ConnectionExt; +use x11rb::protocol::xproto::ConnectionExt; + +use libcosmic::x; + +use crate::search_result_row::SearchResultRow; +use crate::SearchResultObject; +use crate::TX; +use crate::X11_CONN; + +mod imp; glib::wrapper! { pub struct Window(ObjectSubclass) @@ -143,16 +144,15 @@ impl Window { // ignore all x11 errors... let xdisplay = display.clone().downcast::().expect("Failed to downgrade X11 Display."); xdisplay.error_trap_push(); - let conn = X11_CONN.get().expect("Failed to get X11 connection"); - let window_type_atom = conn.intern_atom(false, b"_NET_WM_WINDOW_TYPE").unwrap().reply().unwrap().atom; - let dock_type_atom = conn.intern_atom(false, b"_NET_WM_WINDOW_TYPE_DIALOG").unwrap().reply().unwrap().atom; - conn.change_property32( - PropMode::REPLACE, - surface.xid().try_into().unwrap(), - window_type_atom, - AtomEnum::ATOM, - &[dock_type_atom] - ).unwrap(); + unsafe { + x::change_property( + &display, + &surface, + "_NET_WM_WINDOW_TYPE", + x::PropMode::Replace, + &[x::Atom::new(&display, "_NET_WM_WINDOW_TYPE_DIALOG").unwrap()], + ); + } let resize = glib::clone!(@weak window => move || { let s = window.surface().expect("Failed to get Surface for Window"); let height = window.height(); diff --git a/examples/launcher/window/window.ui b/examples/launcher/window/window.ui index e8e1be1e..9f2e46ca 100644 --- a/examples/launcher/window/window.ui +++ b/examples/launcher/window/window.ui @@ -1,26 +1,26 @@ -