summaryrefslogtreecommitdiff
path: root/plugins/BossKeyPlus
diff options
context:
space:
mode:
authorSergey Tatarinov <tatarinov.sergey@gmail.com>2013-11-24 16:35:46 +0000
committerSergey Tatarinov <tatarinov.sergey@gmail.com>2013-11-24 16:35:46 +0000
commit26c78a6a63f3fd7bc2f3179df04615ebbd49eb8f (patch)
tree3786ed8c6a170895b673512673dab367037db7a5 /plugins/BossKeyPlus
parentaf9645a55cc6b338602cae3513433b953527157b (diff)
BossKey: Some cleanup
git-svn-id: http://svn.miranda-ng.org/main/trunk@6975 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'plugins/BossKeyPlus')
-rw-r--r--plugins/BossKeyPlus/src/BossKey.cpp197
-rw-r--r--plugins/BossKeyPlus/src/BossKey.h8
2 files changed, 80 insertions, 125 deletions
diff --git a/plugins/BossKeyPlus/src/BossKey.cpp b/plugins/BossKeyPlus/src/BossKey.cpp
index 100cc2df66..15c0b1b480 100644
--- a/plugins/BossKeyPlus/src/BossKey.cpp
+++ b/plugins/BossKeyPlus/src/BossKey.cpp
@@ -19,35 +19,24 @@
#include "BossKey.h"
-// multiple instances support:
-// when hotkey is hit, handler notifies all listen windows
-//#pragma data_seg("Shared") // Shared data segment
-// these must be shared, since they're called by the hook (The hook is global and called from the context of each process)
-//HHOOK g_hKeyHook = NULL; // shared
-// this isn't referenced by hook, but should be shared to keep a reference count of multiple instances
-//WORD g_wRefCount = 0; // reference count. when this is 0 on init, the hook is created. when this is 0 on destruction, the hook is destroyed.
-//#pragma data_seg() // end of shared data segment
-
-// unique to this DLL, not to be shared
HINSTANCE g_hInstance;
CLIST_INTERFACE *pcli;
HGENMENU g_hMenuItem;
-HANDLE g_hHideService, g_hIsHiddenService;
+HANDLE g_hHideService;
HWINEVENTHOOK g_hWinHook;
-HWND g_hListenWindow, hDlg, g_hDlgPass, hOldForegroundWindow;
+HWND g_hListenWindow, g_hDlgPass, hOldForegroundWindow;
HWND_ITEM *g_pMirWnds; // a pretty simple linked list
HMODULE hDwmApi;
DWORD g_dwMirandaPID;
WORD g_wMask, g_wMaskAdv;
-bool g_bWindowHidden, g_fKeyPressed, g_fPassRequested, g_TrayIcon;
+bool g_bWindowHidden, g_fPassRequested, g_TrayIcon;
char g_password[MAXPASSLEN + 1];
HKL oldLangID, oldLayout;
-int protoCount;
+int protoCount, hLangpack;
PROTOACCOUNT **proto;
unsigned *oldStatus;
TCHAR **oldStatusMsg;
BYTE g_bOldSetting;
-int hLangpack;
PFNDwmIsCompositionEnabled dwmIsCompositionEnabled;
@@ -89,52 +78,46 @@ INT_PTR CALLBACK DlgStdInProc(HWND hDlg, UINT uMsg,WPARAM wParam,LPARAM lParam)
static DWORD dwOldIcon = 0;
HICON hIcon = 0;
- switch(uMsg)
- {
+ switch(uMsg){
case WM_INITDIALOG:
- {
- g_hDlgPass = hDlg;
- hIcon = LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_DLGPASSWD));
- dwOldIcon = SetClassLongPtr(hDlg, GCLP_HICON, (LONG)hIcon); // set alt+tab icon
- SendDlgItemMessage(hDlg,IDC_EDIT1,EM_LIMITTEXT,MAXPASSLEN,0);
+ g_hDlgPass = hDlg;
+ hIcon = LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_DLGPASSWD));
+ dwOldIcon = SetClassLongPtr(hDlg, GCLP_HICON, (LONG)hIcon); // set alt+tab icon
+ SendDlgItemMessage(hDlg,IDC_EDIT1,EM_LIMITTEXT,MAXPASSLEN,0);
- if (IsAeroMode())
- {
- SetWindowLongPtr(hDlg, GWL_STYLE, GetWindowLongPtr(hDlg, GWL_STYLE) | WS_DLGFRAME | WS_SYSMENU);
- SetWindowLongPtr(hDlg, GWL_EXSTYLE, GetWindowLongPtr(hDlg, GWL_EXSTYLE) | WS_EX_TOOLWINDOW);
- RECT rect;
- GetClientRect(hDlg, &rect);
- SetWindowPos(hDlg, 0, 0, 0, rect.right, rect.bottom + GetSystemMetrics(SM_CYCAPTION) + GetSystemMetrics(SM_CXSIZEFRAME), SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOZORDER);
- }
- SendDlgItemMessage(hDlg, IDC_HEADERBAR, WM_SETICON, 0, (LPARAM)hIcon);
- SetDlgItemText(hDlg, IDC_HEADERBAR, TranslateT("Miranda NG is locked.\nEnter password to unlock it."));
-
- TranslateDialogDefault(hDlg);
- oldLangID = 0;
- SetTimer(hDlg,1,200,NULL);
-
- oldLayout = GetKeyboardLayout(0);
- if (MAKELCID((WORD)oldLayout & 0xffffffff, SORT_DEFAULT) != (LCID)0x00000409)
- ActivateKeyboardLayout((HKL)0x00000409, 0);
- LanguageChanged(hDlg);
- return TRUE;
+ if (IsAeroMode())
+ {
+ SetWindowLongPtr(hDlg, GWL_STYLE, GetWindowLongPtr(hDlg, GWL_STYLE) | WS_DLGFRAME | WS_SYSMENU);
+ SetWindowLongPtr(hDlg, GWL_EXSTYLE, GetWindowLongPtr(hDlg, GWL_EXSTYLE) | WS_EX_TOOLWINDOW);
+ RECT rect;
+ GetClientRect(hDlg, &rect);
+ SetWindowPos(hDlg, 0, 0, 0, rect.right, rect.bottom + GetSystemMetrics(SM_CYCAPTION), SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOZORDER);
}
+ SendDlgItemMessage(hDlg, IDC_HEADERBAR, WM_SETICON, 0, (LPARAM)hIcon);
+ SetDlgItemText(hDlg, IDC_HEADERBAR, TranslateT("Miranda NG is locked.\nEnter password to unlock it."));
+
+ TranslateDialogDefault(hDlg);
+ oldLangID = 0;
+ SetTimer(hDlg,1,200,NULL);
+
+ oldLayout = GetKeyboardLayout(0);
+ if (MAKELCID((WORD)oldLayout & 0xffffffff, SORT_DEFAULT) != (LCID)0x00000409)
+ ActivateKeyboardLayout((HKL)0x00000409, 0);
+ LanguageChanged(hDlg);
+ return TRUE;
case WM_CTLCOLORSTATIC:
- {
- if (GetWindowLongPtr((HWND)lParam, GWLP_ID) == IDC_LANG)
- {
- SetTextColor((HDC)wParam, GetSysColor(COLOR_HIGHLIGHTTEXT));
- SetBkMode((HDC)wParam, TRANSPARENT);
- return (INT_PTR)GetSysColorBrush(COLOR_HIGHLIGHT);
- }
- return FALSE;
- }
+ if (GetWindowLongPtr((HWND)lParam, GWLP_ID) != IDC_LANG)
+ break;
+
+ SetTextColor((HDC)wParam, GetSysColor(COLOR_HIGHLIGHTTEXT));
+ SetBkMode((HDC)wParam, TRANSPARENT);
+ return (INT_PTR)GetSysColorBrush(COLOR_HIGHLIGHT);
case WM_COMMAND:
{
UINT uid = LOWORD(wParam);
- if(uid == IDOK){
+ if (uid == IDOK){
char password[MAXPASSLEN + 1] = {0};
int passlen = GetDlgItemTextA(hDlg,IDC_EDIT1,password,MAXPASSLEN+1);
@@ -142,34 +125,32 @@ INT_PTR CALLBACK DlgStdInProc(HWND hDlg, UINT uMsg,WPARAM wParam,LPARAM lParam)
{
SetDlgItemText(hDlg, IDC_HEADERBAR, TranslateT("Miranda NG is locked.\nEnter password to unlock it."));
SendDlgItemMessage(hDlg, IDC_HEADERBAR, WM_NCPAINT, 0, 0);
+ break;
}
else if (lstrcmpA(password, g_password))
{
SetDlgItemText(hDlg, IDC_HEADERBAR, TranslateT("Password is not correct!\nPlease, enter correct password."));
SendDlgItemMessage(hDlg, IDC_HEADERBAR, WM_NCPAINT, 0, 0);
SetDlgItemText(hDlg, IDC_EDIT1, _T(""));
+ break;
}
- else EndDialog(hDlg,IDOK);
-
- }else if (uid == IDCANCEL)
- EndDialog(hDlg,IDCANCEL);
+ else EndDialog(hDlg, IDOK);
+ }
+ else if (uid == IDCANCEL)
+ EndDialog(hDlg, IDCANCEL);
}
case WM_TIMER:
- {
- LanguageChanged(hDlg);
- return FALSE;
- }
- case WM_DESTROY:
- {
- KillTimer(hDlg, 1);
- if (GetKeyboardLayout(0) != oldLayout)
- ActivateKeyboardLayout(oldLayout, 0);
- SetClassLongPtr(hDlg, GCLP_HICON, (long)dwOldIcon);
- DestroyIcon(hIcon);
- return FALSE;
- }
+ LanguageChanged(hDlg);
+ break;
+ case WM_DESTROY:
+ KillTimer(hDlg, 1);
+ if (GetKeyboardLayout(0) != oldLayout)
+ ActivateKeyboardLayout(oldLayout, 0);
+ SetClassLongPtr(hDlg, GCLP_HICON, (long)dwOldIcon);
+ DestroyIcon(hIcon);
+ break;
}
return FALSE;
}
@@ -330,23 +311,18 @@ static void RestoreOldSettings(void)
LRESULT CALLBACK ListenWndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
- switch (uMsg)
- {
- case WM_WTSSESSION_CHANGE:
- {
- if (wParam == WTS_SESSION_LOCK && g_wMaskAdv & OPT_HIDEIFLOCK && !g_bWindowHidden) // Windows locked
- PostMessage(hWnd,WM_USER + 40, 0, 0);
- return 0;
- }break;
-
- case WM_USER + 24:
- {
- if (lParam == WM_LBUTTONDBLCLK)
- PostMessage(hWnd,WM_USER + 52, 0, 0);
- return 0;
- }break;
-
- case WM_USER+40: // hide
+ switch (uMsg){
+ case WM_WTSSESSION_CHANGE:
+ if (wParam == WTS_SESSION_LOCK && g_wMaskAdv & OPT_HIDEIFLOCK && !g_bWindowHidden) // Windows locked
+ PostMessage(hWnd,WM_USER + 40, 0, 0);
+ return 0;
+
+ case WM_USER + 24:
+ if (lParam == WM_LBUTTONDBLCLK)
+ PostMessage(hWnd,WM_USER + 52, 0, 0);
+ return 0;
+
+ case WM_USER+40: // hide
{
if (g_bWindowHidden || g_fOptionsOpen) // already hidden or in options, no hiding
break;
@@ -368,8 +344,7 @@ LRESULT CALLBACK ListenWndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
TCHAR *ptszDefMsg = GetDefStatusMsg(uMode, 0);
ChangeAllProtoStatuses(uMode, ptszDefMsg);
- if(ptszDefMsg)
- mir_free(ptszDefMsg);
+ mir_free(ptszDefMsg);
}
else
{
@@ -377,8 +352,7 @@ LRESULT CALLBACK ListenWndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
TCHAR *ptszParsed = variables_parse(dbVar.ptszVal, 0, 0);
ChangeAllProtoStatuses(uMode, ptszParsed);
- if (ptszParsed)
- mir_free(ptszParsed);
+ mir_free(ptszParsed);
}
else
ChangeAllProtoStatuses(uMode, dbVar.ptszVal);
@@ -412,16 +386,17 @@ LRESULT CALLBACK ListenWndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
g_bOldSetting |= OLD_WASHIDDEN;
db_set_b(NULL, MOD_NAME, "OldSetting", g_bOldSetting);
- return 0;
- } break;
- case WM_USER+52: // back
+ }
+ return 0;
+
+ case WM_USER+52: // back
{
if (!g_bWindowHidden || g_fPassRequested)
break;
if (g_wMask & OPT_REQPASS){ //password request
- DBVARIANT dbVar = {0};
- if (!db_get_s(NULL,MOD_NAME,"password",&dbVar)) {
+ DBVARIANT dbVar;
+ if (!db_get_s(NULL,MOD_NAME, "password", &dbVar)) {
g_fPassRequested = true;
strncpy(g_password, dbVar.pszVal, MAXPASSLEN);
@@ -445,9 +420,7 @@ LRESULT CALLBACK ListenWndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
GetClassName(pCurWnd->hWnd,szTemp,32);
if (IsWindow(pCurWnd->hWnd) && lstrcmp(szTemp,_T("SysShadow")) != 0) // precaution
- {
ShowWindow(pCurWnd->hWnd, SW_SHOW);
- }
delete pCurWnd; // bye-bye
pCurWnd = pNextWnd; // traverse to next item
@@ -465,7 +438,7 @@ LRESULT CALLBACK ListenWndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
if (g_TrayIcon) CreateTrayIcon(false);
pcli->pfnInitTray();
- pcli->pfnTrayIconInit(pcli->hwndContactList); //this restores the icons without memory leaks :)
+ pcli->pfnTrayIconInit(pcli->hwndContactList);
// force a redraw
// should prevent drawing problems
@@ -476,11 +449,10 @@ LRESULT CALLBACK ListenWndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
g_bWindowHidden = false;
db_set_b(NULL, MOD_NAME, "OldSetting", 0);
- return 0;
- } break;
- default:break;
+ }
+ return 0;
}
- return(DefWindowProc(hWnd,uMsg,wParam,lParam));
+ return(DefWindowProc(hWnd, uMsg, wParam, lParam));
}
static int MsgWinOpening(WPARAM, LPARAM) // hiding new message windows
@@ -495,9 +467,9 @@ VOID CALLBACK WinEventProc(HWINEVENTHOOK g_hWinHook, DWORD event, HWND hwnd, LON
if (g_bWindowHidden && idObject == OBJID_WINDOW && (event == EVENT_OBJECT_CREATE || event == EVENT_OBJECT_SHOW) && (IsWindowVisible(hwnd)))
{
if(hwnd == pcli->hwndContactList)
- ShowWindow(hwnd,SW_HIDE);
+ ShowWindow(hwnd, SW_HIDE);
else
- EnumWindows(EnumWindowsProc,0);
+ EnumWindows(EnumWindowsProc, 0);
}
}
@@ -546,7 +518,7 @@ static TCHAR *HokeyVkToName(WORD vkKey)
static TCHAR *GetBossKeyText(void)
{
- WORD wHotKey = db_get_w(NULL,"SkinHotKeys","Hide/Show Miranda",HOTKEYCODE(HOTKEYF_CONTROL, VK_F12));
+ WORD wHotKey = db_get_w(NULL,"SkinHotKeys", "Hide/Show Miranda", HOTKEYCODE(HOTKEYF_CONTROL, VK_F12));
BYTE key = LOBYTE(wHotKey);
BYTE shift = HIBYTE(wHotKey);
@@ -616,7 +588,7 @@ void RegisterCoreHotKeys (void)
Hotkey_Register(&hotkey);
}
-static int ModernToolbarInit(WPARAM, LPARAM) // Modern toolbar support
+static int TopToolbarInit(WPARAM, LPARAM)
{
TTBButton ttb = { sizeof(ttb) };
ttb.pszService = MS_BOSSKEY_HIDE;
@@ -687,7 +659,7 @@ int MirandaLoaded(WPARAM,LPARAM)
g_hWinHook = SetWinEventHook(EVENT_OBJECT_CREATE, EVENT_OBJECT_SHOW, NULL, WinEventProc, GetCurrentProcessId(), 0, 0);
- HookEvent(ME_TTB_MODULELOADED, ModernToolbarInit);
+ HookEvent(ME_TTB_MODULELOADED, TopToolbarInit);
HookEvent(ME_OPT_INITIALISE, OptsDlgInit);
HookEvent(ME_MSG_WINDOWEVENT, MsgWinOpening);
HookEvent(ME_PROTO_ACCLISTCHANGED, EnumProtos);
@@ -696,13 +668,6 @@ int MirandaLoaded(WPARAM,LPARAM)
GetWindowThreadProcessId(pcli->hwndContactList, &g_dwMirandaPID);
- // let's create our secret window
- // this is a cheap, cheap hack...
- // needed because of the hook, that gives problems
- // if the calls aren't made from this context, they won't work
- // using the window is a workaround to make this process do its work :)
- // see notes
-
WNDCLASS winclass = {0};
winclass.lpfnWndProc = ListenWndProc;
winclass.hInstance = g_hInstance;
@@ -787,8 +752,6 @@ extern "C" int __declspec(dllexport) Unload(void)
UnhookWinEvent(g_hWinHook);
DestroyServiceFunction(g_hHideService);
- if (g_hIsHiddenService)
- DestroyServiceFunction(g_hIsHiddenService);
if (g_hListenWindow)
{
@@ -807,9 +770,7 @@ extern "C" int __declspec(dllexport) Unload(void)
delete pTemp;
pTemp = pNext;
}
- g_pMirWnds = NULL; // safety
- // free memory
delete[] oldStatus;
delete[] oldStatusMsg;
diff --git a/plugins/BossKeyPlus/src/BossKey.h b/plugins/BossKeyPlus/src/BossKey.h
index 2198c35bd7..3e44dcbbb9 100644
--- a/plugins/BossKeyPlus/src/BossKey.h
+++ b/plugins/BossKeyPlus/src/BossKey.h
@@ -81,14 +81,9 @@
#define MS_BOSSKEY_HIDE "BossKey/HideMiranda"
#define MS_BOSSKEY_ISMIRANDAHIDDEN "BossKey/IsMirandaHidden"
-#define TRIGGERNAME "BossKey: Key pressed"
-#define TRIGGER_BK_HIDE 0x01
-#define TRIGGER_BK_SHOW 0x02
-#define SETTING_TRIGGERON "TriggerOn"
-
const unsigned STATUS_ARR_TO_ID[8] = { ID_STATUS_OFFLINE, ID_STATUS_ONLINE, ID_STATUS_AWAY, ID_STATUS_NA, ID_STATUS_OCCUPIED, ID_STATUS_DND, ID_STATUS_FREECHAT, ID_STATUS_INVISIBLE };
extern bool g_fOptionsOpen; // options dialog is open. be sure not to hide anything while we're there.
-extern WORD g_wHotKey, g_wMask, g_wMaskAdv;
+extern WORD g_wMask, g_wMaskAdv;
extern HINSTANCE g_hInstance;
extern bool g_bWindowHidden;
extern UINT minutes;
@@ -100,7 +95,6 @@ void BossKeyMenuItemUnInit(void);
TCHAR *GetBossKeyText(void);
void InitIdleTimer(void);
void UninitIdleTimer(void);
-LRESULT CALLBACK KbdProc(int nCode,WPARAM wParam,LPARAM lParam);
TCHAR* GetDefStatusMsg(unsigned uMode, const char* szProto);
// I never really liked STL's vector... hmm this is nicer anyway, more flexible