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); }