Changeset 846 for trunk/src/gui/util/qsystemtrayicon_mac.mm
- Timestamp:
- May 5, 2011, 5:36:53 AM (14 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:mergeinfo changed
/branches/vendor/nokia/qt/4.7.2 (added) merged: 845 /branches/vendor/nokia/qt/current merged: 844 /branches/vendor/nokia/qt/4.6.3 removed
- Property svn:mergeinfo changed
-
trunk/src/gui/util/qsystemtrayicon_mac.mm
r769 r846 1 1 /**************************************************************************** 2 2 ** 3 ** Copyright (C) 201 0Nokia Corporation and/or its subsidiary(-ies).3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). 4 4 ** All rights reserved. 5 5 ** Contact: Nokia Corporation (qt-info@nokia.com) … … 76 76 #define QT_MAC_SYSTEMTRAY_USE_GROWL 77 77 78 @class QNSMenu;79 80 78 #include <private/qt_cocoa_helpers_mac_p.h> 81 79 #include <private/qsystemtrayicon_p.h> … … 94 92 extern NSString *keySequenceToKeyEqivalent(const QKeySequence &accel); // qmenu_mac.mm 95 93 extern NSUInteger keySequenceModifierMask(const QKeySequence &accel); // qmenu_mac.mm 94 extern Qt::MouseButton cocoaButton2QtButton(NSInteger buttonNum); 96 95 QT_END_NAMESPACE 97 96 98 97 QT_USE_NAMESPACE 99 98 100 @class QNSImageView; 101 102 @interface QNSStatusItem : NSObject { 99 @class QT_MANGLE_NAMESPACE(QNSMenu); 100 @class QT_MANGLE_NAMESPACE(QNSImageView); 101 102 @interface QT_MANGLE_NAMESPACE(QNSStatusItem) : NSObject { 103 103 NSStatusItem *item; 104 104 QSystemTrayIcon *icon; 105 105 QSystemTrayIconPrivate *iconPrivate; 106 Q NSImageView*imageCell;106 QT_MANGLE_NAMESPACE(QNSImageView) *imageCell; 107 107 } 108 108 -(id)initWithIcon:(QSystemTrayIcon*)icon iconPrivate:(QSystemTrayIconPrivate *)iprivate; … … 111 111 -(NSStatusItem*)item; 112 112 -(QRectF)geometry; 113 - (void)triggerSelector:(id)sender ;113 - (void)triggerSelector:(id)sender button:(Qt::MouseButton)mouseButton; 114 114 - (void)doubleClickSelector:(id)sender; 115 115 @end 116 116 117 @interface Q NSImageView: NSImageView {117 @interface QT_MANGLE_NAMESPACE(QNSImageView) : NSImageView { 118 118 BOOL down; 119 Q NSStatusItem*parent;120 } 121 -(id)initWithParent:(Q NSStatusItem*)myParent;119 QT_MANGLE_NAMESPACE(QNSStatusItem) *parent; 120 } 121 -(id)initWithParent:(QT_MANGLE_NAMESPACE(QNSStatusItem)*)myParent; 122 122 -(QSystemTrayIcon*)icon; 123 123 -(void)menuTrackingDone:(NSNotification*)notification; 124 -(void)mousePressed:(NSEvent *)mouseEvent ;124 -(void)mousePressed:(NSEvent *)mouseEvent button:(Qt::MouseButton)mouseButton; 125 125 @end 126 126 … … 134 134 135 135 136 @interface Q NSMenu: NSMenu <NSMenuDelegate> {136 @interface QT_MANGLE_NAMESPACE(QNSMenu) : NSMenu <NSMenuDelegate> { 137 137 QMenu *qmenu; 138 138 } … … 148 148 QSystemTrayIconSys(QSystemTrayIcon *icon, QSystemTrayIconPrivate *d) { 149 149 QMacCocoaAutoReleasePool pool; 150 item = [[Q NSStatusItemalloc] initWithIcon:icon iconPrivate:d];150 item = [[QT_MANGLE_NAMESPACE(QNSStatusItem) alloc] initWithIcon:icon iconPrivate:d]; 151 151 } 152 152 ~QSystemTrayIconSys() { … … 155 155 [item release]; 156 156 } 157 Q NSStatusItem*item;157 QT_MANGLE_NAMESPACE(QNSStatusItem) *item; 158 158 }; 159 159 … … 223 223 224 224 bool QSystemTrayIconPrivate::isSystemTrayAvailable_sys() 225 { 226 return true; 227 } 228 229 bool QSystemTrayIconPrivate::supportsMessages_sys() 225 230 { 226 231 return true; … … 299 304 @end 300 305 301 @implementation Q NSImageView302 -(id)initWithParent:(Q NSStatusItem*)myParent {306 @implementation QT_MANGLE_NAMESPACE(QNSImageView) 307 -(id)initWithParent:(QT_MANGLE_NAMESPACE(QNSStatusItem)*)myParent { 303 308 self = [super init]; 304 309 parent = myParent; … … 334 339 } 335 340 336 -(void)mousePressed:(NSEvent *)mouseEvent 337 { 338 int clickCount = [mouseEvent clickCount]; 339 down = !down; 340 if(!down && [self icon]->contextMenu()) 341 [self icon]->contextMenu()->hide(); 341 -(void)mousePressed:(NSEvent *)mouseEvent button:(Qt::MouseButton)mouseButton 342 { 343 down = YES; 344 int clickCount = [mouseEvent clickCount]; 342 345 [self setNeedsDisplay:YES]; 343 346 … … 349 352 #endif 350 353 351 if ( down &&![self icon]->icon().isNull() ) {354 if (![self icon]->icon().isNull() ) { 352 355 NSImage *nsaltimage = static_cast<NSImage *>(qt_mac_create_nsimage([self icon]->icon().pixmap(QSize(scale, scale), QIcon::Selected))); 353 356 [self setImage: nsaltimage]; … … 355 358 } 356 359 357 358 if (down) 359 [parent triggerSelector:self]; 360 else if ((clickCount%2)) 360 if ((clickCount == 2)) { 361 [self menuTrackingDone:nil]; 361 362 [parent doubleClickSelector:self]; 362 while (down) { 363 mouseEvent = [[self window] nextEventMatchingMask:NSLeftMouseDownMask | NSLeftMouseUpMask 364 | NSLeftMouseDraggedMask | NSRightMouseDownMask | NSRightMouseUpMask 365 | NSRightMouseDraggedMask]; 366 switch ([mouseEvent type]) { 367 case NSRightMouseDown: 368 case NSRightMouseUp: 369 case NSLeftMouseDown: 370 case NSLeftMouseUp: 371 [self menuTrackingDone:nil]; 372 break; 373 case NSRightMouseDragged: 374 case NSLeftMouseDragged: 375 default: 376 /* Ignore any other kind of event. */ 377 break; 378 } 379 }; 363 } else { 364 [parent triggerSelector:self button:mouseButton]; 365 } 380 366 } 381 367 382 368 -(void)mouseDown:(NSEvent *)mouseEvent 383 369 { 384 [self mousePressed:mouseEvent]; 370 [self mousePressed:mouseEvent button:Qt::LeftButton]; 371 } 372 373 -(void)mouseUp:(NSEvent *)mouseEvent 374 { 375 Q_UNUSED(mouseEvent); 376 [self menuTrackingDone:nil]; 385 377 } 386 378 387 379 - (void)rightMouseDown:(NSEvent *)mouseEvent 388 380 { 389 [self mousePressed:mouseEvent]; 390 } 391 381 [self mousePressed:mouseEvent button:Qt::RightButton]; 382 } 383 384 -(void)rightMouseUp:(NSEvent *)mouseEvent 385 { 386 Q_UNUSED(mouseEvent); 387 [self menuTrackingDone:nil]; 388 } 389 390 - (void)otherMouseDown:(NSEvent *)mouseEvent 391 { 392 [self mousePressed:mouseEvent button:cocoaButton2QtButton([mouseEvent buttonNumber])]; 393 } 394 395 -(void)otherMouseUp:(NSEvent *)mouseEvent 396 { 397 Q_UNUSED(mouseEvent); 398 [self menuTrackingDone:nil]; 399 } 392 400 393 401 -(void)drawRect:(NSRect)rect { … … 397 405 @end 398 406 399 @implementation Q NSStatusItem407 @implementation QT_MANGLE_NAMESPACE(QNSStatusItem) 400 408 401 409 -(id)initWithIcon:(QSystemTrayIcon*)i iconPrivate:(QSystemTrayIconPrivate *)iPrivate … … 406 414 iconPrivate = iPrivate; 407 415 item = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSSquareStatusItemLength] retain]; 408 imageCell = [[Q NSImageViewalloc] initWithParent:self];416 imageCell = [[QT_MANGLE_NAMESPACE(QNSImageView) alloc] initWithParent:self]; 409 417 [item setView: imageCell]; 410 418 } … … 434 442 return QRectF(); 435 443 } 436 - (void)triggerSelector:(id)sender { 444 445 - (void)triggerSelector:(id)sender button:(Qt::MouseButton)mouseButton { 437 446 Q_UNUSED(sender); 438 if (!icon)447 if (!icon) 439 448 return; 440 qtsystray_sendActivated(icon, QSystemTrayIcon::Trigger); 449 450 if (mouseButton == Qt::MidButton) 451 qtsystray_sendActivated(icon, QSystemTrayIcon::MiddleClick); 452 else 453 qtsystray_sendActivated(icon, QSystemTrayIcon::Trigger); 454 441 455 if (icon->contextMenu()) { 442 #if 0443 const QRectF geom = [self geometry];444 if(!geom.isNull()) {445 [[NSNotificationCenter defaultCenter] addObserver:imageCell446 selector:@selector(menuTrackingDone:)447 name:nil448 object:self];449 icon->contextMenu()->exec(geom.topLeft().toPoint(), 0);450 [imageCell menuTrackingDone:nil];451 } else452 #endif453 {454 456 #ifndef QT_MAC_USE_COCOA 455 456 457 #endif 458 NSMenu *m = [[QNSMenualloc] initWithQMenu:icon->contextMenu()];459 460 461 462 463 464 465 466 467 468 } 457 [[[self item] view] removeAllToolTips]; 458 iconPrivate->updateToolTip_sys(); 459 #endif 460 NSMenu *m = [[QT_MANGLE_NAMESPACE(QNSMenu) alloc] initWithQMenu:icon->contextMenu()]; 461 [m setAutoenablesItems: NO]; 462 [[NSNotificationCenter defaultCenter] addObserver:imageCell 463 selector:@selector(menuTrackingDone:) 464 name:NSMenuDidEndTrackingNotification 465 object:m]; 466 [item popUpStatusItemMenu: m]; 467 [m release]; 468 } 469 } 470 469 471 - (void)doubleClickSelector:(id)sender { 470 472 Q_UNUSED(sender); … … 473 475 qtsystray_sendActivated(icon, QSystemTrayIcon::DoubleClick); 474 476 } 477 475 478 @end 476 479 … … 483 486 }; 484 487 485 @implementation Q NSMenu488 @implementation QT_MANGLE_NAMESPACE(QNSMenu) 486 489 -(id)initWithQMenu:(QMenu*)qm { 487 490 self = [super init]; … … 496 499 } 497 500 -(void)menuNeedsUpdate:(NSMenu*)nsmenu { 498 Q NSMenu *menu = static_cast<QNSMenu*>(nsmenu);501 QT_MANGLE_NAMESPACE(QNSMenu) *menu = static_cast<QT_MANGLE_NAMESPACE(QNSMenu) *>(nsmenu); 499 502 emit static_cast<QSystemTrayIconQMenu*>(menu->qmenu)->doAboutToShow(); 500 503 for(int i = [menu numberOfItems]-1; i >= 0; --i) … … 541 544 } 542 545 if(action->menu()) { 543 Q NSMenu *sub = [[QNSMenualloc] initWithQMenu:action->menu()];546 QT_MANGLE_NAMESPACE(QNSMenu) *sub = [[QT_MANGLE_NAMESPACE(QNSMenu) alloc] initWithQMenu:action->menu()]; 544 547 [item setSubmenu:sub]; 545 548 } else {
Note:
See TracChangeset
for help on using the changeset viewer.