diff options
author | George Hazan <ghazan@miranda.im> | 2018-04-06 18:23:20 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2018-04-06 18:23:20 +0300 |
commit | aa6e7ad7b8fd0fa24faf08eb44e5432e66fe890f (patch) | |
tree | d7997f4fd14a95175a8226e7adce4185c96377e5 | |
parent | 6a8ea9b06515655f35a7e6998813eb69c80b8010 (diff) |
CLIST_INTERFACE::pfnEventsProcessTrayDoubleClick => Clist_EventsProcessTrayDoubleClick
-rw-r--r-- | include/m_clistint.h | 1 | ||||
-rw-r--r-- | libs/win32/mir_app.lib | bin | 150198 -> 150512 bytes | |||
-rw-r--r-- | libs/win64/mir_app.lib | bin | 145692 -> 145988 bytes | |||
-rw-r--r-- | plugins/HwHotKeys/src/HwHotKeys_KbdHook.cpp | 192 | ||||
-rw-r--r-- | src/mir_app/src/clc.h | 2 | ||||
-rw-r--r-- | src/mir_app/src/clistevents.cpp | 2 | ||||
-rw-r--r-- | src/mir_app/src/clisttray.cpp | 2 | ||||
-rw-r--r-- | src/mir_app/src/keyboard.cpp | 2 | ||||
-rw-r--r-- | src/mir_app/src/mir_app.def | 1 | ||||
-rw-r--r-- | src/mir_app/src/mir_app64.def | 1 |
10 files changed, 97 insertions, 106 deletions
diff --git a/include/m_clistint.h b/include/m_clistint.h index 2fd75eaef0..1e9e7de62e 100644 --- a/include/m_clistint.h +++ b/include/m_clistint.h @@ -254,6 +254,7 @@ EXTERN_C MIR_APP_DLL(void) Clist_BroadcastAsync(int msg, WPARAM wParam, LPARAM l EXTERN_C MIR_APP_DLL(void) Clist_ChangeContactIcon(MCONTACT hContact, int iIcon);
EXTERN_C MIR_APP_DLL(void) Clist_DrawMenuItem(DRAWITEMSTRUCT *dis, HICON hIcon, HICON eventIcon);
+EXTERN_C MIR_APP_DLL(int) Clist_EventsProcessTrayDoubleClick(int index);
EXTERN_C MIR_APP_DLL(bool) Clist_FindItem(HWND hwnd, ClcData *dat, DWORD dwItem, ClcContact **contact, ClcGroup **subgroup, int *isVisible);
EXTERN_C MIR_APP_DLL(void) Clist_InitAutoRebuild(HWND hWnd);
EXTERN_C MIR_APP_DLL(void) Clist_LoadContactTree(void);
diff --git a/libs/win32/mir_app.lib b/libs/win32/mir_app.lib Binary files differindex e28de7b603..f34a6bc793 100644 --- a/libs/win32/mir_app.lib +++ b/libs/win32/mir_app.lib diff --git a/libs/win64/mir_app.lib b/libs/win64/mir_app.lib Binary files differindex a593a4de4d..a482412915 100644 --- a/libs/win64/mir_app.lib +++ b/libs/win64/mir_app.lib diff --git a/plugins/HwHotKeys/src/HwHotKeys_KbdHook.cpp b/plugins/HwHotKeys/src/HwHotKeys_KbdHook.cpp index 17065834a2..0908375dc8 100644 --- a/plugins/HwHotKeys/src/HwHotKeys_KbdHook.cpp +++ b/plugins/HwHotKeys/src/HwHotKeys_KbdHook.cpp @@ -21,113 +21,103 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 - 1307, USA. LRESULT CALLBACK key_hook(int nCode, WPARAM wParam, LPARAM lParam) // https://msdn.microsoft.com/en-us/library/windows/desktop/ms644985%28v=vs.85%29.aspx
{
- KBDLLHOOKSTRUCT *pKbdLLHookStruct = (KBDLLHOOKSTRUCT *)lParam;
- if (nCode >= 0)
- {
- if (wParam == WM_KEYUP || wParam == WM_SYSKEYUP) // при отпускании любой кнопки - сбрасываем всю накопленную комбинацию
- {
- key_code = 0;
- }
- else if (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN)
- {
- if (!(pKbdLLHookStruct->scanCode & 0xFFFFFF00) && (pKbdLLHookStruct->scanCode & 0xFF)) // && !(pKbdLLHookStruct->flags & LLKHF_INJECTED))
- // 0xFFFFFF00 фильтр дл¤ странных двойных сканкодов например перед L_Alt/AltGr,
- // 0xFF фильтр дл¤ нулевых сканкодов(приход¤т при вс¤кой там эмул¤ции нажатий и т.п.)
- // LLKHF_INJECTED фильтр дл¤ эмулируемых нажатий, но есть проблема с некоторыми клавами
- {
- // строим комплексный код(сканкод + доп.флаг LLKHF_EXTENDED), от 0 до 1FF
- key_code_raw = (LOBYTE(pKbdLLHookStruct->scanCode) | ((LOBYTE(pKbdLLHookStruct->flags)&1) << 8));
+ KBDLLHOOKSTRUCT *pKbdLLHookStruct = (KBDLLHOOKSTRUCT *)lParam;
+ if (nCode >= 0) {
+ if (wParam == WM_KEYUP || wParam == WM_SYSKEYUP) // при отпускании любой кнопки - сбрасываем всю накопленную комбинацию
+ key_code = 0;
- if (hDialogWnd) // если диалог настроек открыт - выводим в него нажимаемые кнопоки
- {
- StringCbPrintfA(key_name_buffer, sizeof(key_name_buffer), "%03X %s", key_code_raw, key_tab[(key_code_raw & 0x1FF)]);
- SetDlgItemTextA(hDialogWnd, dlg_scancode_edit, key_name_buffer);
- }
+ else if (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN) {
+ // 0xFFFFFF00 фильтр для странных двойных сканкодов например перед L_Alt/AltGr,
+ // 0xFF фильтр для нулевых сканкодов(приходят при всякой там эмуляции нажатий и т.п.)
+ // LLKHF_INJECTED фильтр для эмулируемых нажатий, но есть проблема с некоторыми клавами
+ if (!(pKbdLLHookStruct->scanCode & 0xFFFFFF00) && (pKbdLLHookStruct->scanCode & 0xFF)) {
+ // строим комплексный код(сканкод + доп.флаг LLKHF_EXTENDED), от 0 до 1FF
+ key_code_raw = (LOBYTE(pKbdLLHookStruct->scanCode) | ((LOBYTE(pKbdLLHookStruct->flags) & 1) << 8));
- switch (key_code_raw) // провер¤ем кнопки модификаторов
- {
- case 0x01D: // L_Ctrl
- key_code |= key_flag_cl;
- break; // после модификаторов - ничего не делаем, выход из хука.
- case 0x11D: // R_Ctrl
- key_code |= key_flag_cr;
- break;
- case 0x038: // L_Alt
- key_code |= key_flag_al;
- break;
- case 0x138: // R_Alt
- key_code |= key_flag_ar;
- break;
- case 0x15B: // L_Win
- key_code |= key_flag_wl;
- break;
- case 0x15C: // R_Win
- key_code |= key_flag_wr;
- break;
- case 0x02A: // L_Shift
- key_code |= key_flag_sl;
- break;
- case 0x036: // R_Shift
- key_code |= key_flag_sr;
- break;
- case 0x12A: // L_Shift_fake
- key_code |= key_flag_sl;
- break;
- case 0x136: // R_Shift_fake
- key_code |= key_flag_sr;
- break;
- default: // если это не кнопка модификатора - то дальнейша¤ обработка
- key_code = (LOWORD(key_code_raw)) | (key_code & 0xFFFF0000); // в старшей половине там лежат биты модификаторов - их оставл¤ем (они там могут быть от предыдущего раза)
- if (hDialogWnd) // если диалог настроек открыт - выводим в него комплексную комбинацию (типа Shift+Key), которую потом можно назначить;
- {
- if (IsDlgButtonChecked(hDialogWnd, dlg_combine)) // левые/правые модификаторы объедин¤ть в один?
- {
- DWORD tmp1, tmp2;
- tmp1 = ((key_code >> 4) | (key_code >> 8)) & 0x00F00000;
- tmp2 = LOWORD(key_code) | tmp1;
- tmp2 &= 0x00F001FF;
- key_code_assign = tmp2;
- }
- else
- {
- key_code_assign = key_code;
- }
- HwHotKeys_PrintFullKeyname(key_code_assign);
- SetDlgItemTextA(hDialogWnd, dlg_keyname_edit, key_name_buffer);
- }
- else // хоткей выполн¤ют действи¤ только если закрыт диалог настроек (чтобы не мешал настраивать)
- {
- if (HwHotKeys_CompareCurrentScancode(code_Close)) // хоткей полного закрыти¤ Miranda
- {
- // Beep(300, 200);
- CallService("CloseAction", 0, 0);
- return 1;
- }
- else if (HwHotKeys_CompareCurrentScancode(code_HideShow)) // хоткей сворачивани¤/разворачивани¤ главного окна Miranda
- {
- // Beep(700, 200);
- pcli->pfnShowHide(); // есть варианты
- return 1;
- }
- else if (HwHotKeys_CompareCurrentScancode(code_ReadMsg)) // хоткей чтени¤ сообщени¤
- {
- // Beep(1500, 200);
- if (pcli->pfnEventsProcessTrayDoubleClick(0) != 0) // клик по трею дл¤ стандартного открыти¤ сообщени¤
- { // иначе - окно чата уже открыто и надо его вытащить наверх...
- SetForegroundWindow(pcli->hwndContactList);
- SetFocus(pcli->hwndContactList);
- // хот¤ всЄ равно это не очень работает в новой винде
- // надо http://www.rsdn.ru/article/qna/ui/wndsetfg.xml
- // но пока незнаю где тут вз¤ть хэндл окна чата(причЄм именно дл¤
- // выбранного контакта, их же несколько может быть если простой srmm)
- // у миранды в hkRead такие же проблемы
- }
- return 1; // возврат 1 запрещает дальнейшую работу кнопки, т.е. кнопка после нашего плагина никому более не достанетс¤
- }
+ if (hDialogWnd) { // если диалог настроек открыт - выводим в него нажимаемые кнопоки
+ StringCbPrintfA(key_name_buffer, sizeof(key_name_buffer), "%03X %s", key_code_raw, key_tab[(key_code_raw & 0x1FF)]);
+ SetDlgItemTextA(hDialogWnd, dlg_scancode_edit, key_name_buffer);
+ }
+
+ switch (key_code_raw) { // проверяем кнопки модификаторов
+ case 0x01D: // L_Ctrl
+ key_code |= key_flag_cl;
+ break; // после модификаторов - ничего не делаем, выход из хука.
+ case 0x11D: // R_Ctrl
+ key_code |= key_flag_cr;
+ break;
+ case 0x038: // L_Alt
+ key_code |= key_flag_al;
+ break;
+ case 0x138: // R_Alt
+ key_code |= key_flag_ar;
+ break;
+ case 0x15B: // L_Win
+ key_code |= key_flag_wl;
+ break;
+ case 0x15C: // R_Win
+ key_code |= key_flag_wr;
+ break;
+ case 0x02A: // L_Shift
+ key_code |= key_flag_sl;
+ break;
+ case 0x036: // R_Shift
+ key_code |= key_flag_sr;
+ break;
+ case 0x12A: // L_Shift_fake
+ key_code |= key_flag_sl;
+ break;
+ case 0x136: // R_Shift_fake
+ key_code |= key_flag_sr;
+ break;
+
+ default: // если это не кнопка модификатора - то дальнейшая обработка
+ key_code = (LOWORD(key_code_raw)) | (key_code & 0xFFFF0000); // в старшей половине там лежат биты модификаторов - их оставляем (они там могут быть от предыдущего раза)
+ if (hDialogWnd) { // если диалог настроек открыт - выводим в него комплексную комбинацию (типа Shift+Key), которую потом можно назначить;
+ if (IsDlgButtonChecked(hDialogWnd, dlg_combine)) { // левые/правые модификаторы объединять в один?
+ DWORD tmp1, tmp2;
+ tmp1 = ((key_code >> 4) | (key_code >> 8)) & 0x00F00000;
+ tmp2 = LOWORD(key_code) | tmp1;
+ tmp2 &= 0x00F001FF;
+ key_code_assign = tmp2;
+ }
+ else key_code_assign = key_code;
+
+ HwHotKeys_PrintFullKeyname(key_code_assign);
+ SetDlgItemTextA(hDialogWnd, dlg_keyname_edit, key_name_buffer);
+ }
+ else { // хоткей выполняют действия только если закрыт диалог настроек (чтобы не мешал настраивать)
+ if (HwHotKeys_CompareCurrentScancode(code_Close)) { // хоткей полного закрытия Miranda
+ // Beep(300, 200);
+ CallService("CloseAction", 0, 0);
+ return 1;
+ }
+
+ if (HwHotKeys_CompareCurrentScancode(code_HideShow)) { // хоткей сворачивания/разворачивания главного окна Miranda
+ // Beep(700, 200);
+ pcli->pfnShowHide(); // есть варианты
+ return 1;
+ }
+
+ if (HwHotKeys_CompareCurrentScancode(code_ReadMsg)) { // хоткей чтения сообщения
+ // Beep(1500, 200);
+ if (Clist_EventsProcessTrayDoubleClick(0) != 0) { // клик по трею для стандартного открытия сообщения
+ // иначе - окно чата уже открыто и надо его вытащить наверх...
+ SetForegroundWindow(pcli->hwndContactList);
+ SetFocus(pcli->hwndContactList);
+ // хотя всЄ равно это не очень работает в новой винде
+ // надо http://www.rsdn.ru/article/qna/ui/wndsetfg.xml
+ // но пока незнаю где тут взять хэндл окна чата(причём именно для
+ // выбранного контакта, их же несколько может быть если простой srmm)
+ // у миранды в hkRead такие же проблемы
}
+ return 1; // возврат 1 запрещает дальнейшую работу кнопки, т.е. кнопка после нашего плагина никому более не достанется
}
+ }
}
}
}
+ }
+
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
diff --git a/src/mir_app/src/clc.h b/src/mir_app/src/clc.h index 4b1f11877f..6a031f6e07 100644 --- a/src/mir_app/src/clc.h +++ b/src/mir_app/src/clc.h @@ -118,7 +118,6 @@ void RebuildMenuOrder(void); void fnGetDefaultFontSetting(int i, LOGFONT *lf, COLORREF * colour);
void fnInvalidateDisplayNameCacheEntry(MCONTACT hContact);
-ClcCacheEntry* fnGetCacheEntry(MCONTACT hContact);
ClcCacheEntry* fnCreateCacheItem(MCONTACT hContact);
void fnCheckCacheItem(ClcCacheEntry *p);
void fnFreeCacheItem(ClcCacheEntry *p);
@@ -137,7 +136,6 @@ int fnGetImlIconIndex(HICON hIcon); int fnRemoveEvent(MCONTACT hContact, MEVENT dbEvent);
int EventsProcessContactDoubleClick(MCONTACT hContact);
-int EventsProcessTrayDoubleClick(int);
/* clistmod.c */
int fnIconFromStatusMode(const char *szProto, int status, MCONTACT hContact);
diff --git a/src/mir_app/src/clistevents.cpp b/src/mir_app/src/clistevents.cpp index 0bd3951cc9..192bf7b704 100644 --- a/src/mir_app/src/clistevents.cpp +++ b/src/mir_app/src/clistevents.cpp @@ -277,7 +277,7 @@ int EventsProcessContactDoubleClick(MCONTACT hContact) return 1;
}
-int EventsProcessTrayDoubleClick(int index)
+MIR_APP_DLL(int) Clist_EventsProcessTrayDoubleClick(int index)
{
BOOL click_in_first_icon = FALSE;
if (g_cliEvents.getCount() == 0)
diff --git a/src/mir_app/src/clisttray.cpp b/src/mir_app/src/clisttray.cpp index 72ad947983..3789bd7ce3 100644 --- a/src/mir_app/src/clisttray.cpp +++ b/src/mir_app/src/clisttray.cpp @@ -711,7 +711,7 @@ INT_PTR fnTrayIconProcessMessage(WPARAM wParam, LPARAM lParam) GetCursorPos(&pt);
TrackPopupMenu(hMenu, TPM_TOPALIGN | TPM_LEFTALIGN | TPM_LEFTBUTTON, pt.x, pt.y, 0, msg->hwnd, nullptr);
}
- else if (EventsProcessTrayDoubleClick(msg->wParam))
+ else if (Clist_EventsProcessTrayDoubleClick(msg->wParam))
cli.pfnShowHide();
}
else if (msg->lParam == WM_RBUTTONUP) {
diff --git a/src/mir_app/src/keyboard.cpp b/src/mir_app/src/keyboard.cpp index 5c5c47a9b1..3517ceb001 100644 --- a/src/mir_app/src/keyboard.cpp +++ b/src/mir_app/src/keyboard.cpp @@ -34,7 +34,7 @@ static INT_PTR hkHideShow(WPARAM, LPARAM) static INT_PTR hkRead(WPARAM, LPARAM)
{
- if (EventsProcessTrayDoubleClick(0) == 0)
+ if (Clist_EventsProcessTrayDoubleClick(0) == 0)
return true;
SetForegroundWindow(cli.hwndContactList);
diff --git a/src/mir_app/src/mir_app.def b/src/mir_app/src/mir_app.def index d6d6715df8..37d849b6a3 100644 --- a/src/mir_app/src/mir_app.def +++ b/src/mir_app/src/mir_app.def @@ -556,3 +556,4 @@ Clist_TrayIconAdd @575 Clist_TraySetTimer @576
Clist_GetContactDisplayName @577
Clist_GetCacheEntry @578
+Clist_EventsProcessTrayDoubleClick @579
diff --git a/src/mir_app/src/mir_app64.def b/src/mir_app/src/mir_app64.def index f1ffdd88ea..9721b041c1 100644 --- a/src/mir_app/src/mir_app64.def +++ b/src/mir_app/src/mir_app64.def @@ -556,3 +556,4 @@ Clist_TrayIconAdd @575 Clist_TraySetTimer @576
Clist_GetContactDisplayName @577
Clist_GetCacheEntry @578
+Clist_EventsProcessTrayDoubleClick @579
|