From 5beda0ab87e69d41f713644e7667e88979537d38 Mon Sep 17 00:00:00 2001 From: Adam Johnson Date: Tue, 20 Mar 2012 00:00:39 -0400 Subject: [PATCH] Implement client window flashing This will be used in python to grab the player's attention on PMs or other interesting events. --- Sources/Plasma/Apps/plClient/plClient.cpp | 16 ++++++++++++++++ Sources/Plasma/Apps/plClient/plClient.h | 1 + Sources/Plasma/FeatureLib/pfPython/cyMisc.cpp | 7 +++++++ Sources/Plasma/FeatureLib/pfPython/cyMisc.h | 9 +++++++++ .../Plasma/FeatureLib/pfPython/cyMiscGlue.cpp | 4 ++++ .../Plasma/NucleusLib/pnMessage/plClientMsg.h | 2 ++ 6 files changed, 39 insertions(+) diff --git a/Sources/Plasma/Apps/plClient/plClient.cpp b/Sources/Plasma/Apps/plClient/plClient.cpp index f95701b1..d4bbe01c 100644 --- a/Sources/Plasma/Apps/plClient/plClient.cpp +++ b/Sources/Plasma/Apps/plClient/plClient.cpp @@ -772,6 +772,11 @@ hsBool plClient::MsgReceive(plMessage* msg) } break; + case plClientMsg::kFlashWindow: + { + FlashWindow(); + } + break; } return true; } @@ -2437,6 +2442,17 @@ void plClient::WindowActivate(bool active) fWindowActive = active; } +void plClient::FlashWindow() +{ +#ifdef HS_BUILD_FOR_WIN32 + FLASHWINFO info; + info.cbSize = sizeof(info); + info.dwFlags = FLASHW_TIMERNOFG | FLASHW_ALL; + info.hwnd = fWindowHndl; + info.uCount = -1; + FlashWindowEx(&info); +#endif +} //============================================================================ void plClient::IOnAsyncInitComplete () { diff --git a/Sources/Plasma/Apps/plClient/plClient.h b/Sources/Plasma/Apps/plClient/plClient.h index 0def1745..b529f5bf 100644 --- a/Sources/Plasma/Apps/plClient/plClient.h +++ b/Sources/Plasma/Apps/plClient/plClient.h @@ -290,6 +290,7 @@ public: virtual void WindowActivate(bool active); virtual hsBool WindowActive() const { return fWindowActive; } + void FlashWindow(); void SetMessagePumpProc( plMessagePumpProc proc ) { fMessagePumpProc = proc; } void ResetDisplayDevice(int Width, int Height, int ColorDepth, hsBool Windowed, int NumAASamples, int MaxAnisotropicSamples, hsBool VSync = false); void ResizeDisplayDevice(int Width, int Height, hsBool Windowed); diff --git a/Sources/Plasma/FeatureLib/pfPython/cyMisc.cpp b/Sources/Plasma/FeatureLib/pfPython/cyMisc.cpp index 257a52d6..4da2e109 100644 --- a/Sources/Plasma/FeatureLib/pfPython/cyMisc.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/cyMisc.cpp @@ -721,6 +721,13 @@ void cyMisc::ExcludeRegionSetNow(pyKey& sender, pyKey& exKey, uint16_t state) plgDispatch::MsgSend( msg ); // whoosh... off it goes } +void cyMisc::FlashWindow() +{ + plKey clientKey = hsgResMgr::ResMgr()->FindKey(kClient_KEY); + plClientMsg* pMsg = new plClientMsg(plClientMsg::kFlashWindow); + pMsg->Send(clientKey); // whoosh... off it goes +} + #include "hsTimer.h" ///////////////////////////////////////////////////////////////////////////// // diff --git a/Sources/Plasma/FeatureLib/pfPython/cyMisc.h b/Sources/Plasma/FeatureLib/pfPython/cyMisc.h index 2d1c25f6..4cc5385d 100644 --- a/Sources/Plasma/FeatureLib/pfPython/cyMisc.h +++ b/Sources/Plasma/FeatureLib/pfPython/cyMisc.h @@ -244,6 +244,15 @@ public: // static hsBool WasLocallyNotified(pyKey &selfkey); + ///////////////////////////////////////////////////////////////////////////// + // + // Function : FlashWindow + // PARAMETERS : + // + // PURPOSE : Flashes the client window if it is not focused + // + static void FlashWindow(); + ///////////////////////////////////////////////////////////////////////////// // // Function : GetClientName diff --git a/Sources/Plasma/FeatureLib/pfPython/cyMiscGlue.cpp b/Sources/Plasma/FeatureLib/pfPython/cyMiscGlue.cpp index 57740e98..9f7ff0c8 100644 --- a/Sources/Plasma/FeatureLib/pfPython/cyMiscGlue.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/cyMiscGlue.cpp @@ -48,6 +48,8 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com #include +PYTHON_BASIC_GLOBAL_METHOD_DEFINITION(PtFlashWindow, cyMisc::FlashWindow, "Flashes the client window if it is not focused"); + PYTHON_GLOBAL_METHOD_DEFINITION_NOARGS(PtGetAgeName, "DEPRECIATED - use ptDniInfoSource instead") { return PyString_FromString(cyMisc::GetAgeName()); @@ -514,6 +516,8 @@ PYTHON_GLOBAL_METHOD_DEFINITION(PtDumpLogs, args, "Params: folder\nDumps all cur void cyMisc::AddPlasmaMethods(std::vector &methods) { + PYTHON_GLOBAL_METHOD_NOARGS(methods, PtFlashWindow); + PYTHON_GLOBAL_METHOD_NOARGS(methods, PtGetAgeName); PYTHON_GLOBAL_METHOD_NOARGS(methods, PtGetAgeInfo); PYTHON_GLOBAL_METHOD_NOARGS(methods, PtGetAgeTime); diff --git a/Sources/Plasma/NucleusLib/pnMessage/plClientMsg.h b/Sources/Plasma/NucleusLib/pnMessage/plClientMsg.h index b4932694..196a09cc 100644 --- a/Sources/Plasma/NucleusLib/pnMessage/plClientMsg.h +++ b/Sources/Plasma/NucleusLib/pnMessage/plClientMsg.h @@ -94,6 +94,8 @@ public: kEnableRenderScene, kResetGraphicsDevice, kSetGraphicsDefaults, + + kFlashWindow, }; // graphics settings fields