aboutsummaryrefslogtreecommitdiff
path: root/src/niri.rs
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2023-09-03 13:25:43 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2023-09-03 13:25:43 +0400
commitdcc6a557774c8af0dc62839308130ee6a71fc629 (patch)
treea0b4ff5d064171da4cba46536876af844d018cc4 /src/niri.rs
parent73d7a1d73dac14bcff43a1d595847b7c0bf14ec7 (diff)
downloadniri-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.rs38
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,