projects
/
u
/
mdw
/
putty
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add an invisible System Caret for blind-helper-software to track
[u/mdw/putty]
/
pageant.c
diff --git
a/pageant.c
b/pageant.c
index
7133c8d
..
f8d7ad2
100644
(file)
--- a/
pageant.c
+++ b/
pageant.c
@@
-127,7
+127,8
@@
void add_keyfile(char *filename) {
int ret;
int attempts;
int ret;
int attempts;
- needs_pass = rsakey_encrypted(filename);
+ /* FIXME: we can acquire comment here and use it in dialog */
+ needs_pass = rsakey_encrypted(filename, NULL);
attempts = 0;
key = malloc(sizeof(*key));
do {
attempts = 0;
key = malloc(sizeof(*key));
do {
@@
-420,6
+421,9
@@
static LRESULT CALLBACK WndProc (HWND hwnd, UINT message,
POINT cursorpos;
GetCursorPos(&cursorpos);
PostMessage(hwnd, WM_SYSTRAY2, cursorpos.x, cursorpos.y);
POINT cursorpos;
GetCursorPos(&cursorpos);
PostMessage(hwnd, WM_SYSTRAY2, cursorpos.x, cursorpos.y);
+ } else if (lParam == WM_LBUTTONDBLCLK) {
+ /* Equivalent to IDM_VIEWKEYS. */
+ PostMessage(hwnd, WM_COMMAND, IDM_VIEWKEYS, 0);
}
break;
case WM_SYSTRAY2:
}
break;
case WM_SYSTRAY2:
@@
-444,6
+448,13
@@
static LRESULT CALLBACK WndProc (HWND hwnd, UINT message,
keylist = CreateDialog (instance, MAKEINTRESOURCE(211),
NULL, KeyListProc);
ShowWindow (keylist, SW_SHOWNORMAL);
keylist = CreateDialog (instance, MAKEINTRESOURCE(211),
NULL, KeyListProc);
ShowWindow (keylist, SW_SHOWNORMAL);
+ /*
+ * Sometimes the window comes up minimised / hidden
+ * for no obvious reason. Prevent this.
+ */
+ SetForegroundWindow(keylist);
+ SetWindowPos (keylist, HWND_TOP, 0, 0, 0, 0,
+ SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
}
break;
}
}
break;
}
@@
-534,6
+545,15
@@
int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) {
WNDCLASS wndclass;
MSG msg;
WNDCLASS wndclass;
MSG msg;
+ /*
+ * First bomb out totally if we are already running.
+ */
+ if (FindWindow("Pageant", "Pageant")) {
+ MessageBox(NULL, "Pageant is already running", "Pageant Error",
+ MB_ICONERROR | MB_OK);
+ return 0;
+ }
+
instance = inst;
if (!prev) {
instance = inst;
if (!prev) {
@@
-597,16
+617,28
@@
int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) {
/*
* Process the command line and add RSA keys as listed on it.
/*
* Process the command line and add RSA keys as listed on it.
- * FIXME: we don't support spaces in filenames here. We should.
*/
{
*/
{
- char *p = cmdline;
+ char *p;
+ int inquotes = 0;
+ p = cmdline;
while (*p) {
while (*p && isspace(*p)) p++;
if (*p && !isspace(*p)) {
while (*p) {
while (*p && isspace(*p)) p++;
if (*p && !isspace(*p)) {
- char *q = p;
- while (*p && !isspace(*p)) p++;
- if (*p) *p++ = '\0';
+ char *q = p, *pp = p;
+ while (*p && (inquotes || !isspace(*p)))
+ {
+ if (*p == '"') {
+ inquotes = !inquotes;
+ p++;
+ continue;
+ }
+ *pp++ = *p++;
+ }
+ if (*pp) {
+ if (*p) p++;
+ *pp++ = '\0';
+ }
add_keyfile(q);
}
}
add_keyfile(q);
}
}