From 843fba67b1f5bcfab0ac44f6f55f0793b12f7bee Mon Sep 17 00:00:00 2001 From: Ian Douglas Scott Date: Thu, 26 Aug 2021 13:50:54 -0700 Subject: [PATCH] Add `StatusArea` widget A palceholder, for now. --- src/main.rs | 1 + src/status_area.rs | 56 ++++++++++++++++++++++++++++++++++++++++++++++ src/window.rs | 2 ++ 3 files changed, 59 insertions(+) create mode 100644 src/status_area.rs diff --git a/src/main.rs b/src/main.rs index 1b8b2cc3..73e5cce8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,6 +2,7 @@ use gtk4::{gdk, glib, prelude::*}; mod deref_cell; mod mpris; +mod status_area; mod time_button; mod window; mod x; diff --git a/src/status_area.rs b/src/status_area.rs new file mode 100644 index 00000000..2072eb35 --- /dev/null +++ b/src/status_area.rs @@ -0,0 +1,56 @@ +use cascade::cascade; +use gtk4::{ + glib, + prelude::*, + subclass::prelude::*, +}; + +use crate::deref_cell::DerefCell; + +#[derive(Default)] +pub struct StatusAreaInner { + box_: DerefCell, +} + +#[glib::object_subclass] +impl ObjectSubclass for StatusAreaInner { + const NAME: &'static str = "S76StatusArea"; + type ParentType = gtk4::Widget; + type Type = StatusArea; + + fn class_init(klass: &mut Self::Class) { + klass.set_layout_manager_type::(); + } +} + +impl ObjectImpl for StatusAreaInner { + fn constructed(&self, obj: &StatusArea) { + let box_ = cascade! { + gtk4::Box::new(gtk4::Orientation::Horizontal, 0); + ..set_parent(obj); + }; + + self.box_.set(box_); + } + + fn dispose(&self, _obj: &StatusArea) { + self.box_.unparent(); + } +} + +impl WidgetImpl for StatusAreaInner {} + +glib::wrapper! { + pub struct StatusArea(ObjectSubclass) + @extends gtk4::Widget; +} + +impl StatusArea { + pub fn new() -> Self { + glib::Object::new(&[]).unwrap() + } + + fn inner(&self) -> &StatusAreaInner { + StatusAreaInner::from_instance(self) + } +} diff --git a/src/window.rs b/src/window.rs index b9f0d7e3..719cc4fe 100644 --- a/src/window.rs +++ b/src/window.rs @@ -2,6 +2,7 @@ use cascade::cascade; use glib::clone; use gtk4::{gdk, glib, prelude::*}; +use crate::status_area::StatusArea; use crate::time_button::TimeButton; use crate::x; @@ -14,6 +15,7 @@ pub fn window(monitor: gdk::Monitor) -> gtk4::Window { ..append(>k4::Button::with_label("Applications")); })); ..set_center_widget(Some(&TimeButton::new())); + ..set_end_widget(Some(&StatusArea::new())); }; let window = cascade! {