chore: add cosmic app list and cosmic panel buttons

This commit is contained in:
Ashley Wulber 2022-06-06 11:52:45 -04:00
parent 853caa5b84
commit 464338585c
No known key found for this signature in database
GPG key ID: BCD0B777C3F6E2FD
54 changed files with 3855 additions and 187 deletions

View file

@ -0,0 +1,32 @@
// SPDX-License-Identifier: MPL-2.0-only
use crate::apps_container::AppsContainer;
use gtk4::{glib, subclass::prelude::*};
use once_cell::sync::OnceCell;
// Object holding the state
#[derive(Default)]
pub struct CosmicAppListWindow {
pub(super) inner: OnceCell<AppsContainer>,
}
// The central trait for subclassing a GObject
#[glib::object_subclass]
impl ObjectSubclass for CosmicAppListWindow {
// `NAME` needs to match `class` attribute of template
const NAME: &'static str = "CosmicAppListWindow";
type Type = super::CosmicAppListWindow;
type ParentType = gtk4::ApplicationWindow;
}
// Trait shared by all GObjects
impl ObjectImpl for CosmicAppListWindow {}
// Trait shared by all widgets
impl WidgetImpl for CosmicAppListWindow {}
// Trait shared by all windows
impl WindowImpl for CosmicAppListWindow {}
// Trait shared by all application
impl ApplicationWindowImpl for CosmicAppListWindow {}

View file

@ -0,0 +1,56 @@
// SPDX-License-Identifier: MPL-2.0-only
use crate::{apps_container::AppsContainer, fl, Event};
use cascade::cascade;
use gtk4::{
gio,
glib::{self, Object},
prelude::*,
subclass::prelude::*,
};
use tokio::sync::mpsc;
mod imp;
glib::wrapper! {
pub struct CosmicAppListWindow(ObjectSubclass<imp::CosmicAppListWindow>)
@extends gtk4::ApplicationWindow, gtk4::Window, gtk4::Widget,
@implements gio::ActionGroup, gio::ActionMap, gtk4::Accessible, gtk4::Buildable,
gtk4::ConstraintTarget, gtk4::Native, gtk4::Root, gtk4::ShortcutManager;
}
impl CosmicAppListWindow {
pub fn new(app: &gtk4::Application, tx: mpsc::Sender<Event>) -> Self {
let self_: Self = Object::new(&[("application", app)])
.expect("Failed to create `CosmicAppListWindow`.");
let imp = imp::CosmicAppListWindow::from_instance(&self_);
cascade! {
&self_;
..set_width_request(1);
..set_height_request(1);
..set_decorated(false);
..set_resizable(false);
..set_title(Some(&fl!("cosmic-app-list")));
..add_css_class("transparent");
};
let app_list = AppsContainer::new(tx);
self_.set_child(Some(&app_list));
imp.inner.set(app_list).unwrap();
self_.setup_shortcuts();
self_
}
fn setup_shortcuts(&self) {
let window = self.clone().upcast::<gtk4::Window>();
let action_quit = gio::SimpleAction::new("quit", None);
action_quit.connect_activate(glib::clone!(@weak window => move |_, _| {
window.close();
if let Some(a) = window.application() { a.quit() }
std::process::exit(0);
}));
self.add_action(&action_quit);
}
}