diff options
Diffstat (limited to 'plugins/VoiceService/src/popup.cpp')
-rw-r--r-- | plugins/VoiceService/src/popup.cpp | 166 |
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); -} |