From 6a479899adf07c63a69a3c3f37e354eb147ec03f Mon Sep 17 00:00:00 2001 From: Ashley Wulber Date: Mon, 20 Dec 2021 23:52:59 -0500 Subject: [PATCH] add active list to dock object --- Cargo.toml | 4 +- examples/app_library/window/.#mod.rs | 1 - examples/appinfo/main.rs | 19 ++ examples/dock/.main.rs.swp | Bin 16384 -> 0 bytes examples/dock/dock_item/mod.rs | 123 ++++----- examples/dock/dock_object/imp.rs | 79 ++++++ examples/dock/dock_object/mod.rs | 51 ++++ examples/dock/main.rs | 7 + examples/dock/utils.rs | 4 +- examples/dock/window/mod.rs | 46 ++-- examples/gtklauncher/README.md | 5 - .../application_row/application_row.ui | 53 ---- examples/gtklauncher/application_row/imp.rs | 38 --- examples/gtklauncher/application_row/mod.rs | 39 --- examples/gtklauncher/main.rs | 34 --- examples/gtklauncher/screenshot.png | Bin 88448 -> 0 bytes examples/gtklauncher/style.css | 15 -- examples/gtklauncher/window/imp.rs | 56 ---- examples/gtklauncher/window/mod.rs | 245 ------------------ examples/gtklauncher/window/window.ui | 32 --- 20 files changed, 250 insertions(+), 601 deletions(-) delete mode 120000 examples/app_library/window/.#mod.rs create mode 100644 examples/appinfo/main.rs delete mode 100644 examples/dock/.main.rs.swp create mode 100644 examples/dock/dock_object/imp.rs create mode 100644 examples/dock/dock_object/mod.rs delete mode 100644 examples/gtklauncher/README.md delete mode 100644 examples/gtklauncher/application_row/application_row.ui delete mode 100644 examples/gtklauncher/application_row/imp.rs delete mode 100644 examples/gtklauncher/application_row/mod.rs delete mode 100644 examples/gtklauncher/main.rs delete mode 100644 examples/gtklauncher/screenshot.png delete mode 100644 examples/gtklauncher/style.css delete mode 100644 examples/gtklauncher/window/imp.rs delete mode 100644 examples/gtklauncher/window/mod.rs delete mode 100644 examples/gtklauncher/window/window.ui diff --git a/Cargo.toml b/Cargo.toml index 15a9b333..8a7fc56b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,9 +12,9 @@ x11 = { version = "2", features = ["xlib"] } # examples/launcher #pop-launcher = "1.0.3" -pop-launcher = { git = "https://github.com/pop-os/launcher", branch = "master" } +pop-launcher = { path = "../launcher" } serde_json = "1.0.72" -pop-launcher-service = { git = "https://github.com/pop-os/launcher", branch = "master" } +pop-launcher-service = { path = "../launcher/service" } postage = "0.4.1" futures = "0.3.17" glib = "0.14.8" diff --git a/examples/app_library/window/.#mod.rs b/examples/app_library/window/.#mod.rs deleted file mode 120000 index 46713fb8..00000000 --- a/examples/app_library/window/.#mod.rs +++ /dev/null @@ -1 +0,0 @@ -ashleywulber@pop-os.146928:1639590163 \ No newline at end of file diff --git a/examples/appinfo/main.rs b/examples/appinfo/main.rs new file mode 100644 index 00000000..df98f58d --- /dev/null +++ b/examples/appinfo/main.rs @@ -0,0 +1,19 @@ +use gio::DesktopAppInfo; +use glib::prelude::*; +use glib::subclass; +use glib::subclass::prelude::*; + +#[derive(Clone, Debug, PartialEq, Eq, glib::GBoxed)] +#[gboxed(type_name = "MyBoxed")] +struct MyBoxed(DesktopAppInfo); + +pub fn main() { + let appinfo = DesktopAppInfo::new("firefox.desktop").expect("failed to get app info"); + assert!(MyBoxed::static_type().is_valid()); + + let b = MyBoxed(appinfo); + let v = b.to_value(); + let b2 = v.get::<&MyBoxed>().unwrap(); + assert_eq!(&b, b2); + dbg!(&b2.0.filename()); +} diff --git a/examples/dock/.main.rs.swp b/examples/dock/.main.rs.swp deleted file mode 100644 index 746472810708cd5f71f92bf56d8fa7c4579589b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 zcmYc?2=nw+u+TGNU|?VnU|=XbvM2GzRw0JS3rq}&#ThxNmF1;5NvTC3XFpu{oKUNJiQ_!j6@hd${G!U z(Gb8L0;MHsx)!_)#zuw)AVtbbiVDI)p&;fc9u0xf5Eu=C(GVC7fzc2c4S~@R7!85Z z5EvmLP*T9eP|v`?zy$SgDU@bJqnV+6MJQbkrD5uz+)-*Y1V%$(Gz3ONU^E0qLtr!n zMnhmU1V%$(Gz3ONU^E0qLtqewKw=65LoNdYLo8?jK!AY(*8hLO&%kh#pMl{VKLf)d zeg=kv{0t21_!$_c@-r~h^D{8y@iQ=l^D{8m^D{6g@G~&T^D{6A@-r|n@iQ>I-Q4_*d_L%a+Ot-K5jExZg2ro0Rc zO1umVuXq?3cJeSVtmk21$md~TQ08G^kmO-t;NoFmxX;bNaFv^Z;XF43!&zxVA#aPz)-=(z!1U3z+lA1 z!0?lkfngsf1H%?h28K193=FF|85rhqGBC{HWMG)h$-q#|$-ofL$-p4V$-uzG$-r=z zgMp!rgMp!fgMp!pgMp!xgMlHHgMq=2gMopIgMr}!I|IXcb_Rxp>UP@|(rh=`VLNx<6BWkgVf>h?DmMFw4*ec{CmgXgA zq!#HFr{<+-6yz7g!$hpCf>H}hQ;SQitb$V$i;^=mioukore0!sVrGdoRJ=9xmgmLiTQXe1U_<|QlS=9i@^R5QSRP@b8W zl3%V@oRMFyp^5Mq$ORB71zUx1uo^3?ywq}y#DW4OWwi($pr9=-NwKmjD9TSxEiSgQ zO0CE&(J(|(4N_82l$lqOlc%Vml$My8lbWJXlCMylTA~nPXc+J8@8_qd;98Mcl9`vT zgrqSu4Iy8gTB4DhpO>epmsuR2T2!Q=i4+(hXM<&R6yl4Mi&9hb;`2&#K>=7{XjqhF zWd+iinp~pcm!Frash3(&0OBaQ!JPt?2e~Q&vGNk1x zfR>JdlM(}@pQSK#+f!r;BS)d_a(=e~@QLWV~ZQfRCrMV~D4}pAOu~ zY6V64Wtl0dMMy#}nZ*S;iIvE?6PEm3i;D7#6f*NNOEMF4GOIH4(iPl8ycL{-gB4%~ z=_zSK%nB~4%t?jk^u&~uc$kv-wEUv@6o@SvV5jKoD>$a4D3oNR!p#9CY!Dw>L?}Qq z38XlH8Kjp3io>*`{M`7I#F9jf%)I2B(v;Nrq{@=iVnq$5VvrN`l8cL#V2KM9$}rsu zwhGS0#R1R&fD{_gz|_}Q@X1evI4HTeSRoBm)+OepC?uw&C}ftv+y*lV6fIzHLtF-0fe8vJ08WP;lmplS|LHz2AhXh8@{rm(s2Dunki7|N&_JS7Q-`6TG)W;fuQXQyY#+h`M6y7zKz_~$QmP-aT zWuT(4LI&g(aH9y-XP(LVdBORmMW9IZ&CE>&RsV1kHPKp#_*@0D7~(UqEg(OVV6`78 zNFaI;0Rd^}6@y);Pz_1}U`rqZ8X&fnf*QDb@ytz3Pt{R?$XF?;`4@mHHyd1DwF77L z;*!LY%w%}e$V$OKFFDmYH7Ca=sI<7mIX^EiH5p`#oq{b~3SJ;XHHSnXX@j&$pa~JH zuH^i@;t~bS0?|sL)Iz~l!O*~(fdQ0vi&JybtgIj{NGmHy1JW8v2Dt{$Ps&P72DR-G zm9sxs2x=Cz=~h%)ToMn>gPHkxR#vE5rvA zfG7gT61t&aK~Qmoq$WKxAL{P>yyVpQVPFX3VPJU8&A@Py zn}K0HHv>ZpHv_{*E(V4=E(V53E(V5+oD2-xIT;uhaxyUVb22bAaxyTKaWXLEaWXLE zaxyT)aYEb^4RRAL`l_R5j)uT!2#kinXb6mkz-S1Jh5(I10MbbT4I&hk=7Gk&z=H}X zJ$T6A7N|!A!VnE077SyGfMl?X;+Fx*f-rOpMMEt*R!0HcK~jUX9`#^DPMV-$Ip`QV zsGSZPi`LN8#MYCB^pL>=Q%H?VJyMK^CLqT7}e{ z;#7sqH1OOBYPT6SBw}R+jU-oasN?oK$nf0!l++x(V$e8qs)m7%0+=74lbWZapq7_f z9$%DNT$)o-9IdAZ8?OWD!iDvc^K)`QQw>N%TsYO{CKhPaK+LZJB~jQ=H>6VxNm>wT zO})~ByauHtr7LQvK~)k6P>`kY zs8g_oM5A6FxOZC&DqHad1zfX&EwrnwSDaXuni3DnSzuG~nLr>dh8CoN<}qR3fMqwN tky2!*fye3)!+7wCLD2Lk*1*DD)`NTn8t{dbcLe4?;iHa_`BwNaFaYgWWXJ#j diff --git a/examples/dock/dock_item/mod.rs b/examples/dock/dock_item/mod.rs index 35451dba..f8ad14ac 100644 --- a/examples/dock/dock_item/mod.rs +++ b/examples/dock/dock_item/mod.rs @@ -1,5 +1,6 @@ use gdk4::ContentProvider; use gdk4::Display; +use gio::DesktopAppInfo; use gio::Icon; use gio::ListStore; use gtk4 as gtk; @@ -11,6 +12,8 @@ use gtk::glib; use gtk::prelude::*; use gtk::subclass::prelude::*; +use crate::dock_object::DockObject; + glib::wrapper! { pub struct DockItem(ObjectSubclass) @extends gtk::Widget, gtk::Box; @@ -47,70 +50,72 @@ impl DockItem { // TODO current method seems very messy... // refactor to emit event for removing the item? - pub fn set_app_info( - &self, - app_info: &gio::DesktopAppInfo, - i: u32, - saved_app_model: &ListStore, - ) { - dbg!("setting app info"); - let self_ = imp::DockItem::from_instance(self); - self_.image.set_tooltip_text(Some(&app_info.name())); + pub fn set_app_info(&self, app_info: &DockObject, i: u32, saved_app_model: &ListStore) { + if let Ok(app_info_value) = app_info.property("appinfo") { + if let Ok(Some(app_info)) = app_info_value.get::>() { + dbg!("setting app info"); + let self_ = imp::DockItem::from_instance(self); + self_.image.set_tooltip_text(Some(&app_info.name())); - if let Some(drag_controller) = self_.drag_controller.get() { - if let Some(file) = app_info.filename() { - let provider = ContentProvider::for_value(&file.to_string_lossy().to_value()); - drag_controller.set_content(Some(&provider)); - } - drag_controller.connect_drag_end(move |_self, _drag, delete_data| { - dbg!("removing", delete_data); - }); - //TODO investigate X11 errors when reordering dock items - drag_controller.connect_drag_cancel( - glib::clone!(@weak saved_app_model => @default-return true, move |_self, _drag, _delete_data| { - dbg!("removing {}", i); - if saved_app_model.n_items() > i { - saved_app_model.remove(i); + if let Some(drag_controller) = self_.drag_controller.get() { + if let Some(file) = app_info.filename() { + let provider = + ContentProvider::for_value(&file.to_string_lossy().to_value()); + drag_controller.set_content(Some(&provider)); } - true - }), - ); - drag_controller.connect_drag_end( - glib::clone!(@weak saved_app_model => move |_self, _drag, delete_data| { - dbg!("removing {}", i); - if delete_data && saved_app_model.n_items() > i { - saved_app_model.remove(i); - } - }), - ); + drag_controller.connect_drag_end(move |_self, _drag, delete_data| { + dbg!("removing", delete_data); + }); + //TODO investigate rare X11 errors when reordering dock items + drag_controller.connect_drag_cancel( + glib::clone!(@weak saved_app_model => @default-return true, move |_self, _drag, _delete_data| { + dbg!("removing {}", i); + if saved_app_model.n_items() > i { + saved_app_model.remove(i); + } + true + }), + ); + drag_controller.connect_drag_end( + glib::clone!(@weak saved_app_model => move |_self, _drag, delete_data| { + dbg!("removing {}", i); + if delete_data && saved_app_model.n_items() > i { + saved_app_model.remove(i); + } + }), + ); - let icon = app_info - .icon() - .unwrap_or(Icon::for_string("image-missing").expect("Failed to set default icon")); - drag_controller.connect_drag_begin(glib::clone!(@weak icon, => move |_self, _drag| { - // set drag source icon if possible... - // gio Icon is not easily converted to a Paintable, but this seems to be the correct method - if let Some(default_display) = &Display::default() { - if let Some(icon_theme) = IconTheme::for_display(default_display) { - if let Some(paintable_icon) = icon_theme.lookup_by_gicon( - &icon, - 64, - 1, - gtk4::TextDirection::None, - gtk4::IconLookupFlags::empty(), - ) { - _self.set_icon(Some(&paintable_icon), 32, 32); - } - } + let icon = app_info.icon().unwrap_or( + Icon::for_string("image-missing").expect("Failed to set default icon"), + ); + drag_controller.connect_drag_begin( + glib::clone!(@weak icon, => move |_self, _drag| { + // set drag source icon if possible... + // gio Icon is not easily converted to a Paintable, but this seems to be the correct method + if let Some(default_display) = &Display::default() { + if let Some(icon_theme) = IconTheme::for_display(default_display) { + if let Some(paintable_icon) = icon_theme.lookup_by_gicon( + &icon, + 64, + 1, + gtk4::TextDirection::None, + gtk4::IconLookupFlags::empty(), + ) { + _self.set_icon(Some(&paintable_icon), 32, 32); + } + } + } + }), + ); } - })); + + let icon = app_info.icon().unwrap_or( + Icon::for_string("image-missing").expect("Failed to set default icon"), + ); + + self_.image.set_from_gicon(&icon); + } } - - let icon = app_info - .icon() - .unwrap_or(Icon::for_string("image-missing").expect("Failed to set default icon")); - - self_.image.set_from_gicon(&icon); } // pub fn set_app_info(&self, app_obj: ApplicationObject) { diff --git a/examples/dock/dock_object/imp.rs b/examples/dock/dock_object/imp.rs new file mode 100644 index 00000000..e920c824 --- /dev/null +++ b/examples/dock/dock_object/imp.rs @@ -0,0 +1,79 @@ +use crate::utils::BoxedSearchResults; +use gio::DesktopAppInfo; +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; + +// Object holding the state +#[derive(Default)] +pub struct DockObject { + appinfo: RefCell>, + active: RefCell, +} + +// The central trait for subclassing a GObject +#[glib::object_subclass] +impl ObjectSubclass for DockObject { + const NAME: &'static str = "DockObject"; + type Type = super::DockObject; + type ParentType = glib::Object; +} + +// Trait shared by all GObjects +impl ObjectImpl for DockObject { + fn properties() -> &'static [ParamSpec] { + static PROPERTIES: Lazy> = Lazy::new(|| { + vec![ + ParamSpec::new_object( + // Name + "appinfo", + // Nickname + "appinfo", + // Short description + "app info", + DesktopAppInfo::static_type(), + // The property can be read and written to + ParamFlags::READWRITE, + ), + ParamSpec::new_boxed( + // Name + "active", + // Nickname + "active", + // Short description + "active", + BoxedSearchResults::static_type(), + // The property can be read and written to + ParamFlags::READWRITE, + ), + ] + }); + PROPERTIES.as_ref() + } + + fn set_property(&self, _obj: &Self::Type, _id: usize, value: &Value, pspec: &ParamSpec) { + match pspec.name() { + "appinfo" => { + let appinfo = value + .get() + .expect("Value needs to be Option"); + self.appinfo.replace(appinfo); + } + "active" => { + let active = value.get().expect("Value needs to be BoxedSearchResults"); + self.active.replace(active); + } + _ => unimplemented!(), + } + } + + fn property(&self, _obj: &Self::Type, _id: usize, pspec: &ParamSpec) -> Value { + match pspec.name() { + "appinfo" => self.appinfo.borrow().to_value(), + _ => unimplemented!(), + } + } +} diff --git a/examples/dock/dock_object/mod.rs b/examples/dock/dock_object/mod.rs new file mode 100644 index 00000000..7dfa78e3 --- /dev/null +++ b/examples/dock/dock_object/mod.rs @@ -0,0 +1,51 @@ +mod imp; + +use crate::utils::BoxedSearchResults; +use gdk4::glib::Object; +use gio::DesktopAppInfo; +use gtk4::glib; +use gtk4::prelude::AppInfoExt; + +glib::wrapper! { + pub struct DockObject(ObjectSubclass); +} + +impl DockObject { + pub fn new(appinfo: DesktopAppInfo) -> Self { + Object::new(&[("appinfo", &Some(appinfo))]).expect("Failed to create `DockObject`.") + } + + pub fn from_search_results(results: BoxedSearchResults) -> Self { + let appinfo = xdg::BaseDirectories::new() + .expect("could not access XDG Base directory") + .get_data_dirs() + .iter_mut() + .filter_map(|xdg_data_path| { + let defaults = ["Firefox Web Browser", "Files", "Terminal", "Pop!_Shop"]; + xdg_data_path.push("applications"); + dbg!(&xdg_data_path); + std::fs::read_dir(xdg_data_path).ok() + }) + .flatten() + .filter_map(|dir_entry| { + let defaults = ["Firefox Web Browser", "Files", "Terminal", "Pop!_Shop"]; + if let Ok(dir_entry) = dir_entry { + if let Some(path) = dir_entry.path().file_name() { + if let Some(path) = path.to_str() { + if let Some(app_info) = gio::DesktopAppInfo::new(path) { + if app_info.should_show() + && defaults.contains(&app_info.name().as_str()) + { + return Some(DockObject::new(app_info)); + } + } + } + } + } + None + }) + .next(); + Object::new(&[("appinfo", &appinfo), ("active", &results)]) + .expect("Failed to create `DockObject`.") + } +} diff --git a/examples/dock/main.rs b/examples/dock/main.rs index 46f6b18a..4ef52ead 100644 --- a/examples/dock/main.rs +++ b/examples/dock/main.rs @@ -1,5 +1,6 @@ mod application_object; mod dock_item; +mod dock_object; mod utils; mod window; @@ -70,6 +71,7 @@ fn load_css() { } fn main() { + assert!(utils::BoxedSearchResults::static_type().is_valid()); let app = gtk::Application::builder() .application_id("com.cosmic.Launcher") .build(); @@ -78,7 +80,12 @@ fn main() { setup_shortcuts(app); load_css() }); + + // TODO investigate multiple signals to connect_activate + // crashes when called twice bc of singleton app.connect_activate(move |app| { + // Seems that over a long period of time, this might be called multiple times + // The global variables should be initialized outside this closure let (tx, mut rx) = postage::mpsc::channel(1); let mut launcher = spawn_launcher(tx.clone()); if TX.set(tx).is_err() { diff --git a/examples/dock/utils.rs b/examples/dock/utils.rs index 8b137891..cc87d10f 100644 --- a/examples/dock/utils.rs +++ b/examples/dock/utils.rs @@ -1 +1,3 @@ - +#[derive(Clone, Debug, Default, glib::GBoxed)] +#[gboxed(type_name = "BoxedLauncherActive")] +pub struct BoxedSearchResults(pub Vec); diff --git a/examples/dock/window/mod.rs b/examples/dock/window/mod.rs index b91c9a40..4dbdd320 100644 --- a/examples/dock/window/mod.rs +++ b/examples/dock/window/mod.rs @@ -1,6 +1,7 @@ mod imp; // use crate::ApplicationObject; use crate::dock_item::DockItem; +use crate::dock_object::DockObject; use crate::X11_CONN; use gdk4::Rectangle; use gdk4::Surface; @@ -49,7 +50,7 @@ impl Window { // Get state and set model let imp = imp::Window::from_instance(self); - let saved_app_model = gio::ListStore::new(DesktopAppInfo::static_type()); + let saved_app_model = gio::ListStore::new(DockObject::static_type()); let selection_model = gtk::SingleSelection::builder() .autoselect(false) @@ -74,8 +75,7 @@ impl Window { if app_info.should_show() && defaults.contains(&app_info.name().as_str()) { - dbg!(app_info.name()); - saved_app_model.append(&app_info) + saved_app_model.append(&DockObject::new(app_info)); } else { // println!("Ignoring {}", path); } @@ -118,17 +118,19 @@ impl Window { println!("selected app {}", position); // Launch the application when an item of the list is activated if let Some(item) = model.item(position) { - let app_info = item.downcast::().unwrap(); - let context = window.display().app_launch_context(); - if let Err(err) = app_info.launch(&[], Some(&context)) { - gtk::MessageDialog::builder() - .text(&format!("Failed to start {}", app_info.name())) - .secondary_text(&err.to_string()) - .message_type(gtk::MessageType::Error) - .modal(true) - .transient_for(&window) - .build() - .show(); + let app_info = item.downcast::().expect("App model must only contain DockObject"); + if let Ok(Some(app_info)) = app_info.property("appinfo").expect("DockObject must have appinfo property").get::>() { + let context = window.display().app_launch_context(); + if let Err(err) = app_info.launch(&[], Some(&context)) { + gtk::MessageDialog::builder() + .text(&format!("Failed to start {}", app_info.name())) + .secondary_text(&err.to_string()) + .message_type(gtk::MessageType::Error) + .modal(true) + .transient_for(&window) + .build() + .show(); + } } } }), @@ -239,10 +241,12 @@ impl Window { let mut i: u32 = 0; let mut index_of_existing_app: Option = None; while let Some(item) = saved_app_model.item(i) { - if let Ok(cur_app_info) = item.downcast::() { - dbg!(cur_app_info.filename()); - if cur_app_info.filename() == Some(Path::new(&path_str).to_path_buf()) { - index_of_existing_app = Some(i); + if let Ok(cur_app_info) = item.downcast::() { + if let Ok(Some(cur_app_info)) = cur_app_info.property("appinfo").expect("property appinfo missing from DockObject").get::>() { + dbg!(cur_app_info.filename()); + if cur_app_info.filename() == Some(Path::new(&path_str).to_path_buf()) { + index_of_existing_app = Some(i); + } } } i += 1; @@ -274,7 +278,7 @@ impl Window { dbg!(index); dbg!("dropped it!"); dbg!(drop_value.type_()); - saved_app_model.insert(index, &app_info); + saved_app_model.insert(index, &DockObject::new(app_info)); } } } @@ -356,8 +360,8 @@ impl Window { let application_object = list_item .item() .expect("The item has to exist.") - .downcast::() - .expect("The item has to be a `DesktopAppInfo`"); + .downcast::() + .expect("The item has to be a `DockObject`"); let dock_item = list_item .child() .expect("The list item child needs to exist.") diff --git a/examples/gtklauncher/README.md b/examples/gtklauncher/README.md deleted file mode 100644 index f2a64530..00000000 --- a/examples/gtklauncher/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# ListView: Applications Launcher - -This example shows how to create a `gtk::ListView` and fill it with applications data from `gio::AppInfo` with the possibility to open an application when an item of the list is activated. - -![Screenshot](screenshot.png) diff --git a/examples/gtklauncher/application_row/application_row.ui b/examples/gtklauncher/application_row/application_row.ui deleted file mode 100644 index a70d7958..00000000 --- a/examples/gtklauncher/application_row/application_row.ui +++ /dev/null @@ -1,53 +0,0 @@ - - - - diff --git a/examples/gtklauncher/application_row/imp.rs b/examples/gtklauncher/application_row/imp.rs deleted file mode 100644 index f27eb54e..00000000 --- a/examples/gtklauncher/application_row/imp.rs +++ /dev/null @@ -1,38 +0,0 @@ -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")] -pub struct ApplicationRow { - #[template_child] - pub name: TemplateChild, - #[template_child] - pub description: TemplateChild, - #[template_child] - pub shortcut: TemplateChild, - #[template_child] - pub image: TemplateChild, -} - -#[glib::object_subclass] -impl ObjectSubclass for ApplicationRow { - const NAME: &'static str = "ApplicationRow"; - type Type = super::ApplicationRow; - type ParentType = gtk::Box; - - fn class_init(klass: &mut Self::Class) { - Self::bind_template(klass); - } - - fn instance_init(obj: &glib::subclass::InitializingObject) { - obj.init_template(); - } -} - -impl ObjectImpl for ApplicationRow {} -impl WidgetImpl for ApplicationRow {} -impl BoxImpl for ApplicationRow {} diff --git a/examples/gtklauncher/application_row/mod.rs b/examples/gtklauncher/application_row/mod.rs deleted file mode 100644 index 8054c928..00000000 --- a/examples/gtklauncher/application_row/mod.rs +++ /dev/null @@ -1,39 +0,0 @@ -use gtk4 as gtk; -mod imp; - -use gtk::prelude::*; -use gtk::subclass::prelude::*; -use gtk::{gio, glib}; - -glib::wrapper! { - pub struct ApplicationRow(ObjectSubclass) - @extends gtk::Widget, gtk::Box; -} - -impl Default for ApplicationRow { - fn default() -> Self { - Self::new() - } -} - -impl ApplicationRow { - pub fn new() -> Self { - glib::Object::new(&[]).expect("Failed to create ApplicationRow") - } - - pub fn set_app_info(&self, app_info: &gio::AppInfo) { - let self_ = imp::ApplicationRow::from_instance(self); - self_.name.set_text(&app_info.name()); - if let Some(desc) = app_info.description() { - self_.description.set_text(&desc); - } - if let Some(icon) = app_info.icon() { - self_.image.set_from_gicon(&icon); - } - } - - pub fn set_shortcut(&self, indx: u32) { - let self_ = imp::ApplicationRow::from_instance(self); - self_.shortcut.set_text(&format!("Ctrl + {}", indx)); - } -} diff --git a/examples/gtklauncher/main.rs b/examples/gtklauncher/main.rs deleted file mode 100644 index 584e1897..00000000 --- a/examples/gtklauncher/main.rs +++ /dev/null @@ -1,34 +0,0 @@ -mod application_row; -mod window; - -use gtk::gdk::Display; -use gtk::prelude::*; -use gtk4 as gtk; - -use window::Window; - -fn main() { - let application = gtk::Application::new( - Some("com.github.gtk-rs.examples.apps_launcher"), - Default::default(), - ); - - application.connect_activate(|app| { - let provider = gtk::CssProvider::new(); - provider.load_from_data(include_bytes!("style.css")); - gtk::StyleContext::add_provider_for_display( - &Display::default().expect("Error initializing gtk css provider."), - &provider, - gtk::STYLE_PROVIDER_PRIORITY_APPLICATION, - ); - new_build_ui(app); - }); - - application.run(); -} - -fn new_build_ui(app: >k::Application) { - // Create a new custom window and show it - let window = Window::new(app); - window.show(); -} diff --git a/examples/gtklauncher/screenshot.png b/examples/gtklauncher/screenshot.png deleted file mode 100644 index 8ffcefa1d834832571b35e46610d2d8eed942c0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88448 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

2W(vJY9WZogF2 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 diff --git a/examples/gtklauncher/style.css b/examples/gtklauncher/style.css deleted file mode 100644 index 0c72f8a3..00000000 --- a/examples/gtklauncher/style.css +++ /dev/null @@ -1,15 +0,0 @@ -description { - line-height: 1.5em; - background-image: none; - background-color: red; -} - -row.row1 { - background-image: none; - background-color: black; -} - -shortcut { - background-image: none; - background-color: green; -} diff --git a/examples/gtklauncher/window/imp.rs b/examples/gtklauncher/window/imp.rs deleted file mode 100644 index 901181cf..00000000 --- a/examples/gtklauncher/window/imp.rs +++ /dev/null @@ -1,56 +0,0 @@ -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 once_cell::sync::OnceCell; - -// Object holding the state -#[derive(CompositeTemplate, Default)] -#[template(file = "window.ui")] -pub struct Window { - #[template_child] - pub entry: TemplateChild, - #[template_child] - pub list_view: TemplateChild, - pub model: OnceCell, -} - -// 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 = "LauncherWindow"; - type Type = super::Window; - type ParentType = gtk::ApplicationWindow; - - fn class_init(klass: &mut Self::Class) { - Self::bind_template(klass); - } - - fn instance_init(obj: &InitializingObject) { - obj.init_template(); - } -} -// Trait shared by all GObjects -impl ObjectImpl for Window { - fn constructed(&self, obj: &Self::Type) { - // Call "constructed" on parent - self.parent_constructed(obj); - - // Setup - obj.setup_model(); - obj.setup_callbacks(); - obj.setup_factory(); - } -} -// 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 {} diff --git a/examples/gtklauncher/window/mod.rs b/examples/gtklauncher/window/mod.rs deleted file mode 100644 index b5a530cb..00000000 --- a/examples/gtklauncher/window/mod.rs +++ /dev/null @@ -1,245 +0,0 @@ -mod imp; -use gtk4 as gtk; - -use crate::application_row::ApplicationRow; -use glib::Object; -use gtk::prelude::*; -use gtk::subclass::prelude::*; -use gtk::{gio, glib}; -use gtk::{Application, SignalListItemFactory}; - -use libcosmic::x; - -glib::wrapper! { - pub struct Window(ObjectSubclass) - @extends gtk::ApplicationWindow, gtk::Window, gtk::Widget, - @implements gio::ActionGroup, gio::ActionMap, gtk::Accessible, gtk::Buildable, - gtk::ConstraintTarget, gtk::Native, gtk::Root, gtk::ShortcutManager; -} - -impl Window { - pub fn new(app: &Application) -> Self { - //quit shortcut - app.set_accels_for_action("win.quit", &["W", "Escape"]); - //launch shortcuts - for i in 1..10 { - app.set_accels_for_action(&format!("win.launch{}", i), &[&format!("{}", i)]); - } - Object::new(&[("application", app)]).expect("Failed to create `Window`.") - } - - fn model(&self) -> &gio::ListStore { - // Get state - let imp = imp::Window::from_instance(self); - imp.model.get().expect("Could not get model") - } - - fn setup_model(&self) { - // Create new model - let model = gio::ListStore::new(gio::AppInfo::static_type()); - gio::AppInfo::all().iter().for_each(|app_info| { - model.append(app_info); - }); - - // Get state and set model - let imp = imp::Window::from_instance(self); - imp.model.set(model.clone()).expect("Could not set model"); - - // A sorter used to sort AppInfo in the model by their name - let sorter = gtk::CustomSorter::new(move |obj1, obj2| { - let app_info1 = obj1.downcast_ref::().unwrap(); - let app_info2 = obj2.downcast_ref::().unwrap(); - - app_info1 - .name() - .to_lowercase() - .cmp(&app_info2.name().to_lowercase()) - .into() - }); - let filter = gtk::CustomFilter::new(|_obj| true); - let filter_model = gtk::FilterListModel::new(Some(&model), Some(filter).as_ref()); - let sorted_model = gtk::SortListModel::new(Some(&filter_model), Some(&sorter)); - let slice_model = gtk::SliceListModel::new(Some(&sorted_model), 0, 9); - let selection_model = gtk::SingleSelection::new(Some(&slice_model)); - - // Wrap model with selection and pass it to the list view - imp.list_view.set_model(Some(&selection_model)); - } - - fn setup_callbacks(&self) { - // Get state - let imp = imp::Window::from_instance(self); - let window = self.clone().upcast::(); - let list_view = &imp.list_view; - let sorted_model = list_view - .model() - .expect("List view missing selection model") - .downcast::() - .expect("could not downcast listview model to single selection model") - .model() - .downcast::() - .expect("could not downcast single selection model to slice list model.") - .model() - .expect("sorted list model is missing from slice list model") - .downcast::() - .expect("sorted list model could not be downcast"); - let filter_model = sorted_model - .model() - .expect("missing model for sort list model.") - .downcast::() - .expect("could not downcast sort list model to filter list model"); - - let entry = &imp.entry; - let lv = list_view.get(); - for i in 1..10 { - let action_launchi = gio::SimpleAction::new(&format!("launch{}", i), None); - self.add_action(&action_launchi); - let context = list_view.display().app_launch_context().clone(); - let parent_window = list_view.root().unwrap().downcast::().unwrap(); - action_launchi.connect_activate(glib::clone!(@weak lv => move |_action, _parameter| { - let model = lv.model().unwrap(); - let app_info = model.item(i - 1); - if app_info.is_none() { - println!("oops no app for this row..."); - return; - } - let app_info = app_info.unwrap().downcast::().unwrap(); - if let Err(err) = app_info.launch(&[], Some(&context)) { - - gtk::MessageDialog::builder() - .text(&format!("Failed to start {}", app_info.name())) - .secondary_text(&err.to_string()) - .message_type(gtk::MessageType::Error) - .modal(true) - .transient_for(&parent_window) - .build() - .show(); - - println!("oops launch failed") - } - println!("{}", i-1); - })); - } - - // Launch the application when an item of the list is activated - list_view.connect_activate(move |list_view, position| { - let model = list_view.model().unwrap(); - let app_info = model - .item(position) - .unwrap() - .downcast::() - .unwrap(); - - let context = list_view.display().app_launch_context(); - if let Err(err) = app_info.launch(&[], Some(&context)) { - let parent_window = list_view.root().unwrap().downcast::().unwrap(); - - gtk::MessageDialog::builder() - .text(&format!("Failed to start {}", app_info.name())) - .secondary_text(&err.to_string()) - .message_type(gtk::MessageType::Error) - .modal(true) - .transient_for(&parent_window) - .build() - .show(); - } - }); - - entry.connect_changed( - glib::clone!(@weak filter_model, @weak sorted_model => move |search: >k::Entry| { - let search_text = search.text().to_string().to_lowercase(); - let new_filter: gtk::CustomFilter = gtk::CustomFilter::new(move |obj| { - let search_res = obj.downcast_ref::() - .expect("The Object needs to be of type AppInfo"); - search_res.name().to_string().to_lowercase().contains(&search_text) - }); - let search_text = search.text().to_string().to_lowercase(); - let new_sorter: gtk::CustomSorter = gtk::CustomSorter::new(move |obj1, obj2| { - let app_info1 = obj1.downcast_ref::().unwrap(); - let app_info2 = obj2.downcast_ref::().unwrap(); - if search_text == "" { - return app_info1 - .name() - .to_lowercase() - .cmp(&app_info2.name().to_lowercase()) - .into(); - } - - let i_1 = app_info1.name().to_lowercase().find(&search_text); - let i_2 = app_info2.name().to_lowercase().find(&search_text); - match (i_1, i_2) { - (Some(i_1), Some(i_2)) => i_1.cmp(&i_2).into(), - (Some(_), None) => std::cmp::Ordering::Less.into(), - (None, Some(_)) => std::cmp::Ordering::Greater.into(), - _ => app_info1 - .name() - .to_lowercase() - .cmp(&app_info2.name().to_lowercase()) - .into() - } - }); - - filter_model.set_filter(Some(new_filter).as_ref()); - sorted_model.set_sorter(Some(new_sorter).as_ref()); - }), - ); - - window.connect_realize(move |window| { - if let Some((display, surface)) = x::get_window_x11(window) { - unsafe { - x::change_property( - &display, - &surface, - "_NET_WM_WINDOW_TYPE", - x::PropMode::Replace, - &[x::Atom::new(&display, "_NET_WM_WINDOW_TYPE_DIALOG").unwrap()], - ); - } - } else { - println!("failed to get X11 window"); - } - }); - - let action_quit = gio::SimpleAction::new("quit", None); - action_quit.connect_activate(glib::clone!(@weak window => move |_, _| { - window.close(); - })); - self.add_action(&action_quit); - - window.connect_is_active_notify(|win| { - if !win.is_active() { - win.close(); - } - }); - } - - fn setup_factory(&self) { - let factory = SignalListItemFactory::new(); - factory.connect_setup(move |_factory, item| { - let row = ApplicationRow::new(); - item.set_child(Some(&row)); - }); - - // the bind stage is used for "binding" the data to the created widgets on the "setup" stage - factory.connect_bind(move |_factory, list_item| { - let app_info = list_item - .item() - .unwrap() - .downcast::() - .unwrap(); - - let child = list_item - .child() - .unwrap() - .downcast::() - .unwrap(); - child.set_app_info(&app_info); - if list_item.position() < 9 { - child.set_shortcut(list_item.position() + 1); - } - }); - // Set the factory of the list view - let imp = imp::Window::from_instance(self); - imp.list_view.set_factory(Some(&factory)); - } -} diff --git a/examples/gtklauncher/window/window.ui b/examples/gtklauncher/window/window.ui deleted file mode 100644 index 9ff6532d..00000000 --- a/examples/gtklauncher/window/window.ui +++ /dev/null @@ -1,32 +0,0 @@ - - - -