detached 6903d03

Merge pull request #352 from bnema/chore/release-upstream-pins

chore: pin released purego upstream modules
commit
6903d03acaa3b6cfc38d2b036dde6423a6234b62
author
bnema · · 2026-07-15 06:54 UTC
committer
GitHub · · 2026-07-15 06:54 UTC
merge of
7efcb53 + 6ce0dc8 · diff against the first parent
signature
GPG UnverifiedB5690EEEBB952194 The key is unknown
68 files · +540 -531
M go.mod +8 -10
@@ -6,12 +6,12 @@ require (
66 github.com/a-h/templ v0.3.1020
77 github.com/andybalholm/brotli v1.2.2
88 github.com/bnema/purego v0.11.0-bnema.4
9- github.com/bnema/purego-cef v0.13.4-0.20260714140305-f0b7414af67e
10- github.com/bnema/purego-cef2gtk v0.8.4-0.20260714160309-bbd397409ebe
11- github.com/bnema/purego-pipewire v0.1.5-0.20260714124450-6504b9cdf02a
12- github.com/bnema/purego-sqlite v0.1.4-0.20260714131321-3614fe683b9c
13- github.com/bnema/purego-webp v0.2.1-0.20260714152238-7bc9c402fdf6
14- github.com/bnema/puregotk v0.7.1-0.20260714200603-7370c78950ef
9+ github.com/bnema/purego-cef v0.13.4
10+ github.com/bnema/purego-cef2gtk v0.8.5
11+ github.com/bnema/purego-pipewire v0.1.5
12+ github.com/bnema/purego-sqlite v0.1.4
13+ github.com/bnema/purego-webp v0.2.1
14+ github.com/bnema/puregotk v0.7.1
1515 github.com/charmbracelet/bubbles v1.0.0
1616 github.com/charmbracelet/bubbletea v1.3.10
1717 github.com/charmbracelet/lipgloss v1.1.0
@@ -43,11 +43,10 @@ require (
4343 github.com/clipperhouse/displaywidth v0.11.0 // indirect
4444 github.com/clipperhouse/uax29/v2 v2.7.0 // indirect
4545 github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect
46- github.com/davecgh/go-spew v1.1.1 // indirect
46+ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
4747 github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect
4848 github.com/fatih/color v1.19.0 // indirect
4949 github.com/go-viper/mapstructure/v2 v2.5.0 // indirect
50- github.com/google/go-cmp v0.7.0 // indirect
5150 github.com/inconshreveable/mousetrap v1.1.0 // indirect
5251 github.com/lucasb-eyer/go-colorful v1.4.0 // indirect
5352 github.com/mattn/go-colorable v0.1.14 // indirect
@@ -59,7 +58,7 @@ require (
5958 github.com/muesli/cancelreader v0.2.2 // indirect
6059 github.com/muesli/termenv v0.16.0 // indirect
6160 github.com/natefinch/atomic v1.0.1 // indirect
62- github.com/pmezard/go-difflib v1.0.0 // indirect
61+ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
6362 github.com/rivo/uniseg v0.4.7 // indirect
6463 github.com/rogpeppe/go-internal v1.14.1 // indirect
6564 github.com/russross/blackfriday/v2 v2.1.0 // indirect
@@ -81,7 +80,6 @@ require (
8180 golang.org/x/text v0.40.0 // indirect
8281 golang.org/x/tools v0.47.0 // indirect
8382 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
84- mvdan.cc/gofumpt v0.9.2 // indirect
8583 )
8684
8785 tool github.com/a-h/templ/cmd/templ
@@ -6,12 +6,12 @@ require (
6 github.com/a-h/templ v0.3.10206 github.com/a-h/templ v0.3.1020
7 github.com/andybalholm/brotli v1.2.27 github.com/andybalholm/brotli v1.2.2
8 github.com/bnema/purego v0.11.0-bnema.48 github.com/bnema/purego v0.11.0-bnema.4
9- github.com/bnema/purego-cef v0.13.4-0.20260714140305-f0b7414af67e9+ github.com/bnema/purego-cef v0.13.4
10- github.com/bnema/purego-cef2gtk v0.8.4-0.20260714160309-bbd397409ebe10+ github.com/bnema/purego-cef2gtk v0.8.5
11- github.com/bnema/purego-pipewire v0.1.5-0.20260714124450-6504b9cdf02a11+ github.com/bnema/purego-pipewire v0.1.5
12- github.com/bnema/purego-sqlite v0.1.4-0.20260714131321-3614fe683b9c12+ github.com/bnema/purego-sqlite v0.1.4
13- github.com/bnema/purego-webp v0.2.1-0.20260714152238-7bc9c402fdf613+ github.com/bnema/purego-webp v0.2.1
14- github.com/bnema/puregotk v0.7.1-0.20260714200603-7370c78950ef14+ github.com/bnema/puregotk v0.7.1
15 github.com/charmbracelet/bubbles v1.0.015 github.com/charmbracelet/bubbles v1.0.0
16 github.com/charmbracelet/bubbletea v1.3.1016 github.com/charmbracelet/bubbletea v1.3.10
17 github.com/charmbracelet/lipgloss v1.1.017 github.com/charmbracelet/lipgloss v1.1.0
@@ -43,11 +43,10 @@ require (
43 github.com/clipperhouse/displaywidth v0.11.0 // indirect43 github.com/clipperhouse/displaywidth v0.11.0 // indirect
44 github.com/clipperhouse/uax29/v2 v2.7.0 // indirect44 github.com/clipperhouse/uax29/v2 v2.7.0 // indirect
45 github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect45 github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect
46- github.com/davecgh/go-spew v1.1.1 // indirect46+ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
47 github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect47 github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect
48 github.com/fatih/color v1.19.0 // indirect48 github.com/fatih/color v1.19.0 // indirect
49 github.com/go-viper/mapstructure/v2 v2.5.0 // indirect49 github.com/go-viper/mapstructure/v2 v2.5.0 // indirect
50- github.com/google/go-cmp v0.7.0 // indirect
51 github.com/inconshreveable/mousetrap v1.1.0 // indirect50 github.com/inconshreveable/mousetrap v1.1.0 // indirect
52 github.com/lucasb-eyer/go-colorful v1.4.0 // indirect51 github.com/lucasb-eyer/go-colorful v1.4.0 // indirect
53 github.com/mattn/go-colorable v0.1.14 // indirect52 github.com/mattn/go-colorable v0.1.14 // indirect
@@ -59,7 +58,7 @@ require (
59 github.com/muesli/cancelreader v0.2.2 // indirect58 github.com/muesli/cancelreader v0.2.2 // indirect
60 github.com/muesli/termenv v0.16.0 // indirect59 github.com/muesli/termenv v0.16.0 // indirect
61 github.com/natefinch/atomic v1.0.1 // indirect60 github.com/natefinch/atomic v1.0.1 // indirect
62- github.com/pmezard/go-difflib v1.0.0 // indirect61+ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
63 github.com/rivo/uniseg v0.4.7 // indirect62 github.com/rivo/uniseg v0.4.7 // indirect
64 github.com/rogpeppe/go-internal v1.14.1 // indirect63 github.com/rogpeppe/go-internal v1.14.1 // indirect
65 github.com/russross/blackfriday/v2 v2.1.0 // indirect64 github.com/russross/blackfriday/v2 v2.1.0 // indirect
@@ -81,7 +80,6 @@ require (
81 golang.org/x/text v0.40.0 // indirect80 golang.org/x/text v0.40.0 // indirect
82 golang.org/x/tools v0.47.0 // indirect81 golang.org/x/tools v0.47.0 // indirect
83 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect82 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
84- mvdan.cc/gofumpt v0.9.2 // indirect
85 )83 )
86 84
87 tool github.com/a-h/templ/cmd/templ85 tool github.com/a-h/templ/cmd/templ
M go.sum +16 -18 generated file: collapsed
M internal/logging/first_presentation_collector_test.go +3 -3
@@ -144,9 +144,9 @@ func TestFirstPresentationCollectorSanitizesMachineLocalValues(t *testing.T) {
144144 }
145145 for _, required := range []string{
146146 `"measured_source_revision"`,
147- `"version": "v0.8.4-0.20260714160309-bbd397409ebe"`,
148- `"tag": "v0.8.4"`,
149- `"revision": "bbd397409ebed75a5979c1e4566a2ef319f6a484"`,
147+ `"version": "v0.8.5"`,
148+ `"tag": "v0.8.5"`,
149+ `"revision": "b9fb46ef5c04ca0993943c5ca4b6f0fe83583304"`,
150150 } {
151151 require.Contains(t, artifacts.String(), required)
152152 }
@@ -144,9 +144,9 @@ func TestFirstPresentationCollectorSanitizesMachineLocalValues(t *testing.T) {
144 }144 }
145 for _, required := range []string{145 for _, required := range []string{
146 `"measured_source_revision"`,146 `"measured_source_revision"`,
147- `"version": "v0.8.4-0.20260714160309-bbd397409ebe"`,147+ `"version": "v0.8.5"`,
148- `"tag": "v0.8.4"`,148+ `"tag": "v0.8.5"`,
149- `"revision": "bbd397409ebed75a5979c1e4566a2ef319f6a484"`,149+ `"revision": "b9fb46ef5c04ca0993943c5ca4b6f0fe83583304"`,
150 } {150 } {
151 require.Contains(t, artifacts.String(), required)151 require.Contains(t, artifacts.String(), required)
152 }152 }
M scripts/collect_first_presentation.sh +18 -10
@@ -38,7 +38,7 @@ readonly upstream_module="github.com/bnema/purego-cef2gtk"
3838 resolve_upstream_provenance() {
3939 local selected_metadata selected_version downloaded_metadata
4040
41- selected_metadata="$(go list -m -json "$upstream_module" 2>/dev/null)" || {
41+ selected_metadata="$(GOFLAGS=-mod=mod go list -m -json "$upstream_module" 2>/dev/null)" || {
4242 echo "first-presentation: immutable module provenance is unavailable" >&2
4343 exit 2
4444 }
@@ -75,9 +75,11 @@ try:
7575 fail()
7676 if downloaded.get("Version") != version:
7777 fail()
78- # A selected pseudo-version is an exact immutable selector, never a branch.
79- match = re.fullmatch(r"(v\d+\.\d+\.\d+)-0\.\d{14}-([0-9a-f]{12})", version)
80- if not match:
78+ # A pseudo-version identifies an immutable commit; a released semver tag is
79+ # accepted only when Go records that exact tag and its immutable hash.
80+ pseudo_match = re.fullmatch(r"(v\d+\.\d+\.\d+)-0\.\d{14}-([0-9a-f]{12})", version)
81+ tag_match = re.fullmatch(r"v\d+\.\d+\.\d+", version)
82+ if not pseudo_match and not tag_match:
8183 fail()
8284 info_path = downloaded.get("Info")
8385 if not isinstance(info_path, str) or not info_path:
@@ -92,15 +94,21 @@ try:
9294 fail()
9395 if not isinstance(revision, str) or not re.fullmatch(r"[0-9a-f]{40}", revision):
9496 fail()
95- if not revision.startswith(match.group(2)):
96- fail()
97- # A named ref can move. Only the immutable hash itself is acceptable.
98- if origin.get("Ref") not in (None, "", revision):
99- fail()
97+ if pseudo_match:
98+ if not revision.startswith(pseudo_match.group(2)):
99+ fail()
100+ # A named ref can move. Only the immutable hash itself is acceptable.
101+ if origin.get("Ref") not in (None, "", revision):
102+ fail()
103+ tag = pseudo_match.group(1)
104+ else:
105+ if origin.get("Ref") != "refs/tags/" + version:
106+ fail()
107+ tag = version
100108 except (AttributeError, KeyError, OSError, TypeError, ValueError, json.JSONDecodeError):
101109 fail()
102110
103-print("\t".join((version, match.group(1), revision)))
111+print("\t".join((version, tag, revision)))
104112 PY
105113 }
106114
@@ -38,7 +38,7 @@ readonly upstream_module="github.com/bnema/purego-cef2gtk"
38 resolve_upstream_provenance() {38 resolve_upstream_provenance() {
39 local selected_metadata selected_version downloaded_metadata39 local selected_metadata selected_version downloaded_metadata
40 40
41- selected_metadata="$(go list -m -json "$upstream_module" 2>/dev/null)" || {41+ selected_metadata="$(GOFLAGS=-mod=mod go list -m -json "$upstream_module" 2>/dev/null)" || {
42 echo "first-presentation: immutable module provenance is unavailable" >&242 echo "first-presentation: immutable module provenance is unavailable" >&2
43 exit 243 exit 2
44 }44 }
@@ -75,9 +75,11 @@ try:
75 fail()75 fail()
76 if downloaded.get("Version") != version:76 if downloaded.get("Version") != version:
77 fail()77 fail()
78- # A selected pseudo-version is an exact immutable selector, never a branch.78+ # A pseudo-version identifies an immutable commit; a released semver tag is
79- match = re.fullmatch(r"(v\d+\.\d+\.\d+)-0\.\d{14}-([0-9a-f]{12})", version)79+ # accepted only when Go records that exact tag and its immutable hash.
80- if not match:80+ pseudo_match = re.fullmatch(r"(v\d+\.\d+\.\d+)-0\.\d{14}-([0-9a-f]{12})", version)
81+ tag_match = re.fullmatch(r"v\d+\.\d+\.\d+", version)
82+ if not pseudo_match and not tag_match:
81 fail()83 fail()
82 info_path = downloaded.get("Info")84 info_path = downloaded.get("Info")
83 if not isinstance(info_path, str) or not info_path:85 if not isinstance(info_path, str) or not info_path:
@@ -92,15 +94,21 @@ try:
92 fail()94 fail()
93 if not isinstance(revision, str) or not re.fullmatch(r"[0-9a-f]{40}", revision):95 if not isinstance(revision, str) or not re.fullmatch(r"[0-9a-f]{40}", revision):
94 fail()96 fail()
95- if not revision.startswith(match.group(2)):97+ if pseudo_match:
96- fail()98+ if not revision.startswith(pseudo_match.group(2)):
97- # A named ref can move. Only the immutable hash itself is acceptable.99+ fail()
98- if origin.get("Ref") not in (None, "", revision):100+ # A named ref can move. Only the immutable hash itself is acceptable.
99- fail()101+ if origin.get("Ref") not in (None, "", revision):
102+ fail()
103+ tag = pseudo_match.group(1)
104+ else:
105+ if origin.get("Ref") != "refs/tags/" + version:
106+ fail()
107+ tag = version
100 except (AttributeError, KeyError, OSError, TypeError, ValueError, json.JSONDecodeError):108 except (AttributeError, KeyError, OSError, TypeError, ValueError, json.JSONDecodeError):
101 fail()109 fail()
102 110
103-print("\t".join((version, match.group(1), revision)))111+print("\t".join((version, tag, revision)))
104 PY112 PY
105 }113 }
106 114
M vendor/github.com/bnema/purego-cef/cef/bridge.go +9 -0 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_accessibility_handler_gen.go +2 -2 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_app_gen.go +2 -2 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_audio_handler_gen.go +5 -5 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_browser_gen.go +2 -2 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_browser_process_handler_gen.go +3 -3 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_client_gen.go +3 -3 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_command_handler_gen.go +3 -3 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_context_menu_handler_gen.go +21 -21 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_devtools_message_observer_gen.go +5 -5 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_dialog_handler_gen.go +2 -2 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_display_handler_gen.go +14 -14 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_dom_gen.go +1 -1 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_download_handler_gen.go +7 -7 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_drag_handler_gen.go +4 -4 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_find_handler_gen.go +1 -1 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_focus_handler_gen.go +3 -3 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_frame_handler_gen.go +11 -11 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_jsdialog_handler_gen.go +6 -6 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_keyboard_handler_gen.go +2 -2 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_life_span_handler_gen.go +11 -11 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_load_handler_gen.go +7 -7 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_media_router_gen.go +7 -7 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_menu_model_delegate_gen.go +7 -7 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_permission_handler_gen.go +6 -6 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_print_handler_gen.go +9 -9 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_render_handler_gen.go +17 -17
@@ -52,7 +52,7 @@ func renderHandlerGetRootScreenRectCEFCallback() uintptr {
5252 if !ownerOK {
5353 return 0
5454 }
55- browser := wrapBrowser(unsafe.Pointer(arg0))
55+ browser := wrapBrowser(cefCallbackPointer(arg0))
5656 rect := (*Rect)(unsafe.Pointer(arg1))
5757 return uintptr(impl.GetRootScreenRect(browser, rect))
5858 })
@@ -67,7 +67,7 @@ func renderHandlerGetViewRectCEFCallback() uintptr {
6767 if !ownerOK {
6868 return
6969 }
70- browser := wrapBrowser(unsafe.Pointer(arg0))
70+ browser := wrapBrowser(cefCallbackPointer(arg0))
7171 rect := (*Rect)(unsafe.Pointer(arg1))
7272 impl.GetViewRect(browser, rect)
7373 })
@@ -82,7 +82,7 @@ func renderHandlerGetScreenPointCEFCallback() uintptr {
8282 if !ownerOK {
8383 return 0
8484 }
85- browser := wrapBrowser(unsafe.Pointer(arg0))
85+ browser := wrapBrowser(cefCallbackPointer(arg0))
8686 viewx := int32(arg1)
8787 viewy := int32(arg2)
8888 screenx := (*int32)(unsafe.Pointer(arg3))
@@ -100,7 +100,7 @@ func renderHandlerGetScreenInfoCEFCallback() uintptr {
100100 if !ownerOK {
101101 return 0
102102 }
103- browser := wrapBrowser(unsafe.Pointer(arg0))
103+ browser := wrapBrowser(cefCallbackPointer(arg0))
104104 screenInfo := (*ScreenInfo)(unsafe.Pointer(arg1))
105105 return uintptr(impl.GetScreenInfo(browser, screenInfo))
106106 })
@@ -115,7 +115,7 @@ func renderHandlerOnPopupShowCEFCallback() uintptr {
115115 if !ownerOK {
116116 return
117117 }
118- browser := wrapBrowser(unsafe.Pointer(arg0))
118+ browser := wrapBrowser(cefCallbackPointer(arg0))
119119 show := int32(arg1)
120120 impl.OnPopupShow(browser, show)
121121 })
@@ -130,7 +130,7 @@ func renderHandlerOnPopupSizeCEFCallback() uintptr {
130130 if !ownerOK {
131131 return
132132 }
133- browser := wrapBrowser(unsafe.Pointer(arg0))
133+ browser := wrapBrowser(cefCallbackPointer(arg0))
134134 rect := (*Rect)(unsafe.Pointer(arg1))
135135 impl.OnPopupSize(browser, rect)
136136 })
@@ -145,7 +145,7 @@ func renderHandlerOnPaintCEFCallback() uintptr {
145145 if !ownerOK {
146146 return
147147 }
148- browser := wrapBrowser(unsafe.Pointer(arg0))
148+ browser := wrapBrowser(cefCallbackPointer(arg0))
149149 type_ := PaintElementType(arg1)
150150 dirtyrects := decodeSlice[Rect](arg3, int(arg2))
151151 buffer := unsafe.Slice((*byte)(unsafe.Pointer(arg4)), int(arg5)*int(arg6)*4)
@@ -164,7 +164,7 @@ func renderHandlerOnAcceleratedPaintCEFCallback() uintptr {
164164 if !ownerOK {
165165 return
166166 }
167- browser := wrapBrowser(unsafe.Pointer(arg0))
167+ browser := wrapBrowser(cefCallbackPointer(arg0))
168168 type_ := PaintElementType(arg1)
169169 dirtyrects := decodeSlice[Rect](arg3, int(arg2))
170170 info := (*AcceleratedPaintInfo)(unsafe.Pointer(arg4))
@@ -181,7 +181,7 @@ func renderHandlerGetTouchHandleSizeCEFCallback() uintptr {
181181 if !ownerOK {
182182 return
183183 }
184- browser := wrapBrowser(unsafe.Pointer(arg0))
184+ browser := wrapBrowser(cefCallbackPointer(arg0))
185185 orientation := HorizontalAlignment(arg1)
186186 size := (*Size)(unsafe.Pointer(arg2))
187187 impl.GetTouchHandleSize(browser, orientation, size)
@@ -197,7 +197,7 @@ func renderHandlerOnTouchHandleStateChangedCEFCallback() uintptr {
197197 if !ownerOK {
198198 return
199199 }
200- browser := wrapBrowser(unsafe.Pointer(arg0))
200+ browser := wrapBrowser(cefCallbackPointer(arg0))
201201 state := (*TouchHandleState)(unsafe.Pointer(arg1))
202202 impl.OnTouchHandleStateChanged(browser, state)
203203 })
@@ -212,8 +212,8 @@ func renderHandlerStartDraggingCEFCallback() uintptr {
212212 if !ownerOK {
213213 return 0
214214 }
215- browser := wrapBrowser(unsafe.Pointer(arg0))
216- dragData := wrapDragData(unsafe.Pointer(arg1))
215+ browser := wrapBrowser(cefCallbackPointer(arg0))
216+ dragData := wrapDragData(cefCallbackPointer(arg1))
217217 allowedOps := DragOperationsMask(arg2)
218218 x := int32(arg3)
219219 y := int32(arg4)
@@ -230,7 +230,7 @@ func renderHandlerUpdateDragCursorCEFCallback() uintptr {
230230 if !ownerOK {
231231 return
232232 }
233- browser := wrapBrowser(unsafe.Pointer(arg0))
233+ browser := wrapBrowser(cefCallbackPointer(arg0))
234234 operation := DragOperationsMask(arg1)
235235 impl.UpdateDragCursor(browser, operation)
236236 })
@@ -245,7 +245,7 @@ func renderHandlerOnScrollOffsetChangedCEFCallback() uintptr {
245245 if !ownerOK {
246246 return
247247 }
248- browser := wrapBrowser(unsafe.Pointer(arg0))
248+ browser := wrapBrowser(cefCallbackPointer(arg0))
249249 x := arg1
250250 y := arg2
251251 impl.OnScrollOffsetChanged(browser, x, y)
@@ -261,7 +261,7 @@ func renderHandlerOnImeCompositionRangeChangedCEFCallback() uintptr {
261261 if !ownerOK {
262262 return
263263 }
264- browser := wrapBrowser(unsafe.Pointer(arg0))
264+ browser := wrapBrowser(cefCallbackPointer(arg0))
265265 selectedRange := (*Range)(unsafe.Pointer(arg1))
266266 characterBounds := decodeSlice[Rect](arg3, int(arg2))
267267 impl.OnImeCompositionRangeChanged(browser, selectedRange, characterBounds)
@@ -277,7 +277,7 @@ func renderHandlerOnTextSelectionChangedCEFCallback() uintptr {
277277 if !ownerOK {
278278 return
279279 }
280- browser := wrapBrowser(unsafe.Pointer(arg0))
280+ browser := wrapBrowser(cefCallbackPointer(arg0))
281281 selectedText := goString(unsafe.Pointer(arg1))
282282 selectedRange := (*Range)(unsafe.Pointer(arg2))
283283 impl.OnTextSelectionChanged(browser, selectedText, selectedRange)
@@ -293,7 +293,7 @@ func renderHandlerOnVirtualKeyboardRequestedCEFCallback() uintptr {
293293 if !ownerOK {
294294 return
295295 }
296- browser := wrapBrowser(unsafe.Pointer(arg0))
296+ browser := wrapBrowser(cefCallbackPointer(arg0))
297297 inputMode := TextInputMode(arg1)
298298 impl.OnVirtualKeyboardRequested(browser, inputMode)
299299 })
@@ -52,7 +52,7 @@ func renderHandlerGetRootScreenRectCEFCallback() uintptr {
52 if !ownerOK {52 if !ownerOK {
53 return 053 return 0
54 }54 }
55- browser := wrapBrowser(unsafe.Pointer(arg0))55+ browser := wrapBrowser(cefCallbackPointer(arg0))
56 rect := (*Rect)(unsafe.Pointer(arg1))56 rect := (*Rect)(unsafe.Pointer(arg1))
57 return uintptr(impl.GetRootScreenRect(browser, rect))57 return uintptr(impl.GetRootScreenRect(browser, rect))
58 })58 })
@@ -67,7 +67,7 @@ func renderHandlerGetViewRectCEFCallback() uintptr {
67 if !ownerOK {67 if !ownerOK {
68 return68 return
69 }69 }
70- browser := wrapBrowser(unsafe.Pointer(arg0))70+ browser := wrapBrowser(cefCallbackPointer(arg0))
71 rect := (*Rect)(unsafe.Pointer(arg1))71 rect := (*Rect)(unsafe.Pointer(arg1))
72 impl.GetViewRect(browser, rect)72 impl.GetViewRect(browser, rect)
73 })73 })
@@ -82,7 +82,7 @@ func renderHandlerGetScreenPointCEFCallback() uintptr {
82 if !ownerOK {82 if !ownerOK {
83 return 083 return 0
84 }84 }
85- browser := wrapBrowser(unsafe.Pointer(arg0))85+ browser := wrapBrowser(cefCallbackPointer(arg0))
86 viewx := int32(arg1)86 viewx := int32(arg1)
87 viewy := int32(arg2)87 viewy := int32(arg2)
88 screenx := (*int32)(unsafe.Pointer(arg3))88 screenx := (*int32)(unsafe.Pointer(arg3))
@@ -100,7 +100,7 @@ func renderHandlerGetScreenInfoCEFCallback() uintptr {
100 if !ownerOK {100 if !ownerOK {
101 return 0101 return 0
102 }102 }
103- browser := wrapBrowser(unsafe.Pointer(arg0))103+ browser := wrapBrowser(cefCallbackPointer(arg0))
104 screenInfo := (*ScreenInfo)(unsafe.Pointer(arg1))104 screenInfo := (*ScreenInfo)(unsafe.Pointer(arg1))
105 return uintptr(impl.GetScreenInfo(browser, screenInfo))105 return uintptr(impl.GetScreenInfo(browser, screenInfo))
106 })106 })
@@ -115,7 +115,7 @@ func renderHandlerOnPopupShowCEFCallback() uintptr {
115 if !ownerOK {115 if !ownerOK {
116 return116 return
117 }117 }
118- browser := wrapBrowser(unsafe.Pointer(arg0))118+ browser := wrapBrowser(cefCallbackPointer(arg0))
119 show := int32(arg1)119 show := int32(arg1)
120 impl.OnPopupShow(browser, show)120 impl.OnPopupShow(browser, show)
121 })121 })
@@ -130,7 +130,7 @@ func renderHandlerOnPopupSizeCEFCallback() uintptr {
130 if !ownerOK {130 if !ownerOK {
131 return131 return
132 }132 }
133- browser := wrapBrowser(unsafe.Pointer(arg0))133+ browser := wrapBrowser(cefCallbackPointer(arg0))
134 rect := (*Rect)(unsafe.Pointer(arg1))134 rect := (*Rect)(unsafe.Pointer(arg1))
135 impl.OnPopupSize(browser, rect)135 impl.OnPopupSize(browser, rect)
136 })136 })
@@ -145,7 +145,7 @@ func renderHandlerOnPaintCEFCallback() uintptr {
145 if !ownerOK {145 if !ownerOK {
146 return146 return
147 }147 }
148- browser := wrapBrowser(unsafe.Pointer(arg0))148+ browser := wrapBrowser(cefCallbackPointer(arg0))
149 type_ := PaintElementType(arg1)149 type_ := PaintElementType(arg1)
150 dirtyrects := decodeSlice[Rect](arg3, int(arg2))150 dirtyrects := decodeSlice[Rect](arg3, int(arg2))
151 buffer := unsafe.Slice((*byte)(unsafe.Pointer(arg4)), int(arg5)*int(arg6)*4)151 buffer := unsafe.Slice((*byte)(unsafe.Pointer(arg4)), int(arg5)*int(arg6)*4)
@@ -164,7 +164,7 @@ func renderHandlerOnAcceleratedPaintCEFCallback() uintptr {
164 if !ownerOK {164 if !ownerOK {
165 return165 return
166 }166 }
167- browser := wrapBrowser(unsafe.Pointer(arg0))167+ browser := wrapBrowser(cefCallbackPointer(arg0))
168 type_ := PaintElementType(arg1)168 type_ := PaintElementType(arg1)
169 dirtyrects := decodeSlice[Rect](arg3, int(arg2))169 dirtyrects := decodeSlice[Rect](arg3, int(arg2))
170 info := (*AcceleratedPaintInfo)(unsafe.Pointer(arg4))170 info := (*AcceleratedPaintInfo)(unsafe.Pointer(arg4))
@@ -181,7 +181,7 @@ func renderHandlerGetTouchHandleSizeCEFCallback() uintptr {
181 if !ownerOK {181 if !ownerOK {
182 return182 return
183 }183 }
184- browser := wrapBrowser(unsafe.Pointer(arg0))184+ browser := wrapBrowser(cefCallbackPointer(arg0))
185 orientation := HorizontalAlignment(arg1)185 orientation := HorizontalAlignment(arg1)
186 size := (*Size)(unsafe.Pointer(arg2))186 size := (*Size)(unsafe.Pointer(arg2))
187 impl.GetTouchHandleSize(browser, orientation, size)187 impl.GetTouchHandleSize(browser, orientation, size)
@@ -197,7 +197,7 @@ func renderHandlerOnTouchHandleStateChangedCEFCallback() uintptr {
197 if !ownerOK {197 if !ownerOK {
198 return198 return
199 }199 }
200- browser := wrapBrowser(unsafe.Pointer(arg0))200+ browser := wrapBrowser(cefCallbackPointer(arg0))
201 state := (*TouchHandleState)(unsafe.Pointer(arg1))201 state := (*TouchHandleState)(unsafe.Pointer(arg1))
202 impl.OnTouchHandleStateChanged(browser, state)202 impl.OnTouchHandleStateChanged(browser, state)
203 })203 })
@@ -212,8 +212,8 @@ func renderHandlerStartDraggingCEFCallback() uintptr {
212 if !ownerOK {212 if !ownerOK {
213 return 0213 return 0
214 }214 }
215- browser := wrapBrowser(unsafe.Pointer(arg0))215+ browser := wrapBrowser(cefCallbackPointer(arg0))
216- dragData := wrapDragData(unsafe.Pointer(arg1))216+ dragData := wrapDragData(cefCallbackPointer(arg1))
217 allowedOps := DragOperationsMask(arg2)217 allowedOps := DragOperationsMask(arg2)
218 x := int32(arg3)218 x := int32(arg3)
219 y := int32(arg4)219 y := int32(arg4)
@@ -230,7 +230,7 @@ func renderHandlerUpdateDragCursorCEFCallback() uintptr {
230 if !ownerOK {230 if !ownerOK {
231 return231 return
232 }232 }
233- browser := wrapBrowser(unsafe.Pointer(arg0))233+ browser := wrapBrowser(cefCallbackPointer(arg0))
234 operation := DragOperationsMask(arg1)234 operation := DragOperationsMask(arg1)
235 impl.UpdateDragCursor(browser, operation)235 impl.UpdateDragCursor(browser, operation)
236 })236 })
@@ -245,7 +245,7 @@ func renderHandlerOnScrollOffsetChangedCEFCallback() uintptr {
245 if !ownerOK {245 if !ownerOK {
246 return246 return
247 }247 }
248- browser := wrapBrowser(unsafe.Pointer(arg0))248+ browser := wrapBrowser(cefCallbackPointer(arg0))
249 x := arg1249 x := arg1
250 y := arg2250 y := arg2
251 impl.OnScrollOffsetChanged(browser, x, y)251 impl.OnScrollOffsetChanged(browser, x, y)
@@ -261,7 +261,7 @@ func renderHandlerOnImeCompositionRangeChangedCEFCallback() uintptr {
261 if !ownerOK {261 if !ownerOK {
262 return262 return
263 }263 }
264- browser := wrapBrowser(unsafe.Pointer(arg0))264+ browser := wrapBrowser(cefCallbackPointer(arg0))
265 selectedRange := (*Range)(unsafe.Pointer(arg1))265 selectedRange := (*Range)(unsafe.Pointer(arg1))
266 characterBounds := decodeSlice[Rect](arg3, int(arg2))266 characterBounds := decodeSlice[Rect](arg3, int(arg2))
267 impl.OnImeCompositionRangeChanged(browser, selectedRange, characterBounds)267 impl.OnImeCompositionRangeChanged(browser, selectedRange, characterBounds)
@@ -277,7 +277,7 @@ func renderHandlerOnTextSelectionChangedCEFCallback() uintptr {
277 if !ownerOK {277 if !ownerOK {
278 return278 return
279 }279 }
280- browser := wrapBrowser(unsafe.Pointer(arg0))280+ browser := wrapBrowser(cefCallbackPointer(arg0))
281 selectedText := goString(unsafe.Pointer(arg1))281 selectedText := goString(unsafe.Pointer(arg1))
282 selectedRange := (*Range)(unsafe.Pointer(arg2))282 selectedRange := (*Range)(unsafe.Pointer(arg2))
283 impl.OnTextSelectionChanged(browser, selectedText, selectedRange)283 impl.OnTextSelectionChanged(browser, selectedText, selectedRange)
@@ -293,7 +293,7 @@ func renderHandlerOnVirtualKeyboardRequestedCEFCallback() uintptr {
293 if !ownerOK {293 if !ownerOK {
294 return294 return
295 }295 }
296- browser := wrapBrowser(unsafe.Pointer(arg0))296+ browser := wrapBrowser(cefCallbackPointer(arg0))
297 inputMode := TextInputMode(arg1)297 inputMode := TextInputMode(arg1)
298 impl.OnVirtualKeyboardRequested(browser, inputMode)298 impl.OnVirtualKeyboardRequested(browser, inputMode)
299 })299 })
M vendor/github.com/bnema/purego-cef/cef/cef_render_process_handler_gen.go +20 -20 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_request_context_handler_gen.go +4 -4 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_request_handler_gen.go +23 -23 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_resource_handler_gen.go +8 -8 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_resource_request_handler_gen.go +36 -36 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_scheme_gen.go +3 -3 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_server_gen.go +11 -11 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_urlrequest_gen.go +5 -5 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_v8_gen.go +16 -16 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/mocks/mock_app.go +2 -2 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/mocks/mock_browser.go +5 -5 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/mocks/mock_browser_process_handler.go +4 -4 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/mocks/mock_client.go +1 -1 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/mocks/mock_context_menu_handler.go +7 -7 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/mocks/mock_dialog_handler.go +1 -1 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/mocks/mock_display_handler.go +13 -13 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/mocks/mock_focus_handler.go +3 -3 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/mocks/mock_frame.go +8 -8 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/mocks/mock_keyboard_handler.go +2 -2 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/mocks/mock_life_span_handler.go +6 -6 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/mocks/mock_load_handler.go +4 -4 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/mocks/mock_raw_client.go +1 -1 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/mocks/mock_raw_life_span_handler.go +6 -6 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/mocks/mock_render_handler.go +16 -16 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/mocks/mock_render_process_handler.go +7 -7 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/mocks/mock_request.go +11 -11 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/mocks/mock_request_context.go +16 -16 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/mocks/mock_request_handler.go +11 -11 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/mocks/mock_response.go +10 -10 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/test_cef_test_server_gen.go +3 -3 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/views_cef_browser_view_delegate_gen.go +13 -13 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/views_cef_button_delegate_gen.go +2 -2 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/views_cef_menu_button_delegate_gen.go +2 -2 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/views_cef_textfield_delegate_gen.go +2 -2 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/views_cef_view_delegate_gen.go +13 -13 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/views_cef_window_delegate_gen.go +22 -22 generated file: collapsed
M vendor/modules.txt +8 -12 generated file: collapsed

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