linux: Fix panic missing screen mode for crtc specified mode ID (#9106)

Vitor Ramos created

Fix panic caused by missing screen mode for specified crtc mode id #9105
by searching over all crtcs instead of using the first one which may be
invalid.

Change summary

crates/gpui/src/platform/linux/x11/client.rs | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)

Detailed changes

crates/gpui/src/platform/linux/x11/client.rs 🔗

@@ -314,19 +314,19 @@ impl Client for X11Client {
             .xcb_connection
             .send_request(&xcb::randr::GetScreenResourcesCurrent { window: x_window });
         let screen_resources = self.xcb_connection.wait_for_reply(cookie).expect("TODO");
-        let crtc = screen_resources.crtcs().first().expect("TODO");
-
-        let cookie = self.xcb_connection.send_request(&xcb::randr::GetCrtcInfo {
-            crtc: crtc.to_owned(),
-            config_timestamp: xcb::x::Time::CurrentTime as u32,
-        });
-        let crtc_info = self.xcb_connection.wait_for_reply(cookie).expect("TODO");
-
-        let mode_id = crtc_info.mode().resource_id();
         let mode = screen_resources
-            .modes()
+            .crtcs()
             .iter()
-            .find(|m| m.id == mode_id)
+            .find_map(|crtc| {
+                let cookie = self.xcb_connection.send_request(&xcb::randr::GetCrtcInfo {
+                    crtc: crtc.to_owned(),
+                    config_timestamp: xcb::x::Time::CurrentTime as u32,
+                });
+                let crtc_info = self.xcb_connection.wait_for_reply(cookie).expect("TODO");
+
+                let mode_id = crtc_info.mode().resource_id();
+                screen_resources.modes().iter().find(|m| m.id == mode_id)
+            })
             .expect("Missing screen mode for crtc specified mode id");
 
         let refresh_event_token = self