feat: fixing warnings & messin with x11

This commit is contained in:
Byson94
2025-10-02 08:57:04 +05:30
parent 243408d176
commit c14f2b4fc6
4 changed files with 52 additions and 24 deletions

View File

@@ -3,7 +3,7 @@ use crate::{
display_backend::DisplayBackend,
error_handling_ctx,
gtk4::prelude::{
ApplicationExt, Cast, CastNone, CellAreaExt, DisplayExt, GskRendererExt, GtkWindowExt,
Cast, CastNone, DisplayExt, GtkWindowExt,
ListModelExt, MonitorExt, NativeExt, ObjectExt, StyleContextExt, WidgetExt,
},
paths::EwwiiPaths,
@@ -30,7 +30,7 @@ use rhai::Dynamic;
use rhai_impl::ast::WidgetNode;
use serde::{de::Error as SerdeError, Deserialize, Deserializer};
use std::{
cell::{Cell, RefCell},
cell::{Cell},
collections::{HashMap, HashSet},
marker::PhantomData,
rc::Rc,
@@ -873,7 +873,7 @@ fn initialize_window<B: DisplayBackend>(
#[cfg(feature = "x11")]
if B::IS_X11 {
if let Some(geometry) = window_init.geometry {
let (conn, screen_num) = x11rb::rust_connection::RustConnection::connect(None)?;
let (conn, _) = x11rb::rust_connection::RustConnection::connect(None)?;
let x11_conn = Rc::new(conn);
let gdk_surface =
@@ -983,6 +983,7 @@ fn apply_window_position(
window: &Window,
) -> Result<()> {
use x11rb::protocol::xproto::{ConfigureWindowAux, ConnectionExt, Window as XWindow};
use x11rb::connection::Connection;
let gdk_surface = window.surface().context("Failed to get gdk surface from gtk window")?;
@@ -997,7 +998,8 @@ fn apply_window_position(
.x(actual_window_rect.x() as i32)
.y(actual_window_rect.y() as i32);
conn.configure_window(xid as XWindow, &aux)?;
conn.as_ref().configure_window(xid as XWindow, &aux)?;
conn.as_ref().flush()?;
}
Ok(())

View File

@@ -321,28 +321,55 @@ mod platform_x11 {
.check()?;
// apply the stickiness and fg/bg thingy
let mut win_states = vec![];
if window_init.backend_options.x11.sticky {
win_states.push(self.atoms._NET_WM_STATE_STICKY);
}
if matches!(window_init.stacking, WindowStacking::Foreground) {
win_states.push(self.atoms._NET_WM_STATE_ABOVE);
} else if matches!(window_init.stacking, WindowStacking::Background) {
win_states.push(self.atoms._NET_WM_STATE_BELOW);
}
x11rb::wrapper::ConnectionExt::change_property32(
Self::set_window_states(
&self.conn,
PropMode::REPLACE,
win_id,
self.atoms._NET_WM_STATE,
self.atoms.ATOM,
&win_states,
)?
.check()?;
&self.atoms,
window_init.backend_options.x11.sticky,
window_init.stacking,
)?;
self.conn.flush().context("Failed to send requests to X server")
}
fn set_window_states(
conn: &impl Connection,
win: u32,
atoms: &AtomCollection,
sticky: bool,
stacking: WindowStacking,
) -> Result<()> {
let mut states = Vec::new();
if sticky {
states.push(atoms._NET_WM_STATE_STICKY);
}
match stacking {
WindowStacking::Foreground => states.push(atoms._NET_WM_STATE_ABOVE),
WindowStacking::Background => states.push(atoms._NET_WM_STATE_BELOW),
_ => {}
}
for state in states {
let event = ClientMessageEvent {
response_type: CLIENT_MESSAGE_EVENT,
format: 32,
sequence: 0,
window: win,
type_: atoms._NET_WM_STATE,
data: ClientMessageData::from([state, 0, 0, 0, 0])
};
conn.send_event(
false,
conn.setup().roots[0].root,
EventMask::SUBSTRUCTURE_REDIRECT | EventMask::SUBSTRUCTURE_NOTIFY,
event,
)?;
}
conn.flush()?;
Ok(())
}
}
x11rb::atom_manager! {

View File

@@ -5,7 +5,7 @@ use crate::{
error_handling_ctx, ipc_server, EwwiiPaths,
};
use anyhow::{Context, Result};
use gtk4::prelude::{ApplicationExt, ApplicationExtManual, DisplayExt, ListModelExt};
use gtk4::prelude::{DisplayExt, ListModelExt};
use std::{
// cell::RefCell,
collections::{HashMap, HashSet},
@@ -14,7 +14,7 @@ use std::{
os::unix::io::AsRawFd,
path::Path,
// rc::Rc,
sync::{atomic::Ordering, Arc, Mutex},
sync::{atomic::Ordering, Arc},
};
use tokio::sync::mpsc::*;

View File

@@ -3,7 +3,6 @@
use crate::util;
use crate::widgets::build_widget::{build_gtk_widget, WidgetInput};
use anyhow::{anyhow, bail, Result};
use gdk::{ModifierType, NotifyType};
use gtk4::gdk::DragAction;
use gtk4::glib::translate::FromGlib;
use gtk4::glib::Type;