Ignore:
Timestamp:
May 5, 2011, 5:36:53 AM (14 years ago)
Author:
Dmitry A. Kuminov
Message:

trunk: Merged in qt 4.7.2 sources from branches/vendor/nokia/qt.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/src/gui/util/qsystemtrayicon_mac.mm

    r769 r846  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
     
    7676#define QT_MAC_SYSTEMTRAY_USE_GROWL
    7777
    78 @class QNSMenu;
    79 
    8078#include <private/qt_cocoa_helpers_mac_p.h>
    8179#include <private/qsystemtrayicon_p.h>
     
    9492extern NSString *keySequenceToKeyEqivalent(const QKeySequence &accel); // qmenu_mac.mm
    9593extern NSUInteger keySequenceModifierMask(const QKeySequence &accel);  // qmenu_mac.mm
     94extern Qt::MouseButton cocoaButton2QtButton(NSInteger buttonNum);
    9695QT_END_NAMESPACE
    9796
    9897QT_USE_NAMESPACE
    9998
    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 {
    103103    NSStatusItem *item;
    104104    QSystemTrayIcon *icon;
    105105    QSystemTrayIconPrivate *iconPrivate;
    106     QNSImageView *imageCell;
     106    QT_MANGLE_NAMESPACE(QNSImageView) *imageCell;
    107107}
    108108-(id)initWithIcon:(QSystemTrayIcon*)icon iconPrivate:(QSystemTrayIconPrivate *)iprivate;
     
    111111-(NSStatusItem*)item;
    112112-(QRectF)geometry;
    113 - (void)triggerSelector:(id)sender;
     113- (void)triggerSelector:(id)sender button:(Qt::MouseButton)mouseButton;
    114114- (void)doubleClickSelector:(id)sender;
    115115@end
    116116
    117 @interface QNSImageView : NSImageView {
     117@interface QT_MANGLE_NAMESPACE(QNSImageView) : NSImageView {
    118118    BOOL down;
    119     QNSStatusItem *parent;
    120 }
    121 -(id)initWithParent:(QNSStatusItem*)myParent;
     119    QT_MANGLE_NAMESPACE(QNSStatusItem) *parent;
     120}
     121-(id)initWithParent:(QT_MANGLE_NAMESPACE(QNSStatusItem)*)myParent;
    122122-(QSystemTrayIcon*)icon;
    123123-(void)menuTrackingDone:(NSNotification*)notification;
    124 -(void)mousePressed:(NSEvent *)mouseEvent;
     124-(void)mousePressed:(NSEvent *)mouseEvent button:(Qt::MouseButton)mouseButton;
    125125@end
    126126
     
    134134
    135135
    136 @interface QNSMenu : NSMenu <NSMenuDelegate> {
     136@interface QT_MANGLE_NAMESPACE(QNSMenu) : NSMenu <NSMenuDelegate> {
    137137    QMenu *qmenu;
    138138}
     
    148148    QSystemTrayIconSys(QSystemTrayIcon *icon, QSystemTrayIconPrivate *d) {
    149149        QMacCocoaAutoReleasePool pool;
    150         item = [[QNSStatusItem alloc] initWithIcon:icon iconPrivate:d];
     150        item = [[QT_MANGLE_NAMESPACE(QNSStatusItem) alloc] initWithIcon:icon iconPrivate:d];
    151151    }
    152152    ~QSystemTrayIconSys() {
     
    155155        [item release];
    156156    }
    157     QNSStatusItem *item;
     157    QT_MANGLE_NAMESPACE(QNSStatusItem) *item;
    158158};
    159159
     
    223223
    224224bool QSystemTrayIconPrivate::isSystemTrayAvailable_sys()
     225{
     226    return true;
     227}
     228
     229bool QSystemTrayIconPrivate::supportsMessages_sys()
    225230{
    226231    return true;
     
    299304@end
    300305
    301 @implementation QNSImageView
    302 -(id)initWithParent:(QNSStatusItem*)myParent {
     306@implementation QT_MANGLE_NAMESPACE(QNSImageView)
     307-(id)initWithParent:(QT_MANGLE_NAMESPACE(QNSStatusItem)*)myParent {
    303308    self = [super init];
    304309    parent = myParent;
     
    334339}
    335340
    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]; 
    342345    [self setNeedsDisplay:YES];
    343346
     
    349352#endif
    350353
    351     if( down && ![self icon]->icon().isNull() ) {
     354    if (![self icon]->icon().isNull() ) {
    352355        NSImage *nsaltimage = static_cast<NSImage *>(qt_mac_create_nsimage([self icon]->icon().pixmap(QSize(scale, scale), QIcon::Selected)));
    353356        [self setImage: nsaltimage];
     
    355358    }
    356359
    357 
    358     if (down)
    359         [parent triggerSelector:self];
    360     else if ((clickCount%2))
     360    if ((clickCount == 2)) {
     361        [self menuTrackingDone:nil];
    361362        [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    }
    380366}
    381367
    382368-(void)mouseDown:(NSEvent *)mouseEvent
    383369{
    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];
    385377}
    386378
    387379- (void)rightMouseDown:(NSEvent *)mouseEvent
    388380{
    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}
    392400
    393401-(void)drawRect:(NSRect)rect {
     
    397405@end
    398406
    399 @implementation QNSStatusItem
     407@implementation QT_MANGLE_NAMESPACE(QNSStatusItem)
    400408
    401409-(id)initWithIcon:(QSystemTrayIcon*)i iconPrivate:(QSystemTrayIconPrivate *)iPrivate
     
    406414        iconPrivate = iPrivate;
    407415        item = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSSquareStatusItemLength] retain];
    408         imageCell = [[QNSImageView alloc] initWithParent:self];
     416        imageCell = [[QT_MANGLE_NAMESPACE(QNSImageView) alloc] initWithParent:self];
    409417        [item setView: imageCell];
    410418    }
     
    434442    return QRectF();
    435443}
    436 - (void)triggerSelector:(id)sender {
     444
     445- (void)triggerSelector:(id)sender button:(Qt::MouseButton)mouseButton {
    437446    Q_UNUSED(sender);
    438     if(!icon)
     447    if (!icon)
    439448        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
    441455    if (icon->contextMenu()) {
    442 #if 0
    443         const QRectF geom = [self geometry];
    444         if(!geom.isNull()) {
    445             [[NSNotificationCenter defaultCenter] addObserver:imageCell
    446                                                   selector:@selector(menuTrackingDone:)
    447                                                   name:nil
    448                                                   object:self];
    449             icon->contextMenu()->exec(geom.topLeft().toPoint(), 0);
    450             [imageCell menuTrackingDone:nil];
    451         } else
    452 #endif
    453         {
    454456#ifndef QT_MAC_USE_COCOA
    455             [[[self item] view] removeAllToolTips];
    456             iconPrivate->updateToolTip_sys();
    457 #endif
    458             NSMenu *m = [[QNSMenu alloc] initWithQMenu:icon->contextMenu()];
    459             [m setAutoenablesItems: NO];
    460             [[NSNotificationCenter defaultCenter] addObserver:imageCell
    461                                                   selector:@selector(menuTrackingDone:)
    462                                                   name:NSMenuDidEndTrackingNotification
    463                                                   object:m];
    464             [item popUpStatusItemMenu: m];
    465             [m release];
    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
    469471- (void)doubleClickSelector:(id)sender {
    470472    Q_UNUSED(sender);
     
    473475    qtsystray_sendActivated(icon, QSystemTrayIcon::DoubleClick);
    474476}
     477
    475478@end
    476479
     
    483486};
    484487
    485 @implementation QNSMenu
     488@implementation QT_MANGLE_NAMESPACE(QNSMenu)
    486489-(id)initWithQMenu:(QMenu*)qm {
    487490    self = [super init];
     
    496499}
    497500-(void)menuNeedsUpdate:(NSMenu*)nsmenu {
    498     QNSMenu *menu = static_cast<QNSMenu *>(nsmenu);
     501    QT_MANGLE_NAMESPACE(QNSMenu) *menu = static_cast<QT_MANGLE_NAMESPACE(QNSMenu) *>(nsmenu);
    499502    emit static_cast<QSystemTrayIconQMenu*>(menu->qmenu)->doAboutToShow();
    500503    for(int i = [menu numberOfItems]-1; i >= 0; --i)
     
    541544            }
    542545            if(action->menu()) {
    543                 QNSMenu *sub = [[QNSMenu alloc] initWithQMenu:action->menu()];
     546                QT_MANGLE_NAMESPACE(QNSMenu) *sub = [[QT_MANGLE_NAMESPACE(QNSMenu) alloc] initWithQMenu:action->menu()];
    544547                [item setSubmenu:sub];
    545548            } else {
Note: See TracChangeset for help on using the changeset viewer.