Skip to content

Commit d1e3a99

Browse files
committed
disable overwrite mode when the overwrite keybindings are disabled
1 parent ab998c9 commit d1e3a99

File tree

3 files changed

+37
-5
lines changed

3 files changed

+37
-5
lines changed

gui-doc/scribblings/framework/text.scrbl

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
#lang scribble/doc
22
@(require scribble/manual scribble/extract)
3-
@(require (for-label framework))
4-
@(require (for-label scheme/gui))
3+
@(require (for-label framework racket/gui))
54
@title{Text}
65

76
@definterface[text:basic<%> (editor:basic<%> text%)]{
@@ -1335,6 +1334,17 @@
13351334
}
13361335
}
13371336

1337+
@definterface[text:overwrite-disable<%> ()]{
1338+
Classes implementing this interface disable overwrite mode when
1339+
the overwrite mode keybindings are turned off.
1340+
}
1341+
1342+
@defmixin[text:overwrite-disable-mixin (text%) (text:set-overwrite-mode<%>)]{
1343+
This mixin adds a callback for @racket['framework:overwrite-mode-keybindings]
1344+
via @racket[preferences:add-callback] that calls @method[text% set-overwrite-mode]
1345+
with @racket[#f] when the preference is set to @racket[#f].
1346+
}
1347+
13381348
@defclass[text:basic% (text:basic-mixin (editor:basic-mixin text%)) ()]{}
13391349
@defclass[text:line-spacing% (text:line-spacing-mixin text:basic%) ()]{}
13401350
@defclass[text:hide-caret/selection% (text:hide-caret/selection-mixin text:line-spacing%) ()]{}
@@ -1344,7 +1354,9 @@
13441354
@defclass[text:wide-snip% (text:wide-snip-mixin text:line-spacing%) ()]{}
13451355
@defclass[text:standard-style-list% (editor:standard-style-list-mixin text:wide-snip%) ()]{}
13461356
@defclass[text:input-box% (text:input-box-mixin text:standard-style-list%) ()]{}
1347-
@defclass[text:keymap% (editor:keymap-mixin text:standard-style-list%) ()]{}
1357+
@defclass[text:keymap%
1358+
(text:overwrite-disable-mixin (editor:keymap-mixin text:standard-style-list%))
1359+
()]{}
13481360
@defclass[text:return% (text:return-mixin text:keymap%) ()]{}
13491361
@defclass[text:autowrap% (editor:autowrap-mixin text:keymap%) ()]{}
13501362
@defclass[text:file% (text:file-mixin (editor:file-mixin text:autowrap%)) ()]{}

gui-lib/framework/private/sig.rkt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@
200200
ports<%>
201201
input-box<%>
202202
autocomplete<%>
203+
overwrite-disable<%>
203204

204205
basic%
205206
line-spacing%
@@ -241,7 +242,8 @@
241242
crlf-line-endings-mixin
242243
ports-mixin
243244
input-box-mixin
244-
autocomplete-mixin))
245+
autocomplete-mixin
246+
overwrite-disable-mixin))
245247
(define-signature text^ extends text-class^
246248
(autocomplete-append-after
247249
autocomplete-limit

gui-lib/framework/private/text.rkt

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4549,6 +4549,24 @@ designates the character that triggers autocompletion
45494549
all-string-snips?]))
45504550

45514551
(super-new)))
4552+
4553+
(define overwrite-disable<%> (interface ()))
4554+
(define overwrite-disable-mixin
4555+
(mixin ((class->interface text%)) (overwrite-disable<%>)
4556+
(inherit set-overwrite-mode)
4557+
4558+
;; private field held onto by the object
4559+
;; because of the weak callback below
4560+
(define (overwrite-changed-callback p v)
4561+
(unless v
4562+
(set-overwrite-mode #f)))
4563+
4564+
(preferences:add-callback
4565+
'framework:overwrite-mode-keybindings
4566+
overwrite-changed-callback
4567+
#t)
4568+
4569+
(super-new)))
45524570

45534571
(define basic% (basic-mixin (editor:basic-mixin text%)))
45544572
(define line-spacing% (line-spacing-mixin basic%))
@@ -4559,7 +4577,7 @@ designates the character that triggers autocompletion
45594577
(define wide-snip% (wide-snip-mixin line-spacing%))
45604578
(define standard-style-list% (editor:standard-style-list-mixin wide-snip%))
45614579
(define input-box% (input-box-mixin standard-style-list%))
4562-
(define -keymap% (editor:keymap-mixin standard-style-list%))
4580+
(define -keymap% (overwrite-disable-mixin (editor:keymap-mixin standard-style-list%)))
45634581
(define return% (return-mixin -keymap%))
45644582
(define autowrap% (editor:autowrap-mixin -keymap%))
45654583
(define file% (file-mixin (editor:file-mixin autowrap%)))

0 commit comments

Comments
 (0)