linux-packaging-mono/external/bockbuild/packages/patches/gtk/0068-nsview-implement-a-few-text-view-command-accelerator.patch
Xamarin Public Jenkins (auto-signing) 6bdd276d05 Imported Upstream version 5.0.0.42
Former-commit-id: fd56571888259555122d8a0f58c68838229cea2b
2017-04-10 11:41:01 +00:00

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)