From 5e5951a43efb15b01d11ab4ffbf12ac968e26120 Mon Sep 17 00:00:00 2001 From: Katie Geer Date: Wed, 14 Jan 2026 10:41:46 -0800 Subject: [PATCH] workspace: Move panel telemetry to workspace level (#46809) This refactors the "Panel Button Clicked" telemetry event to fire from `workspace.rs` instead of `dock.rs`. Previously, the event was emitted in the `PanelButtons` render method's click handler. Now it fires at the workspace level in two places: - `toggle_dock()` - captures panel toggles via dock buttons - `focus_panel()` - captures panel focus via keyboard shortcuts This ensures the telemetry fires once per user action regardless of input method, and retrieves the panel name dynamically via `persistent_name()` rather than relying on a pre-computed local variable. Release Notes: - N/A --- crates/workspace/src/dock.rs | 5 ----- crates/workspace/src/workspace.rs | 15 +++++++++++++++ 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/crates/workspace/src/dock.rs b/crates/workspace/src/dock.rs index 310ef8133e4a4bac1df42becec2b3d6574279431..b3397dd48f58057a78124b1f6124abbb4eb4087b 100644 --- a/crates/workspace/src/dock.rs +++ b/crates/workspace/src/dock.rs @@ -1045,11 +1045,6 @@ impl Render for PanelButtons { .on_click({ let action = action.boxed_clone(); move |_, window, cx| { - telemetry::event!( - "Panel Button Clicked", - name = name, - toggle_state = !is_open - ); window.focus(&focus_handle, cx); window.dispatch_action(action.boxed_clone(), cx) } diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index af8e274f6ed3b5a306f4b5247466c5f23c2078d1..4dad00f158644a7c59bee057ac49c5c4be97dbfd 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -3255,6 +3255,14 @@ impl Workspace { let other_is_zoomed = self.zoomed.is_some() && self.zoomed_position != Some(dock_side); let was_visible = self.is_dock_at_position_open(dock_side, cx) && !other_is_zoomed; + + if let Some(panel) = self.dock_at_position(dock_side).read(cx).active_panel() { + telemetry::event!( + "Panel Button Clicked", + name = panel.persistent_name(), + toggle_state = !was_visible + ); + } if was_visible { self.save_open_dock_positions(cx); } @@ -3415,6 +3423,13 @@ impl Workspace { did_focus_panel = !panel.panel_focus_handle(cx).contains_focused(window, cx); did_focus_panel }); + + telemetry::event!( + "Panel Button Clicked", + name = T::persistent_name(), + toggle_state = did_focus_panel + ); + did_focus_panel }