@@ -42,7 +42,7 @@ use x11rb::wrapper::ConnectionExt as _;
4242use x11rb:: xcb_ffi:: XCBConnection ;
4343
4444#[ cfg( feature = "raw-win-handle" ) ]
45- use raw_window_handle:: { unix :: XcbHandle , HasRawWindowHandle , RawWindowHandle } ;
45+ use raw_window_handle:: { HasRawWindowHandle , RawWindowHandle , XcbWindowHandle } ;
4646
4747use crate :: backend:: shared:: Timer ;
4848use crate :: common_util:: IdleCallback ;
@@ -494,7 +494,7 @@ impl WindowBuilder {
494494 window. set_position ( pos) ;
495495 }
496496
497- let handle = WindowHandle :: new ( id, Rc :: downgrade ( & window) ) ;
497+ let handle = WindowHandle :: new ( id, visual_type . visual_id , Rc :: downgrade ( & window) ) ;
498498 window. connect ( handle. clone ( ) ) ?;
499499
500500 self . app . add_window ( id, window) ?;
@@ -1581,6 +1581,8 @@ impl IdleHandle {
15811581#[ derive( Clone , Default ) ]
15821582pub ( crate ) struct WindowHandle {
15831583 id : u32 ,
1584+ #[ allow( dead_code) ] // Only used with the raw-win-handle feature
1585+ visual_id : u32 ,
15841586 window : Weak < Window > ,
15851587}
15861588impl PartialEq for WindowHandle {
@@ -1591,8 +1593,12 @@ impl PartialEq for WindowHandle {
15911593impl Eq for WindowHandle { }
15921594
15931595impl WindowHandle {
1594- fn new ( id : u32 , window : Weak < Window > ) -> WindowHandle {
1595- WindowHandle { id, window }
1596+ fn new ( id : u32 , visual_id : u32 , window : Weak < Window > ) -> WindowHandle {
1597+ WindowHandle {
1598+ id,
1599+ visual_id,
1600+ window,
1601+ }
15961602 }
15971603
15981604 pub fn show ( & self ) {
@@ -1846,19 +1852,9 @@ impl WindowHandle {
18461852#[ cfg( feature = "raw-win-handle" ) ]
18471853unsafe impl HasRawWindowHandle for WindowHandle {
18481854 fn raw_window_handle ( & self ) -> RawWindowHandle {
1849- let mut handle = XcbHandle {
1850- window : self . id ,
1851- ..XcbHandle :: empty ( )
1852- } ;
1853-
1854- if let Some ( window) = self . window . upgrade ( ) {
1855- handle. connection = window. app . connection ( ) . get_raw_xcb_connection ( ) ;
1856- } else {
1857- // Documentation for HasRawWindowHandle encourages filling in all fields possible,
1858- // leaving those empty that cannot be derived.
1859- error ! ( "Failed to get XCBConnection, returning incomplete handle" ) ;
1860- }
1861-
1855+ let mut handle = XcbWindowHandle :: empty ( ) ;
1856+ handle. window = self . id ;
1857+ handle. visual_id = self . visual_id ;
18621858 RawWindowHandle :: Xcb ( handle)
18631859 }
18641860}
0 commit comments