PCONSOLE_PROCESS_DATA ProcessData;
CLIENT_ID ConsoleLeaderCID;
- ProcessData = ConDrvGetConsoleLeaderProcess(GuiData->Console);
+ ProcessData = ConSrvGetConsoleLeaderProcess(GuiData->Console);
ConsoleLeaderCID = ProcessData->Process->ClientId;
SetWindowLongPtrW(GuiData->hWindow, GWLP_CONSOLE_LEADER_PID,
(LONG_PTR)(ConsoleLeaderCID.UniqueProcess));
GuiData->hWindow = hWnd;
- GuiData->Font = CreateFontW(LOWORD(GuiData->GuiInfo.FontSize),
- 0, // HIWORD(GuiData->GuiInfo.FontSize),
+ GuiData->Font = CreateFontW(GuiData->GuiInfo.FontSize.X,
+ 0, // GuiData->GuiInfo.FontSize.Y,
0,
TA_BASELINE,
GuiData->GuiInfo.FontWeight,
static VOID
OnActivate(PGUI_CONSOLE_DATA GuiData, WPARAM wParam)
{
- PCONSOLE Console = GuiData->Console;
WORD ActivationState = LOWORD(wParam);
DPRINT1("WM_ACTIVATE - ActivationState = %d\n");
}
/*
- * When we are in QuickEdit mode, ignore the next mouse signal
- * when we are going to be enabled again via the mouse, in order
- * to prevent e.g. an erroneous right-click from the user which
- * would have as an effect to paste some unwanted text...
+ * Ignore the next mouse signal when we are going to be enabled again via
+ * the mouse, in order to prevent, e.g. when we are in Edit mode, erroneous
+ * mouse actions from the user that could spoil text selection or copy/pastes.
*/
- if (Console->QuickEdit && (ActivationState == WA_CLICKACTIVE))
+ if (ActivationState == WA_CLICKACTIVE)
GuiData->IgnoreNextMouseSignal = TRUE;
}
static VOID
OnPaint(PGUI_CONSOLE_DATA GuiData)
{
- PCONSOLE_SCREEN_BUFFER ActiveBuffer;
+ PCONSOLE_SCREEN_BUFFER ActiveBuffer = GuiData->ActiveBuffer;
PAINTSTRUCT ps;
RECT rcPaint;
- ActiveBuffer = GuiData->ActiveBuffer;
-
BeginPaint(GuiData->hWindow, &ps);
if (ps.hdc != NULL &&
ps.rcPaint.left < ps.rcPaint.right &&
* We shouldn't wait here, though, since the console lock is entered.
* A copy of the thread list probably needs to be made.
*/
- ConDrvConsoleProcessCtrlEvent(Console, 0, CTRL_CLOSE_EVENT);
+ ConSrvConsoleProcessCtrlEvent(Console, 0, CTRL_CLOSE_EVENT);
LeaveCriticalSection(&Console->Lock);
return FALSE;
BOOL Err = FALSE;
PCONSOLE Console = GuiData->Console;
+ // FIXME: It's here that we need to check whether we has focus or not
+ // and whether we are in edit mode or not, to know if we need to deal
+ // with the mouse, or not.
+
if (GuiData->IgnoreNextMouseSignal)
{
if (msg != WM_LBUTTONDOWN &&
msg != WM_MBUTTONDOWN &&
- msg != WM_RBUTTONDOWN &&
- msg != WM_MOUSEMOVE)
+ msg != WM_RBUTTONDOWN)
{
/*
- * If this mouse signal is not a button-down action or a move,
+ * If this mouse signal is not a button-down action
* then it is the last signal being ignored.
*/
GuiData->IgnoreNextMouseSignal = FALSE;
else
{
/*
- * This mouse signal is a button-down action or a move.
+ * This mouse signal is a button-down action.
* Ignore it and perform default action.
*/
Err = TRUE;
break;
}
+ /*
+ * HACK FOR CORE-8394: Ignore the next mouse move signal
+ * just after mouse down click actions.
+ */
+ switch (msg)
+ {
+ case WM_LBUTTONDOWN:
+ case WM_MBUTTONDOWN:
+ case WM_RBUTTONDOWN:
+ GuiData->IgnoreNextMouseSignal = TRUE;
+ default:
+ break;
+ }
+
if (!Err)
{
if (wKeyState & MK_LBUTTON)
// HACK: This functionality is standard for general scrollbars. Don't add it by hand.
VOID
-FASTCALL
GuiConsoleHandleScrollbarMenu(VOID)
{
HMENU hMenu;
/* Detect Alt-Esc/Space/Tab presses defer to DefWindowProc */
if ( (HIWORD(lParam) & KF_ALTDOWN) && (wParam == VK_ESCAPE || wParam == VK_SPACE || wParam == VK_TAB))
{
- return DefWindowProcW(hWnd, msg, wParam, lParam);
+ return DefWindowProcW(hWnd, msg, wParam, lParam);
}
OnKey(GuiData, msg, wParam, lParam);
break;
}
+ /*
+ * Undocumented message sent by Windows' console.dll for applying console info.
+ * See http://www.catch22.net/sites/default/source/files/setconsoleinfo.c
+ * and http://www.scn.rain.com/~neighorn/PDF/MSBugPaper.pdf
+ * for more information.
+ */
+ case WM_SETCONSOLEINFO:
+ {
+ DPRINT1("WM_SETCONSOLEINFO message\n");
+ GuiApplyWindowsConsoleSettings(GuiData, (HANDLE)wParam);
+ break;
+ }
+
case PM_CONSOLE_BEEP:
DPRINT1("Beep !!\n");
Beep(800, 200);