v0.15.0 9006957

mainloop.go RawHistoryFolder

1package webkit
2
3import (
4	"runtime"
5
6	"github.com/diamondburned/gotk4/pkg/glib/v2"
7	"github.com/diamondburned/gotk4/pkg/gtk/v4"
8)
9
10var (
11	mainLoop      *glib.MainLoop
12	isInitialized bool
13)
14
15// InitMainThread locks the current goroutine to the OS thread for GTK operations
16// and initializes GTK. This must be called before any GTK operations.
17func InitMainThread() {
18	if !isInitialized {
19		runtime.LockOSThread()
20
21		// Initialize GTK - this is required before creating any GTK widgets
22		gtk.Init()
23
24		isInitialized = true
25	}
26}
27
28// RunMainLoop starts the GTK main event loop.
29// This function blocks until QuitMainLoop is called.
30func RunMainLoop() {
31	InitMainThread()
32
33	if mainLoop == nil {
34		mainLoop = glib.NewMainLoop(nil, false)
35	}
36
37	mainLoop.Run()
38}
39
40// QuitMainLoop stops the GTK main event loop.
41func QuitMainLoop() {
42	if mainLoop != nil {
43		mainLoop.Quit()
44	}
45}
46
47// IsMainThread returns true if called from the GTK main thread.
48func IsMainThread() bool {
49	// In gotk4, we're always on the main thread since we lock it
50	return isInitialized
51}
52
53// RunOnMainThread executes a function on the GTK main thread.
54// If already on the main thread, executes immediately.
55// Otherwise, schedules the function via glib.IdleAdd.
56func RunOnMainThread(fn func()) {
57	if IsMainThread() {
58		fn()
59		return
60	}
61
62	glib.IdleAdd(func() bool {
63		fn()
64		return false // Remove the idle handler after execution
65	})
66}

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