mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-04-22 18:11:06 +00:00
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:
parent
6d8d917d63
commit
d1bbe54ace
13 changed files with 192 additions and 47 deletions
15
ChangeLog
15
ChangeLog
|
@ -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
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -236,6 +236,7 @@
|
|||
}
|
||||
else if ([event type] == NSMouseMoved ||
|
||||
[event type] == NSLeftMouseDragged ||
|
||||
[event type] == NSMiddleMouseDragged ||
|
||||
[event type] == NSRightMouseDragged ||
|
||||
[event type] == NSMouseEntered ||
|
||||
[event type] == NSMouseExited ||
|
||||
|
|
|
@ -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))
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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])
|
||||
|
|
|
@ -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,"
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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];
|
||||
|
|
Loading…
Reference in a new issue