00001
00002
00003
00004
00005
#include "precomp.h"
00006
#pragma hdrstop
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 BOOL IsVSlick(
PWND pwnd)
00018 {
00019
if (
gpDispInfo->
cMonitors == 1 &&
00020 ((
unsigned) pwnd->
rcWindow.left > (
unsigned)
gpDispInfo->
rcScreen.right ) &&
00021 ((
unsigned) pwnd->
rcWindow.top > (
unsigned)
gpDispInfo->
rcScreen.bottom) &&
00022 (pwnd->
rcWindow.top == (
gpDispInfo->
rcScreen.bottom+100)) &&
00023 (pwnd->
rcWindow.left == (
gpDispInfo->
rcScreen.right+100)))
00024 {
00025
00026
return(
TRUE);
00027 }
00028
00029
return(
FALSE);
00030 }
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040 BOOL Is31TrayWindow(
PWND pwnd)
00041 {
00042
PWND pwnd2;
00043
00044
if (!(pwnd2 = pwnd->
spwndOwner))
00045
return (!
IsVSlick(pwnd));
00046
00047
if (
TestWF(pwnd2,
WEFTOOLWINDOW))
00048
return(
FALSE);
00049
00050
return((
FHas31TrayStyles(pwnd2) ? (
IsVSlick(pwnd2)) :
TRUE));
00051 }
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062 BOOL IsTrayWindow(
PWND pwnd)
00063 {
00064
if ((pwnd==
NULL) || !(
FDoTray() && (
FCallHookTray() ||
FPostTray(pwnd->
head.rpdesk))) ||
00065 !
FTopLevel(pwnd))
00066
return(
FALSE);
00067
00068
00069
if (
TestWF(pwnd,
WEFAPPWINDOW))
00070
return(
TRUE);
00071
00072
if (
TestWF(pwnd,
WEFTOOLWINDOW))
00073
return(
FALSE);
00074
00075
if (
TestWF(pwnd,
WEFNOACTIVATE)) {
00076
return FALSE;
00077 }
00078
00079
if (
TestWF(pwnd,
WFWIN40COMPAT)) {
00080
if (pwnd->
spwndOwner ==
NULL)
00081
return(
TRUE);
00082
if (
TestWF(pwnd->
spwndOwner,
WFWIN40COMPAT))
00083
return(
FALSE);
00084
00085 }
00086
00087
if (!
FHas31TrayStyles(pwnd))
00088
return(
FALSE);
00089
00090
return(
Is31TrayWindow(pwnd));
00091 }
00092
00093
00094
00095
00096
00097
00098
00099
00100 void xxxSetTrayWindow(
PDESKTOP pdesk,
PWND pwnd,
PMONITOR pMonitor)
00101 {
00102 HWND hwnd;
00103
00104
CheckLock(pMonitor);
00105
00106
if (pwnd ==
STW_SAME) {
00107 pwnd = pdesk->
spwndTray;
00108 hwnd =
PtoH(pwnd);
00109 }
else {
00110
CheckLock(pwnd);
00111 hwnd =
PtoH(pwnd);
00112
Lock(&(pdesk->
spwndTray), pwnd);
00113 }
00114
00115
if (!pMonitor) {
00116
if (pwnd) {
00117 pMonitor =
_MonitorFromWindow(pwnd, MONITOR_DEFAULTTOPRIMARY);
00118 }
else {
00119 pMonitor =
GetPrimaryMonitor();
00120 }
00121 }
00122
00123
if (
FPostTray(pdesk)) {
00124
PostShellHookMessages(
00125 pMonitor->
cFullScreen ?
00126 HSHELL_RUDEAPPACTIVATED : HSHELL_WINDOWACTIVATED,
00127 (LPARAM) hwnd);
00128 }
00129
00130
if (
FCallHookTray() ) {
00131
xxxCallHook(
00132 HSHELL_WINDOWACTIVATED,
00133 (WPARAM) hwnd,
00134 (pMonitor->
cFullScreen ? 1 : 0),
00135 WH_SHELL);
00136 }
00137 }
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151 BOOL xxxAddFullScreen(
PWND pwnd,
PMONITOR pMonitor)
00152 {
00153
BOOL fYielded;
00154
00155
PDESKTOP pdesk = pwnd->
head.rpdesk;
00156
00157
CheckLock(pwnd);
00158
CheckLock(pMonitor);
00159
00160
if (pdesk ==
NULL)
00161
return FALSE;
00162
00163 fYielded =
FALSE;
00164
if (!
TestWF(pwnd,
WFFULLSCREEN) &&
FCallTray(pdesk))
00165 {
00166
SetWF(pwnd,
WFFULLSCREEN);
00167
00168
if (pMonitor->
cFullScreen++ == 0) {
00169
xxxSetTrayWindow(pdesk,
STW_SAME, pMonitor);
00170 fYielded =
TRUE;
00171 }
00172
00173 pwnd = pwnd->
spwndOwner;
00174
if ( pwnd &&
00175 !
TestWF(pwnd,
WFCHILD) &&
00176 pwnd->
rcWindow.right == 0 &&
00177 pwnd->
rcWindow.left == 0 &&
00178 !
TestWF(pwnd,
WFVISIBLE)) {
00179
00180
TL tlpwnd;
00181
ThreadLock(pwnd, &tlpwnd);
00182
if (
xxxAddFullScreen(pwnd, pMonitor)) {
00183 fYielded =
TRUE;
00184 }
00185
00186
ThreadUnlock(&tlpwnd);
00187 }
00188 }
00189
00190
return fYielded;
00191 }
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205 BOOL xxxRemoveFullScreen(
PWND pwnd,
PMONITOR pMonitor)
00206 {
00207
PDESKTOP pdesk = pwnd->
head.rpdesk;
00208
BOOL fYielded;
00209
00210
CheckLock(pwnd);
00211
CheckLock(pMonitor);
00212
00213
if (pdesk ==
NULL)
00214
return FALSE;
00215
00216 fYielded =
FALSE;
00217
if (
TestWF(pwnd,
WFFULLSCREEN) &&
FCallTray(pdesk)) {
00218
ClrWF(pwnd,
WFFULLSCREEN);
00219
00220
if (--pMonitor->
cFullScreen == 0) {
00221
xxxSetTrayWindow(pdesk,
STW_SAME, pMonitor);
00222 fYielded =
TRUE;
00223 }
00224
00225
00226
00227
00228
00229
00230
00231 }
00232
00233
return fYielded;
00234 }