summaryrefslogtreecommitdiff
path: root/plugins/VoiceService/src/popup.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/VoiceService/src/popup.cpp')
-rw-r--r--plugins/VoiceService/src/popup.cpp166
1 files changed, 48 insertions, 118 deletions
diff --git a/plugins/VoiceService/src/popup.cpp b/plugins/VoiceService/src/popup.cpp
index bac95b09e0..d165221339 100644
--- a/plugins/VoiceService/src/popup.cpp
+++ b/plugins/VoiceService/src/popup.cpp
@@ -19,63 +19,62 @@ Boston, MA 02111-1307, USA.
#include "stdafx.h"
-// Prototypes /////////////////////////////////////////////////////////////////////////////////////
-
-#define WMU_ACTION (WM_USER + 1)
-
-
-LRESULT CALLBACK PopupWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
-
-HWND hPopupWindow = NULL;
-
+// Handle to popup events
-static LRESULT CALLBACK PopupDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
-static LRESULT CALLBACK DumbPopupDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
+struct PopupAction
+{
+ PopupAction(void *_1, int _2) :
+ pCall((VoiceCall*)_1),
+ iAction(_2)
+ {}
+ VoiceCall *pCall;
+ int iAction;
+};
+static void CALLBACK ExecuteAction(void *param)
+{
+ auto *pParam = (PopupAction *)param;
-// Functions //////////////////////////////////////////////////////////////////////////////////////
+ if (pParam->iAction == POPUP_ACTION_OPENWINDOW)
+ ShowCallWindow(pParam->pCall);
+ delete pParam;
+}
-// Initializations needed by popups
-void InitPopups()
+static LRESULT CALLBACK PopupDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
- // window needed for popup commands
- hPopupWindow = CreateWindowEx(WS_EX_TOOLWINDOW, _T("static"), _T(MODULE_NAME) _T("_PopupWindow"),
- 0, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, HWND_DESKTOP,
- NULL, g_plugin.getInst(), NULL);
- SetWindowLongPtr(hPopupWindow, GWLP_WNDPROC, (LPARAM)PopupWndProc);
-}
+ switch (message) {
+ case WM_COMMAND:
+ CallFunctionAsync(ExecuteAction, new PopupAction(PUGetPluginData(hWnd), opts.popup_left_click_action));
+ if (opts.popup_left_click_action != POPUP_ACTION_DONOTHING)
+ PUDeletePopup(hWnd);
-// Deinitializations needed by popups
-void DeInitPopups()
-{
-}
+ return TRUE;
-void ShowPopup(MCONTACT hContact, const wchar_t *title, const wchar_t *description, ...)
-{
- if (!opts.popup_enable)
- return;
+ case WM_CONTEXTMENU:
+ CallFunctionAsync(ExecuteAction, new PopupAction(PUGetPluginData(hWnd), opts.popup_right_click_action));
+
+ if (opts.popup_right_click_action != POPUP_ACTION_DONOTHING)
+ PUDeletePopup(hWnd);
- wchar_t text[1024];
+ return TRUE;
- va_list va;
- va_start(va, description);
- _vsntprintf(text, _countof(text), description, va);
- va_end(va);
+ case UM_FREEPLUGINDATA:
+ return TRUE;
+ }
- ShowPopupEx(hContact, title, text, (void*)hContact, POPUP_TYPE_NORMAL, &opts);
+ return DefWindowProc(hWnd, message, wParam, lParam);
}
+/////////////////////////////////////////////////////////////////////////////////////////
// Show an popup
-void ShowPopupEx(MCONTACT hContact, const wchar_t *title, const wchar_t *description,
- void *plugin_data, int type, const Options *op)
+
+static void ShowPopupEx(MCONTACT hContact, const wchar_t *title, const wchar_t *description, void *plugin_data, int type, const Options *op)
{
// Make popup
POPUPDATAW ppd;
-
- ZeroMemory(&ppd, sizeof(ppd));
ppd.lchContact = hContact;
ppd.lchIcon = (HICON)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(174), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
@@ -88,21 +87,16 @@ void ShowPopupEx(MCONTACT hContact, const wchar_t *title, const wchar_t *descrip
wcsncpy_s(ppd.lpwzText, description, _TRUNCATE);
if (type == POPUP_TYPE_NORMAL || type == POPUP_TYPE_TEST) {
- if (op->popup_use_default_colors) {
- ppd.colorBack = 0;
- ppd.colorText = 0;
- }
- else if (op->popup_use_win_colors) {
+ if (op->popup_use_win_colors) {
ppd.colorBack = GetSysColor(COLOR_BTNFACE);
ppd.colorText = GetSysColor(COLOR_WINDOWTEXT);
}
- else {
+ else if (!op->popup_use_default_colors) {
ppd.colorBack = op->popup_bkg_color;
ppd.colorText = op->popup_text_color;
}
}
- else // if (type == POPUP_TYPE_ERROR)
- {
+ else { // if (type == POPUP_TYPE_ERROR)
ppd.colorBack = RGB(200, 0, 0);
ppd.colorText = RGB(255, 255, 255);
}
@@ -111,10 +105,6 @@ void ShowPopupEx(MCONTACT hContact, const wchar_t *title, const wchar_t *descrip
ppd.PluginWindowProc = PopupDlgProc;
ppd.PluginData = plugin_data;
}
- else // if (type == POPUP_TYPE_TEST || type == POPUP_TYPE_ERROR)
- {
- ppd.PluginWindowProc = DumbPopupDlgProc;
- }
if (type == POPUP_TYPE_NORMAL || type == POPUP_TYPE_TEST) {
switch (op->popup_delay_type) {
@@ -125,88 +115,28 @@ void ShowPopupEx(MCONTACT hContact, const wchar_t *title, const wchar_t *descrip
case POPUP_DELAY_PERMANENT:
ppd.iSeconds = -1;
break;
-
- //case POPUP_DELAY_DEFAULT:
- default:
- ppd.iSeconds = 0;
- break;
}
}
- else // if (type == POPUP_TYPE_ERROR)
- {
- ppd.iSeconds = 0;
- }
// Now that every field has been filled, we want to see the popup.
PUAddPopupW(&ppd);
}
-// Show an error popup
+// Show normal popup
+void ShowPopup(MCONTACT hContact, const wchar_t *title, const wchar_t *description, void *pUserData)
+{
+ ShowPopupEx(hContact, title, description, pUserData, POPUP_TYPE_NORMAL, &opts);
+}
+
+// Show error popup
void ShowErrPopup(const wchar_t *description, const wchar_t *title)
{
ShowPopupEx(NULL, title == NULL ? _T(MODULE_NAME) _T(" Error") : title, description,
NULL, POPUP_TYPE_ERROR, NULL);
}
+// Show test popup
void ShowTestPopup(const wchar_t *title, const wchar_t *description, const Options *op)
{
ShowPopupEx(NULL, title, description, NULL, POPUP_TYPE_TEST, op);
}
-
-// Handle to the hidden windows to handle actions for popup clicks
-// wParam has the number of MOTD in case of WMU_SHOW_MOTD_DETAILS
-LRESULT CALLBACK PopupWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
-{
- if (uMsg == WMU_ACTION) {
- // if (lParam == POPUP_ACTION_OPENHISTORY)
- // {
- // CallService(MS_HISTORY_SHOWCONTACTHISTORY, wParam, 0);
- // }
- }
- return DefWindowProc(hWnd, uMsg, wParam, lParam);
-}
-
-
-// Handle to popup events
-static LRESULT CALLBACK PopupDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
-{
- switch (message) {
- case WM_COMMAND:
- SendMessage(hPopupWindow, WMU_ACTION, (WPARAM)PUGetPluginData(hWnd), opts.popup_left_click_action);
-
- if (opts.popup_left_click_action != POPUP_ACTION_DONOTHING)
- PUDeletePopup(hWnd);
-
- return TRUE;
-
- case WM_CONTEXTMENU:
- SendMessage(hPopupWindow, WMU_ACTION, (WPARAM)PUGetPluginData(hWnd), opts.popup_right_click_action);
-
- if (opts.popup_right_click_action != POPUP_ACTION_DONOTHING)
- PUDeletePopup(hWnd);
-
- return TRUE;
-
- case UM_FREEPLUGINDATA:
- return TRUE;
- }
-
- return DefWindowProc(hWnd, message, wParam, lParam);
-}
-
-
-// Handle to popup events
-static LRESULT CALLBACK DumbPopupDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
-{
- switch (message) {
- case WM_COMMAND:
- case WM_CONTEXTMENU:
- PUDeletePopup(hWnd);
- return TRUE;
-
- case UM_FREEPLUGINDATA:
- return TRUE;
- }
-
- return DefWindowProc(hWnd, message, wParam, lParam);
-}