From 0be10078adf84fe0e949c098723ab69f0a38e16f Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Tue, 6 Feb 2024 11:08:04 +0530 Subject: [PATCH 01/69] Start working on Udev --- Cargo.lock | 2 ++ src/backends/winit.rs | 6 +++--- src/state.rs | 43 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3e25d1d..a472ce3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1743,6 +1743,7 @@ dependencies = [ "bitflags 2.4.2", "chrono", "clap", + "colored", "crossbeam-channel", "gc-arena", "log", @@ -1752,6 +1753,7 @@ dependencies = [ "piccolo-util", "smart-default", "smithay", + "smithay-drm-extras", "strata-core", "strata-derive", "strum", diff --git a/src/backends/winit.rs b/src/backends/winit.rs index 01d06fb..1e8e563 100644 --- a/src/backends/winit.rs +++ b/src/backends/winit.rs @@ -120,11 +120,11 @@ pub fn init_winit() { -- print(Mod.Super_L) -- print(Key.Escape) - local _ = Key({ Mod.Control_L, Mod.Alt_L }, Key.Return, function() - strata.spawn('kitty') + local _ = Key({ Mod.Alt_L }, Key.Return, function() + strata.spawn('foot') end) - local _ = Key({ Mod.Control_L, Mod.Alt_L }, Key.Escape, function() + local _ = Key({ Mod.Alt_L }, Key.m, function() strata:quit() end) "# diff --git a/src/state.rs b/src/state.rs index 5da0c52..7497138 100644 --- a/src/state.rs +++ b/src/state.rs @@ -14,6 +14,14 @@ use piccolo::{ }; use smithay::{ backend::{ + allocator::{ + dmabuf::{ + AnyError, + Dmabuf, + }, + Allocator, + }, + drm::DrmNode, input::{ Event, InputBackend, @@ -23,8 +31,16 @@ use smithay::{ }, renderer::{ damage::OutputDamageTracker, + element::texture::TextureBuffer, + gles::GlesRenderer, glow::GlowRenderer, + multigpu::{ + gbm::GbmGlesBackend, + GpuManager, + MultiTexture, + }, }, + session::libseat::LibSeatSession, winit::WinitGraphicsBackend, }, desktop::{ @@ -74,6 +90,10 @@ use smithay::{ CompositorClientState, CompositorState, }, + dmabuf::{ + DmabufGlobal, + DmabufState, + }, output::OutputManagerState, selection::{ data_device::DataDeviceState, @@ -239,6 +259,29 @@ impl StrataState { } } +pub struct WinitData { + backend: WinitGraphicsBackend, + damage_tracker: OutputDamageTracker, +} + +pub struct UdevData { + pub session: LibSeatSession, + dh: DisplayHandle, + dmabuf_state: Option<(DmabufState, DmabufGlobal)>, + primary_gpu: DrmNode, + allocator: Option>>, + gpus: GpuManager>, + backends: HashMap, + pointer_images: Vec<(xcursor::parser::Image, TextureBuffer)>, + pointer_element: PointerElement, + pointer_image: crate::cursor::Cursor, +} + +pub enum Backend { + Winit(WinitData), + Udev(UdevData), +} + pub struct StrataComp { pub dh: DisplayHandle, pub backend: WinitGraphicsBackend, From f6d051c66aef07d5f6006de8d10e838d62d46bfa Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Tue, 6 Feb 2024 11:16:41 +0530 Subject: [PATCH 02/69] Add cursor --- src/backends/cursor.rs | 91 ++++++++++++++++++++++++++++++++++++++ src/backends/mod.rs | 1 + src/resources/cursor.rgba | Bin 0 -> 16384 bytes src/state.rs | 2 +- 4 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 src/backends/cursor.rs create mode 100644 src/resources/cursor.rgba diff --git a/src/backends/cursor.rs b/src/backends/cursor.rs new file mode 100644 index 0000000..7b825c0 --- /dev/null +++ b/src/backends/cursor.rs @@ -0,0 +1,91 @@ +use std::{ + io::Read, + time::Duration, +}; + +use tracing::warn; +use xcursor::{ + parser::{ + parse_xcursor, + Image, + }, + CursorTheme, +}; + +static FALLBACK_CURSOR_DATA: &[u8] = include_bytes!("../resources/cursor.rgba"); + +pub struct Cursor { + icons: Vec, + size: u32, +} + +impl Cursor { + pub fn load() -> Cursor { + let name = std::env::var("XCURSOR_THEME").ok().unwrap_or_else(|| "default".into()); + let size = std::env::var("XCURSOR_SIZE").ok().and_then(|s| s.parse().ok()).unwrap_or(24); + + let theme = CursorTheme::load(&name); + let icons = load_icon(&theme) + .map_err(|err| warn!("Unable to load xcursor: {}, using fallback cursor", err)) + .unwrap_or_else(|_| { + vec![Image { + size: 32, + width: 64, + height: 64, + xhot: 1, + yhot: 1, + delay: 1, + pixels_rgba: Vec::from(FALLBACK_CURSOR_DATA), + pixels_argb: vec![], //unused + }] + }); + + Cursor { icons, size } + } + + pub fn get_image(&self, scale: u32, time: Duration) -> Image { + let size = self.size * scale; + frame(time.as_millis() as u32, size, &self.icons) + } +} + +fn nearest_images(size: u32, images: &[Image]) -> impl Iterator { + let nearest_image = + images.iter().min_by_key(|image| (size as i32 - image.size as i32).abs()).unwrap(); + + images.iter().filter(move |image| { + image.width == nearest_image.width && image.height == nearest_image.height + }) +} + +fn frame(mut millis: u32, size: u32, images: &[Image]) -> Image { + let total = nearest_images(size, images).fold(0, |acc, image| acc + image.delay); + millis %= total; + + for img in nearest_images(size, images) { + if millis < img.delay { + return img.clone(); + } + millis -= img.delay; + } + + unreachable!() +} + +#[derive(thiserror::Error, Debug)] +enum Error { + #[error("Theme has no default cursor")] + NoDefaultCursor, + #[error("Error opening xcursor file: {0}")] + File(#[from] std::io::Error), + #[error("Failed to parse XCursor file")] + Parse, +} + +fn load_icon(theme: &CursorTheme) -> Result, Error> { + let icon_path = theme.load_icon("default").ok_or(Error::NoDefaultCursor)?; + let mut cursor_file = std::fs::File::open(icon_path)?; + let mut cursor_data = Vec::new(); + cursor_file.read_to_end(&mut cursor_data)?; + parse_xcursor(&cursor_data).ok_or(Error::Parse) +} diff --git a/src/backends/mod.rs b/src/backends/mod.rs index b0fcd0e..4a81944 100644 --- a/src/backends/mod.rs +++ b/src/backends/mod.rs @@ -1,3 +1,4 @@ +pub mod cursor; pub mod winit; use log::error; diff --git a/src/resources/cursor.rgba b/src/resources/cursor.rgba new file mode 100644 index 0000000000000000000000000000000000000000..729c1cc466b85bb2b1e9923d4a0bb7db559df4be GIT binary patch literal 16384 zcmeI1O-NKx6vxx~)X~vYbjq=Ws3dTaLKuP~m=FrJuvI9bL!v{}AX>ICKS>b^7eP@g zaT_j75OiUpE)+i&I*Qt0f{G}SV4*Xkr~kS51{afAtKOS?;mn;m^9KC=-nk#|y0NiQ zw6wHz{|s7TVPP2eq14=N_X8sGPfkv{z->Z=l!K|MDaYaAp%>vFA0K}N{>XxYf{<~5 z`!4vsUN6dk{P6J<4s_Ys*&*S8`N8e2udgTEe|A9A)6;cu5T(=UH19y+uc)Y?q@*O8 znVDe)e)P}az*JmZ9FAVIP2qPsodig-SS&O#F~JUKc6PQIIfKn+)2su9zpAQA@Uw&X z_;_}3c;uiFIcs8Kq9z>#<7Wp62?;bdHpU7Lutv5bXDliz(wu|e@v{TWe>5^O!VYL| zZmu13GZPyFn_Y&O&2;Gn1jIOssml$n{S z2?wX)X9rARH_#EWAc87NL3vr{!k{R;!iz`}>6hJTrA7XT?5IhhDYqZ}gwvKwzgJ8 zO-&6oH#gJn?yjhVm6eqb;J2owrRmYDss-ccxz1!V1@?n_ygsC2$uE_al>rCJbJ70({!cJoN7xWN?m6NSF$gniM^$s-aemxa!M?q{ zy}7fq^KEZ$kD{Za0}e_{O9|&hG(SJj<2?$&tQ>q!pakBkrz!mW+>h~0o12?ov$C=r zot>R6ETg@>J;2Y;17Ihg&-cBlsVNtfM)i;e|4W&l&;OWpZEfuf*0MXe@-iZIYirBB zzP?T=DJcO5d3kw!DSLR2b)V~A)n`OU_n%f*SKS#I8TY_*5n)C|mzS5{W!Bc#R>9Bf z0`fcua{7nE;kb#S7%3o?{NUifh#Tf0L8eE&eVNXJI#Z-Q$Lu z_ux#}h5ca;zDq?Y>mc50uNjR-u7S9|zP=aT-QBP7J{xffYa#Dqc>6-dj literal 0 HcmV?d00001 diff --git a/src/state.rs b/src/state.rs index 7497138..5121a8e 100644 --- a/src/state.rs +++ b/src/state.rs @@ -274,7 +274,7 @@ pub struct UdevData { backends: HashMap, pointer_images: Vec<(xcursor::parser::Image, TextureBuffer)>, pointer_element: PointerElement, - pointer_image: crate::cursor::Cursor, + pointer_image: crate::backends::cursor::Cursor, } pub enum Backend { From b60099269dcb31691fd8b96bdfe2892de6f92adb Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Mon, 4 Mar 2024 19:51:24 +0530 Subject: [PATCH 03/69] forgot --- Cargo.lock | 3 +++ Cargo.toml | 3 +++ src/backends/cursor.rs | 2 +- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index a472ce3..48d58dd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1757,9 +1757,12 @@ dependencies = [ "strata-core", "strata-derive", "strum", + "thiserror", "tokio", + "tracing", "tracing-appender", "tracing-subscriber", + "xcursor", "xdg", ] diff --git a/Cargo.toml b/Cargo.toml index 34ef52e..81d9778 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -48,6 +48,9 @@ strata-derive = { path = "strata-derive" } strata-core = { path = "strata-core" } smart-default = "0.7.1" strum = { version = "0.25.0", features = ["derive"] } +xcursor = "0.3.5" +thiserror = "1.0.56" +tracing = "0.1.40" [dependencies.smithay] default-features = false diff --git a/src/backends/cursor.rs b/src/backends/cursor.rs index 7b825c0..f6ab946 100644 --- a/src/backends/cursor.rs +++ b/src/backends/cursor.rs @@ -36,7 +36,7 @@ impl Cursor { yhot: 1, delay: 1, pixels_rgba: Vec::from(FALLBACK_CURSOR_DATA), - pixels_argb: vec![], //unused + pixels_argb: vec![], }] }); From 8f27abb636750237edbb94df971b47309f1f1b23 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Mon, 4 Mar 2024 20:01:20 +0530 Subject: [PATCH 04/69] formatting --- src/state.rs | 107 ++++++++++----------------------------------------- 1 file changed, 20 insertions(+), 87 deletions(-) diff --git a/src/state.rs b/src/state.rs index cf43442..b121372 100644 --- a/src/state.rs +++ b/src/state.rs @@ -1,115 +1,51 @@ use crate::{ decorations::BorderShader, - handlers::input::{ - KeyPattern, - ModFlags, - Mods, - }, - workspaces::{ - FocusTarget, - Workspaces, - }, -}; -use piccolo::{ - self as lua, + handlers::input::{KeyPattern, ModFlags, Mods}, + workspaces::{FocusTarget, Workspaces}, }; +use piccolo::{self as lua}; use smithay::{ backend::{ allocator::{ - dmabuf::{ - AnyError, - Dmabuf, - }, + dmabuf::{AnyError, Dmabuf}, Allocator, }, drm::DrmNode, - input::{ - Event, - InputBackend, - InputEvent, - KeyState, - KeyboardKeyEvent, - }, + input::{Event, InputBackend, InputEvent, KeyState, KeyboardKeyEvent}, renderer::{ damage::OutputDamageTracker, element::texture::TextureBuffer, gles::GlesRenderer, glow::GlowRenderer, - multigpu::{ - gbm::GbmGlesBackend, - GpuManager, - MultiTexture, - }, + multigpu::{gbm::GbmGlesBackend, GpuManager, MultiTexture}, }, session::libseat::LibSeatSession, winit::WinitGraphicsBackend, }, - desktop::{ - layer_map_for_output, - space::SpaceElement, - PopupManager, - }, + desktop::{layer_map_for_output, space::SpaceElement, PopupManager}, input::{ - keyboard::{ - FilterResult, - Keysym, - ModifiersState, - XkbConfig, - }, - Seat, - SeatState, + keyboard::{FilterResult, Keysym, ModifiersState, XkbConfig}, + Seat, SeatState, }, reexports::{ calloop::{ - generic::{ - FdWrapper, - Generic, - }, - EventLoop, - Interest, - LoopSignal, - Mode, - PostAction, + generic::{FdWrapper, Generic}, + EventLoop, Interest, LoopSignal, Mode, PostAction, }, wayland_server::{ - backend::{ - ClientData, - ClientId, - DisconnectReason, - }, - Display, - DisplayHandle, + backend::{ClientData, ClientId, DisconnectReason}, + Display, DisplayHandle, }, }, - utils::{ - Logical, - Point, - Rectangle, - SERIAL_COUNTER, - }, + utils::{Logical, Point, Rectangle, SERIAL_COUNTER}, wayland::{ - compositor::{ - CompositorClientState, - CompositorState, - }, - dmabuf::{ - DmabufGlobal, - DmabufState, - }, + compositor::{CompositorClientState, CompositorState}, + dmabuf::{DmabufGlobal, DmabufState}, output::OutputManagerState, - selection::{ - data_device::DataDeviceState, - primary_selection::PrimarySelectionState, - }, + selection::{data_device::DataDeviceState, primary_selection::PrimarySelectionState}, shell::{ - wlr_layer::{ - Layer, - WlrLayerShellState, - }, - xdg::{ - decoration::XdgDecorationState, - XdgShellState, - }, + wlr_layer::{Layer, WlrLayerShellState}, + xdg::{decoration::XdgDecorationState, XdgShellState}, }, shm::ShmState, socket::ListeningSocketSource, @@ -123,10 +59,7 @@ use std::{ process::Command, rc::Rc, sync::Arc, - time::{ - Duration, - Instant, - }, + time::{Duration, Instant}, }; pub struct StrataState { From ded74cb291dfe00d5d524c59464d7d2b83554a9e Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Mon, 4 Mar 2024 20:03:29 +0530 Subject: [PATCH 05/69] spawn kitty instead of foot --- src/backends/winit.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backends/winit.rs b/src/backends/winit.rs index 2e8ca3f..19a19f0 100644 --- a/src/backends/winit.rs +++ b/src/backends/winit.rs @@ -104,7 +104,7 @@ pub fn init_winit() { -- print(Key.Escape) local _ = Key({ Mod.Alt_L }, Key.Return, function() - strata.spawn('foot') + strata.spawn('kitty') end) local _ = Key({ Mod.Alt_L }, Key.m, function() From a61f84e3432fd1bb70ebda376db8c7232d90f591 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Mon, 4 Mar 2024 20:05:38 +0530 Subject: [PATCH 06/69] move WinitData to winit.rs --- src/backends/winit.rs | 5 +++++ src/state.rs | 5 +---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/backends/winit.rs b/src/backends/winit.rs index 19a19f0..5d36f11 100644 --- a/src/backends/winit.rs +++ b/src/backends/winit.rs @@ -43,6 +43,11 @@ use std::{ time::Duration, }; +pub struct WinitData { + backend: WinitGraphicsBackend, + damage_tracker: OutputDamageTracker, +} + pub fn init_winit() { let mut event_loop: EventLoop = EventLoop::try_new().unwrap(); let (display, socket) = state::init_wayland_listener(&event_loop); diff --git a/src/state.rs b/src/state.rs index b121372..eda666d 100644 --- a/src/state.rs +++ b/src/state.rs @@ -197,10 +197,7 @@ impl StrataState { } } -pub struct WinitData { - backend: WinitGraphicsBackend, - damage_tracker: OutputDamageTracker, -} + pub struct UdevData { pub session: LibSeatSession, From de30550fc50c20639a3bc033f508b00a57b66086 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Mon, 4 Mar 2024 20:06:12 +0530 Subject: [PATCH 07/69] start working on udev backend --- src/backends/mod.rs | 1 + src/backends/udev.rs | 12 +++++ src/state.rs | 122 ++++++++++++++++++++++++++++++------------- 3 files changed, 100 insertions(+), 35 deletions(-) create mode 100644 src/backends/udev.rs diff --git a/src/backends/mod.rs b/src/backends/mod.rs index 4a81944..6fd7cb5 100644 --- a/src/backends/mod.rs +++ b/src/backends/mod.rs @@ -1,4 +1,5 @@ pub mod cursor; +pub mod udev; pub mod winit; use log::error; diff --git a/src/backends/udev.rs b/src/backends/udev.rs new file mode 100644 index 0000000..7e2ba1e --- /dev/null +++ b/src/backends/udev.rs @@ -0,0 +1,12 @@ +pub struct UdevData { + pub session: LibSeatSession, + dh: DisplayHandle, + dmabuf_state: Option<(DmabufState, DmabufGlobal)>, + primary_gpu: DrmNode, + allocator: Option>>, + gpus: GpuManager>, + backends: HashMap, + pointer_images: Vec<(xcursor::parser::Image, TextureBuffer)>, + pointer_element: PointerElement, + pointer_image: crate::backends::cursor::Cursor, +} diff --git a/src/state.rs b/src/state.rs index eda666d..66ba8ba 100644 --- a/src/state.rs +++ b/src/state.rs @@ -1,51 +1,115 @@ use crate::{ decorations::BorderShader, - handlers::input::{KeyPattern, ModFlags, Mods}, - workspaces::{FocusTarget, Workspaces}, + handlers::input::{ + KeyPattern, + ModFlags, + Mods, + }, + workspaces::{ + FocusTarget, + Workspaces, + }, +}; +use piccolo::{ + self as lua, }; -use piccolo::{self as lua}; use smithay::{ backend::{ allocator::{ - dmabuf::{AnyError, Dmabuf}, + dmabuf::{ + AnyError, + Dmabuf, + }, Allocator, }, drm::DrmNode, - input::{Event, InputBackend, InputEvent, KeyState, KeyboardKeyEvent}, + input::{ + Event, + InputBackend, + InputEvent, + KeyState, + KeyboardKeyEvent, + }, renderer::{ damage::OutputDamageTracker, element::texture::TextureBuffer, gles::GlesRenderer, glow::GlowRenderer, - multigpu::{gbm::GbmGlesBackend, GpuManager, MultiTexture}, + multigpu::{ + gbm::GbmGlesBackend, + GpuManager, + MultiTexture, + }, }, session::libseat::LibSeatSession, winit::WinitGraphicsBackend, }, - desktop::{layer_map_for_output, space::SpaceElement, PopupManager}, + desktop::{ + layer_map_for_output, + space::SpaceElement, + PopupManager, + }, input::{ - keyboard::{FilterResult, Keysym, ModifiersState, XkbConfig}, - Seat, SeatState, + keyboard::{ + FilterResult, + Keysym, + ModifiersState, + XkbConfig, + }, + Seat, + SeatState, }, reexports::{ calloop::{ - generic::{FdWrapper, Generic}, - EventLoop, Interest, LoopSignal, Mode, PostAction, + generic::{ + FdWrapper, + Generic, + }, + EventLoop, + Interest, + LoopSignal, + Mode, + PostAction, }, wayland_server::{ - backend::{ClientData, ClientId, DisconnectReason}, - Display, DisplayHandle, + backend::{ + ClientData, + ClientId, + DisconnectReason, + }, + Display, + DisplayHandle, }, }, - utils::{Logical, Point, Rectangle, SERIAL_COUNTER}, + utils::{ + Logical, + Point, + Rectangle, + SERIAL_COUNTER, + }, wayland::{ - compositor::{CompositorClientState, CompositorState}, - dmabuf::{DmabufGlobal, DmabufState}, + compositor::{ + CompositorClientState, + CompositorState, + }, + dmabuf::{ + DmabufGlobal, + DmabufState, + }, output::OutputManagerState, - selection::{data_device::DataDeviceState, primary_selection::PrimarySelectionState}, + selection::{ + data_device::DataDeviceState, + primary_selection::PrimarySelectionState, + }, shell::{ - wlr_layer::{Layer, WlrLayerShellState}, - xdg::{decoration::XdgDecorationState, XdgShellState}, + wlr_layer::{ + Layer, + WlrLayerShellState, + }, + xdg::{ + decoration::XdgDecorationState, + XdgShellState, + }, }, shm::ShmState, socket::ListeningSocketSource, @@ -59,7 +123,10 @@ use std::{ process::Command, rc::Rc, sync::Arc, - time::{Duration, Instant}, + time::{ + Duration, + Instant, + }, }; pub struct StrataState { @@ -197,21 +264,6 @@ impl StrataState { } } - - -pub struct UdevData { - pub session: LibSeatSession, - dh: DisplayHandle, - dmabuf_state: Option<(DmabufState, DmabufGlobal)>, - primary_gpu: DrmNode, - allocator: Option>>, - gpus: GpuManager>, - backends: HashMap, - pointer_images: Vec<(xcursor::parser::Image, TextureBuffer)>, - pointer_element: PointerElement, - pointer_image: crate::backends::cursor::Cursor, -} - pub enum Backend { Winit(WinitData), Udev(UdevData), From 3545f18c62317efdb42c214bb35fead27c5ff37e Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Mon, 4 Mar 2024 20:41:19 +0530 Subject: [PATCH 08/69] update deps --- Cargo.lock | 434 +++++++++++++++++++++++++---------------------------- 1 file changed, 205 insertions(+), 229 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 48d58dd..a40cc7b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -19,9 +19,9 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "ahash" -version = "0.8.7" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", "getrandom", @@ -47,9 +47,9 @@ checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" [[package]] name = "android-activity" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39b801912a977c3fd52d80511fe1c0c8480c6f957f21ae2ce1b92ffe970cf4b9" +checksum = "ee91c0c2905bae44f84bfa4e044536541df26b7703fd0888deeb9060fcc44289" dependencies = [ "android-properties", "bitflags 2.4.2", @@ -89,9 +89,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.8" +version = "0.6.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "628a8f9bd1e24b4e0db2b4bc2d000b001e7dd032d54afa60a68836aeec5aa54a" +checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" dependencies = [ "anstyle", "anstyle-parse", @@ -103,9 +103,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.4" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" +checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" [[package]] name = "anstyle-parse" @@ -137,9 +137,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.79" +version = "1.0.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" +checksum = "5ad32ce52e4161730f7098c077cd2ed6229b5804ccf99e5366be1ab72a98b4e1" [[package]] name = "appendlist" @@ -231,9 +231,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.9.0" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c48f0051a4b4c5e0b6d365cd04af53aeaa209e3cc15ec2cdb69e73cc87fbd0dc" +checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" dependencies = [ "memchr", "serde", @@ -241,15 +241,15 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.14.0" +version = "3.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" +checksum = "8ea184aa71bb362a1157c896979544cc23974e08fd265f29ea96b59f0b4a555b" [[package]] name = "bytemuck" -version = "1.14.0" +version = "1.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" +checksum = "a2ef034f05691a48569bd920a96c81b9d91bbad1ab5ac7c4616c1f6ef36cb79f" dependencies = [ "bytemuck_derive", ] @@ -299,9 +299,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.83" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +checksum = "a0ba8f7aaa012f30d5b2861462f6708eccd49c3c39863fe083a308035f63d723" dependencies = [ "jobserver", "libc", @@ -337,23 +337,23 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.31" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" +checksum = "5bc015644b92d5890fab7489e49d21f879d5c990186827d42ec511919404f38b" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "wasm-bindgen", - "windows-targets 0.48.5", + "windows-targets 0.52.4", ] [[package]] name = "clap" -version = "4.4.18" +version = "4.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e578d6ec4194633722ccf9544794b71b1385c3c027efe0c55db226fc880865c" +checksum = "c918d541ef2913577a0f9566e9ce27cb35b6df072075769e0b26cb5a554520da" dependencies = [ "clap_builder", "clap_derive", @@ -361,9 +361,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.4.18" +version = "4.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4df4df40ec50c46000231c914968278b1eb05098cf8f1b3a518a95030e71d1c7" +checksum = "9f3e7391dad68afb0c2ede1bf619f579a3dc9c2ec67f089baa397123a2f3d1eb" dependencies = [ "anstream", "anstyle", @@ -373,9 +373,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.4.7" +version = "4.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" +checksum = "307bc0538d5f0f83b8248db3087aa92fe504e4691294d0c96c0eabc33f47ba47" dependencies = [ "heck", "proc-macro2", @@ -385,9 +385,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" +checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" [[package]] name = "colorchoice" @@ -466,9 +466,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.11" +version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "176dc175b78f56c0f321911d9c8eb2b77a78a4860b9c19db83835fea1a46649b" +checksum = "ab3db02a9c5b5121e1e42fbdb1aeb65f5e02624cc58c43f2884c6ccac0b82f95" dependencies = [ "crossbeam-utils", ] @@ -506,7 +506,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" dependencies = [ - "libloading 0.8.1", + "libloading 0.8.2", ] [[package]] @@ -562,9 +562,9 @@ checksum = "2ab5fa33485cd85ac354df485819a63360fefa312fe04cffe65e6f175be1522c" [[package]] name = "either" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" [[package]] name = "encoding_rs" @@ -626,9 +626,9 @@ checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" [[package]] name = "gbm" -version = "0.14.0" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65dffaf38d96aa22cb748ccd9b1ffe624931e899f54c0225815ef7ac757a409f" +checksum = "313702b30cdeb83ddc72bc14dcee67803cd0ae2d12282ea06e368c25a900c844" dependencies = [ "bitflags 1.3.2", "drm", @@ -740,9 +740,9 @@ checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermit-abi" -version = "0.3.3" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" [[package]] name = "home" @@ -755,9 +755,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.59" +version = "0.1.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6a67363e2aa4443928ce15e57ebae94fd8949958fd1223c4cfc0cd473ad7539" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -789,9 +789,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.1.0" +version = "2.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +checksum = "7b0b929d511467233429c45a44ac1dcaa21ba0f5ba11e4879e6ed28ddb4f9df4" dependencies = [ "equivalent", "hashbrown", @@ -812,12 +812,9 @@ dependencies = [ [[package]] name = "input-sys" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f6c2a17e8aba7217660e32863af87b0febad811d4b8620ef76b386603fddc2" -dependencies = [ - "libc", -] +checksum = "bd4f5b4d1c00331c5245163aacfe5f20be75b564c7112d45893d4ae038119eb0" [[package]] name = "io-lifetimes" @@ -866,18 +863,18 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" +checksum = "ab46a6e9526ddef3ae7f787c06f0f2600639ba80ea3eade3d8e670a2230f51d6" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.67" +version = "0.3.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1" +checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" dependencies = [ "wasm-bindgen", ] @@ -896,9 +893,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.152" +version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" [[package]] name = "libloading" @@ -912,12 +909,12 @@ dependencies = [ [[package]] name = "libloading" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" +checksum = "2caa5afb8bf9f3a2652760ce7d4f62d21c4d5a423e68466fca30df82f2330164" dependencies = [ "cfg-if", - "windows-sys 0.48.0", + "windows-targets 0.52.4", ] [[package]] @@ -985,9 +982,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.20" +version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" [[package]] name = "lua-src" @@ -1000,9 +997,9 @@ dependencies = [ [[package]] name = "luajit-src" -version = "210.5.4+c525bcb" +version = "210.5.6+9cc2e42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a10ab4ed12d22cb50ef43ece4f6c5ca594b2d2480019e87facfd422225a9908" +checksum = "23b365d859c9ffc187f48bb3e25ec80c3b40cf3f68f53544f4adeaee70554157" dependencies = [ "cc", "which", @@ -1034,22 +1031,13 @@ dependencies = [ [[package]] name = "memmap2" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45fd3a57831bf88bc63f8cebc0cf956116276e97fef3966103e96416209f7c92" +checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" dependencies = [ "libc", ] -[[package]] -name = "memoffset" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" -dependencies = [ - "autocfg", -] - [[package]] name = "memoffset" version = "0.9.0" @@ -1061,18 +1049,18 @@ dependencies = [ [[package]] name = "miniz_oxide" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" dependencies = [ "adler", ] [[package]] name = "mio" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" dependencies = [ "libc", "wasi", @@ -1081,9 +1069,9 @@ dependencies = [ [[package]] name = "mlua" -version = "0.9.4" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069264935e816c85884b99e88c8b408d6d92e40ae8760f726c983526a53546b5" +checksum = "868d02cb5eb97761bbf6bd6922c1c7a88b8ea252bbf43bd8350a0bf8497a1fc0" dependencies = [ "bstr", "mlua-sys", @@ -1094,9 +1082,9 @@ dependencies = [ [[package]] name = "mlua-sys" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4655631a02e3739d014951291ecfa08db49c4da3f7f8c6f3931ed236af5dd78e" +checksum = "2847b42764435201d8cbee1f517edb79c4cca4181877b90047587c89e1b7bce4" dependencies = [ "cc", "cfg-if", @@ -1135,18 +1123,6 @@ dependencies = [ "jni-sys", ] -[[package]] -name = "nix" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" -dependencies = [ - "bitflags 1.3.2", - "cfg-if", - "libc", - "memoffset 0.7.1", -] - [[package]] name = "nu-ansi-term" version = "0.46.0" @@ -1157,11 +1133,17 @@ dependencies = [ "winapi", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" dependencies = [ "autocfg", ] @@ -1311,15 +1293,15 @@ checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" [[package]] name = "pkg-config" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69d3587f8a9e599cc7ec2c00e331f71c4e69a5f9a4b8a6efd5b07466b9736f9a" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" [[package]] name = "polling" -version = "3.3.2" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "545c980a3880efd47b2e262f6a4bb6daad6555cf3367aa9c4e52895f69537a41" +checksum = "24f040dee2588b4963afb4e420540439d126f73fdacf4a9c486a96d840bac3c9" dependencies = [ "cfg-if", "concurrent-queue", @@ -1343,36 +1325,36 @@ checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "proc-macro-crate" -version = "3.0.0" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b2685dd208a3771337d8d386a89840f0f43cd68be8dae90a5f8c2384effc9cd" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" dependencies = [ "toml_edit", ] [[package]] name = "proc-macro2" -version = "1.0.76" +version = "1.0.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" dependencies = [ "unicode-ident", ] [[package]] name = "profiling" -version = "1.0.13" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d135ede8821cf6376eb7a64148901e1690b788c11ae94dc297ae917dbc91dc0e" +checksum = "43d84d1d7a6ac92673717f9f6d1518374ef257669c24ebc5ac25d5033828be58" dependencies = [ "profiling-procmacros", ] [[package]] name = "profiling-procmacros" -version = "1.0.13" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b322d7d65c1ab449be3c890fcbd0db6e1092d0dd05d79dba2dd28032cebeb05" +checksum = "8021cf59c8ec9c432cfc2526ac6b8aa508ecaf29cd415f271b8406c1b851c3fd" dependencies = [ "quote", "syn", @@ -1380,9 +1362,9 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.30.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956" +checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33" dependencies = [ "memchr", ] @@ -1452,13 +1434,13 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.2" +version = "1.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.3", + "regex-automata 0.4.6", "regex-syntax 0.8.2", ] @@ -1473,9 +1455,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.3" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" dependencies = [ "aho-corasick", "memchr", @@ -1508,9 +1490,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustix" -version = "0.38.30" +version = "0.38.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322394588aaf33c24007e8bb3238ee3e4c5c09c084ab32bc73890b99ff326bca" +checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" dependencies = [ "bitflags 2.4.2", "errno", @@ -1554,18 +1536,18 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "serde" -version = "1.0.195" +version = "1.0.197" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" +checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.195" +version = "1.0.197" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" +checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" dependencies = [ "proc-macro2", "quote", @@ -1610,9 +1592,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.12.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2593d31f82ead8df961d8bd23a64c2ccf2eb5dd34b0a34bfb4dd54011c72009e" +checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" [[package]] name = "smart-default" @@ -1650,7 +1632,7 @@ dependencies = [ "input", "lazy_static", "libc", - "libloading 0.8.1", + "libloading 0.8.2", "libseat", "once_cell", "pkg-config", @@ -1678,9 +1660,9 @@ dependencies = [ [[package]] name = "smithay-client-toolkit" -version = "0.18.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60e3d9941fa3bacf7c2bf4b065304faa14164151254cd16ce1b1bc8fc381600f" +checksum = "922fd3eeab3bd820d76537ce8f582b1cf951eceb5475c28500c7457d9d17f53a" dependencies = [ "bitflags 2.4.2", "calloop", @@ -1688,7 +1670,7 @@ dependencies = [ "cursor-icon", "libc", "log", - "memmap2 0.9.3", + "memmap2 0.9.4", "rustix", "thiserror", "wayland-backend", @@ -1704,7 +1686,7 @@ dependencies = [ [[package]] name = "smithay-drm-extras" version = "0.1.0" -source = "git+https://github.com/Smithay/smithay.git#f1e7fc18a7f060f8ff1e647ca407df62f85467cf" +source = "git+https://github.com/Smithay/smithay.git#418190e4992ce642e6bac873307d4fc4fa9a1e89" dependencies = [ "drm", "edid-rs", @@ -1721,12 +1703,12 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.5" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" dependencies = [ "libc", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -1784,9 +1766,9 @@ dependencies = [ [[package]] name = "strsim" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +checksum = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01" [[package]] name = "strum" @@ -1812,9 +1794,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.48" +version = "2.0.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "b699d15b36d1f02c3e7c69f8ffef53de37aefae075d8488d4ba1a7788d574a07" dependencies = [ "proc-macro2", "quote", @@ -1823,43 +1805,41 @@ dependencies = [ [[package]] name = "synstructure" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "285ba80e733fac80aa4270fbcdf83772a79b80aa35c97075320abfee4a915b06" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", "syn", - "unicode-xid", ] [[package]] name = "tempfile" -version = "3.9.0" +version = "3.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa" +checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" dependencies = [ "cfg-if", "fastrand", - "redox_syscall 0.4.1", "rustix", "windows-sys 0.52.0", ] [[package]] name = "thiserror" -version = "1.0.56" +version = "1.0.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" +checksum = "1e45bcbe8ed29775f228095caf2cd67af7a4ccf756ebff23a306bf3e8b47b24b" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.56" +version = "1.0.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" +checksum = "a953cb265bef375dae3de6663da4d3804eee9682ea80d8e2542529b73c531c81" dependencies = [ "proc-macro2", "quote", @@ -1868,9 +1848,9 @@ dependencies = [ [[package]] name = "thread_local" -version = "1.1.7" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" dependencies = [ "cfg-if", "once_cell", @@ -1878,12 +1858,13 @@ dependencies = [ [[package]] name = "time" -version = "0.3.31" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" dependencies = [ "deranged", "itoa", + "num-conv", "powerfmt", "serde", "time-core", @@ -1898,18 +1879,19 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26197e33420244aeb70c3e8c78376ca46571bc4e701e4791c2cd9f57dcb3a43f" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" dependencies = [ + "num-conv", "time-core", ] [[package]] name = "tokio" -version = "1.35.1" +version = "1.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" +checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931" dependencies = [ "backtrace", "bytes", @@ -1943,9 +1925,9 @@ checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" [[package]] name = "toml_edit" -version = "0.21.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" dependencies = [ "indexmap", "toml_datetime", @@ -2056,15 +2038,9 @@ checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-segmentation" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" - -[[package]] -name = "unicode-xid" -version = "0.2.4" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" [[package]] name = "utf8parse" @@ -2086,9 +2062,9 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "walkdir" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" dependencies = [ "same-file", "winapi-util", @@ -2102,9 +2078,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.90" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406" +checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -2112,9 +2088,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.90" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd" +checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" dependencies = [ "bumpalo", "log", @@ -2127,9 +2103,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.40" +version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bde2032aeb86bdfaecc8b261eef3cba735cc426c1f3a3416d1e0791be95fc461" +checksum = "877b9c3f61ceea0e56331985743b13f3d25c406a7098d45180fb5f09bc19ed97" dependencies = [ "cfg-if", "js-sys", @@ -2139,9 +2115,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.90" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999" +checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2149,9 +2125,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.90" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7" +checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" dependencies = [ "proc-macro2", "quote", @@ -2162,19 +2138,19 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.90" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b" +checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" [[package]] name = "wayland-backend" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19152ddd73f45f024ed4534d9ca2594e0ef252c1847695255dae47f34df9fbe4" +checksum = "9d50fa61ce90d76474c87f5fc002828d81b32677340112b4ef08079a9d459a40" dependencies = [ "cc", "downcast-rs", - "nix", + "rustix", "scoped-tls", "smallvec", "wayland-sys", @@ -2182,12 +2158,12 @@ dependencies = [ [[package]] name = "wayland-client" -version = "0.31.1" +version = "0.31.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ca7d52347346f5473bf2f56705f360e8440873052e575e55890c4fa57843ed3" +checksum = "82fb96ee935c2cea6668ccb470fb7771f6215d1691746c2d896b447a00ad3f1f" dependencies = [ "bitflags 2.4.2", - "nix", + "rustix", "wayland-backend", "wayland-scanner", ] @@ -2205,11 +2181,11 @@ dependencies = [ [[package]] name = "wayland-cursor" -version = "0.31.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44aa20ae986659d6c77d64d808a046996a932aa763913864dc40c359ef7ad5b" +checksum = "71ce5fa868dd13d11a0d04c5e2e65726d0897be8de247c0c5a65886e283231ba" dependencies = [ - "nix", + "rustix", "wayland-client", "xcursor", ] @@ -2226,9 +2202,9 @@ dependencies = [ [[package]] name = "wayland-protocols" -version = "0.31.0" +version = "0.31.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e253d7107ba913923dc253967f35e8561a3c65f914543e46843c88ddd729e21c" +checksum = "8f81f365b8b4a97f422ac0e8737c438024b5951734506b0e1d775c73030561f4" dependencies = [ "bitflags 2.4.2", "wayland-backend", @@ -2279,9 +2255,9 @@ dependencies = [ [[package]] name = "wayland-scanner" -version = "0.31.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb8e28403665c9f9513202b7e1ed71ec56fde5c107816843fb14057910b2c09c" +checksum = "63b3a62929287001986fb58c789dce9b67604a397c15c611ad9f747300b6c283" dependencies = [ "proc-macro2", "quick-xml", @@ -2290,14 +2266,14 @@ dependencies = [ [[package]] name = "wayland-server" -version = "0.31.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f3f0c52a445936ca1184c98f1a69cf4ad9c9130788884531ef04428468cb1ce" +checksum = "00e6e4d5c285bc24ba4ed2d5a4bd4febd5fd904451f465973225c8e99772fdb7" dependencies = [ "bitflags 2.4.2", "downcast-rs", "io-lifetimes 2.0.3", - "nix", + "rustix", "wayland-backend", "wayland-scanner", ] @@ -2311,16 +2287,16 @@ dependencies = [ "dlib", "libc", "log", - "memoffset 0.9.0", + "memoffset", "once_cell", "pkg-config", ] [[package]] name = "web-sys" -version = "0.3.67" +version = "0.3.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58cd2333b6e0be7a39605f0e255892fd7418a682d8da8fe042fe25128794d2ed" +checksum = "96565907687f7aceb35bc5fc03770a8a0471d82e479f25832f54a0e3f4b28446" dependencies = [ "js-sys", "wasm-bindgen", @@ -2338,15 +2314,15 @@ dependencies = [ [[package]] name = "which" -version = "5.0.0" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bf3ea8596f3a0dd5980b46430f2058dfe2c36a27ccfbb1845d6fbfcd9ba6e14" +checksum = "7fa5e0c10bf77f44aac573e498d1a82d5fbd5e91f6fc0a99e7be4b38e85e101c" dependencies = [ "either", "home", "once_cell", "rustix", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -2386,7 +2362,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.0", + "windows-targets 0.52.4", ] [[package]] @@ -2413,7 +2389,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.0", + "windows-targets 0.52.4", ] [[package]] @@ -2448,17 +2424,17 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b" dependencies = [ - "windows_aarch64_gnullvm 0.52.0", - "windows_aarch64_msvc 0.52.0", - "windows_i686_gnu 0.52.0", - "windows_i686_msvc 0.52.0", - "windows_x86_64_gnu 0.52.0", - "windows_x86_64_gnullvm 0.52.0", - "windows_x86_64_msvc 0.52.0", + "windows_aarch64_gnullvm 0.52.4", + "windows_aarch64_msvc 0.52.4", + "windows_i686_gnu 0.52.4", + "windows_i686_msvc 0.52.4", + "windows_x86_64_gnu 0.52.4", + "windows_x86_64_gnullvm 0.52.4", + "windows_x86_64_msvc 0.52.4", ] [[package]] @@ -2475,9 +2451,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" +checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" [[package]] name = "windows_aarch64_msvc" @@ -2493,9 +2469,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" +checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" [[package]] name = "windows_i686_gnu" @@ -2511,9 +2487,9 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" +checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" [[package]] name = "windows_i686_msvc" @@ -2529,9 +2505,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" +checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" [[package]] name = "windows_x86_64_gnu" @@ -2547,9 +2523,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" +checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03" [[package]] name = "windows_x86_64_gnullvm" @@ -2565,9 +2541,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" +checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" [[package]] name = "windows_x86_64_msvc" @@ -2583,15 +2559,15 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" +checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8" [[package]] name = "winit" -version = "0.29.10" +version = "0.29.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c824f11941eeae66ec71111cc2674373c772f482b58939bb4066b642aa2ffcf" +checksum = "2b9d7047a2a569d5a81e3be098dcd8153759909b127477f4397e03cf1006d90a" dependencies = [ "ahash", "android-activity", @@ -2607,7 +2583,7 @@ dependencies = [ "js-sys", "libc", "log", - "memmap2 0.9.3", + "memmap2 0.9.4", "ndk", "ndk-sys", "objc2", @@ -2636,9 +2612,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.5.34" +version = "0.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7cf47b659b318dccbd69cc4797a39ae128f533dce7902a1096044d1967b9c16" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" dependencies = [ "memchr", ] @@ -2663,7 +2639,7 @@ dependencies = [ "as-raw-xcb-connection", "gethostname", "libc", - "libloading 0.8.1", + "libloading 0.8.2", "once_cell", "rustix", "x11rb-protocol", @@ -2700,9 +2676,9 @@ dependencies = [ [[package]] name = "xkbcommon-dl" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6924668544c48c0133152e7eec86d644a056ca3d09275eb8d5cdb9855f9d8699" +checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ "bitflags 2.4.2", "dlib", From 2b1ba23899e76da3fc69dbce162a127c6081ed8a Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Mon, 4 Mar 2024 21:21:32 +0530 Subject: [PATCH 09/69] lots of unnecessary deps but vscode doesn't show any errors --- src/backends/udev.rs | 103 +++++++++++++++++++++++++++++++++++++++++ src/state.rs | 107 ++++++++----------------------------------- 2 files changed, 123 insertions(+), 87 deletions(-) diff --git a/src/backends/udev.rs b/src/backends/udev.rs index 7e2ba1e..44520b0 100644 --- a/src/backends/udev.rs +++ b/src/backends/udev.rs @@ -1,3 +1,106 @@ +use smithay::{ + backend::{ + allocator::{ + dmabuf::{ + AnyError, + Dmabuf, + }, + Allocator, + }, + drm::DrmNode, + input::{ + Event, + InputBackend, + InputEvent, + KeyState, + KeyboardKeyEvent, + }, + renderer::{ + damage::OutputDamageTracker, + element::texture::TextureBuffer, + gles::GlesRenderer, + glow::GlowRenderer, + multigpu::{ + gbm::GbmGlesBackend, + GpuManager, + MultiTexture, + }, + }, + session::libseat::LibSeatSession, + winit::WinitGraphicsBackend, + }, + desktop::{ + layer_map_for_output, + space::SpaceElement, + PopupManager, + }, + input::{ + keyboard::{ + FilterResult, + Keysym, + ModifiersState, + XkbConfig, + }, + Seat, + SeatState, + }, + reexports::{ + calloop::{ + generic::{ + FdWrapper, + Generic, + }, + EventLoop, + Interest, + LoopSignal, + Mode, + PostAction, + }, + wayland_server::{ + backend::{ + ClientData, + ClientId, + DisconnectReason, + }, + Display, + DisplayHandle, + }, + }, + utils::{ + Logical, + Point, + Rectangle, + SERIAL_COUNTER, + }, + wayland::{ + compositor::{ + CompositorClientState, + CompositorState, + }, + dmabuf::{ + DmabufGlobal, + DmabufState, + }, + output::OutputManagerState, + selection::{ + data_device::DataDeviceState, + primary_selection::PrimarySelectionState, + }, + shell::{ + wlr_layer::{ + Layer, + WlrLayerShellState, + }, + xdg::{ + decoration::XdgDecorationState, + XdgShellState, + }, + }, + shm::ShmState, + socket::ListeningSocketSource, + }, +}; + pub struct UdevData { pub session: LibSeatSession, dh: DisplayHandle, diff --git a/src/state.rs b/src/state.rs index 66ba8ba..99f7c36 100644 --- a/src/state.rs +++ b/src/state.rs @@ -1,115 +1,51 @@ use crate::{ decorations::BorderShader, - handlers::input::{ - KeyPattern, - ModFlags, - Mods, - }, - workspaces::{ - FocusTarget, - Workspaces, - }, -}; -use piccolo::{ - self as lua, + handlers::input::{KeyPattern, ModFlags, Mods}, + workspaces::{FocusTarget, Workspaces}, }; +use piccolo::{self as lua}; use smithay::{ backend::{ allocator::{ - dmabuf::{ - AnyError, - Dmabuf, - }, + dmabuf::{AnyError, Dmabuf}, Allocator, }, drm::DrmNode, - input::{ - Event, - InputBackend, - InputEvent, - KeyState, - KeyboardKeyEvent, - }, + input::{Event, InputBackend, InputEvent, KeyState, KeyboardKeyEvent}, renderer::{ damage::OutputDamageTracker, element::texture::TextureBuffer, gles::GlesRenderer, glow::GlowRenderer, - multigpu::{ - gbm::GbmGlesBackend, - GpuManager, - MultiTexture, - }, + multigpu::{gbm::GbmGlesBackend, GpuManager, MultiTexture}, }, session::libseat::LibSeatSession, winit::WinitGraphicsBackend, }, - desktop::{ - layer_map_for_output, - space::SpaceElement, - PopupManager, - }, + desktop::{layer_map_for_output, space::SpaceElement, PopupManager}, input::{ - keyboard::{ - FilterResult, - Keysym, - ModifiersState, - XkbConfig, - }, - Seat, - SeatState, + keyboard::{FilterResult, Keysym, ModifiersState, XkbConfig}, + Seat, SeatState, }, reexports::{ calloop::{ - generic::{ - FdWrapper, - Generic, - }, - EventLoop, - Interest, - LoopSignal, - Mode, - PostAction, + generic::{FdWrapper, Generic}, + EventLoop, Interest, LoopSignal, Mode, PostAction, }, wayland_server::{ - backend::{ - ClientData, - ClientId, - DisconnectReason, - }, - Display, - DisplayHandle, + backend::{ClientData, ClientId, DisconnectReason}, + Display, DisplayHandle, }, }, - utils::{ - Logical, - Point, - Rectangle, - SERIAL_COUNTER, - }, + utils::{Logical, Point, Rectangle, SERIAL_COUNTER}, wayland::{ - compositor::{ - CompositorClientState, - CompositorState, - }, - dmabuf::{ - DmabufGlobal, - DmabufState, - }, + compositor::{CompositorClientState, CompositorState}, + dmabuf::{DmabufGlobal, DmabufState}, output::OutputManagerState, - selection::{ - data_device::DataDeviceState, - primary_selection::PrimarySelectionState, - }, + selection::{data_device::DataDeviceState, primary_selection::PrimarySelectionState}, shell::{ - wlr_layer::{ - Layer, - WlrLayerShellState, - }, - xdg::{ - decoration::XdgDecorationState, - XdgShellState, - }, + wlr_layer::{Layer, WlrLayerShellState}, + xdg::{decoration::XdgDecorationState, XdgShellState}, }, shm::ShmState, socket::ListeningSocketSource, @@ -123,10 +59,7 @@ use std::{ process::Command, rc::Rc, sync::Arc, - time::{ - Duration, - Instant, - }, + time::{Duration, Instant}, }; pub struct StrataState { From 4fb6ca20d9b5bcb55b7f55d4ea642b2fe39550e2 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Mon, 4 Mar 2024 23:00:59 +0530 Subject: [PATCH 10/69] Remove unnecessary imports --- src/backends/udev.rs | 70 +------------------------------------------- 1 file changed, 1 insertion(+), 69 deletions(-) diff --git a/src/backends/udev.rs b/src/backends/udev.rs index 44520b0..dbe18d8 100644 --- a/src/backends/udev.rs +++ b/src/backends/udev.rs @@ -1,3 +1,4 @@ +use std::collections::HashMap; use smithay::{ backend::{ allocator::{ @@ -8,18 +9,9 @@ use smithay::{ Allocator, }, drm::DrmNode, - input::{ - Event, - InputBackend, - InputEvent, - KeyState, - KeyboardKeyEvent, - }, renderer::{ - damage::OutputDamageTracker, element::texture::TextureBuffer, gles::GlesRenderer, - glow::GlowRenderer, multigpu::{ gbm::GbmGlesBackend, GpuManager, @@ -27,77 +19,17 @@ use smithay::{ }, }, session::libseat::LibSeatSession, - winit::WinitGraphicsBackend, - }, - desktop::{ - layer_map_for_output, - space::SpaceElement, - PopupManager, - }, - input::{ - keyboard::{ - FilterResult, - Keysym, - ModifiersState, - XkbConfig, - }, - Seat, - SeatState, }, reexports::{ - calloop::{ - generic::{ - FdWrapper, - Generic, - }, - EventLoop, - Interest, - LoopSignal, - Mode, - PostAction, - }, wayland_server::{ - backend::{ - ClientData, - ClientId, - DisconnectReason, - }, - Display, DisplayHandle, }, }, - utils::{ - Logical, - Point, - Rectangle, - SERIAL_COUNTER, - }, wayland::{ - compositor::{ - CompositorClientState, - CompositorState, - }, dmabuf::{ DmabufGlobal, DmabufState, }, - output::OutputManagerState, - selection::{ - data_device::DataDeviceState, - primary_selection::PrimarySelectionState, - }, - shell::{ - wlr_layer::{ - Layer, - WlrLayerShellState, - }, - xdg::{ - decoration::XdgDecorationState, - XdgShellState, - }, - }, - shm::ShmState, - socket::ListeningSocketSource, }, }; From 0af1bac2207adc2150e178fba39a73be74478227 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Tue, 5 Mar 2024 21:18:01 +0530 Subject: [PATCH 11/69] Fix errors in Cargo.toml --- Cargo.toml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 81d9778..95f573c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,12 +13,8 @@ keywords = [ "compositor", "wayland", "linux", - "linux-utilities", - "wm", - "windows", - "manager", + "window-manager", ] -categories = ["linux-utilities"] [profile.release] strip = true From 61e25a58b81c26db8106471260ab548708999bb8 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Tue, 5 Mar 2024 21:20:04 +0530 Subject: [PATCH 12/69] Update crates --- Cargo.lock | 8 ++++---- Cargo.toml | 24 ++++++++++++------------ 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a40cc7b..7820ece 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1772,18 +1772,18 @@ checksum = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01" [[package]] name = "strum" -version = "0.25.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" +checksum = "723b93e8addf9aa965ebe2d11da6d7540fa2283fcea14b3371ff055f7ba13f5f" dependencies = [ "strum_macros", ] [[package]] name = "strum_macros" -version = "0.25.3" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" +checksum = "7a3417fc93d76740d974a01654a09777cb500428cc874ca9f45edfe0c4d4cd18" dependencies = [ "heck", "proc-macro2", diff --git a/Cargo.toml b/Cargo.toml index 95f573c..fcebea5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,29 +23,29 @@ lto = true codegen-units = 1 [dependencies] -tracing-subscriber = { features = ["env-filter"], version = "0.3.17" } -bitflags = "2.4.1" -colored = "2.0.0" -clap = { version = "4.3.11", features = ["derive"] } -anyhow = "1.0.71" -log = "0.4.19" -tokio = { version = "1.29.1", features = ["full"] } -chrono = "0.4.26" -tracing-appender = "0.2.2" +tracing-subscriber = { features = ["env-filter"], version = "0.3.18" } +bitflags = "2.4.2" +colored = "2.1.0" +clap = { version = "4.5.1", features = ["derive"] } +anyhow = "1.0.80" +log = "0.4.21" +tokio = { version = "1.36.0", features = ["full"] } +chrono = "0.4.34" +tracing-appender = "0.2.3" smithay-drm-extras = { git = "https://github.com/Smithay/smithay.git" } once_cell = "1.19.0" gc-arena = { version = "0.5.0", features = ["allocator-api2", "hashbrown"] } piccolo = { git = "https://github.com/kyren/piccolo.git" } piccolo-util = { git = "https://github.com/kyren/piccolo.git" } -crossbeam-channel = "0.5.8" +crossbeam-channel = "0.5.12" parking_lot = "0.12.1" xdg = "2.5.2" strata-derive = { path = "strata-derive" } strata-core = { path = "strata-core" } smart-default = "0.7.1" -strum = { version = "0.25.0", features = ["derive"] } +strum = { version = "0.26.1", features = ["derive"] } xcursor = "0.3.5" -thiserror = "1.0.56" +thiserror = "1.0.57" tracing = "0.1.40" [dependencies.smithay] From cdd34c422d5f15bbbdcb2e451751a9b74b6b1141 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Tue, 5 Mar 2024 21:43:02 +0530 Subject: [PATCH 13/69] Import UdevData and WinitData Signed-off-by: Anant Narayan --- src/state.rs | 123 ++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 87 insertions(+), 36 deletions(-) diff --git a/src/state.rs b/src/state.rs index 99f7c36..e1431fb 100644 --- a/src/state.rs +++ b/src/state.rs @@ -1,65 +1,116 @@ -use crate::{ - decorations::BorderShader, - handlers::input::{KeyPattern, ModFlags, Mods}, - workspaces::{FocusTarget, Workspaces}, +use std::{ + cell::RefCell, + collections::HashMap, + ffi::OsString, + os::fd::AsRawFd, + process::Command, + rc::Rc, + sync::Arc, + time::{ + Duration, + Instant, + }, }; -use piccolo::{self as lua}; + +use piccolo as lua; use smithay::{ backend::{ - allocator::{ - dmabuf::{AnyError, Dmabuf}, - Allocator, + input::{ + Event, + InputBackend, + InputEvent, + KeyState, + KeyboardKeyEvent, }, - drm::DrmNode, - input::{Event, InputBackend, InputEvent, KeyState, KeyboardKeyEvent}, renderer::{ damage::OutputDamageTracker, - element::texture::TextureBuffer, - gles::GlesRenderer, glow::GlowRenderer, - multigpu::{gbm::GbmGlesBackend, GpuManager, MultiTexture}, }, - session::libseat::LibSeatSession, winit::WinitGraphicsBackend, }, - desktop::{layer_map_for_output, space::SpaceElement, PopupManager}, + desktop::{ + layer_map_for_output, + space::SpaceElement, + PopupManager, + }, input::{ - keyboard::{FilterResult, Keysym, ModifiersState, XkbConfig}, - Seat, SeatState, + keyboard::{ + FilterResult, + Keysym, + ModifiersState, + XkbConfig, + }, + Seat, + SeatState, }, reexports::{ calloop::{ - generic::{FdWrapper, Generic}, - EventLoop, Interest, LoopSignal, Mode, PostAction, + generic::{ + FdWrapper, + Generic, + }, + EventLoop, + Interest, + LoopSignal, + Mode, + PostAction, }, wayland_server::{ - backend::{ClientData, ClientId, DisconnectReason}, - Display, DisplayHandle, + backend::{ + ClientData, + ClientId, + DisconnectReason, + }, + Display, + DisplayHandle, }, }, - utils::{Logical, Point, Rectangle, SERIAL_COUNTER}, + utils::{ + Logical, + Point, + Rectangle, + SERIAL_COUNTER, + }, wayland::{ - compositor::{CompositorClientState, CompositorState}, - dmabuf::{DmabufGlobal, DmabufState}, + compositor::{ + CompositorClientState, + CompositorState, + }, output::OutputManagerState, - selection::{data_device::DataDeviceState, primary_selection::PrimarySelectionState}, + selection::{ + data_device::DataDeviceState, + primary_selection::PrimarySelectionState, + }, shell::{ - wlr_layer::{Layer, WlrLayerShellState}, - xdg::{decoration::XdgDecorationState, XdgShellState}, + wlr_layer::{ + Layer, + WlrLayerShellState, + }, + xdg::{ + decoration::XdgDecorationState, + XdgShellState, + }, }, shm::ShmState, socket::ListeningSocketSource, }, }; -use std::{ - cell::RefCell, - collections::HashMap, - ffi::OsString, - os::fd::AsRawFd, - process::Command, - rc::Rc, - sync::Arc, - time::{Duration, Instant}, + +use crate::{ + backends::{ + udev::UdevData, + winit::WinitData, + }, + decorations::BorderShader, + handlers::input::{ + KeyPattern, + ModFlags, + Mods, + }, + workspaces::{ + FocusTarget, + Workspaces, + }, }; pub struct StrataState { From 75a412aa9206f3c0e2f04ed1e643e3c1aac00dc4 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Tue, 5 Mar 2024 21:49:20 +0530 Subject: [PATCH 14/69] Add BackendData struct Signed-off-by: Anant Narayan --- src/backends/udev.rs | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/backends/udev.rs b/src/backends/udev.rs index dbe18d8..759b81e 100644 --- a/src/backends/udev.rs +++ b/src/backends/udev.rs @@ -1,4 +1,5 @@ use std::collections::HashMap; + use smithay::{ backend::{ allocator::{ @@ -20,19 +21,25 @@ use smithay::{ }, session::libseat::LibSeatSession, }, - reexports::{ - wayland_server::{ - DisplayHandle, - }, - }, - wayland::{ - dmabuf::{ - DmabufGlobal, - DmabufState, - }, + reexports::wayland_server::DisplayHandle, + wayland::dmabuf::{ + DmabufGlobal, + DmabufState, }, }; +struct BackendData { + surfaces: HashMap, + non_desktop_connectors: Vec<(connector::Handle, crtc::Handle)>, + leasing_global: Option, + active_leases: Vec, + gbm: GbmDevice, + drm: DrmDevice, + drm_scanner: DrmScanner, + render_node: DrmNode, + registration_token: RegistrationToken, +} + pub struct UdevData { pub session: LibSeatSession, dh: DisplayHandle, From 32ca1a15105228407daf080e415795910536c969 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Tue, 5 Mar 2024 21:51:07 +0530 Subject: [PATCH 15/69] Add lots of unnecessary imports but they will be removed Signed-off-by: Anant Narayan --- src/backends/udev.rs | 41 ++++++++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/src/backends/udev.rs b/src/backends/udev.rs index 759b81e..c8645e5 100644 --- a/src/backends/udev.rs +++ b/src/backends/udev.rs @@ -7,26 +7,53 @@ use smithay::{ AnyError, Dmabuf, }, + gbm::GbmDevice, Allocator, }, - drm::DrmNode, + drm::{ + DrmDevice, + DrmDeviceFd, + DrmNode, + }, renderer::{ - element::texture::TextureBuffer, + element::{ + texture::TextureBuffer, + AsRenderElements, + }, gles::GlesRenderer, multigpu::{ gbm::GbmGlesBackend, GpuManager, MultiTexture, }, + Renderer, + }, + session::{ + libseat::LibSeatSession, + Session, }, - session::libseat::LibSeatSession, }, - reexports::wayland_server::DisplayHandle, - wayland::dmabuf::{ - DmabufGlobal, - DmabufState, + reexports::{ + calloop::RegistrationToken, + drm::control::{ + connector, + crtc, + }, + wayland_server::DisplayHandle, + }, + wayland::{ + compositor::SurfaceData, + dmabuf::{ + DmabufGlobal, + DmabufState, + }, + drm_lease::{ + DrmLease, + DrmLeaseState, + }, }, }; +use smithay_drm_extras::drm_scanner::DrmScanner; struct BackendData { surfaces: HashMap, From 83a93e4d20a0e34c149f0ed0e04b331476263b3c Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Tue, 5 Mar 2024 21:54:48 +0530 Subject: [PATCH 16/69] Start working on drawing.rs Signed-off-by: Anant Narayan --- src/backends/drawing.rs | 15 +++++++++++++++ src/backends/mod.rs | 4 +++- 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 src/backends/drawing.rs diff --git a/src/backends/drawing.rs b/src/backends/drawing.rs new file mode 100644 index 0000000..d8ef4f0 --- /dev/null +++ b/src/backends/drawing.rs @@ -0,0 +1,15 @@ +use smithay::{ + backend::renderer::{ + element::{ + memory::MemoryRenderBuffer, + AsRenderElements, + }, + Renderer, + }, + input::pointer::CursorImageStatus, +}; + +pub struct PointerElement { + buffer: Option, + status: CursorImageStatus, +} diff --git a/src/backends/mod.rs b/src/backends/mod.rs index 6fd7cb5..9f6d4f8 100644 --- a/src/backends/mod.rs +++ b/src/backends/mod.rs @@ -1,7 +1,9 @@ +use log::error; + pub mod cursor; +mod drawing; pub mod udev; pub mod winit; -use log::error; pub fn init_with_backend(backend_name: &str) { match backend_name { From feb2216306b2f0bd64b3131fbb2397061e23b5ea Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Tue, 5 Mar 2024 21:58:16 +0530 Subject: [PATCH 17/69] Implement render_elements! for PointerElement Signed-off-by: Anant Narayan --- src/backends/drawing.rs | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/src/backends/drawing.rs b/src/backends/drawing.rs index d8ef4f0..ce91369 100644 --- a/src/backends/drawing.rs +++ b/src/backends/drawing.rs @@ -1,15 +1,42 @@ use smithay::{ backend::renderer::{ element::{ - memory::MemoryRenderBuffer, - AsRenderElements, + memory::{ + MemoryRenderBuffer, + MemoryRenderBufferRenderElement, + }, + surface::WaylandSurfaceRenderElement, }, - Renderer, + ImportAll, + ImportMem, }, input::pointer::CursorImageStatus, + render_elements, }; pub struct PointerElement { buffer: Option, status: CursorImageStatus, } + +impl Default for PointerElement { + fn default() -> Self { + Self { buffer: Default::default(), status: CursorImageStatus::default_named() } + } +} + +impl PointerElement { + pub fn set_status(&mut self, status: CursorImageStatus) { + self.status = status; + } + + pub fn set_buffer(&mut self, buffer: MemoryRenderBuffer) { + self.buffer = Some(buffer); + } +} + +render_elements! { + pub PointerRenderElement where R: ImportAll + ImportMem; + Surface=WaylandSurfaceRenderElement, + Memory=MemoryRenderBufferRenderElement, +} From 2581573194889a2deea0f37e3d028e52a0d77354 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Tue, 5 Mar 2024 22:03:18 +0530 Subject: [PATCH 18/69] More stuff! Signed-off-by: Anant Narayan --- Cargo.lock | 32 ++++++++++----------- src/backends/drawing.rs | 61 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 16 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7820ece..38f438f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -872,9 +872,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.68" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" dependencies = [ "wasm-bindgen", ] @@ -2078,9 +2078,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.91" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -2088,9 +2088,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.91" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" dependencies = [ "bumpalo", "log", @@ -2103,9 +2103,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.41" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877b9c3f61ceea0e56331985743b13f3d25c406a7098d45180fb5f09bc19ed97" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" dependencies = [ "cfg-if", "js-sys", @@ -2115,9 +2115,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.91" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2125,9 +2125,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.91" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", @@ -2138,9 +2138,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.91" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" [[package]] name = "wayland-backend" @@ -2294,9 +2294,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.68" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96565907687f7aceb35bc5fc03770a8a0471d82e479f25832f54a0e3f4b28446" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" dependencies = [ "js-sys", "wasm-bindgen", diff --git a/src/backends/drawing.rs b/src/backends/drawing.rs index ce91369..7a5c956 100644 --- a/src/backends/drawing.rs +++ b/src/backends/drawing.rs @@ -6,12 +6,21 @@ use smithay::{ MemoryRenderBufferRenderElement, }, surface::WaylandSurfaceRenderElement, + AsRenderElements, + Kind, }, ImportAll, ImportMem, + Renderer, + Texture, }, input::pointer::CursorImageStatus, render_elements, + utils::{ + Physical, + Point, + Scale, + }, }; pub struct PointerElement { @@ -40,3 +49,55 @@ render_elements! { Surface=WaylandSurfaceRenderElement, Memory=MemoryRenderBufferRenderElement, } + +impl AsRenderElements for PointerElement +where + R: Renderer + ImportAll + ImportMem, +{ + type RenderElement = PointerRenderElement; + fn render_elements( + &self, + renderer: &mut R, + location: Point, + scale: Scale, + alpha: f32, + ) -> Vec + where + E: From>, + { + match &self.status { + CursorImageStatus::Hidden => vec![], + CursorImageStatus::Named(_) => { + if let Some(buffer) = self.buffer.as_ref() { + vec![PointerRenderElement::::from( + MemoryRenderBufferRenderElement::from_buffer( + renderer, + location.to_f64(), + buffer, + None, + None, + None, + Kind::Cursor, + ) + .expect("Lost system pointer buffer"), + ) + .into()] + } else { + vec![] + } + } + CursorImageStatus::Surface(surface) => { + let elements: Vec> = + smithay::backend::renderer::element::surface::render_elements_from_surface_tree( + renderer, + surface, + location, + scale, + alpha, + Kind::Cursor, + ); + elements.into_iter().map(E::from).collect() + } + } + } +} From a09d6bf74f2492b2b062888fe823f56ce58fc511 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Tue, 5 Mar 2024 22:05:58 +0530 Subject: [PATCH 19/69] Cleanup Cargo.toml Signed-off-by: Anant Narayan --- Cargo.lock | 2 +- Cargo.toml | 9 +-------- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 38f438f..8b35122 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1686,7 +1686,7 @@ dependencies = [ [[package]] name = "smithay-drm-extras" version = "0.1.0" -source = "git+https://github.com/Smithay/smithay.git#418190e4992ce642e6bac873307d4fc4fa9a1e89" +source = "git+https://github.com/stratawm/smithay.git#418190e4992ce642e6bac873307d4fc4fa9a1e89" dependencies = [ "drm", "edid-rs", diff --git a/Cargo.toml b/Cargo.toml index fcebea5..2da1b1b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,7 +32,7 @@ log = "0.4.21" tokio = { version = "1.36.0", features = ["full"] } chrono = "0.4.34" tracing-appender = "0.2.3" -smithay-drm-extras = { git = "https://github.com/Smithay/smithay.git" } +smithay-drm-extras = { git = "https://github.com/stratawm/smithay.git" } once_cell = "1.19.0" gc-arena = { version = "0.5.0", features = ["allocator-api2", "hashbrown"] } piccolo = { git = "https://github.com/kyren/piccolo.git" } @@ -54,11 +54,7 @@ git = "https://github.com/stratawm/smithay" version = "0.3.0" rev = "f1e7fc1" features = [ - "backend_winit", "wayland_frontend", - "desktop", - "backend_session_libseat", - "backend_drm", "renderer_multi", "renderer_glow", "backend_drm", @@ -72,8 +68,5 @@ features = [ "backend_x11", "desktop", "use_system_lib", - "renderer_glow", - "renderer_multi", - "wayland_frontend", "xwayland", ] From 0cfd6a0dca7b3e5874fb01ceb6b49e4a96ba9781 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Tue, 5 Mar 2024 22:16:44 +0530 Subject: [PATCH 20/69] More udev.rs Signed-off-by: Anant Narayan --- src/backends/udev.rs | 38 ++++++++++++++++---------------------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/src/backends/udev.rs b/src/backends/udev.rs index c8645e5..9dea1db 100644 --- a/src/backends/udev.rs +++ b/src/backends/udev.rs @@ -2,36 +2,22 @@ use std::collections::HashMap; use smithay::{ backend::{ - allocator::{ - dmabuf::{ - AnyError, - Dmabuf, - }, - gbm::GbmDevice, - Allocator, - }, + allocator::gbm::GbmDevice, drm::{ DrmDevice, DrmDeviceFd, DrmNode, }, renderer::{ - element::{ - texture::TextureBuffer, - AsRenderElements, - }, + element::memory::MemoryRenderBuffer, gles::GlesRenderer, multigpu::{ gbm::GbmGlesBackend, GpuManager, - MultiTexture, }, - Renderer, - }, - session::{ - libseat::LibSeatSession, - Session, + DebugFlags, }, + session::libseat::LibSeatSession, }, reexports::{ calloop::RegistrationToken, @@ -55,6 +41,11 @@ use smithay::{ }; use smithay_drm_extras::drm_scanner::DrmScanner; +use crate::backends::{ + cursor::Cursor, + drawing::PointerElement, +}; + struct BackendData { surfaces: HashMap, non_desktop_connectors: Vec<(connector::Handle, crtc::Handle)>, @@ -72,10 +63,13 @@ pub struct UdevData { dh: DisplayHandle, dmabuf_state: Option<(DmabufState, DmabufGlobal)>, primary_gpu: DrmNode, - allocator: Option>>, gpus: GpuManager>, backends: HashMap, - pointer_images: Vec<(xcursor::parser::Image, TextureBuffer)>, - pointer_element: PointerElement, - pointer_image: crate::backends::cursor::Cursor, + pointer_images: Vec<(xcursor::parser::Image, MemoryRenderBuffer)>, + pointer_element: PointerElement, + #[cfg(feature = "debug")] + fps_texture: Option, + pointer_image: Cursor, + debug_flags: DebugFlags, + keyboards: Vec, } From 509394b6314865836ebb523f6fd89772754f04d5 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Wed, 6 Mar 2024 21:41:21 +0530 Subject: [PATCH 21/69] Cleanup Signed-off-by: Anant Narayan --- src/backends/udev.rs | 45 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/src/backends/udev.rs b/src/backends/udev.rs index 9dea1db..b8e0de8 100644 --- a/src/backends/udev.rs +++ b/src/backends/udev.rs @@ -41,6 +41,49 @@ use smithay::{ }; use smithay_drm_extras::drm_scanner::DrmScanner; +use std::collections::HashMap; + +use smithay::{ + backend::{ + allocator::gbm::GbmDevice, + drm::{ + DrmDevice, + DrmDeviceFd, + DrmNode, + }, + renderer::{ + element::memory::MemoryRenderBuffer, + gles::GlesRenderer, + multigpu::{ + gbm::GbmGlesBackend, + GpuManager, + }, + DebugFlags, + }, + session::libseat::LibSeatSession, + }, + reexports::{ + calloop::RegistrationToken, + drm::control::{ + connector, + crtc, + }, + wayland_server::DisplayHandle, + }, + wayland::{ + compositor::SurfaceData, + dmabuf::{ + DmabufGlobal, + DmabufState, + }, + drm_lease::{ + DrmLease, + DrmLeaseState, + }, + }, +}; +use smithay_drm_extras::drm_scanner::DrmScanner; + use crate::backends::{ cursor::Cursor, drawing::PointerElement, @@ -67,8 +110,6 @@ pub struct UdevData { backends: HashMap, pointer_images: Vec<(xcursor::parser::Image, MemoryRenderBuffer)>, pointer_element: PointerElement, - #[cfg(feature = "debug")] - fps_texture: Option, pointer_image: Cursor, debug_flags: DebugFlags, keyboards: Vec, From 9dff28e66929969681340404e351386a488cf999 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Wed, 6 Mar 2024 21:41:34 +0530 Subject: [PATCH 22/69] Cleanup Signed-off-by: Anant Narayan --- src/backends/udev.rs | 43 ------------------------------------------- 1 file changed, 43 deletions(-) diff --git a/src/backends/udev.rs b/src/backends/udev.rs index b8e0de8..3332b3e 100644 --- a/src/backends/udev.rs +++ b/src/backends/udev.rs @@ -41,49 +41,6 @@ use smithay::{ }; use smithay_drm_extras::drm_scanner::DrmScanner; -use std::collections::HashMap; - -use smithay::{ - backend::{ - allocator::gbm::GbmDevice, - drm::{ - DrmDevice, - DrmDeviceFd, - DrmNode, - }, - renderer::{ - element::memory::MemoryRenderBuffer, - gles::GlesRenderer, - multigpu::{ - gbm::GbmGlesBackend, - GpuManager, - }, - DebugFlags, - }, - session::libseat::LibSeatSession, - }, - reexports::{ - calloop::RegistrationToken, - drm::control::{ - connector, - crtc, - }, - wayland_server::DisplayHandle, - }, - wayland::{ - compositor::SurfaceData, - dmabuf::{ - DmabufGlobal, - DmabufState, - }, - drm_lease::{ - DrmLease, - DrmLeaseState, - }, - }, -}; -use smithay_drm_extras::drm_scanner::DrmScanner; - use crate::backends::{ cursor::Cursor, drawing::PointerElement, From ca5f27ffa4935287eeb7e15f70032c681bf8f6c7 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Wed, 6 Mar 2024 21:41:59 +0530 Subject: [PATCH 23/69] More stuff! Signed-off-by: Anant Narayan --- src/backends/udev.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/backends/udev.rs b/src/backends/udev.rs index 3332b3e..ed4bf7c 100644 --- a/src/backends/udev.rs +++ b/src/backends/udev.rs @@ -58,6 +58,12 @@ struct BackendData { registration_token: RegistrationToken, } +#[derive(Debug, PartialEq)] +struct UdevOutputId { + device_id: DrmNode, + crtc: crtc::Handle, +} + pub struct UdevData { pub session: LibSeatSession, dh: DisplayHandle, From 86a5469878fa7f28225b3c56fe58467d1f4371df Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Wed, 6 Mar 2024 21:43:23 +0530 Subject: [PATCH 24/69] Impl UdevData Signed-off-by: Anant Narayan --- src/backends/udev.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/backends/udev.rs b/src/backends/udev.rs index ed4bf7c..70bb93d 100644 --- a/src/backends/udev.rs +++ b/src/backends/udev.rs @@ -77,3 +77,21 @@ pub struct UdevData { debug_flags: DebugFlags, keyboards: Vec, } + +impl UdevData { + pub fn set_debug_flags(&mut self, flags: DebugFlags) { + if self.debug_flags != flags { + self.debug_flags = flags; + + for (_, backend) in self.backends.iter_mut() { + for (_, surface) in backend.surfaces.iter_mut() { + surface.compositor.set_debug_flags(flags); + } + } + } + } + + pub fn debug_flags(&self) -> DebugFlags { + self.debug_flags + } +} From 3ac053efccbb0abe14e0d41432d7a673eb187bbb Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Wed, 6 Mar 2024 21:56:28 +0530 Subject: [PATCH 25/69] Import stuff in winit.rs Signed-off-by: Anant Narayan --- src/backends/winit.rs | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/src/backends/winit.rs b/src/backends/winit.rs index 5d36f11..bbcaf32 100644 --- a/src/backends/winit.rs +++ b/src/backends/winit.rs @@ -1,22 +1,21 @@ -use crate::{ - bindings, - decorations::BorderShader, - state::{ - self, - StrataComp, - StrataState, - }, -}; -use piccolo::{ - self as lua, +use std::{ + cell::RefCell, + rc::Rc, + time::Duration, }; + +use piccolo as lua; use smithay::{ backend::{ - renderer::damage::OutputDamageTracker, + renderer::{ + damage::OutputDamageTracker, + glow::GlowRenderer, + }, winit::{ self, WinitEvent, WinitEventLoop, + WinitGraphicsBackend, }, }, output::{ @@ -37,10 +36,15 @@ use smithay::{ }, utils::Transform, }; -use std::{ - cell::RefCell, - rc::Rc, - time::Duration, + +use crate::{ + bindings, + decorations::BorderShader, + state::{ + self, + StrataComp, + StrataState, + }, }; pub struct WinitData { From a1237c59e2cb418dbc8945dda5317a1cca501122 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Wed, 6 Mar 2024 21:59:26 +0530 Subject: [PATCH 26/69] Use Backend enum Signed-off-by: Anant Narayan --- src/state.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/state.rs b/src/state.rs index e1431fb..93a02dd 100644 --- a/src/state.rs +++ b/src/state.rs @@ -255,8 +255,7 @@ pub enum Backend { pub struct StrataComp { pub dh: DisplayHandle, - pub backend: WinitGraphicsBackend, - pub damage_tracker: OutputDamageTracker, + pub backend: Backend, pub start_time: Instant, pub loop_signal: LoopSignal, pub compositor_state: CompositorState, From c9cf0d1668d6843d66e0d0059a8a68a050956f40 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Wed, 6 Mar 2024 22:02:59 +0530 Subject: [PATCH 27/69] Fix errors with new function Signed-off-by: Anant Narayan --- src/backends/winit.rs | 9 +-------- src/state.rs | 25 ++++++++----------------- 2 files changed, 9 insertions(+), 25 deletions(-) diff --git a/src/backends/winit.rs b/src/backends/winit.rs index bbcaf32..1242bf6 100644 --- a/src/backends/winit.rs +++ b/src/backends/winit.rs @@ -71,14 +71,7 @@ pub fn init_winit() { output.change_current_state(Some(mode), Some(Transform::Flipped180), None, Some((0, 0).into())); output.set_preferred(mode); let damage_tracked_renderer = OutputDamageTracker::from_output(&output); - let mut comp = StrataComp::new( - &event_loop, - &display, - socket, - "winit".to_string(), - backend, - damage_tracked_renderer, - ); + let mut comp = StrataComp::new(&event_loop, &display, socket, "winit".to_string()); BorderShader::init(comp.backend.renderer()); for workspace in comp.workspaces.iter() { workspace.add_output(output.clone()); diff --git a/src/state.rs b/src/state.rs index 93a02dd..c614f96 100644 --- a/src/state.rs +++ b/src/state.rs @@ -14,19 +14,12 @@ use std::{ use piccolo as lua; use smithay::{ - backend::{ - input::{ - Event, - InputBackend, - InputEvent, - KeyState, - KeyboardKeyEvent, - }, - renderer::{ - damage::OutputDamageTracker, - glow::GlowRenderer, - }, - winit::WinitGraphicsBackend, + backend::input::{ + Event, + InputBackend, + InputEvent, + KeyState, + KeyboardKeyEvent, }, desktop::{ layer_map_for_output, @@ -281,8 +274,7 @@ impl StrataComp { display: &Display, socket_name: OsString, seat_name: String, - backend: WinitGraphicsBackend, - damage_tracker: OutputDamageTracker, + backend: Backend, ) -> Self { let start_time = Instant::now(); let dh = display.handle(); @@ -318,7 +310,6 @@ impl StrataComp { StrataComp { dh, backend, - damage_tracker, start_time, socket_name, compositor_state, @@ -341,7 +332,7 @@ impl StrataComp { fn winit_render(&mut self) { let render_elements = self.workspaces.current().render_elements(self.backend.renderer()); - self.damage_tracker + self.backend .render_output(self.backend.renderer(), 0, &render_elements, [0.1, 0.1, 0.1, 1.0]) .unwrap(); } From 1fb69bdbed198297ffacfacee166e2e4fb8ee726 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Wed, 6 Mar 2024 22:05:30 +0530 Subject: [PATCH 28/69] Fix errors with new function Signed-off-by: Anant Narayan --- src/backends/winit.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/backends/winit.rs b/src/backends/winit.rs index 1242bf6..aa23970 100644 --- a/src/backends/winit.rs +++ b/src/backends/winit.rs @@ -42,6 +42,7 @@ use crate::{ decorations::BorderShader, state::{ self, + Backend, StrataComp, StrataState, }, @@ -70,8 +71,14 @@ pub fn init_winit() { let _global = output.create_global::(&display_handle); output.change_current_state(Some(mode), Some(Transform::Flipped180), None, Some((0, 0).into())); output.set_preferred(mode); - let damage_tracked_renderer = OutputDamageTracker::from_output(&output); - let mut comp = StrataComp::new(&event_loop, &display, socket, "winit".to_string()); + let damage_tracker = OutputDamageTracker::from_output(&output); + let mut comp = StrataComp::new( + &event_loop, + &display, + socket, + "winit".to_string(), + Backend::Winit(WinitData { backend, damage_tracker }), + ); BorderShader::init(comp.backend.renderer()); for workspace in comp.workspaces.iter() { workspace.add_output(output.clone()); From 8009e5c764f00d1fc9500ce927ce701d47f5080e Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Wed, 6 Mar 2024 22:31:44 +0530 Subject: [PATCH 29/69] Move Backend enum to backends/mod.rs Signed-off-by: Anant Narayan --- src/backends/mod.rs | 10 ++++++++++ src/state.rs | 10 +--------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/backends/mod.rs b/src/backends/mod.rs index 9f6d4f8..aecba91 100644 --- a/src/backends/mod.rs +++ b/src/backends/mod.rs @@ -1,10 +1,20 @@ use log::error; +use crate::backends::{ + udev::UdevData, + winit::WinitData, +}; + pub mod cursor; mod drawing; pub mod udev; pub mod winit; +pub enum Backend { + Winit(WinitData), + Udev(UdevData), +} + pub fn init_with_backend(backend_name: &str) { match backend_name { "winit" => { diff --git a/src/state.rs b/src/state.rs index c614f96..86c7827 100644 --- a/src/state.rs +++ b/src/state.rs @@ -90,10 +90,7 @@ use smithay::{ }; use crate::{ - backends::{ - udev::UdevData, - winit::WinitData, - }, + backends::Backend, decorations::BorderShader, handlers::input::{ KeyPattern, @@ -241,11 +238,6 @@ impl StrataState { } } -pub enum Backend { - Winit(WinitData), - Udev(UdevData), -} - pub struct StrataComp { pub dh: DisplayHandle, pub backend: Backend, From 473027f5fd8e2d709f0adb01ed7b7e1f430538bf Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Wed, 6 Mar 2024 22:34:36 +0530 Subject: [PATCH 30/69] Impl getter functions for Backend Signed-off-by: Anant Narayan --- src/backends/mod.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/backends/mod.rs b/src/backends/mod.rs index aecba91..c508099 100644 --- a/src/backends/mod.rs +++ b/src/backends/mod.rs @@ -15,6 +15,22 @@ pub enum Backend { Udev(UdevData), } +impl Backend { + pub fn winit(&mut self) -> &mut WinitData { + match self { + Backend::Winit(data) => data, + _ => unreachable!("Tried to retrieve Winit backend when not initialized with it."), + } + } + + pub fn udev(&mut self) -> &mut UdevData { + match self { + Backend::Udev(data) => data, + _ => unreachable!("Tried to retrieve Winit backend when not initialized with it."), + } + } +} + pub fn init_with_backend(backend_name: &str) { match backend_name { "winit" => { From a69058f9b7d3fb5c6e31a77be951997370fb78a6 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Wed, 6 Mar 2024 22:35:09 +0530 Subject: [PATCH 31/69] Fix copy-pasta mistake Signed-off-by: Anant Narayan --- src/backends/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backends/mod.rs b/src/backends/mod.rs index c508099..e894b4a 100644 --- a/src/backends/mod.rs +++ b/src/backends/mod.rs @@ -26,7 +26,7 @@ impl Backend { pub fn udev(&mut self) -> &mut UdevData { match self { Backend::Udev(data) => data, - _ => unreachable!("Tried to retrieve Winit backend when not initialized with it."), + _ => unreachable!("Tried to retrieve Udev backend when not initialized with it."), } } } From d993c5ec98c48be85bd5efcd57e3c2f5cf3b7ad3 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Wed, 6 Mar 2024 22:43:33 +0530 Subject: [PATCH 32/69] idk Signed-off-by: Anant Narayan --- src/backends/udev.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/backends/udev.rs b/src/backends/udev.rs index 70bb93d..a10bb53 100644 --- a/src/backends/udev.rs +++ b/src/backends/udev.rs @@ -54,6 +54,7 @@ struct BackendData { gbm: GbmDevice, drm: DrmDevice, drm_scanner: DrmScanner, + render_node: DrmNode, registration_token: RegistrationToken, } From 38f77c862205ea46fe4ffa1b97ccb3d2aca99fe8 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Thu, 7 Mar 2024 21:46:53 +0530 Subject: [PATCH 33/69] Add SPDX license identifier Signed-off-by: Anant Narayan --- src/bindings.rs | 7 ++++--- src/handlers/mod.rs | 2 +- src/layouts/mod.rs | 2 +- src/main.rs | 30 +++++++++++++++++------------- src/state.rs | 3 +++ src/tiling.rs | 22 +++++++++++----------- src/util.rs | 3 +++ src/workspaces.rs | 27 ++++++++++++++++----------- 8 files changed, 56 insertions(+), 40 deletions(-) diff --git a/src/bindings.rs b/src/bindings.rs index 5a1fe76..6902740 100644 --- a/src/bindings.rs +++ b/src/bindings.rs @@ -1,12 +1,13 @@ +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + use std::{ cell::RefCell, process::Command, rc::Rc, }; -use piccolo::{ - self as lua, -}; +use piccolo as lua; use crate::state::StrataComp; diff --git a/src/handlers/mod.rs b/src/handlers/mod.rs index aa8e431..b143655 100644 --- a/src/handlers/mod.rs +++ b/src/handlers/mod.rs @@ -1,4 +1,4 @@ pub mod compositor; pub mod focus; pub mod input; -pub mod xdg_shell; \ No newline at end of file +pub mod xdg_shell; diff --git a/src/layouts/mod.rs b/src/layouts/mod.rs index aa4d0c9..03c60e0 100644 --- a/src/layouts/mod.rs +++ b/src/layouts/mod.rs @@ -1 +1 @@ -pub mod dwindle; \ No newline at end of file +pub mod dwindle; diff --git a/src/main.rs b/src/main.rs index 9ebbda2..fa49085 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,23 +1,28 @@ +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + +use std::{ + error::Error, + io::stdout, +}; + +use chrono::Local; +use clap::Parser; +use log::info; +use tracing_subscriber::fmt::writer::MakeWriterExt; + +use crate::backends::init_with_backend; + pub mod backends; +pub mod bindings; pub mod config; pub mod decorations; pub mod handlers; pub mod layouts; pub mod state; pub mod tiling; -pub mod workspaces; -pub mod bindings; pub mod util; - -use crate::backends::init_with_backend; -use chrono::Local; -use clap::Parser; -use log::info; -use std::{ - error::Error, - io::stdout, -}; -use tracing_subscriber::fmt::writer::MakeWriterExt; +pub mod workspaces; #[derive(Parser, Debug)] #[command(author, version, about, long_about = None)] @@ -52,7 +57,6 @@ async fn main() -> Result<(), Box> { tracing_subscriber::fmt().with_writer(log_appender).init(); } - info!("Initializing Strata WM"); info!("Parsing config..."); info!("Initializing socket interface..."); diff --git a/src/state.rs b/src/state.rs index 86c7827..87c3708 100644 --- a/src/state.rs +++ b/src/state.rs @@ -1,3 +1,6 @@ +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + use std::{ cell::RefCell, collections::HashMap, diff --git a/src/tiling.rs b/src/tiling.rs index bf84a3f..2d1f4bb 100644 --- a/src/tiling.rs +++ b/src/tiling.rs @@ -1,16 +1,11 @@ +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + use std::{ cell::RefCell, rc::Rc, }; -use crate::{ - workspaces::{ - Dwindle, - HorizontalOrVertical, - StrataWindow, - Workspace, - }, -}; use smithay::{ desktop::layer_map_for_output, utils::{ @@ -22,10 +17,15 @@ use smithay::{ }, }; +use crate::workspaces::{ + Dwindle, + HorizontalOrVertical, + StrataWindow, + Workspace, +}; + pub fn refresh_geometry(workspace: &mut Workspace) { - let gaps = { - (3, 3) - }; + let gaps = { (3, 3) }; let output = layer_map_for_output(workspace.outputs().next().unwrap()).non_exclusive_zone(); let output_full = workspace.outputs().next().unwrap().current_mode().unwrap().size; diff --git a/src/util.rs b/src/util.rs index 33b81e0..7c6d410 100644 --- a/src/util.rs +++ b/src/util.rs @@ -1,3 +1,6 @@ +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + #[macro_export] macro_rules! enum_table { ( diff --git a/src/workspaces.rs b/src/workspaces.rs index 2d24364..48a54b5 100644 --- a/src/workspaces.rs +++ b/src/workspaces.rs @@ -1,11 +1,14 @@ -use crate::{ - decorations::{ - AsGlowRenderer, - BorderShader, - CustomRenderElements, +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + +use std::{ + cell::{ + Ref, + RefCell, }, - tiling::refresh_geometry, + rc::Rc, }; + use smithay::{ backend::renderer::{ element::AsRenderElements, @@ -30,12 +33,14 @@ use smithay::{ }, wayland::shell::wlr_layer::Layer, }; -use std::{ - cell::{ - Ref, - RefCell, + +use crate::{ + decorations::{ + AsGlowRenderer, + BorderShader, + CustomRenderElements, }, - rc::Rc, + tiling::refresh_geometry, }; pub struct StrataWindow { From 4d9e6261d46c7b4654d2f9d8026e05b8c6bfe9a1 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Thu, 7 Mar 2024 21:48:08 +0530 Subject: [PATCH 34/69] Add SPDX license identifier Signed-off-by: Anant Narayan --- src/layouts/dwindle.rs | 6 +++++- src/layouts/mod.rs | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/layouts/dwindle.rs b/src/layouts/dwindle.rs index ee36ed8..2d6744f 100644 --- a/src/layouts/dwindle.rs +++ b/src/layouts/dwindle.rs @@ -1,9 +1,13 @@ -use smithay::desktop::Window; +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + use std::{ cell::RefCell, rc::Rc, }; +use smithay::desktop::Window; + use crate::workspaces::{ Dwindle, HorizontalOrVertical, diff --git a/src/layouts/mod.rs b/src/layouts/mod.rs index 03c60e0..1ac92e4 100644 --- a/src/layouts/mod.rs +++ b/src/layouts/mod.rs @@ -1 +1,4 @@ +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + pub mod dwindle; From 316f2d00037b8da97c5f9239971f20a3a037897c Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Thu, 7 Mar 2024 21:53:20 +0530 Subject: [PATCH 35/69] Add SPDX license identifier Signed-off-by: Anant Narayan --- src/handlers/compositor.rs | 22 +++++++++++++--------- src/handlers/focus.rs | 12 ++++++++---- src/handlers/mod.rs | 3 +++ src/handlers/xdg_shell.rs | 25 +++++++++++++++---------- 4 files changed, 39 insertions(+), 23 deletions(-) diff --git a/src/handlers/compositor.rs b/src/handlers/compositor.rs index f6302f1..c1e2cba 100644 --- a/src/handlers/compositor.rs +++ b/src/handlers/compositor.rs @@ -1,12 +1,6 @@ -use crate::{ - handlers::xdg_shell::handle_commit, - state::{ - ClientState, - StrataComp, - }, - tiling::refresh_geometry, - workspaces::FocusTarget, -}; +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + use smithay::{ backend::renderer::utils::on_commit_buffer_handler, delegate_compositor, @@ -69,6 +63,16 @@ use smithay::{ }, }; +use crate::{ + handlers::xdg_shell::handle_commit, + state::{ + ClientState, + StrataComp, + }, + tiling::refresh_geometry, + workspaces::FocusTarget, +}; + impl CompositorHandler for StrataComp { fn compositor_state(&mut self) -> &mut CompositorState { &mut self.compositor_state diff --git a/src/handlers/focus.rs b/src/handlers/focus.rs index 41d9006..8ed7aa9 100644 --- a/src/handlers/focus.rs +++ b/src/handlers/focus.rs @@ -1,7 +1,6 @@ -use crate::{ - state::StrataComp, - workspaces::FocusTarget, -}; +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + use smithay::desktop::Window; pub use smithay::{ backend::input::KeyState, @@ -36,6 +35,11 @@ pub use smithay::{ wayland::seat::WaylandFocus, }; +use crate::{ + state::StrataComp, + workspaces::FocusTarget, +}; + impl IsAlive for FocusTarget { fn alive(&self) -> bool { match self { diff --git a/src/handlers/mod.rs b/src/handlers/mod.rs index b143655..0b5beb8 100644 --- a/src/handlers/mod.rs +++ b/src/handlers/mod.rs @@ -1,3 +1,6 @@ +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + pub mod compositor; pub mod focus; pub mod input; diff --git a/src/handlers/xdg_shell.rs b/src/handlers/xdg_shell.rs index 97fd9ed..e1342a1 100644 --- a/src/handlers/xdg_shell.rs +++ b/src/handlers/xdg_shell.rs @@ -1,10 +1,12 @@ -use crate::{ - state::StrataComp, - workspaces::{ - StrataWindow, - Workspaces, - }, +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + +use std::{ + cell::RefCell, + rc::Rc, + sync::Mutex, }; + use log::warn; use smithay::{ delegate_xdg_decoration, @@ -44,10 +46,13 @@ use smithay::{ }, }, }; -use std::{ - cell::RefCell, - rc::Rc, - sync::Mutex, + +use crate::{ + state::StrataComp, + workspaces::{ + StrataWindow, + Workspaces, + }, }; impl XdgShellHandler for StrataComp { From 964594d8b399543c9b908c57322207558f1eb4d8 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Thu, 7 Mar 2024 22:00:32 +0530 Subject: [PATCH 36/69] Add identifier to more files --- .gitignore | 1 + src/handlers/input.rs | 3 +++ 2 files changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index fcbd4f6..011eeca 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ /src/libs/ctl.rs /.rtx.toml /*scratch* +/.idea \ No newline at end of file diff --git a/src/handlers/input.rs b/src/handlers/input.rs index 3889a79..ee2df33 100644 --- a/src/handlers/input.rs +++ b/src/handlers/input.rs @@ -1,3 +1,6 @@ +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + use crate::{ enum_table, state::StrataComp, From c5d534eff0018fc74a3b60ec67a1c24ffcc5c1cd Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Thu, 7 Mar 2024 22:02:19 +0530 Subject: [PATCH 37/69] Add identifiers to more files --- src/decorations/borders.rs | 3 +++ src/decorations/mod.rs | 3 +++ src/decorations/shaders/borders.frag | 3 +++ src/decorations/shaders/rounded_corners.frag | 3 +++ 4 files changed, 12 insertions(+) diff --git a/src/decorations/borders.rs b/src/decorations/borders.rs index a9122fd..d06b2be 100644 --- a/src/decorations/borders.rs +++ b/src/decorations/borders.rs @@ -1,3 +1,6 @@ +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + use crate::decorations::BorderShader; use smithay::{ backend::renderer::{ diff --git a/src/decorations/mod.rs b/src/decorations/mod.rs index 1e469f4..05346d8 100644 --- a/src/decorations/mod.rs +++ b/src/decorations/mod.rs @@ -1,3 +1,6 @@ +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + mod borders; use smithay::{ diff --git a/src/decorations/shaders/borders.frag b/src/decorations/shaders/borders.frag index 8810653..a027ede 100644 --- a/src/decorations/shaders/borders.frag +++ b/src/decorations/shaders/borders.frag @@ -1,3 +1,6 @@ +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + precision mediump float; uniform vec2 size; varying vec2 v_coords; diff --git a/src/decorations/shaders/rounded_corners.frag b/src/decorations/shaders/rounded_corners.frag index 5c5668f..07ca45e 100644 --- a/src/decorations/shaders/rounded_corners.frag +++ b/src/decorations/shaders/rounded_corners.frag @@ -1,3 +1,6 @@ +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + precision mediump float; uniform vec2 size; varying vec2 v_coords; From 8fd5424b3d85d1025ebdc83eda0e6e35e48aab69 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Thu, 7 Mar 2024 22:03:35 +0530 Subject: [PATCH 38/69] Add identifiers to all files --- src/backends/mod.rs | 3 +++ src/backends/winit.rs | 3 +++ src/bindings/input/key.rs | 3 +++ src/bindings/input/mod.rs | 3 +++ src/bindings/input/modflags.rs | 3 +++ 5 files changed, 15 insertions(+) diff --git a/src/backends/mod.rs b/src/backends/mod.rs index e894b4a..9e707b6 100644 --- a/src/backends/mod.rs +++ b/src/backends/mod.rs @@ -1,3 +1,6 @@ +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + use log::error; use crate::backends::{ diff --git a/src/backends/winit.rs b/src/backends/winit.rs index aa23970..f0a9f52 100644 --- a/src/backends/winit.rs +++ b/src/backends/winit.rs @@ -1,3 +1,6 @@ +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + use std::{ cell::RefCell, rc::Rc, diff --git a/src/bindings/input/key.rs b/src/bindings/input/key.rs index 3a16556..78d2662 100644 --- a/src/bindings/input/key.rs +++ b/src/bindings/input/key.rs @@ -1,3 +1,6 @@ +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + use std::{ cell::RefCell, rc::Rc, diff --git a/src/bindings/input/mod.rs b/src/bindings/input/mod.rs index b01374a..f88816e 100644 --- a/src/bindings/input/mod.rs +++ b/src/bindings/input/mod.rs @@ -1,3 +1,6 @@ +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + mod key; mod modflags; diff --git a/src/bindings/input/modflags.rs b/src/bindings/input/modflags.rs index 3f1417b..1507240 100644 --- a/src/bindings/input/modflags.rs +++ b/src/bindings/input/modflags.rs @@ -1,3 +1,6 @@ +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + use std::{ cell::RefCell, rc::Rc, From 3e0e65e5f6dfe724a688c6c87643960ecb8f20a4 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Tue, 6 Feb 2024 11:08:04 +0530 Subject: [PATCH 39/69] Start working on Udev --- src/state.rs | 62 +++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 56 insertions(+), 6 deletions(-) diff --git a/src/state.rs b/src/state.rs index 87c3708..9bc94cd 100644 --- a/src/state.rs +++ b/src/state.rs @@ -17,12 +17,35 @@ use std::{ use piccolo as lua; use smithay::{ - backend::input::{ - Event, - InputBackend, - InputEvent, - KeyState, - KeyboardKeyEvent, + backend::{ + allocator::{ + dmabuf::{ + AnyError, + Dmabuf, + }, + Allocator, + }, + drm::DrmNode, + input::{ + Event, + InputBackend, + InputEvent, + KeyState, + KeyboardKeyEvent, + }, + renderer::{ + damage::OutputDamageTracker, + element::texture::TextureBuffer, + gles::GlesRenderer, + glow::GlowRenderer, + multigpu::{ + gbm::GbmGlesBackend, + GpuManager, + MultiTexture, + }, + }, + session::libseat::LibSeatSession, + winit::WinitGraphicsBackend, }, desktop::{ layer_map_for_output, @@ -72,6 +95,10 @@ use smithay::{ CompositorClientState, CompositorState, }, + dmabuf::{ + DmabufGlobal, + DmabufState, + }, output::OutputManagerState, selection::{ data_device::DataDeviceState, @@ -241,6 +268,29 @@ impl StrataState { } } +pub struct WinitData { + backend: WinitGraphicsBackend, + damage_tracker: OutputDamageTracker, +} + +pub struct UdevData { + pub session: LibSeatSession, + dh: DisplayHandle, + dmabuf_state: Option<(DmabufState, DmabufGlobal)>, + primary_gpu: DrmNode, + allocator: Option>>, + gpus: GpuManager>, + backends: HashMap, + pointer_images: Vec<(xcursor::parser::Image, TextureBuffer)>, + pointer_element: PointerElement, + pointer_image: crate::cursor::Cursor, +} + +pub enum Backend { + Winit(WinitData), + Udev(UdevData), +} + pub struct StrataComp { pub dh: DisplayHandle, pub backend: Backend, From 30a105da09f421ae9df2df664d468bb7680abc2c Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Tue, 6 Feb 2024 11:16:41 +0530 Subject: [PATCH 40/69] Add cursor --- src/backends/cursor.rs | 91 ++++++++++++++++++++++++++++++++++++++++++ src/backends/mod.rs | 1 + src/state.rs | 2 +- 3 files changed, 93 insertions(+), 1 deletion(-) diff --git a/src/backends/cursor.rs b/src/backends/cursor.rs index f6ab946..bf129d3 100644 --- a/src/backends/cursor.rs +++ b/src/backends/cursor.rs @@ -19,6 +19,97 @@ pub struct Cursor { size: u32, } +impl Cursor { + pub fn load() -> Cursor { + let name = std::env::var("XCURSOR_THEME").ok().unwrap_or_else(|| "default".into()); + let size = std::env::var("XCURSOR_SIZE").ok().and_then(|s| s.parse().ok()).unwrap_or(24); + + let theme = CursorTheme::load(&name); + let icons = load_icon(&theme) + .map_err(|err| warn!("Unable to load xcursor: {}, using fallback cursor", err)) + .unwrap_or_else(|_| { + vec![Image { + size: 32, + width: 64, + height: 64, + xhot: 1, + yhot: 1, + delay: 1, + pixels_rgba: Vec::from(FALLBACK_CURSOR_DATA), + pixels_argb: vec![], //unused + }] + }); + + Cursor { icons, size } + } + + pub fn get_image(&self, scale: u32, time: Duration) -> Image { + let size = self.size * scale; + frame(time.as_millis() as u32, size, &self.icons) + } +} + +fn nearest_images(size: u32, images: &[Image]) -> impl Iterator { + let nearest_image = + images.iter().min_by_key(|image| (size as i32 - image.size as i32).abs()).unwrap(); + + images.iter().filter(move |image| { + image.width == nearest_image.width && image.height == nearest_image.height + }) +} + +fn frame(mut millis: u32, size: u32, images: &[Image]) -> Image { + let total = nearest_images(size, images).fold(0, |acc, image| acc + image.delay); + millis %= total; + + for img in nearest_images(size, images) { + if millis < img.delay { + return img.clone(); + } + millis -= img.delay; + } + + unreachable!() +} + +#[derive(thiserror::Error, Debug)] +enum Error { + #[error("Theme has no default cursor")] + NoDefaultCursor, + #[error("Error opening xcursor file: {0}")] + File(#[from] std::io::Error), + #[error("Failed to parse XCursor file")] + Parse, +} + +fn load_icon(theme: &CursorTheme) -> Result, Error> { + let icon_path = theme.load_icon("default").ok_or(Error::NoDefaultCursor)?; + let mut cursor_file = std::fs::File::open(icon_path)?; + let mut cursor_data = Vec::new(); + cursor_file.read_to_end(&mut cursor_data)?; + parse_xcursor(&cursor_data).ok_or(Error::Parse) +} +use std::{ + io::Read, + time::Duration, +}; + +use tracing::warn; +use xcursor::{ + parser::{ + parse_xcursor, + Image, + }, + CursorTheme, +}; + +static FALLBACK_CURSOR_DATA: &[u8] = include_bytes!("../resources/cursor.rgba"); + +pub struct Cursor { + icons: Vec, + size: u32, +} + impl Cursor { pub fn load() -> Cursor { let name = std::env::var("XCURSOR_THEME").ok().unwrap_or_else(|| "default".into()); diff --git a/src/backends/mod.rs b/src/backends/mod.rs index 9e707b6..ade0a2f 100644 --- a/src/backends/mod.rs +++ b/src/backends/mod.rs @@ -1,6 +1,7 @@ // Copyright 2023 the Strata authors // SPDX-License-Identifier: GPL-3.0-or-later +pub mod cursor; use log::error; use crate::backends::{ diff --git a/src/state.rs b/src/state.rs index 9bc94cd..cc5705a 100644 --- a/src/state.rs +++ b/src/state.rs @@ -283,7 +283,7 @@ pub struct UdevData { backends: HashMap, pointer_images: Vec<(xcursor::parser::Image, TextureBuffer)>, pointer_element: PointerElement, - pointer_image: crate::cursor::Cursor, + pointer_image: crate::backends::cursor::Cursor, } pub enum Backend { From fd97a552a6ef8dd34e5eefe5ad85b545e9d8756b Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Mon, 4 Mar 2024 20:01:20 +0530 Subject: [PATCH 41/69] formatting --- src/state.rs | 92 ++++++++++------------------------------------------ 1 file changed, 17 insertions(+), 75 deletions(-) diff --git a/src/state.rs b/src/state.rs index cc5705a..dec3a26 100644 --- a/src/state.rs +++ b/src/state.rs @@ -19,100 +19,45 @@ use piccolo as lua; use smithay::{ backend::{ allocator::{ - dmabuf::{ - AnyError, - Dmabuf, - }, + dmabuf::{AnyError, Dmabuf}, Allocator, }, drm::DrmNode, - input::{ - Event, - InputBackend, - InputEvent, - KeyState, - KeyboardKeyEvent, - }, + input::{Event, InputBackend, InputEvent, KeyState, KeyboardKeyEvent}, renderer::{ damage::OutputDamageTracker, element::texture::TextureBuffer, gles::GlesRenderer, glow::GlowRenderer, - multigpu::{ - gbm::GbmGlesBackend, - GpuManager, - MultiTexture, - }, + multigpu::{gbm::GbmGlesBackend, GpuManager, MultiTexture}, }, session::libseat::LibSeatSession, winit::WinitGraphicsBackend, }, - desktop::{ - layer_map_for_output, - space::SpaceElement, - PopupManager, - }, + desktop::{layer_map_for_output, space::SpaceElement, PopupManager}, input::{ - keyboard::{ - FilterResult, - Keysym, - ModifiersState, - XkbConfig, - }, - Seat, - SeatState, + keyboard::{FilterResult, Keysym, ModifiersState, XkbConfig}, + Seat, SeatState, }, reexports::{ calloop::{ - generic::{ - FdWrapper, - Generic, - }, - EventLoop, - Interest, - LoopSignal, - Mode, - PostAction, + generic::{FdWrapper, Generic}, + EventLoop, Interest, LoopSignal, Mode, PostAction, }, wayland_server::{ - backend::{ - ClientData, - ClientId, - DisconnectReason, - }, - Display, - DisplayHandle, + backend::{ClientData, ClientId, DisconnectReason}, + Display, DisplayHandle, }, }, - utils::{ - Logical, - Point, - Rectangle, - SERIAL_COUNTER, - }, + utils::{Logical, Point, Rectangle, SERIAL_COUNTER}, wayland::{ - compositor::{ - CompositorClientState, - CompositorState, - }, - dmabuf::{ - DmabufGlobal, - DmabufState, - }, + compositor::{CompositorClientState, CompositorState}, + dmabuf::{DmabufGlobal, DmabufState}, output::OutputManagerState, - selection::{ - data_device::DataDeviceState, - primary_selection::PrimarySelectionState, - }, + selection::{data_device::DataDeviceState, primary_selection::PrimarySelectionState}, shell::{ - wlr_layer::{ - Layer, - WlrLayerShellState, - }, - xdg::{ - decoration::XdgDecorationState, - XdgShellState, - }, + wlr_layer::{Layer, WlrLayerShellState}, + xdg::{decoration::XdgDecorationState, XdgShellState}, }, shm::ShmState, socket::ListeningSocketSource, @@ -127,10 +72,7 @@ use crate::{ ModFlags, Mods, }, - workspaces::{ - FocusTarget, - Workspaces, - }, + workspaces::{FocusTarget, Workspaces}, }; pub struct StrataState { From 332c4026732e47a3fc9568c116d952423a25fdfc Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Mon, 4 Mar 2024 20:06:12 +0530 Subject: [PATCH 42/69] start working on udev backend --- src/backends/mod.rs | 1 + src/backends/udev.rs | 12 ++++++ src/state.rs | 87 ++++++++++++++++++++++++++++++++++++-------- 3 files changed, 84 insertions(+), 16 deletions(-) diff --git a/src/backends/mod.rs b/src/backends/mod.rs index ade0a2f..2fc8413 100644 --- a/src/backends/mod.rs +++ b/src/backends/mod.rs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later pub mod cursor; +pub mod udev; use log::error; use crate::backends::{ diff --git a/src/backends/udev.rs b/src/backends/udev.rs index a10bb53..4fa3e76 100644 --- a/src/backends/udev.rs +++ b/src/backends/udev.rs @@ -1,3 +1,15 @@ +pub struct UdevData { + pub session: LibSeatSession, + dh: DisplayHandle, + dmabuf_state: Option<(DmabufState, DmabufGlobal)>, + primary_gpu: DrmNode, + allocator: Option>>, + gpus: GpuManager>, + backends: HashMap, + pointer_images: Vec<(xcursor::parser::Image, TextureBuffer)>, + pointer_element: PointerElement, + pointer_image: crate::backends::cursor::Cursor, +} use std::collections::HashMap; use smithay::{ diff --git a/src/state.rs b/src/state.rs index dec3a26..e9ac0da 100644 --- a/src/state.rs +++ b/src/state.rs @@ -19,45 +19,100 @@ use piccolo as lua; use smithay::{ backend::{ allocator::{ - dmabuf::{AnyError, Dmabuf}, + dmabuf::{ + AnyError, + Dmabuf, + }, Allocator, }, drm::DrmNode, - input::{Event, InputBackend, InputEvent, KeyState, KeyboardKeyEvent}, + input::{ + Event, + InputBackend, + InputEvent, + KeyState, + KeyboardKeyEvent, + }, renderer::{ damage::OutputDamageTracker, element::texture::TextureBuffer, gles::GlesRenderer, glow::GlowRenderer, - multigpu::{gbm::GbmGlesBackend, GpuManager, MultiTexture}, + multigpu::{ + gbm::GbmGlesBackend, + GpuManager, + MultiTexture, + }, }, session::libseat::LibSeatSession, winit::WinitGraphicsBackend, }, - desktop::{layer_map_for_output, space::SpaceElement, PopupManager}, + desktop::{ + layer_map_for_output, + space::SpaceElement, + PopupManager, + }, input::{ - keyboard::{FilterResult, Keysym, ModifiersState, XkbConfig}, - Seat, SeatState, + keyboard::{ + FilterResult, + Keysym, + ModifiersState, + XkbConfig, + }, + Seat, + SeatState, }, reexports::{ calloop::{ - generic::{FdWrapper, Generic}, - EventLoop, Interest, LoopSignal, Mode, PostAction, + generic::{ + FdWrapper, + Generic, + }, + EventLoop, + Interest, + LoopSignal, + Mode, + PostAction, }, wayland_server::{ - backend::{ClientData, ClientId, DisconnectReason}, - Display, DisplayHandle, + backend::{ + ClientData, + ClientId, + DisconnectReason, + }, + Display, + DisplayHandle, }, }, - utils::{Logical, Point, Rectangle, SERIAL_COUNTER}, + utils::{ + Logical, + Point, + Rectangle, + SERIAL_COUNTER, + }, wayland::{ - compositor::{CompositorClientState, CompositorState}, - dmabuf::{DmabufGlobal, DmabufState}, + compositor::{ + CompositorClientState, + CompositorState, + }, + dmabuf::{ + DmabufGlobal, + DmabufState, + }, output::OutputManagerState, - selection::{data_device::DataDeviceState, primary_selection::PrimarySelectionState}, + selection::{ + data_device::DataDeviceState, + primary_selection::PrimarySelectionState, + }, shell::{ - wlr_layer::{Layer, WlrLayerShellState}, - xdg::{decoration::XdgDecorationState, XdgShellState}, + wlr_layer::{ + Layer, + WlrLayerShellState, + }, + xdg::{ + decoration::XdgDecorationState, + XdgShellState, + }, }, shm::ShmState, socket::ListeningSocketSource, From 2585579be3d3d9a2ee5ae47f3a9eddc6d08bcc96 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Mon, 4 Mar 2024 21:21:32 +0530 Subject: [PATCH 43/69] lots of unnecessary deps but vscode doesn't show any errors --- src/backends/udev.rs | 103 +++++++++++++++++++++++++++++++++++++++++++ src/state.rs | 87 +++++++----------------------------- 2 files changed, 119 insertions(+), 71 deletions(-) diff --git a/src/backends/udev.rs b/src/backends/udev.rs index 4fa3e76..eaaf431 100644 --- a/src/backends/udev.rs +++ b/src/backends/udev.rs @@ -1,3 +1,106 @@ +use smithay::{ + backend::{ + allocator::{ + dmabuf::{ + AnyError, + Dmabuf, + }, + Allocator, + }, + drm::DrmNode, + input::{ + Event, + InputBackend, + InputEvent, + KeyState, + KeyboardKeyEvent, + }, + renderer::{ + damage::OutputDamageTracker, + element::texture::TextureBuffer, + gles::GlesRenderer, + glow::GlowRenderer, + multigpu::{ + gbm::GbmGlesBackend, + GpuManager, + MultiTexture, + }, + }, + session::libseat::LibSeatSession, + winit::WinitGraphicsBackend, + }, + desktop::{ + layer_map_for_output, + space::SpaceElement, + PopupManager, + }, + input::{ + keyboard::{ + FilterResult, + Keysym, + ModifiersState, + XkbConfig, + }, + Seat, + SeatState, + }, + reexports::{ + calloop::{ + generic::{ + FdWrapper, + Generic, + }, + EventLoop, + Interest, + LoopSignal, + Mode, + PostAction, + }, + wayland_server::{ + backend::{ + ClientData, + ClientId, + DisconnectReason, + }, + Display, + DisplayHandle, + }, + }, + utils::{ + Logical, + Point, + Rectangle, + SERIAL_COUNTER, + }, + wayland::{ + compositor::{ + CompositorClientState, + CompositorState, + }, + dmabuf::{ + DmabufGlobal, + DmabufState, + }, + output::OutputManagerState, + selection::{ + data_device::DataDeviceState, + primary_selection::PrimarySelectionState, + }, + shell::{ + wlr_layer::{ + Layer, + WlrLayerShellState, + }, + xdg::{ + decoration::XdgDecorationState, + XdgShellState, + }, + }, + shm::ShmState, + socket::ListeningSocketSource, + }, +}; + pub struct UdevData { pub session: LibSeatSession, dh: DisplayHandle, diff --git a/src/state.rs b/src/state.rs index e9ac0da..dec3a26 100644 --- a/src/state.rs +++ b/src/state.rs @@ -19,100 +19,45 @@ use piccolo as lua; use smithay::{ backend::{ allocator::{ - dmabuf::{ - AnyError, - Dmabuf, - }, + dmabuf::{AnyError, Dmabuf}, Allocator, }, drm::DrmNode, - input::{ - Event, - InputBackend, - InputEvent, - KeyState, - KeyboardKeyEvent, - }, + input::{Event, InputBackend, InputEvent, KeyState, KeyboardKeyEvent}, renderer::{ damage::OutputDamageTracker, element::texture::TextureBuffer, gles::GlesRenderer, glow::GlowRenderer, - multigpu::{ - gbm::GbmGlesBackend, - GpuManager, - MultiTexture, - }, + multigpu::{gbm::GbmGlesBackend, GpuManager, MultiTexture}, }, session::libseat::LibSeatSession, winit::WinitGraphicsBackend, }, - desktop::{ - layer_map_for_output, - space::SpaceElement, - PopupManager, - }, + desktop::{layer_map_for_output, space::SpaceElement, PopupManager}, input::{ - keyboard::{ - FilterResult, - Keysym, - ModifiersState, - XkbConfig, - }, - Seat, - SeatState, + keyboard::{FilterResult, Keysym, ModifiersState, XkbConfig}, + Seat, SeatState, }, reexports::{ calloop::{ - generic::{ - FdWrapper, - Generic, - }, - EventLoop, - Interest, - LoopSignal, - Mode, - PostAction, + generic::{FdWrapper, Generic}, + EventLoop, Interest, LoopSignal, Mode, PostAction, }, wayland_server::{ - backend::{ - ClientData, - ClientId, - DisconnectReason, - }, - Display, - DisplayHandle, + backend::{ClientData, ClientId, DisconnectReason}, + Display, DisplayHandle, }, }, - utils::{ - Logical, - Point, - Rectangle, - SERIAL_COUNTER, - }, + utils::{Logical, Point, Rectangle, SERIAL_COUNTER}, wayland::{ - compositor::{ - CompositorClientState, - CompositorState, - }, - dmabuf::{ - DmabufGlobal, - DmabufState, - }, + compositor::{CompositorClientState, CompositorState}, + dmabuf::{DmabufGlobal, DmabufState}, output::OutputManagerState, - selection::{ - data_device::DataDeviceState, - primary_selection::PrimarySelectionState, - }, + selection::{data_device::DataDeviceState, primary_selection::PrimarySelectionState}, shell::{ - wlr_layer::{ - Layer, - WlrLayerShellState, - }, - xdg::{ - decoration::XdgDecorationState, - XdgShellState, - }, + wlr_layer::{Layer, WlrLayerShellState}, + xdg::{decoration::XdgDecorationState, XdgShellState}, }, shm::ShmState, socket::ListeningSocketSource, From da9faf1bc1100d72deb923eb8d8bab4374e6f2a3 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Tue, 5 Mar 2024 21:43:02 +0530 Subject: [PATCH 44/69] Import UdevData and WinitData Signed-off-by: Anant Narayan --- src/state.rs | 92 ++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 68 insertions(+), 24 deletions(-) diff --git a/src/state.rs b/src/state.rs index dec3a26..8d31cf2 100644 --- a/src/state.rs +++ b/src/state.rs @@ -15,49 +15,86 @@ use std::{ }, }; +use piccolo as lua; + use piccolo as lua; use smithay::{ backend::{ - allocator::{ - dmabuf::{AnyError, Dmabuf}, - Allocator, + input::{ + Event, + InputBackend, + InputEvent, + KeyState, + KeyboardKeyEvent, }, - drm::DrmNode, - input::{Event, InputBackend, InputEvent, KeyState, KeyboardKeyEvent}, renderer::{ damage::OutputDamageTracker, - element::texture::TextureBuffer, - gles::GlesRenderer, glow::GlowRenderer, - multigpu::{gbm::GbmGlesBackend, GpuManager, MultiTexture}, }, - session::libseat::LibSeatSession, winit::WinitGraphicsBackend, }, - desktop::{layer_map_for_output, space::SpaceElement, PopupManager}, + desktop::{ + layer_map_for_output, + space::SpaceElement, + PopupManager, + }, input::{ - keyboard::{FilterResult, Keysym, ModifiersState, XkbConfig}, - Seat, SeatState, + keyboard::{ + FilterResult, + Keysym, + ModifiersState, + XkbConfig, + }, + Seat, + SeatState, }, reexports::{ calloop::{ - generic::{FdWrapper, Generic}, - EventLoop, Interest, LoopSignal, Mode, PostAction, + generic::{ + FdWrapper, + Generic, + }, + EventLoop, + Interest, + LoopSignal, + Mode, + PostAction, }, wayland_server::{ - backend::{ClientData, ClientId, DisconnectReason}, - Display, DisplayHandle, + backend::{ + ClientData, + ClientId, + DisconnectReason, + }, + Display, + DisplayHandle, }, }, - utils::{Logical, Point, Rectangle, SERIAL_COUNTER}, + utils::{ + Logical, + Point, + Rectangle, + SERIAL_COUNTER, + }, wayland::{ - compositor::{CompositorClientState, CompositorState}, - dmabuf::{DmabufGlobal, DmabufState}, + compositor::{ + CompositorClientState, + CompositorState, + }, output::OutputManagerState, - selection::{data_device::DataDeviceState, primary_selection::PrimarySelectionState}, + selection::{ + data_device::DataDeviceState, + primary_selection::PrimarySelectionState, + }, shell::{ - wlr_layer::{Layer, WlrLayerShellState}, - xdg::{decoration::XdgDecorationState, XdgShellState}, + wlr_layer::{ + Layer, + WlrLayerShellState, + }, + xdg::{ + decoration::XdgDecorationState, + XdgShellState, + }, }, shm::ShmState, socket::ListeningSocketSource, @@ -65,14 +102,21 @@ use smithay::{ }; use crate::{ - backends::Backend, + backends::{ + udev::UdevData, + winit::WinitData, + Backend, + }, decorations::BorderShader, handlers::input::{ KeyPattern, ModFlags, Mods, }, - workspaces::{FocusTarget, Workspaces}, + workspaces::{ + FocusTarget, + Workspaces, + }, }; pub struct StrataState { From f5a99e9bd11f5f7be56d189d827852e590b4d7fa Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Tue, 5 Mar 2024 21:54:48 +0530 Subject: [PATCH 45/69] Start working on drawing.rs Signed-off-by: Anant Narayan --- src/backends/drawing.rs | 15 +++++++++++++++ src/backends/mod.rs | 4 +++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/backends/drawing.rs b/src/backends/drawing.rs index 7a5c956..e9184af 100644 --- a/src/backends/drawing.rs +++ b/src/backends/drawing.rs @@ -1,3 +1,18 @@ +use smithay::{ + backend::renderer::{ + element::{ + memory::MemoryRenderBuffer, + AsRenderElements, + }, + Renderer, + }, + input::pointer::CursorImageStatus, +}; + +pub struct PointerElement { + buffer: Option, + status: CursorImageStatus, +} use smithay::{ backend::renderer::{ element::{ diff --git a/src/backends/mod.rs b/src/backends/mod.rs index 2fc8413..e5527a3 100644 --- a/src/backends/mod.rs +++ b/src/backends/mod.rs @@ -1,9 +1,11 @@ +use log::error; + // Copyright 2023 the Strata authors // SPDX-License-Identifier: GPL-3.0-or-later pub mod cursor; +mod drawing; pub mod udev; -use log::error; use crate::backends::{ udev::UdevData, From 83dc78bd0cbf016ea4702adcfe9d056035f3ae6c Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Wed, 6 Mar 2024 21:56:28 +0530 Subject: [PATCH 46/69] Import stuff in winit.rs Signed-off-by: Anant Narayan --- src/backends/winit.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/backends/winit.rs b/src/backends/winit.rs index f0a9f52..0946e73 100644 --- a/src/backends/winit.rs +++ b/src/backends/winit.rs @@ -1,6 +1,10 @@ // Copyright 2023 the Strata authors // SPDX-License-Identifier: GPL-3.0-or-later +use std::{ + cell::RefCell, + rc::Rc, + time::Duration, use std::{ cell::RefCell, rc::Rc, @@ -11,8 +15,11 @@ use piccolo as lua; use smithay::{ backend::{ renderer::{ + { damage::OutputDamageTracker, glow::GlowRenderer, + }, + glow::GlowRenderer, }, winit::{ self, @@ -45,7 +52,6 @@ use crate::{ decorations::BorderShader, state::{ self, - Backend, StrataComp, StrataState, }, From 75786734999e12ebfcb2547603123571e0e097bd Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Wed, 6 Mar 2024 22:31:44 +0530 Subject: [PATCH 47/69] Move Backend enum to backends/mod.rs Signed-off-by: Anant Narayan --- src/backends/mod.rs | 10 ++++++++++ src/state.rs | 29 +---------------------------- 2 files changed, 11 insertions(+), 28 deletions(-) diff --git a/src/backends/mod.rs b/src/backends/mod.rs index e5527a3..e305490 100644 --- a/src/backends/mod.rs +++ b/src/backends/mod.rs @@ -1,5 +1,10 @@ use log::error; +use crate::backends::{ + udev::UdevData, + winit::WinitData, +}; + // Copyright 2023 the Strata authors // SPDX-License-Identifier: GPL-3.0-or-later @@ -22,6 +27,11 @@ pub enum Backend { Udev(UdevData), } +pub enum Backend { + Winit(WinitData), + Udev(UdevData), +} + impl Backend { pub fn winit(&mut self) -> &mut WinitData { match self { diff --git a/src/state.rs b/src/state.rs index 8d31cf2..d15c22b 100644 --- a/src/state.rs +++ b/src/state.rs @@ -102,11 +102,7 @@ use smithay::{ }; use crate::{ - backends::{ - udev::UdevData, - winit::WinitData, - Backend, - }, + backends::Backend, decorations::BorderShader, handlers::input::{ KeyPattern, @@ -254,29 +250,6 @@ impl StrataState { } } -pub struct WinitData { - backend: WinitGraphicsBackend, - damage_tracker: OutputDamageTracker, -} - -pub struct UdevData { - pub session: LibSeatSession, - dh: DisplayHandle, - dmabuf_state: Option<(DmabufState, DmabufGlobal)>, - primary_gpu: DrmNode, - allocator: Option>>, - gpus: GpuManager>, - backends: HashMap, - pointer_images: Vec<(xcursor::parser::Image, TextureBuffer)>, - pointer_element: PointerElement, - pointer_image: crate::backends::cursor::Cursor, -} - -pub enum Backend { - Winit(WinitData), - Udev(UdevData), -} - pub struct StrataComp { pub dh: DisplayHandle, pub backend: Backend, From dbc4a13a85e34ade960c9b707cb731f10a10df7a Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Thu, 7 Mar 2024 22:33:07 +0530 Subject: [PATCH 48/69] Start working on fixes due to merge conflict resolution. god i fucking hate git sometimes --- src/backends/cursor.rs | 91 ------------------------------------------ src/backends/winit.rs | 7 ---- 2 files changed, 98 deletions(-) diff --git a/src/backends/cursor.rs b/src/backends/cursor.rs index bf129d3..7b825c0 100644 --- a/src/backends/cursor.rs +++ b/src/backends/cursor.rs @@ -89,94 +89,3 @@ fn load_icon(theme: &CursorTheme) -> Result, Error> { cursor_file.read_to_end(&mut cursor_data)?; parse_xcursor(&cursor_data).ok_or(Error::Parse) } -use std::{ - io::Read, - time::Duration, -}; - -use tracing::warn; -use xcursor::{ - parser::{ - parse_xcursor, - Image, - }, - CursorTheme, -}; - -static FALLBACK_CURSOR_DATA: &[u8] = include_bytes!("../resources/cursor.rgba"); - -pub struct Cursor { - icons: Vec, - size: u32, -} - -impl Cursor { - pub fn load() -> Cursor { - let name = std::env::var("XCURSOR_THEME").ok().unwrap_or_else(|| "default".into()); - let size = std::env::var("XCURSOR_SIZE").ok().and_then(|s| s.parse().ok()).unwrap_or(24); - - let theme = CursorTheme::load(&name); - let icons = load_icon(&theme) - .map_err(|err| warn!("Unable to load xcursor: {}, using fallback cursor", err)) - .unwrap_or_else(|_| { - vec![Image { - size: 32, - width: 64, - height: 64, - xhot: 1, - yhot: 1, - delay: 1, - pixels_rgba: Vec::from(FALLBACK_CURSOR_DATA), - pixels_argb: vec![], - }] - }); - - Cursor { icons, size } - } - - pub fn get_image(&self, scale: u32, time: Duration) -> Image { - let size = self.size * scale; - frame(time.as_millis() as u32, size, &self.icons) - } -} - -fn nearest_images(size: u32, images: &[Image]) -> impl Iterator { - let nearest_image = - images.iter().min_by_key(|image| (size as i32 - image.size as i32).abs()).unwrap(); - - images.iter().filter(move |image| { - image.width == nearest_image.width && image.height == nearest_image.height - }) -} - -fn frame(mut millis: u32, size: u32, images: &[Image]) -> Image { - let total = nearest_images(size, images).fold(0, |acc, image| acc + image.delay); - millis %= total; - - for img in nearest_images(size, images) { - if millis < img.delay { - return img.clone(); - } - millis -= img.delay; - } - - unreachable!() -} - -#[derive(thiserror::Error, Debug)] -enum Error { - #[error("Theme has no default cursor")] - NoDefaultCursor, - #[error("Error opening xcursor file: {0}")] - File(#[from] std::io::Error), - #[error("Failed to parse XCursor file")] - Parse, -} - -fn load_icon(theme: &CursorTheme) -> Result, Error> { - let icon_path = theme.load_icon("default").ok_or(Error::NoDefaultCursor)?; - let mut cursor_file = std::fs::File::open(icon_path)?; - let mut cursor_data = Vec::new(); - cursor_file.read_to_end(&mut cursor_data)?; - parse_xcursor(&cursor_data).ok_or(Error::Parse) -} diff --git a/src/backends/winit.rs b/src/backends/winit.rs index 0946e73..78dcc9f 100644 --- a/src/backends/winit.rs +++ b/src/backends/winit.rs @@ -1,10 +1,6 @@ // Copyright 2023 the Strata authors // SPDX-License-Identifier: GPL-3.0-or-later -use std::{ - cell::RefCell, - rc::Rc, - time::Duration, use std::{ cell::RefCell, rc::Rc, @@ -15,11 +11,8 @@ use piccolo as lua; use smithay::{ backend::{ renderer::{ - { damage::OutputDamageTracker, glow::GlowRenderer, - }, - glow::GlowRenderer, }, winit::{ self, From 89d59338d278b53cdfea57cb82632173bfb962f6 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Thu, 7 Mar 2024 22:40:17 +0530 Subject: [PATCH 49/69] More fixes! --- src/backends/drawing.rs | 15 ------ src/backends/mod.rs | 18 +------ src/backends/udev.rs | 117 ---------------------------------------- 3 files changed, 1 insertion(+), 149 deletions(-) diff --git a/src/backends/drawing.rs b/src/backends/drawing.rs index e9184af..7a5c956 100644 --- a/src/backends/drawing.rs +++ b/src/backends/drawing.rs @@ -1,18 +1,3 @@ -use smithay::{ - backend::renderer::{ - element::{ - memory::MemoryRenderBuffer, - AsRenderElements, - }, - Renderer, - }, - input::pointer::CursorImageStatus, -}; - -pub struct PointerElement { - buffer: Option, - status: CursorImageStatus, -} use smithay::{ backend::renderer::{ element::{ diff --git a/src/backends/mod.rs b/src/backends/mod.rs index e305490..8be2b62 100644 --- a/src/backends/mod.rs +++ b/src/backends/mod.rs @@ -1,32 +1,16 @@ -use log::error; - -use crate::backends::{ - udev::UdevData, - winit::WinitData, -}; - // Copyright 2023 the Strata authors // SPDX-License-Identifier: GPL-3.0-or-later pub mod cursor; mod drawing; pub mod udev; +pub mod winit; use crate::backends::{ udev::UdevData, winit::WinitData, }; -pub mod cursor; -mod drawing; -pub mod udev; -pub mod winit; - -pub enum Backend { - Winit(WinitData), - Udev(UdevData), -} - pub enum Backend { Winit(WinitData), Udev(UdevData), diff --git a/src/backends/udev.rs b/src/backends/udev.rs index eaaf431..f3d8655 100644 --- a/src/backends/udev.rs +++ b/src/backends/udev.rs @@ -1,120 +1,3 @@ -use smithay::{ - backend::{ - allocator::{ - dmabuf::{ - AnyError, - Dmabuf, - }, - Allocator, - }, - drm::DrmNode, - input::{ - Event, - InputBackend, - InputEvent, - KeyState, - KeyboardKeyEvent, - }, - renderer::{ - damage::OutputDamageTracker, - element::texture::TextureBuffer, - gles::GlesRenderer, - glow::GlowRenderer, - multigpu::{ - gbm::GbmGlesBackend, - GpuManager, - MultiTexture, - }, - }, - session::libseat::LibSeatSession, - winit::WinitGraphicsBackend, - }, - desktop::{ - layer_map_for_output, - space::SpaceElement, - PopupManager, - }, - input::{ - keyboard::{ - FilterResult, - Keysym, - ModifiersState, - XkbConfig, - }, - Seat, - SeatState, - }, - reexports::{ - calloop::{ - generic::{ - FdWrapper, - Generic, - }, - EventLoop, - Interest, - LoopSignal, - Mode, - PostAction, - }, - wayland_server::{ - backend::{ - ClientData, - ClientId, - DisconnectReason, - }, - Display, - DisplayHandle, - }, - }, - utils::{ - Logical, - Point, - Rectangle, - SERIAL_COUNTER, - }, - wayland::{ - compositor::{ - CompositorClientState, - CompositorState, - }, - dmabuf::{ - DmabufGlobal, - DmabufState, - }, - output::OutputManagerState, - selection::{ - data_device::DataDeviceState, - primary_selection::PrimarySelectionState, - }, - shell::{ - wlr_layer::{ - Layer, - WlrLayerShellState, - }, - xdg::{ - decoration::XdgDecorationState, - XdgShellState, - }, - }, - shm::ShmState, - socket::ListeningSocketSource, - }, -}; - -pub struct UdevData { - pub session: LibSeatSession, - dh: DisplayHandle, - dmabuf_state: Option<(DmabufState, DmabufGlobal)>, - primary_gpu: DrmNode, - allocator: Option>>, - gpus: GpuManager>, - backends: HashMap, - pointer_images: Vec<(xcursor::parser::Image, TextureBuffer)>, - pointer_element: PointerElement, - pointer_image: crate::backends::cursor::Cursor, -} -use std::collections::HashMap; - use smithay::{ backend::{ allocator::gbm::GbmDevice, From e5c4d119a6797f3eec088e7186b4e59f50bf841b Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Thu, 7 Mar 2024 23:14:20 +0530 Subject: [PATCH 50/69] more fixes. i think all the errors due the merge conflict resolution have been resolved lol --- src/backends/mod.rs | 1 + src/state.rs | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backends/mod.rs b/src/backends/mod.rs index 8be2b62..8a6853e 100644 --- a/src/backends/mod.rs +++ b/src/backends/mod.rs @@ -10,6 +10,7 @@ use crate::backends::{ udev::UdevData, winit::WinitData, }; +use log::error; pub enum Backend { Winit(WinitData), diff --git a/src/state.rs b/src/state.rs index d15c22b..7b76e43 100644 --- a/src/state.rs +++ b/src/state.rs @@ -17,7 +17,6 @@ use std::{ use piccolo as lua; -use piccolo as lua; use smithay::{ backend::{ input::{ From da8c430b58695146594711ac376ac66a84861ae7 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Fri, 8 Mar 2024 18:12:55 +0530 Subject: [PATCH 51/69] Revert "Add SPDX license identifier" This reverts commit 38f77c862205ea46fe4ffa1b97ccb3d2aca99fe8. --- src/bindings.rs | 7 +++---- src/handlers/mod.rs | 2 +- src/layouts/mod.rs | 2 +- src/main.rs | 30 +++++++++++++----------------- src/state.rs | 3 --- src/tiling.rs | 22 +++++++++++----------- src/util.rs | 3 --- src/workspaces.rs | 27 +++++++++++---------------- 8 files changed, 40 insertions(+), 56 deletions(-) diff --git a/src/bindings.rs b/src/bindings.rs index 6902740..5a1fe76 100644 --- a/src/bindings.rs +++ b/src/bindings.rs @@ -1,13 +1,12 @@ -// Copyright 2023 the Strata authors -// SPDX-License-Identifier: GPL-3.0-or-later - use std::{ cell::RefCell, process::Command, rc::Rc, }; -use piccolo as lua; +use piccolo::{ + self as lua, +}; use crate::state::StrataComp; diff --git a/src/handlers/mod.rs b/src/handlers/mod.rs index 0b5beb8..8d26151 100644 --- a/src/handlers/mod.rs +++ b/src/handlers/mod.rs @@ -4,4 +4,4 @@ pub mod compositor; pub mod focus; pub mod input; -pub mod xdg_shell; +pub mod xdg_shell; \ No newline at end of file diff --git a/src/layouts/mod.rs b/src/layouts/mod.rs index 1ac92e4..ef3ac65 100644 --- a/src/layouts/mod.rs +++ b/src/layouts/mod.rs @@ -1,4 +1,4 @@ // Copyright 2023 the Strata authors // SPDX-License-Identifier: GPL-3.0-or-later -pub mod dwindle; +pub mod dwindle; \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index fa49085..9ebbda2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,28 +1,23 @@ -// Copyright 2023 the Strata authors -// SPDX-License-Identifier: GPL-3.0-or-later - -use std::{ - error::Error, - io::stdout, -}; - -use chrono::Local; -use clap::Parser; -use log::info; -use tracing_subscriber::fmt::writer::MakeWriterExt; - -use crate::backends::init_with_backend; - pub mod backends; -pub mod bindings; pub mod config; pub mod decorations; pub mod handlers; pub mod layouts; pub mod state; pub mod tiling; -pub mod util; pub mod workspaces; +pub mod bindings; +pub mod util; + +use crate::backends::init_with_backend; +use chrono::Local; +use clap::Parser; +use log::info; +use std::{ + error::Error, + io::stdout, +}; +use tracing_subscriber::fmt::writer::MakeWriterExt; #[derive(Parser, Debug)] #[command(author, version, about, long_about = None)] @@ -57,6 +52,7 @@ async fn main() -> Result<(), Box> { tracing_subscriber::fmt().with_writer(log_appender).init(); } + info!("Initializing Strata WM"); info!("Parsing config..."); info!("Initializing socket interface..."); diff --git a/src/state.rs b/src/state.rs index 7b76e43..9147cd3 100644 --- a/src/state.rs +++ b/src/state.rs @@ -1,6 +1,3 @@ -// Copyright 2023 the Strata authors -// SPDX-License-Identifier: GPL-3.0-or-later - use std::{ cell::RefCell, collections::HashMap, diff --git a/src/tiling.rs b/src/tiling.rs index 2d1f4bb..bf84a3f 100644 --- a/src/tiling.rs +++ b/src/tiling.rs @@ -1,11 +1,16 @@ -// Copyright 2023 the Strata authors -// SPDX-License-Identifier: GPL-3.0-or-later - use std::{ cell::RefCell, rc::Rc, }; +use crate::{ + workspaces::{ + Dwindle, + HorizontalOrVertical, + StrataWindow, + Workspace, + }, +}; use smithay::{ desktop::layer_map_for_output, utils::{ @@ -17,15 +22,10 @@ use smithay::{ }, }; -use crate::workspaces::{ - Dwindle, - HorizontalOrVertical, - StrataWindow, - Workspace, -}; - pub fn refresh_geometry(workspace: &mut Workspace) { - let gaps = { (3, 3) }; + let gaps = { + (3, 3) + }; let output = layer_map_for_output(workspace.outputs().next().unwrap()).non_exclusive_zone(); let output_full = workspace.outputs().next().unwrap().current_mode().unwrap().size; diff --git a/src/util.rs b/src/util.rs index 7c6d410..33b81e0 100644 --- a/src/util.rs +++ b/src/util.rs @@ -1,6 +1,3 @@ -// Copyright 2023 the Strata authors -// SPDX-License-Identifier: GPL-3.0-or-later - #[macro_export] macro_rules! enum_table { ( diff --git a/src/workspaces.rs b/src/workspaces.rs index 48a54b5..2d24364 100644 --- a/src/workspaces.rs +++ b/src/workspaces.rs @@ -1,14 +1,11 @@ -// Copyright 2023 the Strata authors -// SPDX-License-Identifier: GPL-3.0-or-later - -use std::{ - cell::{ - Ref, - RefCell, +use crate::{ + decorations::{ + AsGlowRenderer, + BorderShader, + CustomRenderElements, }, - rc::Rc, + tiling::refresh_geometry, }; - use smithay::{ backend::renderer::{ element::AsRenderElements, @@ -33,14 +30,12 @@ use smithay::{ }, wayland::shell::wlr_layer::Layer, }; - -use crate::{ - decorations::{ - AsGlowRenderer, - BorderShader, - CustomRenderElements, +use std::{ + cell::{ + Ref, + RefCell, }, - tiling::refresh_geometry, + rc::Rc, }; pub struct StrataWindow { From 32442426e1bd092df51038c141538a4b5f7a1873 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Fri, 8 Mar 2024 18:13:15 +0530 Subject: [PATCH 52/69] Revert "Add SPDX license identifier" This reverts commit 4d9e6261d46c7b4654d2f9d8026e05b8c6bfe9a1. --- src/layouts/dwindle.rs | 6 +----- src/layouts/mod.rs | 3 --- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/src/layouts/dwindle.rs b/src/layouts/dwindle.rs index 2d6744f..ee36ed8 100644 --- a/src/layouts/dwindle.rs +++ b/src/layouts/dwindle.rs @@ -1,13 +1,9 @@ -// Copyright 2023 the Strata authors -// SPDX-License-Identifier: GPL-3.0-or-later - +use smithay::desktop::Window; use std::{ cell::RefCell, rc::Rc, }; -use smithay::desktop::Window; - use crate::workspaces::{ Dwindle, HorizontalOrVertical, diff --git a/src/layouts/mod.rs b/src/layouts/mod.rs index ef3ac65..aa4d0c9 100644 --- a/src/layouts/mod.rs +++ b/src/layouts/mod.rs @@ -1,4 +1 @@ -// Copyright 2023 the Strata authors -// SPDX-License-Identifier: GPL-3.0-or-later - pub mod dwindle; \ No newline at end of file From e5bc03a302c6623c900d8701201b815ad7b73f6f Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Fri, 8 Mar 2024 18:13:25 +0530 Subject: [PATCH 53/69] Revert "Add SPDX license identifier" This reverts commit 316f2d00037b8da97c5f9239971f20a3a037897c. --- src/handlers/compositor.rs | 22 +++++++++------------- src/handlers/focus.rs | 12 ++++-------- src/handlers/mod.rs | 3 --- src/handlers/xdg_shell.rs | 25 ++++++++++--------------- 4 files changed, 23 insertions(+), 39 deletions(-) diff --git a/src/handlers/compositor.rs b/src/handlers/compositor.rs index c1e2cba..f6302f1 100644 --- a/src/handlers/compositor.rs +++ b/src/handlers/compositor.rs @@ -1,6 +1,12 @@ -// Copyright 2023 the Strata authors -// SPDX-License-Identifier: GPL-3.0-or-later - +use crate::{ + handlers::xdg_shell::handle_commit, + state::{ + ClientState, + StrataComp, + }, + tiling::refresh_geometry, + workspaces::FocusTarget, +}; use smithay::{ backend::renderer::utils::on_commit_buffer_handler, delegate_compositor, @@ -63,16 +69,6 @@ use smithay::{ }, }; -use crate::{ - handlers::xdg_shell::handle_commit, - state::{ - ClientState, - StrataComp, - }, - tiling::refresh_geometry, - workspaces::FocusTarget, -}; - impl CompositorHandler for StrataComp { fn compositor_state(&mut self) -> &mut CompositorState { &mut self.compositor_state diff --git a/src/handlers/focus.rs b/src/handlers/focus.rs index 8ed7aa9..41d9006 100644 --- a/src/handlers/focus.rs +++ b/src/handlers/focus.rs @@ -1,6 +1,7 @@ -// Copyright 2023 the Strata authors -// SPDX-License-Identifier: GPL-3.0-or-later - +use crate::{ + state::StrataComp, + workspaces::FocusTarget, +}; use smithay::desktop::Window; pub use smithay::{ backend::input::KeyState, @@ -35,11 +36,6 @@ pub use smithay::{ wayland::seat::WaylandFocus, }; -use crate::{ - state::StrataComp, - workspaces::FocusTarget, -}; - impl IsAlive for FocusTarget { fn alive(&self) -> bool { match self { diff --git a/src/handlers/mod.rs b/src/handlers/mod.rs index 8d26151..aa8e431 100644 --- a/src/handlers/mod.rs +++ b/src/handlers/mod.rs @@ -1,6 +1,3 @@ -// Copyright 2023 the Strata authors -// SPDX-License-Identifier: GPL-3.0-or-later - pub mod compositor; pub mod focus; pub mod input; diff --git a/src/handlers/xdg_shell.rs b/src/handlers/xdg_shell.rs index e1342a1..97fd9ed 100644 --- a/src/handlers/xdg_shell.rs +++ b/src/handlers/xdg_shell.rs @@ -1,12 +1,10 @@ -// Copyright 2023 the Strata authors -// SPDX-License-Identifier: GPL-3.0-or-later - -use std::{ - cell::RefCell, - rc::Rc, - sync::Mutex, +use crate::{ + state::StrataComp, + workspaces::{ + StrataWindow, + Workspaces, + }, }; - use log::warn; use smithay::{ delegate_xdg_decoration, @@ -46,13 +44,10 @@ use smithay::{ }, }, }; - -use crate::{ - state::StrataComp, - workspaces::{ - StrataWindow, - Workspaces, - }, +use std::{ + cell::RefCell, + rc::Rc, + sync::Mutex, }; impl XdgShellHandler for StrataComp { From 652478fbeea7a0dbc4672766a3e5396ab544c971 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Fri, 8 Mar 2024 18:13:50 +0530 Subject: [PATCH 54/69] Revert "Add identifier to more files" This reverts commit 964594d8b399543c9b908c57322207558f1eb4d8. --- .gitignore | 1 - src/handlers/input.rs | 3 --- 2 files changed, 4 deletions(-) diff --git a/.gitignore b/.gitignore index 011eeca..fcbd4f6 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,3 @@ /src/libs/ctl.rs /.rtx.toml /*scratch* -/.idea \ No newline at end of file diff --git a/src/handlers/input.rs b/src/handlers/input.rs index ee2df33..3889a79 100644 --- a/src/handlers/input.rs +++ b/src/handlers/input.rs @@ -1,6 +1,3 @@ -// Copyright 2023 the Strata authors -// SPDX-License-Identifier: GPL-3.0-or-later - use crate::{ enum_table, state::StrataComp, From 040d8f6bf51fd923e6ac1a2c8f0eb71405cd57aa Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Fri, 8 Mar 2024 18:13:57 +0530 Subject: [PATCH 55/69] Revert "Add identifiers to more files" This reverts commit c5d534eff0018fc74a3b60ec67a1c24ffcc5c1cd. --- src/decorations/borders.rs | 3 --- src/decorations/mod.rs | 3 --- src/decorations/shaders/borders.frag | 3 --- src/decorations/shaders/rounded_corners.frag | 3 --- 4 files changed, 12 deletions(-) diff --git a/src/decorations/borders.rs b/src/decorations/borders.rs index d06b2be..a9122fd 100644 --- a/src/decorations/borders.rs +++ b/src/decorations/borders.rs @@ -1,6 +1,3 @@ -// Copyright 2023 the Strata authors -// SPDX-License-Identifier: GPL-3.0-or-later - use crate::decorations::BorderShader; use smithay::{ backend::renderer::{ diff --git a/src/decorations/mod.rs b/src/decorations/mod.rs index 05346d8..1e469f4 100644 --- a/src/decorations/mod.rs +++ b/src/decorations/mod.rs @@ -1,6 +1,3 @@ -// Copyright 2023 the Strata authors -// SPDX-License-Identifier: GPL-3.0-or-later - mod borders; use smithay::{ diff --git a/src/decorations/shaders/borders.frag b/src/decorations/shaders/borders.frag index a027ede..8810653 100644 --- a/src/decorations/shaders/borders.frag +++ b/src/decorations/shaders/borders.frag @@ -1,6 +1,3 @@ -// Copyright 2023 the Strata authors -// SPDX-License-Identifier: GPL-3.0-or-later - precision mediump float; uniform vec2 size; varying vec2 v_coords; diff --git a/src/decorations/shaders/rounded_corners.frag b/src/decorations/shaders/rounded_corners.frag index 07ca45e..5c5668f 100644 --- a/src/decorations/shaders/rounded_corners.frag +++ b/src/decorations/shaders/rounded_corners.frag @@ -1,6 +1,3 @@ -// Copyright 2023 the Strata authors -// SPDX-License-Identifier: GPL-3.0-or-later - precision mediump float; uniform vec2 size; varying vec2 v_coords; From 420ba7c7b9779ff4f730925377ee9e6f2ab474f7 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Fri, 8 Mar 2024 18:14:22 +0530 Subject: [PATCH 56/69] Revert "Add identifiers to all files" This reverts commit 8fd5424b3d85d1025ebdc83eda0e6e35e48aab69. --- src/backends/mod.rs | 8 ++++++-- src/backends/winit.rs | 3 --- src/bindings/input/key.rs | 3 --- src/bindings/input/mod.rs | 3 --- src/bindings/input/modflags.rs | 3 --- 5 files changed, 6 insertions(+), 14 deletions(-) diff --git a/src/backends/mod.rs b/src/backends/mod.rs index 8a6853e..7069135 100644 --- a/src/backends/mod.rs +++ b/src/backends/mod.rs @@ -1,5 +1,9 @@ -// Copyright 2023 the Strata authors -// SPDX-License-Identifier: GPL-3.0-or-later +use log::error; + +use crate::backends::{ + udev::UdevData, + winit::WinitData, +}; pub mod cursor; mod drawing; diff --git a/src/backends/winit.rs b/src/backends/winit.rs index 78dcc9f..413eab2 100644 --- a/src/backends/winit.rs +++ b/src/backends/winit.rs @@ -1,6 +1,3 @@ -// Copyright 2023 the Strata authors -// SPDX-License-Identifier: GPL-3.0-or-later - use std::{ cell::RefCell, rc::Rc, diff --git a/src/bindings/input/key.rs b/src/bindings/input/key.rs index 78d2662..3a16556 100644 --- a/src/bindings/input/key.rs +++ b/src/bindings/input/key.rs @@ -1,6 +1,3 @@ -// Copyright 2023 the Strata authors -// SPDX-License-Identifier: GPL-3.0-or-later - use std::{ cell::RefCell, rc::Rc, diff --git a/src/bindings/input/mod.rs b/src/bindings/input/mod.rs index f88816e..b01374a 100644 --- a/src/bindings/input/mod.rs +++ b/src/bindings/input/mod.rs @@ -1,6 +1,3 @@ -// Copyright 2023 the Strata authors -// SPDX-License-Identifier: GPL-3.0-or-later - mod key; mod modflags; diff --git a/src/bindings/input/modflags.rs b/src/bindings/input/modflags.rs index 1507240..3f1417b 100644 --- a/src/bindings/input/modflags.rs +++ b/src/bindings/input/modflags.rs @@ -1,6 +1,3 @@ -// Copyright 2023 the Strata authors -// SPDX-License-Identifier: GPL-3.0-or-later - use std::{ cell::RefCell, rc::Rc, From b65541f38c20f1a4bf8a81e256abf5947bd3c985 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Thu, 7 Mar 2024 21:46:53 +0530 Subject: [PATCH 57/69] Add SPDX license identifier Signed-off-by: Anant Narayan --- src/bindings.rs | 7 ++++--- src/handlers/mod.rs | 2 +- src/layouts/mod.rs | 2 +- src/main.rs | 30 +++++++++++++++++------------- src/state.rs | 3 +++ src/tiling.rs | 22 +++++++++++----------- src/util.rs | 3 +++ src/workspaces.rs | 27 ++++++++++++++++----------- 8 files changed, 56 insertions(+), 40 deletions(-) diff --git a/src/bindings.rs b/src/bindings.rs index 5a1fe76..6902740 100644 --- a/src/bindings.rs +++ b/src/bindings.rs @@ -1,12 +1,13 @@ +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + use std::{ cell::RefCell, process::Command, rc::Rc, }; -use piccolo::{ - self as lua, -}; +use piccolo as lua; use crate::state::StrataComp; diff --git a/src/handlers/mod.rs b/src/handlers/mod.rs index aa8e431..b143655 100644 --- a/src/handlers/mod.rs +++ b/src/handlers/mod.rs @@ -1,4 +1,4 @@ pub mod compositor; pub mod focus; pub mod input; -pub mod xdg_shell; \ No newline at end of file +pub mod xdg_shell; diff --git a/src/layouts/mod.rs b/src/layouts/mod.rs index aa4d0c9..03c60e0 100644 --- a/src/layouts/mod.rs +++ b/src/layouts/mod.rs @@ -1 +1 @@ -pub mod dwindle; \ No newline at end of file +pub mod dwindle; diff --git a/src/main.rs b/src/main.rs index 9ebbda2..fa49085 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,23 +1,28 @@ +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + +use std::{ + error::Error, + io::stdout, +}; + +use chrono::Local; +use clap::Parser; +use log::info; +use tracing_subscriber::fmt::writer::MakeWriterExt; + +use crate::backends::init_with_backend; + pub mod backends; +pub mod bindings; pub mod config; pub mod decorations; pub mod handlers; pub mod layouts; pub mod state; pub mod tiling; -pub mod workspaces; -pub mod bindings; pub mod util; - -use crate::backends::init_with_backend; -use chrono::Local; -use clap::Parser; -use log::info; -use std::{ - error::Error, - io::stdout, -}; -use tracing_subscriber::fmt::writer::MakeWriterExt; +pub mod workspaces; #[derive(Parser, Debug)] #[command(author, version, about, long_about = None)] @@ -52,7 +57,6 @@ async fn main() -> Result<(), Box> { tracing_subscriber::fmt().with_writer(log_appender).init(); } - info!("Initializing Strata WM"); info!("Parsing config..."); info!("Initializing socket interface..."); diff --git a/src/state.rs b/src/state.rs index 9147cd3..7b76e43 100644 --- a/src/state.rs +++ b/src/state.rs @@ -1,3 +1,6 @@ +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + use std::{ cell::RefCell, collections::HashMap, diff --git a/src/tiling.rs b/src/tiling.rs index bf84a3f..2d1f4bb 100644 --- a/src/tiling.rs +++ b/src/tiling.rs @@ -1,16 +1,11 @@ +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + use std::{ cell::RefCell, rc::Rc, }; -use crate::{ - workspaces::{ - Dwindle, - HorizontalOrVertical, - StrataWindow, - Workspace, - }, -}; use smithay::{ desktop::layer_map_for_output, utils::{ @@ -22,10 +17,15 @@ use smithay::{ }, }; +use crate::workspaces::{ + Dwindle, + HorizontalOrVertical, + StrataWindow, + Workspace, +}; + pub fn refresh_geometry(workspace: &mut Workspace) { - let gaps = { - (3, 3) - }; + let gaps = { (3, 3) }; let output = layer_map_for_output(workspace.outputs().next().unwrap()).non_exclusive_zone(); let output_full = workspace.outputs().next().unwrap().current_mode().unwrap().size; diff --git a/src/util.rs b/src/util.rs index 33b81e0..7c6d410 100644 --- a/src/util.rs +++ b/src/util.rs @@ -1,3 +1,6 @@ +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + #[macro_export] macro_rules! enum_table { ( diff --git a/src/workspaces.rs b/src/workspaces.rs index 2d24364..48a54b5 100644 --- a/src/workspaces.rs +++ b/src/workspaces.rs @@ -1,11 +1,14 @@ -use crate::{ - decorations::{ - AsGlowRenderer, - BorderShader, - CustomRenderElements, +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + +use std::{ + cell::{ + Ref, + RefCell, }, - tiling::refresh_geometry, + rc::Rc, }; + use smithay::{ backend::renderer::{ element::AsRenderElements, @@ -30,12 +33,14 @@ use smithay::{ }, wayland::shell::wlr_layer::Layer, }; -use std::{ - cell::{ - Ref, - RefCell, + +use crate::{ + decorations::{ + AsGlowRenderer, + BorderShader, + CustomRenderElements, }, - rc::Rc, + tiling::refresh_geometry, }; pub struct StrataWindow { From 2d7eb5221852c85ccbdc1cdf7e74c31443b96228 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Thu, 7 Mar 2024 21:48:08 +0530 Subject: [PATCH 58/69] Add SPDX license identifier Signed-off-by: Anant Narayan --- src/layouts/dwindle.rs | 6 +++++- src/layouts/mod.rs | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/layouts/dwindle.rs b/src/layouts/dwindle.rs index ee36ed8..2d6744f 100644 --- a/src/layouts/dwindle.rs +++ b/src/layouts/dwindle.rs @@ -1,9 +1,13 @@ -use smithay::desktop::Window; +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + use std::{ cell::RefCell, rc::Rc, }; +use smithay::desktop::Window; + use crate::workspaces::{ Dwindle, HorizontalOrVertical, diff --git a/src/layouts/mod.rs b/src/layouts/mod.rs index 03c60e0..1ac92e4 100644 --- a/src/layouts/mod.rs +++ b/src/layouts/mod.rs @@ -1 +1,4 @@ +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + pub mod dwindle; From 5f19ad20d316afed84207b7ec247b6dac96d970c Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Thu, 7 Mar 2024 21:53:20 +0530 Subject: [PATCH 59/69] Add SPDX license identifier Signed-off-by: Anant Narayan --- src/handlers/compositor.rs | 22 +++++++++++++--------- src/handlers/focus.rs | 12 ++++++++---- src/handlers/mod.rs | 3 +++ src/handlers/xdg_shell.rs | 25 +++++++++++++++---------- 4 files changed, 39 insertions(+), 23 deletions(-) diff --git a/src/handlers/compositor.rs b/src/handlers/compositor.rs index f6302f1..c1e2cba 100644 --- a/src/handlers/compositor.rs +++ b/src/handlers/compositor.rs @@ -1,12 +1,6 @@ -use crate::{ - handlers::xdg_shell::handle_commit, - state::{ - ClientState, - StrataComp, - }, - tiling::refresh_geometry, - workspaces::FocusTarget, -}; +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + use smithay::{ backend::renderer::utils::on_commit_buffer_handler, delegate_compositor, @@ -69,6 +63,16 @@ use smithay::{ }, }; +use crate::{ + handlers::xdg_shell::handle_commit, + state::{ + ClientState, + StrataComp, + }, + tiling::refresh_geometry, + workspaces::FocusTarget, +}; + impl CompositorHandler for StrataComp { fn compositor_state(&mut self) -> &mut CompositorState { &mut self.compositor_state diff --git a/src/handlers/focus.rs b/src/handlers/focus.rs index 41d9006..8ed7aa9 100644 --- a/src/handlers/focus.rs +++ b/src/handlers/focus.rs @@ -1,7 +1,6 @@ -use crate::{ - state::StrataComp, - workspaces::FocusTarget, -}; +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + use smithay::desktop::Window; pub use smithay::{ backend::input::KeyState, @@ -36,6 +35,11 @@ pub use smithay::{ wayland::seat::WaylandFocus, }; +use crate::{ + state::StrataComp, + workspaces::FocusTarget, +}; + impl IsAlive for FocusTarget { fn alive(&self) -> bool { match self { diff --git a/src/handlers/mod.rs b/src/handlers/mod.rs index b143655..0b5beb8 100644 --- a/src/handlers/mod.rs +++ b/src/handlers/mod.rs @@ -1,3 +1,6 @@ +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + pub mod compositor; pub mod focus; pub mod input; diff --git a/src/handlers/xdg_shell.rs b/src/handlers/xdg_shell.rs index 97fd9ed..e1342a1 100644 --- a/src/handlers/xdg_shell.rs +++ b/src/handlers/xdg_shell.rs @@ -1,10 +1,12 @@ -use crate::{ - state::StrataComp, - workspaces::{ - StrataWindow, - Workspaces, - }, +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + +use std::{ + cell::RefCell, + rc::Rc, + sync::Mutex, }; + use log::warn; use smithay::{ delegate_xdg_decoration, @@ -44,10 +46,13 @@ use smithay::{ }, }, }; -use std::{ - cell::RefCell, - rc::Rc, - sync::Mutex, + +use crate::{ + state::StrataComp, + workspaces::{ + StrataWindow, + Workspaces, + }, }; impl XdgShellHandler for StrataComp { From 5c4b34b411c2ac861cd9bd1f0e23348bad146e5d Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Thu, 7 Mar 2024 22:00:32 +0530 Subject: [PATCH 60/69] Add identifier to more files --- .gitignore | 1 + src/handlers/input.rs | 3 +++ 2 files changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index fcbd4f6..011eeca 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ /src/libs/ctl.rs /.rtx.toml /*scratch* +/.idea \ No newline at end of file diff --git a/src/handlers/input.rs b/src/handlers/input.rs index 3889a79..ee2df33 100644 --- a/src/handlers/input.rs +++ b/src/handlers/input.rs @@ -1,3 +1,6 @@ +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + use crate::{ enum_table, state::StrataComp, From 1ec8ab28db0e2376eba6c49ac87207e79c421394 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Thu, 7 Mar 2024 22:02:19 +0530 Subject: [PATCH 61/69] Add identifiers to more files --- src/decorations/borders.rs | 3 +++ src/decorations/mod.rs | 3 +++ src/decorations/shaders/borders.frag | 3 +++ src/decorations/shaders/rounded_corners.frag | 3 +++ 4 files changed, 12 insertions(+) diff --git a/src/decorations/borders.rs b/src/decorations/borders.rs index a9122fd..d06b2be 100644 --- a/src/decorations/borders.rs +++ b/src/decorations/borders.rs @@ -1,3 +1,6 @@ +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + use crate::decorations::BorderShader; use smithay::{ backend::renderer::{ diff --git a/src/decorations/mod.rs b/src/decorations/mod.rs index 1e469f4..05346d8 100644 --- a/src/decorations/mod.rs +++ b/src/decorations/mod.rs @@ -1,3 +1,6 @@ +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + mod borders; use smithay::{ diff --git a/src/decorations/shaders/borders.frag b/src/decorations/shaders/borders.frag index 8810653..a027ede 100644 --- a/src/decorations/shaders/borders.frag +++ b/src/decorations/shaders/borders.frag @@ -1,3 +1,6 @@ +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + precision mediump float; uniform vec2 size; varying vec2 v_coords; diff --git a/src/decorations/shaders/rounded_corners.frag b/src/decorations/shaders/rounded_corners.frag index 5c5668f..07ca45e 100644 --- a/src/decorations/shaders/rounded_corners.frag +++ b/src/decorations/shaders/rounded_corners.frag @@ -1,3 +1,6 @@ +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + precision mediump float; uniform vec2 size; varying vec2 v_coords; From f1e6aec4b0a6cc216e7a9590ae40ee8d71b6d744 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Thu, 7 Mar 2024 22:03:35 +0530 Subject: [PATCH 62/69] Add identifiers to all files --- src/backends/mod.rs | 3 +++ src/backends/winit.rs | 3 +++ src/bindings/input/key.rs | 3 +++ src/bindings/input/mod.rs | 3 +++ src/bindings/input/modflags.rs | 3 +++ 5 files changed, 15 insertions(+) diff --git a/src/backends/mod.rs b/src/backends/mod.rs index 7069135..15d79bb 100644 --- a/src/backends/mod.rs +++ b/src/backends/mod.rs @@ -1,3 +1,6 @@ +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + use log::error; use crate::backends::{ diff --git a/src/backends/winit.rs b/src/backends/winit.rs index 413eab2..78dcc9f 100644 --- a/src/backends/winit.rs +++ b/src/backends/winit.rs @@ -1,3 +1,6 @@ +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + use std::{ cell::RefCell, rc::Rc, diff --git a/src/bindings/input/key.rs b/src/bindings/input/key.rs index 3a16556..78d2662 100644 --- a/src/bindings/input/key.rs +++ b/src/bindings/input/key.rs @@ -1,3 +1,6 @@ +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + use std::{ cell::RefCell, rc::Rc, diff --git a/src/bindings/input/mod.rs b/src/bindings/input/mod.rs index b01374a..f88816e 100644 --- a/src/bindings/input/mod.rs +++ b/src/bindings/input/mod.rs @@ -1,3 +1,6 @@ +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + mod key; mod modflags; diff --git a/src/bindings/input/modflags.rs b/src/bindings/input/modflags.rs index 3f1417b..1507240 100644 --- a/src/bindings/input/modflags.rs +++ b/src/bindings/input/modflags.rs @@ -1,3 +1,6 @@ +// Copyright 2023 the Strata authors +// SPDX-License-Identifier: GPL-3.0-or-later + use std::{ cell::RefCell, rc::Rc, From ac54b852421a52059fdfa98761a01c5aeab3bfaa Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Sat, 9 Mar 2024 20:35:11 +0530 Subject: [PATCH 63/69] Fixed errors with the new Backend enum Signed-off-by: Anant Narayan --- src/backends/mod.rs | 6 ----- src/backends/udev.rs | 2 ++ src/backends/winit.rs | 7 +++--- src/state.rs | 54 ++++++++++++++++--------------------------- 4 files changed, 26 insertions(+), 43 deletions(-) diff --git a/src/backends/mod.rs b/src/backends/mod.rs index 15d79bb..9e707b6 100644 --- a/src/backends/mod.rs +++ b/src/backends/mod.rs @@ -13,12 +13,6 @@ mod drawing; pub mod udev; pub mod winit; -use crate::backends::{ - udev::UdevData, - winit::WinitData, -}; -use log::error; - pub enum Backend { Winit(WinitData), Udev(UdevData), diff --git a/src/backends/udev.rs b/src/backends/udev.rs index f3d8655..a10bb53 100644 --- a/src/backends/udev.rs +++ b/src/backends/udev.rs @@ -1,3 +1,5 @@ +use std::collections::HashMap; + use smithay::{ backend::{ allocator::gbm::GbmDevice, diff --git a/src/backends/winit.rs b/src/backends/winit.rs index 78dcc9f..cda5848 100644 --- a/src/backends/winit.rs +++ b/src/backends/winit.rs @@ -41,6 +41,7 @@ use smithay::{ }; use crate::{ + backends::Backend, bindings, decorations::BorderShader, state::{ @@ -51,8 +52,8 @@ use crate::{ }; pub struct WinitData { - backend: WinitGraphicsBackend, - damage_tracker: OutputDamageTracker, + pub backend: WinitGraphicsBackend, + pub damage_tracker: OutputDamageTracker, } pub fn init_winit() { @@ -81,7 +82,7 @@ pub fn init_winit() { "winit".to_string(), Backend::Winit(WinitData { backend, damage_tracker }), ); - BorderShader::init(comp.backend.renderer()); + BorderShader::init(comp.backend.winit().backend.renderer()); for workspace in comp.workspaces.iter() { workspace.add_output(output.clone()); } diff --git a/src/state.rs b/src/state.rs index 6629d85..584ff41 100644 --- a/src/state.rs +++ b/src/state.rs @@ -1,20 +1,6 @@ // Copyright 2023 the Strata authors // SPDX-License-Identifier: GPL-3.0-or-later -use std::{ - cell::RefCell, - collections::HashMap, - ffi::OsString, - os::fd::AsRawFd, - process::Command, - rc::Rc, - sync::Arc, - time::{ - Duration, - Instant, -// Copyright 2023 the Strata authors -// SPDX-License-Identifier: GPL-3.0-or-later - use std::{ cell::RefCell, collections::HashMap, @@ -30,21 +16,13 @@ use std::{ }; use piccolo as lua; - use smithay::{ - backend::{ - input::{ - Event, - InputBackend, - InputEvent, - KeyState, - KeyboardKeyEvent, - }, - renderer::{ - damage::OutputDamageTracker, - glow::GlowRenderer, - }, - winit::WinitGraphicsBackend, + backend::input::{ + Event, + InputBackend, + InputEvent, + KeyState, + KeyboardKeyEvent, }, desktop::{ layer_map_for_output, @@ -348,9 +326,17 @@ impl StrataComp { } fn winit_render(&mut self) { - let render_elements = self.workspaces.current().render_elements(self.backend.renderer()); + let render_elements = + self.workspaces.current().render_elements(self.backend.winit().backend.renderer()); self.backend - .render_output(self.backend.renderer(), 0, &render_elements, [0.1, 0.1, 0.1, 1.0]) + .winit() + .damage_tracker + .render_output( + self.backend.winit().backend.renderer(), + 0, + &render_elements, + [0.1, 0.1, 0.1, 1.0], + ) .unwrap(); } pub fn surface_under(&self) -> Option<(FocusTarget, Point)> { @@ -386,10 +372,10 @@ impl StrataComp { self.set_input_focus_auto(); // damage tracking - let size = self.backend.window_size(); + let size = self.backend.winit().backend.window_size(); let damage = Rectangle::from_loc_and_size((0, 0), size); - self.backend.bind().unwrap(); - self.backend.submit(Some(&[damage])).unwrap(); + self.backend.winit().backend.bind().unwrap(); + self.backend.winit().backend.submit(Some(&[damage])).unwrap(); // sync and cleanups let output = self.workspaces.current().outputs().next().unwrap(); @@ -402,7 +388,7 @@ impl StrataComp { }); self.dh.flush_clients().unwrap(); self.popup_manager.cleanup(); - BorderShader::cleanup(self.backend.renderer()); + BorderShader::cleanup(self.backend.winit().backend.renderer()); } pub fn close_window(&mut self) { From c7f2578ea834434b97f2821199e422a0007641f2 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Sat, 9 Mar 2024 21:18:20 +0530 Subject: [PATCH 64/69] Refactor. Rename StrataState to Strata and StrataComp to Compositor Signed-off-by: Anant Narayan --- src/backends/winit.rs | 14 +++---- src/bindings.rs | 6 +-- src/bindings/input/key.rs | 13 +++---- src/bindings/input/mod.rs | 15 ++++---- src/bindings/input/modflags.rs | 4 +- src/handlers/compositor.rs | 38 +++++++++---------- src/handlers/focus.rs | 68 +++++++++++++++++----------------- src/handlers/input.rs | 13 ++++--- src/handlers/xdg_shell.rs | 10 ++--- src/state.rs | 28 +++++++------- 10 files changed, 103 insertions(+), 106 deletions(-) diff --git a/src/backends/winit.rs b/src/backends/winit.rs index cda5848..f95abd5 100644 --- a/src/backends/winit.rs +++ b/src/backends/winit.rs @@ -46,8 +46,8 @@ use crate::{ decorations::BorderShader, state::{ self, - StrataComp, - StrataState, + Compositor, + Strata, }, }; @@ -57,7 +57,7 @@ pub struct WinitData { } pub fn init_winit() { - let mut event_loop: EventLoop = EventLoop::try_new().unwrap(); + let mut event_loop: EventLoop = EventLoop::try_new().unwrap(); let (display, socket) = state::init_wayland_listener(&event_loop); let display_handle = display.handle(); let (backend, mut winit) = winit::init().unwrap(); @@ -71,11 +71,11 @@ pub fn init_winit() { model: "Winit".into(), }, ); - let _global = output.create_global::(&display_handle); + let _global = output.create_global::(&display_handle); output.change_current_state(Some(mode), Some(Transform::Flipped180), None, Some((0, 0).into())); output.set_preferred(mode); let damage_tracker = OutputDamageTracker::from_output(&output); - let mut comp = StrataComp::new( + let mut comp = Compositor::new( &event_loop, &display, socket, @@ -134,11 +134,11 @@ pub fn init_winit() { println!("{:#?}", e); } - let mut data = StrataState { lua: lua_vm, comp, display }; + let mut data = Strata { lua: lua_vm, comp, display }; event_loop.run(None, &mut data, move |_| {}).unwrap(); } -pub fn winit_dispatch(winit: &mut WinitEventLoop, state: &mut StrataState, output: &Output) { +pub fn winit_dispatch(winit: &mut WinitEventLoop, state: &mut Strata, output: &Output) { // process winit events let res = winit.dispatch_new_events(|event| { match event { diff --git a/src/bindings.rs b/src/bindings.rs index 6902740..548aaba 100644 --- a/src/bindings.rs +++ b/src/bindings.rs @@ -9,11 +9,11 @@ use std::{ use piccolo as lua; -use crate::state::StrataComp; +use crate::state::Compositor; pub mod input; -pub fn register<'gc>(ctx: lua::Context<'gc>, comp: Rc>) -> anyhow::Result<()> { +pub fn register<'gc>(ctx: lua::Context<'gc>, comp: Rc>) -> anyhow::Result<()> { let index = lua::Table::new(&ctx); index.set(ctx, "input", input::module(ctx, comp.clone())?)?; index.set( @@ -32,7 +32,7 @@ pub fn register<'gc>(ctx: lua::Context<'gc>, comp: Rc>) -> a lua::Callback::from_fn(&ctx, |ctx, _, mut stack| { let comp = stack .consume::(ctx)? - .downcast_static::>>()?; + .downcast_static::>>()?; comp.borrow_mut().quit(); diff --git a/src/bindings/input/key.rs b/src/bindings/input/key.rs index 78d2662..5be0078 100644 --- a/src/bindings/input/key.rs +++ b/src/bindings/input/key.rs @@ -6,22 +6,21 @@ use std::{ rc::Rc, }; +use lua::FromValue; +use piccolo as lua; + use crate::{ handlers::input::{ Key, KeyPattern, ModFlags, }, - state::StrataComp, -}; -use lua::FromValue; -use piccolo::{ - self as lua, + state::Compositor, }; pub fn module<'gc>( ctx: lua::Context<'gc>, - comp: Rc>, + comp: Rc>, ) -> anyhow::Result> { let meta = lua::Table::from_value(ctx, Key::metatable(ctx)?)?; @@ -32,7 +31,7 @@ pub fn module<'gc>( lua::Callback::from_fn(&ctx, |ctx, _, mut stack| { let (comp, mods, key, cb) = stack.consume::<(lua::UserData, ModFlags, Key, lua::Function)>(ctx)?; - let comp = comp.downcast_static::>>()?; + let comp = comp.downcast_static::>>()?; let keypat = KeyPattern { mods, key }; diff --git a/src/bindings/input/mod.rs b/src/bindings/input/mod.rs index f88816e..458e802 100644 --- a/src/bindings/input/mod.rs +++ b/src/bindings/input/mod.rs @@ -1,22 +1,21 @@ // Copyright 2023 the Strata authors // SPDX-License-Identifier: GPL-3.0-or-later -mod key; -mod modflags; - use std::{ cell::RefCell, rc::Rc, }; -use crate::state::StrataComp; -use piccolo::{ - self as lua, -}; +use piccolo as lua; + +use crate::state::Compositor; + +mod key; +mod modflags; pub fn module<'gc>( ctx: lua::Context<'gc>, - comp: Rc>, + comp: Rc>, ) -> anyhow::Result> { let ud = lua::UserData::new_static(&ctx, comp.clone()); let meta = lua::Table::new(&ctx); diff --git a/src/bindings/input/modflags.rs b/src/bindings/input/modflags.rs index 1507240..9b6d0d3 100644 --- a/src/bindings/input/modflags.rs +++ b/src/bindings/input/modflags.rs @@ -14,7 +14,7 @@ use piccolo::{ use crate::{ handlers::input::ModFlags, - state::StrataComp, + state::Compositor, }; impl<'gc> FromValue<'gc> for ModFlags { @@ -47,7 +47,7 @@ impl<'gc> FromValue<'gc> for ModFlags { pub fn module<'gc>( ctx: lua::Context<'gc>, - comp: Rc>, + comp: Rc>, ) -> anyhow::Result> { let meta = lua::Table::new(&ctx); diff --git a/src/handlers/compositor.rs b/src/handlers/compositor.rs index c1e2cba..aeea77d 100644 --- a/src/handlers/compositor.rs +++ b/src/handlers/compositor.rs @@ -67,13 +67,13 @@ use crate::{ handlers::xdg_shell::handle_commit, state::{ ClientState, - StrataComp, + Compositor, }, tiling::refresh_geometry, workspaces::FocusTarget, }; -impl CompositorHandler for StrataComp { +impl CompositorHandler for Compositor { fn compositor_state(&mut self) -> &mut CompositorState { &mut self.compositor_state } @@ -100,9 +100,9 @@ impl CompositorHandler for StrataComp { } } -delegate_compositor!(StrataComp); +delegate_compositor!(Compositor); -impl BufferHandler for StrataComp { +impl BufferHandler for Compositor { fn buffer_destroyed( &mut self, _buffer: &smithay::reexports::wayland_server::protocol::wl_buffer::WlBuffer, @@ -110,19 +110,19 @@ impl BufferHandler for StrataComp { } } -impl ShmHandler for StrataComp { +impl ShmHandler for Compositor { fn shm_state(&self) -> &ShmState { &self.shm_state } } -delegate_shm!(StrataComp); +delegate_shm!(Compositor); -impl SeatHandler for StrataComp { +impl SeatHandler for Compositor { type KeyboardFocus = FocusTarget; type PointerFocus = FocusTarget; - fn seat_state(&mut self) -> &mut SeatState { + fn seat_state(&mut self) -> &mut SeatState { &mut self.seat_state } @@ -164,24 +164,24 @@ impl SeatHandler for StrataComp { } } -delegate_seat!(StrataComp); +delegate_seat!(Compositor); -impl SelectionHandler for StrataComp { +impl SelectionHandler for Compositor { type SelectionUserData = (); } -impl DataDeviceHandler for StrataComp { +impl DataDeviceHandler for Compositor { fn data_device_state(&self) -> &smithay::wayland::selection::data_device::DataDeviceState { &self.data_device_state } } -impl ClientDndGrabHandler for StrataComp {} -impl ServerDndGrabHandler for StrataComp {} +impl ClientDndGrabHandler for Compositor {} +impl ServerDndGrabHandler for Compositor {} -delegate_data_device!(StrataComp); +delegate_data_device!(Compositor); -impl PrimarySelectionHandler for StrataComp { +impl PrimarySelectionHandler for Compositor { fn primary_selection_state( &self, ) -> &smithay::wayland::selection::primary_selection::PrimarySelectionState { @@ -189,10 +189,10 @@ impl PrimarySelectionHandler for StrataComp { } } -delegate_primary_selection!(StrataComp); -delegate_output!(StrataComp); +delegate_primary_selection!(Compositor); +delegate_output!(Compositor); -impl WlrLayerShellHandler for StrataComp { +impl WlrLayerShellHandler for Compositor { fn shell_state(&mut self) -> &mut WlrLayerShellState { &mut self.layer_shell_state } @@ -233,4 +233,4 @@ impl WlrLayerShellHandler for StrataComp { } } -delegate_layer_shell!(StrataComp); +delegate_layer_shell!(Compositor); diff --git a/src/handlers/focus.rs b/src/handlers/focus.rs index 8ed7aa9..bd14f6c 100644 --- a/src/handlers/focus.rs +++ b/src/handlers/focus.rs @@ -36,7 +36,7 @@ pub use smithay::{ }; use crate::{ - state::StrataComp, + state::Compositor, workspaces::FocusTarget, }; @@ -56,15 +56,15 @@ impl From for WlSurface { } } -impl PointerTarget for FocusTarget { - fn enter(&self, seat: &Seat, data: &mut StrataComp, event: &MotionEvent) { +impl PointerTarget for FocusTarget { + fn enter(&self, seat: &Seat, data: &mut Compositor, event: &MotionEvent) { match self { FocusTarget::Window(w) => PointerTarget::enter(w, seat, data, event), FocusTarget::LayerSurface(l) => PointerTarget::enter(l, seat, data, event), FocusTarget::Popup(p) => PointerTarget::enter(p.wl_surface(), seat, data, event), } } - fn motion(&self, seat: &Seat, data: &mut StrataComp, event: &MotionEvent) { + fn motion(&self, seat: &Seat, data: &mut Compositor, event: &MotionEvent) { match self { FocusTarget::Window(w) => PointerTarget::motion(w, seat, data, event), FocusTarget::LayerSurface(l) => PointerTarget::motion(l, seat, data, event), @@ -73,8 +73,8 @@ impl PointerTarget for FocusTarget { } fn relative_motion( &self, - seat: &Seat, - data: &mut StrataComp, + seat: &Seat, + data: &mut Compositor, event: &RelativeMotionEvent, ) { match self { @@ -85,21 +85,21 @@ impl PointerTarget for FocusTarget { } } } - fn button(&self, seat: &Seat, data: &mut StrataComp, event: &ButtonEvent) { + fn button(&self, seat: &Seat, data: &mut Compositor, event: &ButtonEvent) { match self { FocusTarget::Window(w) => PointerTarget::button(w, seat, data, event), FocusTarget::LayerSurface(l) => PointerTarget::button(l, seat, data, event), FocusTarget::Popup(p) => PointerTarget::button(p.wl_surface(), seat, data, event), } } - fn axis(&self, seat: &Seat, data: &mut StrataComp, frame: AxisFrame) { + fn axis(&self, seat: &Seat, data: &mut Compositor, frame: AxisFrame) { match self { FocusTarget::Window(w) => PointerTarget::axis(w, seat, data, frame), FocusTarget::LayerSurface(l) => PointerTarget::axis(l, seat, data, frame), FocusTarget::Popup(p) => PointerTarget::axis(p.wl_surface(), seat, data, frame), } } - fn leave(&self, seat: &Seat, data: &mut StrataComp, serial: Serial, time: u32) { + fn leave(&self, seat: &Seat, data: &mut Compositor, serial: Serial, time: u32) { match self { FocusTarget::Window(w) => PointerTarget::leave(w, seat, data, serial, time), FocusTarget::LayerSurface(l) => PointerTarget::leave(l, seat, data, serial, time), @@ -108,70 +108,70 @@ impl PointerTarget for FocusTarget { } fn gesture_swipe_update( &self, - _: &smithay::input::Seat, - _: &mut StrataComp, + _: &smithay::input::Seat, + _: &mut Compositor, _: &smithay::input::pointer::GestureSwipeUpdateEvent, ) { todo!() } fn gesture_swipe_end( &self, - _: &smithay::input::Seat, - _: &mut StrataComp, + _: &smithay::input::Seat, + _: &mut Compositor, _: &smithay::input::pointer::GestureSwipeEndEvent, ) { todo!() } fn gesture_swipe_begin( &self, - _: &smithay::input::Seat, - _: &mut StrataComp, + _: &smithay::input::Seat, + _: &mut Compositor, _: &smithay::input::pointer::GestureSwipeBeginEvent, ) { todo!() } fn gesture_pinch_update( &self, - _: &smithay::input::Seat, - _: &mut StrataComp, + _: &smithay::input::Seat, + _: &mut Compositor, _: &smithay::input::pointer::GesturePinchUpdateEvent, ) { todo!() } fn gesture_pinch_end( &self, - _: &smithay::input::Seat, - _: &mut StrataComp, + _: &smithay::input::Seat, + _: &mut Compositor, _: &smithay::input::pointer::GesturePinchEndEvent, ) { todo!() } fn gesture_pinch_begin( &self, - _: &smithay::input::Seat, - _: &mut StrataComp, + _: &smithay::input::Seat, + _: &mut Compositor, _: &smithay::input::pointer::GesturePinchBeginEvent, ) { todo!() } fn gesture_hold_begin( &self, - _: &smithay::input::Seat, - _: &mut StrataComp, + _: &smithay::input::Seat, + _: &mut Compositor, _: &smithay::input::pointer::GestureHoldBeginEvent, ) { todo!() } fn gesture_hold_end( &self, - _: &smithay::input::Seat, - _: &mut StrataComp, + _: &smithay::input::Seat, + _: &mut Compositor, _: &smithay::input::pointer::GestureHoldEndEvent, ) { todo!() } - fn frame(&self, seat: &Seat, data: &mut StrataComp) { + fn frame(&self, seat: &Seat, data: &mut Compositor) { match self { FocusTarget::Window(w) => PointerTarget::frame(w, seat, data), FocusTarget::LayerSurface(l) => PointerTarget::frame(l, seat, data), @@ -180,11 +180,11 @@ impl PointerTarget for FocusTarget { } } -impl KeyboardTarget for FocusTarget { +impl KeyboardTarget for FocusTarget { fn enter( &self, - seat: &Seat, - data: &mut StrataComp, + seat: &Seat, + data: &mut Compositor, keys: Vec>, serial: Serial, ) { @@ -196,7 +196,7 @@ impl KeyboardTarget for FocusTarget { } } } - fn leave(&self, seat: &Seat, data: &mut StrataComp, serial: Serial) { + fn leave(&self, seat: &Seat, data: &mut Compositor, serial: Serial) { match self { FocusTarget::Window(w) => KeyboardTarget::leave(w, seat, data, serial), FocusTarget::LayerSurface(l) => KeyboardTarget::leave(l, seat, data, serial), @@ -205,8 +205,8 @@ impl KeyboardTarget for FocusTarget { } fn key( &self, - seat: &Seat, - data: &mut StrataComp, + seat: &Seat, + data: &mut Compositor, key: KeysymHandle<'_>, state: KeyState, serial: Serial, @@ -224,8 +224,8 @@ impl KeyboardTarget for FocusTarget { } fn modifiers( &self, - seat: &Seat, - data: &mut StrataComp, + seat: &Seat, + data: &mut Compositor, modifiers: ModifiersState, serial: Serial, ) { diff --git a/src/handlers/input.rs b/src/handlers/input.rs index ee2df33..af5b739 100644 --- a/src/handlers/input.rs +++ b/src/handlers/input.rs @@ -1,11 +1,6 @@ // Copyright 2023 the Strata authors // SPDX-License-Identifier: GPL-3.0-or-later -use crate::{ - enum_table, - state::StrataComp, - workspaces::FocusTarget, -}; use bitflags::bitflags; use smithay::{ backend::input::{ @@ -33,6 +28,12 @@ use smithay::{ utils::SERIAL_COUNTER, }; +use crate::{ + enum_table, + state::Compositor, + workspaces::FocusTarget, +}; + #[derive(Debug)] pub struct Mods { pub flags: ModFlags, @@ -2630,7 +2631,7 @@ pub struct KeyPattern { pub key: Key, } -impl StrataComp { +impl Compositor { pub fn set_input_focus(&mut self, target: FocusTarget) { let keyboard = self.seat.get_keyboard().unwrap(); let serial = SERIAL_COUNTER.next_serial(); diff --git a/src/handlers/xdg_shell.rs b/src/handlers/xdg_shell.rs index e1342a1..e99bece 100644 --- a/src/handlers/xdg_shell.rs +++ b/src/handlers/xdg_shell.rs @@ -48,14 +48,14 @@ use smithay::{ }; use crate::{ - state::StrataComp, + state::Compositor, workspaces::{ StrataWindow, Workspaces, }, }; -impl XdgShellHandler for StrataComp { +impl XdgShellHandler for Compositor { fn xdg_shell_state(&mut self) -> &mut XdgShellState { &mut self.xdg_shell_state } @@ -94,7 +94,7 @@ impl XdgShellHandler for StrataComp { } } -delegate_xdg_shell!(StrataComp); +delegate_xdg_shell!(Compositor); pub fn handle_commit(workspaces: &Workspaces, surface: &WlSurface, popup_manager: &PopupManager) { if let Some(window) = workspaces.all_windows().find(|w| w.toplevel().wl_surface() == surface) { @@ -158,7 +158,7 @@ pub fn handle_commit(workspaces: &Workspaces, surface: &WlSurface, popup_manager }; } -impl XdgDecorationHandler for StrataComp { +impl XdgDecorationHandler for Compositor { fn new_decoration(&mut self, toplevel: ToplevelSurface) { toplevel.with_pending_state(|state| { state.decoration_mode = Some(Mode::ServerSide); @@ -175,4 +175,4 @@ impl XdgDecorationHandler for StrataComp { fn unset_mode(&mut self, _toplevel: ToplevelSurface) {} } -delegate_xdg_decoration!(StrataComp); +delegate_xdg_decoration!(Compositor); diff --git a/src/state.rs b/src/state.rs index 584ff41..c707faf 100644 --- a/src/state.rs +++ b/src/state.rs @@ -106,13 +106,13 @@ use crate::{ }, }; -pub struct StrataState { +pub struct Strata { pub lua: lua::Lua, - pub comp: Rc>, - pub display: Display, + pub comp: Rc>, + pub display: Display, } -impl StrataState { +impl Strata { pub fn process_input_event( &mut self, event: InputEvent, @@ -241,7 +241,7 @@ impl StrataState { } } -pub struct StrataComp { +pub struct Compositor { pub dh: DisplayHandle, pub backend: Backend, pub start_time: Instant, @@ -253,20 +253,20 @@ pub struct StrataComp { pub output_manager_state: OutputManagerState, pub data_device_state: DataDeviceState, pub primary_selection_state: PrimarySelectionState, - pub seat_state: SeatState, + pub seat_state: SeatState, pub layer_shell_state: WlrLayerShellState, pub popup_manager: PopupManager, - pub seat: Seat, + pub seat: Seat, pub socket_name: OsString, pub workspaces: Workspaces, pub mods: Mods, pub config: StrataConfig, } -impl StrataComp { +impl Compositor { pub fn new( - event_loop: &EventLoop, - display: &Display, + event_loop: &EventLoop, + display: &Display, socket_name: OsString, seat_name: String, backend: Backend, @@ -302,7 +302,7 @@ impl StrataComp { let workspaces = Workspaces::new(config_workspace); let mods_state = keyboard.modifier_state(); - StrataComp { + Compositor { dh, backend, start_time, @@ -489,11 +489,9 @@ pub struct StrataConfig { pub keybinds: HashMap, } -pub fn init_wayland_listener( - event_loop: &EventLoop, -) -> (Display, OsString) { +pub fn init_wayland_listener(event_loop: &EventLoop) -> (Display, OsString) { let loop_handle = event_loop.handle(); - let mut display: Display = Display::new().unwrap(); + let mut display: Display = Display::new().unwrap(); let listening_socket = ListeningSocketSource::new_auto().unwrap(); let socket_name = listening_socket.socket_name().to_os_string(); From 1631b713a4192c15671b5c8310bafb60e706ff4c Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Sat, 9 Mar 2024 22:27:45 +0530 Subject: [PATCH 65/69] Some cleanup Signed-off-by: Anant Narayan --- src/main.rs | 8 -------- src/state.rs | 1 + 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/src/main.rs b/src/main.rs index fa49085..a706437 100644 --- a/src/main.rs +++ b/src/main.rs @@ -35,14 +35,8 @@ pub struct Args { async fn main() -> Result<(), Box> { let args = Args::parse(); let xdg = xdg::BaseDirectories::with_prefix("strata")?; - // let config_dir = xdg.find_config_file(""); - // let lib_dir = xdg.find_data_file("lua"); let log_dir = xdg.get_state_home(); - // if let (Some(config_path), Some(data_path)) = (config_dir, lib_dir) { - // tokio::spawn(async { parse_config(config_path, data_path) }).await??; - // } - let file_appender = tracing_appender::rolling::never( &log_dir, format!("strata_{}.log", Local::now().format("%Y-%m-%d_%H:%M:%S")), @@ -58,8 +52,6 @@ async fn main() -> Result<(), Box> { } info!("Initializing Strata WM"); - info!("Parsing config..."); - info!("Initializing socket interface..."); init_with_backend(&args.backend); diff --git a/src/state.rs b/src/state.rs index c707faf..8ac6690 100644 --- a/src/state.rs +++ b/src/state.rs @@ -110,6 +110,7 @@ pub struct Strata { pub lua: lua::Lua, pub comp: Rc>, pub display: Display, + pub backend: Backend, } impl Strata { From 0f9b8b28b3333df31d198d106b143630a429a119 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Sat, 9 Mar 2024 22:37:17 +0530 Subject: [PATCH 66/69] Add Unset variant to Backend Signed-off-by: Anant Narayan --- src/backends/mod.rs | 1 + src/main.rs | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/backends/mod.rs b/src/backends/mod.rs index 9e707b6..33ce842 100644 --- a/src/backends/mod.rs +++ b/src/backends/mod.rs @@ -16,6 +16,7 @@ pub mod winit; pub enum Backend { Winit(WinitData), Udev(UdevData), + Unset, } impl Backend { diff --git a/src/main.rs b/src/main.rs index a706437..04553fc 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,7 +11,10 @@ use clap::Parser; use log::info; use tracing_subscriber::fmt::writer::MakeWriterExt; -use crate::backends::init_with_backend; +use crate::{ + backends::init_with_backend, + state::Strata, +}; pub mod backends; pub mod bindings; @@ -52,6 +55,7 @@ async fn main() -> Result<(), Box> { } info!("Initializing Strata WM"); + let state = Strata::new(); init_with_backend(&args.backend); From f38365553a06b17e22df2888bb4456d972365f58 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Sat, 9 Mar 2024 22:47:56 +0530 Subject: [PATCH 67/69] Start working on implementation of new method for Strata Signed-off-by: Anant Narayan --- src/state.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/state.rs b/src/state.rs index 8ac6690..ea1134b 100644 --- a/src/state.rs +++ b/src/state.rs @@ -47,6 +47,7 @@ use smithay::{ }, EventLoop, Interest, + LoopHandle, LoopSignal, Mode, PostAction, @@ -114,6 +115,15 @@ pub struct Strata { } impl Strata { + pub fn new( + display: Display, + socket: OsString, + loop_signal: LoopSignal, + loop_handle: LoopHandle, + ) -> Self { + let mut comp = + Compositor::new(loop_handle, loop_signal, &display, socket, "Strata".to_string()); + } pub fn process_input_event( &mut self, event: InputEvent, From a90da55fa051ac0aab794ec2d2a6606c13b4865e Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Sat, 9 Mar 2024 22:54:48 +0530 Subject: [PATCH 68/69] Remove backend field from Compositor Signed-off-by: Anant Narayan --- src/state.rs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/state.rs b/src/state.rs index ea1134b..64e2f9b 100644 --- a/src/state.rs +++ b/src/state.rs @@ -16,6 +16,7 @@ use std::{ }; use piccolo as lua; +use piccolo::Lua; use smithay::{ backend::input::{ Event, @@ -121,8 +122,14 @@ impl Strata { loop_signal: LoopSignal, loop_handle: LoopHandle, ) -> Self { - let mut comp = - Compositor::new(loop_handle, loop_signal, &display, socket, "Strata".to_string()); + let mut comp = Rc::new(RefCell::new(Compositor::new( + loop_handle, + loop_signal, + &display, + socket, + "Strata".to_string(), + ))); + let lua = Lua::full(); } pub fn process_input_event( &mut self, @@ -254,7 +261,6 @@ impl Strata { pub struct Compositor { pub dh: DisplayHandle, - pub backend: Backend, pub start_time: Instant, pub loop_signal: LoopSignal, pub compositor_state: CompositorState, @@ -276,15 +282,14 @@ pub struct Compositor { impl Compositor { pub fn new( - event_loop: &EventLoop, + loop_handle: LoopHandle, + loop_signal: LoopSignal, display: &Display, socket_name: OsString, seat_name: String, - backend: Backend, ) -> Self { let start_time = Instant::now(); let dh = display.handle(); - let loop_signal = event_loop.get_signal(); let compositor_state = CompositorState::new::(&dh); let xdg_shell_state = XdgShellState::new::(&dh); let xdg_decoration_state = XdgDecorationState::new::(&dh); @@ -315,7 +320,6 @@ impl Compositor { Compositor { dh, - backend, start_time, socket_name, compositor_state, From db836c97fc712cc0d007ee0d742f1f30ec960589 Mon Sep 17 00:00:00 2001 From: Anant Narayan Date: Sat, 9 Mar 2024 22:56:35 +0530 Subject: [PATCH 69/69] Finish impl of new method for Strata Signed-off-by: Anant Narayan --- src/state.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/state.rs b/src/state.rs index 64e2f9b..43a538c 100644 --- a/src/state.rs +++ b/src/state.rs @@ -130,6 +130,7 @@ impl Strata { "Strata".to_string(), ))); let lua = Lua::full(); + Strata { lua, comp, display, backend: Backend::Unset } } pub fn process_input_event( &mut self,