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
RevLine 
[246]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
[348]9 Copyright (c) 2001, 2006 Steven H. Levine
[246]10
11 13 Aug 05 SHL Renames
[348]12 22 Jul 06 SHL Check more run time errors
[446]13 15 Aug 06 SHL Use Dos_Error
[536]14 03 Nov 06 SHL Rework thread usage count logic
[246]15
16***********************************************************************/
17
[2]18#define INCL_DOS
19#define INCL_DOSERRORS
20#define INCL_WIN
21#define INCL_GPI
[348]22#include <os2.h>
[2]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>
[348]33
[2]34#include "fm3dll.h"
35#include "fm3dlg.h"
36#include "fm3str.h"
37#include "mle.h"
38
39#pragma data_seg(DATA1)
[348]40
41static PSZ pszSrcFile = __FILE__;
42
[2]43#pragma alloc_text(COMMON,CommonFrameWndProc,CommonTextProc,CommonTextPaint)
44#pragma alloc_text(COMMON1,CommonCreateTextChildren,CommonCreateMainChildren)
45#pragma alloc_text(COMMON2,CommonDriveCmd,CommonTextButton)
[536]46#pragma alloc_text(COMMON3,CommonMainWndProc,IncrThreadUsage,DecrThreadUsage)
[2]47#pragma alloc_text(COMMON4,CommonCnrProc)
48#pragma alloc_text(COMMON5,OpenDirCnr)
49
[551]50MRESULT EXPENTRY CommonFrameWndProc(USHORT id,
51 HWND hwnd,
52 ULONG msg, MPARAM mp1, MPARAM mp2)
[377]53{
[551]54 PFNWP oldproc = (PFNWP) WinQueryWindowPtr(hwnd, 0);
[2]55
[551]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);
[2]75
[551]76 case UM_CONTEXTMENU:
77 PostMsg(WinWindowFromID(hwnd, FID_CLIENT), msg, mp1, mp2);
78 return 0;
[2]79
[551]80 case UM_CONTAINERHWND:
81 return MRFROMLONG(WinWindowFromID(hwnd, id));
[2]82
[551]83 case DM_DROP:
84 case DM_DRAGOVER:
85 case DM_DRAGLEAVE:
86 case DM_DROPHELP:
87 {
88 CNRDRAGINFO cnd;
89 USHORT dcmd;
[2]90
[551]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;
[2]104 }
[551]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 }
[2]110
[551]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;
[2]116
[551]117 case WM_MINMAXFRAME:
118 {
119 PSWP pswp = (PSWP) mp1;
120 MRESULT rc;
[2]121
[551]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 }
[2]127
[551]128 case WM_DESTROY:
129 WinSendMsg(hwnd, UM_RESCAN, MPVOID, MPVOID);
130 break;
[2]131 }
[551]132 return oldproc(hwnd, msg, mp1, mp2);
[2]133}
134
[551]135MRESULT EXPENTRY CommonTextProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
[377]136{
[551]137 switch (msg) {
138 case WM_CREATE:
139 {
140 MRESULT rc;
141 char font[] = "8.Helv";
[2]142
[551]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';
[2]149 }
[551]150 SetPresParams(hwnd, &RGBGREY, &RGBBLACK, &RGBBLACK, font);
151 return rc;
152 }
[2]153 }
[551]154 return PFNWPStatic(hwnd, msg, mp1, mp2);
[2]155}
156
[551]157void CommonTextPaint(HWND hwnd, HPS hps)
[377]158{
[2]159 int x;
[551]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 };
[2]164
[551]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);
[2]169 }
170}
171
[551]172void CommonCreateTextChildren(HWND hwnd, char *class, USHORT * ids)
[377]173{
[551]174 int x;
175 CHAR s[33];
[2]176 ULONG attrs;
[377]177 HWND hwndTmp;
[2]178
[377]179 if (!hwnd || !class || !ids) {
180 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
[2]181 return;
[377]182 }
[2]183
[551]184 for (x = 0; ids[x]; x++) {
[2]185 *s = 0;
[551]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;
[2]200 }
[551]201 hwndTmp = WinCreateWindow(hwnd, class, s, attrs, 0, 0, 0, 0, hwnd,
202 HWND_TOP, ids[x], NULL, NULL);
[377]203 if (!hwndTmp)
[551]204 Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
205 } // for
[2]206}
207
[551]208void CommonDriveCmd(HWND hwnd, char *drive, USHORT cmd)
[377]209{
[2]210 char dv[CCHMAXPATH];
211
[551]212 if (!drive || !*drive)
[2]213 return;
[551]214 strcpy(dv, drive);
[2]215 MakeValidDir(dv);
216
[551]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;
[2]252
[551]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));
[2]261 }
[551]262 }
263 break;
264 case IDM_FORMAT:
265 runemf2(SEPARATE | WINDOWED,
266 hwnd, NULL, NULL, "PMFORMAT.EXE %c:", toupper(*dv));
267 break;
[2]268
[551]269#if 0 // fixme to be gone?
[446]270
[551]271 case IDM_CLOSETRAY:
272 if (driveflags[*dv - 'A'] & DRIVE_CDROM) {
[2]273
[551]274 BYTE parm[4] = { "CD01" };
275 ULONG dlen, plen;
276 HFILE hfile;
277 APIRET rc;
[2]278
[551]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");
[2]300 }
[551]301 }
302 break;
[446]303#endif // fixme to be gone?
[2]304
[551]305 case IDM_LOCK:
306 case IDM_UNLOCK:
307 case IDM_EJECT:
308 {
309 BYTE parm[2];
310 ULONG plen = sizeof(parm), dlen = 0L;
[446]311
[551]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;
[2]322 }
[551]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;
[2]329 }
330}
331
[551]332void CommonCreateMainChildren(HWND hwnd, SWP * swp)
[377]333{
[551]334 HWND hwndFrame = WinQueryWindow(hwnd, QW_PARENT);
[377]335 HWND hwndTmp;
336 PFNWP oldproc;
[2]337
[377]338 // Create a children of frame window
339 hwndStatus = WinCreateWindow(hwndFrame,
[551]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);
[377]355 if (!hwndStatus)
[551]356 Win_Error2(hwndFrame, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
[377]357
358 hwndStatus2 = WinCreateWindow(hwndFrame,
[551]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);
[377]375 if (!hwndStatus2)
[551]376 Win_Error2(hwndFrame, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
[2]377
[377]378 hwndAttr = WinCreateWindow(hwndFrame,
[551]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);
[377]393 if (!hwndAttr)
[551]394 Win_Error2(hwndFrame, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
[377]395
396 hwndDate = WinCreateWindow(hwndFrame,
[551]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);
[377]411 if (!hwndDate)
[551]412 Win_Error2(hwndFrame, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
[377]413
414 hwndName = WinCreateWindow(hwndFrame,
[551]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);
[377]429 if (!hwndName)
[551]430 Win_Error2(hwndFrame, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
[2]431
[377]432 hwndTmp = WinCreateWindow(hwndFrame,
[551]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);
[377]446 if (!hwndTmp)
[551]447 Win_Error2(hwndFrame, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
[377]448
449 hwndBack = WinCreateWindow(hwndFrame,
[551]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);
[2]464
[377]465 if (!hwndBack)
[551]466 Win_Error2(hwndFrame, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
[377]467
468 hwndLED = WinCreateWindow(hwndFrame,
[551]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);
[377]476 if (!hwndLED)
[551]477 Win_Error2(hwndFrame, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
[377]478
479 hwndLEDHdr = WinCreateWindow(hwndFrame,
[551]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);
[377]489 if (!hwndLEDHdr)
[551]490 Win_Error2(hwndFrame, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
[377]491
492 hwndAutoview = WinCreateWindow(hwndFrame,
[551]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);
[377]509 if (!hwndAutoview)
[551]510 Win_Error2(hwndFrame, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
[377]511
512 hwndAutoMLE = WinCreateWindow(hwndFrame,
[551]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);
[377]530 if (!hwndAutoMLE)
[551]531 Win_Error2(hwndFrame, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
[2]532
[551]533 oldproc = WinSubclassWindow(hwndAutoMLE, AutoViewProc);
534 WinSetWindowPtr(hwndAutoMLE, 0, (PVOID) oldproc);
535 PostMsg(hwndAutoMLE, UM_SETUP, MPVOID, MPVOID);
[2]536}
537
[551]538MRESULT EXPENTRY CommonMainWndProc(HWND hwnd, ULONG msg, MPARAM mp1,
539 MPARAM mp2)
[377]540{
[551]541 switch (msg) {
542 case UM_THREADUSE:
543 if (hbmLEDon && hbmLEDoff) {
544 static LONG threaduse;
545 CHAR ts[33];
[2]546
[551]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);
[377]557 }
558 }
[551]559 ltoa(threaduse, ts, 10);
560 WinSetWindowText(hwndLEDHdr, ts);
561 DosSleep(0);
562 }
563 return 0;
[2]564
[551]565 case UM_LOADFILE:
566 {
567 CHAR *s = NULL;
568 static CHAR lastfile[CCHMAXPATH] = "";
[2]569
[551]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;
[2]593
[551]594 case UM_BUILDDRIVEBAR:
595 BuildDriveBarButtons(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
596 MAIN_DRIVES));
597 return 0;
[2]598 }
[551]599 return WinDefWindowProc(hwnd, msg, mp1, mp2);
[2]600}
601
[551]602MRESULT EXPENTRY CommonTextButton(HWND hwnd, ULONG msg, MPARAM mp1,
603 MPARAM mp2)
[377]604{
[551]605 static HWND hwndLast = (HWND) 0;
[2]606 static ULONG lastclick = 0;
607
[551]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;
[348]616
[551]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;
[2]625
[551]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;
[2]634
[551]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;
[2]642
[551]643 DosQuerySysInfo(QSV_MS_COUNT, QSV_MS_COUNT, &check, sizeof(check));
644 if (check > lastclick + 500) {
[2]645
[551]646 RECTL rcl;
647 POINTS pts;
[2]648
[551]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);
[2]654 }
[551]655 lastclick = check;
656 }
657 PostMsg(hwnd, UM_FOCUSME, MPFROMP(hwndLast), MPVOID);
658 hwndLast = (HWND) 0;
659 break;
[2]660
[551]661 case WM_SETFOCUS:
662 if (mp2)
663 hwndLast = (HWND) mp1;
664 break;
[2]665
[551]666 case UM_FOCUSME:
667 if (mp1) {
[2]668
[551]669 PID pid;
670 TID tid;
[2]671
[551]672 if (WinIsWindow(WinQueryAnchorBlock(hwnd), (HWND) mp1) &&
673 WinQueryWindowProcess((HWND) mp1, &pid, &tid) && pid == mypid) {
674 WinSetFocus(HWND_DESKTOP, (HWND) mp1);
675 return 0;
[2]676 }
[551]677 }
678 {
679 HWND htemp = (HWND) 0;
[2]680
[551]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;
[2]691 }
692
[551]693 return PFNWPStatic(hwnd, msg, mp1, mp2);
[2]694}
695
[551]696MRESULT EXPENTRY CommonCnrProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
[377]697{
[551]698 DIRCNRDATA *dcd = WinQueryWindowPtr(hwnd, 0);
[2]699
[551]700 switch (msg) {
701 case UM_FIXCNRMLE:
702 if (dcd) {
[2]703
[551]704 SWP swp, swpC;
[2]705
[551]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 }
[2]713 }
[551]714 if (mp1)
715 WinSendMsg(WinWindowFromID(hwnd, CID_MLE),
716 MLM_SETTEXTLIMIT, mp1, MPVOID);
717 }
718 return 0;
[2]719
[551]720 case UM_FIXEDITNAME:
721 if (dcd) {
722 if (mp1 && (INT) mp1 != -1) {
[2]723
[551]724 CHAR *p;
[2]725
[551]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) {
[2]741
[551]742 PCNRITEM pci = (PCNRITEM) mp2;
[2]743
[551]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 }
[2]754 }
[551]755 }
756 return 0;
[2]757 }
[551]758 return PFNWPCnr(hwnd, msg, mp1, mp2);
[2]759}
760
[551]761HWND OpenDirCnr(HWND hwnd, HWND hwndParent, HWND hwndRestore,
762 BOOL noautotile, char *directory)
[377]763{
[551]764 SWP swp;
[2]765 HWND hwndDir;
766
[551]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);
[2]783 WinSetWindowPos(hwndDir,
[551]784 HWND_TOP,
785 0, 0, 0, 0, SWP_RESTORE | SWP_SHOW | SWP_ACTIVATE);
[2]786 }
787 }
788 else {
789
790 char s[256];
791
792 assign_ignores(s);
793 runemf2(WINDOWED | SEPARATE,
[551]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);
[2]801 }
802 return hwndDir;
803}
804
[536]805//= IncrThreadUsage() Increment thread usage counter ==
806
807VOID IncrThreadUsage(VOID)
808{
809 if (hwndMain)
[551]810 WinPostMsg(hwndMain, UM_THREADUSE, MPFROMLONG(1), MPVOID);
[536]811}
812
813//= DecrThreadUsage() Decrement thread usage counter ==
814
815VOID DecrThreadUsage(VOID)
816{
817 if (hwndMain)
[551]818 WinPostMsg(hwndMain, UM_THREADUSE, MPVOID, MPVOID);
[536]819}
Note: See TracBrowser for help on using the repository browser.