summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortrustable-code <krauter.simon@arcor.de>2020-05-05 11:37:16 +0200
committertrustable-code <krauter.simon@arcor.de>2020-05-05 11:37:16 +0200
commita7464ccdb303fb888cab3acc368a356dd8997d9d (patch)
tree54e341b30c677ed1481fe8f2ce0abfac0dce2d3f
parent6bb4d8b687378679b331a5442bb308466290f673 (diff)
downloadNiGui-a7464ccdb303fb888cab3acc368a356dd8997d9d.tar.gz
NiGui-a7464ccdb303fb888cab3acc368a356dd8997d9d.zip
Add TextArea key press handler to make Cltr+C persistent
-rwxr-xr-xsrc/nigui/private/gtk3/platform_impl.nim14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/nigui/private/gtk3/platform_impl.nim b/src/nigui/private/gtk3/platform_impl.nim
index 91e98a1..3cfff3e 100755
--- a/src/nigui/private/gtk3/platform_impl.nim
+++ b/src/nigui/private/gtk3/platform_impl.nim
@@ -1477,6 +1477,17 @@ method `selectionEnd=`(textBox: NativeTextBox, selectionEnd: int) =
# TextArea
# ----------------------------------------------------------------------------------------
+proc pTextAreaKeyPressSignal(widget: pointer, event: var GdkEventKey, data: pointer): Gboolean {.cdecl.} =
+ result = pControlKeyPressSignal(widget, event, data)
+
+ # Implement own "copy to clipboard", because by default the clipboard is non-persistent
+ if not result:
+ let modifiers = gtk_accelerator_get_default_mod_mask()
+ if event.keyval == 'c'.ord and (event.state and modifiers) == GDK_CONTROL_MASK:
+ let textArea = cast[NativeTextBox](data)
+ app.clipboardText = textArea.selectedText
+ return true # prevent default "copy to clipboard"
+
proc init(textArea: NativeTextArea) =
textArea.fHandle = gtk_scrolled_window_new(nil, nil)
# gtk_scrolled_window_set_policy(textArea.fHandle, GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC)
@@ -1526,6 +1537,9 @@ method `wrap=`(textArea: NativeTextArea, wrap: bool) =
else:
gtk_text_view_set_wrap_mode(textArea.fTextViewHandle, GTK_WRAP_NONE)
+method pAddKeyPressEvent(textArea: NativeTextArea) =
+ discard g_signal_connect_data(textArea.fTextViewHandle, "key-press-event", pTextAreaKeyPressSignal, cast[pointer](textArea))
+
method `editable=`(textArea: NativeTextArea, editable: bool) =
textArea.fEditable = editable
gtk_text_view_set_editable(textArea.fTextViewHandle, editable)