6bdd276d05
Former-commit-id: fd56571888259555122d8a0f58c68838229cea2b
89 lines
2.8 KiB
Diff
89 lines
2.8 KiB
Diff
From da200e6664615a5ef9e89d0a295aa435f60522c9 Mon Sep 17 00:00:00 2001
|
|
From: Michael Natterer <mitch@gimp.org>
|
|
Date: Fri, 26 Jul 2013 14:48:57 +0200
|
|
Subject: [PATCH 68/68] nsview: implement a few text view command accelerators
|
|
manually
|
|
|
|
so cut, copy, paste and select all work.
|
|
---
|
|
gtk/gtknsview.c | 50 ++++++++++++++++++++++++++++++++++++++++++++------
|
|
1 file changed, 44 insertions(+), 6 deletions(-)
|
|
|
|
diff --git a/gtk/gtknsview.c b/gtk/gtknsview.c
|
|
index 3b30d3b..d5eb307 100644
|
|
--- a/gtk/gtknsview.c
|
|
+++ b/gtk/gtknsview.c
|
|
@@ -664,14 +664,52 @@ gtk_ns_view_key_press (GtkWidget *widget,
|
|
{
|
|
GtkNSView *ns_view = GTK_NS_VIEW (widget);
|
|
NSEvent *nsevent = gdk_quartz_event_get_nsevent ((GdkEvent *) event);
|
|
- NSWindow *ns_window;
|
|
|
|
if (gtk_ns_view_forward_event (widget, event))
|
|
{
|
|
- ns_window = [ns_view->priv->view window];
|
|
- [ns_window sendEvent:nsevent];
|
|
+ NSWindow *ns_window = [ns_view->priv->view window];
|
|
+ NSResponder *responder = [ns_window firstResponder];
|
|
|
|
- return TRUE;
|
|
+ if ([responder isKindOfClass: [NSTextView class]] &&
|
|
+ (event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK |
|
|
+ GDK_MOD1_MASK | GDK_MOD2_MASK)) == GDK_MOD2_MASK)
|
|
+ {
|
|
+ NSTextView *text_view = (NSTextView *) responder;
|
|
+ NSRange range = [text_view selectedRange];
|
|
+ gboolean has_selection = range.length > 0;
|
|
+
|
|
+ switch (event->keyval)
|
|
+ {
|
|
+ case GDK_KEY_c: /* copy */
|
|
+ if (has_selection)
|
|
+ [text_view copy: text_view];
|
|
+ return TRUE;
|
|
+
|
|
+ case GDK_KEY_x: /* cut */
|
|
+ if (has_selection)
|
|
+ [text_view cut: text_view];
|
|
+ return TRUE;
|
|
+
|
|
+ case GDK_KEY_v: /* paste */
|
|
+ [text_view paste: text_view];
|
|
+ return TRUE;
|
|
+
|
|
+ case GDK_KEY_a: /* all */
|
|
+ range.location = 0;
|
|
+ range.length = [[text_view string] length];
|
|
+ [text_view setSelectedRange: range];
|
|
+ return TRUE;
|
|
+
|
|
+ default:
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ [ns_window sendEvent:nsevent];
|
|
+
|
|
+ return TRUE;
|
|
+ }
|
|
}
|
|
|
|
return GTK_WIDGET_CLASS (gtk_ns_view_parent_class)->key_press_event (widget, event);
|
|
@@ -683,11 +721,11 @@ gtk_ns_view_key_release (GtkWidget *widget,
|
|
{
|
|
GtkNSView *ns_view = GTK_NS_VIEW (widget);
|
|
NSEvent *nsevent = gdk_quartz_event_get_nsevent ((GdkEvent *) event);
|
|
- NSWindow *ns_window;
|
|
|
|
if (gtk_ns_view_forward_event (widget, event))
|
|
{
|
|
- ns_window = [ns_view->priv->view window];
|
|
+ NSWindow *ns_window = [ns_view->priv->view window];
|
|
+
|
|
[ns_window sendEvent:nsevent];
|
|
|
|
return TRUE;
|
|
--
|
|
1.7.10.2 (Apple Git-33)
|