00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
#include "precomp.h"
00014
#pragma hdrstop
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 BOOL _ShowWindowAsync(
PWND pwnd,
int cmdShow, UINT uWPFlags)
00026 {
00027
00028
return PostEventMessage(
00029
GETPTI(pwnd),
00030
GETPTI(pwnd)->pq,
00031
QEVENT_SHOWWINDOW,
00032
NULL,
00033 uWPFlags,
00034 (WPARAM)
HWq(pwnd),
00035 cmdShow |
TEST_PUDF(
PUDF_ANIMATE));
00036 }
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085 BOOL xxxShowWindow(
00086
PWND pwnd,
00087 DWORD cmdShowAnimate)
00088 {
00089
BOOL fVisOld, fVisNew;
00090
UINT swpFlags = SWP_NOMOVE | SWP_NOSIZE;
00091
PTHREADINFO pti;
00092
BOOL bFirstMain =
FALSE;
00093
int cmdShow = LOWORD(cmdShowAnimate);
00094
00095
CheckLock(pwnd);
00096
00097 fVisOld =
TestWF(pwnd,
WFVISIBLE);
00098 pti =
PtiCurrent();
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
if ((pti->
ppi->
usi.
dwFlags & STARTF_USESHOWWINDOW) &&
00113 !
TestwndChild(pwnd) &&
00114 (
TestWF(pwnd,
WFBORDERMASK) == (
BYTE)
LOBYTE(
WFCAPTION)) &&
00115 (pwnd->
spwndOwner ==
NULL)) {
00116
00117 bFirstMain =
TRUE;
00118
00119
switch (cmdShow) {
00120
case SW_SHOWNORMAL:
00121
case SW_SHOW:
00122
00123
00124
00125
00126 cmdShow = SW_SHOWDEFAULT;
00127
break;
00128 }
00129 }
00130
00131
00132
00133
00134
00135
00136
00137
if (cmdShow == SW_SHOWDEFAULT) {
00138
00139
00140
00141
00142
00143
if (pti->
ppi->
usi.
dwFlags & STARTF_USESHOWWINDOW) {
00144
00145 bFirstMain =
TRUE;
00146
00147 cmdShow = pti->
ppi->
usi.
wShowWindow;
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165 }
00166 }
00167
00168
00169
00170
00171
00172
00173
if (cmdShow == SW_SHOWDEFAULT)
00174 cmdShow = SW_SHOWNORMAL;
00175
00176
00177
00178
00179
00180
00181
00182
00183
if (bFirstMain) {
00184 pti->
ppi->
usi.
dwFlags &=
00185 ~(STARTF_USESHOWWINDOW | STARTF_USESIZE | STARTF_USEPOSITION);
00186 }
00187
00188
00189
00190
00191
00192
if (cmdShow & 0xFF00) {
00193
if ((cmdShow & 0xFF80) == (
int)0xFF80)
00194 cmdShow = SW_SHOWMINNOACTIVE;
00195
else
00196 cmdShow = SW_SHOW;
00197 }
00198
00199
00200
00201
00202
if ((
GetFullScreen(pwnd) != WINDOWED)
00203 && (pwnd->
head.rpdesk ==
grpdeskRitInput)) {
00204
if ((cmdShow == SW_SHOWNORMAL) ||
00205 (cmdShow == SW_RESTORE) ||
00206 (cmdShow == SW_MAXIMIZE) ||
00207 (cmdShow == SW_SHOWMAXIMIZED)) {
00208 cmdShow = SW_SHOWMINIMIZED;
00209
00210
if (
GetFullScreen(pwnd) == FULLSCREENMIN) {
00211
SetFullScreen(pwnd, FULLSCREEN);
00212 }
00213
00214
if (
gpqForeground !=
NULL &&
00215
gpqForeground->
spwndActive == pwnd) {
00216
xxxMakeWindowForegroundWithState(
NULL, 0);
00217 }
00218 }
00219 }
00220
00221
switch (cmdShow) {
00222
case SW_SHOWNOACTIVATE:
00223
case SW_SHOWNORMAL:
00224
case SW_RESTORE:
00225
00226
00227
00228
00229
if (
TestWF(pwnd,
WFMINIMIZED) ||
TestWF(pwnd,
WFMAXIMIZED)) {
00230
xxxMinMaximize(pwnd, (
UINT)cmdShow, cmdShowAnimate &
MINMAX_ANIMATE);
00231
return fVisOld;
00232
00233 }
else {
00234
00235
00236
00237
00238
if (fVisOld) {
00239
return fVisOld;
00240 }
00241
00242 swpFlags |= SWP_SHOWWINDOW;
00243
if ( cmdShow == SW_SHOWNOACTIVATE) {
00244 swpFlags |= SWP_NOZORDER;
00245
#ifdef NEVER
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
if (pti->
pq->
spwndActive !=
NULL)
00258 swpFlags |= SWP_NOACTIVATE;
00259
#else
00260
swpFlags |= SWP_NOACTIVATE;
00261
#endif
00262
}
00263 }
00264
break;
00265
00266
case SW_FORCEMINIMIZE:
00267
xxxMinimizeHungWindow(pwnd);
00268
return fVisOld;
00269
00270
case SW_SHOWMINNOACTIVE:
00271
case SW_SHOWMINIMIZED:
00272
case SW_SHOWMAXIMIZED:
00273
case SW_MINIMIZE:
00274
xxxMinMaximize(pwnd, (
UINT)cmdShow, cmdShowAnimate &
MINMAX_ANIMATE);
00275
return fVisOld;
00276
00277
case SW_SHOWNA:
00278 swpFlags |= SWP_SHOWWINDOW | SWP_NOACTIVATE;
00279
00280
00281
00282
00283
00284
00285
00286
break;
00287
00288
case SW_SHOW:
00289
00290
00291
00292
00293
if (fVisOld)
00294
return fVisOld;
00295
00296 swpFlags |= SWP_SHOWWINDOW;
00297 UserAssert(cmdShow != SW_SHOWNOACTIVATE);
00298
break;
00299
00300
case SW_HIDE:
00301
00302
00303
00304
00305
if (!fVisOld)
00306
return fVisOld;
00307
00308 swpFlags |= SWP_HIDEWINDOW;
00309
if (pwnd != pti->
pq->
spwndActive)
00310 swpFlags |= (SWP_NOACTIVATE | SWP_NOZORDER);
00311
break;
00312
00313
default:
00314 RIPERR0(ERROR_INVALID_SHOWWIN_COMMAND, RIP_VERBOSE,
"");
00315
return fVisOld;
00316 }
00317
00318
00319
00320
00321
00322 fVisNew = !(cmdShow == SW_HIDE);
00323
if (fVisNew != fVisOld) {
00324
xxxSendMessage(pwnd, WM_SHOWWINDOW, fVisNew, 0
L);
00325
if (!
TestWF(pwnd,
WFWIN31COMPAT)) {
00326
xxxSendMessage(pwnd, WM_SETVISIBLE, fVisNew, 0
L);
00327 }
00328 }
00329
00330
if (!
TestwndChild(pwnd)) {
00331
if (
TestCF(pwnd,
CFSAVEBITS)) {
00332
00333
00334
00335
00336
if (cmdShow == SW_SHOW || cmdShow == SW_SHOWNORMAL) {
00337
xxxActivateWindow(pwnd,
AW_USE);
00338 swpFlags |= SWP_NOZORDER | SWP_NOACTIVATE;
00339 }
00340 }
00341 }
else {
00342
00343
00344
00345
00346 swpFlags |= (SWP_NOACTIVATE | SWP_NOZORDER);
00347 }
00348
00349
00350
00351
00352
if (
_FChildVisible(pwnd)) {
00353
xxxSetWindowPos(pwnd, (
PWND)
NULL, 0, 0, 0, 0, swpFlags);
00354 }
else {
00355
if (cmdShow == SW_HIDE)
00356
SetVisible(pwnd,
SV_UNSET);
00357
else
00358
SetVisible(pwnd,
SV_SET);
00359 }
00360
00361
00362
00363
00364
if (
TestWF(pwnd,
WFSENDSIZEMOVE)) {
00365
ClrWF(pwnd,
WFSENDSIZEMOVE);
00366
if (
TestWF(pwnd,
WFMINIMIZED)) {
00367
xxxSendSizeMessage(pwnd, SIZE_MINIMIZED);
00368 }
else if (
TestWF(pwnd,
WFMAXIMIZED)) {
00369
xxxSendSizeMessage(pwnd, SIZE_MAXIMIZED);
00370 }
else {
00371
xxxSendSizeMessage(pwnd, SIZE_RESTORED);
00372 }
00373
00374
xxxSendMessage(pwnd, WM_MOVE, 0,
00375 (pwnd->
spwndParent ==
PWNDDESKTOP(pwnd)) ?
00376 MAKELONG(pwnd->
rcClient.left, pwnd->
rcClient.top) :
00377 MAKELONG(
00378 pwnd->
rcClient.left - pwnd->
spwndParent->
rcClient.left,
00379 pwnd->
rcClient.top - pwnd->
spwndParent->
rcClient. top));
00380 }
00381
00382
00383
00384
00385
00386
if (cmdShow == SW_HIDE) {
00387
if ((pwnd == pti->
pq->
spwndActive) && (pti->
pq ==
gpqForeground)) {
00388
xxxActivateWindow(pwnd,
AW_SKIP);
00389 }
else {
00390
xxxCheckFocus(pwnd);
00391 }
00392 }
00393
00394
return fVisOld;
00395 }
00396
00397
00398
00399
00400
00401
00402
00403
00404
00405
00406
00407
00408
00409
00410
00411
00412
00413
00414
00415
00416
00417
00418
00419
00420
00421
00422
00423
00424
00425
00426
00427
00428
00429
00430
00431
00432
00433
00434
00435
00436
00437 void xxxShowOwnedWindows(
00438
PWND pwndOwner,
00439 UINT cmdShow,
00440 HRGN hrgnHung)
00441 {
00442
BOOL fShow;
00443
int cmdZoom;
00444 HWND *phwnd;
00445
PBWL pbwl;
00446
PWND pwnd, pwndTopOwner;
00447
TL tlpwnd;
00448
00449
CheckLock(pwndOwner);
00450
00451
00452
00453
00454
if (
TestwndChild(pwndOwner))
00455
return;
00456
00457
if ((pbwl =
BuildHwndList(
PWNDDESKTOP(pwndOwner)->spwndChild,
BWL_ENUMLIST,
NULL)) ==
NULL)
00458
return;
00459
00460
00461
00462
00463 fShow = (cmdShow >= SW_PARENTOPENING);
00464
00465 cmdZoom = 0;
00466
if (cmdShow == SW_OTHERZOOM)
00467 cmdZoom = SIZEZOOMHIDE;
00468
00469
if (cmdShow == SW_OTHERUNZOOM)
00470 cmdZoom = SIZEZOOMSHOW;
00471
00472
00473
00474
00475
00476
for (phwnd = pbwl->
rghwnd; *phwnd != (HWND)1; phwnd++) {
00477
00478
00479
00480
00481
00482
if ((pwnd =
RevalidateHwnd(*phwnd)) ==
NULL)
00483
continue;
00484
00485
00486
00487
00488
if (
TestCF(pwnd,
CFKANJIWINDOW))
00489
continue;
00490
00491
00492
00493
00494
if (pwnd == pwndOwner)
00495
continue;
00496
00497
00498
00499
00500
if ((pwndTopOwner = pwnd->
spwndOwner) !=
NULL) {
00501
00502
00503
00504
00505
00506
while (!
TestwndHI(pwndTopOwner) && pwndTopOwner != pwndOwner &&
00507 pwndTopOwner->
spwndOwner !=
NULL)
00508 pwndTopOwner = pwndTopOwner->
spwndOwner;
00509 }
00510
00511
00512
00513
00514
if (cmdZoom != 0) {
00515
00516
00517
00518
00519
if (pwndTopOwner ==
NULL || pwndTopOwner == pwndOwner)
00520
continue;
00521
00522
00523
00524
00525
00526
00527
if ( cmdShow == SW_OTHERUNZOOM
00528 && pwndTopOwner !=
NULL
00529 &&
TestWF(pwndTopOwner,
WFMINIMIZED)
00530 && !
TestWF(pwndTopOwner,
WFDISABLED)
00531 )
00532
continue;
00533 }
else {
00534
00535
00536
00537
00538
00539
00540
if (pwndTopOwner != pwndOwner)
00541
continue;
00542 }
00543
00544
00545
00546
00547
00548
00549
00550
if ((fShow &&
TestWF(pwnd,
WFHIDDENPOPUP)) ||
00551 (!fShow &&
TestWF(pwnd,
WFVISIBLE))) {
00552
00553
00554
00555
00556
00557
if (hrgnHung !=
NULL) {
00558 HRGN hrgn = GreCreateRectRgnIndirect(&pwnd->
rcWindow);
00559
UnionRgn(hrgnHung, hrgnHung, hrgn);
00560 GreDeleteObject(hrgn);
00561
00562 UserAssert(!fShow);
00563
00564
SetWF(pwnd,
WFHIDDENPOPUP);
00565
SetVisible(pwnd,
SV_UNSET);
00566 }
else {
00567
ThreadLockAlways(pwnd, &tlpwnd);
00568
xxxSendMessage(pwnd, WM_SHOWWINDOW, fShow, (LONG)cmdShow);
00569
ThreadUnlock(&tlpwnd);
00570 }
00571 }
00572 }
00573
00574
00575
00576
00577
FreeHwndList(pbwl);
00578 }
00579
00580
00581
00582
00583
00584
00585
00586
00587
00588
00589
00590
00591
00592
00593 BOOL xxxShowOwnedPopups(
00594
PWND pwndOwner,
00595 BOOL fShow)
00596 {
00597
CheckLock(pwndOwner);
00598
00599
xxxShowOwnedWindows(pwndOwner,
00600 (
UINT)(fShow ? SW_PARENTOPENING : SW_PARENTCLOSING),
NULL);
00601
return TRUE;
00602 }
00603