diff options
author | Wladimir J. van der Laan <laanwj@gmail.com> | 2011-10-15 08:33:10 -0700 |
---|---|---|
committer | Wladimir J. van der Laan <laanwj@gmail.com> | 2011-10-15 08:33:10 -0700 |
commit | b68a8a6b34c22f08478c042352209db0ff7fac60 (patch) | |
tree | 086eaa276ff3b7dc72fc72cb20317f92556c67ce /src/qt/macdockiconhandler.mm | |
parent | 755e2819b059d3e9d8148c4802c6f12e7af3fad5 (diff) | |
parent | d85f2458007ba8f7558220a99fe1dd03abd74307 (diff) | |
download | bitcoin-b68a8a6b34c22f08478c042352209db0ff7fac60.tar.xz |
Merge pull request #583 from laanwj/qt3
More Qt GUI updates
- Make USE_SSL qmake build flag actually work
- Improve mac experience, general UI improvements
- Add keyboard shortcut to switch between tabs
Diffstat (limited to 'src/qt/macdockiconhandler.mm')
-rw-r--r-- | src/qt/macdockiconhandler.mm | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/src/qt/macdockiconhandler.mm b/src/qt/macdockiconhandler.mm new file mode 100644 index 0000000000..df56e6949d --- /dev/null +++ b/src/qt/macdockiconhandler.mm @@ -0,0 +1,99 @@ + +#include "macdockiconhandler.h" + +#include <QtGui/QMenu> +#include <QtGui/QWidget> + +extern void qt_mac_set_dock_menu(QMenu*); + +#undef slots +#include <Cocoa/Cocoa.h> + +@interface DockIconClickEventHandler : NSObject +{ + MacDockIconHandler* dockIconHandler; +} + +@end + +@implementation DockIconClickEventHandler + +- (id)initWithDockIconHandler:(MacDockIconHandler *)aDockIconHandler +{ + self = [super init]; + if (self) { + dockIconHandler = aDockIconHandler; + + [[NSAppleEventManager sharedAppleEventManager] + setEventHandler:self + andSelector:@selector(handleDockClickEvent:withReplyEvent:) + forEventClass:kCoreEventClass + andEventID:kAEReopenApplication]; + } + return self; +} + +- (void)handleDockClickEvent:(NSAppleEventDescriptor*)event withReplyEvent:(NSAppleEventDescriptor*)replyEvent +{ + Q_UNUSED(event) + Q_UNUSED(replyEvent) + + if (dockIconHandler) + dockIconHandler->handleDockIconClickEvent(); +} + +@end + +MacDockIconHandler::MacDockIconHandler() : QObject() +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + this->m_dockIconClickEventHandler = [[DockIconClickEventHandler alloc] initWithDockIconHandler:this]; + + this->m_dummyWidget = new QWidget(); + this->m_dockMenu = new QMenu(this->m_dummyWidget); + qt_mac_set_dock_menu(this->m_dockMenu); + [pool release]; +} + +MacDockIconHandler::~MacDockIconHandler() +{ + [this->m_dockIconClickEventHandler release]; + delete this->m_dummyWidget; +} + +QMenu *MacDockIconHandler::dockMenu() +{ + return this->m_dockMenu; +} + +void MacDockIconHandler::setIcon(const QIcon &icon) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + NSImage *image; + if (icon.isNull()) + image = [[NSImage imageNamed:@"NSApplicationIcon"] retain]; + else { + QSize size = icon.actualSize(QSize(128, 128)); + QPixmap pixmap = icon.pixmap(size); + CGImageRef cgImage = pixmap.toMacCGImageRef(); + image = [[NSImage alloc] initWithCGImage:cgImage size:NSZeroSize]; + CFRelease(cgImage); + } + + [NSApp setApplicationIconImage:image]; + [image release]; + [pool release]; +} + +MacDockIconHandler *MacDockIconHandler::instance() +{ + static MacDockIconHandler *s_instance = NULL; + if (!s_instance) + s_instance = new MacDockIconHandler(); + return s_instance; +} + +void MacDockIconHandler::handleDockIconClickEvent() +{ + emit this->dockIconClicked(); +} |