make notification come to front without stealing the focus, currently only on windows
This commit is contained in:
parent
c717150236
commit
c7f0e42a47
|
@ -27,23 +27,6 @@
|
||||||
|
|
||||||
using namespace Snore;
|
using namespace Snore;
|
||||||
|
|
||||||
void Utils::bringWindowToFront(qlonglong _wid, bool focus)
|
|
||||||
{
|
|
||||||
snoreDebug(SNORE_DEBUG) << _wid;
|
|
||||||
#ifdef Q_OS_WIN
|
|
||||||
HWND wid = (HWND)_wid;
|
|
||||||
int idActive = GetWindowThreadProcessId(GetForegroundWindow(), NULL);
|
|
||||||
bool attetched = AttachThreadInput(GetCurrentThreadId(), idActive, TRUE);
|
|
||||||
SetForegroundWindow(wid);
|
|
||||||
if (focus) {
|
|
||||||
SetFocus(wid);
|
|
||||||
}
|
|
||||||
if (attetched) {
|
|
||||||
AttachThreadInput(GetCurrentThreadId(), idActive, FALSE);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
Utils::Utils(QObject *parent):
|
Utils::Utils(QObject *parent):
|
||||||
QObject(parent)
|
QObject(parent)
|
||||||
{
|
{
|
||||||
|
@ -55,4 +38,42 @@ Utils::~Utils()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Utils::bringWindowToFront(qlonglong _wid, bool focus)
|
||||||
|
{
|
||||||
|
snoreDebug(SNORE_DEBUG) << _wid;
|
||||||
|
#ifdef Q_OS_WIN
|
||||||
|
HWND wid = (HWND)_wid;
|
||||||
|
int active = attatchToActiveProcess();
|
||||||
|
SetForegroundWindow(wid);
|
||||||
|
if (focus) {
|
||||||
|
SetFocus(wid);
|
||||||
|
}
|
||||||
|
detatchActiveProcess(active);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void Utils::raiseWindowToFront(qlonglong wid)
|
||||||
|
{
|
||||||
|
snoreDebug(SNORE_DEBUG) << wid;
|
||||||
|
#ifdef Q_OS_WIN
|
||||||
|
int active = attatchToActiveProcess();
|
||||||
|
SetWindowPos((HWND)wid, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE);
|
||||||
|
detatchActiveProcess(active);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef Q_OS_WIN
|
||||||
|
int Utils::attatchToActiveProcess()
|
||||||
|
{
|
||||||
|
int idActive = GetWindowThreadProcessId(GetForegroundWindow(), NULL);
|
||||||
|
return AttachThreadInput(GetCurrentThreadId(), idActive, TRUE) ? idActive : -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Utils::detatchActiveProcess(int idActive)
|
||||||
|
{
|
||||||
|
if (idActive!= -1) {
|
||||||
|
AttachThreadInput(GetCurrentThreadId(), idActive, FALSE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -33,13 +33,18 @@ public:
|
||||||
~Utils();
|
~Utils();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Raise a window to the front.
|
* Raise a window to the front and activates it.
|
||||||
* @param wid the Id of the window to raise.
|
* @param wid the Id of the window to raise.
|
||||||
* @param focus whether the window should request focus.
|
* @param focus whether the window should request focus.
|
||||||
*/
|
*/
|
||||||
//TODO: make Wid usable with the meta system and change signature.
|
//TODO: make Wid usable with the meta system and change signature.
|
||||||
Q_INVOKABLE static void bringWindowToFront(qlonglong wid, bool focus);
|
Q_INVOKABLE static void bringWindowToFront(qlonglong wid, bool focus);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Raised the Window to front and don't make it active or steal focus.
|
||||||
|
*/
|
||||||
|
Q_INVOKABLE static void raiseWindowToFront(qlonglong wid);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param string A string to decode if needed.
|
* @param string A string to decode if needed.
|
||||||
|
@ -76,6 +81,12 @@ public:
|
||||||
return QCryptographicHash::hash(data, QCryptographicHash::Md5).toHex();
|
return QCryptographicHash::hash(data, QCryptographicHash::Md5).toHex();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
#ifdef Q_OS_WIN
|
||||||
|
static int attatchToActiveProcess();
|
||||||
|
static void detatchActiveProcess(int idActive);
|
||||||
|
#endif
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,7 +45,7 @@ Rectangle {
|
||||||
|
|
||||||
animation.start()
|
animation.start()
|
||||||
window.visible = true
|
window.visible = true
|
||||||
utils.bringWindowToFront(window.wid, false)
|
utils.raiseWindowToFront(window.wid)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -91,5 +91,5 @@ void Toasty::slotNotify(Notification notification)
|
||||||
|
|
||||||
PluginSettingsWidget *Toasty::settingsWidget()
|
PluginSettingsWidget *Toasty::settingsWidget()
|
||||||
{
|
{
|
||||||
return new NotifyMyAndroidSettings(this);
|
return new ToastySettings(this);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue