gardesk/garnotify / 939c9b8

Browse files

fix(ui): present surface to window after hover re-renders

Authored by mfwolffe <wolffemf@dukes.jmu.edu>
SHA
939c9b84a9cf692e91797f137edf728f6e0e021a
Parents
0e7907b
Tree
9bdba65

2 changed files

StatusFile+-
M garnotify/src/ui/popup.rs 7 0
M garnotify/src/ui/popup_manager.rs 5 5
garnotify/src/ui/popup.rsmodified
@@ -199,6 +199,13 @@ impl NotificationPopup {
199199
         Ok(())
200200
     }
201201
 
202
+    /// Render and present to window (for updates like hover effects)
203
+    pub fn render_and_present(&mut self) -> Result<()> {
204
+        self.render()?;
205
+        self.present()?;
206
+        Ok(())
207
+    }
208
+
202209
     /// Get colors based on notification urgency
203210
     fn get_urgency_colors(&self) -> (Color, Color, Color) {
204211
         let urgency = &self.notification.hints.urgency;
garnotify/src/ui/popup_manager.rsmodified
@@ -8,7 +8,7 @@ use gartk_x11::Connection;
88
 use std::collections::HashMap;
99
 use std::sync::Arc;
1010
 use tokio::sync::mpsc;
11
-use tracing::{debug, error, info, warn};
11
+use tracing::{debug, info, warn};
1212
 use x11rb::protocol::Event as X11Event;
1313
 
1414
 use crate::config::Config;
@@ -234,8 +234,8 @@ impl PopupManager {
234234
                 if let Some(&id) = self.window_to_notification.get(&e.event) {
235235
                     if let Some(popup) = self.popups.get_mut(&id) {
236236
                         popup.on_leave();
237
-                        // Re-render to clear hover effects
238
-                        if let Err(e) = popup.render() {
237
+                        // Re-render and present to clear hover effects
238
+                        if let Err(e) = popup.render_and_present() {
239239
                             warn!("Failed to re-render on leave: {}", e);
240240
                         }
241241
                     }
@@ -244,9 +244,9 @@ impl PopupManager {
244244
             X11Event::MotionNotify(e) => {
245245
                 if let Some(&id) = self.window_to_notification.get(&e.event) {
246246
                     if let Some(popup) = self.popups.get_mut(&id) {
247
-                        // Update hover state, re-render if changed
247
+                        // Update hover state, re-render and present if changed
248248
                         if popup.on_motion(e.event_x as i32, e.event_y as i32) {
249
-                            if let Err(err) = popup.render() {
249
+                            if let Err(err) = popup.render_and_present() {
250250
                                 warn!("Failed to re-render on motion: {}", err);
251251
                             }
252252
                         }