Index: dll/win32/shimgvw/comsup.c =================================================================== --- dll/win32/shimgvw/comsup.c (revision 71060) +++ dll/win32/shimgvw/comsup.c (working copy) @@ -1,7 +1,7 @@ #define INITGUID #include -#include +#include "comsup.h" LONG LockCount; LONG ObjectCount; Index: dll/win32/shimgvw/resource.h =================================================================== --- dll/win32/shimgvw/resource.h (revision 71060) +++ dll/win32/shimgvw/resource.h (working copy) @@ -58,3 +58,6 @@ #define IDS_TOOLTIP_ROT_COUNCW 406 #define IDS_TOOLTIP_PRINT 407 #define IDS_TOOLTIP_SAVEAS 408 + +/* Keyboard accelerators */ +#define IDR_ACCELERATOR 600 Index: dll/win32/shimgvw/shimgvw.c =================================================================== --- dll/win32/shimgvw/shimgvw.c (revision 71060) +++ dll/win32/shimgvw/shimgvw.c (working copy) @@ -535,22 +535,9 @@ return 0L; } - case WM_KEYDOWN: - switch (LOWORD(wParam)) - { - case VK_LEFT: - PostMessage(hwnd, WM_COMMAND, MAKEWPARAM(IDC_PREV, BN_CLICKED), (LPARAM)NULL); - break; - - case VK_RIGHT: - PostMessage(hwnd, WM_COMMAND, MAKEWPARAM(IDC_NEXT, BN_CLICKED), (LPARAM)NULL); - break; - } - break; - case WM_COMMAND: { - switch (wParam) + switch (LOWORD(wParam)) { case IDC_PREV: { @@ -684,6 +671,7 @@ WCHAR szInitialFile[MAX_PATH]; HWND hMainWnd; MSG msg; + HACCEL hKbdAccel; if (!ImageView_LoadSettings()) { @@ -721,7 +709,7 @@ 0, 0, NULL, NULL, hInstance, NULL); // make sure the path has no quotes on it - wcscpy(szInitialFile, szFileName); + StringCbCopyW(szInitialFile, sizeof(szInitialFile), szFileName); PathUnquoteSpacesW(szInitialFile); currentFile = pBuildFileList(szInitialFile); @@ -730,17 +718,29 @@ pLoadImageFromNode(currentFile, hMainWnd); } + /* Create accelerator table for keystrokes */ + hKbdAccel = LoadAcceleratorsW(hInstance, MAKEINTRESOURCEW(IDR_ACCELERATOR)); + // Show it ShowWindow(hMainWnd, SW_SHOW); UpdateWindow(hMainWnd); // Message Loop - while(GetMessage(&msg,NULL,0,0)) + for (;;) { - TranslateMessage(&msg); - DispatchMessageW(&msg); + if (GetMessage(&msg,NULL,0,0) <= 0) + break; + + if (!TranslateAccelerator(hMainWnd, hKbdAccel, &msg)) + { + TranslateMessage(&msg); + DispatchMessageW(&msg); + } } + /* Destroy accelerator table */ + DestroyAcceleratorTable(hKbdAccel); + pFreeFileList(currentFile); if (image) Index: dll/win32/shimgvw/shimgvw.rc =================================================================== --- dll/win32/shimgvw/shimgvw.rc (revision 71060) +++ dll/win32/shimgvw/shimgvw.rc (working copy) @@ -1,4 +1,5 @@ #include +#include #include "resource.h" @@ -21,6 +22,17 @@ IDB_ROT1ICON BITMAP "res/rot1.bmp" IDB_ROT2ICON BITMAP "res/rot2.bmp" +IDR_ACCELERATOR ACCELERATORS DISCARDABLE +BEGIN + VK_LEFT, IDC_PREV, VIRTKEY + VK_RIGHT, IDC_NEXT, VIRTKEY + VK_ADD, IDC_ZOOMP, VIRTKEY + VK_SUBTRACT, IDC_ZOOMM, VIRTKEY + "K", IDC_ROT1, VIRTKEY, CONTROL + "L", IDC_ROT2, VIRTKEY, CONTROL + "S", IDC_SAVE, VIRTKEY, CONTROL +END + /* UTF-8 */ #pragma code_page(65001)