source: trunk/dll/winlist.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: 8.9 KB
Line 
1#define INCL_DOS
2#define INCL_WIN
3
4#include <os2.h>
5#include <stdarg.h>
6#include <stdio.h>
7#include <stdlib.h>
8#include <string.h>
9#include <ctype.h>
10#include "fm3dll.h"
11#include "fm3dlg.h"
12
13#pragma data_seg(DATA1)
14#pragma alloc_text(WINLIST,WindowList,WinListDlgProc)
15
16
17MRESULT EXPENTRY WinListDlgProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) {
18
19 static HWND Me = (HWND)0;
20 SHORT sSelect;
21
22 switch(msg) {
23 case WM_INITDLG:
24 if(Me || !mp2) {
25 if(Me)
26 PostMsg(Me,UM_FOCUSME,MPVOID,MPVOID);
27 WinDismissDlg(hwnd,0);
28 }
29 else {
30
31 HENUM henum;
32 HWND hwndChild;
33 USHORT id;
34 CHAR wtext[CCHMAXPATH + 1];
35
36 Me = hwnd;
37 WinSetWindowULong(hwnd,0,*(HWND *)mp2);
38 henum = WinBeginEnumWindows(*(HWND *)mp2);
39 while((hwndChild = WinGetNextWindow(henum)) != NULLHANDLE) {
40 id = WinQueryWindowUShort(hwndChild,QWS_ID);
41 if(!id)
42 continue;
43 *wtext = ' ';
44 WinQueryWindowText(hwndChild,CCHMAXPATH,wtext + 1);
45 wtext[CCHMAXPATH] = 0;
46 sSelect = (SHORT)WinSendDlgItemMsg(hwnd,WLIST_LISTBOX,LM_INSERTITEM,
47 MPFROM2SHORT(LIT_SORTASCENDING,0),
48 MPFROMP(wtext));
49 if(sSelect >= 0)
50 WinSendDlgItemMsg(hwnd,WLIST_LISTBOX,LM_SETITEMHANDLE,
51 MPFROM2SHORT(sSelect,0),
52 MPFROMLONG((ULONG)hwndChild));
53 }
54 WinEndEnumWindows(henum);
55
56 {
57 PSWBLOCK pswb;
58 ULONG ulSize,ulcEntries;
59 register INT i,y;
60
61 /* Get the switch list information */
62 ulcEntries = WinQuerySwitchList(0,NULL,0);
63 ulSize = sizeof(SWBLOCK) + sizeof(HSWITCH) + (ulcEntries + 4L) *
64 (LONG)sizeof(SWENTRY);
65 /* Allocate memory for list */
66 if((pswb = malloc((unsigned)ulSize)) != NULL) {
67 /* Put the info in the list */
68 ulcEntries = WinQuerySwitchList(0,pswb,
69 ulSize - sizeof(SWENTRY));
70 /* do the dirty deed */
71 y = 0;
72 for(i = 0;i < pswb->cswentry;i++) {
73 if(pswb->aswentry[i].swctl.uchVisibility == SWL_VISIBLE &&
74 pswb->aswentry[i].swctl.fbJump == SWL_JUMPABLE &&
75 ((pswb->aswentry[i].swctl.idProcess == mypid &&
76 (strnicmp(pswb->aswentry[i].swctl.szSwtitle,
77 "FM/2",4))) ||
78 !strnicmp(pswb->aswentry[i].swctl.szSwtitle,"AV/2",4) ||
79 !stricmp(pswb->aswentry[i].swctl.szSwtitle,"File Manager/2") ||
80 !stricmp(pswb->aswentry[i].swctl.szSwtitle,"Collector") ||
81 !strnicmp(pswb->aswentry[i].swctl.szSwtitle,"VTree",5) ||
82 !strnicmp(pswb->aswentry[i].swctl.szSwtitle,"VDir",4) ||
83 (!strnicmp(pswb->aswentry[i].swctl.szSwtitle,FM2Str,4) &&
84 strnicmp(pswb->aswentry[i].swctl.szSwtitle,
85 "FM/2",4)))) {
86 *wtext = '*';
87 wtext[1] = 0;
88 strcat(wtext,pswb->aswentry[i].swctl.szSwtitle);
89 wtext[CCHMAXPATH] = 0;
90 sSelect = (SHORT)WinSendDlgItemMsg(hwnd,
91 WLIST_LISTBOX,
92 LM_INSERTITEM,
93 MPFROM2SHORT(LIT_SORTASCENDING,0),
94 MPFROMP(wtext));
95 if(sSelect >= 0)
96 WinSendDlgItemMsg(hwnd,
97 WLIST_LISTBOX,
98 LM_SETITEMHANDLE,
99 MPFROM2SHORT(sSelect,0),
100 MPFROMLONG(pswb->aswentry[i].swctl.hwnd));
101 }
102 y++;
103 }
104 free(pswb);
105 DosPostEventSem(CompactSem);
106 }
107 }
108
109 sSelect = (SHORT)WinSendDlgItemMsg(hwnd,
110 WLIST_LISTBOX,
111 LM_QUERYITEMCOUNT,
112 MPVOID,
113 MPVOID);
114 if(sSelect <= 0)
115 WinDismissDlg(hwnd,0);
116 }
117 PostMsg(hwnd,
118 UM_FOCUSME,
119 MPVOID,
120 MPVOID);
121 break;
122
123 case UM_FOCUSME:
124 PostMsg(hwnd,
125 UM_SETUP,
126 MPVOID,
127 MPVOID);
128 return 0;
129
130 case UM_SETUP:
131 PostMsg(hwnd,
132 UM_SETUP2,
133 MPVOID,
134 MPVOID);
135 return 0;
136
137 case UM_SETUP2:
138 PostMsg(hwnd,
139 UM_SETUP3,
140 MPVOID,
141 MPVOID);
142 return 0;
143
144 case UM_SETUP3:
145 WinSetActiveWindow(HWND_DESKTOP,hwnd);
146 return 0;
147
148 case WM_CONTROL:
149 switch(SHORT1FROMMP(mp1)) {
150 case WLIST_LISTBOX:
151 switch(SHORT2FROMMP(mp1)) {
152 case LN_ENTER:
153 PostMsg(hwnd,
154 WM_COMMAND,
155 MPFROM2SHORT(DID_OK,0),
156 MPVOID);
157 break;
158 }
159 break;
160 }
161 return 0;
162
163 case WM_COMMAND:
164 switch(SHORT1FROMMP(mp1)) {
165 case WLIST_MINIMIZE:
166 case WLIST_CLOSE:
167 case DID_OK:
168 {
169 HWND hwndActive = (HWND)WinQueryWindowULong(hwnd,0);
170
171 hwndActive = WinQueryActiveWindow(hwndActive);
172 sSelect = (SHORT)WinSendDlgItemMsg(hwnd,
173 WLIST_LISTBOX,
174 LM_QUERYSELECTION,
175 MPFROM2SHORT(LIT_FIRST,0),
176 MPVOID);
177 while(sSelect >= 0) {
178
179 HWND HwndC;
180
181 HwndC = (HWND)WinSendDlgItemMsg(hwnd,
182 WLIST_LISTBOX,
183 LM_QUERYITEMHANDLE,
184 MPFROM2SHORT(sSelect,0),
185 MPVOID);
186 if(HwndC) {
187
188 SWP swp;
189
190 WinQueryWindowPos(HwndC,&swp);
191 if(SHORT1FROMMP(mp1) == DID_OK) {
192 if(!(swp.fl & SWP_MINIMIZE) &&
193 (swp.cx == 0 || swp.cy == 0)) {
194 GetNextWindowPos((HWND)WinQueryWindowULong(hwnd,0),&swp,
195 NULL,NULL);
196 WinSetWindowPos(HwndC,HWND_TOP,swp.x,swp.y,swp.cx,swp.cy,
197 SWP_MOVE | SWP_SIZE | SWP_SHOW |
198 SWP_ZORDER | SWP_ACTIVATE |
199 SWP_FOCUSACTIVATE);
200 }
201 else
202 WinSetWindowPos(HwndC,HWND_TOP,0,0,0,0,
203 SWP_RESTORE | SWP_SHOW | SWP_ZORDER |
204 SWP_ACTIVATE | SWP_FOCUSACTIVATE);
205 }
206 else if(SHORT1FROMMP(mp1) == WLIST_MINIMIZE) {
207 WinSetWindowPos(HwndC,HWND_BOTTOM,0,0,0,0,
208 SWP_MINIMIZE | SWP_DEACTIVATE |
209 SWP_FOCUSDEACTIVATE | SWP_ZORDER);
210 if(hwndActive == HwndC) {
211 WinSetWindowPos(WinWindowFromID(WinQueryWindow(hwndActive,
212 QW_PARENT),TREE_FRAME),HWND_TOP,0,0,0,0,
213 SWP_SHOW | SWP_RESTORE | SWP_ACTIVATE |
214 SWP_FOCUSACTIVATE | SWP_ZORDER);
215 hwndActive = (HWND)0;
216 }
217 }
218 else if(WinQueryWindowUShort(HwndC,QWS_ID) != TREE_FRAME)
219 PostMsg(HwndC,WM_CLOSE,MPVOID,MPVOID);
220 }
221 sSelect = (SHORT)WinSendDlgItemMsg(hwnd,WLIST_LISTBOX,
222 LM_QUERYSELECTION,
223 MPFROM2SHORT(sSelect,0),
224 MPVOID);
225 }
226 }
227 WinDismissDlg(hwnd,0);
228 break;
229
230 case IDM_HELP:
231 if(hwndHelp)
232 WinSendMsg(hwndHelp,HM_DISPLAY_HELP,
233 MPFROM2SHORT(HELP_WINLIST,0),
234 MPFROMSHORT(HM_RESOURCEID));
235 break;
236
237 case DID_CANCEL:
238 WinDismissDlg(hwnd,0);
239 break;
240 }
241 return 0;
242
243 case WM_DESTROY:
244 if(Me == hwnd)
245 Me = (HWND)0;
246 else
247 WinSetWindowPos(Me,HWND_TOP,0,0,0,0,
248 SWP_SHOW | SWP_RESTORE | SWP_ZORDER | SWP_ACTIVATE);
249 break;
250 }
251 return WinDefDlgProc(hwnd,msg,mp1,mp2);
252}
253
254
255VOID WindowList (HWND hwnd) {
256
257 WinDlgBox(HWND_DESKTOP,HWND_DESKTOP,WinListDlgProc,FM3ModHandle,WLIST_FRAME,
258 MPFROMP(&hwnd));
259}
260
Note: See TracBrowser for help on using the repository browser.