diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2023-09-03 13:25:43 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2023-09-03 13:25:43 +0400 |
| commit | dcc6a557774c8af0dc62839308130ee6a71fc629 (patch) | |
| tree | a0b4ff5d064171da4cba46536876af844d018cc4 /src/niri.rs | |
| parent | 73d7a1d73dac14bcff43a1d595847b7c0bf14ec7 (diff) | |
| download | niri-dcc6a557774c8af0dc62839308130ee6a71fc629.tar.gz niri-dcc6a557774c8af0dc62839308130ee6a71fc629.tar.bz2 niri-dcc6a557774c8af0dc62839308130ee6a71fc629.zip | |
Move LoopData into niri file
Diffstat (limited to 'src/niri.rs')
| -rw-r--r-- | src/niri.rs | 38 |
1 files changed, 33 insertions, 5 deletions
diff --git a/src/niri.rs b/src/niri.rs index 25fd3bc9..adc97b1e 100644 --- a/src/niri.rs +++ b/src/niri.rs @@ -2,8 +2,8 @@ use std::collections::HashMap; use std::os::unix::io::AsRawFd; use std::process::Command; use std::sync::{Arc, Mutex}; -use std::thread; use std::time::Duration; +use std::{env, thread}; use anyhow::Context; use directories::UserDirs; @@ -53,16 +53,15 @@ use smithay::wayland::socket::ListeningSocketSource; use smithay::wayland::tablet_manager::TabletManagerState; use time::OffsetDateTime; -use crate::backend::Backend; +use crate::backend::{Backend, Tty, Winit}; use crate::dbus::mutter_service_channel::ServiceChannel; use crate::frame_clock::FrameClock; use crate::layout::{MonitorRenderElement, MonitorSet}; use crate::utils::{center, get_monotonic_time, load_default_cursor}; -use crate::LoopData; pub struct Niri { pub start_time: std::time::Instant, - pub event_loop: LoopHandle<'static, LoopData>, + pub event_loop: LoopHandle<'static, Data>, pub stop_signal: LoopSignal, pub display_handle: DisplayHandle, @@ -113,9 +112,38 @@ pub struct OutputState { pub frame_clock: FrameClock, } +pub struct Data { + pub display: Display<Niri>, + pub backend: Backend, + pub niri: Niri, +} + +impl Data { + pub fn new(event_loop: LoopHandle<'static, Self>, stop_signal: LoopSignal) -> Self { + let has_display = + env::var_os("WAYLAND_DISPLAY").is_some() || env::var_os("DISPLAY").is_some(); + + let mut backend = if has_display { + Backend::Winit(Winit::new(event_loop.clone())) + } else { + Backend::Tty(Tty::new(event_loop.clone())) + }; + + let mut display = Display::new().unwrap(); + let mut niri = Niri::new(event_loop, stop_signal, &mut display, backend.seat_name()); + backend.init(&mut niri); + + Self { + display, + backend, + niri, + } + } +} + impl Niri { pub fn new( - event_loop: LoopHandle<'static, LoopData>, + event_loop: LoopHandle<'static, Data>, stop_signal: LoopSignal, display: &mut Display<Self>, seat_name: String, |
