mirror of
https://github.com/niri-wm/niri.git
synced 2026-06-24 02:01:18 +07:00
Store offscreen element id on Mapped instead of user data
We don't need user data for this.
This commit is contained in:
+3
-11
@@ -29,7 +29,7 @@ use smithay::backend::renderer::element::utils::{
|
|||||||
select_dmabuf_feedback, Relocate, RelocateRenderElement,
|
select_dmabuf_feedback, Relocate, RelocateRenderElement,
|
||||||
};
|
};
|
||||||
use smithay::backend::renderer::element::{
|
use smithay::backend::renderer::element::{
|
||||||
default_primary_scanout_output_compare, Id, Kind, PrimaryScanoutOutput, RenderElementStates,
|
default_primary_scanout_output_compare, Kind, PrimaryScanoutOutput, RenderElementStates,
|
||||||
};
|
};
|
||||||
use smithay::backend::renderer::gles::GlesRenderer;
|
use smithay::backend::renderer::gles::GlesRenderer;
|
||||||
use smithay::backend::renderer::sync::SyncPoint;
|
use smithay::backend::renderer::sync::SyncPoint;
|
||||||
@@ -503,9 +503,6 @@ pub enum CenterCoords {
|
|||||||
Both,
|
Both,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default)]
|
|
||||||
pub struct WindowOffscreenId(pub RefCell<Option<Id>>);
|
|
||||||
|
|
||||||
impl RedrawState {
|
impl RedrawState {
|
||||||
fn queue_redraw(self) -> Self {
|
fn queue_redraw(self) -> Self {
|
||||||
match self {
|
match self {
|
||||||
@@ -3796,12 +3793,7 @@ impl Niri {
|
|||||||
|
|
||||||
for mapped in self.layout.windows_for_output(output) {
|
for mapped in self.layout.windows_for_output(output) {
|
||||||
let win = &mapped.window;
|
let win = &mapped.window;
|
||||||
let offscreen_id = win
|
let offscreen_id = mapped.offscreen_element_id().clone();
|
||||||
.user_data()
|
|
||||||
.get_or_insert(WindowOffscreenId::default)
|
|
||||||
.0
|
|
||||||
.borrow();
|
|
||||||
let offscreen_id = offscreen_id.as_ref();
|
|
||||||
|
|
||||||
win.with_surfaces(|surface, states| {
|
win.with_surfaces(|surface, states| {
|
||||||
let surface_primary_scanout_output = states
|
let surface_primary_scanout_output = states
|
||||||
@@ -3811,7 +3803,7 @@ impl Niri {
|
|||||||
.lock()
|
.lock()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.update_from_render_element_states(
|
.update_from_render_element_states(
|
||||||
offscreen_id.cloned().unwrap_or_else(|| surface.into()),
|
offscreen_id.clone().unwrap_or_else(|| surface.into()),
|
||||||
output,
|
output,
|
||||||
render_element_states,
|
render_element_states,
|
||||||
|_, _, output, _| output,
|
|_, _, output, _| output,
|
||||||
|
|||||||
+12
-7
@@ -1,4 +1,4 @@
|
|||||||
use std::cell::{Cell, RefCell};
|
use std::cell::{Cell, Ref, RefCell};
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
use niri_config::{Color, CornerRadius, GradientInterpolation, WindowRule};
|
use niri_config::{Color, CornerRadius, GradientInterpolation, WindowRule};
|
||||||
@@ -24,7 +24,6 @@ use crate::layout::{
|
|||||||
ConfigureIntent, InteractiveResizeData, LayoutElement, LayoutElementRenderElement,
|
ConfigureIntent, InteractiveResizeData, LayoutElement, LayoutElementRenderElement,
|
||||||
LayoutElementRenderSnapshot,
|
LayoutElementRenderSnapshot,
|
||||||
};
|
};
|
||||||
use crate::niri::WindowOffscreenId;
|
|
||||||
use crate::niri_render_elements;
|
use crate::niri_render_elements;
|
||||||
use crate::render_helpers::border::BorderRenderElement;
|
use crate::render_helpers::border::BorderRenderElement;
|
||||||
use crate::render_helpers::renderer::NiriRenderer;
|
use crate::render_helpers::renderer::NiriRenderer;
|
||||||
@@ -71,6 +70,11 @@ pub struct Mapped {
|
|||||||
/// resizes immediately, without waiting for a 1 second throttled callback.
|
/// resizes immediately, without waiting for a 1 second throttled callback.
|
||||||
needs_frame_callback: bool,
|
needs_frame_callback: bool,
|
||||||
|
|
||||||
|
/// Id of the offscreen element rendered in place of this window.
|
||||||
|
///
|
||||||
|
/// If `None`, then the window is not offscreened.
|
||||||
|
offscreen_element_id: RefCell<Option<Id>>,
|
||||||
|
|
||||||
/// Whether this window has the keyboard focus.
|
/// Whether this window has the keyboard focus.
|
||||||
is_focused: bool,
|
is_focused: bool,
|
||||||
|
|
||||||
@@ -188,6 +192,7 @@ impl Mapped {
|
|||||||
need_to_recompute_rules: false,
|
need_to_recompute_rules: false,
|
||||||
needs_configure: false,
|
needs_configure: false,
|
||||||
needs_frame_callback: false,
|
needs_frame_callback: false,
|
||||||
|
offscreen_element_id: RefCell::new(None),
|
||||||
is_focused: false,
|
is_focused: false,
|
||||||
is_active_in_column: true,
|
is_active_in_column: true,
|
||||||
is_floating: false,
|
is_floating: false,
|
||||||
@@ -252,6 +257,10 @@ impl Mapped {
|
|||||||
self.credentials.as_ref()
|
self.credentials.as_ref()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn offscreen_element_id(&self) -> Ref<Option<Id>> {
|
||||||
|
self.offscreen_element_id.borrow()
|
||||||
|
}
|
||||||
|
|
||||||
pub fn is_focused(&self) -> bool {
|
pub fn is_focused(&self) -> bool {
|
||||||
self.is_focused
|
self.is_focused
|
||||||
}
|
}
|
||||||
@@ -743,11 +752,7 @@ impl LayoutElement for Mapped {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn set_offscreen_element_id(&self, id: Option<Id>) {
|
fn set_offscreen_element_id(&self, id: Option<Id>) {
|
||||||
let data = self
|
self.offscreen_element_id.replace(id);
|
||||||
.window
|
|
||||||
.user_data()
|
|
||||||
.get_or_insert(WindowOffscreenId::default);
|
|
||||||
data.0.replace(id);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_activated(&mut self, active: bool) {
|
fn set_activated(&mut self, active: bool) {
|
||||||
|
|||||||
Reference in New Issue
Block a user