down with hotkeys, long live accelerators!
Hotkeys are SUPER jank. There should be some kind of warning in the docs or something. They are an operating system-level message, and if consumed, NO OTHER APPLICATION GETS TO HAVE IT. So this Ctrl+A hotkey meant the hex editor couldn't use it anymore. Neither could Visual Studio. Or Notepad++. Or Chrome. That's BAD.
This commit is contained in:
parent
052be52323
commit
a9205eac4a
|
@ -1684,14 +1684,6 @@ BOOL CALLBACK IDC_DEBUGGER_DISASSEMBLY_WndProc(HWND hwndDlg, UINT uMsg, WPARAM w
|
|||
|
||||
#define MENU_OPTIONS_COLORS_POS 2
|
||||
|
||||
#define HKEY_STEP_ONE_ID 0
|
||||
#define HKEY_STEP_OUT_ID 1
|
||||
#define HKEY_STEP_OVER_ID 2
|
||||
#define HKEY_RUN_ID 3
|
||||
#define HKEY_SEEK_ADDR_ID 4
|
||||
#define HKEY_SEEK_PC_ID 5
|
||||
#define HKEY_SET_PC_ID 6
|
||||
|
||||
HMENU toolsPopup, symbolsPopup, optionsPopup;
|
||||
|
||||
INT_PTR CALLBACK DebuggerCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
|
@ -1815,16 +1807,6 @@ void DebuggerInitDialog(HWND hwndDlg)
|
|||
for (int i = 0; i < sizeof(dbgcolormenu) / sizeof(DBGCOLORMENU); ++i)
|
||||
InsertColorMenu(hwndDlg, hcolorpopupmenu, &dbgcolormenu[i].menu, i, ID_COLOR_DEBUGGER + i);
|
||||
|
||||
// Register default hotkeys
|
||||
// TODO: Be sure to unregister all these!!
|
||||
RegisterHotKey(hwndDlg, HKEY_STEP_ONE_ID, 0, VK_F11);
|
||||
RegisterHotKey(hwndDlg, HKEY_STEP_OUT_ID, MOD_SHIFT, VK_F11);
|
||||
RegisterHotKey(hwndDlg, HKEY_STEP_OVER_ID, 0, VK_F10);
|
||||
RegisterHotKey(hwndDlg, HKEY_RUN_ID, 0, VK_F5);
|
||||
|
||||
RegisterHotKey(hwndDlg, HKEY_SEEK_ADDR_ID, MOD_CONTROL, 0x41); // A
|
||||
RegisterHotKey(hwndDlg, HKEY_SEEK_PC_ID, MOD_CONTROL, 0x50); // P
|
||||
|
||||
debugger_open = 1;
|
||||
inDebugger = true;
|
||||
}
|
||||
|
@ -2513,36 +2495,6 @@ void DebuggerEnChange(HWND hwndDlg, uint16 textBoxId, HWND hwndTextbox)
|
|||
}
|
||||
}
|
||||
|
||||
void DebuggerHotKey(HWND hwndDlg, UINT hotkeyId, uint16 keycode, uint16 mods)
|
||||
{
|
||||
// No idea if this is good programming. Should we use accelerators instead?
|
||||
if (GetForegroundWindow() != hwndDlg)
|
||||
return;
|
||||
|
||||
switch (hotkeyId)
|
||||
{
|
||||
// Do we want autorepeat on these? MOD_NOREPEAT doesn't seem to exist so idk what to do.
|
||||
case HKEY_STEP_ONE_ID:
|
||||
DebuggerBnClicked(hwndDlg, IDC_DEBUGGER_STEP_IN, NULL);
|
||||
break;
|
||||
case HKEY_STEP_OUT_ID:
|
||||
DebuggerBnClicked(hwndDlg, IDC_DEBUGGER_STEP_OUT, NULL);
|
||||
break;
|
||||
case HKEY_STEP_OVER_ID:
|
||||
DebuggerBnClicked(hwndDlg, IDC_DEBUGGER_STEP_OVER, NULL);
|
||||
break;
|
||||
case HKEY_RUN_ID:
|
||||
DebuggerBnClicked(hwndDlg, IDC_DEBUGGER_RUN, NULL);
|
||||
case HKEY_SEEK_ADDR_ID:
|
||||
SetFocus(GetDlgItem(hwndDlg, IDC_DEBUGGER_VAL_PCSEEK));
|
||||
SetDlgItemText(hDebug, IDC_DEBUGGER_VAL_PCSEEK, "");
|
||||
break;
|
||||
case HKEY_SEEK_PC_ID:
|
||||
DebuggerBnClicked(hwndDlg, IDC_DEBUGGER_SEEK_PC, NULL);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
INT_PTR CALLBACK DebuggerCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (uMsg)
|
||||
|
@ -2563,24 +2515,40 @@ INT_PTR CALLBACK DebuggerCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lP
|
|||
DebuggerMoveWindow(hwndDlg, LOWORD(lParam), HIWORD(lParam));
|
||||
break;
|
||||
case WM_COMMAND:
|
||||
switch (HIWORD(wParam))
|
||||
{
|
||||
case BN_CLICKED:
|
||||
DebuggerBnClicked(hwndDlg, LOWORD(wParam), (HWND)lParam);
|
||||
break;
|
||||
case LBN_DBLCLK:
|
||||
DebuggerLbnDblClk(hwndDlg, LOWORD(wParam), (HWND)lParam);
|
||||
break;
|
||||
case LBN_SELCANCEL:
|
||||
DebuggerLbnSelCancel(hwndDlg, LOWORD(wParam), (HWND)lParam);
|
||||
break;
|
||||
case LBN_SELCHANGE:
|
||||
DebuggerLbnSelChange(hwndDlg, LOWORD(wParam), (HWND)lParam);
|
||||
break;
|
||||
case EN_CHANGE:
|
||||
DebuggerEnChange(hwndDlg, LOWORD(wParam), (HWND)lParam);
|
||||
break;
|
||||
}
|
||||
// I know you can cleverly ignore this difference and have all your menu messages come through as BN_CLICKED messagse.
|
||||
// But then your accelerators come through as LBN_SELCHANGE messages, which makes absolutely no sense.
|
||||
if (lParam)
|
||||
// Normal messages
|
||||
switch (HIWORD(wParam))
|
||||
{
|
||||
case BN_CLICKED:
|
||||
DebuggerBnClicked(hwndDlg, LOWORD(wParam), (HWND)lParam);
|
||||
break;
|
||||
case LBN_DBLCLK:
|
||||
DebuggerLbnDblClk(hwndDlg, LOWORD(wParam), (HWND)lParam);
|
||||
break;
|
||||
case LBN_SELCANCEL:
|
||||
DebuggerLbnSelCancel(hwndDlg, LOWORD(wParam), (HWND)lParam);
|
||||
break;
|
||||
case LBN_SELCHANGE:
|
||||
DebuggerLbnSelChange(hwndDlg, LOWORD(wParam), (HWND)lParam);
|
||||
break;
|
||||
case EN_CHANGE:
|
||||
DebuggerEnChange(hwndDlg, LOWORD(wParam), (HWND)lParam);
|
||||
break;
|
||||
}
|
||||
else
|
||||
switch (HIWORD(wParam))
|
||||
{
|
||||
case 0:
|
||||
// Menu items
|
||||
DebuggerBnClicked(hwndDlg, LOWORD(wParam), (HWND)lParam);
|
||||
break;
|
||||
case 1:
|
||||
// Accelerators
|
||||
DebuggerBnClicked(hwndDlg, LOWORD(wParam), (HWND)lParam);
|
||||
break;
|
||||
}
|
||||
case WM_INITMENUPOPUP:
|
||||
DebuggerInitMenuPopup(hwndDlg, (HMENU)wParam, LOWORD(lParam), HIWORD(lParam));
|
||||
break;
|
||||
|
@ -2608,9 +2576,6 @@ INT_PTR CALLBACK DebuggerCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lP
|
|||
case WM_MBUTTONDOWN:
|
||||
DebuggerMButtonDown(hwndDlg, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), wParam);
|
||||
break;
|
||||
case WM_HOTKEY:
|
||||
DebuggerHotKey(hwndDlg, wParam, HIWORD(lParam), LOWORD(lParam));
|
||||
break;
|
||||
case WM_KEYDOWN:
|
||||
MessageBox(hwndDlg, "Die!", "I'm dead!", MB_YESNO | MB_ICONINFORMATION);
|
||||
break;
|
||||
|
|
|
@ -186,6 +186,7 @@ int ffbskip = 32; //Blit skips per blit when FF-ing
|
|||
|
||||
HINSTANCE fceu_hInstance;
|
||||
HACCEL fceu_hAccel;
|
||||
HACCEL debugger_hAccel;
|
||||
|
||||
HRESULT ddrval;
|
||||
|
||||
|
@ -377,6 +378,11 @@ int BlockingCheck()
|
|||
if(!handled && taseditorWindow.hwndFindNote && IsChild(taseditorWindow.hwndFindNote, msg.hwnd))
|
||||
handled = IsDialogMessage(taseditorWindow.hwndFindNote, &msg);
|
||||
|
||||
// Debugger
|
||||
if(!handled && hDebug)
|
||||
if(!(handled = TranslateAccelerator(hDebug, debugger_hAccel, &msg)))
|
||||
handled = IsDialogMessage(hDebug, &msg);
|
||||
|
||||
// Sound Config
|
||||
extern HWND uug;
|
||||
if(!handled && uug && IsChild(uug, msg.hwnd))
|
||||
|
@ -711,6 +717,7 @@ int main(int argc,char *argv[])
|
|||
|
||||
fceu_hInstance = GetModuleHandle(0);
|
||||
fceu_hAccel = LoadAccelerators(fceu_hInstance,MAKEINTRESOURCE(IDR_ACCELERATOR1));
|
||||
debugger_hAccel = LoadAccelerators(fceu_hInstance,MAKEINTRESOURCE(IDR_DEBUGGER_ACCELERATOR));
|
||||
|
||||
// Get the base directory
|
||||
GetBaseDirectory();
|
||||
|
|
|
@ -3129,6 +3129,16 @@ BEGIN
|
|||
"R", IDC_C_WATCH_REMOVE, VIRTKEY
|
||||
END
|
||||
|
||||
IDR_DEBUGGER_ACCELERATOR ACCELERATORS
|
||||
BEGIN
|
||||
VK_F11, IDC_DEBUGGER_STEP_IN, VIRTKEY
|
||||
VK_F11, IDC_DEBUGGER_STEP_OUT, VIRTKEY, SHIFT
|
||||
VK_F10, IDC_DEBUGGER_STEP_OVER, VIRTKEY
|
||||
VK_F5, IDC_DEBUGGER_RUN, VIRTKEY
|
||||
"A", IDC_DEBUGGER_VAL_PCSEEK, VIRTKEY, CONTROL
|
||||
"P", IDC_DEBUGGER_SEEK_PC, VIRTKEY, CONTROL
|
||||
END
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
|
|
@ -1218,6 +1218,7 @@
|
|||
#define ID_DEBUGGER_SHOW_TRACE_INFO 45554
|
||||
#define ID_DEBUGGER_BREAK_UNLOGGED_CODE 45555
|
||||
#define ID_DEBUGGER_BREAK_UNLOGGED_DATA 45556
|
||||
#define IDR_DEBUGGER_ACCELERATOR 45557
|
||||
#define MW_VALUELABEL2 65423
|
||||
#define MW_VALUELABEL1 65426
|
||||
#define IDC_STATIC_SLASHTEXT 65442
|
||||
|
|
Loading…
Reference in New Issue