Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
diamondburned
GitHub Repository: diamondburned/gtkcord4
Path: blob/main/internal/messages/composer/input_gtksource.go
366 views
1
//go:build !nogtksource && !windows
2
3
package composer
4
5
import (
6
"log/slog"
7
8
"github.com/diamondburned/gotk4/pkg/gtk/v4"
9
"github.com/diamondburned/gotkit/app"
10
"github.com/diamondburned/gotkit/app/prefs"
11
"libdb.so/gotk4-sourceview/pkg/gtksource/v5"
12
"libdb.so/gotk4-spelling/pkg/spelling"
13
)
14
15
var spellCheck = prefs.NewBool(true, prefs.PropMeta{
16
Name: "Spell Check",
17
Section: "Composer",
18
Description: "Enable spell checking in the composer.",
19
})
20
21
func init() {
22
app.Hook(func(*app.Application) {
23
gtksource.Init()
24
spelling.Init()
25
})
26
}
27
28
func initializeInput() initializedInput {
29
languageManager := gtksource.LanguageManagerGetDefault()
30
spellChecker := spelling.CheckerGetDefault()
31
32
buffer := gtksource.NewBuffer(nil)
33
34
// Set up the buffer's highlighting language.
35
markdownLanguage := languageManager.Language("markdown")
36
if markdownLanguage != nil {
37
buffer.SetLanguage(markdownLanguage)
38
} else {
39
slog.Warn(
40
"language 'markdown' not found in gtksource, not setting one",
41
"languages", languageManager.LanguageIDs())
42
}
43
44
// Set up the buffer's spell checking.
45
spellingAdapter := spelling.NewTextBufferAdapter(buffer, spellChecker)
46
spellingAdapter.SetEnabled(spellCheck.Value())
47
spellingAdapter.NotifyProperty("enabled", func() {
48
nowEnabled := spellingAdapter.Enabled()
49
if spellCheck.Value() != nowEnabled {
50
spellCheck.Publish(nowEnabled)
51
}
52
})
53
54
view := gtk.NewTextViewWithBuffer(&buffer.TextBuffer)
55
view.AddCSSClass("composer-input-with-gtksource")
56
view.SetExtraMenu(spellingAdapter.MenuModel())
57
view.InsertActionGroup("spelling", spellingAdapter)
58
59
return initializedInput{
60
View: view,
61
Buffer: &buffer.TextBuffer,
62
}
63
}
64
65