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 APIENTRY _SwapMouseButton(
00026 BOOL fSwapButtons)
00027 {
00028
BOOL fSwapOld;
00029
PPROCESSINFO ppiCurrent =
PpiCurrent();
00030
00031
00032
00033
00034
RETURN_IF_ACCESS_DENIED(ppiCurrent->
amwinsta,
00035 WINSTA_READATTRIBUTES | WINSTA_WRITEATTRIBUTES,
00036
FALSE);
00037
00038
if (!(ppiCurrent->W32PF_Flags & W32PF_IOWINSTA)) {
00039 RIPERR0(ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION,
00040 RIP_WARNING,
00041
"SwapMouseButton invalid on a non-interactive WindowStation.");
00042
00043
return FALSE;
00044 }
00045
00046 fSwapOld =
SYSMET(SWAPBUTTON);
00047
SYSMET(SWAPBUTTON) = fSwapButtons;
00048
00049
00050
00051
00052
00053
00054
if (fSwapButtons != fSwapOld) {
00055
gbMouseButtonsRecentlySwapped = !
gbMouseButtonsRecentlySwapped;
00056 }
00057
00058
00059
00060
00061
return fSwapOld;
00062 }
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074 BOOL APIENTRY _SetDoubleClickTime(
00075 UINT dtTime)
00076 {
00077
PWINDOWSTATION pwinsta =
PpiCurrent()->rpwinsta;
00078
00079
00080
00081
00082
if (!
CheckWinstaWriteAttributesAccess()) {
00083
return FALSE;
00084 }
00085
00086
if (!dtTime) {
00087 dtTime = 500;
00088 }
else if (dtTime > 5000) {
00089 dtTime = 5000;
00090 }
00091
00092
gdtDblClk = dtTime;
00093
gpsi->dtLBSearch = dtTime * 4;
00094
gpsi->dtScroll =
gpsi->dtLBSearch / 5;
00095
00096
00097
00098
00099
00100
00101
00102
00103
if (pwinsta !=
NULL) {
00104
PDESKTOP pdesk;
00105
for (pdesk = pwinsta->
rpdeskList; pdesk; pdesk = pdesk->
rpdeskNext) {
00106
InitTooltipDelay((
PTOOLTIPWND)pdesk->
spwndTooltip);
00107 }
00108 }
00109
00110
return TRUE;
00111 }
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121 VOID SetSysColor(
00122 UINT icol,
00123 DWORD rgb,
00124 UINT uOptions
00125 )
00126 {
00127
00128
if ((uOptions &
SSCF_SETMAGICCOLORS) &&
gpDispInfo->
fAnyPalette) {
00129
union {
00130
DWORD rgb;
00131 PALETTEENTRY pe;
00132 } peMagic;
00133
00134 peMagic.rgb = rgb;
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
switch (icol)
00154 {
00155
case COLOR_3DSHADOW:
00156 GreSetMagicColors(
gpDispInfo->
hdcScreen, peMagic.pe, 8);
00157
break;
00158
00159
case COLOR_3DFACE:
00160 GreSetMagicColors(
gpDispInfo->
hdcScreen, peMagic.pe, 9);
00161
break;
00162
00163
case COLOR_3DHILIGHT:
00164 GreSetMagicColors(
gpDispInfo->
hdcScreen, peMagic.pe, 246);
00165
break;
00166
00167
case COLOR_DESKTOP:
00168 GreSetMagicColors(
gpDispInfo->
hdcScreen, peMagic.pe, 247);
00169
break;
00170 }
00171 }
00172
00173
if (uOptions &
SSCF_16COLORS) {
00174
00175
00176
00177 rgb = GreGetNearestColor(
gpDispInfo->
hdcScreen, rgb);
00178 }
else if (uOptions &
SSCF_FORCESOLIDCOLOR) {
00179
00180
00181
00182
switch (icol) {
00183
00184
00185
00186
00187
case COLOR_DESKTOP:
00188
case COLOR_ACTIVEBORDER:
00189
case COLOR_INACTIVEBORDER:
00190
case COLOR_APPWORKSPACE:
00191
case COLOR_INFOBK:
00192
case COLOR_GRADIENTACTIVECAPTION:
00193
case COLOR_GRADIENTINACTIVECAPTION:
00194
break;
00195
00196
default:
00197 rgb = GreGetNearestColor(
gpDispInfo->
hdcScreen, rgb);
00198
break;
00199 }
00200 }
00201
00202
gpsi->argbSystem[icol] = rgb;
00203
if (
SYSHBRUSH(icol) ==
NULL) {
00204
00205
00206
00207
00208
SYSHBRUSH(icol) = GreCreateSolidBrush(rgb);
00209 GreMarkUndeletableBrush(
SYSHBRUSH(icol));
00210 GreSetBrushOwnerPublic(
SYSHBRUSH(icol));
00211 }
else {
00212 GreSetSolidBrush(
SYSHBRUSH(icol), rgb);
00213 }
00214 }
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225 BOOL APIENTRY xxxSetSysColors(PUNICODE_STRING pProfileUserName,
00226
int cicol,
00227 PUINT picolor,
00228 COLORREF *prgb,
00229 UINT uOptions
00230 )
00231 {
00232
int i;
00233
UINT icol;
00234 COLORREF rgb;
00235
00236
00237
00238
00239
if ((uOptions &
SSCF_NOTIFY) && !
CheckWinstaWriteAttributesAccess()) {
00240
return FALSE;
00241 }
00242
00243
if (GreGetDeviceCaps(
gpDispInfo->
hdcScreen, NUMCOLORS) <= 16) {
00244 uOptions |=
SSCF_16COLORS;
00245 }
00246
00247
if (uOptions &
SSCF_SETMAGICCOLORS) {
00248
00249
00250
00251
for(i = 0; i < cicol; i++) {
00252 icol = picolor[i];
00253 rgb = prgb[i];
00254
if ( icol == COLOR_3DFACE ||
00255 icol == COLOR_3DSHADOW ||
00256 icol == COLOR_3DHILIGHT ||
00257 icol == COLOR_DESKTOP) {
00258
00259
SetSysColor(icol, rgb, uOptions);
00260 }
00261 }
00262 }
00263
00264
for (i = 0; i < cicol; i++) {
00265
00266 icol = *picolor++;
00267 rgb = *prgb++;
00268
00269
if (icol >= COLOR_MAX)
00270
continue;
00271
00272
if ((uOptions &
SSCF_SETMAGICCOLORS) &&
00273 (icol == COLOR_3DFACE ||
00274 icol == COLOR_3DSHADOW ||
00275 icol == COLOR_3DHIGHLIGHT ||
00276 icol == COLOR_DESKTOP)) {
00277
continue;
00278 }
00279
00280
SetSysColor(icol, rgb, uOptions);
00281 }
00282
00283
if (uOptions &
SSCF_NOTIFY) {
00284
00285
00286
00287
00288
RecolorDeskPattern();
00289
00290
00291
00292
00293
00294
xxxSetWindowNCMetrics(pProfileUserName,
NULL,
FALSE, -1);
00295
00296
00297
00298
00299
00300
xxxSendNotifyMessage(
PWND_BROADCAST, WM_SYSCOLORCHANGE, 0, 0
L);
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310
xxxRedrawScreen();
00311 }
00312
00313
return TRUE;
00314 }