mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2025-02-04 17:05:23 -05:00
Fix native hiding of macOS windows (#2583)
This commit is contained in:
parent
d6ce6b85d5
commit
f8c6c9f72c
@ -55,6 +55,7 @@ BrowserService::BrowserService(DatabaseTabWidget* parent)
|
|||||||
, m_dialogActive(false)
|
, m_dialogActive(false)
|
||||||
, m_bringToFrontRequested(false)
|
, m_bringToFrontRequested(false)
|
||||||
, m_wasMinimized(false)
|
, m_wasMinimized(false)
|
||||||
|
, m_wasHidden(false)
|
||||||
, m_keepassBrowserUUID(QUuid::fromRfc4122(QByteArray::fromHex("de887cc3036343b8974b5911b8816224")))
|
, m_keepassBrowserUUID(QUuid::fromRfc4122(QByteArray::fromHex("de887cc3036343b8974b5911b8816224")))
|
||||||
{
|
{
|
||||||
// Don't connect the signals when used from DatabaseSettingsWidgetBrowser (parent is nullptr)
|
// Don't connect the signals when used from DatabaseSettingsWidgetBrowser (parent is nullptr)
|
||||||
@ -96,7 +97,6 @@ bool BrowserService::openDatabase(bool triggerUnlock)
|
|||||||
|
|
||||||
if (triggerUnlock) {
|
if (triggerUnlock) {
|
||||||
m_bringToFrontRequested = true;
|
m_bringToFrontRequested = true;
|
||||||
m_wasMinimized = getMainWindow()->isMinimized();
|
|
||||||
raiseWindow(true);
|
raiseWindow(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -933,7 +933,11 @@ void BrowserService::hideWindow() const
|
|||||||
getMainWindow()->showMinimized();
|
getMainWindow()->showMinimized();
|
||||||
} else {
|
} else {
|
||||||
#ifdef Q_OS_MACOS
|
#ifdef Q_OS_MACOS
|
||||||
macUtils()->raiseLastActiveWindow();
|
if (m_wasHidden) {
|
||||||
|
macUtils()->hideOwnWindow();
|
||||||
|
} else {
|
||||||
|
macUtils()->raiseLastActiveWindow();
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
getMainWindow()->lower();
|
getMainWindow()->lower();
|
||||||
#endif
|
#endif
|
||||||
@ -944,6 +948,7 @@ void BrowserService::raiseWindow(const bool force)
|
|||||||
{
|
{
|
||||||
m_wasMinimized = getMainWindow()->isMinimized();
|
m_wasMinimized = getMainWindow()->isMinimized();
|
||||||
#ifdef Q_OS_MACOS
|
#ifdef Q_OS_MACOS
|
||||||
|
m_wasHidden = macUtils()->isHidden();
|
||||||
macUtils()->raiseOwnWindow();
|
macUtils()->raiseOwnWindow();
|
||||||
Tools::wait(500);
|
Tools::wait(500);
|
||||||
#else
|
#else
|
||||||
|
@ -125,6 +125,7 @@ private:
|
|||||||
bool m_dialogActive;
|
bool m_dialogActive;
|
||||||
bool m_bringToFrontRequested;
|
bool m_bringToFrontRequested;
|
||||||
bool m_wasMinimized;
|
bool m_wasMinimized;
|
||||||
|
bool m_wasHidden;
|
||||||
QUuid m_keepassBrowserUUID;
|
QUuid m_keepassBrowserUUID;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -33,6 +33,8 @@ public:
|
|||||||
pid_t activeProcessId();
|
pid_t activeProcessId();
|
||||||
pid_t ownProcessId();
|
pid_t ownProcessId();
|
||||||
bool activateProcess(pid_t pid);
|
bool activateProcess(pid_t pid);
|
||||||
|
bool hideProcess(pid_t pid);
|
||||||
|
bool isHidden(pid_t pid);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void *self;
|
void *self;
|
||||||
|
@ -28,5 +28,7 @@
|
|||||||
- (pid_t) activeProcessId;
|
- (pid_t) activeProcessId;
|
||||||
- (pid_t) ownProcessId;
|
- (pid_t) ownProcessId;
|
||||||
- (bool) activateProcess:(pid_t) pid;
|
- (bool) activateProcess:(pid_t) pid;
|
||||||
|
- (bool) hideProcess:(pid_t) pid;
|
||||||
|
- (bool) isHidden:(pid_t) pid;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -72,10 +72,27 @@ AppKit::~AppKit()
|
|||||||
- (bool) activateProcess:(pid_t) pid
|
- (bool) activateProcess:(pid_t) pid
|
||||||
{
|
{
|
||||||
NSRunningApplication *app = [NSRunningApplication runningApplicationWithProcessIdentifier:pid];
|
NSRunningApplication *app = [NSRunningApplication runningApplicationWithProcessIdentifier:pid];
|
||||||
|
|
||||||
return [app activateWithOptions:NSApplicationActivateIgnoringOtherApps];
|
return [app activateWithOptions:NSApplicationActivateIgnoringOtherApps];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Hide application by process id
|
||||||
|
//
|
||||||
|
- (bool) hideProcess:(pid_t) pid
|
||||||
|
{
|
||||||
|
NSRunningApplication *app = [NSRunningApplication runningApplicationWithProcessIdentifier:pid];
|
||||||
|
return [app hide];
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Get application hidden state by process id
|
||||||
|
//
|
||||||
|
- (bool) isHidden:(pid_t) pid
|
||||||
|
{
|
||||||
|
NSRunningApplication *app = [NSRunningApplication runningApplicationWithProcessIdentifier:pid];
|
||||||
|
return [app isHidden];
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// ------------------------- C++ Trampolines -------------------------
|
// ------------------------- C++ Trampolines -------------------------
|
||||||
//
|
//
|
||||||
@ -100,4 +117,14 @@ bool AppKit::activateProcess(pid_t pid)
|
|||||||
return [static_cast<id>(self) activateProcess:pid];
|
return [static_cast<id>(self) activateProcess:pid];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool AppKit::hideProcess(pid_t pid)
|
||||||
|
{
|
||||||
|
return [static_cast<id>(self) hideProcess:pid];
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AppKit::isHidden(pid_t pid)
|
||||||
|
{
|
||||||
|
return [static_cast<id>(self) isHidden:pid];
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -60,3 +60,13 @@ bool MacUtils::raiseLastActiveWindow()
|
|||||||
{
|
{
|
||||||
return m_appkit->activateProcess(m_appkit->lastActiveProcessId());
|
return m_appkit->activateProcess(m_appkit->lastActiveProcessId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool MacUtils::hideOwnWindow()
|
||||||
|
{
|
||||||
|
return m_appkit->hideProcess(m_appkit->ownProcessId());
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MacUtils::isHidden()
|
||||||
|
{
|
||||||
|
return m_appkit->isHidden(m_appkit->ownProcessId());
|
||||||
|
}
|
||||||
|
@ -35,6 +35,8 @@ public:
|
|||||||
bool raiseWindow(WId pid);
|
bool raiseWindow(WId pid);
|
||||||
bool raiseLastActiveWindow();
|
bool raiseLastActiveWindow();
|
||||||
bool raiseOwnWindow();
|
bool raiseOwnWindow();
|
||||||
|
bool hideOwnWindow();
|
||||||
|
bool isHidden();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit MacUtils(QObject* parent = nullptr);
|
explicit MacUtils(QObject* parent = nullptr);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user