aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/niri.rs12
-rw-r--r--src/ui/exit_confirm_dialog.rs27
2 files changed, 30 insertions, 9 deletions
diff --git a/src/niri.rs b/src/niri.rs
index f1a1f3c0..b4b4a665 100644
--- a/src/niri.rs
+++ b/src/niri.rs
@@ -158,7 +158,7 @@ use crate::render_helpers::{
render_to_texture, render_to_vec, shaders, RenderTarget, SplitElements,
};
use crate::ui::config_error_notification::ConfigErrorNotification;
-use crate::ui::exit_confirm_dialog::ExitConfirmDialog;
+use crate::ui::exit_confirm_dialog::{ExitConfirmDialog, ExitConfirmDialogRenderElement};
use crate::ui::hotkey_overlay::HotkeyOverlay;
use crate::ui::screen_transition::{self, ScreenTransition};
use crate::ui::screenshot_ui::{OutputScreenshot, ScreenshotUi, ScreenshotUiRenderElement};
@@ -4131,9 +4131,12 @@ impl Niri {
}
// Next, the exit confirm dialog.
- if let Some(element) = self.exit_confirm_dialog.render(renderer, output) {
- elements.push(element.into());
- }
+ elements.extend(
+ self.exit_confirm_dialog
+ .render(renderer, output)
+ .into_iter()
+ .map(OutputRenderElements::from),
+ );
// Next, the config error notification too.
if let Some(element) = self.config_error_notification.render(renderer, output) {
@@ -6288,6 +6291,7 @@ niri_render_elements! {
SolidColorRenderElement
>>>,
ScreenshotUi = ScreenshotUiRenderElement,
+ ExitConfirmDialog = ExitConfirmDialogRenderElement,
Texture = PrimaryGpuTextureRenderElement,
// Used for the CPU-rendered panels.
RelocatedMemoryBuffer = RelocateRenderElement<MemoryRenderBufferRenderElement<R>>,
diff --git a/src/ui/exit_confirm_dialog.rs b/src/ui/exit_confirm_dialog.rs
index 11c9a9e2..d9e93ae8 100644
--- a/src/ui/exit_confirm_dialog.rs
+++ b/src/ui/exit_confirm_dialog.rs
@@ -1,6 +1,7 @@
use std::cell::RefCell;
use std::collections::HashMap;
+use arrayvec::ArrayVec;
use ordered_float::NotNan;
use pangocairo::cairo::{self, ImageSurface};
use pangocairo::pango::{Alignment, FontDescription};
@@ -9,6 +10,7 @@ use smithay::output::Output;
use smithay::reexports::gbm::Format as Fourcc;
use smithay::utils::Transform;
+use crate::niri_render_elements;
use crate::render_helpers::memory::MemoryBuffer;
use crate::render_helpers::primary_gpu_texture::PrimaryGpuTextureRenderElement;
use crate::render_helpers::renderer::NiriRenderer;
@@ -26,6 +28,12 @@ pub struct ExitConfirmDialog {
buffers: RefCell<HashMap<NotNan<f64>, Option<MemoryBuffer>>>,
}
+niri_render_elements! {
+ ExitConfirmDialogRenderElement => {
+ Texture = PrimaryGpuTextureRenderElement,
+ }
+}
+
impl ExitConfirmDialog {
pub fn new() -> Self {
let buffer = match render(1.) {
@@ -74,9 +82,11 @@ impl ExitConfirmDialog {
&self,
renderer: &mut R,
output: &Output,
- ) -> Option<PrimaryGpuTextureRenderElement> {
+ ) -> ArrayVec<ExitConfirmDialogRenderElement, 1> {
+ let mut rv = ArrayVec::new();
+
if !self.is_open {
- return None;
+ return rv;
}
let scale = output.current_scale().fractional_scale();
@@ -85,7 +95,7 @@ impl ExitConfirmDialog {
let mut buffers = self.buffers.borrow_mut();
let Some(fallback) = buffers[&NotNan::new(1.).unwrap()].clone() else {
error!("exit confirm dialog opened without fallback buffer");
- return None;
+ return rv;
};
let buffer = buffers
@@ -94,7 +104,10 @@ impl ExitConfirmDialog {
let buffer = buffer.as_ref().unwrap_or(&fallback);
let size = buffer.logical_size();
- let buffer = TextureBuffer::from_memory_buffer(renderer.as_gles_renderer(), buffer).ok()?;
+ let Ok(buffer) = TextureBuffer::from_memory_buffer(renderer.as_gles_renderer(), buffer)
+ else {
+ return rv;
+ };
let location = (output_size.to_f64().to_point() - size.to_point()).downscale(2.);
let mut location = location.to_physical_precise_round(scale).to_logical(scale);
@@ -109,7 +122,11 @@ impl ExitConfirmDialog {
None,
Kind::Unspecified,
);
- Some(PrimaryGpuTextureRenderElement(elem))
+ rv.push(ExitConfirmDialogRenderElement::Texture(
+ PrimaryGpuTextureRenderElement(elem),
+ ));
+
+ rv
}
}