Fix click-through behaviour of git panel

Piotr Osiewicz and Antonio created

Co-authored-by: Antonio <antonio@zed.dev>

Change summary

crates/gpui/src/app/window.rs | 25 ++++++++++++-------------
1 file changed, 12 insertions(+), 13 deletions(-)

Detailed changes

crates/gpui/src/app/window.rs 🔗

@@ -482,20 +482,19 @@ impl<'a> WindowContext<'a> {
 
                 // If there is already clicked_button stored, don't replace it.
                 if self.window.clicked_button.is_none() {
-                    self.window.clicked_region_ids = self
-                        .window
-                        .mouse_regions
-                        .iter()
-                        .filter_map(|(region, _)| {
-                            if region.bounds.contains_point(e.position) {
-                                Some(region.id())
-                            } else {
-                                None
-                            }
-                        })
-                        .collect();
+                    let window = &mut *self.window;
+                    window.clicked_region_ids.clear();
+
+                    let mut highest_z_index = 0;
+                    for (region, z_index) in window.mouse_regions.iter() {
+                        if region.bounds.contains_point(e.position) && *z_index >= highest_z_index {
+                            highest_z_index = *z_index;
+                            window.clicked_region_ids.clear();
+                            window.clicked_region_ids.insert(region.id());
+                        }
+                    }
 
-                    self.window.clicked_button = Some(e.button);
+                    window.clicked_button = Some(e.button);
                 }
 
                 mouse_events.push(MouseEvent::Down(MouseDown {