From 4b942c1b92bff94b1e901b53decaa11ca61c1dc2 Mon Sep 17 00:00:00 2001 From: Ian Douglas Scott Date: Tue, 31 Aug 2021 16:39:10 -0700 Subject: [PATCH] Support panel at bottom Since there's no configuration to read, hardcoded constant for now. --- src/window.rs | 24 +++++++++++++++++++----- src/x.rs | 4 ++-- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/window.rs b/src/window.rs index c8d863da..cb2bfd92 100644 --- a/src/window.rs +++ b/src/window.rs @@ -8,6 +8,8 @@ use crate::status_area::StatusArea; use crate::time_button::TimeButton; use crate::x; +const BOTTOM: bool = false; + #[derive(Default)] pub struct PanelWindowInner { size: Cell>, @@ -127,25 +129,37 @@ impl PanelWindow { let geometry = self.inner().monitor.geometry(); self.set_size_request(geometry.width, 0); - let top = if let Some((_width, height)) = self.inner().size.get() { + let height = if let Some((_width, height)) = self.inner().size.get() { height as x::c_ulong } else { return; }; if let Some((display, surface)) = x::get_window_x11(self) { - let top_start_x = geometry.x as x::c_ulong; - let top_end_x = top_start_x + geometry.width as x::c_ulong - 1; + let start_x = geometry.x as x::c_ulong; + let end_x = start_x + geometry.width as x::c_ulong - 1; unsafe { - x::set_position(&display, &surface, top_start_x as _, 0); + let y = if BOTTOM { + geometry.height as x::c_int - height as x::c_int + } else { + 0 + }; + + x::set_position(&display, &surface, start_x as _, y); + + let strut = if BOTTOM { + [0, 0, 0, height, 0, 0, 0, 0, 0, 0, start_x, end_x] + } else { + [0, 0, height, 0, 0, 0, 0, 0, start_x, end_x, 0, 0] + }; x::change_property( &display, &surface, "_NET_WM_STRUT_PARTIAL", x::PropMode::Replace, - &[0, 0, top, 0, 0, 0, 0, 0, top_start_x, top_end_x, 0, 0], + &strut, ); } } diff --git a/src/x.rs b/src/x.rs index 774386a3..aa732b99 100644 --- a/src/x.rs +++ b/src/x.rs @@ -4,11 +4,11 @@ use glib::translate::ToGlibPtr; use gtk4::{glib, prelude::*}; use std::{ ffi::{CString, NulError}, - os::raw::{c_int, c_long}, + os::raw::c_long, ptr, }; -pub use std::os::raw::{c_uchar, c_ulong, c_ushort}; +pub use std::os::raw::{c_int, c_uchar, c_ulong, c_ushort}; pub fn get_window_x11>( window: &T,