[Fuse-for-macosx-commits] SF.net SVN: fuse-for-macosx: [469] trunk/fuse/fusepb
Brought to you by:
fredm
|
From: <fr...@us...> - 2008-02-11 12:16:45
|
Revision: 469
http://fuse-for-macosx.svn.sourceforge.net/fuse-for-macosx/?rev=469&view=rev
Author: fredm
Date: 2008-02-11 04:16:49 -0800 (Mon, 11 Feb 2008)
Log Message:
-----------
Clear stuck shortcut keys for Command-{0,1,2,3,f,s,z,b,o,p,period}, still need
to handle Command-q (quit), Command-h (hide) and Command-m (minimise).
Modified Paths:
--------------
trunk/fuse/fusepb/controllers/FuseController.h
trunk/fuse/fusepb/controllers/FuseController.m
trunk/fuse/fusepb/views/DisplayOpenGLView.m
Modified: trunk/fuse/fusepb/controllers/FuseController.h
===================================================================
--- trunk/fuse/fusepb/controllers/FuseController.h 2008-02-10 20:47:11 UTC (rev 468)
+++ trunk/fuse/fusepb/controllers/FuseController.h 2008-02-11 12:16:49 UTC (rev 469)
@@ -133,6 +133,9 @@
- savePanelAccessoryView;
- (NSPopUpButton*) saveFileType;
+- (void)releaseCmdKeys:(NSString *)character:(int)keyCode;
+- (void)releaseKey:(int)keyCode;
+
- (void)ui_menu_activate_media_cartridge:(NSNumber*)active;
- (void)ui_menu_activate_media_cartridge_dock:(NSNumber*)active;
- (void)ui_menu_activate_media_cartridge_dock_eject:(NSNumber*)active;
Modified: trunk/fuse/fusepb/controllers/FuseController.m
===================================================================
--- trunk/fuse/fusepb/controllers/FuseController.m 2008-02-10 20:47:11 UTC (rev 468)
+++ trunk/fuse/fusepb/controllers/FuseController.m 2008-02-11 12:16:49 UTC (rev 469)
@@ -126,6 +126,13 @@
"joystick 2",
};
+#define QZ_s 0x01
+#define QZ_z 0x06
+#define QZ_b 0x0B
+#define QZ_o 0x1F
+#define QZ_p 0x23
+#define QZ_PERIOD 0x2F
+
@implementation FuseController
static FuseController *singleton = nil;
@@ -462,6 +469,7 @@
free(filename);
[[DisplayOpenGLView instance] unpause];
+ [self releaseCmdKeys:@"o":QZ_o];
}
- (IBAction)reset:(id)sender
@@ -513,11 +521,13 @@
- (IBAction)rzx_insert_snap:(id)sender
{
[[DisplayOpenGLView instance] rzxInsertSnap];
+ [self releaseCmdKeys:@"b":QZ_b];
}
- (IBAction)rzx_rollback:(id)sender
{
[[DisplayOpenGLView instance] rzxRollback];
+ [self releaseCmdKeys:@"z":QZ_z];
}
- (IBAction)rzx_start:(id)sender
@@ -615,7 +625,7 @@
filename = cocoaui_savepanel_get_filename( @"Save Snapshot As", [NSArray arrayWithObjects:@"szx", @"z80", @"sna", nil] );
- if( !filename ) { [[DisplayOpenGLView instance] unpause]; return; }
+ if( !filename ) goto save_as_exit;
[[DisplayOpenGLView instance] snapshotWrite:filename];
@@ -626,7 +636,9 @@
free( filename );
+save_as_exit:
[[DisplayOpenGLView instance] unpause];
+ [self releaseCmdKeys:@"s":QZ_s];
}
- (IBAction)open_screen:(id)sender
@@ -764,6 +776,7 @@
- (IBAction)tape_play:(id)sender
{
[[DisplayOpenGLView instance] tapeTogglePlay];
+ [self releaseCmdKeys:@"p":QZ_p];
}
- (IBAction)tape_rewind:(id)sender
@@ -849,6 +862,7 @@
preferencesController = [[PreferencesController alloc] init];
}
[preferencesController showWindow:self];
+ [self releaseCmdKeys:@".":QZ_PERIOD];
}
- (IBAction)saveFileTypeClicked:(id)sender;
@@ -895,6 +909,55 @@
[super dealloc];
}
+/*------------------------------------------------------------------------------
+ * releaseCmdKeys - This method fixes an issue when modal windows are used with
+ * the Mac OSX version of the SDL library.
+ * As the SDL normally captures all keystrokes, but we need to type in some
+ * Mac windows, all of the control menu windows run in modal mode. However,
+ * when this happens, the release of the command key and the shortcut key
+ * are not sent to SDL. We have to manually cause these events to happen
+ * to keep the SDL library in a sane state, otherwise only every other
+ * shortcut keypress will work.
+ *-----------------------------------------------------------------------------*/
+- (void) releaseCmdKeys:(NSString *)character:(int)keyCode
+{
+ NSEvent *event1, *event2;
+ NSPoint point;
+
+ event1 = [NSEvent keyEventWithType:NSKeyUp location:point modifierFlags:0
+ timestamp:nil windowNumber:0 context:nil characters:character
+ charactersIgnoringModifiers:character isARepeat:NO
+ keyCode:keyCode];
+ [NSApp postEvent:event1 atStart:NO];
+
+ event2 = [NSEvent keyEventWithType:NSFlagsChanged location:point
+ modifierFlags:0 timestamp:nil windowNumber:0 context:nil
+ characters:nil charactersIgnoringModifiers:nil isARepeat:NO
+ keyCode:0];
+ [NSApp postEvent:event2 atStart:NO];
+}
+
+/*------------------------------------------------------------------------------
+ * releaseKey - This method fixes an issue when modal windows are used with
+ * the Mac OSX version of the SDL library.
+ * As the SDL normally captures all keystrokes, but we need to type in some
+ * Mac windows, all of the control menu windows run in modal mode. However,
+ * when this happens, the release of function key which started the process
+ * is not sent to SDL. We have to manually cause these events to happen
+ * to keep the SDL library in a sane state, otherwise only everyother shortcut
+ * keypress will work.
+ *-----------------------------------------------------------------------------*/
+- (void) releaseKey:(int)keyCode
+{
+ NSEvent *event1;
+ NSPoint point;
+
+ event1 = [NSEvent keyEventWithType:NSKeyUp location:point modifierFlags:0
+ timestamp:nil windowNumber:0 context:nil characters:@" "
+ charactersIgnoringModifiers:@" " isARepeat:NO keyCode:keyCode];
+ [NSApp postEvent:event1 atStart:NO];
+}
+
- (void)ui_menu_activate_media_cartridge:(NSNumber*)active
{
[cart setEnabled:[active boolValue]];
Modified: trunk/fuse/fusepb/views/DisplayOpenGLView.m
===================================================================
--- trunk/fuse/fusepb/views/DisplayOpenGLView.m 2008-02-10 20:47:11 UTC (rev 468)
+++ trunk/fuse/fusepb/views/DisplayOpenGLView.m 2008-02-11 12:16:49 UTC (rev 469)
@@ -38,6 +38,12 @@
#include "ui/cocoa/cocoaui.h"
#include "ui/cocoa/dirty.h"
+#define QZ_f 0x03
+#define QZ_0 0x1D
+#define QZ_1 0x12
+#define QZ_2 0x13
+#define QZ_3 0x14
+
const void *
get_byte_pointer(void *bitmap)
{
@@ -106,6 +112,7 @@
[view_lock lock];
statusbar_updated = YES;
[view_lock unlock];
+ [[FuseController singleton] releaseCmdKeys:@"f":QZ_f];
}
-(IBAction) zoom:(id)sender
@@ -116,19 +123,23 @@
case 1: /* 320x240 */
size.width = 320;
size.height = 240;
+ [[FuseController singleton] releaseCmdKeys:@"1":QZ_1];
break;
case 2: /* 640x480 */
size.width = 640;
size.height = 480;
+ [[FuseController singleton] releaseCmdKeys:@"2":QZ_2];
break;
case 3: /* 960x720 */
size.width = 960;
size.height = 720;
+ [[FuseController singleton] releaseCmdKeys:@"3":QZ_3];
break;
case 0:
default: /* Actual size */
size.width = screenTex[0].image_width;
size.height = screenTex[0].image_height;
+ [[FuseController singleton] releaseCmdKeys:@"0":QZ_0];
}
[[self window] setContentSize:size];
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|