From 28f6bfdc3ea1f2d34a05855f0459caa96c8fe2b6 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Tue, 2 Jun 2015 21:38:16 +0000 Subject: minor cleaning git-svn-id: http://svn.miranda-ng.org/main/trunk@13976 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/Clist_nicer/src/Docking.cpp | 437 ++++++++++++++++++------------------ 1 file changed, 224 insertions(+), 213 deletions(-) (limited to 'plugins/Clist_nicer/src/Docking.cpp') diff --git a/plugins/Clist_nicer/src/Docking.cpp b/plugins/Clist_nicer/src/Docking.cpp index 747b5a5d9b..2455efa43d 100644 --- a/plugins/Clist_nicer/src/Docking.cpp +++ b/plugins/Clist_nicer/src/Docking.cpp @@ -55,229 +55,240 @@ static void Docking_GetMonitorRectFromPoint(POINT pt, RECT *rc) static void Docking_GetMonitorRectFromWindow(HWND hWnd, RECT *rc) { - POINT ptWindow; - GetWindowRect(hWnd, rc); - ptWindow.x = rc->left; - ptWindow.y = rc->top; - Docking_GetMonitorRectFromPoint(ptWindow, rc); + POINT ptWindow; + GetWindowRect(hWnd, rc); + ptWindow.x = rc->left; + ptWindow.y = rc->top; + Docking_GetMonitorRectFromPoint(ptWindow, rc); } static void Docking_AdjustPosition(HWND hwnd, RECT *rcDisplay, RECT *rc) { - APPBARDATA abd; - - memset(&abd, 0, sizeof(abd)); - abd.cbSize = sizeof(abd); - abd.hWnd = hwnd; - abd.uEdge = docked == DOCKED_LEFT ? ABE_LEFT : ABE_RIGHT; - abd.rc = *rc; - abd.rc.top = rcDisplay->top; - abd.rc.bottom = rcDisplay->bottom; - if (docked == DOCKED_LEFT) { - abd.rc.right = rcDisplay->left + (abd.rc.right - abd.rc.left) - cfg::dat.bClipBorder; - abd.rc.left = rcDisplay->left - cfg::dat.bClipBorder; - } else { - abd.rc.left = rcDisplay->right - (abd.rc.right - abd.rc.left) + cfg::dat.bClipBorder; - abd.rc.right = rcDisplay->right + cfg::dat.bClipBorder; - } - SHAppBarMessage(ABM_SETPOS, &abd); - *rc = abd.rc; + APPBARDATA abd; + + memset(&abd, 0, sizeof(abd)); + abd.cbSize = sizeof(abd); + abd.hWnd = hwnd; + abd.uEdge = docked == DOCKED_LEFT ? ABE_LEFT : ABE_RIGHT; + abd.rc = *rc; + abd.rc.top = rcDisplay->top; + abd.rc.bottom = rcDisplay->bottom; + if (docked == DOCKED_LEFT) { + abd.rc.right = rcDisplay->left + (abd.rc.right - abd.rc.left) - cfg::dat.bClipBorder; + abd.rc.left = rcDisplay->left - cfg::dat.bClipBorder; + } + else { + abd.rc.left = rcDisplay->right - (abd.rc.right - abd.rc.left) + cfg::dat.bClipBorder; + abd.rc.right = rcDisplay->right + cfg::dat.bClipBorder; + } + SHAppBarMessage(ABM_SETPOS, &abd); + *rc = abd.rc; } int Docking_IsDocked(WPARAM, LPARAM) { - return docked; + return docked; } int Docking_ProcessWindowMessage(WPARAM wParam, LPARAM lParam) { - APPBARDATA abd; - static int draggingTitle; - MSG *msg = (MSG *) wParam; - - if (msg->message == WM_DESTROY) - cfg::writeByte("CList", "Docked", (BYTE) docked); - if ( !docked && msg->message != WM_CREATE && msg->message != WM_MOVING && msg->message != WM_CREATEDOCKED && msg->message != WM_MOVE) - return 0; - switch (msg->message) { - case WM_CREATE: - //if (GetSystemMetrics(SM_CMONITORS)>1) return 0; - if (cfg::getByte("CList", "Docked", 0)) - PostMessage(msg->hwnd, WM_CREATEDOCKED, 0, 0); - draggingTitle = 0; - return 0; - case WM_CREATEDOCKED: - //we need to post a message just after creation to let main message function do some work - docked = (int) (char) cfg::getByte("CList", "Docked", 0); - if (IsWindowVisible(msg->hwnd) && !IsIconic(msg->hwnd)) { - RECT rc, rcMonitor; - memset(&abd, 0, sizeof(abd)); - abd.cbSize = sizeof(abd); - abd.hWnd = msg->hwnd; - abd.lParam = 0; - abd.uCallbackMessage = WM_DOCKCALLBACK; - SHAppBarMessage(ABM_NEW, &abd); - GetWindowRect(msg->hwnd, &rc); - Docking_GetMonitorRectFromWindow(msg->hwnd, &rcMonitor); - Docking_AdjustPosition(msg->hwnd, &rcMonitor, &rc); - MoveWindow(msg->hwnd, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, TRUE); - } - break; - case WM_ACTIVATE: - memset(&abd, 0, sizeof(abd)); - abd.cbSize = sizeof(abd); - abd.hWnd = msg->hwnd; - SHAppBarMessage(ABM_ACTIVATE, &abd); - return 0; - case WM_WINDOWPOSCHANGED: - memset(&abd, 0, sizeof(abd)); - abd.cbSize = sizeof(abd); - abd.hWnd = msg->hwnd; - SHAppBarMessage(ABM_WINDOWPOSCHANGED, &abd); - return 0; - case WM_MOVING: - { - RECT rcMonitor; - POINT ptCursor; - - // stop early - if (GetAsyncKeyState(VK_CONTROL) & 0x8000) - return 0; - - // GetMessagePos() is no good, position is always unsigned - GetCursorPos(&ptCursor); - Docking_GetMonitorRectFromPoint(ptCursor, &rcMonitor); - - if ((ptCursor.x < rcMonitor.left + EDGESENSITIVITY) || (ptCursor.x >= rcMonitor.right - EDGESENSITIVITY)) { - if ( !(GetWindowLongPtr(msg->hwnd, GWL_EXSTYLE) & WS_EX_TOOLWINDOW)) { - SendMessage(msg->hwnd, CLUIINTM_REDRAW, 0, 0); - MessageBox(0, TranslateT("The contact list cannot be docked when using the default title bar and border. Use a toolwindow or borderless style instead."), - TranslateT("Contact list docking"), MB_OK); - return 0; - } - memset(&abd, 0, sizeof(abd)); - abd.cbSize = sizeof(abd); - abd.hWnd = msg->hwnd; - abd.lParam = 0; - abd.uCallbackMessage = WM_DOCKCALLBACK; - SHAppBarMessage(ABM_NEW, &abd); - if (ptCursor.x < rcMonitor.left + EDGESENSITIVITY) - docked = DOCKED_LEFT; - else - docked = DOCKED_RIGHT; - SendMessage(msg->hwnd, WM_LBUTTONUP, 0, MAKELPARAM(ptCursor.x, ptCursor.y)); - GetWindowRect(msg->hwnd, (LPRECT) msg->lParam); - Docking_AdjustPosition(msg->hwnd, (LPRECT) &rcMonitor, (LPRECT) msg->lParam); - PostMessage(msg->hwnd, CLUIINTM_REDRAW, 0, 0); - return TRUE; - } - return 0; - } - case WM_MOVE: - { - if (docked) { - RECT rc, rcMonitor; - Docking_GetMonitorRectFromWindow(msg->hwnd, &rcMonitor); - GetWindowRect(msg->hwnd, &rc); - Docking_AdjustPosition(msg->hwnd, &rcMonitor, &rc); - MoveWindow(msg->hwnd, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, TRUE); - return 1; - } - return 0; - } - case WM_SIZING: - { - RECT rcMonitor; - Docking_GetMonitorRectFromWindow(msg->hwnd, &rcMonitor); - Docking_AdjustPosition(msg->hwnd, &rcMonitor, (LPRECT) msg->lParam); - *((LRESULT *) lParam) = TRUE; - return TRUE; - } - case WM_SHOWWINDOW: - if (msg->lParam) - return 0; - if ((msg->wParam && docked < 0) || (!msg->wParam && docked > 0)) - docked = -docked; - memset(&abd, 0, sizeof(abd)); - abd.cbSize = sizeof(abd); - abd.hWnd = msg->hwnd; - if (msg->wParam) { - RECT rc, rcMonitor; - Docking_GetMonitorRectFromWindow(msg->hwnd, &rcMonitor); - abd.lParam = 0; - abd.uCallbackMessage = WM_DOCKCALLBACK; - SHAppBarMessage(ABM_NEW, &abd); - GetWindowRect(msg->hwnd, &rc); - Docking_AdjustPosition(msg->hwnd, &rcMonitor, &rc); - MoveWindow(msg->hwnd, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, FALSE); - } else { - SHAppBarMessage(ABM_REMOVE, &abd); - } - return 0; - case WM_NCHITTEST: - { - LONG result; - result = DefWindowProc(msg->hwnd, WM_NCHITTEST, msg->wParam, msg->lParam); - if (result == HTSIZE || result == HTTOP || result == HTTOPLEFT || result == HTTOPRIGHT || result == HTBOTTOM || result == HTBOTTOMRIGHT || result == HTBOTTOMLEFT) { - *((LRESULT *) lParam) = HTCLIENT; return TRUE; - } - if (docked == DOCKED_LEFT && result == HTLEFT) { - *((LRESULT *) lParam) = HTCLIENT; return TRUE; - } - if (docked == DOCKED_RIGHT && result == HTRIGHT) { - *((LRESULT *) lParam) = HTCLIENT; return TRUE; - } - return 0; - } - case WM_SYSCOMMAND: - if ((msg->wParam & 0xFFF0) != SC_MOVE) - return 0; - SetActiveWindow(msg->hwnd); - SetCapture(msg->hwnd); - draggingTitle = 1; - *((LRESULT *) lParam) = 0; - return TRUE; - case WM_MOUSEMOVE: - if ( !draggingTitle) - return 0; { - RECT rc; - POINT pt; - GetClientRect(msg->hwnd, &rc); - if (((docked == DOCKED_LEFT || docked == -DOCKED_LEFT) && (short) LOWORD(msg->lParam) > rc.right) || ((docked == DOCKED_RIGHT || docked == -DOCKED_RIGHT) && (short) LOWORD(msg->lParam) < 0)) { - ReleaseCapture(); - draggingTitle = 0; - memset(&abd, 0, sizeof(abd)); - abd.cbSize = sizeof(abd); - abd.hWnd = msg->hwnd; - SHAppBarMessage(ABM_REMOVE, &abd); - docked = 0; - GetCursorPos(&pt); - PostMessage(msg->hwnd, WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(pt.x, pt.y)); - SetWindowPos(msg->hwnd, 0, pt.x - rc.right / 2, pt.y - GetSystemMetrics(SM_CYFRAME) - GetSystemMetrics(SM_CYSMCAPTION) / 2, cluiPos.right, cluiPos.bottom, SWP_NOZORDER); - } - return 1; - } - case WM_LBUTTONUP: - if (draggingTitle) { - ReleaseCapture(); - draggingTitle = 0; - } - return 0; - case WM_DOCKCALLBACK: - switch (msg->wParam) { - case ABN_WINDOWARRANGE: - ShowWindow(msg->hwnd, msg->lParam ? SW_HIDE : SW_SHOW); - break; - } - return TRUE; - case WM_DESTROY: - if (docked > 0) { - memset(&abd, 0, sizeof(abd)); - abd.cbSize = sizeof(abd); - abd.hWnd = msg->hwnd; - SHAppBarMessage(ABM_REMOVE, &abd); - } - return 0; - } - return 0; + APPBARDATA abd; + static int draggingTitle; + MSG *msg = (MSG *)wParam; + + if (msg->message == WM_DESTROY) + cfg::writeByte("CList", "Docked", (BYTE)docked); + if (!docked && msg->message != WM_CREATE && msg->message != WM_MOVING && msg->message != WM_CREATEDOCKED && msg->message != WM_MOVE) + return 0; + + switch (msg->message) { + case WM_CREATE: + //if (GetSystemMetrics(SM_CMONITORS)>1) return 0; + if (cfg::getByte("CList", "Docked", 0)) + PostMessage(msg->hwnd, WM_CREATEDOCKED, 0, 0); + draggingTitle = 0; + return 0; + + case WM_CREATEDOCKED: + //we need to post a message just after creation to let main message function do some work + docked = (int)(char)cfg::getByte("CList", "Docked", 0); + if (IsWindowVisible(msg->hwnd) && !IsIconic(msg->hwnd)) { + RECT rc, rcMonitor; + memset(&abd, 0, sizeof(abd)); + abd.cbSize = sizeof(abd); + abd.hWnd = msg->hwnd; + abd.lParam = 0; + abd.uCallbackMessage = WM_DOCKCALLBACK; + SHAppBarMessage(ABM_NEW, &abd); + GetWindowRect(msg->hwnd, &rc); + Docking_GetMonitorRectFromWindow(msg->hwnd, &rcMonitor); + Docking_AdjustPosition(msg->hwnd, &rcMonitor, &rc); + MoveWindow(msg->hwnd, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, TRUE); + } + break; + + case WM_ACTIVATE: + memset(&abd, 0, sizeof(abd)); + abd.cbSize = sizeof(abd); + abd.hWnd = msg->hwnd; + SHAppBarMessage(ABM_ACTIVATE, &abd); + return 0; + + case WM_WINDOWPOSCHANGED: + memset(&abd, 0, sizeof(abd)); + abd.cbSize = sizeof(abd); + abd.hWnd = msg->hwnd; + SHAppBarMessage(ABM_WINDOWPOSCHANGED, &abd); + return 0; + + case WM_MOVING: + { + RECT rcMonitor; + POINT ptCursor; + + // stop early + if (GetAsyncKeyState(VK_CONTROL) & 0x8000) + return 0; + + // GetMessagePos() is no good, position is always unsigned + GetCursorPos(&ptCursor); + Docking_GetMonitorRectFromPoint(ptCursor, &rcMonitor); + + if ((ptCursor.x < rcMonitor.left + EDGESENSITIVITY) || (ptCursor.x >= rcMonitor.right - EDGESENSITIVITY)) { + if (!(GetWindowLongPtr(msg->hwnd, GWL_EXSTYLE) & WS_EX_TOOLWINDOW)) { + SendMessage(msg->hwnd, CLUIINTM_REDRAW, 0, 0); + MessageBox(0, TranslateT("The contact list cannot be docked when using the default title bar and border. Use a toolwindow or borderless style instead."), + TranslateT("Contact list docking"), MB_OK); + return 0; + } + memset(&abd, 0, sizeof(abd)); + abd.cbSize = sizeof(abd); + abd.hWnd = msg->hwnd; + abd.lParam = 0; + abd.uCallbackMessage = WM_DOCKCALLBACK; + SHAppBarMessage(ABM_NEW, &abd); + if (ptCursor.x < rcMonitor.left + EDGESENSITIVITY) + docked = DOCKED_LEFT; + else + docked = DOCKED_RIGHT; + SendMessage(msg->hwnd, WM_LBUTTONUP, 0, MAKELPARAM(ptCursor.x, ptCursor.y)); + GetWindowRect(msg->hwnd, (LPRECT)msg->lParam); + Docking_AdjustPosition(msg->hwnd, (LPRECT)&rcMonitor, (LPRECT)msg->lParam); + PostMessage(msg->hwnd, CLUIINTM_REDRAW, 0, 0); + return TRUE; + } + } + return 0; + + case WM_MOVE: + if (docked) { + RECT rc, rcMonitor; + Docking_GetMonitorRectFromWindow(msg->hwnd, &rcMonitor); + GetWindowRect(msg->hwnd, &rc); + Docking_AdjustPosition(msg->hwnd, &rcMonitor, &rc); + MoveWindow(msg->hwnd, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, TRUE); + return 1; + } + return 0; + + case WM_SIZING: + { + RECT rcMonitor; + Docking_GetMonitorRectFromWindow(msg->hwnd, &rcMonitor); + Docking_AdjustPosition(msg->hwnd, &rcMonitor, (LPRECT)msg->lParam); + *((LRESULT *)lParam) = TRUE; + } + return TRUE; + + case WM_SHOWWINDOW: + if (msg->lParam) + return 0; + if ((msg->wParam && docked < 0) || (!msg->wParam && docked > 0)) + docked = -docked; + memset(&abd, 0, sizeof(abd)); + abd.cbSize = sizeof(abd); + abd.hWnd = msg->hwnd; + if (msg->wParam) { + RECT rc, rcMonitor; + Docking_GetMonitorRectFromWindow(msg->hwnd, &rcMonitor); + abd.lParam = 0; + abd.uCallbackMessage = WM_DOCKCALLBACK; + SHAppBarMessage(ABM_NEW, &abd); + GetWindowRect(msg->hwnd, &rc); + Docking_AdjustPosition(msg->hwnd, &rcMonitor, &rc); + MoveWindow(msg->hwnd, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, FALSE); + } + else SHAppBarMessage(ABM_REMOVE, &abd); + return 0; + + case WM_NCHITTEST: + { + LONG result = DefWindowProc(msg->hwnd, WM_NCHITTEST, msg->wParam, msg->lParam); + if (result == HTSIZE || result == HTTOP || result == HTTOPLEFT || result == HTTOPRIGHT || result == HTBOTTOM || result == HTBOTTOMRIGHT || result == HTBOTTOMLEFT) { + *((LRESULT *)lParam) = HTCLIENT; return TRUE; + } + if (docked == DOCKED_LEFT && result == HTLEFT) { + *((LRESULT *)lParam) = HTCLIENT; return TRUE; + } + if (docked == DOCKED_RIGHT && result == HTRIGHT) { + *((LRESULT *)lParam) = HTCLIENT; return TRUE; + } + } + return 0; + + case WM_SYSCOMMAND: + if ((msg->wParam & 0xFFF0) != SC_MOVE) + return 0; + SetActiveWindow(msg->hwnd); + SetCapture(msg->hwnd); + draggingTitle = 1; + *((LRESULT *)lParam) = 0; + return TRUE; + + case WM_MOUSEMOVE: + if (!draggingTitle) + return 0; { + RECT rc; + POINT pt; + GetClientRect(msg->hwnd, &rc); + if (((docked == DOCKED_LEFT || docked == -DOCKED_LEFT) && (short)LOWORD(msg->lParam) > rc.right) || ((docked == DOCKED_RIGHT || docked == -DOCKED_RIGHT) && (short)LOWORD(msg->lParam) < 0)) { + ReleaseCapture(); + draggingTitle = 0; + memset(&abd, 0, sizeof(abd)); + abd.cbSize = sizeof(abd); + abd.hWnd = msg->hwnd; + SHAppBarMessage(ABM_REMOVE, &abd); + docked = 0; + GetCursorPos(&pt); + PostMessage(msg->hwnd, WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(pt.x, pt.y)); + SetWindowPos(msg->hwnd, 0, pt.x - rc.right / 2, pt.y - GetSystemMetrics(SM_CYFRAME) - GetSystemMetrics(SM_CYSMCAPTION) / 2, cluiPos.right, cluiPos.bottom, SWP_NOZORDER); + } + } + return 1; + + case WM_LBUTTONUP: + if (draggingTitle) { + ReleaseCapture(); + draggingTitle = 0; + } + return 0; + + case WM_DOCKCALLBACK: + switch (msg->wParam) { + case ABN_WINDOWARRANGE: + ShowWindow(msg->hwnd, msg->lParam ? SW_HIDE : SW_SHOW); + break; + } + return TRUE; + + case WM_DESTROY: + if (docked > 0) { + memset(&abd, 0, sizeof(abd)); + abd.cbSize = sizeof(abd); + abd.hWnd = msg->hwnd; + SHAppBarMessage(ABM_REMOVE, &abd); + } + return 0; + } + return 0; } -- cgit v1.2.3