xwayland: Set scaled cursor size via xsettings

This commit is contained in:
Victoria Brekenfeld 2025-04-16 19:36:39 +02:00 committed by Victoria Brekenfeld
parent de1e528ba7
commit 2cbe89d89d
2 changed files with 17 additions and 2 deletions

View file

@ -219,7 +219,7 @@ impl CursorStateInner {
} }
} }
pub fn load_cursor_theme() -> (CursorTheme, u32) { pub fn load_cursor_env() -> (String, u32) {
let name = std::env::var("XCURSOR_THEME") let name = std::env::var("XCURSOR_THEME")
.ok() .ok()
.unwrap_or_else(|| "default".into()); .unwrap_or_else(|| "default".into());
@ -227,6 +227,11 @@ pub fn load_cursor_theme() -> (CursorTheme, u32) {
.ok() .ok()
.and_then(|s| s.parse().ok()) .and_then(|s| s.parse().ok())
.unwrap_or(24); .unwrap_or(24);
(name, size)
}
pub fn load_cursor_theme() -> (CursorTheme, u32) {
let (name, size) = load_cursor_env();
(CursorTheme::load(&name), size) (CursorTheme::load(&name), size)
} }

View file

@ -1,7 +1,7 @@
use std::{ffi::OsString, os::unix::io::OwnedFd, process::Stdio}; use std::{ffi::OsString, os::unix::io::OwnedFd, process::Stdio};
use crate::{ use crate::{
backend::render::cursor::{load_cursor_theme, Cursor}, backend::render::cursor::{load_cursor_env, load_cursor_theme, Cursor},
shell::{ shell::{
focus::target::KeyboardFocusTarget, grabs::ReleaseMode, CosmicSurface, PendingWindow, Shell, focus::target::KeyboardFocusTarget, grabs::ReleaseMode, CosmicSurface, PendingWindow, Shell,
}, },
@ -595,12 +595,18 @@ impl Common {
.filter_map(|s| s.0.x11_surface().map(|x| (x.clone(), x.geometry()))) .filter_map(|s| s.0.x11_surface().map(|x| (x.clone(), x.geometry())))
.collect::<Vec<_>>(); .collect::<Vec<_>>();
let (_, cursor_size) = load_cursor_env();
// update xorg dpi // update xorg dpi
if let Some(xwm) = xwayland.xwm.as_mut() { if let Some(xwm) = xwayland.xwm.as_mut() {
let dpi = new_scale * 96. * 1024.; let dpi = new_scale * 96. * 1024.;
if let Err(err) = xwm.set_xsettings( if let Err(err) = xwm.set_xsettings(
[ [
("Xft/DPI".into(), (dpi.round() as i32).into()), ("Xft/DPI".into(), (dpi.round() as i32).into()),
(
"Xcursor/size".into(),
((new_scale * cursor_size as f64).round() as i32).into(),
),
( (
"Gdk/UnscaledDPI".into(), "Gdk/UnscaledDPI".into(),
((dpi / new_scale).round() as i32).into(), ((dpi / new_scale).round() as i32).into(),
@ -609,6 +615,10 @@ impl Common {
"Gdk/WindowScalingFactor".into(), "Gdk/WindowScalingFactor".into(),
(new_scale.round() as i32).into(), (new_scale.round() as i32).into(),
), ),
(
"Gtk/CursorThemeSize".into(),
((new_scale * cursor_size as f64).round() as i32).into(),
),
] ]
.into_iter(), .into_iter(),
) { ) {