mirror of
https://github.com/diamondburned/cchat-gtk.git
synced 2025-02-02 23:26:41 +00:00
Added gspell
This commit is contained in:
parent
b48526aed3
commit
8838b8e0d8
15
PLAN.md
15
PLAN.md
|
@ -1,21 +1,8 @@
|
||||||
## Sidebar refactoring
|
|
||||||
|
|
||||||
Maybe put services separately in the left sidebar like so:
|
|
||||||
|
|
||||||
![](https://miro.medium.com/max/1600/1*DSH66RN5DA5UQdZ2xE2I-g.png)
|
|
||||||
|
|
||||||
## Behavioral changes
|
## Behavioral changes
|
||||||
|
|
||||||
Top-level server loads can probably lazy-load, but independent servers can
|
cchat-gtk should store what's expanded into a config. This is pretty
|
||||||
probably be all loaded at once. This might not be a good idea for guild folders.
|
|
||||||
|
|
||||||
cchat-gtk should also store what's expanded into a config. This is pretty
|
|
||||||
trivial to do.
|
trivial to do.
|
||||||
|
|
||||||
## Spellcheck
|
## Spellcheck
|
||||||
|
|
||||||
Write a Golang gspell binding and use that.
|
Write a Golang gspell binding and use that.
|
||||||
|
|
||||||
## Frame limiter
|
|
||||||
|
|
||||||
Limit to 25fps if background using glib.TimeoutAdd.
|
|
||||||
|
|
1
go.mod
1
go.mod
|
@ -10,6 +10,7 @@ require (
|
||||||
github.com/diamondburned/cchat v0.0.49
|
github.com/diamondburned/cchat v0.0.49
|
||||||
github.com/diamondburned/cchat-discord v0.0.0-20200821041521-647c854d7b5e
|
github.com/diamondburned/cchat-discord v0.0.0-20200821041521-647c854d7b5e
|
||||||
github.com/diamondburned/cchat-mock v0.0.0-20200709231652-ad222ce5a74b
|
github.com/diamondburned/cchat-mock v0.0.0-20200709231652-ad222ce5a74b
|
||||||
|
github.com/diamondburned/gspell v0.0.0-20200830182722-77e5d27d6894
|
||||||
github.com/diamondburned/handy v0.0.0-20200829011954-4667e7a918f4
|
github.com/diamondburned/handy v0.0.0-20200829011954-4667e7a918f4
|
||||||
github.com/diamondburned/imgutil v0.0.0-20200710174014-8a3be144a972
|
github.com/diamondburned/imgutil v0.0.0-20200710174014-8a3be144a972
|
||||||
github.com/disintegration/imaging v1.6.2
|
github.com/disintegration/imaging v1.6.2
|
||||||
|
|
11
go.sum
11
go.sum
|
@ -40,6 +40,7 @@ github.com/danieljoos/wincred v1.0.2/go.mod h1:SnuYRW9lp1oJrZX/dXJqr0cPK5gYXqx3E
|
||||||
github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964 h1:y5HC9v93H5EPKqaS1UYVg1uYah5Xf51mBfIoWehClUQ=
|
github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964 h1:y5HC9v93H5EPKqaS1UYVg1uYah5Xf51mBfIoWehClUQ=
|
||||||
github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964/go.mod h1:Xd9hchkHSWYkEqJwUGisez3G1QY8Ryz0sdWrLPMGjLk=
|
github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964/go.mod h1:Xd9hchkHSWYkEqJwUGisez3G1QY8Ryz0sdWrLPMGjLk=
|
||||||
github.com/dave/jennifer v1.4.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg=
|
github.com/dave/jennifer v1.4.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg=
|
||||||
|
github.com/dave/jennifer v1.4.1/go.mod h1:7jEdnm+qBcxl8PC0zyp7vxcpSRnzXSt9r39tpTVGlwA=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
@ -89,6 +90,16 @@ github.com/diamondburned/gotk3 v0.0.0-20200630065217-97aeb06d705d h1:Ha/I6PMKi+B
|
||||||
github.com/diamondburned/gotk3 v0.0.0-20200630065217-97aeb06d705d/go.mod h1:/hqFpkNa9T3JgNAE2fLvCdov7c5bw//FHNZrZ3Uv9/Q=
|
github.com/diamondburned/gotk3 v0.0.0-20200630065217-97aeb06d705d/go.mod h1:/hqFpkNa9T3JgNAE2fLvCdov7c5bw//FHNZrZ3Uv9/Q=
|
||||||
github.com/diamondburned/gotk3 v0.0.0-20200816224505-3cd69b83a48a h1:wEldljb421/Jp84RNb0zBfqmiWt/TTQzUE6R1ap6UuQ=
|
github.com/diamondburned/gotk3 v0.0.0-20200816224505-3cd69b83a48a h1:wEldljb421/Jp84RNb0zBfqmiWt/TTQzUE6R1ap6UuQ=
|
||||||
github.com/diamondburned/gotk3 v0.0.0-20200816224505-3cd69b83a48a/go.mod h1:/hqFpkNa9T3JgNAE2fLvCdov7c5bw//FHNZrZ3Uv9/Q=
|
github.com/diamondburned/gotk3 v0.0.0-20200816224505-3cd69b83a48a/go.mod h1:/hqFpkNa9T3JgNAE2fLvCdov7c5bw//FHNZrZ3Uv9/Q=
|
||||||
|
github.com/diamondburned/gspell v0.0.0-20200829065821-c501924bc87c h1:H1eixeq/t1gjKCozGXT36uiDWA0X8Xis4E44WpS+AO4=
|
||||||
|
github.com/diamondburned/gspell v0.0.0-20200829065821-c501924bc87c/go.mod h1:IoyMxPKSJOMoP0BiBuFwf2RDMeA4Uqx0HPKN5BzqTtA=
|
||||||
|
github.com/diamondburned/gspell v0.0.0-20200829070727-5b147f3f7bfb h1:xzmSVFakYqZ8gtJ/iGtancrNHY49t9woKnM/WRP6JcY=
|
||||||
|
github.com/diamondburned/gspell v0.0.0-20200829070727-5b147f3f7bfb/go.mod h1:IoyMxPKSJOMoP0BiBuFwf2RDMeA4Uqx0HPKN5BzqTtA=
|
||||||
|
github.com/diamondburned/gspell v0.0.0-20200829071312-d910720ee38b h1:zOfRizc1RdR6m2nmB3l+XjX48N4XLgIlQ/D6ZBJMmFc=
|
||||||
|
github.com/diamondburned/gspell v0.0.0-20200829071312-d910720ee38b/go.mod h1:IoyMxPKSJOMoP0BiBuFwf2RDMeA4Uqx0HPKN5BzqTtA=
|
||||||
|
github.com/diamondburned/gspell v0.0.0-20200829071551-d44933c5efb8 h1:Pv/C48jFIlC4jEsTLJijys+kyUT+4NKEtx0WjOMCcaw=
|
||||||
|
github.com/diamondburned/gspell v0.0.0-20200829071551-d44933c5efb8/go.mod h1:IoyMxPKSJOMoP0BiBuFwf2RDMeA4Uqx0HPKN5BzqTtA=
|
||||||
|
github.com/diamondburned/gspell v0.0.0-20200830182722-77e5d27d6894 h1:QgI21deaQbCUMnxKkQQUXzQolnAe1dMIXAWwqAyOp2g=
|
||||||
|
github.com/diamondburned/gspell v0.0.0-20200830182722-77e5d27d6894/go.mod h1:IoyMxPKSJOMoP0BiBuFwf2RDMeA4Uqx0HPKN5BzqTtA=
|
||||||
github.com/diamondburned/handy v0.0.0-20200827040421-5b4a15843526 h1:GnTwaD+RKiCJiJ9yhcUb6M5o4VwFExTqmcl8Dg+EVdw=
|
github.com/diamondburned/handy v0.0.0-20200827040421-5b4a15843526 h1:GnTwaD+RKiCJiJ9yhcUb6M5o4VwFExTqmcl8Dg+EVdw=
|
||||||
github.com/diamondburned/handy v0.0.0-20200827040421-5b4a15843526/go.mod h1:V0qyhW4v6KPFwtDpXdBm5aWH7zWEyrzZpcB6MPnKArQ=
|
github.com/diamondburned/handy v0.0.0-20200827040421-5b4a15843526/go.mod h1:V0qyhW4v6KPFwtDpXdBm5aWH7zWEyrzZpcB6MPnKArQ=
|
||||||
github.com/diamondburned/handy v0.0.0-20200829011954-4667e7a918f4 h1:qF5VHC35+GyCjUmKz+1O94xpFc0JQd4Ui3h+I955pJw=
|
github.com/diamondburned/handy v0.0.0-20200829011954-4667e7a918f4 h1:qF5VHC35+GyCjUmKz+1O94xpFc0JQd4Ui3h+I955pJw=
|
||||||
|
|
|
@ -11,6 +11,7 @@ import (
|
||||||
"github.com/diamondburned/cchat-gtk/internal/ui/messages/input/username"
|
"github.com/diamondburned/cchat-gtk/internal/ui/messages/input/username"
|
||||||
"github.com/diamondburned/cchat-gtk/internal/ui/primitives"
|
"github.com/diamondburned/cchat-gtk/internal/ui/primitives"
|
||||||
"github.com/diamondburned/cchat-gtk/internal/ui/primitives/scrollinput"
|
"github.com/diamondburned/cchat-gtk/internal/ui/primitives/scrollinput"
|
||||||
|
"github.com/diamondburned/gspell"
|
||||||
"github.com/gotk3/gotk3/gtk"
|
"github.com/gotk3/gotk3/gtk"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
)
|
)
|
||||||
|
@ -97,6 +98,7 @@ type Field struct {
|
||||||
|
|
||||||
TextScroll *gtk.ScrolledWindow
|
TextScroll *gtk.ScrolledWindow
|
||||||
text *gtk.TextView // const
|
text *gtk.TextView // const
|
||||||
|
speller *gspell.TextView // const
|
||||||
buffer *gtk.TextBuffer // const
|
buffer *gtk.TextBuffer // const
|
||||||
|
|
||||||
send *gtk.Button
|
send *gtk.Button
|
||||||
|
@ -140,6 +142,8 @@ var scrolledInputCSS = primitives.PrepareClassCSS("scrolled-input", `
|
||||||
func NewField(text *gtk.TextView, ctrl Controller) *Field {
|
func NewField(text *gtk.TextView, ctrl Controller) *Field {
|
||||||
field := &Field{text: text, ctrl: ctrl}
|
field := &Field{text: text, ctrl: ctrl}
|
||||||
field.buffer, _ = text.GetBuffer()
|
field.buffer, _ = text.GetBuffer()
|
||||||
|
field.speller = gspell.GetFromGtkTextView(text)
|
||||||
|
field.speller.BasicSetup()
|
||||||
|
|
||||||
field.Username = username.NewContainer()
|
field.Username = username.NewContainer()
|
||||||
field.Username.Show()
|
field.Username.Show()
|
||||||
|
|
|
@ -20,7 +20,7 @@ import (
|
||||||
var globalID uint64
|
var globalID uint64
|
||||||
|
|
||||||
// generateNonce creates a nonce that should prevent collision. This function
|
// generateNonce creates a nonce that should prevent collision. This function
|
||||||
// will always return a 24-byte long string.
|
// will always return a 16-byte long string.
|
||||||
func (f *Field) generateNonce() string {
|
func (f *Field) generateNonce() string {
|
||||||
raw := fmt.Sprintf(
|
raw := fmt.Sprintf(
|
||||||
"cchat-gtk/%s/%X/%X",
|
"cchat-gtk/%s/%X/%X",
|
||||||
|
@ -75,18 +75,23 @@ func (f *Field) sendInput() {
|
||||||
|
|
||||||
// Clear the input field after sending.
|
// Clear the input field after sending.
|
||||||
f.clearText()
|
f.clearText()
|
||||||
|
|
||||||
|
// Refocus the textbox.
|
||||||
|
f.text.GrabFocus()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *Field) SendMessage(data PresendMessage) {
|
func (f *Field) SendMessage(data PresendMessage) {
|
||||||
// presend message into the container through the controller
|
// presend message into the container through the controller
|
||||||
var onErr = f.ctrl.AddPresendMessage(data)
|
var onErr = f.ctrl.AddPresendMessage(data)
|
||||||
|
|
||||||
go func(sender cchat.ServerMessageSender) {
|
// Copy the sender to prevent race conditions.
|
||||||
|
var sender = f.Sender
|
||||||
|
gts.Async(func() (func(), error) {
|
||||||
if err := sender.SendMessage(data); err != nil {
|
if err := sender.SendMessage(data); err != nil {
|
||||||
gts.ExecAsync(func() { onErr(err) })
|
return func() { onErr(err) }, errors.Wrap(err, "Failed to send message")
|
||||||
log.Error(errors.Wrap(err, "Failed to send message"))
|
|
||||||
}
|
}
|
||||||
}(f.Sender)
|
return nil, nil
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
type SendMessageData struct {
|
type SendMessageData struct {
|
||||||
|
|
|
@ -37,11 +37,7 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// constraints for the left panel
|
// constraints for the left panel
|
||||||
const (
|
const leftCurrentWidth = 300
|
||||||
leftMinWidth = 200
|
|
||||||
leftCurrentWidth = 275
|
|
||||||
leftMaxWidth = 400
|
|
||||||
)
|
|
||||||
|
|
||||||
func clamp(n, min, max int) int {
|
func clamp(n, min, max int) int {
|
||||||
switch {
|
switch {
|
||||||
|
|
18
shell.nix
18
shell.nix
|
@ -1,6 +1,16 @@
|
||||||
{ pkgs ? import <nixpkgs> {} }:
|
{ pkgs ? import <nixpkgs> {} }:
|
||||||
|
|
||||||
let libhandy = pkgs.libhandy.overrideAttrs(old: {
|
# let hunspell = pkgs.hunspellWithDicts(with pkgs.hunspellDicts; [
|
||||||
|
# en-us
|
||||||
|
# en-us-large
|
||||||
|
# ]);
|
||||||
|
|
||||||
|
let hunspellWrapper = pkgs.hunspellWithDicts(with pkgs.hunspellDicts; [
|
||||||
|
en-us
|
||||||
|
en-us-large
|
||||||
|
]);
|
||||||
|
|
||||||
|
libhandy = pkgs.libhandy.overrideAttrs(old: {
|
||||||
name = "libhandy-0.90.0";
|
name = "libhandy-0.90.0";
|
||||||
src = builtins.fetchGit {
|
src = builtins.fetchGit {
|
||||||
url = "https://gitlab.gnome.org/GNOME/libhandy.git";
|
url = "https://gitlab.gnome.org/GNOME/libhandy.git";
|
||||||
|
@ -18,9 +28,9 @@ in pkgs.stdenv.mkDerivation rec {
|
||||||
name = "cchat-gtk";
|
name = "cchat-gtk";
|
||||||
version = "0.0.2";
|
version = "0.0.2";
|
||||||
|
|
||||||
buildInputs = [ libhandy ] ++ (with pkgs; [
|
buildInputs =
|
||||||
gnome3.glib gnome3.gtk # libhandy
|
[ libhandy hunspellWrapper ]
|
||||||
]);
|
++ (with pkgs; [ enchant2 gnome3.gspell gnome3.glib gnome3.gtk ]);
|
||||||
|
|
||||||
nativeBuildInputs = with pkgs; [
|
nativeBuildInputs = with pkgs; [
|
||||||
pkgconfig go
|
pkgconfig go
|
||||||
|
|
Loading…
Reference in a new issue