WindowsXP-SP1/shell/explorer/tray.h

677 lines
22 KiB
C++

#ifndef _TRAY_H
#define _TRAY_H
#include "trayp.h"
#include "cwndproc.h"
#ifdef __cplusplus
#include "traynot.h"
#include "ssomgr.h"
typedef struct tagHWNDANDPLACEMENT
{
HWND hwnd;
BOOL fRestore;
WINDOWPLACEMENT wp;
}
HWNDANDPLACEMENT, *LPHWNDANDPLACEMENT;
typedef struct tagAPPBAR
{
HWND hwnd;
UINT uCallbackMessage;
RECT rc;
UINT uEdge;
}
APPBAR, *PAPPBAR;
typedef struct tagWINDOWPOSITIONS
{
UINT idRes;
HDSA hdsaWP;
}
WINDOWPOSITIONS, *LPWINDOWPOSITIONS;
typedef struct tagTRAYVIEWOPTS
{
BOOL fAlwaysOnTop;
BOOL fSMSmallIcons;
BOOL fHideClock;
BOOL fNoTrayItemsDisplayPolicyEnabled;
BOOL fNoAutoTrayPolicyEnabled;
BOOL fAutoTrayEnabledByUser;
BOOL fShowQuickLaunch;
UINT uAutoHide; // AH_HIDING , AH_ON
}
TRAYVIEWOPTS;
// TVSD Flags.
#define TVSD_NULL 0x0000
#define TVSD_AUTOHIDE 0x0001
#define TVSD_TOPMOST 0x0002
#define TVSD_SMSMALLICONS 0x0004
#define TVSD_HIDECLOCK 0x0008
// old Win95 TVSD struct
typedef struct _TVSD95
{
DWORD dwSize;
LONG cxScreen;
LONG cyScreen;
LONG dxLeft;
LONG dxRight;
LONG dyTop;
LONG dyBottom;
DWORD uAutoHide;
RECTL rcAutoHide;
DWORD uStuckPlace;
DWORD dwFlags;
} TVSD95;
// Nashville tray save data
typedef struct _TVSD
{
DWORD dwSize;
LONG lSignature; // signature (must be negative)
DWORD dwFlags; // TVSD_ flags
DWORD uStuckPlace; // current stuck edge
SIZE sStuckWidths; // widths of stuck rects
RECT rcLastStuck; // last stuck position in pixels
} TVSD;
// convenient union for reading either
typedef union _TVSDCOMPAT
{
TVSD t; // new format
TVSD95 w95; // old format
} TVSDCOMPAT;
#define TVSDSIG_CURRENT (-1L)
#define IS_CURRENT_TVSD(t) ((t.dwSize >= sizeof(TVSD)) && (t.lSignature < 0))
#define MAYBE_WIN95_TVSD(t) (t.dwSize == sizeof(TVSD95))
DWORD _GetDefaultTVSDFlags();
class CTray;
class CDropTargetBase : public IDropTarget
{
public:
// *** IUnknown methods ***
STDMETHODIMP QueryInterface(REFIID riid, void ** ppvObj);
STDMETHODIMP_(ULONG) AddRef();
STDMETHODIMP_(ULONG) Release();
// *** IDropTarget methods ***
STDMETHODIMP DragEnter(IDataObject *pdtobj, DWORD grfKeyState, POINTL ptl, DWORD *pdwEffect);
STDMETHODIMP DragOver(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect);
STDMETHODIMP DragLeave();
STDMETHODIMP Drop(IDataObject *pdtobj, DWORD grfKeyState, POINTL ptl, DWORD *pdwEffect);
CDropTargetBase(CTray* ptray) : _ptray(ptray) {}
protected:
CTray* _ptray;
};
class CTrayDropTarget : public CDropTargetBase
{
public:
// *** IDropTarget methods ***
STDMETHODIMP DragEnter(IDataObject *pdtobj, DWORD grfKeyState, POINTL ptl, DWORD *pdwEffect);
STDMETHODIMP DragOver(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect);
CTrayDropTarget();
};
class CStartDropTarget : public CDropTargetBase
{
public:
// *** IDropTarget methods ***
STDMETHODIMP DragEnter(IDataObject *pdtobj, DWORD grfKeyState, POINTL ptl, DWORD *pdwEffect);
STDMETHODIMP DragOver(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect);
STDMETHODIMP DragLeave();
STDMETHODIMP Drop(IDataObject *pdtobj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect);
CStartDropTarget();
protected:
HRESULT _GetStartMenuDropTarget(IDropTarget** pptgt);
void _StartAutoOpenTimer(POINTL *pptl);
DWORD _dwEffectsAllowed;
};
class CDeskTray : public IDeskTray
{
public:
// *** IUnknown methods ***
STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj);
STDMETHODIMP_(ULONG)AddRef();
STDMETHODIMP_(ULONG) Release();
// *** IDeskTray methods ***
STDMETHODIMP_(UINT) AppBarGetState();
STDMETHODIMP GetTrayWindow(HWND* phwndTray);
STDMETHODIMP SetDesktopWindow(HWND hwndDesktop);
STDMETHODIMP SetVar(int var, DWORD value);
protected:
CDeskTray(); // noone but tray should instantiate
CTray* _ptray;
friend class CTray;
};
EXTERN_C void Tray_OnStartMenuDismissed();
#ifdef FEATURE_STARTPAGE
EXTERN_C void Tray_OnStartPageDismissed();
EXTERN_C void Tray_MenuInvoke(int idCmd);
#endif
EXTERN_C void Tray_SetStartPaneActive(BOOL fActive);
EXTERN_C void Tray_UnlockStartPane();
#define TPF_TASKBARPAGE 0x00000001
#define TPF_STARTMENUPAGE 0x00000002
#define TPF_INVOKECUSTOMIZE 0x00000004 // start with the "Customize..." sub-dialog open
EXTERN_C void Tray_DoProperties(DWORD dwFlags);
#define AH_OFF 0x00
#define AH_ON 0x01
#define AH_HIDING 0x02
class CTray : public CImpWndProc
{
public:
//
// miscellaneous public methods
//
CTray();
void HandleWindowDestroyed(HWND hwnd);
void HandleFullScreenApp(HWND hwnd);
void RealityCheck();
DWORD getStuckPlace() { return _uStuckPlace; }
void InvisibleUnhide(BOOL fShowWindow);
void ContextMenuInvoke(int idCmd);
HMENU BuildContextMenu(BOOL fIncludeTime);
void AsyncSaveSettings();
BOOL Init();
void Unhide();
void VerifySize(BOOL fWinIni, BOOL fRoundUp = FALSE);
void SizeWindows();
int HotkeyAdd(WORD wHotkey, LPCITEMIDLIST pidlFolder, LPCITEMIDLIST pidlItem, BOOL fClone);
void CheckWindowPositions();
void SaveWindowPositions(UINT idRes);
void ForceStartButtonUp();
void DoProperties(DWORD dwFlags);
void LogFailedStartupApp();
HWND GetTaskWindow() { return _hwndTasks; }
HWND GetTrayTips() { return _hwndTrayTips; }
IDeskTray* GetDeskTray() { return &_desktray; }
IMenuPopup* GetStartMenu() { return _pmpStartMenu; };
void StartMenuContextMenu(HWND hwnd, DWORD dwPos);
BOOL IsTaskbarFading() { return _fTaskbarFading; };
DWORD CountOfRunningPrograms();
void ClosePopupMenus();
HWND GetTrayNotifyHWND()
{
return _hwndNotify;
}
void CreateStartButtonBalloon(UINT idsTitle, UINT idsMessage);
void GetTrayViewOpts(TRAYVIEWOPTS* ptvo)
{
ptvo->fAlwaysOnTop = _fAlwaysOnTop;
ptvo->fSMSmallIcons = _fSMSmallIcons;
ptvo->fHideClock = _fHideClock;
ptvo->fNoTrayItemsDisplayPolicyEnabled = _trayNotify.GetIsNoTrayItemsDisplayPolicyEnabled();
ptvo->fNoAutoTrayPolicyEnabled = _trayNotify.GetIsNoAutoTrayPolicyEnabled();
ptvo->fAutoTrayEnabledByUser = _trayNotify.GetIsAutoTrayEnabledByUser();
ptvo->uAutoHide = _uAutoHide; // AH_HIDING , AH_ON
ptvo->fShowQuickLaunch = (-1 != SendMessage(_hwnd, WMTRAY_TOGGLEQL, 0, (LPARAM)-1));
}
void SetTrayViewOpts(const TRAYVIEWOPTS* ptvo)
{
_UpdateAlwaysOnTop(ptvo->fAlwaysOnTop);
SendMessage(_hwnd, WMTRAY_TOGGLEQL, 0, (LPARAM)ptvo->fShowQuickLaunch);
_fSMSmallIcons = ptvo->fSMSmallIcons;
_fHideClock = ptvo->fHideClock;
_uAutoHide = ptvo->uAutoHide; // AH_HIDING , AH_ON
// There is no necessity to save the fNoAutoTrayPolicyEnabled,
// fNoTrayItemsDisplayPolicyEnabled, fAutoTrayEnabledByUser settings...
}
BOOL GetIsNoToolbarsOnTaskbarPolicyEnabled() const
{
return _fNoToolbarsOnTaskbarPolicyEnabled;
}
STDMETHODIMP_(ULONG) AddRef() { return 2; }
STDMETHODIMP_(ULONG) Release() { return 1; }
//
// miscellaneous public data
//
// from TRAYSTUFF
BOOL _fCoolTaskbar;
BOOL _bMainMenuInit;
BOOL _fFlashing; // currently flashing (HSHELL_FLASH)
BOOL _fStuckRudeApp;
BOOL _fDeferedPosRectChange;
BOOL _fSelfSizing;
BOOL _fBalloonUp; // true if balloon notification is up
BOOL _fIgnoreDoneMoving;
BOOL _fShowSizingBarAlways;
BOOL _fSkipErase;
BOOL _fIsLogoff;
BOOL _fBandSiteInitialized;
HWND _hwndStart;
HWND _hwndLastActive;
IBandSite *_ptbs;
UINT _uAutoHide; // AH_HIDING , AH_ON
HBITMAP _hbmpStartBkg;
HFONT _hFontStart;
RECT _arStuckRects[4]; // temporary for hit-testing
CTrayNotify _trayNotify;
protected:
// protected methods
friend class CTaskBarPropertySheet;
static DWORD WINAPI SyncThreadProc(void *pv);
DWORD _SyncThreadProc();
static DWORD WINAPI MainThreadProc(void *pv);
int _GetPart(BOOL fSizingBar, UINT uStuckPlace);
void _UpdateVertical(UINT uStuckPlace, BOOL fForce = FALSE);
void _RaiseDesktop(BOOL fRaise, BOOL fRestoreWindows);
BOOL _RestoreWindowPositions(BOOL fPostLowerDesktop);
void _RestoreWindowPos();
static BOOL SavePosEnumProc(HWND hwnd, LPARAM lParam);
BOOL _IsPopupMenuVisible();
BOOL _IsActive();
void _AlignStartButton();
void _GetWindowSizes(UINT uStuckPlace, PRECT prcClient, PRECT prcView, PRECT prcNotify);
void _GetStuckDisplayRect(UINT uStuckPlace, LPRECT prcDisplay);
void _Hide();
HWND _GetClockWindow(void);
HRESULT _LoadInProc(PCOPYDATASTRUCT pcds);
LRESULT _CreateWindows();
LRESULT _InitStartButtonEtc();
void _AdjustMinimizedMetrics();
void _MessageLoop();
void _BuildStartMenu();
void _DestroyStartMenu();
int _TrackMenu(HMENU hmenu);
static DWORD WINAPI RunDlgThreadProc(void *pv);
DWORD _RunDlgThreadProc(HANDLE hdata);
int _GetQuickLaunchID();
int _ToggleQL(int iVisible);
static BOOL TileEnumProc(HWND hwnd, LPARAM lParam);
BOOL _CanTileAnyWindows()
{
return !EnumWindows(TileEnumProc, (LPARAM)this);
}
void _RegisterDropTargets();
void _RevokeDropTargets();
BOOL _UpdateAlwaysOnTop(BOOL fAlwaysOnTop);
HMONITOR _GetDisplayRectFromRect(LPRECT prcDisplay, LPCRECT prcIn, UINT uFlags);
HMONITOR _GetDisplayRectFromPoint(LPRECT prcDisplay, POINT pt, UINT uFlags);
void _AdjustRectForSizingBar(UINT uStuckPlace, LPRECT prc, int iIncrement);
void _MakeStuckRect(LPRECT prcStick, LPCRECT prcBound, SIZE size, UINT uStick);
void _ScreenSizeChange(HWND hwnd);
void _ContextMenu(DWORD dwPos, BOOL fSetTime);
void _StuckTrayChange();
void _ResetZorder();
void _HandleSize();
BOOL _HandleSizing(WPARAM code, LPRECT lprc, UINT uStuckPlace);
void _RegisterGlobalHotkeys();
void _UnregisterGlobalHotkeys();
void _HandleGlobalHotkey(WPARAM wParam);
void _SetAutoHideTimer();
void _ComputeHiddenRect(LPRECT prc, UINT uStuck);
UINT _GetDockedRect(LPRECT prc, BOOL fMoving);
void _CalcClipCoords(RECT *prcClip, const RECT *prcMonitor, const RECT *prcNew);
void _ClipInternal(const RECT *prcClip);
void _ClipWindow(BOOL fEnableClipping);
UINT _CalcDragPlace(POINT pt);
UINT _RecalcStuckPos(LPRECT prc);
void _AutoHideCollision();
LRESULT _HandleMeasureItem(HWND hwnd, LPMEASUREITEMSTRUCT lpmi);
void _OnDesktopState(LPARAM lParam);
BOOL _ToggleLanguageBand(BOOL fShowIt);
LRESULT _OnDeviceChange(HWND hwnd, WPARAM wParam, LPARAM lParam);
DWORD _PtOnResizableEdge(POINT pt, LPRECT prcClient);
BOOL _MapNCToClient(LPARAM* plParam);
BOOL _TryForwardNCToClient(UINT uMsg, LPARAM lParam);
LRESULT _OnSessionChange(WPARAM wParam, LPARAM lParam);
LRESULT _NCPaint(HRGN hrgn);
LRESULT v_WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
BOOL _CanMinimizeAll();
BOOL _MinimizeAll(BOOL fPostRaiseDesktop);
void _Command(UINT idCmd);
LONG _SetAutoHideState(BOOL fAutoHide);
BOOL _ShouldWeShowTheStartButtonBalloon();
void _DontShowTheStartButtonBalloonAnyMore();
void _DestroyStartButtonBalloon();
void _ShowStartButtonToolTip();
void _ToolbarMenu();
HFONT _CreateStartFont(HWND hwndTray);
void _SaveTrayStuff(void);
void _SaveTray(void);
void _SaveTrayAndDesktop(void);
void _SlideStep(HWND hwnd, const RECT *prcMonitor, const RECT *prcOld, const RECT *prcNew);
void _DoExitWindows(HWND hwnd);
static LRESULT WINAPI StartButtonSubclassWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
LRESULT _StartButtonSubclassWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
void _ResizeStuckRects(RECT *arStuckRects);
static DWORD WINAPI PropertiesThreadProc(void* pv);
DWORD _PropertiesThreadProc(DWORD dwFlags);
int _RecomputeWorkArea(HWND hwndCause, HMONITOR hmon, LPRECT prcWork);
void _StartButtonReset();
void _RefreshStartMenu();
void _ExploreCommonStartMenu(BOOL bExplore);
BOOL _CreateClockWindow();
void _CreateTrayTips();
HWND _CreateStartButton();
BOOL _InitTrayClass();
void _SetStuckMonitor();
void _GetSaveStateAndInitRects();
LRESULT _OnCreateAsync();
LRESULT _OnCreate(HWND hwnd);
void _UpdateBandSiteStyle();
void _InitBandsite();
void _InitNonzeroGlobals();
void _CreateTrayWindow();
void _DoneMoving(LPWINDOWPOS lpwp);
void _SnapshotStuckRectSize(UINT uPlace);
void _RecomputeAllWorkareas();
void _SlideWindow(HWND hwnd, RECT *prc, BOOL fShow);
void _UnhideNow();
void _HandleEnterMenuLoop();
void _HandleExitMenuLoop();
void _SetUnhideTimer(LONG x, LONG y);
void _OnNewSystemSizes();
static int WINAPI CheckWndPosEnumProc(void *pItem, void *pData);
void _HandleTimer(WPARAM wTimerID);
void _KickStartAutohide();
void _HandleMoving(WPARAM wParam, LPRECT lprc);
LRESULT _HandleDestroy();
void _SetFocus(HWND hwnd);
void _ActAsSwitcher();
void _OnWinIniChange(HWND hwnd, WPARAM wParam, LPARAM lParam);
LRESULT _ShortcutRegisterHotkey(HWND hwnd, WORD wHotkey, ATOM atom);
LRESULT _SetHotkeyEnable(HWND hwnd, BOOL fEnable);
void _HandleWindowPosChanging(LPWINDOWPOS lpwp);
void _HandlePowerStatus(UINT uMsg, WPARAM wParam, LPARAM lParam);
void _DesktopCleanup_GetFileTimeNDaysFromGivenTime(const FILETIME *pftGiven, FILETIME * pftReturn, int iDays);
BOOL _DesktopCleanup_ShouldRun();
void _CheckDesktopCleanup(void);
static BOOL_PTR WINAPI RogueProgramFileDlgProc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam);
void _CheckForRogueProgramFile();
void _OnWaitCursorNotify(LPNMHDR pnm);
void _HandlePrivateCommand(LPARAM lParam);
void _OnFocusMsg(UINT uMsg, WPARAM wParam, LPARAM lParam);
int _OnFactoryMessage(WPARAM wParam, LPARAM lParam);
int _OnTimerService(UINT uMsg, WPARAM wParam, LPARAM lParam);
void _HandleDelayBootStuff();
void _HandleChangeNotify(WPARAM wParam, LPARAM lParam);
void _CheckStagingAreaOnTimer();
BOOL _IsTopmost();
void _RefreshSettings();
static BOOL PropagateEnumProc(HWND hwnd, LPARAM lParam);
void _PropagateMessage(HWND hwnd, UINT uMessage, WPARAM wParam, LPARAM lParam);
BOOL _IsAutoHide() { return _uAutoHide & AH_ON; }
void _RunDlg();
static void WINAPI SettingsUIPropSheetCallback(DWORD nStartPage);
static DWORD WINAPI SettingsUIThreadProc(void *pv);
static BOOL WINAPI FullScreenEnumProc(HMONITOR hmon, HDC hdc, LPRECT prc, LPARAM dwData);
static BOOL WINAPI MonitorEnumProc(HMONITOR hMonitor, HDC hdc, LPRECT lprc, LPARAM lData);
// appbar stuff
HRESULT _AppBarSetState(UINT uFlags);
void _AppBarActivationChange(PTRAYAPPBARDATA ptabd);
BOOL _AppBarSetAutoHideBar(PTRAYAPPBARDATA ptabd);
BOOL _AppBarSetAutoHideBar2(HWND hwnd, BOOL fAutoHide, UINT uEdge);
void _AppBarActivationChange2(HWND hwnd, UINT uEdge);
HWND _AppBarGetAutoHideBar(UINT uEdge);
LRESULT _OnAppBarMessage(PCOPYDATASTRUCT pcds);
void _AppBarSubtractRect(PAPPBAR pab, LPRECT lprc);
void _AppBarSubtractRects(HMONITOR hmon, LPRECT lprc);
void _StuckAppChange(HWND hwndCause, LPCRECT prcOld, LPCRECT prcNew, BOOL bTray);
void _AppBarNotifyAll(HMONITOR hmon, UINT uMsg, HWND hwndExclude, LPARAM lParam);
void _AppBarGetTaskBarPos(PTRAYAPPBARDATA ptabd);
void _NukeAppBar(int i);
void _AppBarRemove(PTRAYAPPBARDATA ptabd);
PAPPBAR _FindAppBar(HWND hwnd);
BOOL _AppBarNew(PTRAYAPPBARDATA ptabd);
BOOL _AppBarOutsideOf(PAPPBAR pabReq, PAPPBAR pab);
void _AppBarQueryPos(PTRAYAPPBARDATA ptabd);
void _AppBarSetPos(PTRAYAPPBARDATA ptabd);
// hotkey stuff
void _HandleHotKey(int nID);
LRESULT _ShortcutUnregisterHotkey(HWND hwnd, WORD wHotkey);
LRESULT _RegisterHotkey(HWND hwnd, int i);
LRESULT _UnregisterHotkey(HWND hwnd, int i);
HWND _HotkeyInUse(WORD wHK);
int _RestoreHotkeyList(HWND hwnd);
UINT _HotkeyGetFreeItemIndex(void);
int _HotkeyAddCached(WORD wGHotkey, LPITEMIDLIST pidl);
int _HotkeySave(void);
int _HotkeyRemove(WORD wHotkey);
int _HotkeyRemoveCached(WORD wGHotkey);
BOOL _HotkeyCreate(void);
// Startup troubleshooter stuff
static void WINAPI TroubleShootStartupCB(HWND hwnd, UINT uMsg, UINT_PTR idTimer, DWORD dwTime);
void _OnHandleStartupFailed();
// App compat stuff
static void CALLBACK _MigrateOldBrowserSettingsCB(PVOID lpParameter, BOOLEAN);
void _MigrateOldBrowserSettings();
// protected data
HWND _hwndNotify; // clock window
HWND _hwndStartBalloon;
HWND _hwndRude;
HWND _hwndTrayTips;
HWND _hwndTasks;
HMENU _hmenuStart;
SIZE _sizeStart; // height/width of the start button
SIZE _sizeSizingBar;
int _iAlpha;
HIMAGELIST _himlStartFlag;
CShellServiceObjectMgr _ssomgr;
CStartDropTarget _dtStart;
CTrayDropTarget _dtTray;
CDeskTray _desktray;
#define MM_OTHER 0x01
#define MM_SHUTDOWN 0x02
UINT _uModalMode;
BOOL _fAlwaysOnTop;
BOOL _fSMSmallIcons;
BOOL _fGlobalHotkeyDisable;
BOOL _fThreadTerminate;
BOOL _fSysSizing; // being sized by user; hold off on recalc
BOOL _fHideClock;
BOOL _fShouldResize;
BOOL _fMonitorClipped;
BOOL _fHandledDelayBootStuff;
BOOL _fUndoEnabled;
BOOL _fProcessingDesktopRaise;
BOOL _fFromStart; // Track when context menu popping up from Start button
BOOL _fTaskbarFading;
BOOL _fNoToolbarsOnTaskbarPolicyEnabled;
BOOL _fForegroundLocked;
POINT _ptLastHittest;
HWND _hwndRun;
HWND _hwndProp;
HWND _hwndRebar;
HACCEL _hMainAccel; // Main accel table
int _iWaitCount;
HDPA _hdpaAppBars; // app bar info
HDSA _hdsaHKI; // hotkey info
CRITICAL_SECTION _csHotkey; // Protects _hdsaHKI, hotkey info
LPWINDOWPOSITIONS _pPositions; // saved windows positions (for undo of minimize all)
UINT _uStuckPlace; // the stuck place
SIZE _sStuckWidths; // width/height of tray
UINT _uMoveStuckPlace; // stuck status during a move operation
// these two must go together for save reasons
RECT _rcOldTray; // last place we stuck ourselves (for work area diffs)
HMONITOR _hmonStuck; // The current HMONITOR we are on
HMONITOR _hmonOld; // The last hMonitor we were on
IMenuBand* _pmbStartMenu; //For Message translation.
IMenuPopup* _pmpStartMenu; //For start menu cache
IMenuBand* _pmbStartPane; // For Message translation.
IMenuPopup* _pmpStartPane; // For navigating the start pane
void * _pvStartPane; // For delayed initilization
IStartMenuPin *_psmpin; // For drag/drop to Start Button
IMenuBand* _pmbTasks; //For Message translation.
IMenuPopup* _pmpTasks;
IDeskBand* _pdbTasks;
WNDPROC _pfnButtonProc; // Button subclass.
UINT _uDown;
BOOL _fAllowUp; // Is the start button allowed to be in the up position?
UINT _uStartButtonState; // crazy state machine -- see Tray_SetStartPaneActive
DWORD _tmOpen; // time the Start Menu was opened (for debouncing)
int _cHided;
int _cyTrayBorders;
HTHEME _hTheme;
//
// amount of time to show/hide the tray
// to turn sliding off set these to 0
//
int _dtSlideHide;
int _dtSlideShow;
HWND _hwndFocusBeforeRaise;
BOOL _fMinimizedAllBeforeRaise;
BOOL _fCanSizeMove; // can be turned off by user setting
RECT _rcSizeMoveIgnore;
// event to tell the services on NT5 that we are done with boot
// and they can do their stuff
HANDLE _hShellReadyEvent;
// BOGUS: nuke this (multiple monitors...)
HWND _aHwndAutoHide[ABE_MAX];
// Users and Passwords must send this message to get the "real" logged on user to log off.
// This is required since sometimes U&P runs in the context of a different user and logging this
// other user off does no good. See ext\netplwiz for the other half of this...-dsheldon.
UINT _uLogoffUser;
UINT _uStartButtonBalloonTip;
UINT _uWinMM_DeviceChange;
BOOL _fEarlyStartupFailure;
BOOL _fStartupTroubleshooterLaunched;
ULONG _uNotify;
BOOL _fUseChangeNotifyTimer, _fChangeNotifyTimerRunning;
BOOL _fIsDesktopLocked;
BOOL _fIsDesktopConnected;
// These member variables are used to keep track of downlevel apps
// which attempt to take over as default web browser
HKEY _hkHTTP;
HANDLE _hHTTPEvent;
HANDLE _hHTTPWait;
friend class CDeskTray;
friend class CStartDropTarget;
friend class CTrayDropTarget;
friend class CDropTargetBase;
friend void Tray_OnStartMenuDismissed();
#ifdef FEATURE_STARTPAGE
friend void Tray_OnStartPageDismissed();
#endif
friend void Tray_SetStartPaneActive(BOOL fActive);
friend void Tray_UnlockStartPane();
friend void Tray_DoProperties(DWORD dwFlags);
};
extern CTray c_tray;
extern BOOL g_fInSizeMove;
extern UINT g_uStartButtonAllowPopup;
BOOL _IsSizeMoveEnabled();
BOOL _IsSizeMoveRestricted();
#endif // __cplusplus
#endif // _TRAY_H