source: trunk/dll/common.c@ 2

Last change on this file since 2 was 2, checked in by root, 23 years ago

Initial revision

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