Skip to content

Commit

Permalink
Remove obj_c for macOS Dock icon menu
Browse files Browse the repository at this point in the history
Qt `setAsDockMenu()` does this work.
  • Loading branch information
hebasto committed Nov 4, 2018
1 parent 2464925 commit 6b1d297
Show file tree
Hide file tree
Showing 3 changed files with 4 additions and 36 deletions.
4 changes: 3 additions & 1 deletion src/qt/bitcoingui.cpp
Expand Up @@ -607,7 +607,9 @@ void BitcoinGUI::createTrayIconMenu()
// Note: On macOS, the Dock icon is used to provide the tray's functionality.
MacDockIconHandler *dockIconHandler = MacDockIconHandler::instance();
connect(dockIconHandler, &MacDockIconHandler::dockIconClicked, this, &BitcoinGUI::macosDockIconActivated);
trayIconMenu = dockIconHandler->dockMenu();

trayIconMenu = new QMenu(this);
trayIconMenu->setAsDockMenu();
#endif

// Configuration of the tray icon (or Dock icon) menu
Expand Down
11 changes: 0 additions & 11 deletions src/qt/macdockiconhandler.h
Expand Up @@ -7,21 +7,13 @@

#include <QObject>

QT_BEGIN_NAMESPACE
class QMenu;
class QWidget;
QT_END_NAMESPACE

/** macOS-specific Dock icon handler.
*/
class MacDockIconHandler : public QObject
{
Q_OBJECT

public:
~MacDockIconHandler();

QMenu *dockMenu();
static MacDockIconHandler *instance();
static void cleanup();

Expand All @@ -30,9 +22,6 @@ class MacDockIconHandler : public QObject

private:
MacDockIconHandler();

QWidget *m_dummyWidget;
QMenu *m_dockMenu;
};

#endif // BITCOIN_QT_MACDOCKICONHANDLER_H
25 changes: 1 addition & 24 deletions src/qt/macdockiconhandler.mm
Expand Up @@ -4,17 +4,13 @@

#include "macdockiconhandler.h"

#include <QMenu>
#include <QWidget>

#undef slots
#include <Cocoa/Cocoa.h>
#include <objc/objc.h>
#include <objc/message.h>

static MacDockIconHandler *s_instance = nullptr;

bool dockClickHandler(id self,SEL _cmd,...) {
bool dockClickHandler(id self, SEL _cmd, ...) {
Q_UNUSED(self)
Q_UNUSED(_cmd)

Expand All @@ -32,28 +28,9 @@ void setupDockClickHandler() {
class_replaceMethod(delClass, shouldHandle, (IMP)dockClickHandler, "B@:");
}


MacDockIconHandler::MacDockIconHandler() : QObject()
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

setupDockClickHandler();
this->m_dummyWidget = new QWidget();
this->m_dockMenu = new QMenu(this->m_dummyWidget);
#if QT_VERSION >= 0x050200
this->m_dockMenu->setAsDockMenu();
#endif
[pool release];
}

MacDockIconHandler::~MacDockIconHandler()
{
delete this->m_dummyWidget;
}

QMenu *MacDockIconHandler::dockMenu()
{
return this->m_dockMenu;
}

MacDockIconHandler *MacDockIconHandler::instance()
Expand Down

0 comments on commit 6b1d297

Please sign in to comment.