2 #include "macdockiconhandler.h"
5 #include <QtGui/QWidget>
7 extern void qt_mac_set_dock_menu(QMenu*);
10 #include <Cocoa/Cocoa.h>
12 @interface DockIconClickEventHandler : NSObject
14 MacDockIconHandler* dockIconHandler;
19 @implementation DockIconClickEventHandler
21 - (id)initWithDockIconHandler:(MacDockIconHandler *)aDockIconHandler
25 dockIconHandler = aDockIconHandler;
27 [[NSAppleEventManager sharedAppleEventManager]
29 andSelector:@selector(handleDockClickEvent:withReplyEvent:)
30 forEventClass:kCoreEventClass
31 andEventID:kAEReopenApplication];
36 - (void)handleDockClickEvent:(NSAppleEventDescriptor*)event withReplyEvent:(NSAppleEventDescriptor*)replyEvent
42 dockIconHandler->handleDockIconClickEvent();
47 MacDockIconHandler::MacDockIconHandler() : QObject()
49 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
50 this->m_dockIconClickEventHandler = [[DockIconClickEventHandler alloc] initWithDockIconHandler:this];
52 this->m_dummyWidget = new QWidget();
53 this->m_dockMenu = new QMenu(this->m_dummyWidget);
54 qt_mac_set_dock_menu(this->m_dockMenu);
58 MacDockIconHandler::~MacDockIconHandler()
60 [this->m_dockIconClickEventHandler release];
61 delete this->m_dummyWidget;
64 QMenu *MacDockIconHandler::dockMenu()
66 return this->m_dockMenu;
69 void MacDockIconHandler::setIcon(const QIcon &icon)
71 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
74 image = [[NSImage imageNamed:@"NSApplicationIcon"] retain];
76 QSize size = icon.actualSize(QSize(128, 128));
77 QPixmap pixmap = icon.pixmap(size);
78 CGImageRef cgImage = pixmap.toMacCGImageRef();
79 image = [[NSImage alloc] initWithCGImage:cgImage size:NSZeroSize];
83 [NSApp setApplicationIconImage:image];
88 MacDockIconHandler *MacDockIconHandler::instance()
90 static MacDockIconHandler *s_instance = NULL;
92 s_instance = new MacDockIconHandler();
96 void MacDockIconHandler::handleDockIconClickEvent()
98 emit this->dockIconClicked();