detached 366c2e5

refactor(context-menu): inline static class helpers

commit
366c2e5ec7237cc6c650b1cc680df886c38aa1b2
author
brice · · 2026-04-14 05:45 UTC
committer
brice · · 2026-04-14 12:06 UTC
parent
50d6c62
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
3 files · +6 -36
M internal/infrastructure/gtkmenu/renderer.go +4 -21
@@ -40,18 +40,6 @@ func BuildButtons(items []port.MenuItem) []renderItem {
4040 return renderItems
4141 }
4242
43-func contextMenuItemClasses() []string {
44- return []string{"flat", contextMenuItemClass}
45-}
46-
47-func contextMenuPopoverClasses() []string {
48- return []string{contextMenuPopoverClass}
49-}
50-
51-func contextMenuSeparatorClasses() []string {
52- return []string{contextMenuSeparatorClass}
53-}
54-
5543 func isSeparator(item port.MenuItem) bool {
5644 return item.Action == "" && item.Label == ""
5745 }
@@ -108,18 +96,15 @@ func showMenu(
10896 for _, item := range items {
10997 if item.separator {
11098 sep := gtk.NewSeparator(gtk.OrientationHorizontalValue)
111- for _, class := range contextMenuSeparatorClasses() {
112- sep.AddCssClass(class)
113- }
99+ sep.AddCssClass(contextMenuSeparatorClass)
114100 box.Append(&sep.Widget)
115101 continue
116102 }
117103
118104 btn := gtk.NewButton()
119105 btn.SetLabel(item.item.Label)
120- for _, class := range contextMenuItemClasses() {
121- btn.AddCssClass(class)
122- }
106+ btn.AddCssClass("flat")
107+ btn.AddCssClass(contextMenuItemClass)
123108
124109 menuItem := item.item
125110 clickCb := func(_ gtk.Button) {
@@ -136,9 +121,7 @@ func showMenu(
136121 }
137122
138123 popover = gtk.NewPopover()
139- for _, class := range contextMenuPopoverClasses() {
140- popover.AddCssClass(class)
141- }
124+ popover.AddCssClass(contextMenuPopoverClass)
142125 popover.SetChild(&box.Widget)
143126 attachPopover(popover, popoverHost, parent)
144127 popover.SetHasArrow(false)
@@ -40,18 +40,6 @@ func BuildButtons(items []port.MenuItem) []renderItem {
40 return renderItems40 return renderItems
41 }41 }
42 42
43-func contextMenuItemClasses() []string {
44- return []string{"flat", contextMenuItemClass}
45-}
46-
47-func contextMenuPopoverClasses() []string {
48- return []string{contextMenuPopoverClass}
49-}
50-
51-func contextMenuSeparatorClasses() []string {
52- return []string{contextMenuSeparatorClass}
53-}
54-
55 func isSeparator(item port.MenuItem) bool {43 func isSeparator(item port.MenuItem) bool {
56 return item.Action == "" && item.Label == ""44 return item.Action == "" && item.Label == ""
57 }45 }
@@ -108,18 +96,15 @@ func showMenu(
108 for _, item := range items {96 for _, item := range items {
109 if item.separator {97 if item.separator {
110 sep := gtk.NewSeparator(gtk.OrientationHorizontalValue)98 sep := gtk.NewSeparator(gtk.OrientationHorizontalValue)
111- for _, class := range contextMenuSeparatorClasses() {99+ sep.AddCssClass(contextMenuSeparatorClass)
112- sep.AddCssClass(class)
113- }
114 box.Append(&sep.Widget)100 box.Append(&sep.Widget)
115 continue101 continue
116 }102 }
117 103
118 btn := gtk.NewButton()104 btn := gtk.NewButton()
119 btn.SetLabel(item.item.Label)105 btn.SetLabel(item.item.Label)
120- for _, class := range contextMenuItemClasses() {106+ btn.AddCssClass("flat")
121- btn.AddCssClass(class)107+ btn.AddCssClass(contextMenuItemClass)
122- }
123 108
124 menuItem := item.item109 menuItem := item.item
125 clickCb := func(_ gtk.Button) {110 clickCb := func(_ gtk.Button) {
@@ -136,9 +121,7 @@ func showMenu(
136 }121 }
137 122
138 popover = gtk.NewPopover()123 popover = gtk.NewPopover()
139- for _, class := range contextMenuPopoverClasses() {124+ popover.AddCssClass(contextMenuPopoverClass)
140- popover.AddCssClass(class)
141- }
142 popover.SetChild(&box.Widget)125 popover.SetChild(&box.Widget)
143 attachPopover(popover, popoverHost, parent)126 attachPopover(popover, popoverHost, parent)
144 popover.SetHasArrow(false)127 popover.SetHasArrow(false)
M internal/infrastructure/gtkmenu/renderer_test.go +0 -12
@@ -62,15 +62,3 @@ func TestBuildButtons(t *testing.T) {
6262 require.Equal(t, "Inspect Element", renderItems[3].item.Label)
6363 require.False(t, renderItems[3].separator)
6464 }
65-
66-func TestContextMenuItemClasses(t *testing.T) {
67- require.Equal(t, []string{"flat", contextMenuItemClass}, contextMenuItemClasses())
68-}
69-
70-func TestContextMenuSeparatorClasses(t *testing.T) {
71- require.Equal(t, []string{contextMenuSeparatorClass}, contextMenuSeparatorClasses())
72-}
73-
74-func TestContextMenuPopoverClasses(t *testing.T) {
75- require.Equal(t, []string{contextMenuPopoverClass}, contextMenuPopoverClasses())
76-}
@@ -62,15 +62,3 @@ func TestBuildButtons(t *testing.T) {
62 require.Equal(t, "Inspect Element", renderItems[3].item.Label)62 require.Equal(t, "Inspect Element", renderItems[3].item.Label)
63 require.False(t, renderItems[3].separator)63 require.False(t, renderItems[3].separator)
64 }64 }
65-
66-func TestContextMenuItemClasses(t *testing.T) {
67- require.Equal(t, []string{"flat", contextMenuItemClass}, contextMenuItemClasses())
68-}
69-
70-func TestContextMenuSeparatorClasses(t *testing.T) {
71- require.Equal(t, []string{contextMenuSeparatorClass}, contextMenuSeparatorClasses())
72-}
73-
74-func TestContextMenuPopoverClasses(t *testing.T) {
75- require.Equal(t, []string{contextMenuPopoverClass}, contextMenuPopoverClasses())
76-}
M internal/ui/theme/css.go +2 -3
@@ -115,7 +115,7 @@ func GenerateCSSFull(p Palette, _ float64, fonts FontConfig, modeColors ModeColo
115115 sb.WriteString("\n")
116116
117117 // Context menu styling
118- sb.WriteString(generateContextMenuCSS(p))
118+ sb.WriteString(generateContextMenuCSS())
119119 sb.WriteString("\n")
120120
121121 // Tab picker styling
@@ -907,8 +907,7 @@ row:selected .session-manager-row {
907907 }
908908
909909 // generateContextMenuCSS creates shared context menu styles.
910-func generateContextMenuCSS(p Palette) string {
911- _ = p
910+func generateContextMenuCSS() string {
912911 return `/* ===== Context Menu Styling ===== */
913912
914913 popover.context-menu-popover {
@@ -115,7 +115,7 @@ func GenerateCSSFull(p Palette, _ float64, fonts FontConfig, modeColors ModeColo
115 sb.WriteString("\n")115 sb.WriteString("\n")
116 116
117 // Context menu styling117 // Context menu styling
118- sb.WriteString(generateContextMenuCSS(p))118+ sb.WriteString(generateContextMenuCSS())
119 sb.WriteString("\n")119 sb.WriteString("\n")
120 120
121 // Tab picker styling121 // Tab picker styling
@@ -907,8 +907,7 @@ row:selected .session-manager-row {
907 }907 }
908 908
909 // generateContextMenuCSS creates shared context menu styles.909 // generateContextMenuCSS creates shared context menu styles.
910-func generateContextMenuCSS(p Palette) string {910+func generateContextMenuCSS() string {
911- _ = p
912 return `/* ===== Context Menu Styling ===== */911 return `/* ===== Context Menu Styling ===== */
913 912
914 popover.context-menu-popover {913 popover.context-menu-popover {

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 8

Tags 42

↑↓ moveenter openesc close