osx: fix annoying focus behaviour (#689)

OS X has a global menu bar and a per app dock icon. Therefore, all
GUI applications launched from a terminal will become focused - even
if they don’t show any windows. Thereby the terminal loses focus.

Since is it very annoying to re-focus the terminal after each proxmark
client launch, this change makes the client unfocusable during launch
and restores the regular behaviour when a window is created.
This commit is contained in:
AntiCat 2018-10-08 07:20:21 +02:00 committed by pwpiwi
commit b742ab8cc3
4 changed files with 33 additions and 1 deletions

View file

@ -42,7 +42,7 @@ else
ifeq ($(platform),Darwin)
LUAPLATFORM = macosx
OBJCSRCS = util_darwin.m
LDFLAGS += -framework Foundation
LDFLAGS += -framework Foundation -framework AppKit
else
LUALIB += -ldl
LDLIBS += -ltermcap -lncurses

View file

@ -26,6 +26,10 @@
#include <string.h>
#include "proxgui.h"
#include <QtGui>
extern "C" {
#include "util_darwin.h"
}
//#include <ctime>
bool g_useOverlays = false;
@ -60,7 +64,12 @@ void ProxGuiQT::_ShowGraphWindow(void)
return;
if (!plotwidget)
{
#if defined(__MACH__) && defined(__APPLE__)
makeFocusable();
#endif
plotwidget = new ProxWidget();
}
plotwidget->show();
}
@ -108,6 +117,11 @@ void ProxGuiQT::MainLoop()
//start proxmark thread after starting event loop
QTimer::singleShot(200, this, SLOT(_StartProxmarkThread()));
#if defined(__MACH__) && defined(__APPLE__)
//Prevent the terminal from loosing focus during launch by making the client unfocusable
makeUnfocusable();
#endif
plotapp->exec();
}

View file

@ -14,4 +14,7 @@
void disableAppNap(const char* reason);
void enableAppNap();
void makeUnfocusable();
void makeFocusable();
#endif

View file

@ -12,6 +12,7 @@
#import <Foundation/NSString.h>
#import <Foundation/NSProcessInfo.h>
#import <AppKit/NSApplication.h>
static id activity = nil;
@ -38,3 +39,17 @@ void enableAppNap() {
void disableAppNap(const char* reason) { }
void enableAppNap() { }
#endif
//OS X Version 10.6 is defined in OS X 10.6 and later
#if defined(MAC_OS_X_VERSION_10_6)
void makeUnfocusable() {
[NSApp setActivationPolicy:NSApplicationActivationPolicyProhibited];
}
void makeFocusable() {
[NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
}
#else
void makeUnfocusable() { }
void makeFocusable() { }
#endif