diff options
Diffstat (limited to 'src/layout')
| -rw-r--r-- | src/layout/mod.rs | 23 | ||||
| -rw-r--r-- | src/layout/workspace.rs | 12 |
2 files changed, 33 insertions, 2 deletions
diff --git a/src/layout/mod.rs b/src/layout/mod.rs index 39fa2837..abcf9d43 100644 --- a/src/layout/mod.rs +++ b/src/layout/mod.rs @@ -80,6 +80,19 @@ pub struct InteractiveResizeData { pub edges: ResizeEdge, } +#[derive(Debug, Clone, Copy)] +pub enum ConfigureIntent { + /// A configure is not needed (no changes to server pending state). + NotNeeded, + /// A configure is throttled (due to resizing too fast for example). + Throttled, + /// Can send the configure if it isn't throttled externally (only size changed). + CanSend, + /// Should send the configure regardless of external throttling (something other than size + /// changed). + ShouldSend, +} + pub trait LayoutElement { /// Type that can be used as a unique ID of this element. type Id: PartialEq + std::fmt::Debug; @@ -154,6 +167,7 @@ pub trait LayoutElement { fn set_active_in_column(&mut self, active: bool); fn set_bounds(&self, bounds: Size<i32, Logical>); + fn configure_intent(&self) -> ConfigureIntent; fn send_pending_configure(&mut self); /// Whether the element is currently fullscreen. @@ -220,6 +234,9 @@ pub struct Options { /// Initial width for new columns. pub default_width: Option<ColumnWidth>, pub animations: niri_config::Animations, + + // Debug flags. + pub disable_resize_throttling: bool, } impl Default for Options { @@ -237,6 +254,7 @@ impl Default for Options { ], default_width: None, animations: Default::default(), + disable_resize_throttling: false, } } } @@ -273,6 +291,7 @@ impl Options { preset_widths, default_width, animations: config.animations.clone(), + disable_resize_throttling: config.debug.disable_resize_throttling, } } @@ -2654,6 +2673,10 @@ mod tests { fn set_bounds(&self, _bounds: Size<i32, Logical>) {} + fn configure_intent(&self) -> ConfigureIntent { + ConfigureIntent::CanSend + } + fn send_pending_configure(&mut self) {} fn set_active_in_column(&mut self, _active: bool) {} diff --git a/src/layout/workspace.rs b/src/layout/workspace.rs index 85ba7b46..8f0ae6e3 100644 --- a/src/layout/workspace.rs +++ b/src/layout/workspace.rs @@ -15,7 +15,7 @@ use smithay::utils::{Logical, Point, Rectangle, Scale, Serial, Size, Transform}; use super::closing_window::{ClosingWindow, ClosingWindowRenderElement}; use super::tile::{Tile, TileRenderElement}; -use super::{InteractiveResizeData, LayoutElement, Options}; +use super::{ConfigureIntent, InteractiveResizeData, LayoutElement, Options}; use crate::animation::Animation; use crate::input::swipe_tracker::SwipeTracker; use crate::niri_render_elements; @@ -2759,7 +2759,15 @@ impl<W: LayoutElement> Workspace<W> { ); win.set_bounds(bounds); - win.send_pending_configure(); + let intent = win.configure_intent(); + + if matches!( + intent, + ConfigureIntent::CanSend | ConfigureIntent::ShouldSend + ) { + win.send_pending_configure(); + } + win.refresh(); } } |
