source: trunk/dll/winlist.c@ 201

Last change on this file since 201 was 130, checked in by root, 20 years ago

Use QWL_USER

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