gardesk/gar / 531d253

Browse files

Add detailed monitor detection logging

Authored by mfwolffe <wolffemf@dukes.jmu.edu>
SHA
531d253baae11a75fe41d96db889bf098687fa76
Parents
0e5c598
Tree
7c0b92f

1 changed file

StatusFile+-
M gar/src/x11/connection.rs 36 4
gar/src/x11/connection.rsmodified
@@ -232,6 +232,24 @@ impl Connection {
232232
         Ok(())
233233
     }
234234
 
235
+    /// Warp the mouse pointer to the center of a window.
236
+    pub fn warp_pointer_to_window(&self, window: Window) -> Result<(), Error> {
237
+        // Get window geometry
238
+        let geom = self.conn.get_geometry(window)?.reply()?;
239
+        let center_x = (geom.width / 2) as i16;
240
+        let center_y = (geom.height / 2) as i16;
241
+
242
+        self.conn.warp_pointer(
243
+            x11rb::NONE,  // src_window (none = don't check source)
244
+            window,       // dst_window
245
+            0, 0,         // src_x, src_y (ignored when src_window is none)
246
+            0, 0,         // src_width, src_height (ignored)
247
+            center_x,     // dst_x (relative to dst_window)
248
+            center_y,     // dst_y (relative to dst_window)
249
+        )?;
250
+        Ok(())
251
+    }
252
+
235253
     /// Set window border width and color.
236254
     pub fn set_border(&self, window: Window, width: u32, color: u32) -> Result<(), Error> {
237255
         let aux = ChangeWindowAttributesAux::new().border_pixel(color);
@@ -636,13 +654,27 @@ impl Connection {
636654
             monitors.push(monitor);
637655
         }
638656
 
657
+        // Log raw (pre-sorted) monitor info from RandR
658
+        tracing::debug!("Raw monitor order from RandR:");
659
+        for m in &monitors {
660
+            tracing::debug!(
661
+                "  '{}' at ({}, {}) size {}x{}",
662
+                m.name, m.geometry.x, m.geometry.y, m.geometry.width, m.geometry.height
663
+            );
664
+        }
665
+
639666
         // Sort monitors by X position (left to right)
640667
         monitors.sort_by_key(|m| m.geometry.x);
641668
 
642
-        tracing::info!("Detected {} monitors: {:?}",
643
-            monitors.len(),
644
-            monitors.iter().map(|m| &m.name).collect::<Vec<_>>()
645
-        );
669
+        // Log sorted monitor info
670
+        for (i, m) in monitors.iter().enumerate() {
671
+            tracing::info!(
672
+                "Monitor {}: '{}' at ({}, {}) size {}x{} {}",
673
+                i, m.name, m.geometry.x, m.geometry.y,
674
+                m.geometry.width, m.geometry.height,
675
+                if m.primary { "(primary)" } else { "" }
676
+            );
677
+        }
646678
 
647679
         Ok(monitors)
648680
     }