aboutsummaryrefslogtreecommitdiff
path: root/src/niri.rs
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-03-27 14:54:24 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2024-03-27 14:54:24 +0400
commitcf87a185a90aeacf7c15d27ddba23bc493d9c2dd (patch)
treee8625c61105821b8d552db86f70839b1282151b4 /src/niri.rs
parente276c906bf4bea27dc8173815ff373d04c20caaf (diff)
downloadniri-cf87a185a90aeacf7c15d27ddba23bc493d9c2dd.tar.gz
niri-cf87a185a90aeacf7c15d27ddba23bc493d9c2dd.tar.bz2
niri-cf87a185a90aeacf7c15d27ddba23bc493d9c2dd.zip
Add logical output info and preferred modes to IPC
Diffstat (limited to 'src/niri.rs')
-rw-r--r--src/niri.rs47
1 files changed, 36 insertions, 11 deletions
diff --git a/src/niri.rs b/src/niri.rs
index 0cbd0cf3..05ce00e9 100644
--- a/src/niri.rs
+++ b/src/niri.rs
@@ -115,7 +115,8 @@ use crate::ui::hotkey_overlay::HotkeyOverlay;
use crate::ui::screenshot_ui::{ScreenshotUi, ScreenshotUiRenderElement};
use crate::utils::spawning::CHILD_ENV;
use crate::utils::{
- center, center_f64, get_monotonic_time, make_screenshot_path, output_size, write_png_rgba8,
+ center, center_f64, get_monotonic_time, logical_output, make_screenshot_path, output_size,
+ write_png_rgba8,
};
use crate::window::{InitialConfigureState, Mapped, ResolvedWindowRules, Unmapped, WindowRef};
use crate::{animation, niri_render_elements};
@@ -459,7 +460,7 @@ impl State {
self.refresh_pointer_focus();
foreign_toplevel::refresh(self);
self.niri.refresh_window_rules();
- self.niri.check_ipc_output_changed();
+ self.refresh_ipc_outputs();
}
pub fn move_cursor(&mut self, location: Point<f64, Logical>) {
@@ -967,6 +968,28 @@ impl State {
self.niri.queue_redraw_all();
}
+ pub fn refresh_ipc_outputs(&mut self) {
+ if !self.niri.ipc_outputs_changed {
+ return;
+ }
+ self.niri.ipc_outputs_changed = false;
+
+ let _span = tracy_client::span!("State::refresh_ipc_outputs");
+
+ for (name, ipc_output) in self.backend.ipc_outputs().lock().unwrap().iter_mut() {
+ let logical = self
+ .niri
+ .global_space
+ .outputs()
+ .find(|output| output.name() == *name)
+ .map(logical_output);
+ ipc_output.logical = logical;
+ }
+
+ #[cfg(feature = "dbus")]
+ self.niri.on_ipc_outputs_changed();
+ }
+
#[cfg(feature = "xdp-gnome-screencast")]
pub fn on_screen_cast_msg(
&mut self,
@@ -997,6 +1020,17 @@ impl State {
return;
};
+ let Some(output) = self
+ .niri
+ .global_space
+ .outputs()
+ .find(|out| out.name() == output)
+ .cloned()
+ else {
+ warn!("tried to start a screencast on missing output: {output}");
+ return;
+ };
+
match pw.start_cast(
to_niri.clone(),
gbm,
@@ -3438,15 +3472,6 @@ impl Niri {
});
}
- pub fn check_ipc_output_changed(&mut self) {
- if self.ipc_outputs_changed {
- self.ipc_outputs_changed = false;
-
- #[cfg(feature = "dbus")]
- self.on_ipc_outputs_changed();
- }
- }
-
#[cfg(feature = "dbus")]
pub fn on_ipc_outputs_changed(&self) {
let _span = tracy_client::span!("Niri::on_ipc_outputs_changed");