📄 pkmsgprc.c
字号:
PGPgmDefaultNotificationProc (ppks->hGM, lParam);
switch (pnmh->code) {
case TLN_CONTEXTMENU :
ppks->bGroupsFocused = TRUE;
ppks->uGroupSelectionFlags = ((LPNM_TREELIST)lParam)->flags;
PKContextMenu (ppks, hwnd,
((LPNM_TREELIST)lParam)->ptDrag.x,
((LPNM_TREELIST)lParam)->ptDrag.y);
break;
case TLN_SELCHANGED :
ppks->bGroupsFocused = TRUE;
ppks->uGroupSelectionFlags = ((LPNM_TREELIST)lParam)->flags;
PKSetToolbarButtonStates (ppks);
break;
case TLN_KEYDOWN :
switch (((TL_KEYDOWN*)lParam)->wVKey) {
case VK_TAB :
SendMessage (ppks->klConfig.hwndStatusBar, SB_SETTEXT,
STATUS_MSG_PANE, (LPARAM)"");
ppks->bGroupsFocused = !ppks->bGroupsFocused;
if (ppks->bGroupsFocused)
SetFocus (ppks->hwndTreeListGroups);
else
SetFocus (ppks->hwndTreeList);
PKSetToolbarButtonStates (ppks);
break;
}
break;
case TLN_HELP :
PostMessage (hwnd, WM_COMMAND, IDM_HELPTOPICS, 0);
break;
default :
break;
}
}
// did it come from the search window keyserver code ?
else if ((ppks->hwndSearchControl) &&
(pnmh->hwndFrom == ppks->hwndSearchControl))
{
switch (pnmh->code)
{
case SEARCH_REQUEST_SIZING:
{
PSIZEREQUEST pRequest = (PSIZEREQUEST)lParam;
RECT rc;
GetClientRect (ppks->hwndTreeList, &rc);
if ((rc.bottom - rc.top) > (pRequest->delta + 50))
return TRUE;
else
return FALSE;
}
case SEARCH_SIZING:
{
PSIZEREQUEST pRequest = (PSIZEREQUEST)lParam;
RECT rcTool, rcMain;
GetWindowRect (pnmh->hwndFrom, &rcTool);
ppks->iToolHeight = rcTool.bottom-rcTool.top;
GetClientRect (hwnd, &rcMain);
SetWindowPos (ppks->hwndTreeList, NULL,
0, ppks->iToolHeight,
rcMain.right-rcMain.left,
rcMain.bottom-rcMain.top
-ppks->iToolHeight
-s_uStatusBarHeight,
SWP_NOZORDER);
InvalidateRect (hwnd, NULL, FALSE);
break;
}
case SEARCH_DISPLAY_KEYSET:
{
PSEARCHRESULT pResult = (PSEARCHRESULT)lParam;
PGPKeySetRef KeySetPrevious;
HCURSOR hCursorOld;
CHAR sz[64];
// stop LEDs, if going
if (ppks->bSearchInProgress)
{
KillTimer (hwnd, LEDTIMER);
ppks->bSearchInProgress = FALSE;
ppks->iStatusValue = -1;
InvalidateRect (ppks->klConfig.hwndStatusBar,
NULL, FALSE);
UpdateWindow (ppks->klConfig.hwndStatusBar);
}
// if error, post message and drop out
if (IsPGPError (pResult->error) &&
(pResult->error !=
kPGPError_ServerPartialSearchResults))
{
KillTimer (hwnd, LEDTIMER);
ppks->bSearchInProgress = FALSE;
ppks->iStatusValue = -1;
SendMessage (ppks->klConfig.hwndStatusBar,
SB_SETTEXT, STATUS_MSG_PANE, (LPARAM)"");
InvalidateRect (ppks->klConfig.hwndStatusBar,
NULL, FALSE);
PGPclErrorBox (NULL, pResult->error);
break;
}
// load new keyset into window
LoadString (g_hinst, IDS_SYNCINGKEYSETS, sz, sizeof(sz));
SendMessage (ppks->klConfig.hwndStatusBar, SB_SETTEXT,
STATUS_MSG_PANE, (LPARAM)sz);
UpdateWindow (ppks->klConfig.hwndStatusBar);
hCursorOld = SetCursor (LoadCursor (NULL, IDC_WAIT));
KeySetPrevious = ppks->keysetDisp;
ppks->keysetDisp = (PGPKeySetRef)(pResult->pData);
if (!(pResult->flags & FLAG_SEARCH_CURRENT))
{
if (pResult->flags & FLAG_SEARCH_LOCAL_KEYSET)
{
if (!ppks->bLocalKeySet)
PKDeleteAllObjectPropertiesWindows (ppks);
ppks->bLocalKeySet = TRUE;
}
else
{
PKDeleteAllObjectPropertiesWindows (ppks);
ppks->bLocalKeySet = FALSE;
}
}
if (ppks->bLocalKeySet)
{
ppks->klConfig.keyserver.protocol =
kPGPKeyServerProtocol_Invalid;
ppks->klConfig.uOptions =
kPGPclKeyList_EnableReloads |
kPGPclKeyList_EnableDragOut;
if (!g_bExpertMode)
ppks->klConfig.uOptions |=
kPGPclKeyList_GreenDotMode;
if (g_bMarginalAsInvalid)
ppks->klConfig.uOptions |=
kPGPclKeyList_MarginalIsInvalid;
if (ppks->bReadOnly)
ppks->klConfig.uOptions |=
kPGPclKeyList_ReadOnly;
}
else
{
memcpy (&ppks->klConfig.keyserver,
&pResult->keyserver,
sizeof(PGPKeyServerEntry));
ppks->klConfig.uOptions =
kPGPclKeyList_EnableDragOut;
if (!g_bExpertMode)
ppks->klConfig.uOptions |=
kPGPclKeyList_GreenDotMode;
if (g_bMarginalAsInvalid)
ppks->klConfig.uOptions |=
kPGPclKeyList_MarginalIsInvalid;
if (pResult->flags & FLAG_AREA_PENDING)
ppks->klConfig.uOptions |=
kPGPclKeyList_PendingBucket;
}
ppks->klConfig.uMask = kPGPclKeyList_Options |
kPGPclKeyList_KeyServer;
PGPclKeyListConfigure (ppks->hKL, &(ppks->klConfig));
// display keyset
PGPclKeyListLoadKeys (ppks->hKL,
ppks->keydbMain, ppks->keysetDisp);
SetFocus (ppks->hwndTreeList);
// sync downloaded keyset with main and redisplay
if (PGPKeySetRefIsValid (ppks->keysetDisp))
{
PGPCheckKeyRingSigs (ppks->keysetDisp,
ppks->keydbMain, TRUE, NULL, NULL);
PGPclKeyListLoadKeys (ppks->hKL,
ppks->keydbMain, ppks->keysetDisp);
}
sDisplayKSKeyResult (ppks->keysetDisp,
ppks->klConfig.hwndStatusBar,
pResult->error);
// stop LEDs, if going
if (ppks->bSearchInProgress)
{
KillTimer (hwnd, LEDTIMER);
ppks->bSearchInProgress = FALSE;
ppks->iStatusValue = -1;
InvalidateRect (ppks->klConfig.hwndStatusBar,
NULL, FALSE);
}
if (KeySetPrevious)
{
PGPKeyDBRef keydbPrevious;
keydbPrevious = PGPPeekKeySetKeyDB (KeySetPrevious);
PGPFreeKeySet (KeySetPrevious);
if (!(pResult->flags & FLAG_SEARCH_CURRENT) &&
(PGPKeyDBRefIsValid (keydbPrevious)) &&
(keydbPrevious != ppks->keydbMain))
{
PGPFreeKeyDB (keydbPrevious);
}
}
SetCursor (hCursorOld);
SendMessage (ppks->hwndSearchControl,
SEARCH_SET_FOCUS, 0, 0);
break;
}
case SEARCH_PROGRESS :
{
PSEARCHPROGRESS pProgress = (PSEARCHPROGRESS)lParam;
if (pProgress->total)
{
// we're starting a query
if (!ppks->bSearchInProgress)
{
ppks->bSearchInProgress = TRUE;
ppks->klConfig.uOptions |=
kPGPclKeyList_DisableStatusBar;
ppks->klConfig.uMask = kPGPclKeyList_Options;
PGPclKeyListConfigure (ppks->hKL, &(ppks->klConfig));
ppks->iStatusValue = 0;
if (pProgress->step == SEARCH_PROGRESS_INFINITE)
{
ppks->iStatusDirection = 1;
SetTimer (hwnd, LEDTIMER,
LEDTIMERPERIOD, NULL);
}
else
{
ppks->iStatusDirection = 0;
ppks->iStatusValue = 0;
}
// reset icon to "unlocked"
SendMessage (ppks->klConfig.hwndStatusBar,
SB_SETICON, ICON_PANE,
(LPARAM)g_hiconOpenLock);
// signal that we're not authenticated yet
ppks->iTLSstatus = TLS_NOTAUTHENTICATED;
}
else
{
if (pProgress->step != SEARCH_PROGRESS_INFINITE)
{
ppks->iStatusDirection = 0;
ppks->iStatusValue =
(pProgress->step * 9) / pProgress->total;
InvalidateRect (ppks->klConfig.hwndStatusBar,
NULL, FALSE);
}
}
}
else
{
if (ppks->bSearchInProgress)
{
KillTimer (hwnd, LEDTIMER);
ppks->bSearchInProgress = FALSE;
ppks->iStatusValue = -1;
InvalidateRect (ppks->klConfig.hwndStatusBar,
NULL, FALSE);
}
}
SendMessage (ppks->klConfig.hwndStatusBar, SB_SETTEXT,
STATUS_MSG_PANE, (LPARAM)(pProgress->message));
break;
}
case SEARCH_SECURE_STATUS :
{
PSEARCHSECURE pSecure = (PSEARCHSECURE)lParam;
if (pSecure->secure)
{
SendMessage (ppks->klConfig.hwndStatusBar,
SB_SETICON, ICON_PANE,
(LPARAM)g_hiconClosedLock);
ppks->iTLSstatus = TLS_AUTHENTICATED;
lstrcpy (ppks->szTLSserver, pSecure->szServerName);
ppks->tlsCipher = pSecure->tlsCipher;
if (PGPKeyDBRefIsValid (ppks->keydbAuth))
PGPFreeKeyDB (ppks->keydbAuth);
PGPNewKeyDB (g_context, &ppks->keydbAuth);
PGPCopyKeyDBObj (pSecure->keyAuth,
ppks->keydbAuth, &ppks->keyAuth);
}
else
{
SendMessage (ppks->klConfig.hwndStatusBar,
SB_SETICON, ICON_PANE,
(LPARAM)g_hiconOpenLock);
ppks->iTLSstatus = TLS_NOTAUTHENTICATED;
}
break;
}
case SEARCH_ABORT :
{
PSEARCHABORT pAbort = (PSEARCHABORT)lParam;
CHAR sz[256];
if (ppks->bSearchInProgress)
{
KillTimer (hwnd, LEDTIMER);
ppks->bSearchInProgress = FALSE;
ppks->iStatusValue = -1;
InvalidateRect (ppks->klConfig.hwndStatusBar,
NULL, FALSE);
}
LoadString (g_hinst, IDS_SEARCHABORTED,
sz, sizeof(sz));
SendMessage (ppks->klConfig.hwndStatusBar, SB_SETTEXT,
STATUS_MSG_PANE, (LPARAM)sz);
SendMessage (ppks->hwndSearchControl,
SEARCH_SET_FOCUS, 0, 0);
break;
}
default :
break;
}
if (!ppks->bSearchInProgress)
{
ppks->klConfig.uOptions &= ~kPGPclKeyList_DisableStatusBar;
ppks->klConfig.uMask = kPGPclKeyList_Options;
PGPclKeyListConfigure (ppks->hKL, &(ppks->klConfig));
}
}
// did it come from the status bar?
else if ((ppks->klConfig.hwndStatusBar) &&
(pnmh->hwndFrom == ppks->klConfig.hwndStatusBar))
{
if (pnmh->code == NM_CLICK)
{
POINT pt;
GetCursorPos (&pt);
ScreenToClient (ppks->klConfig.hwndStatusBar, &pt);
if (pt.x <= ICONWIDTH)
{
if ((ppks->uFlags & PK_MAINWINDOW) &&
(g_uNumTokens > 0))
{
if (PKTokenProperties (ppks))
PostMessage (hwnd, PK_M_RELOADKEYRINGS, 0, 0);
}
else if (ppks->uFlags & PK_SEARCHWINDOW)
{
switch (ppks->iTLSstatus) {
case TLS_NOSEARCHYET :
PKMessageBox (hwnd, IDS_CAPTIONINFO,
IDS_NOCONNECTIONYET,
MB_OK|MB_ICONINFORMATION);
break;
case TLS_NOTAUTHENTICATED :
PKMessageBox (hwnd, IDS_CAPTIONINFO,
IDS_CONNECTIONNOTAUTHENTICATED,
MB_OK|MB_ICONINFORMATION);
break;
case TLS_AUTHENTICATED :
PGPclConfirmRemoteAuthentication (
g_context, hwnd, ppks->szTLSserver,
ppks->keyAuth, ppks->tlsCipher,
ppks->keydbMain,
kPGPclAuthShowAuthentication);
break;
}
}
}
}
}
// else assume it's from the tooltip control of the toolbar
else if (pnmh->code == TTN_NEEDTEXT)
PKGetToolbarTooltipText ((LPTOOLTIPTEXT)lParam);
}
break;
case WM_PAINT :
{
HDC hdc;
PAINTSTRUCT ps;
RECT rc;
HPEN hpen;
HPEN hpenOld;
INT iWidth;
ppks = (PGPKEYSSTRUCT*)GetWindowLong (hwnd, GWL_USERDATA);
hdc = BeginPaint (hwnd, &ps);
if (ppks->hwndToolBar && (ppks->iToolHeight > 0))
{
GetWindowRect (hwnd, &rc);
iWidth = rc.right-rc.left;
hpen = CreatePen (PS_SOLID, 0, GetSysColor (COLOR_3DSHADOW));
hpenOld = SelectObject (hdc, hpen);
MoveToEx (hdc, 0, 0, NULL);
LineTo (hdc, iWidth, 0);
hpen = CreatePen (PS_SOLID, 0, GetSysColor (COLOR_3DHILIGHT));
DeleteObject (SelectObject (hdc, hpen));
MoveToEx (hdc, 0, 1, NULL);
LineTo (hdc, iWidth, 1);
DeleteObject (SelectObject (hdc, hpenOld));
}
EndPaint (hwnd, &ps);
}
return 0;
case WM_TIMER :
ppks = (PGPKEYSSTRUCT*)GetWindowLong (hwnd, GWL_USERDATA);
// it's time to load the keyring from disk
if (wParam == RELOADTIMER)
{
KillTimer (hwnd, wParam);
// do the actual loading
if (sReloadKeyrings (ppks))
{
// repaint window
InvalidateRect (hwnd, NULL, FALSE);
PKSetToolbarButtonStates (ppks);
// store the file names for backup purposes
PKKeyDBOpened (ppks);
// do some first-time post-processing
if (s_bFirstKeyringLoad)
{
s_bFirstKeyringLoad = FALSE;
// import key files if passed from the command line
sProcessFileList (GetCommandLine (), ppks, TRUE, TRUE);
// display groups if groups were displayed last session
if (g_bShowGroups)
{
PostMessage (hwnd, WM_COMMAND,
MAKEWPARAM (IDM_VIEWGROUPS, 0), 0);
}
// compute when we should next update CRLs
PGPclScheduleNextCRLUpdate (g_context, ppks->keydbMain);
SetFocus (ppks->hwndTreeList);
}
// if there is an open search window, notify it of change
if ((ppks->uFlags & PK_KEYWINDOW) && s_hwndOpenSearch)
{
PostMessage (s_hwndOpenSearch,
PK_M_RELOADKEYRINGS, 0, (LPARAM)(ppks->keydbMain));
}
// notify the token dialog of change
PKReloadTokenProperties (TRUE);
}
}
else if (wParam == LEDTIMER)
{
ppks->iStatusValue += ppks->iStatusDirection;
if (ppks->iStatusValue <= 0)
{
ppks->iStatusValue = 0;
ppks->iStatusDirection = 1;
}
else if (ppks->iStatusValue >= NUMLEDS-1)
{
ppks->iStatusValue = NUMLEDS-1;
ppks->iStatusDirection = -1;
}
InvalidateRect (ppks->klConfig.hwndStatusBar, NULL, FALSE);
}
break;
case PK_M_REFRESHKEYRINGS :
ppks = (PGPKEYSSTRUCT*)GetWindowLong (hwnd, GWL_USERDATA);
if ((HWND)wParam != hwnd)
{
if (lParam)
{
if (ppks->uFlags & PK_MAINWINDOW)
{
PGPclKeyListLoadKeys (ppks->hKL, NULL, NULL);
PGPclKeyListLoadKeys (
ppks->hKL, ppks->keydbMain,
PGPPeekKeyDBRootKeySet (ppks->keydbMain));
}
else if (ppks->uFlags & PK_SEARCHWINDOW)
{
if (ppks->bLocalKeySet)
{
PGPclKeyListLoadKeys (ppks->hKL, NULL, NULL);
PGPclKeyListLoadKeys (
ppks->hKL, ppks->keydbMain, ppks->keysetDisp);
}
}
}
else
PGPclKeyListReloadKeys (ppks->hKL, FALSE);
}
if ((ppks->uFlags & PK_MAINWINDOW) &&
(ppks->bGroupsVisible))
{
PGPgmReLoadGroups (ppks->hGM);
}
if (ppks->uFlags & PK_PDAWINDOW)
{
PGPKeyDBRef keydbDefault;
if (IsntPGPError (PGPclOpenDefaultKeyrings (
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -