source: trunk/dll/common.c@ 551

Last change on this file since 551 was 551, checked in by Gregg Young, 18 years ago

Indentation cleanup

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 20.1 KB
Line 
1
2/***********************************************************************
3
4 $Id: common.c 551 2007-02-28 01:33:51Z gyoung $
5
6 Common window functions
7
8 Copyright (c) 1993, 1998 M. Kimes
9 Copyright (c) 2001, 2006 Steven H. Levine
10
11 13 Aug 05 SHL Renames
12 22 Jul 06 SHL Check more run time errors
13 15 Aug 06 SHL Use Dos_Error
14 03 Nov 06 SHL Rework thread usage count logic
15
16***********************************************************************/
17
18#define INCL_DOS
19#define INCL_DOSERRORS
20#define INCL_WIN
21#define INCL_GPI
22#include <os2.h>
23
24#include <stdarg.h>
25#include <stdio.h>
26#include <stdlib.h>
27#include <string.h>
28#include <ctype.h>
29#include <time.h>
30#include <direct.h>
31#include <share.h>
32#include <limits.h>
33
34#include "fm3dll.h"
35#include "fm3dlg.h"
36#include "fm3str.h"
37#include "mle.h"
38
39#pragma data_seg(DATA1)
40
41static PSZ pszSrcFile = __FILE__;
42
43#pragma alloc_text(COMMON,CommonFrameWndProc,CommonTextProc,CommonTextPaint)
44#pragma alloc_text(COMMON1,CommonCreateTextChildren,CommonCreateMainChildren)
45#pragma alloc_text(COMMON2,CommonDriveCmd,CommonTextButton)
46#pragma alloc_text(COMMON3,CommonMainWndProc,IncrThreadUsage,DecrThreadUsage)
47#pragma alloc_text(COMMON4,CommonCnrProc)
48#pragma alloc_text(COMMON5,OpenDirCnr)
49
50MRESULT EXPENTRY CommonFrameWndProc(USHORT id,
51 HWND hwnd,
52 ULONG msg, MPARAM mp1, MPARAM mp2)
53{
54 PFNWP oldproc = (PFNWP) WinQueryWindowPtr(hwnd, 0);
55
56 switch (msg) {
57 case UM_TIMER:
58 case UM_ACTION:
59 case UM_SHOWME:
60 case UM_OPENWINDOWFORME:
61 case UM_MINIMIZE:
62 case UM_MAXIMIZE:
63 case UM_CONTAINERDIR:
64 case UM_FILTER:
65 case UM_INITMENU:
66 case UM_COMMAND:
67 case UM_UPDATERECORD:
68 case UM_UPDATERECORDLIST:
69 case WM_COMMAND:
70 case MM_PORTHOLEINIT:
71 case WM_INITMENU:
72 case UM_CONTAINER_FILLED:
73 case UM_FILESMENU:
74 return WinSendMsg(WinWindowFromID(hwnd, FID_CLIENT), msg, mp1, mp2);
75
76 case UM_CONTEXTMENU:
77 PostMsg(WinWindowFromID(hwnd, FID_CLIENT), msg, mp1, mp2);
78 return 0;
79
80 case UM_CONTAINERHWND:
81 return MRFROMLONG(WinWindowFromID(hwnd, id));
82
83 case DM_DROP:
84 case DM_DRAGOVER:
85 case DM_DRAGLEAVE:
86 case DM_DROPHELP:
87 {
88 CNRDRAGINFO cnd;
89 USHORT dcmd;
90
91 switch (msg) {
92 case DM_DROP:
93 dcmd = CN_DROP;
94 break;
95 case DM_DRAGOVER:
96 dcmd = CN_DRAGOVER;
97 break;
98 case DM_DRAGLEAVE:
99 dcmd = CN_DRAGLEAVE;
100 break;
101 case DM_DROPHELP:
102 dcmd = CN_DROPHELP;
103 break;
104 }
105 cnd.pDragInfo = (PDRAGINFO) mp1;
106 cnd.pRecord = NULL;
107 return WinSendMsg(WinWindowFromID(hwnd, FID_CLIENT),
108 WM_CONTROL, MPFROM2SHORT(id, dcmd), MPFROMP(&cnd));
109 }
110
111 case UM_RESCAN:
112 if (fAutoTile &&
113 !fAmClosing && !fNoTileUpdate && !ParentIsDesktop(hwnd, (HWND) 0))
114 PostMsg(WinQueryWindow(hwnd, QW_PARENT), UM_RESCAN, MPVOID, MPVOID);
115 return 0;
116
117 case WM_MINMAXFRAME:
118 {
119 PSWP pswp = (PSWP) mp1;
120 MRESULT rc;
121
122 rc = oldproc(hwnd, msg, mp1, mp2);
123 if (pswp->fl & (SWP_MINIMIZE | SWP_HIDE | SWP_RESTORE))
124 WinSendMsg(hwnd, UM_RESCAN, MPVOID, MPVOID);
125 return rc;
126 }
127
128 case WM_DESTROY:
129 WinSendMsg(hwnd, UM_RESCAN, MPVOID, MPVOID);
130 break;
131 }
132 return oldproc(hwnd, msg, mp1, mp2);
133}
134
135MRESULT EXPENTRY CommonTextProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
136{
137 switch (msg) {
138 case WM_CREATE:
139 {
140 MRESULT rc;
141 char font[] = "8.Helv";
142
143 rc = PFNWPStatic(hwnd, msg, mp1, mp2);
144 switch (WinQueryWindowUShort(hwnd, QWS_ID)) {
145 case DIR_SORT:
146 case DIR_VIEW:
147 case DIR_FILTER:
148 *font = '7';
149 }
150 SetPresParams(hwnd, &RGBGREY, &RGBBLACK, &RGBBLACK, font);
151 return rc;
152 }
153 }
154 return PFNWPStatic(hwnd, msg, mp1, mp2);
155}
156
157void CommonTextPaint(HWND hwnd, HPS hps)
158{
159 int x;
160 USHORT ids[] = { DIR_FOLDERICON, DIR_TOTALS, DIR_SELECTED, DIR_VIEW,
161 DIR_FILTER, DIR_SORT, DIR_MAX, 0
162 };
163 BOOL bools[] = { TRUE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE };
164
165 for (x = 0; ids[x]; x++) {
166 if (WinWindowFromID(hwnd, ids[x]) != (HWND) 0)
167 PaintRecessedWindow(WinWindowFromID(hwnd, ids[x]), hps,
168 bools[x], FALSE);
169 }
170}
171
172void CommonCreateTextChildren(HWND hwnd, char *class, USHORT * ids)
173{
174 int x;
175 CHAR s[33];
176 ULONG attrs;
177 HWND hwndTmp;
178
179 if (!hwnd || !class || !ids) {
180 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
181 return;
182 }
183
184 for (x = 0; ids[x]; x++) {
185 *s = 0;
186 switch (ids[x]) {
187 case DIR_SORT:
188 case DIR_FILTER:
189 case DIR_VIEW:
190 attrs = SS_TEXT | DT_LEFT | DT_VCENTER;
191 break;
192 case DIR_FOLDERICON:
193 case DIR_MAX:
194 attrs = SS_BITMAP;
195 sprintf(s, "#%d", ids[x]);
196 break;
197 default:
198 attrs = SS_TEXT | DT_CENTER | DT_VCENTER;
199 break;
200 }
201 hwndTmp = WinCreateWindow(hwnd, class, s, attrs, 0, 0, 0, 0, hwnd,
202 HWND_TOP, ids[x], NULL, NULL);
203 if (!hwndTmp)
204 Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
205 } // for
206}
207
208void CommonDriveCmd(HWND hwnd, char *drive, USHORT cmd)
209{
210 char dv[CCHMAXPATH];
211
212 if (!drive || !*drive)
213 return;
214 strcpy(dv, drive);
215 MakeValidDir(dv);
216
217 switch (cmd) {
218 case IDM_MKDIR:
219 PMMkDir(hwnd, dv, FALSE);
220 break;
221 case IDM_INFO:
222 WinDlgBox(HWND_DESKTOP,
223 HWND_DESKTOP,
224 DrvInfoProc, FM3ModHandle, INFO_FRAME, (PVOID) dv);
225 break;
226 case IDM_DRVFLAGS:
227 if (WinDlgBox(HWND_DESKTOP,
228 hwnd,
229 SetDrvProc,
230 FM3ModHandle, DVS_FRAME, MPFROMP(dv)) && hwndTree)
231 PostMsg(hwndTree, WM_COMMAND, MPFROM2SHORT(IDM_UPDATE, 0), MPVOID);
232 break;
233 case IDM_SIZES:
234 WinDlgBox(HWND_DESKTOP,
235 HWND_DESKTOP, DirSizeProc, FM3ModHandle, DSZ_FRAME, dv);
236 break;
237 case IDM_SHOWALLFILES:
238 StartSeeAll(HWND_DESKTOP, FALSE, dv);
239 break;
240 case IDM_UNDELETE:
241 WinDlgBox(HWND_DESKTOP,
242 hwnd, UndeleteDlgProc, FM3ModHandle, UNDEL_FRAME, MPFROMP(dv));
243 break;
244 case IDM_CHKDSK:
245 runemf2(SEPARATE | WINDOWED,
246 hwnd, NULL, NULL, "PMCHKDSK.EXE %c:", toupper(*dv));
247 break;
248 case IDM_OPTIMIZE:
249 {
250 CHAR FileSystem[CCHMAXPATH];
251 ULONG type;
252
253 CheckDrive(*dv, FileSystem, &type);
254 if (*FileSystem) {
255 strcat(FileSystem, "OPT.CMD");
256 runemf2(SEPARATE | WINDOWED,
257 hwnd,
258 NULL,
259 NULL,
260 "%s /C %s %c:", GetCmdSpec(FALSE), FileSystem, toupper(*dv));
261 }
262 }
263 break;
264 case IDM_FORMAT:
265 runemf2(SEPARATE | WINDOWED,
266 hwnd, NULL, NULL, "PMFORMAT.EXE %c:", toupper(*dv));
267 break;
268
269#if 0 // fixme to be gone?
270
271 case IDM_CLOSETRAY:
272 if (driveflags[*dv - 'A'] & DRIVE_CDROM) {
273
274 BYTE parm[4] = { "CD01" };
275 ULONG dlen, plen;
276 HFILE hfile;
277 APIRET rc;
278
279 dv[2] = 0;
280 rc = DosOpen(dv,
281 &hfile,
282 &dlen,
283 0,
284 0,
285 OPEN_ACTION_OPEN_IF_EXISTS |
286 OPEN_ACTION_CREATE_IF_NEW,
287 OPEN_FLAGS_DASD |
288 OPEN_FLAGS_FAIL_ON_ERROR | OPEN_SHARE_DENYNONE, NULL);
289 if (rc)
290 Dos_Error(MB_CANCEL, rc, hwnd, pszSrcFile, __LINE__, "DosOpen");
291 else {
292 dlen = 0;
293 plen = sizeof(parm);
294 rc = DosDevIOCtl(hfile,
295 0x80,
296 0x45, &parm, sizeof(parm), &plen, NULL, 0, &dlen);
297 DosClose(hfile);
298 if (rc)
299 Dos_Error(MB_CANCEL, rc, hwnd, pszSrcFile, __LINE__, "DosDevIOCtl");
300 }
301 }
302 break;
303#endif // fixme to be gone?
304
305 case IDM_LOCK:
306 case IDM_UNLOCK:
307 case IDM_EJECT:
308 {
309 BYTE parm[2];
310 ULONG plen = sizeof(parm), dlen = 0L;
311
312 switch (SHORT1FROMMP(cmd)) {
313 case IDM_LOCK:
314 parm[0] = 1;
315 break;
316 case IDM_UNLOCK:
317 parm[0] = 0;
318 break;
319 case IDM_EJECT:
320 parm[0] = 2;
321 break;
322 }
323 parm[1] = (BYTE) (*dv - 'A');
324 DosError(FERR_DISABLEHARDERR);
325 DosDevIOCtl(-1L,
326 8L, 0x40L, &parm, sizeof(parm), &plen, NULL, 0L, &dlen);
327 }
328 break;
329 }
330}
331
332void CommonCreateMainChildren(HWND hwnd, SWP * swp)
333{
334 HWND hwndFrame = WinQueryWindow(hwnd, QW_PARENT);
335 HWND hwndTmp;
336 PFNWP oldproc;
337
338 // Create a children of frame window
339 hwndStatus = WinCreateWindow(hwndFrame,
340 GetPString(IDS_WCSTATUS),
341 "Status",
342 WS_VISIBLE | SS_TEXT | DT_LEFT |
343 DT_VCENTER,
344 swp->x + 4 +
345 WinQuerySysValue(HWND_DESKTOP,
346 SV_CXSIZEBORDER),
347 swp->y + 4 +
348 WinQuerySysValue(HWND_DESKTOP,
349 SV_CYSIZEBORDER),
350 ((swp->cx / 2) - 8) -
351 (WinQuerySysValue(HWND_DESKTOP,
352 SV_CXSIZEBORDER) * 2),
353 20,
354 hwndFrame, HWND_TOP, MAIN_STATUS, NULL, NULL);
355 if (!hwndStatus)
356 Win_Error2(hwndFrame, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
357
358 hwndStatus2 = WinCreateWindow(hwndFrame,
359 GetPString(IDS_WCSTATUS),
360 "Status2",
361 WS_VISIBLE | SS_TEXT | DT_LEFT |
362 DT_VCENTER,
363 ((swp->cx / 2) + 4) +
364 WinQuerySysValue(HWND_DESKTOP,
365 SV_CXSIZEBORDER),
366 ((swp->cy / 2) + 4) +
367 WinQuerySysValue(HWND_DESKTOP,
368 SV_CYSIZEBORDER),
369 ((swp->cx / 2) - 8) -
370 (WinQuerySysValue(HWND_DESKTOP,
371 SV_CXSIZEBORDER) * 2),
372 20,
373 hwndFrame,
374 HWND_TOP, MAIN_STATUS2, NULL, NULL);
375 if (!hwndStatus2)
376 Win_Error2(hwndFrame, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
377
378 hwndAttr = WinCreateWindow(hwndFrame,
379 GetPString(IDS_WCSTATUS),
380 "Attr",
381 WS_VISIBLE | SS_TEXT | DT_CENTER |
382 DT_VCENTER,
383 swp->x + 4 +
384 WinQuerySysValue(HWND_DESKTOP,
385 SV_CXSIZEBORDER),
386 swp->y + 4 + 24 +
387 WinQuerySysValue(HWND_DESKTOP,
388 SV_CYSIZEBORDER),
389 ((swp->cx / 4) - 8) -
390 (WinQuerySysValue(HWND_DESKTOP,
391 SV_CXSIZEBORDER) * 2),
392 20, hwndFrame, HWND_TOP, IDM_ATTRS, NULL, NULL);
393 if (!hwndAttr)
394 Win_Error2(hwndFrame, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
395
396 hwndDate = WinCreateWindow(hwndFrame,
397 GetPString(IDS_WCSTATUS),
398 "Date",
399 WS_VISIBLE | SS_TEXT | DT_CENTER |
400 DT_VCENTER,
401 ((swp->x / 4) * 2) + 4 +
402 WinQuerySysValue(HWND_DESKTOP,
403 SV_CXSIZEBORDER),
404 swp->y + 4 + 24 +
405 WinQuerySysValue(HWND_DESKTOP,
406 SV_CYSIZEBORDER),
407 ((swp->cx / 4) - 8) -
408 (WinQuerySysValue(HWND_DESKTOP,
409 SV_CXSIZEBORDER) * 2),
410 20, hwndFrame, HWND_TOP, IDM_INFO, NULL, NULL);
411 if (!hwndDate)
412 Win_Error2(hwndFrame, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
413
414 hwndName = WinCreateWindow(hwndFrame,
415 GetPString(IDS_WCSTATUS),
416 "Name",
417 WS_VISIBLE | SS_TEXT | DT_LEFT |
418 DT_VCENTER,
419 ((swp->x / 4) * 3) + 4 +
420 WinQuerySysValue(HWND_DESKTOP,
421 SV_CXSIZEBORDER),
422 swp->y + 4 +
423 WinQuerySysValue(HWND_DESKTOP,
424 SV_CYSIZEBORDER),
425 ((swp->cx / 4) - 8) -
426 (WinQuerySysValue(HWND_DESKTOP,
427 SV_CXSIZEBORDER) * 2),
428 20, hwndFrame, HWND_TOP, IDM_RENAME, NULL, NULL);
429 if (!hwndName)
430 Win_Error2(hwndFrame, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
431
432 hwndTmp = WinCreateWindow(hwndFrame,
433 GetPString(IDS_WCTOOLBACK),
434 NullStr,
435 WS_VISIBLE | SS_TEXT | DT_CENTER | DT_VCENTER,
436 swp->x +
437 WinQuerySysValue(HWND_DESKTOP,
438 SV_CXSIZEBORDER),
439 (swp->cy -
440 WinQuerySysValue(HWND_DESKTOP,
441 SV_CYSIZEBORDER)) - 30,
442 swp->cx -
443 (WinQuerySysValue(HWND_DESKTOP,
444 SV_CXSIZEBORDER) * 2),
445 30, hwndFrame, HWND_TOP, MAIN_TOOLS, NULL, NULL);
446 if (!hwndTmp)
447 Win_Error2(hwndFrame, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
448
449 hwndBack = WinCreateWindow(hwndFrame,
450 GetPString(IDS_WCDRIVEBACK),
451 NullStr,
452 WS_VISIBLE | SS_TEXT | DT_RIGHT | DT_BOTTOM,
453 swp->x +
454 WinQuerySysValue(HWND_DESKTOP,
455 SV_CXSIZEBORDER),
456 (swp->cy -
457 WinQuerySysValue(HWND_DESKTOP,
458 SV_CYSIZEBORDER)) - 30,
459 swp->cx -
460 (WinQuerySysValue(HWND_DESKTOP,
461 SV_CXSIZEBORDER) * 2),
462 30,
463 hwndFrame, HWND_TOP, MAIN_DRIVES, NULL, NULL);
464
465 if (!hwndBack)
466 Win_Error2(hwndFrame, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
467
468 hwndLED = WinCreateWindow(hwndFrame,
469 GetPString(IDS_WCLED),
470 "#920",
471 WS_VISIBLE | SS_BITMAP,
472 swp->cx - 58,
473 swp->y,
474 12,
475 12, hwndFrame, HWND_TOP, MAIN_LED, NULL, NULL);
476 if (!hwndLED)
477 Win_Error2(hwndFrame, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
478
479 hwndLEDHdr = WinCreateWindow(hwndFrame,
480 GetPString(IDS_WCLED),
481 "0",
482 WS_VISIBLE | SS_TEXT | DT_VCENTER |
483 DT_CENTER,
484 swp->cx - 58,
485 swp->y + 12,
486 12,
487 12,
488 hwndFrame, HWND_TOP, MAIN_LEDHDR, NULL, NULL);
489 if (!hwndLEDHdr)
490 Win_Error2(hwndFrame, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
491
492 hwndAutoview = WinCreateWindow(hwndFrame,
493 GetPString(IDS_WCAUTOVIEW),
494 NullStr,
495 WS_VISIBLE | SS_TEXT | DT_LEFT |
496 DT_TOP | DT_WORDBREAK,
497 swp->x + 4 +
498 WinQuerySysValue(HWND_DESKTOP,
499 SV_CXSIZEBORDER),
500 swp->y + 4 +
501 WinQuerySysValue(HWND_DESKTOP,
502 SV_CYSIZEBORDER) + 16,
503 (swp->cx - 8) -
504 (WinQuerySysValue(HWND_DESKTOP,
505 SV_CXSIZEBORDER) * 2),
506 48,
507 hwndFrame,
508 HWND_TOP, MAIN_AUTOVIEW, NULL, NULL);
509 if (!hwndAutoview)
510 Win_Error2(hwndFrame, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
511
512 hwndAutoMLE = WinCreateWindow(hwndFrame,
513 // GetPString(IDS_WCAUTOVIEW),
514 WC_MLE,
515 NullStr,
516 WS_VISIBLE | MLS_HSCROLL |
517 MLS_VSCROLL | MLS_BORDER,
518 swp->x + 4 +
519 WinQuerySysValue(HWND_DESKTOP,
520 SV_CXSIZEBORDER),
521 swp->y + 4 +
522 WinQuerySysValue(HWND_DESKTOP,
523 SV_CYSIZEBORDER) + 16,
524 (swp->cx - 8) -
525 (WinQuerySysValue(HWND_DESKTOP,
526 SV_CXSIZEBORDER) * 2),
527 48,
528 hwndFrame,
529 HWND_TOP, MAIN_AUTOVIEWMLE, NULL, NULL);
530 if (!hwndAutoMLE)
531 Win_Error2(hwndFrame, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
532
533 oldproc = WinSubclassWindow(hwndAutoMLE, AutoViewProc);
534 WinSetWindowPtr(hwndAutoMLE, 0, (PVOID) oldproc);
535 PostMsg(hwndAutoMLE, UM_SETUP, MPVOID, MPVOID);
536}
537
538MRESULT EXPENTRY CommonMainWndProc(HWND hwnd, ULONG msg, MPARAM mp1,
539 MPARAM mp2)
540{
541 switch (msg) {
542 case UM_THREADUSE:
543 if (hbmLEDon && hbmLEDoff) {
544 static LONG threaduse;
545 CHAR ts[33];
546
547 if (mp1) {
548 threaduse++;
549 if (threaduse == 1)
550 WinSendMsg(hwndLED, SM_SETHANDLE, MPFROMLONG(hbmLEDon), MPVOID);
551 }
552 else {
553 threaduse--;
554 if (threaduse <= 0) {
555 threaduse = 0;
556 WinSendMsg(hwndLED, SM_SETHANDLE, MPFROMLONG(hbmLEDoff), MPVOID);
557 }
558 }
559 ltoa(threaduse, ts, 10);
560 WinSetWindowText(hwndLEDHdr, ts);
561 DosSleep(0);
562 }
563 return 0;
564
565 case UM_LOADFILE:
566 {
567 CHAR *s = NULL;
568 static CHAR lastfile[CCHMAXPATH] = "";
569
570 if (!fAutoView) {
571 if (*lastfile)
572 PostMsg((fComments) ? hwndAutoMLE : hwndAutoview,
573 UM_LOADFILE, MPVOID, MPVOID);
574 *lastfile = 0;
575 }
576 else {
577 if (mp1) {
578 if (!mp2 && !stricmp(lastfile, (CHAR *) mp1))
579 return 0;
580 strcpy(lastfile, (CHAR *) mp1);
581 s = xstrdup(lastfile, pszSrcFile, __LINE__);
582 }
583 else
584 *lastfile = 0;
585 if (!PostMsg((fComments) ? hwndAutoMLE : hwndAutoview,
586 UM_LOADFILE, MPFROMP(s), MPVOID)) {
587 if (s)
588 free(s);
589 }
590 }
591 }
592 return 0;
593
594 case UM_BUILDDRIVEBAR:
595 BuildDriveBarButtons(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
596 MAIN_DRIVES));
597 return 0;
598 }
599 return WinDefWindowProc(hwnd, msg, mp1, mp2);
600}
601
602MRESULT EXPENTRY CommonTextButton(HWND hwnd, ULONG msg, MPARAM mp1,
603 MPARAM mp2)
604{
605 static HWND hwndLast = (HWND) 0;
606 static ULONG lastclick = 0;
607
608 switch (msg) {
609 case WM_MOUSEMOVE:
610 shiftstate = (SHORT2FROMMP(mp2) & (KC_SHIFT | KC_ALT | KC_CTRL));
611 if (!fNoFinger) {
612 WinSetPointer(HWND_DESKTOP, hptrFinger);
613 return MRFROMLONG(TRUE);
614 }
615 break;
616
617 case WM_BUTTON1DOWN:
618 case WM_BUTTON3DOWN:
619 if (hwndBubble)
620 WinDestroyWindow(hwndBubble);
621 shiftstate = (SHORT2FROMMP(mp2) & (KC_SHIFT | KC_ALT | KC_CTRL));
622 WinSetCapture(HWND_DESKTOP, hwnd);
623 PaintRecessedWindow(hwnd, (HPS) 0, FALSE, FALSE);
624 break;
625
626 case WM_BUTTON2UP:
627 case WM_BUTTON2DOWN:
628 shiftstate = (SHORT2FROMMP(mp2) & (KC_SHIFT | KC_ALT | KC_CTRL));
629 if (msg == WM_BUTTON2UP && hwndLast) {
630 PostMsg(hwnd, UM_FOCUSME, MPFROMP(hwndLast), MPVOID);
631 hwndLast = (HWND) 0;
632 }
633 break;
634
635 case WM_BUTTON1UP:
636 case WM_BUTTON3UP:
637 shiftstate = (SHORT2FROMMP(mp2) & (KC_SHIFT | KC_ALT | KC_CTRL));
638 WinSetCapture(HWND_DESKTOP, (HWND) 0);
639 PaintRecessedWindow(hwnd, (HPS) 0, TRUE, FALSE);
640 {
641 ULONG check;
642
643 DosQuerySysInfo(QSV_MS_COUNT, QSV_MS_COUNT, &check, sizeof(check));
644 if (check > lastclick + 500) {
645
646 RECTL rcl;
647 POINTS pts;
648
649 pts.x = SHORT1FROMMP(mp1);
650 pts.y = SHORT2FROMMP(mp1);
651 WinQueryWindowRect(hwnd, &rcl);
652 if (pts.x > 0 && pts.y > 0 && pts.x < rcl.xRight && pts.y < rcl.yTop)
653 PostMsg(hwnd, UM_CLICKED + (msg == WM_BUTTON3UP), mp1, mp2);
654 }
655 lastclick = check;
656 }
657 PostMsg(hwnd, UM_FOCUSME, MPFROMP(hwndLast), MPVOID);
658 hwndLast = (HWND) 0;
659 break;
660
661 case WM_SETFOCUS:
662 if (mp2)
663 hwndLast = (HWND) mp1;
664 break;
665
666 case UM_FOCUSME:
667 if (mp1) {
668
669 PID pid;
670 TID tid;
671
672 if (WinIsWindow(WinQueryAnchorBlock(hwnd), (HWND) mp1) &&
673 WinQueryWindowProcess((HWND) mp1, &pid, &tid) && pid == mypid) {
674 WinSetFocus(HWND_DESKTOP, (HWND) mp1);
675 return 0;
676 }
677 }
678 {
679 HWND htemp = (HWND) 0;
680
681 if (hwndMain)
682 htemp = TopWindow(hwndMain, (HWND) 0);
683 if (!htemp)
684 htemp = hwndTree;
685 if (htemp)
686 WinSetFocus(HWND_DESKTOP, htemp);
687 else
688 WinSetFocus(HWND_DESKTOP, WinQueryWindow(hwnd, QW_PARENT));
689 }
690 return 0;
691 }
692
693 return PFNWPStatic(hwnd, msg, mp1, mp2);
694}
695
696MRESULT EXPENTRY CommonCnrProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
697{
698 DIRCNRDATA *dcd = WinQueryWindowPtr(hwnd, 0);
699
700 switch (msg) {
701 case UM_FIXCNRMLE:
702 if (dcd) {
703
704 SWP swp, swpC;
705
706 if (WinQueryWindowPos(WinWindowFromID(hwnd, CID_MLE), &swp)) {
707 if (WinQueryWindowPos(hwnd, &swpC)) {
708 swpC.cx -= (WinQuerySysValue(HWND_DESKTOP, SV_CXVSCROLL) + 4);
709 swpC.cx -= swp.x;
710 WinSetWindowPos(WinWindowFromID(hwnd, CID_MLE),
711 HWND_TOP, 0, 0, swpC.cx, swp.cy + 2, SWP_SIZE);
712 }
713 }
714 if (mp1)
715 WinSendMsg(WinWindowFromID(hwnd, CID_MLE),
716 MLM_SETTEXTLIMIT, mp1, MPVOID);
717 }
718 return 0;
719
720 case UM_FIXEDITNAME:
721 if (dcd) {
722 if (mp1 && (INT) mp1 != -1) {
723
724 CHAR *p;
725
726 WinSendMsg(hwnd, UM_FIXCNRMLE, MPFROMLONG(CCHMAXPATH), MPVOID);
727 MLEdelete(WinWindowFromID(hwnd, CID_MLE),
728 0, strlen((CHAR *) mp1) + 1);
729 WinSetDlgItemText(hwnd, CID_MLE, (CHAR *) mp1);
730 p = strrchr((CHAR *) mp1, '\\');
731 if (p) {
732 p++;
733 MLEsetcurposa(WinWindowFromID(hwnd, CID_MLE), (p - (CHAR *) mp1));
734 MLEsetcurposc(WinWindowFromID(hwnd, CID_MLE), strlen((CHAR *) mp1));
735 }
736 else
737 MLEsetcurpos(WinWindowFromID(hwnd, CID_MLE), strlen((CHAR *) mp1));
738 }
739 else if (mp2) {
740 if ((INT) mp1 == -1) {
741
742 PCNRITEM pci = (PCNRITEM) mp2;
743
744 WinSendMsg(hwnd,
745 CM_REMOVERECORD,
746 MPFROMP(&pci),
747 MPFROM2SHORT(1, CMA_FREE | CMA_INVALIDATE));
748 }
749 else {
750 Broadcast(WinQueryAnchorBlock(hwnd),
751 dcd->hwndParent, UM_UPDATERECORD, mp2, MPVOID);
752 free(mp2);
753 }
754 }
755 }
756 return 0;
757 }
758 return PFNWPCnr(hwnd, msg, mp1, mp2);
759}
760
761HWND OpenDirCnr(HWND hwnd, HWND hwndParent, HWND hwndRestore,
762 BOOL noautotile, char *directory)
763{
764 SWP swp;
765 HWND hwndDir;
766
767 if (ParentIsDesktop(hwnd, hwndParent) || *(ULONG *) realappname != FM3UL)
768 StartDirCnr(HWND_DESKTOP, directory, hwndRestore, 1);
769 else if (*(ULONG *) realappname == FM3UL) {
770 if (!fAutoTile)
771 GetNextWindowPos(hwndParent, &swp, NULL, NULL);
772 hwndDir = StartDirCnr(hwndParent, directory, hwndRestore, 1);
773 if (hwndDir) {
774 if (!fAutoTile)
775 WinSetWindowPos(hwndDir,
776 HWND_TOP,
777 swp.x,
778 swp.y,
779 swp.cx,
780 swp.cy, SWP_MOVE | SWP_SIZE | SWP_SHOW | SWP_ZORDER);
781 else if (!noautotile)
782 TileChildren(hwndParent, TRUE);
783 WinSetWindowPos(hwndDir,
784 HWND_TOP,
785 0, 0, 0, 0, SWP_RESTORE | SWP_SHOW | SWP_ACTIVATE);
786 }
787 }
788 else {
789
790 char s[256];
791
792 assign_ignores(s);
793 runemf2(WINDOWED | SEPARATE,
794 hwnd,
795 NULL,
796 NULL,
797 "VDIR.EXE %s%s\"%s%s\"",
798 (*s) ? s : NullStr, (*s) ? " " : NullStr,
799 directory,
800 (directory[strlen(directory) - 1] == '\\') ? "\\" : NullStr);
801 }
802 return hwndDir;
803}
804
805//= IncrThreadUsage() Increment thread usage counter ==
806
807VOID IncrThreadUsage(VOID)
808{
809 if (hwndMain)
810 WinPostMsg(hwndMain, UM_THREADUSE, MPFROMLONG(1), MPVOID);
811}
812
813//= DecrThreadUsage() Decrement thread usage counter ==
814
815VOID DecrThreadUsage(VOID)
816{
817 if (hwndMain)
818 WinPostMsg(hwndMain, UM_THREADUSE, MPVOID, MPVOID);
819}
Note: See TracBrowser for help on using the repository browser.