Added middle mouse button support

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@7140 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Richard Frith-MacDonald 2000-08-03 08:48:22 +00:00
parent 6d8d917d63
commit d1bbe54ace
13 changed files with 192 additions and 47 deletions

View file

@ -1,3 +1,18 @@
2000-08-03 Richard Frith-Macdonald <rfm@gnu.org>
* Headers/gnustep/gui/NSEvent.h: Support middle mouse button
* Headers/gnustep/gui/NSResponder.h: ditto
* Source/Functions.m: ditto
* Source/GSComboSupport.m: ditto
* Source/NSApplication.m: ditto
* Source/NSCell.m: ditto
* Source/NSControl.m: ditto
* Source/NSEvent.m: ditto
* Source/NSGraphicsContext.m: ditto
* Source/NSMenuView.m: ditto
* Source/NSResponder.m: ditto
* Source/NSWindow.m: ditto
2000-07-30 Richard Frith-Macdonald <rfm@gnu.org>
* Source/NSBundleAdditions.m: patch by borgheron@yahoo.com to simplify

View file

@ -44,10 +44,13 @@
typedef enum _NSEventType {
NSLeftMouseDown,
NSLeftMouseUp,
NSMiddleMouseDown, /* GNUstep extension */
NSMiddleMouseUp, /* GNUstep extension */
NSRightMouseDown,
NSRightMouseUp,
NSMouseMoved,
NSLeftMouseDragged,
NSMiddleMouseDragged, /* GNUstep extension */
NSRightMouseDragged,
NSMouseEntered,
NSMouseExited,
@ -64,10 +67,13 @@ typedef enum _NSEventType {
enum {
NSLeftMouseDownMask = (1 << NSLeftMouseDown),
NSLeftMouseUpMask = (1 << NSLeftMouseUp),
NSMiddleMouseDownMask = (1 << NSMiddleMouseDown), /* GNUstep */
NSMiddleMouseUpMask = (1 << NSMiddleMouseUp), /* GNUstep */
NSRightMouseDownMask = (1 << NSRightMouseDown),
NSRightMouseUpMask = (1 << NSRightMouseUp),
NSMouseMovedMask = (1 << NSMouseMoved),
NSLeftMouseDraggedMask = (1 << NSLeftMouseDragged),
NSMiddleMouseDraggedMask = (1 << NSMiddleMouseDragged), /* GNUstep */
NSRightMouseDraggedMask = (1 << NSRightMouseDragged),
NSMouseEnteredMask = (1 << NSMouseEntered),
NSMouseExitedMask = (1 << NSMouseExited),

View file

@ -103,6 +103,11 @@
- (void) mouseMoved: (NSEvent*)theEvent;
- (void) mouseUp: (NSEvent*)theEvent;
- (void) noResponderFor: (SEL)eventSelector;
#ifndef NO_GNUSTEP
- (void) middleMouseDown: (NSEvent*)theEvent;
- (void) middleMouseDragged: (NSEvent*)theEvent;
- (void) middleMouseUp: (NSEvent*)theEvent;
#endif
- (void) rightMouseDown: (NSEvent*)theEvent;
- (void) rightMouseDragged: (NSEvent*)theEvent;
- (void) rightMouseUp: (NSEvent*)theEvent;

View file

@ -55,10 +55,6 @@ NSApplicationMain(int argc, const char **argv)
environment: environ];
#endif
#ifndef NX_CURRENT_COMPILER_RELEASE
initialize_gnustep_backend();
#endif
infoDict = [[NSBundle mainBundle] infoDictionary];
className = [infoDict objectForKey: @"NSPrincipalClass"];
appClass = NSClassFromString(className);
@ -84,16 +80,19 @@ NSApplicationMain(int argc, const char **argv)
unsigned
NSEventMaskFromType(NSEventType type)
{
switch(type)
switch (type)
{
case NSLeftMouseDown: return NSLeftMouseDownMask;
case NSLeftMouseUp: return NSLeftMouseUpMask;
case NSMiddleMouseDown: return NSMiddleMouseDownMask;
case NSMiddleMouseUp: return NSMiddleMouseUpMask;
case NSRightMouseDown: return NSRightMouseDownMask;
case NSRightMouseUp: return NSRightMouseUpMask;
case NSMouseMoved: return NSMouseMovedMask;
case NSMouseEntered: return NSMouseEnteredMask;
case NSMouseExited: return NSMouseExitedMask;
case NSLeftMouseDragged: return NSLeftMouseDraggedMask;
case NSMiddleMouseDragged: return NSMiddleMouseDraggedMask;
case NSRightMouseDragged: return NSRightMouseDraggedMask;
case NSKeyDown: return NSKeyDownMask;
case NSKeyUp: return NSKeyUpMask;

View file

@ -236,6 +236,7 @@
}
else if ([event type] == NSMouseMoved ||
[event type] == NSLeftMouseDragged ||
[event type] == NSMiddleMouseDragged ||
[event type] == NSRightMouseDragged ||
[event type] == NSMouseEntered ||
[event type] == NSMouseExited ||

View file

@ -172,7 +172,7 @@ static NSCell* tileCell = nil;
NSPoint lastLocation;
NSPoint location;
unsigned eventMask = NSLeftMouseDownMask | NSLeftMouseUpMask
| NSPeriodicMask | NSRightMouseUpMask;
| NSPeriodicMask | NSMiddleMouseUpMask | NSRightMouseUpMask;
NSDate *theDistantFuture = [NSDate distantFuture];
NSApplication *theApp = [NSApplication sharedApplication];
BOOL done = NO;
@ -190,8 +190,9 @@ static NSCell* tileCell = nil;
switch ([theEvent type])
{
case NSRightMouseUp:
case NSMiddleMouseUp:
case NSLeftMouseUp:
/* right mouse up or left mouse up means we're done */
/* any mouse up means we're done */
done = YES;
break;
case NSPeriodic:
@ -510,34 +511,46 @@ static NSCell* tileCell = nil;
RELEASE(self);
return [NSApplication sharedApplication];
}
// Initialization must be enclosed in an autorelease pool
{
CREATE_AUTORELEASE_POOL (_app_init_pool);
self = [super init];
NSApp = self;
if (NSApp == nil)
{
NSLog(@"Cannot allocate the application instance!\n");
return nil;
}
NSDebugLog(@"Begin of NSApplication -init\n");
_hidden = [NSMutableArray new];
_inactive = [NSMutableArray new];
[self _appIconInit];
unhide_on_activation = YES;
app_is_hidden = YES;
app_is_active = NO;
listener = [GSServicesManager newWithApplication: self];
main_menu = nil;
windows_need_update = YES;
current_event = [NSEvent new]; // no current event
null_event = [NSEvent new]; // create dummy event
/* We are the end of responder chain */
[self setNextResponder: nil];
/* Initialize the backend here. This is equivalent to connecting to
our window server, so if someone wants to query information that might
require the backend, they just need to instantiate a sharedApplication
*/
initialize_gnustep_backend();
self = [super init];
NSApp = self;
if (NSApp == nil)
{
NSLog(@"Cannot allocate the application instance!\n");
RELEASE (_app_init_pool);
return nil;
}
NSDebugLog(@"Begin of NSApplication -init\n");
_hidden = [NSMutableArray new];
_inactive = [NSMutableArray new];
unhide_on_activation = YES;
app_is_hidden = YES;
app_is_active = NO;
listener = [GSServicesManager newWithApplication: self];
main_menu = nil;
windows_need_update = YES;
current_event = [NSEvent new]; // no current event
null_event = [NSEvent new]; // create dummy event
/* We are the end of responder chain */
[self setNextResponder: nil];
RELEASE (_app_init_pool);
}
return self;
}
@ -853,6 +866,7 @@ static NSCell* tileCell = nil;
*/
app_should_quit = NO;
[self _appIconInit];
[self finishLaunching];
app_is_running = YES;
@ -1256,6 +1270,7 @@ NSAssert([event retainCount] > 0, NSInternalInconsistencyException);
NSEventType type = [event type];
if ((type == NSLeftMouseDown) || (type == NSLeftMouseUp)
|| (type == NSMiddleMouseDown) || (type == NSMiddleMouseUp)
|| (type == NSRightMouseDown) || (type == NSRightMouseUp)
|| (type == NSMouseMoved))
{

View file

@ -897,8 +897,8 @@ static NSColor *shadowCol;
{
NSApplication *theApp = [NSApplication sharedApplication];
unsigned event_mask = NSLeftMouseDownMask | NSLeftMouseUpMask
| NSMouseMovedMask | NSLeftMouseDraggedMask
| NSRightMouseDraggedMask;
| NSMouseMovedMask | NSLeftMouseDraggedMask | NSMiddleMouseDraggedMask
| NSRightMouseDraggedMask;
NSPoint location = [theEvent locationInWindow];
NSPoint point = [controlView convertPoint: location fromView: nil];
float delay;

View file

@ -422,9 +422,9 @@ static Class cellClass;
NSEvent *e;
int oldActionMask;
NSPoint location;
unsigned int event_mask = NSLeftMouseDownMask | NSLeftMouseUpMask |
NSMouseMovedMask | NSLeftMouseDraggedMask |
NSRightMouseDraggedMask;
unsigned int event_mask = NSLeftMouseDownMask | NSLeftMouseUpMask
| NSMouseMovedMask | NSLeftMouseDraggedMask | NSMiddleMouseDraggedMask
| NSRightMouseDraggedMask;
NSDebugLog(@"NSControl mouseDown\n");
if (![self isEnabled])

View file

@ -509,10 +509,13 @@ static Class eventClass;
{
case NSLeftMouseDown:
case NSLeftMouseUp:
case NSMiddleMouseDown:
case NSMiddleMouseUp:
case NSRightMouseDown:
case NSRightMouseUp:
case NSMouseMoved:
case NSLeftMouseDragged:
case NSMiddleMouseDragged:
case NSRightMouseDragged:
[aCoder encodeValuesOfObjCTypes: "iif", &event_data.mouse.event_num,
&event_data.mouse.click, &event_data.mouse.pressure];
@ -559,10 +562,13 @@ static Class eventClass;
{
case NSLeftMouseDown:
case NSLeftMouseUp:
case NSMiddleMouseDown:
case NSMiddleMouseUp:
case NSRightMouseDown:
case NSRightMouseUp:
case NSMouseMoved:
case NSLeftMouseDragged:
case NSMiddleMouseDragged:
case NSRightMouseDragged:
[aDecoder decodeValuesOfObjCTypes: "iif", &event_data.mouse.event_num,
&event_data.mouse.click, &event_data.mouse.pressure];
@ -600,21 +606,40 @@ static Class eventClass;
- (NSString*) description
{
const char* eventTypes[] = { "leftMouseDown", "leftMouseUp",
"rightMouseDown", "rightMouseUp", "mouseMoved", "leftMouseDragged",
"rightMouseDragged", "mouseEntered", "mouseExited",
"keyDown", "keyUp", "flagsChanged", "appKitDefined",
"systemDefined", "applicationDefined", "periodic", "cursorUpdate"
const char* eventTypes[] = {
"leftMouseDown",
"leftMouseUp",
"middleMouseDown",
"middleMouseUp",
"rightMouseDown",
"rightMouseUp",
"mouseMoved",
"leftMouseDragged",
"middleMouseDragged",
"rightMouseDragged",
"mouseEntered",
"mouseExited",
"keyDown",
"keyUp",
"flagsChanged",
"appKitDefined",
"systemDefined",
"applicationDefined",
"periodic",
"cursorUpdate"
};
switch (event_type)
{
case NSLeftMouseDown:
case NSLeftMouseUp:
case NSMiddleMouseDown:
case NSMiddleMouseUp:
case NSRightMouseDown:
case NSRightMouseUp:
case NSMouseMoved:
case NSLeftMouseDragged:
case NSMiddleMouseDragged:
case NSRightMouseDragged:
return [NSString stringWithFormat:
@"NSEvent: eventType = %s, point = { %f, %f }, modifiers = %u,"

View file

@ -224,6 +224,10 @@ NSGraphicsContext *GSCurrentContext()
{
}
+ (void) waitAllContexts
{
}
- (NSView*) focusView
{
return [focus_stack lastObject];
@ -2045,6 +2049,16 @@ NSGraphicsContext *GSCurrentContext()
matched = YES;
break;
case NSMiddleMouseDown:
if (mask & NSMiddleMouseDownMask)
matched = YES;
break;
case NSMiddleMouseUp:
if (mask & NSMiddleMouseUpMask)
matched = YES;
break;
case NSRightMouseDown:
if (mask & NSRightMouseDownMask)
matched = YES;
@ -2075,6 +2089,11 @@ NSGraphicsContext *GSCurrentContext()
matched = YES;
break;
case NSMiddleMouseDragged:
if (mask & NSMiddleMouseDraggedMask)
matched = YES;
break;
case NSRightMouseDragged:
if (mask & NSRightMouseDraggedMask)
matched = YES;
@ -2200,6 +2219,16 @@ NSGraphicsContext *GSCurrentContext()
shouldRemove = YES;
break;
case NSMiddleMouseDown:
if (mask & NSMiddleMouseDownMask)
shouldRemove = YES;
break;
case NSMiddleMouseUp:
if (mask & NSMiddleMouseUpMask)
shouldRemove = YES;
break;
case NSRightMouseDown:
if (mask & NSRightMouseDownMask)
shouldRemove = YES;
@ -2230,6 +2259,11 @@ NSGraphicsContext *GSCurrentContext()
shouldRemove = YES;
break;
case NSMiddleMouseDragged:
if (mask & NSMiddleMouseDraggedMask)
shouldRemove = YES;
break;
case NSRightMouseDragged:
if (mask & NSRightMouseDraggedMask)
shouldRemove = YES;

View file

@ -749,6 +749,11 @@ static float GSMenuBarHeight = 25.0; // A wild guess.
end = NSRightMouseUp;
eventMask |= NSRightMouseUpMask | NSRightMouseDraggedMask;
}
else if (type == NSMiddleMouseDown)
{
end = NSMiddleMouseUp;
eventMask |= NSMiddleMouseUpMask | NSMiddleMouseDraggedMask;
}
else
{
end = NSLeftMouseUp;

View file

@ -228,6 +228,30 @@
return [self noResponderFor: @selector(keyUp:)];
}
- (void) middleMouseDown: (NSEvent*)theEvent
{
if (_next_responder)
return [_next_responder middleMouseDown: theEvent];
else
return [self noResponderFor: @selector(middleMouseDown:)];
}
- (void) middleMouseDragged: (NSEvent*)theEvent
{
if (_next_responder)
return [_next_responder middleMouseDragged: theEvent];
else
return [self noResponderFor: @selector(middleMouseDragged:)];
}
- (void) middleMouseUp: (NSEvent*)theEvent
{
if (_next_responder)
return [_next_responder middleMouseUp: theEvent];
else
return [self noResponderFor: @selector(middleMouseUp:)];
}
- (void) mouseDown: (NSEvent*)theEvent
{
if (_next_responder)

View file

@ -237,16 +237,14 @@ static NSCell* tileCell = nil;
if ([theEvent clickCount] >= 2)
{
NSWindow *w = [_window counterpart];
[_window orderOut: self];
[w orderFront: self];
[w deminiaturize: self];
}
else
{
NSPoint lastLocation;
NSPoint location;
unsigned eventMask = NSLeftMouseDownMask | NSLeftMouseUpMask
| NSPeriodicMask | NSRightMouseUpMask;
| NSPeriodicMask | NSMiddleMouseUpMask | NSRightMouseUpMask;
NSDate *theDistantFuture = [NSDate distantFuture];
BOOL done = NO;
@ -263,6 +261,7 @@ static NSCell* tileCell = nil;
switch ([theEvent type])
{
case NSRightMouseUp:
case NSMiddleMouseUp:
case NSLeftMouseUp:
/* right mouse up or left mouse up means we're done */
done = YES;
@ -2296,6 +2295,18 @@ resetCursorRectsForView(NSView *theView)
last_point = [theEvent locationInWindow];
break;
case NSMiddleMouseDown: // Middle mouse down
v = [content_view hitTest: [theEvent locationInWindow]];
[v middleMouseDown: theEvent];
last_point = [theEvent locationInWindow];
break;
case NSMiddleMouseUp: // Middle mouse up
v = [content_view hitTest: [theEvent locationInWindow]];
[v middleMouseUp: theEvent];
last_point = [theEvent locationInWindow];
break;
case NSRightMouseDown: // Right mouse down
v = [content_view hitTest: [theEvent locationInWindow]];
[v rightMouseDown: theEvent];
@ -2309,6 +2320,7 @@ resetCursorRectsForView(NSView *theView)
break;
case NSLeftMouseDragged: // Left mouse dragged
case NSMiddleMouseDragged: // Middle mouse dragged
case NSRightMouseDragged: // Right mouse dragged
case NSMouseMoved: // Mouse moved
switch (type)
@ -2317,6 +2329,10 @@ resetCursorRectsForView(NSView *theView)
v = [content_view hitTest: [theEvent locationInWindow]];
[v mouseDragged: theEvent];
break;
case NSMiddleMouseDragged:
v = [content_view hitTest: [theEvent locationInWindow]];
[v middleMouseDragged: theEvent];
break;
case NSRightMouseDragged:
v = [content_view hitTest: [theEvent locationInWindow]];
[v rightMouseDragged: theEvent];