677 lines
21 KiB
C++
677 lines
21 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
|