[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] /srv/bzr/emacs/trunk r112417: * nsfns.m (handlePanelKeys):
From: |
Jan D. |
Subject: |
[Emacs-diffs] /srv/bzr/emacs/trunk r112417: * nsfns.m (handlePanelKeys): New function. |
Date: |
Sun, 28 Apr 2013 11:55:20 +0200 |
User-agent: |
Bazaar (2.5.0) |
------------------------------------------------------------
revno: 112417
fixes bug: http://debbugs.gnu.org/14296
committer: Jan D. <address@hidden>
branch nick: trunk
timestamp: Sun 2013-04-28 11:55:20 +0200
message:
* nsfns.m (handlePanelKeys): New function.
(EmacsOpenPanel:performKeyEquivalent:)
(EmacsSavePanel:performKeyEquivalent:): Call handlePanelKeys to handle
arrows/function/control and copy/paste keys.
modified:
src/ChangeLog
src/nsfns.m
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog 2013-04-27 21:12:17 +0000
+++ b/src/ChangeLog 2013-04-28 09:55:20 +0000
@@ -1,3 +1,10 @@
+2013-04-28 Jan Djärv <address@hidden>
+
+ * nsfns.m (handlePanelKeys): New function.
+ (EmacsOpenPanel:performKeyEquivalent:)
+ (EmacsSavePanel:performKeyEquivalent:): Call handlePanelKeys to handle
+ arrows/function/control and copy/paste keys (Bug#14296).
+
2013-04-27 Juri Linkov <address@hidden>
* callint.c (Fcall_interactively): Call `Qread_number' for
=== modified file 'src/nsfns.m'
--- a/src/nsfns.m 2013-04-07 04:41:19 +0000
+++ b/src/nsfns.m 2013-04-28 09:55:20 +0000
@@ -1477,7 +1477,7 @@
[panel setCanChooseFiles: YES];
}
- block_input ();
+ block_input ();
#if defined (NS_IMPL_COCOA) && \
MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
if (! NILP (mustmatch) || ! NILP (dir_only_p))
@@ -2544,6 +2544,75 @@
==========================================================================
*/
+/*
+ Handle arrow/function/control keys and copy/paste/cut in file dialogs.
+ Return YES if handeled, NO if not.
+ */
+static BOOL
+handlePanelKeys (NSSavePanel *panel, NSEvent *theEvent)
+{
+ NSString *s;
+ int i;
+ BOOL ret = NO;
+
+ if ([theEvent type] != NSKeyDown) return NO;
+ s = [theEvent characters];
+
+ for (i = 0; i < [s length]; ++i)
+ {
+ int ch = (int) [s characterAtIndex: i];
+ switch (ch)
+ {
+ case NSHomeFunctionKey:
+ case NSDownArrowFunctionKey:
+ case NSUpArrowFunctionKey:
+ case NSLeftArrowFunctionKey:
+ case NSRightArrowFunctionKey:
+ case NSPageUpFunctionKey:
+ case NSPageDownFunctionKey:
+ case NSEndFunctionKey:
+ [panel sendEvent: theEvent];
+ ret = YES;
+ break;
+ /* As we don't have the standard key commands for
+ copy/paste/cut/select-all in our edit menu, we must handle
+ them here. TODO: handle Emacs key bindings for
copy/cut/select-all
+ here, paste works, because we have that in our Edit menu.
+ I.e. refactor out code in nsterm.m, keyDown: to figure out the
+ correct modifier.
+ */
+ case 'x': // Cut
+ case 'c': // Copy
+ case 'v': // Paste
+ case 'a': // Select all
+ if ([theEvent modifierFlags] & NSCommandKeyMask)
+ {
+ [NSApp sendAction:
+ (ch == 'x'
+ ? @selector(cut:)
+ : (ch == 'c'
+ ? @selector(copy:)
+ : (ch == 'v'
+ ? @selector(paste:)
+ : @selector(selectAll:))))
+ to:nil from:panel];
+ ret = YES;
+ }
+ default:
+ // Send all control keys, as the text field supports C-a, C-f, C-e
+ // C-b and more.
+ if ([theEvent modifierFlags] & NSControlKeyMask)
+ {
+ [panel sendEvent: theEvent];
+ ret = YES;
+ }
+ break;
+ }
+ }
+
+
+ return ret;
+}
@implementation EmacsSavePanel
#ifdef NS_IMPL_COCOA
@@ -2572,6 +2641,14 @@
{
return ns_directory_from_panel (self);
}
+
+- (BOOL)performKeyEquivalent:(NSEvent *)theEvent
+{
+ BOOL ret = handlePanelKeys (self, theEvent);
+ if (! ret)
+ ret = [super performKeyEquivalent:theEvent];
+ return ret;
+}
@end
@@ -2609,7 +2686,14 @@
{
return ns_directory_from_panel (self);
}
-
+- (BOOL)performKeyEquivalent:(NSEvent *)theEvent
+{
+ // NSOpenPanel inherits NSSavePanel, so passing self is OK.
+ BOOL ret = handlePanelKeys (self, theEvent);
+ if (! ret)
+ ret = [super performKeyEquivalent:theEvent];
+ return ret;
+}
@end
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] /srv/bzr/emacs/trunk r112417: * nsfns.m (handlePanelKeys): New function.,
Jan D. <=