diff --git a/Controls/PreviewPane.xaml.cs b/Controls/PreviewPane.xaml.cs index cc6b652..1e0dc94 100644 --- a/Controls/PreviewPane.xaml.cs +++ b/Controls/PreviewPane.xaml.cs @@ -590,6 +590,12 @@ public partial class PreviewPane : UserControl private void Preview_MouseRightButtonDown(object sender, MouseButtonEventArgs e) { + // Ctrl + right-click opens the element / backdrop context menu — sources and windows can + // be changed at ANY time, live or not (creator ruling 2026-10-30). Plain right-click stays + // with the zoom box, which is why the menu needed its own chord. + // Returning without Handled lets WPF's ContextMenuService open the menu under the cursor. + if ((Keyboard.Modifiers & ModifierKeys.Control) != 0) return; + var vm = DataContext as MainViewModel; if (vm == null) return; var grid = (Grid)sender; diff --git a/Controls/TopBar.xaml b/Controls/TopBar.xaml index 93b13f8..4159e5b 100644 --- a/Controls/TopBar.xaml +++ b/Controls/TopBar.xaml @@ -23,7 +23,9 @@ - + diff --git a/DESIGN.md b/DESIGN.md index ceb6ee9..231cd90 100644 --- a/DESIGN.md +++ b/DESIGN.md @@ -58,7 +58,7 @@ | `success-container` | `#1d5c38` | Success notice surface (success toast) | | `warning-container` | `#b8860b` | Warning surface — health banner, warning toast | | `test-container` | `#9c6f1c` | Test-stream chrome: the gold top bar and glow | -| `youtube` | `#ff0000` | **YouTube-branded surfaces only** — the Stream Info and YPP rails, the YouTube account row. Not for state: live stays `primary` | +| `youtube` | `#ff0000` | **YouTube-branded surfaces only** — Stream Info / YPP rails, the YouTube account row, and the wordmark's "ty" (creator ruling: never re-colour it) | — the Stream Info and YPP rails, the YouTube account row. Not for state: live stays `primary` | **The rule:** red means "live or recording" and nothing else. Never a Send button, a delete action, a brand flourish, or a general accent — that was the defect in the first Stitch draft. diff --git a/ytLive.Tests/UiShellTests.cs b/ytLive.Tests/UiShellTests.cs index cb1212e..3d0a25e 100644 --- a/ytLive.Tests/UiShellTests.cs +++ b/ytLive.Tests/UiShellTests.cs @@ -59,6 +59,19 @@ public class UiShellTests Assert.DoesNotContain("MaxHeight", listLine); } + [Fact] + public void The_wordmark_ty_stays_youtube_red_and_ctrl_opens_the_context_menu() + { + var topBar = SourceAssert.Text("Controls", "TopBar.xaml"); + Assert.Contains("", topBar); + + // Plain right-click is the zoom box; the context menu moved to Ctrl+right-click so a + // creator can change capture sources mid-stream. + var preview = SourceAssert.Text("Controls", "PreviewPane.xaml.cs"); + Assert.Contains("ModifierKeys.Control", preview); + Assert.Contains("return;", preview); + } + private static int Count(string haystack, string needle) { var hits = 0;