69 lines
2.2 KiB
Diff
69 lines
2.2 KiB
Diff
|
diff --git a/gtk/gtknsview.c b/gtk/gtknsview.c
|
||
|
index 5b9961eb14..515bc369fc 100644
|
||
|
--- a/gtk/gtknsview.c
|
||
|
+++ b/gtk/gtknsview.c
|
||
|
@@ -739,54 +739,17 @@ gtk_ns_view_key_press (GtkWidget *widget,
|
||
|
GtkNSView *ns_view = GTK_NS_VIEW (widget);
|
||
|
NSEvent *nsevent = gdk_quartz_event_get_nsevent ((GdkEvent *) event);
|
||
|
|
||
|
- if (gtk_ns_view_forward_event (widget, event))
|
||
|
- {
|
||
|
- NSWindow *ns_window = [ns_view->priv->view window];
|
||
|
- NSResponder *responder = [ns_window firstResponder];
|
||
|
-
|
||
|
- gint command_mask = gdk_quartz_get_fix_modifiers () ? GDK_MOD2_MASK : GDK_MOD1_MASK;
|
||
|
+ if ([nsevent type] != NSEventTypeKeyDown) {
|
||
|
+ return GTK_WIDGET_CLASS (gtk_ns_view_parent_class)->key_press_event (widget, event);
|
||
|
+ }
|
||
|
|
||
|
- if ([responder isKindOfClass: [NSTextView class]] &&
|
||
|
- (event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK |
|
||
|
- GDK_MOD1_MASK | GDK_MOD2_MASK)) == command_mask)
|
||
|
- {
|
||
|
- NSTextView *text_view = (NSTextView *) responder;
|
||
|
- NSRange range = [text_view selectedRange];
|
||
|
- gboolean has_selection = range.length > 0;
|
||
|
+ NSWindow *ns_window = [ns_view->priv->view window];
|
||
|
+ NSResponder *responder = [ns_window firstResponder];
|
||
|
+ if (responder) {
|
||
|
+ [[ns_window firstResponder] interpretKeyEvents:@[nsevent]];
|
||
|
|
||
|
- 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 TRUE;
|
||
|
+ }
|
||
|
|
||
|
return GTK_WIDGET_CLASS (gtk_ns_view_parent_class)->key_press_event (widget, event);
|
||
|
}
|