mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-06-06 21:58:57 -04:00
Bring the main window to foreground when receiving a link from the browser (Windows only).
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@5012 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
523d0c0865
commit
499003d875
1 changed files with 62 additions and 0 deletions
|
@ -27,6 +27,7 @@
|
||||||
#include <retroshare/rsinit.h>
|
#include <retroshare/rsinit.h>
|
||||||
|
|
||||||
#include "EventReceiver.h"
|
#include "EventReceiver.h"
|
||||||
|
#include "gui/MainWindow.h"
|
||||||
#include "gui/RetroShareLink.h"
|
#include "gui/RetroShareLink.h"
|
||||||
|
|
||||||
#ifdef WINDOWS_SYS
|
#ifdef WINDOWS_SYS
|
||||||
|
@ -162,10 +163,71 @@ bool EventReceiver::winEvent(MSG* message, long* result)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef WINDOWS_SYS
|
||||||
|
//void SetForegroundWindowInternal(HWND hWnd)
|
||||||
|
//{
|
||||||
|
// if (!::IsWindow(hWnd)) return;
|
||||||
|
|
||||||
|
// // relation time of SetForegroundWindow lock
|
||||||
|
// DWORD lockTimeOut = 0;
|
||||||
|
// HWND hCurrWnd = ::GetForegroundWindow();
|
||||||
|
// DWORD dwThisTID = ::GetCurrentThreadId(),
|
||||||
|
// dwCurrTID = ::GetWindowThreadProcessId(hCurrWnd,0);
|
||||||
|
|
||||||
|
// // we need to bypass some limitations from Microsoft :)
|
||||||
|
// if (dwThisTID != dwCurrTID) {
|
||||||
|
// ::AttachThreadInput(dwThisTID, dwCurrTID, TRUE);
|
||||||
|
|
||||||
|
// ::SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT,0,&lockTimeOut,0);
|
||||||
|
// ::SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT,0,0,SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE);
|
||||||
|
|
||||||
|
// ::AllowSetForegroundWindow(ASFW_ANY);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// ::SetForegroundWindow(hWnd);
|
||||||
|
|
||||||
|
// if(dwThisTID != dwCurrTID) {
|
||||||
|
// ::SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT,0,(PVOID)lockTimeOut,SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE);
|
||||||
|
// ::AttachThreadInput(dwThisTID, dwCurrTID, FALSE);
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
|
void SetForegroundWindowInternal(HWND hWnd)
|
||||||
|
{
|
||||||
|
if (!::IsWindow(hWnd)) return;
|
||||||
|
|
||||||
|
BYTE keyState[256] = {0};
|
||||||
|
// to unlock SetForegroundWindow we need to imitate Alt pressing
|
||||||
|
if (::GetKeyboardState((LPBYTE)&keyState)) {
|
||||||
|
if(!(keyState[VK_MENU] & 0x80)) {
|
||||||
|
::keybd_event(VK_MENU, 0, KEYEVENTF_EXTENDEDKEY | 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
::SetForegroundWindow(hWnd);
|
||||||
|
|
||||||
|
if (::GetKeyboardState((LPBYTE)&keyState)) {
|
||||||
|
if(!(keyState[VK_MENU] & 0x80)) {
|
||||||
|
::keybd_event(VK_MENU, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void EventReceiver::received(const QString &url)
|
void EventReceiver::received(const QString &url)
|
||||||
{
|
{
|
||||||
RetroShareLink link(url);
|
RetroShareLink link(url);
|
||||||
if (link.valid()) {
|
if (link.valid()) {
|
||||||
|
MainWindow *window = MainWindow::getInstance();
|
||||||
|
if (window) {
|
||||||
|
window->show();
|
||||||
|
window->raise();
|
||||||
|
|
||||||
|
#ifdef WINDOWS_SYS
|
||||||
|
SetForegroundWindowInternal(window->winId());
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
emit linkReceived(link.toUrl());
|
emit linkReceived(link.toUrl());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue