Handle events of type flagschanged correctly.

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@29978 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Fred Kiefer 2010-03-16 09:15:54 +00:00
parent 81b60afa84
commit 26ea895671
2 changed files with 21 additions and 10 deletions

View file

@ -1,3 +1,7 @@
2010-03-16 Fred Kiefer <FredKiefer@gmx.de>
* Source/NSEvent.m: Handle type flagsChanged correctly.
2010-03-15 Fred Kiefer <FredKiefer@gmx.de>
* Source/GSXibLoader.m: Correct the decoding of the <bytes>
@ -1958,7 +1962,7 @@
display the window at all.
* Soure/NSWindow.m: Don't order any windows in if this is a background
application.
* Source/NSEvent.m: fix missing commaa causing comple fail.
* Source/NSEvent.m: fix missing comma causing comple fail.
2009-10-17 Sheldon Gill <sheldon@westnet.net.au>

View file

@ -73,7 +73,7 @@ static Class eventClass;
{
if (self == [NSEvent class])
{
[self setVersion: 2];
[self setVersion: 3];
eventClass = [NSEvent class];
}
}
@ -105,7 +105,6 @@ static Class eventClass;
AUTORELEASE(e);
e->event_type = type;
e->location_point = location;
e->modifier_flags = flags;
e->event_time = time;
@ -452,7 +451,7 @@ static Class eventClass;
{
NSEvent *e = (NSEvent*)NSCopyObject (self, 0, zone);
if ((event_type == NSKeyUp) || (event_type == NSKeyDown))
if ((NSEventMaskFromType(event_type) & GSKeyEventMask))
{
event_data.key.char_keys = [event_data.key.char_keys copyWithZone: zone];
event_data.key.unmodified_keys
@ -500,7 +499,7 @@ static Class eventClass;
- (void) dealloc
{
if ((event_type == NSKeyUp) || (event_type == NSKeyDown))
if ((NSEventMaskFromType(event_type) & GSKeyEventMask))
{
RELEASE(event_data.key.char_keys);
RELEASE(event_data.key.unmodified_keys);
@ -596,6 +595,7 @@ static const char *eventTypes[] = {
"applicationDefined",
"periodic",
"cursorUpdate",
"", "", "", "",
"scrollWheel",
"tabletPoint",
"tabletProximity",
@ -637,6 +637,7 @@ static const char *eventTypes[] = {
case NSKeyDown:
case NSKeyUp:
case NSFlagsChanged:
return [NSString stringWithFormat:
@"NSEvent: eventType = %s, point = { %f, %f }, modifiers = %u,"
@" time = %f, window = %d, dpsContext = %p, "
@ -648,7 +649,6 @@ static const char *eventTypes[] = {
event_data.key.key_code];
break;
case NSFlagsChanged:
case NSPeriodic:
case NSCursorUpdate:
case NSAppKitDefined:
@ -737,6 +737,7 @@ static const char *eventTypes[] = {
case NSKeyDown:
case NSKeyUp:
case NSFlagsChanged:
[aCoder encodeValueOfObjCType: @encode(BOOL)
at: &event_data.key.repeat];
[aCoder encodeObject: event_data.key.char_keys];
@ -744,7 +745,6 @@ static const char *eventTypes[] = {
[aCoder encodeValueOfObjCType: "S" at: &event_data.key.key_code];
break;
case NSFlagsChanged:
case NSPeriodic:
case NSAppKitDefined:
case NSSystemDefined:
@ -821,6 +821,14 @@ static const char *eventTypes[] = {
}
}
// Previously flag change events where encoded wrongly
if ((version == 2) && (event_type == NSFlagsChanged))
{
[aDecoder decodeValuesOfObjCTypes: "sii", &event_data.misc.sub_type,
&event_data.misc.data1, &event_data.misc.data2];
return self;
}
// Decode the event date based upon the event type
switch (event_type)
{
@ -852,6 +860,7 @@ static const char *eventTypes[] = {
case NSKeyDown:
case NSKeyUp:
case NSFlagsChanged:
[aDecoder decodeValueOfObjCType: @encode(BOOL)
at: &event_data.key.repeat];
event_data.key.char_keys = [aDecoder decodeObject];
@ -859,7 +868,6 @@ static const char *eventTypes[] = {
[aDecoder decodeValueOfObjCType: "S" at: &event_data.key.key_code];
break;
case NSFlagsChanged:
case NSPeriodic:
case NSAppKitDefined:
case NSSystemDefined:
@ -898,8 +906,7 @@ static const char *eventTypes[] = {
*/
- (unsigned short) keyCode
{
if ((event_type != NSKeyUp) && (event_type != NSKeyDown)
&& (event_type != NSFlagsChanged))
if (!(NSEventMaskFromType(event_type) & GSKeyEventMask))
{
[NSException raise: NSInternalInconsistencyException
format: @"keyCode requested for non-keyboard event"];