ReactOS 0.4.15-dev-7918-g2a2556c
CTaskSwitchWnd Class Reference
Inheritance diagram for CTaskSwitchWnd:
Collaboration diagram for CTaskSwitchWnd:

Public Member Functions

 CTaskSwitchWnd ()
 
virtual ~CTaskSwitchWnd ()
 
INT GetWndTextFromTaskItem (IN PTASK_ITEM TaskItem, LPWSTR szBuf, DWORD cchBuf)
 
VOID UpdateIndexesAfter (IN INT iIndex, BOOL bInserted)
 
INT UpdateTaskGroupButton (IN PTASK_GROUP TaskGroup)
 
VOID ExpandTaskGroup (IN PTASK_GROUP TaskGroup)
 
HICON GetWndIcon (HWND hwnd)
 
INT UpdateTaskItemButton (IN PTASK_ITEM TaskItem)
 
VOID RemoveIcon (IN PTASK_ITEM TaskItem)
 
PTASK_ITEM FindLastTaskItemOfGroup (IN PTASK_GROUP TaskGroup OPTIONAL, IN PTASK_ITEM NewTaskItem OPTIONAL)
 
INT CalculateTaskItemNewButtonIndex (IN PTASK_ITEM TaskItem)
 
INT AddTaskItemButton (IN OUT PTASK_ITEM TaskItem)
 
BOOL DeleteTaskItemButton (IN OUT PTASK_ITEM TaskItem)
 
PTASK_GROUP AddToTaskGroup (IN HWND hWnd)
 
VOID RemoveTaskFromTaskGroup (IN OUT PTASK_ITEM TaskItem)
 
PTASK_ITEM FindTaskItem (IN HWND hWnd)
 
PTASK_ITEM FindOtherTaskItem (IN HWND hWnd)
 
PTASK_ITEM AllocTaskItem ()
 
VOID FreeTaskItem (IN OUT PTASK_ITEM TaskItem)
 
VOID DeleteTaskItem (IN OUT PTASK_ITEM TaskItem)
 
VOID CheckActivateTaskItem (IN OUT PTASK_ITEM TaskItem)
 
PTASK_ITEM FindTaskItemByIndex (IN INT Index)
 
PTASK_GROUP FindTaskGroupByIndex (IN INT Index)
 
BOOL AddTask (IN HWND hWnd)
 
BOOL ActivateTaskItem (IN OUT PTASK_ITEM TaskItem OPTIONAL)
 
BOOL ActivateTask (IN HWND hWnd)
 
BOOL DeleteTask (IN HWND hWnd)
 
VOID DeleteAllTasks ()
 
VOID FlashTaskItem (IN OUT PTASK_ITEM TaskItem)
 
BOOL FlashTask (IN HWND hWnd)
 
VOID RedrawTaskItem (IN OUT PTASK_ITEM TaskItem)
 
BOOL RedrawTask (IN HWND hWnd)
 
VOID UpdateButtonsSize (IN BOOL bRedrawDisabled)
 
BOOL CALLBACK EnumWindowsProc (IN HWND hWnd)
 
BOOL RefreshWindowList ()
 
LRESULT OnThemeChanged (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnCreate (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnDestroy (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
VOID SendPulseToTray (BOOL bDelete, HWND hwndActive)
 
BOOL HandleAppCommand (IN WPARAM wParam, IN LPARAM lParam)
 
LRESULT OnShellHook (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
VOID HandleTaskItemClick (IN OUT PTASK_ITEM TaskItem)
 
VOID HandleTaskGroupClick (IN OUT PTASK_GROUP TaskGroup)
 
BOOL HandleButtonClick (IN WORD wIndex)
 
VOID HandleTaskItemRightClick (IN OUT PTASK_ITEM TaskItem)
 
VOID HandleTaskGroupRightClick (IN OUT PTASK_GROUP TaskGroup)
 
BOOL HandleButtonRightClick (IN WORD wIndex)
 
LRESULT HandleItemPaint (IN OUT NMTBCUSTOMDRAW *nmtbcd)
 
LRESULT HandleToolbarNotification (IN const NMHDR *nmh)
 
LRESULT OnEraseBackground (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnSize (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnNcHitTest (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnCommand (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnNotify (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnUpdateTaskbarPos (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnTaskbarSettingsChanged (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnContextMenu (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnKludgeItemRect (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnMouseActivate (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnTimer (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnSetFont (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnSettingChanged (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnCopyData (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
HRESULT Initialize (IN HWND hWndParent, IN OUT ITrayWindow *tray)
 
HRESULT WINAPI GetWindow (HWND *phwnd)
 
HRESULT WINAPI ContextSensitiveHelp (BOOL fEnterMode)
 
- Public Member Functions inherited from ATL::CComObjectRootEx< CComMultiThreadModelNoCS >
 ~CComObjectRootEx ()
 
ULONG InternalAddRef ()
 
ULONG InternalRelease ()
 
void Lock ()
 
void Unlock ()
 
HRESULT _AtlInitialConstruct ()
 
- Public Member Functions inherited from ATL::CComObjectRootBase
 CComObjectRootBase ()
 
 ~CComObjectRootBase ()
 
void SetVoid (void *)
 
HRESULT _AtlFinalConstruct ()
 
HRESULT FinalConstruct ()
 
void InternalFinalConstructAddRef ()
 
void InternalFinalConstructRelease ()
 
void FinalRelease ()
 
- Public Member Functions inherited from ATL::CWindowImpl< CTaskSwitchWnd, CWindow, CControlWinTraits >
HWND Create (HWND hWndParent, _U_RECT rect=NULL, LPCTSTR szWindowName=NULL, DWORD dwStyle=0, DWORD dwExStyle=0, _U_MENUorID MenuOrID=0U, LPVOID lpCreateParam=NULL)
 
- Public Member Functions inherited from ATL::CWindowImplBaseT< TBase, TWinTraits >
 CWindowImplBaseT ()
 
virtual void OnFinalMessage (HWND)
 
BOOL SubclassWindow (HWND hWnd)
 
HWND UnsubclassWindow (BOOL bForce=FALSE)
 
virtual WNDPROC GetWindowProc ()
 
LRESULT DefWindowProc (UINT uMsg, WPARAM wParam, LPARAM lParam)
 
HWND Create (HWND hWndParent, _U_RECT rect, LPCTSTR szWindowName, DWORD dwStyle, DWORD dwExStyle, _U_MENUorID MenuOrID, ATOM atom, LPVOID lpCreateParam)
 
- Public Member Functions inherited from ATL::CWindowImplRoot< TBase >
 CWindowImplRoot ()
 
virtual ~CWindowImplRoot ()
 
- Public Member Functions inherited from ATL::CWindow
 CWindow (HWND hWnd=NULL)
 
 operator HWND () const
 
UINT ArrangeIconicWindows ()
 
void Attach (HWND hWndNew)
 
HDC BeginPaint (LPPAINTSTRUCT lpPaint)
 
BOOL BringWindowToTop ()
 
BOOL CenterWindow (HWND hWndCenter=NULL)
 
BOOL ChangeClipboardChain (HWND hWndNewNext)
 
BOOL CheckDlgButton (int nIDButton, UINT nCheck)
 
BOOL CheckRadioButton (int nIDFirstButton, int nIDLastButton, int nIDCheckButton)
 
HWND ChildWindowFromPoint (POINT point) const
 
HWND ChildWindowFromPointEx (POINT point, UINT uFlags) const
 
BOOL ClientToScreen (LPPOINT lpPoint) const
 
BOOL ClientToScreen (LPRECT lpRect) const
 
HWND Create (LPCTSTR lpstrWndClass, HWND hWndParent, _U_RECT rect=NULL, LPCTSTR szWindowName=NULL, DWORD dwStyle=0, DWORD dwExStyle=0, _U_MENUorID MenuOrID=0U, LPVOID lpCreateParam=NULL)
 
BOOL CreateCaret (HBITMAP pBitmap)
 
BOOL CreateGrayCaret (int nWidth, int nHeight)
 
BOOL CreateSolidCaret (int nWidth, int nHeight)
 
HDWP DeferWindowPos (HDWP hWinPosInfo, HWND hWndInsertAfter, int x, int y, int cx, int cy, UINT uFlags)
 
BOOL DestroyWindow ()
 
HWND Detach ()
 
int DlgDirList (LPTSTR lpPathSpec, int nIDListBox, int nIDStaticPath, UINT nFileType)
 
int DlgDirListComboBox (LPTSTR lpPathSpec, int nIDComboBox, int nIDStaticPath, UINT nFileType)
 
BOOL DlgDirSelect (LPTSTR lpString, int nCount, int nIDListBox)
 
BOOL DlgDirSelectComboBox (LPTSTR lpString, int nCount, int nIDComboBox)
 
void DragAcceptFiles (BOOL bAccept=TRUE)
 
BOOL DrawMenuBar ()
 
BOOL EnableScrollBar (UINT uSBFlags, UINT uArrowFlags=ESB_ENABLE_BOTH)
 
BOOL EnableWindow (BOOL bEnable=TRUE)
 
void EndPaint (LPPAINTSTRUCT lpPaint)
 
BOOL FlashWindow (BOOL bInvert)
 
BOOL GetClientRect (LPRECT lpRect) const
 
HDC GetDC ()
 
HDC GetDCEx (HRGN hRgnClip, DWORD flags)
 
HWND GetDescendantWindow (int nID) const
 
HRESULT GetDlgControl (int nID, REFIID iid, void **ppCtrl)
 
int GetDlgCtrlID () const
 
HRESULT GetDlgHost (int nID, REFIID iid, void **ppHost)
 
HWND GetDlgItem (_In_ int nID) const
 
UINT GetDlgItemInt (_In_ int nID, _Out_opt_ BOOL *lpTrans=NULL, _In_ BOOL bSigned=TRUE) const
 
UINT GetDlgItemText (_In_ int nID, _Out_writes_to_(nMaxCount, return+1) LPTSTR lpStr, _In_ int nMaxCount) const
 
BOOL GetDlgItemText (_In_ int nID, _Inout_ _Outref_result_maybenull_ _Post_z_ BSTR &bstrText) const
 
DWORD GetExStyle () const
 
HFONT GetFont () const
 
DWORD GetHotKey () const
 
HICON GetIcon (BOOL bBigIcon=TRUE) const
 
HWND GetLastActivePopup () const
 
HMENU GetMenu () const
 
HWND GetNextDlgGroupItem (HWND hWndCtl, BOOL bPrevious=FALSE) const
 
HWND GetNextDlgTabItem (HWND hWndCtl, BOOL bPrevious=FALSE) const
 
CWindow GetParent () const
 
BOOL GetScrollInfo (int nBar, LPSCROLLINFO lpScrollInfo)
 
BOOL GetScrollPos (int nBar)
 
BOOL GetScrollRange (int nBar, LPINT lpMinPos, LPINT lpMaxPos) const
 
DWORD GetStyle () const
 
HMENU GetSystemMenu (BOOL bRevert)
 
HWND GetTopLevelParent () const
 
HWND GetTopLevelWindow () const
 
HWND GetTopWindow () const
 
BOOL GetUpdateRect (LPRECT lpRect, BOOL bErase=FALSE)
 
int GetUpdateRgn (HRGN hRgn, BOOL bErase=FALSE)
 
HWND GetWindow (UINT nCmd) const
 
DWORD GetWindowContextHelpId () const
 
HDC GetWindowDC ()
 
LONG GetWindowLong (int nIndex) const
 
LONG_PTR GetWindowLongPtr (int nIndex) const
 
BOOL GetWindowPlacement (WINDOWPLACEMENT *lpwndpl) const
 
DWORD GetWindowProcessID ()
 
BOOL GetWindowRect (LPRECT lpRect) const
 
int GetWindowRgn (HRGN hRgn)
 
int GetWindowText (_Out_writes_to_(nMaxCount, return+1) LPTSTR lpszStringBuf, _In_ int nMaxCount) const
 
BOOL GetWindowText (_Inout_ _Outref_result_maybenull_ _Post_z_ BSTR &bstrText) const
 
int GetWindowTextLength () const
 
DWORD GetWindowThreadID ()
 
WORD GetWindowWord (int nIndex) const
 
void GotoDlgCtrl (HWND hWndCtrl) const
 
BOOL HideCaret ()
 
BOOL HiliteMenuItem (HMENU hMenu, UINT uHiliteItem, UINT uHilite)
 
BOOL Invalidate (BOOL bErase=TRUE)
 
BOOL InvalidateRect (LPCRECT lpRect, BOOL bErase=TRUE)
 
void InvalidateRgn (HRGN hRgn, BOOL bErase=TRUE)
 
BOOL IsChild (const HWND hWnd) const
 
BOOL IsDialogMessage (LPMSG lpMsg)
 
UINT IsDlgButtonChecked (int nIDButton) const
 
BOOL IsIconic () const
 
BOOL IsParentDialog ()
 
BOOL IsWindow () const
 
BOOL IsWindowEnabled () const
 
BOOL IsWindowVisible () const
 
BOOL IsWindowUnicode ()
 
BOOL IsZoomed () const
 
BOOL KillTimer (UINT_PTR nIDEvent)
 
BOOL LockWindowUpdate (BOOL bLock=TRUE)
 
int MapWindowPoints (HWND hWndTo, LPPOINT lpPoint, UINT nCount) const
 
int MapWindowPoints (HWND hWndTo, LPRECT lpRect) const
 
int MessageBox (LPCTSTR lpszText, LPCTSTR lpszCaption=NULL, UINT nType=MB_OK)
 
BOOL ModifyStyle (DWORD dwRemove, DWORD dwAdd, UINT nFlags=0)
 
BOOL ModifyStyleEx (DWORD dwRemove, DWORD dwAdd, UINT nFlags=0)
 
BOOL MoveWindow (int x, int y, int nWidth, int nHeight, BOOL bRepaint=TRUE)
 
void NextDlgCtrl () const
 
BOOL OpenClipboard ()
 
BOOL PostMessage (UINT message, WPARAM wParam=0, LPARAM lParam=0)
 
void PrevDlgCtrl () const
 
void Print (HDC hDC, DWORD dwFlags) const
 
void PrintClient (HDC hDC, DWORD dwFlags) const
 
BOOL RedrawWindow (LPCRECT lpRectUpdate=NULL, HRGN hRgnUpdate=NULL, UINT flags=RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE)
 
int ReleaseDC (HDC hDC)
 
BOOL ResizeClient (int nWidth, int nHeight, BOOL bRedraw=FALSE)
 
BOOL ScreenToClient (LPPOINT lpPoint) const
 
BOOL ScrollWindow (int xAmount, int yAmount, LPCRECT lpRect=NULL, LPCRECT lpClipRect=NULL)
 
int ScrollWindowEx (int dx, int dy, LPCRECT lpRectScroll, LPCRECT lpRectClip, HRGN hRgnUpdate, LPRECT lpRectUpdate, UINT flags)
 
LRESULT SendDlgItemMessage (int nID, UINT message, WPARAM wParam=0, LPARAM lParam=0)
 
LRESULT SendMessage (UINT message, WPARAM wParam=0, LPARAM lParam=0)
 
void SendMessageToDescendants (UINT message, WPARAM wParam=0, LPARAM lParam=0, BOOL bDeep=TRUE)
 
BOOL SendNotifyMessage (UINT message, WPARAM wParam=0, LPARAM lParam=0)
 
HWND SetActiveWindow ()
 
HWND SetCapture ()
 
HWND SetClipboardViewer ()
 
int SetDlgCtrlID (int nID)
 
BOOL SetDlgItemInt (int nID, UINT nValue, BOOL bSigned=TRUE)
 
BOOL SetDlgItemText (int nID, LPCTSTR lpszString)
 
HWND SetFocus ()
 
void SetFont (HFONT hFont, BOOL bRedraw=TRUE)
 
int SetHotKey (WORD wVirtualKeyCode, WORD wModifiers)
 
HICON SetIcon (HICON hIcon, BOOL bBigIcon=TRUE)
 
BOOL SetMenu (HMENU hMenu)
 
HWND SetParent (HWND hWndNewParent)
 
void SetRedraw (BOOL bRedraw=TRUE)
 
int SetScrollInfo (int nBar, LPSCROLLINFO lpScrollInfo, BOOL bRedraw=TRUE)
 
int SetScrollPos (int nBar, int nPos, BOOL bRedraw=TRUE)
 
BOOL SetScrollRange (int nBar, int nMinPos, int nMaxPos, BOOL bRedraw=TRUE)
 
UINT_PTR SetTimer (UINT_PTR nIDEvent, UINT nElapse, void(CALLBACK *lpfnTimer)(HWND, UINT, UINT_PTR, DWORD)=NULL)
 
BOOL SetWindowContextHelpId (DWORD dwContextHelpId)
 
LONG SetWindowLong (int nIndex, LONG dwNewLong)
 
LONG_PTR SetWindowLongPtr (int nIndex, LONG_PTR dwNewLong)
 
BOOL SetWindowPlacement (const WINDOWPLACEMENT *lpwndpl)
 
BOOL SetWindowPos (HWND hWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags)
 
int SetWindowRgn (HRGN hRgn, BOOL bRedraw=FALSE)
 
BOOL SetWindowText (LPCTSTR lpszString)
 
WORD SetWindowWord (int nIndex, WORD wNewWord)
 
BOOL ShowCaret ()
 
BOOL ShowOwnedPopups (BOOL bShow=TRUE)
 
BOOL ShowScrollBar (UINT nBar, BOOL bShow=TRUE)
 
BOOL ShowWindow (int nCmdShow)
 
BOOL ShowWindowAsync (int nCmdShow)
 
BOOL UpdateWindow ()
 
BOOL ValidateRect (LPCRECT lpRect)
 
BOOL ValidateRgn (HRGN hRgn)
 
BOOL WinHelp (LPCTSTR lpszHelp, UINT nCmd=HELP_CONTEXT, DWORD dwData=0)
 
- Public Member Functions inherited from ATL::CMessageMap
virtual BOOL ProcessWindowMessage (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT &lResult, DWORD dwMsgMapID)=0
 
HRESULT GetWindow ([out] HWND *phwnd)
 
HRESULT ContextSensitiveHelp ([in] BOOL fEnterMode)
 
- Public Member Functions inherited from IUnknown
HRESULT QueryInterface ([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
 
ULONG AddRef ()
 
ULONG Release ()
 

Static Public Member Functions

static BOOL CALLBACK s_EnumWindowsProc (IN HWND hWnd, IN LPARAM lParam)
 
static VOID CALLBACK SendAsyncProc (HWND hwnd, UINT uMsg, DWORD_PTR dwData, LRESULT lResult)
 
- Static Public Member Functions inherited from ATL::CComCoClass< CTaskSwitchWnd >
static LPCTSTR WINAPI GetObjectDescription ()
 
- Static Public Member Functions inherited from ATL::CComObjectRootBase
static void WINAPI ObjectMain (bool)
 
static const struct _ATL_CATMAP_ENTRYGetCategoryMap ()
 
static HRESULT WINAPI InternalQueryInterface (void *pThis, const _ATL_INTMAP_ENTRY *pEntries, REFIID iid, void **ppvObject)
 
- Static Public Member Functions inherited from ATL::CWindowImpl< CTaskSwitchWnd, CWindow, CControlWinTraits >
static LPCTSTR GetWndCaption ()
 
- Static Public Member Functions inherited from ATL::CWindowImplBaseT< TBase, TWinTraits >
static DWORD GetWndStyle (DWORD dwStyle)
 
static DWORD GetWndExStyle (DWORD dwExStyle)
 
static LRESULT CALLBACK StartWindowProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
static LRESULT CALLBACK WindowProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
- Static Public Member Functions inherited from ATL::CWindow
static LPCTSTR GetWndClassName ()
 
static LRESULT SendMessage (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
 

Private Attributes

CTaskToolbar m_TaskBar
 
CComPtr< ITrayWindow > m_Tray
 
UINT m_ShellHookMsg
 
WORD m_TaskItemCount
 
WORD m_AllocatedTaskItems
 
PTASK_GROUP m_TaskGroups
 
PTASK_ITEM m_TaskItems
 
PTASK_ITEM m_ActiveTaskItem
 
HTHEME m_Theme
 
UINT m_ButtonsPerLine
 
WORD m_ButtonCount
 
HIMAGELIST m_ImageList
 
BOOL m_IsGroupingEnabled
 
BOOL m_IsDestroying
 
SIZE m_ButtonSize
 
UINT m_uHardErrorMsg
 
CHardErrorThread m_HardErrorThread
 

Additional Inherited Members

- Public Types inherited from ATL::CWindowImplRoot< TBase >
enum  { WINSTATE_DESTROYED = 0x00000001 }
 
- Public Types inherited from IOleWindow
typedef IOleWindowLPOLEWINDOW
 
- Public Types inherited from IUnknown
typedef IUnknownLPUNKNOWN
 
- Public Attributes inherited from ATL::CComObjectRootBase
LONG m_dwRef
 
- Public Attributes inherited from ATL::CWindowImplBaseT< TBase, TWinTraits >
WNDPROC m_pfnSuperWindowProc
 
- Public Attributes inherited from ATL::CWindowImplRoot< TBase >
CWndProcThunk m_thunk
 
const _ATL_MSGm_pCurrentMsg
 
DWORD m_dwState
 
- Public Attributes inherited from ATL::CWindow
HWND m_hWnd
 
- Static Public Attributes inherited from ATL::CWindow
static RECT rcDefault
 

Detailed Description

Definition at line 296 of file taskswnd.cpp.

Constructor & Destructor Documentation

◆ CTaskSwitchWnd()

CTaskSwitchWnd::CTaskSwitchWnd ( )
inline

Definition at line 330 of file taskswnd.cpp.

330 :
337 m_Theme(NULL),
339 m_ButtonCount(0),
343 {
346 }
UINT m_ShellHookMsg
Definition: taskswnd.cpp:306
PTASK_ITEM m_ActiveTaskItem
Definition: taskswnd.cpp:313
PTASK_ITEM m_TaskItems
Definition: taskswnd.cpp:312
UINT m_uHardErrorMsg
Definition: taskswnd.cpp:326
BOOL m_IsDestroying
Definition: taskswnd.cpp:322
WORD m_ButtonCount
Definition: taskswnd.cpp:317
HTHEME m_Theme
Definition: taskswnd.cpp:315
PTASK_GROUP m_TaskGroups
Definition: taskswnd.cpp:311
BOOL m_IsGroupingEnabled
Definition: taskswnd.cpp:321
WORD m_AllocatedTaskItems
Definition: taskswnd.cpp:309
HIMAGELIST m_ImageList
Definition: taskswnd.cpp:319
WORD m_TaskItemCount
Definition: taskswnd.cpp:308
UINT m_ButtonsPerLine
Definition: taskswnd.cpp:316
#define NULL
Definition: types.h:112
#define FALSE
Definition: types.h:117
#define L(x)
Definition: ntvdm.h:50
#define ZeroMemory
Definition: winbase.h:1712
UINT WINAPI RegisterWindowMessageW(_In_ LPCWSTR)

◆ ~CTaskSwitchWnd()

virtual CTaskSwitchWnd::~CTaskSwitchWnd ( )
inlinevirtual

Definition at line 347 of file taskswnd.cpp.

347{ }

Member Function Documentation

◆ ActivateTask()

BOOL CTaskSwitchWnd::ActivateTask ( IN HWND  hWnd)
inline

Definition at line 1140 of file taskswnd.cpp.

1141 {
1142 PTASK_ITEM TaskItem;
1143
1144 if (!hWnd)
1145 {
1146 return ActivateTaskItem(NULL);
1147 }
1148
1149 TaskItem = FindTaskItem(hWnd);
1150 if (TaskItem == NULL)
1151 {
1152 TaskItem = FindOtherTaskItem(hWnd);
1153 }
1154
1155 if (TaskItem == NULL)
1156 {
1157 WARN("Activate window 0x%p, could not find task\n", hWnd);
1159 }
1160
1161 return ActivateTaskItem(TaskItem);
1162 }
HWND hWnd
Definition: settings.c:17
#define WARN(fmt,...)
Definition: debug.h:112
PTASK_ITEM FindOtherTaskItem(IN HWND hWnd)
Definition: taskswnd.cpp:883
BOOL ActivateTaskItem(IN OUT PTASK_ITEM TaskItem OPTIONAL)
Definition: taskswnd.cpp:1129
BOOL RefreshWindowList()
Definition: taskswnd.cpp:1407
PTASK_ITEM FindTaskItem(IN HWND hWnd)
Definition: taskswnd.cpp:866

Referenced by HandleTaskItemRightClick(), and OnShellHook().

◆ ActivateTaskItem()

BOOL CTaskSwitchWnd::ActivateTaskItem ( IN OUT PTASK_ITEM TaskItem  OPTIONAL)
inline

Definition at line 1129 of file taskswnd.cpp.

1130 {
1131 if (TaskItem != NULL)
1132 {
1133 TRACE("Activate window 0x%p on button %d\n", TaskItem->hWnd, TaskItem->Index);
1134 }
1135
1136 CheckActivateTaskItem(TaskItem);
1137 return FALSE;
1138 }
VOID CheckActivateTaskItem(IN OUT PTASK_ITEM TaskItem)
Definition: taskswnd.cpp:1009
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by ActivateTask().

◆ AddTask()

BOOL CTaskSwitchWnd::AddTask ( IN HWND  hWnd)
inline

Definition at line 1100 of file taskswnd.cpp.

1101 {
1102 PTASK_ITEM TaskItem;
1103
1104 if (!::IsWindow(hWnd) || m_Tray->IsSpecialHWND(hWnd))
1105 return FALSE;
1106
1107 TaskItem = FindTaskItem(hWnd);
1108 if (TaskItem == NULL)
1109 {
1110 TRACE("Add window 0x%p\n", hWnd);
1111 TaskItem = AllocTaskItem();
1112 if (TaskItem != NULL)
1113 {
1114 ZeroMemory(TaskItem, sizeof(*TaskItem));
1115 TaskItem->hWnd = hWnd;
1116 TaskItem->Index = -1;
1117 TaskItem->Group = AddToTaskGroup(hWnd);
1118
1119 if (!m_IsDestroying)
1120 {
1121 AddTaskItemButton(TaskItem);
1122 }
1123 }
1124 }
1125
1126 return TaskItem != NULL;
1127 }
BOOL IsWindow() const
Definition: atlwin.h:947
PTASK_GROUP AddToTaskGroup(IN HWND hWnd)
Definition: taskswnd.cpp:776
CComPtr< ITrayWindow > m_Tray
Definition: taskswnd.cpp:304
PTASK_ITEM AllocTaskItem()
Definition: taskswnd.cpp:924
INT AddTaskItemButton(IN OUT PTASK_ITEM TaskItem)
Definition: taskswnd.cpp:681
PTASK_GROUP Group
Definition: taskswnd.cpp:82
HWND hWnd
Definition: taskswnd.cpp:81

Referenced by EnumWindowsProc(), and OnShellHook().

◆ AddTaskItemButton()

INT CTaskSwitchWnd::AddTaskItemButton ( IN OUT PTASK_ITEM  TaskItem)
inline

Definition at line 681 of file taskswnd.cpp.

682 {
683 WCHAR windowText[255];
684 TBBUTTON tbBtn = { 0 };
685 INT iIndex;
686 HICON icon;
687
688 if (TaskItem->Index >= 0)
689 {
690 return UpdateTaskItemButton(TaskItem);
691 }
692
693 if (TaskItem->Group != NULL &&
694 TaskItem->Group->IsCollapsed)
695 {
696 /* The task group is collapsed, we only need to update the group button */
697 return UpdateTaskGroupButton(TaskItem->Group);
698 }
699
700 icon = GetWndIcon(TaskItem->hWnd);
701 if (!icon)
702 icon = static_cast<HICON>(LoadImageW(NULL, MAKEINTRESOURCEW(OIC_SAMPLE), IMAGE_ICON, 0, 0, LR_SHARED | LR_DEFAULTSIZE));
703 TaskItem->IconIndex = ImageList_ReplaceIcon(m_ImageList, -1, icon);
704
705 tbBtn.iBitmap = TaskItem->IconIndex;
708 tbBtn.dwData = TaskItem->Index;
709
711 {
712 tbBtn.iString = (DWORD_PTR) windowText;
713 }
714
715 /* Find out where to insert the new button */
716 iIndex = CalculateTaskItemNewButtonIndex(TaskItem);
717 ASSERT(iIndex >= 0);
718 tbBtn.idCommand = iIndex;
719
721
722 if (m_TaskBar.InsertButton(iIndex, &tbBtn))
723 {
724 UpdateIndexesAfter(iIndex, TRUE);
725
726 TRACE("Added button %d for hwnd 0x%p\n", iIndex, TaskItem->hWnd);
727
728 TaskItem->Index = iIndex;
730
731 /* Update button sizes and fix the button wrapping */
733 return iIndex;
734 }
735
737
738 return -1;
739 }
WCHAR windowText[1024]
Definition: appswitch.c:49
INT UpdateTaskItemButton(IN PTASK_ITEM TaskItem)
Definition: taskswnd.cpp:525
INT GetWndTextFromTaskItem(IN PTASK_ITEM TaskItem, LPWSTR szBuf, DWORD cchBuf)
Definition: taskswnd.cpp:349
VOID UpdateButtonsSize(IN BOOL bRedrawDisabled)
Definition: taskswnd.cpp:1255
CTaskToolbar m_TaskBar
Definition: taskswnd.cpp:302
VOID UpdateIndexesAfter(IN INT iIndex, BOOL bInserted)
Definition: taskswnd.cpp:409
INT UpdateTaskGroupButton(IN PTASK_GROUP TaskGroup)
Definition: taskswnd.cpp:472
HICON GetWndIcon(HWND hwnd)
Definition: taskswnd.cpp:490
INT CalculateTaskItemNewButtonIndex(IN PTASK_ITEM TaskItem)
Definition: taskswnd.cpp:637
VOID BeginUpdate()
Definition: taskswnd.cpp:235
VOID EndUpdate()
Definition: taskswnd.cpp:240
#define TRUE
Definition: types.h:120
INT WINAPI ImageList_ReplaceIcon(HIMAGELIST himl, INT nIndex, HICON hIcon)
Definition: imagelist.c:2779
#define ASSERT(a)
Definition: mode.c:44
static HICON
Definition: imagelist.c:84
#define BTNS_SHOWTEXT
Definition: commctrl.h:1006
#define TBSTATE_ELLIPSES
Definition: commctrl.h:978
#define TBSTATE_ENABLED
Definition: commctrl.h:974
#define BTNS_CHECK
Definition: commctrl.h:1000
#define BTNS_NOPREFIX
Definition: commctrl.h:1005
#define _countof(array)
Definition: sndvol32.h:68
BYTE fsState
Definition: commctrl.h:951
INT_PTR iString
Definition: commctrl.h:959
int idCommand
Definition: commctrl.h:950
DWORD_PTR dwData
Definition: commctrl.h:958
int iBitmap
Definition: commctrl.h:949
BYTE fsStyle
Definition: commctrl.h:952
#define DWORD_PTR
Definition: treelist.c:76
int32_t INT
Definition: typedefs.h:58
#define IMAGE_ICON
Definition: winuser.h:212
HANDLE WINAPI LoadImageW(_In_opt_ HINSTANCE hInst, _In_ LPCWSTR name, _In_ UINT type, _In_ int cx, _In_ int cy, _In_ UINT fuLoad)
Definition: cursoricon.c:2203
#define LR_SHARED
Definition: winuser.h:1100
#define LR_DEFAULTSIZE
Definition: winuser.h:1094
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by AddTask().

◆ AddToTaskGroup()

PTASK_GROUP CTaskSwitchWnd::AddToTaskGroup ( IN HWND  hWnd)
inline

Definition at line 776 of file taskswnd.cpp.

777 {
778 DWORD dwProcessId;
779 PTASK_GROUP TaskGroup, *PrevLink;
780
782 &dwProcessId))
783 {
784 TRACE("Cannot get process id of hwnd 0x%p\n", hWnd);
785 return NULL;
786 }
787
788 /* Try to find an existing task group */
789 TaskGroup = m_TaskGroups;
790 PrevLink = &m_TaskGroups;
791 while (TaskGroup != NULL)
792 {
793 if (TaskGroup->dwProcessId == dwProcessId)
794 {
795 TaskGroup->dwTaskCount++;
796 return TaskGroup;
797 }
798
799 PrevLink = &TaskGroup->Next;
800 TaskGroup = TaskGroup->Next;
801 }
802
803 /* Allocate a new task group */
804 TaskGroup = (PTASK_GROUP) HeapAlloc(hProcessHeap,
806 sizeof(*TaskGroup));
807 if (TaskGroup != NULL)
808 {
809 TaskGroup->dwTaskCount = 1;
810 TaskGroup->dwProcessId = dwProcessId;
811 TaskGroup->Index = -1;
812
813 /* Add the task group to the list */
814 *PrevLink = TaskGroup;
815 }
816
817 return TaskGroup;
818 }
#define HeapAlloc
Definition: compat.h:733
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
unsigned long DWORD
Definition: ntddk_ex.h:95
HANDLE hProcessHeap
Definition: kbswitch.c:37
struct _TASK_GROUP * Next
Definition: taskswnd.cpp:63
DWORD dwTaskCount
Definition: taskswnd.cpp:65
DWORD dwProcessId
Definition: taskswnd.cpp:66
struct _TASK_GROUP * PTASK_GROUP
DWORD WINAPI GetWindowThreadProcessId(HWND hWnd, PDWORD lpdwProcessId)

Referenced by AddTask().

◆ AllocTaskItem()

PTASK_ITEM CTaskSwitchWnd::AllocTaskItem ( )
inline

Definition at line 924 of file taskswnd.cpp.

925 {
927 {
928 /* We need the most significant bit in 16 bit command IDs to indicate whether it
929 is a task group or task item. WM_COMMAND limits command IDs to 16 bits! */
930 return NULL;
931 }
932
934
935 if (m_TaskItemCount == 0)
936 {
938 0,
940 if (m_TaskItems != NULL)
941 {
943 }
944 else
945 return NULL;
946 }
948 {
949 PTASK_ITEM NewArray;
950 SIZE_T NewArrayLength, ActiveTaskItemIndex;
951
953
955 0,
957 NewArrayLength * sizeof(*m_TaskItems));
958 if (NewArray != NULL)
959 {
960 if (m_ActiveTaskItem != NULL)
961 {
962 /* Fixup the ActiveTaskItem pointer */
963 ActiveTaskItemIndex = m_ActiveTaskItem - m_TaskItems;
964 m_ActiveTaskItem = NewArray + ActiveTaskItemIndex;
965 }
966 m_AllocatedTaskItems = (WORD) NewArrayLength;
967 m_TaskItems = NewArray;
968 }
969 else
970 return NULL;
971 }
972
973 return m_TaskItems + m_TaskItemCount++;
974 }
#define HeapReAlloc
Definition: compat.h:734
unsigned short WORD
Definition: ntddk_ex.h:93
struct _TASK_ITEM * PTASK_ITEM
#define TASK_ITEM_ARRAY_ALLOC
Definition: taskswnd.cpp:30
#define MAX_TASKS_COUNT
Definition: taskswnd.cpp:29
ULONG_PTR SIZE_T
Definition: typedefs.h:80

Referenced by AddTask().

◆ CalculateTaskItemNewButtonIndex()

INT CTaskSwitchWnd::CalculateTaskItemNewButtonIndex ( IN PTASK_ITEM  TaskItem)
inline

Definition at line 637 of file taskswnd.cpp.

638 {
639 PTASK_GROUP TaskGroup;
640 PTASK_ITEM LastTaskItem;
641
642 /* NOTE: This routine assumes that the group is *not* collapsed! */
643
644 TaskGroup = TaskItem->Group;
646 {
647 if (TaskGroup != NULL)
648 {
649 ASSERT(TaskGroup->Index < 0);
650 ASSERT(!TaskGroup->IsCollapsed);
651
652 if (TaskGroup->dwTaskCount > 1)
653 {
654 LastTaskItem = FindLastTaskItemOfGroup(TaskGroup, TaskItem);
655 if (LastTaskItem != NULL)
656 {
657 /* Since the group is expanded the task items must have an index */
658 ASSERT(LastTaskItem->Index >= 0);
659
660 return LastTaskItem->Index + 1;
661 }
662 }
663 }
664 else
665 {
666 /* Find the last NULL group button. NULL groups are added at the end of the
667 task item list when grouping is enabled */
668 LastTaskItem = FindLastTaskItemOfGroup(NULL, TaskItem);
669 if (LastTaskItem != NULL)
670 {
671 ASSERT(LastTaskItem->Index >= 0);
672
673 return LastTaskItem->Index + 1;
674 }
675 }
676 }
677
678 return m_ButtonCount;
679 }
PTASK_ITEM FindLastTaskItemOfGroup(IN PTASK_GROUP TaskGroup OPTIONAL, IN PTASK_ITEM NewTaskItem OPTIONAL)
Definition: taskswnd.cpp:599
DWORD IsCollapsed
Definition: taskswnd.cpp:74

Referenced by AddTaskItemButton().

◆ CheckActivateTaskItem()

VOID CTaskSwitchWnd::CheckActivateTaskItem ( IN OUT PTASK_ITEM  TaskItem)
inline

Definition at line 1009 of file taskswnd.cpp.

1010 {
1011 PTASK_ITEM CurrentTaskItem;
1012 PTASK_GROUP TaskGroup = NULL;
1013
1014 CurrentTaskItem = m_ActiveTaskItem;
1015
1016 if (TaskItem != NULL)
1017 TaskGroup = TaskItem->Group;
1018
1019 if (m_IsGroupingEnabled &&
1020 TaskGroup != NULL &&
1021 TaskGroup->IsCollapsed)
1022 {
1023 /* FIXME */
1024 return;
1025 }
1026
1027 if (CurrentTaskItem != NULL)
1028 {
1029 PTASK_GROUP CurrentTaskGroup;
1030
1031 if (CurrentTaskItem == TaskItem)
1032 return;
1033
1034 CurrentTaskGroup = CurrentTaskItem->Group;
1035
1036 if (m_IsGroupingEnabled &&
1037 CurrentTaskGroup != NULL &&
1038 CurrentTaskGroup->IsCollapsed)
1039 {
1040 if (CurrentTaskGroup == TaskGroup)
1041 return;
1042
1043 /* FIXME */
1044 }
1045 else
1046 {
1048 if (CurrentTaskItem->Index >= 0)
1049 {
1050 UpdateTaskItemButton(CurrentTaskItem);
1051 }
1052 }
1053 }
1054
1055 m_ActiveTaskItem = TaskItem;
1056
1057 if (TaskItem != NULL && TaskItem->Index >= 0)
1058 {
1059 UpdateTaskItemButton(TaskItem);
1060 }
1061 else if (TaskItem == NULL)
1062 {
1063 TRACE("Active TaskItem now NULL\n");
1064 }
1065 }

Referenced by ActivateTaskItem().

◆ ContextSensitiveHelp()

HRESULT WINAPI CTaskSwitchWnd::ContextSensitiveHelp ( BOOL  fEnterMode)
inline

Implements IOleWindow.

Definition at line 1990 of file taskswnd.cpp.

1991 {
1992 return E_NOTIMPL;
1993 }
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ DeleteAllTasks()

VOID CTaskSwitchWnd::DeleteAllTasks ( )
inline

Definition at line 1181 of file taskswnd.cpp.

1182 {
1183 PTASK_ITEM CurrentTask;
1184
1185 if (m_TaskItemCount > 0)
1186 {
1187 CurrentTask = m_TaskItems + m_TaskItemCount;
1188 do
1189 {
1190 DeleteTaskItem(--CurrentTask);
1191 } while (CurrentTask != m_TaskItems);
1192 }
1193 }
VOID DeleteTaskItem(IN OUT PTASK_ITEM TaskItem)
Definition: taskswnd.cpp:994

Referenced by OnDestroy().

◆ DeleteTask()

BOOL CTaskSwitchWnd::DeleteTask ( IN HWND  hWnd)
inline

Definition at line 1164 of file taskswnd.cpp.

1165 {
1166 PTASK_ITEM TaskItem;
1167
1168 TaskItem = FindTaskItem(hWnd);
1169 if (TaskItem != NULL)
1170 {
1171 TRACE("Delete window 0x%p on button %d\n", hWnd, TaskItem->Index);
1172 DeleteTaskItem(TaskItem);
1173 return TRUE;
1174 }
1175 //else
1176 //TRACE("Failed to delete window 0x%p\n", hWnd);
1177
1178 return FALSE;
1179 }

Referenced by OnShellHook().

◆ DeleteTaskItem()

VOID CTaskSwitchWnd::DeleteTaskItem ( IN OUT PTASK_ITEM  TaskItem)
inline

Definition at line 994 of file taskswnd.cpp.

995 {
996 if (!m_IsDestroying)
997 {
998 /* Delete the task button from the toolbar */
999 DeleteTaskItemButton(TaskItem);
1000 }
1001
1002 /* Remove the task from it's group */
1003 RemoveTaskFromTaskGroup(TaskItem);
1004
1005 /* Free the task item */
1006 FreeTaskItem(TaskItem);
1007 }
VOID FreeTaskItem(IN OUT PTASK_ITEM TaskItem)
Definition: taskswnd.cpp:976
VOID RemoveTaskFromTaskGroup(IN OUT PTASK_ITEM TaskItem)
Definition: taskswnd.cpp:820
BOOL DeleteTaskItemButton(IN OUT PTASK_ITEM TaskItem)
Definition: taskswnd.cpp:741

Referenced by DeleteAllTasks(), and DeleteTask().

◆ DeleteTaskItemButton()

BOOL CTaskSwitchWnd::DeleteTaskItemButton ( IN OUT PTASK_ITEM  TaskItem)
inline

Definition at line 741 of file taskswnd.cpp.

742 {
743 PTASK_GROUP TaskGroup;
744 INT iIndex;
745
746 TaskGroup = TaskItem->Group;
747
748 if (TaskItem->Index >= 0)
749 {
750 if ((TaskGroup != NULL && !TaskGroup->IsCollapsed) ||
751 TaskGroup == NULL)
752 {
754
755 RemoveIcon(TaskItem);
756 iIndex = TaskItem->Index;
757 if (m_TaskBar.DeleteButton(iIndex))
758 {
759 TaskItem->Index = -1;
761
762 UpdateIndexesAfter(iIndex, FALSE);
763
764 /* Update button sizes and fix the button wrapping */
766 return TRUE;
767 }
768
770 }
771 }
772
773 return FALSE;
774 }
VOID RemoveIcon(IN PTASK_ITEM TaskItem)
Definition: taskswnd.cpp:571

Referenced by DeleteTaskItem().

◆ EnumWindowsProc()

BOOL CALLBACK CTaskSwitchWnd::EnumWindowsProc ( IN HWND  hWnd)
inline

Definition at line 1390 of file taskswnd.cpp.

1391 {
1392 if (m_Tray->IsTaskWnd(hWnd))
1393 {
1394 TRACE("Adding task for %p...\n", hWnd);
1395 AddTask(hWnd);
1396 }
1397 return TRUE;
1398 }
BOOL AddTask(IN HWND hWnd)
Definition: taskswnd.cpp:1100

◆ ExpandTaskGroup()

VOID CTaskSwitchWnd::ExpandTaskGroup ( IN PTASK_GROUP  TaskGroup)
inline

Definition at line 481 of file taskswnd.cpp.

482 {
483 ASSERT(TaskGroup->dwTaskCount > 0);
484 ASSERT(TaskGroup->IsCollapsed);
485 ASSERT(TaskGroup->Index >= 0);
486
487 /* FIXME: Implement */
488 }

Referenced by RemoveTaskFromTaskGroup().

◆ FindLastTaskItemOfGroup()

PTASK_ITEM CTaskSwitchWnd::FindLastTaskItemOfGroup ( IN PTASK_GROUP TaskGroup  OPTIONAL,
IN PTASK_ITEM NewTaskItem  OPTIONAL 
)
inline

Definition at line 599 of file taskswnd.cpp.

602 {
603 PTASK_ITEM TaskItem, LastTaskItem, FoundTaskItem = NULL;
604 DWORD dwTaskCount;
605
607
608 TaskItem = m_TaskItems;
609 LastTaskItem = TaskItem + m_TaskItemCount;
610
611 dwTaskCount = (TaskGroup != NULL ? TaskGroup->dwTaskCount : MAX_TASKS_COUNT);
612
613 ASSERT(dwTaskCount > 0);
614
615 while (TaskItem != LastTaskItem)
616 {
617 if (TaskItem->Group == TaskGroup)
618 {
619 if ((NewTaskItem != NULL && TaskItem != NewTaskItem) || NewTaskItem == NULL)
620 {
621 FoundTaskItem = TaskItem;
622 }
623
624 if (--dwTaskCount == 0)
625 {
626 /* We found the last task item in the group! */
627 break;
628 }
629 }
630
631 TaskItem++;
632 }
633
634 return FoundTaskItem;
635 }

Referenced by CalculateTaskItemNewButtonIndex().

◆ FindOtherTaskItem()

PTASK_ITEM CTaskSwitchWnd::FindOtherTaskItem ( IN HWND  hWnd)
inline

Definition at line 883 of file taskswnd.cpp.

884 {
885 PTASK_ITEM LastItem, TaskItem;
886 PTASK_GROUP TaskGroup;
887 DWORD dwProcessId;
888
889 if (!GetWindowThreadProcessId(hWnd, &dwProcessId))
890 {
891 return NULL;
892 }
893
894 /* Try to find another task that belongs to the same
895 process as the given window */
896 TaskItem = m_TaskItems;
897 LastItem = TaskItem + m_TaskItemCount;
898 while (TaskItem != LastItem)
899 {
900 TaskGroup = TaskItem->Group;
901 if (TaskGroup != NULL)
902 {
903 if (TaskGroup->dwProcessId == dwProcessId)
904 return TaskItem;
905 }
906 else
907 {
908 DWORD dwProcessIdTask;
909
910 if (GetWindowThreadProcessId(TaskItem->hWnd,
911 &dwProcessIdTask) &&
912 dwProcessIdTask == dwProcessId)
913 {
914 return TaskItem;
915 }
916 }
917
918 TaskItem++;
919 }
920
921 return NULL;
922 }

Referenced by ActivateTask().

◆ FindTaskGroupByIndex()

PTASK_GROUP CTaskSwitchWnd::FindTaskGroupByIndex ( IN INT  Index)
inline

Definition at line 1084 of file taskswnd.cpp.

1085 {
1086 PTASK_GROUP CurrentGroup;
1087
1088 CurrentGroup = m_TaskGroups;
1089 while (CurrentGroup != NULL)
1090 {
1091 if (CurrentGroup->Index == Index)
1092 break;
1093
1094 CurrentGroup = CurrentGroup->Next;
1095 }
1096
1097 return CurrentGroup;
1098 }
_In_ WDFCOLLECTION _In_ ULONG Index

Referenced by HandleButtonClick(), HandleButtonRightClick(), and HandleItemPaint().

◆ FindTaskItem()

PTASK_ITEM CTaskSwitchWnd::FindTaskItem ( IN HWND  hWnd)
inline

Definition at line 866 of file taskswnd.cpp.

867 {
868 PTASK_ITEM TaskItem, LastItem;
869
870 TaskItem = m_TaskItems;
871 LastItem = TaskItem + m_TaskItemCount;
872 while (TaskItem != LastItem)
873 {
874 if (TaskItem->hWnd == hWnd)
875 return TaskItem;
876
877 TaskItem++;
878 }
879
880 return NULL;
881 }

Referenced by ActivateTask(), AddTask(), DeleteTask(), FlashTask(), OnKludgeItemRect(), and RedrawTask().

◆ FindTaskItemByIndex()

PTASK_ITEM CTaskSwitchWnd::FindTaskItemByIndex ( IN INT  Index)
inline

Definition at line 1067 of file taskswnd.cpp.

1068 {
1069 PTASK_ITEM TaskItem, LastItem;
1070
1071 TaskItem = m_TaskItems;
1072 LastItem = TaskItem + m_TaskItemCount;
1073 while (TaskItem != LastItem)
1074 {
1075 if (TaskItem->Index == Index)
1076 return TaskItem;
1077
1078 TaskItem++;
1079 }
1080
1081 return NULL;
1082 }

Referenced by HandleButtonClick(), HandleButtonRightClick(), and HandleItemPaint().

◆ FlashTask()

BOOL CTaskSwitchWnd::FlashTask ( IN HWND  hWnd)
inline

Definition at line 1201 of file taskswnd.cpp.

1202 {
1203 PTASK_ITEM TaskItem;
1204
1205 TaskItem = FindTaskItem(hWnd);
1206 if (TaskItem != NULL)
1207 {
1208 TRACE("Flashing window 0x%p on button %d\n", hWnd, TaskItem->Index);
1209 FlashTaskItem(TaskItem);
1210 return TRUE;
1211 }
1212
1213 return FALSE;
1214 }
VOID FlashTaskItem(IN OUT PTASK_ITEM TaskItem)
Definition: taskswnd.cpp:1195

Referenced by OnShellHook().

◆ FlashTaskItem()

VOID CTaskSwitchWnd::FlashTaskItem ( IN OUT PTASK_ITEM  TaskItem)
inline

Definition at line 1195 of file taskswnd.cpp.

1196 {
1197 TaskItem->RenderFlashed = 1;
1198 UpdateTaskItemButton(TaskItem);
1199 }

Referenced by FlashTask().

◆ FreeTaskItem()

VOID CTaskSwitchWnd::FreeTaskItem ( IN OUT PTASK_ITEM  TaskItem)
inline

Definition at line 976 of file taskswnd.cpp.

977 {
978 WORD wIndex;
979
980 if (TaskItem == m_ActiveTaskItem)
982
983 wIndex = (WORD) (TaskItem - m_TaskItems);
984 if (wIndex + 1 < m_TaskItemCount)
985 {
986 MoveMemory(TaskItem,
987 TaskItem + 1,
988 (m_TaskItemCount - wIndex - 1) * sizeof(*TaskItem));
989 }
990
992 }
#define MoveMemory
Definition: winbase.h:1709

Referenced by DeleteTaskItem().

◆ GetWindow()

HRESULT WINAPI CTaskSwitchWnd::GetWindow ( HWND phwnd)
inline

Implements IOleWindow.

Definition at line 1982 of file taskswnd.cpp.

1983 {
1984 if (!phwnd)
1985 return E_INVALIDARG;
1986 *phwnd = m_hWnd;
1987 return S_OK;
1988 }
HWND m_hWnd
Definition: atlwin.h:273
#define E_INVALIDARG
Definition: ddrawi.h:101
#define S_OK
Definition: intsafe.h:52

◆ GetWndIcon()

HICON CTaskSwitchWnd::GetWndIcon ( HWND  hwnd)
inline

Definition at line 490 of file taskswnd.cpp.

491 {
492 HICON hIcon = NULL;
493
494 /* Retrieve icon by sending a message */
495#define GET_ICON(type) \
496 SendMessageTimeout(hwnd, WM_GETICON, (type), 0, SMTO_NOTIMEOUTIFNOTHUNG, 100, (PDWORD_PTR)&hIcon)
497
498 LRESULT bAlive = GET_ICON(g_TaskbarSettings.bSmallIcons ? ICON_SMALL2 : ICON_BIG);
499 if (hIcon)
500 return hIcon;
501
502 if (bAlive)
503 {
504 bAlive = GET_ICON(ICON_SMALL);
505 if (hIcon)
506 return hIcon;
507 }
508
509 if (bAlive)
510 {
512 if (hIcon)
513 return hIcon;
514 }
515#undef GET_ICON
516
517 /* If we failed, retrieve icon from the window class */
519 if (hIcon)
520 return hIcon;
521
523 }
TaskbarSettings g_TaskbarSettings
Definition: settings.cpp:23
HICON hIcon
Definition: msconfig.c:44
BOOL bSmallIcons
Definition: precomp.h:222
#define GET_ICON(type)
#define ICON_BIG
Definition: tnclass.cpp:51
#define ICON_SMALL
Definition: tnclass.cpp:48
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
LONG_PTR LRESULT
Definition: windef.h:209
#define GCLP_HICONSM
Definition: winuser.h:675
#define GCLP_HICON
Definition: winuser.h:674
#define GetClassLongPtr
Definition: winuser.h:5782

Referenced by AddTaskItemButton(), and UpdateTaskItemButton().

◆ GetWndTextFromTaskItem()

INT CTaskSwitchWnd::GetWndTextFromTaskItem ( IN PTASK_ITEM  TaskItem,
LPWSTR  szBuf,
DWORD  cchBuf 
)
inline

Definition at line 349 of file taskswnd.cpp.

350 {
351 /* Get the window text without sending a message so we don't hang if an
352 application isn't responding! */
353 return InternalGetWindowText(TaskItem->hWnd, szBuf, cchBuf);
354 }
INT WINAPI InternalGetWindowText(_In_ HWND hWnd, _Out_writes_to_(cchMaxCount, return+1) LPWSTR pString, _In_ int cchMaxCount)

Referenced by AddTaskItemButton(), and UpdateTaskItemButton().

◆ HandleAppCommand()

BOOL CTaskSwitchWnd::HandleAppCommand ( IN WPARAM  wParam,
IN LPARAM  lParam 
)
inline

Definition at line 1480 of file taskswnd.cpp.

1481 {
1482 BOOL Ret = FALSE;
1483
1484 switch (GET_APPCOMMAND_LPARAM(lParam))
1485 {
1486 case APPCOMMAND_BROWSER_SEARCH:
1487 Ret = SHFindFiles(NULL,
1488 NULL);
1489 break;
1490
1491 case APPCOMMAND_BROWSER_HOME:
1492 case APPCOMMAND_LAUNCH_MAIL:
1493 default:
1494 TRACE("Shell app command %d unhandled!\n", (INT) GET_APPCOMMAND_LPARAM(lParam));
1495 break;
1496 }
1497
1498 return Ret;
1499 }
LPARAM lParam
Definition: combotst.c:139
unsigned int BOOL
Definition: ntddk_ex.h:94
BOOL WINAPI SHFindFiles(PCIDLIST_ABSOLUTE pidlFolder, PCIDLIST_ABSOLUTE pidlSaveFile)
Definition: shellord.c:2262

Referenced by OnShellHook().

◆ HandleButtonClick()

BOOL CTaskSwitchWnd::HandleButtonClick ( IN WORD  wIndex)
inline

Definition at line 1622 of file taskswnd.cpp.

1623 {
1624 PTASK_ITEM TaskItem;
1625 PTASK_GROUP TaskGroup;
1626
1628 {
1629 TaskGroup = FindTaskGroupByIndex((INT) wIndex);
1630 if (TaskGroup != NULL && TaskGroup->IsCollapsed)
1631 {
1632 HandleTaskGroupClick(TaskGroup);
1633 return TRUE;
1634 }
1635 }
1636
1637 TaskItem = FindTaskItemByIndex((INT) wIndex);
1638 if (TaskItem != NULL)
1639 {
1640 SendPulseToTray(FALSE, TaskItem->hWnd);
1641 HandleTaskItemClick(TaskItem);
1642 return TRUE;
1643 }
1644
1645 return FALSE;
1646 }
VOID SendPulseToTray(BOOL bDelete, HWND hwndActive)
Definition: taskswnd.cpp:1474
PTASK_GROUP FindTaskGroupByIndex(IN INT Index)
Definition: taskswnd.cpp:1084
VOID HandleTaskGroupClick(IN OUT PTASK_GROUP TaskGroup)
Definition: taskswnd.cpp:1617
PTASK_ITEM FindTaskItemByIndex(IN INT Index)
Definition: taskswnd.cpp:1067
VOID HandleTaskItemClick(IN OUT PTASK_ITEM TaskItem)
Definition: taskswnd.cpp:1586

Referenced by OnCommand().

◆ HandleButtonRightClick()

BOOL CTaskSwitchWnd::HandleButtonRightClick ( IN WORD  wIndex)
inline

Definition at line 1675 of file taskswnd.cpp.

1676 {
1677 PTASK_ITEM TaskItem;
1678 PTASK_GROUP TaskGroup;
1680 {
1681 TaskGroup = FindTaskGroupByIndex((INT) wIndex);
1682 if (TaskGroup != NULL && TaskGroup->IsCollapsed)
1683 {
1684 HandleTaskGroupRightClick(TaskGroup);
1685 return TRUE;
1686 }
1687 }
1688
1689 TaskItem = FindTaskItemByIndex((INT) wIndex);
1690
1691 if (TaskItem != NULL)
1692 {
1693 HandleTaskItemRightClick(TaskItem);
1694 return TRUE;
1695 }
1696
1697 return FALSE;
1698 }
VOID HandleTaskGroupRightClick(IN OUT PTASK_GROUP TaskGroup)
Definition: taskswnd.cpp:1670
VOID HandleTaskItemRightClick(IN OUT PTASK_ITEM TaskItem)
Definition: taskswnd.cpp:1654

Referenced by OnContextMenu().

◆ HandleItemPaint()

LRESULT CTaskSwitchWnd::HandleItemPaint ( IN OUT NMTBCUSTOMDRAW nmtbcd)
inline

Definition at line 1701 of file taskswnd.cpp.

1702 {
1703 LRESULT Ret = CDRF_DODEFAULT;
1704 PTASK_GROUP TaskGroup;
1705 PTASK_ITEM TaskItem;
1706
1707 TaskItem = FindTaskItemByIndex((INT) nmtbcd->nmcd.dwItemSpec);
1708 TaskGroup = FindTaskGroupByIndex((INT) nmtbcd->nmcd.dwItemSpec);
1709 if (TaskGroup == NULL && TaskItem != NULL)
1710 {
1711 ASSERT(TaskItem != NULL);
1712
1713 if (TaskItem != NULL && ::IsWindow(TaskItem->hWnd))
1714 {
1715 /* Make the entire button flashing if necessary */
1716 if (nmtbcd->nmcd.uItemState & CDIS_MARKED)
1717 {
1718 Ret = TBCDRF_NOBACKGROUND;
1719 if (!m_Theme)
1720 {
1721 SelectObject(nmtbcd->nmcd.hdc, GetSysColorBrush(COLOR_HIGHLIGHT));
1722 Rectangle(nmtbcd->nmcd.hdc,
1723 nmtbcd->nmcd.rc.left,
1724 nmtbcd->nmcd.rc.top,
1725 nmtbcd->nmcd.rc.right,
1726 nmtbcd->nmcd.rc.bottom);
1727 }
1728 else
1729 {
1730 DrawThemeBackground(m_Theme, nmtbcd->nmcd.hdc, TDP_FLASHBUTTON, 0, &nmtbcd->nmcd.rc, 0);
1731 }
1732 nmtbcd->clrText = GetSysColor(COLOR_HIGHLIGHTTEXT);
1733 return Ret;
1734 }
1735 }
1736 }
1737 else if (TaskGroup != NULL)
1738 {
1739 /* FIXME: Implement painting for task groups */
1740 }
1741 return Ret;
1742 }
HRESULT WINAPI DrawThemeBackground(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, const RECT *pRect, const RECT *pClipRect)
Definition: draw.c:128
#define CDRF_DODEFAULT
Definition: commctrl.h:268
#define TBCDRF_NOBACKGROUND
Definition: commctrl.h:1040
#define CDIS_MARKED
Definition: commctrl.h:298
@ TDP_FLASHBUTTON
Definition: vssym32.h:578
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1539
BOOL WINAPI Rectangle(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int)
DWORD WINAPI GetSysColor(_In_ int)
#define COLOR_HIGHLIGHT
Definition: winuser.h:926
HBRUSH WINAPI GetSysColorBrush(_In_ int)
#define COLOR_HIGHLIGHTTEXT
Definition: winuser.h:927

Referenced by HandleToolbarNotification().

◆ HandleTaskGroupClick()

VOID CTaskSwitchWnd::HandleTaskGroupClick ( IN OUT PTASK_GROUP  TaskGroup)
inline

Definition at line 1617 of file taskswnd.cpp.

1618 {
1619 /* TODO: Show task group menu */
1620 }

Referenced by HandleButtonClick().

◆ HandleTaskGroupRightClick()

VOID CTaskSwitchWnd::HandleTaskGroupRightClick ( IN OUT PTASK_GROUP  TaskGroup)
inline

Definition at line 1670 of file taskswnd.cpp.

1671 {
1672 /* TODO: Show task group right click menu */
1673 }

Referenced by HandleButtonRightClick().

◆ HandleTaskItemClick()

VOID CTaskSwitchWnd::HandleTaskItemClick ( IN OUT PTASK_ITEM  TaskItem)
inline

Definition at line 1586 of file taskswnd.cpp.

1587 {
1588 BOOL bIsMinimized;
1589 BOOL bIsActive;
1590
1591 if (::IsWindow(TaskItem->hWnd))
1592 {
1593 bIsMinimized = ::IsIconic(TaskItem->hWnd);
1594 bIsActive = (TaskItem == m_ActiveTaskItem);
1595
1596 TRACE("Active TaskItem %p, selected TaskItem %p\n", m_ActiveTaskItem, TaskItem);
1597 if (m_ActiveTaskItem)
1598 TRACE("Active TaskItem hWnd=%p, TaskItem hWnd %p\n", m_ActiveTaskItem->hWnd, TaskItem->hWnd);
1599
1600 TRACE("Valid button clicked. HWND=%p, IsMinimized=%s, IsActive=%s...\n",
1601 TaskItem->hWnd, bIsMinimized ? "Yes" : "No", bIsActive ? "Yes" : "No");
1602
1603 if (!bIsMinimized && bIsActive)
1604 {
1605 ::ShowWindowAsync(TaskItem->hWnd, SW_MINIMIZE);
1606 TRACE("Valid button clicked. App window Minimized.\n");
1607 }
1608 else
1609 {
1610 ::SwitchToThisWindow(TaskItem->hWnd, TRUE);
1611
1612 TRACE("Valid button clicked. App window Restored.\n");
1613 }
1614 }
1615 }
BOOL IsIconic() const
Definition: atlwin.h:932
VOID WINAPI SwitchToThisWindow(HWND hwnd, BOOL fAltTab)
Definition: window.c:82
#define SW_MINIMIZE
Definition: winuser.h:776
BOOL WINAPI ShowWindowAsync(_In_ HWND, _In_ int)

Referenced by HandleButtonClick().

◆ HandleTaskItemRightClick()

VOID CTaskSwitchWnd::HandleTaskItemRightClick ( IN OUT PTASK_ITEM  TaskItem)
inline

Definition at line 1654 of file taskswnd.cpp.

1655 {
1656 POINT pt;
1657 GetCursorPos(&pt);
1658
1659 SetForegroundWindow(TaskItem->hWnd);
1660
1661 ActivateTask(TaskItem->hWnd);
1662
1663 if (GetForegroundWindow() != TaskItem->hWnd)
1664 ERR("HandleTaskItemRightClick detected the window did not become foreground\n");
1665
1666 ::SendMessageCallbackW(TaskItem->hWnd, WM_POPUPSYSTEMMENU, 0, MAKELPARAM(pt.x, pt.y),
1667 SendAsyncProc, (ULONG_PTR)TaskItem);
1668 }
#define ERR(fmt,...)
Definition: debug.h:110
BOOL ActivateTask(IN HWND hWnd)
Definition: taskswnd.cpp:1140
static VOID CALLBACK SendAsyncProc(HWND hwnd, UINT uMsg, DWORD_PTR dwData, LRESULT lResult)
Definition: taskswnd.cpp:1649
#define pt(x, y)
Definition: drawing.c:79
uint32_t ULONG_PTR
Definition: typedefs.h:65
#define WM_POPUPSYSTEMMENU
Definition: undocuser.h:61
#define MAKELPARAM(l, h)
Definition: winuser.h:4008
HWND WINAPI GetForegroundWindow(void)
Definition: ntwrapper.h:392
BOOL WINAPI SetForegroundWindow(_In_ HWND)
BOOL WINAPI GetCursorPos(_Out_ LPPOINT)
Definition: cursoricon.c:2670
BOOL WINAPI SendMessageCallbackW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM, _In_ SENDASYNCPROC, _In_ ULONG_PTR)

Referenced by HandleButtonRightClick().

◆ HandleToolbarNotification()

LRESULT CTaskSwitchWnd::HandleToolbarNotification ( IN const NMHDR nmh)
inline

Definition at line 1744 of file taskswnd.cpp.

1745 {
1746 LRESULT Ret = 0;
1747
1748 switch (nmh->code)
1749 {
1750 case NM_CUSTOMDRAW:
1751 {
1752 LPNMTBCUSTOMDRAW nmtbcd = (LPNMTBCUSTOMDRAW) nmh;
1753
1754 switch (nmtbcd->nmcd.dwDrawStage)
1755 {
1756
1757 case CDDS_ITEMPREPAINT:
1758 Ret = HandleItemPaint(nmtbcd);
1759 break;
1760
1761 case CDDS_PREPAINT:
1762 Ret = CDRF_NOTIFYITEMDRAW;
1763 break;
1764
1765 default:
1766 Ret = CDRF_DODEFAULT;
1767 break;
1768 }
1769 break;
1770 }
1771 }
1772
1773 return Ret;
1774 }
LRESULT HandleItemPaint(IN OUT NMTBCUSTOMDRAW *nmtbcd)
Definition: taskswnd.cpp:1701
#define CDDS_ITEMPREPAINT
Definition: commctrl.h:285
#define CDRF_NOTIFYITEMDRAW
Definition: commctrl.h:275
#define NM_CUSTOMDRAW
Definition: commctrl.h:137
#define CDDS_PREPAINT
Definition: commctrl.h:280
struct _NMTBCUSTOMDRAW * LPNMTBCUSTOMDRAW
NMCUSTOMDRAW nmcd
Definition: commctrl.h:1017

Referenced by OnNotify().

◆ Initialize()

HRESULT CTaskSwitchWnd::Initialize ( IN HWND  hWndParent,
IN OUT ITrayWindow *  tray 
)
inline

Definition at line 1972 of file taskswnd.cpp.

1973 {
1974 m_Tray = tray;
1977 if (!m_hWnd)
1978 return E_FAIL;
1979 return S_OK;
1980 }
@ Create
Definition: registry.c:563
#define E_FAIL
Definition: ddrawi.h:102
#define WS_CHILD
Definition: pedump.c:617
#define WS_TABSTOP
Definition: pedump.c:634
#define WS_VISIBLE
Definition: pedump.c:620
#define WS_CLIPSIBLINGS
Definition: pedump.c:618
#define WS_CLIPCHILDREN
Definition: pedump.c:619
BOOL bGroupButtons
Definition: precomp.h:218
const WCHAR szRunningApps[]
Definition: taskswnd.cpp:33

◆ OnCommand()

LRESULT CTaskSwitchWnd::OnCommand ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 1819 of file taskswnd.cpp.

1820 {
1821 LRESULT Ret = TRUE;
1822 if (lParam != 0 && (HWND) lParam == m_TaskBar.m_hWnd)
1823 {
1825 }
1826 return Ret;
1827 }
BOOL HandleButtonClick(IN WORD wIndex)
Definition: taskswnd.cpp:1622
WPARAM wParam
Definition: combotst.c:138
#define LOWORD(l)
Definition: pedump.c:82

◆ OnContextMenu()

LRESULT CTaskSwitchWnd::OnContextMenu ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 1876 of file taskswnd.cpp.

1877 {
1878 LRESULT Ret = 0;
1879 INT_PTR iBtn = -1;
1880
1881 if (m_TaskBar.m_hWnd != NULL)
1882 {
1883 POINT pt;
1884
1885 pt.x = GET_X_LPARAM(lParam);
1886 pt.y = GET_Y_LPARAM(lParam);
1887
1889
1890 iBtn = m_TaskBar.HitTest(&pt);
1891 if (iBtn >= 0)
1892 {
1894 }
1895 }
1896 if (iBtn < 0)
1897 {
1898 /* Not on a taskbar button, so forward message to tray */
1899 Ret = SendMessage(m_Tray->GetHWND(), uMsg, wParam, lParam);
1900 }
1901 return Ret;
1902 }
BOOL HandleButtonRightClick(IN WORD wIndex)
Definition: taskswnd.cpp:1675
int32_t INT_PTR
Definition: typedefs.h:64
#define GET_Y_LPARAM(lp)
Definition: windowsx.h:300
#define GET_X_LPARAM(lp)
Definition: windowsx.h:299
#define SendMessage
Definition: winuser.h:5843
BOOL WINAPI ScreenToClient(_In_ HWND, _Inout_ LPPOINT)

◆ OnCopyData()

LRESULT CTaskSwitchWnd::OnCopyData ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 1956 of file taskswnd.cpp.

1957 {
1959 if (cpData->dwData == m_uHardErrorMsg)
1960 {
1961 /* A hard error balloon message */
1963 ERR("Got balloon data 0x%x, 0x%x, '%S', '%S'\n", pData->Status, pData->dwType, (WCHAR*)((ULONG_PTR)pData + pData->TitleOffset), (WCHAR*)((ULONG_PTR)pData + pData->MessageOffset));
1964 if (pData->cbHeaderSize == sizeof(BALLOON_HARD_ERROR_DATA))
1966 return TRUE;
1967 }
1968
1969 return FALSE;
1970 }
void StartThread(PBALLOON_HARD_ERROR_DATA pData)
Definition: taskswnd.cpp:178
CHardErrorThread m_HardErrorThread
Definition: taskswnd.cpp:327
#define ULONG_PTR
Definition: config.h:101
ULONG_PTR dwData
Definition: winuser.h:3001
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
Definition: twain.h:1830
struct _BALLOON_HARD_ERROR_DATA * PBALLOON_HARD_ERROR_DATA
struct tagCOPYDATASTRUCT * PCOPYDATASTRUCT

◆ OnCreate()

LRESULT CTaskSwitchWnd::OnCreate ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 1429 of file taskswnd.cpp.

1430 {
1432 return FALSE;
1433
1434 SetWindowTheme(m_TaskBar.m_hWnd, L"TaskBand", NULL);
1435
1438 ILC_COLOR32 | ILC_MASK, 0, 1000);
1439 m_TaskBar.SetImageList(m_ImageList);
1440
1441 /* Set proper spacing between buttons */
1442 m_TaskBar.UpdateTbButtonSpacing(m_Tray->IsHorizontal(), m_Theme != NULL);
1443
1444 /* Register the shell hook */
1446
1447 TRACE("ShellHookMsg got assigned number %d\n", m_ShellHookMsg);
1448
1449 RegisterShellHook(m_hWnd, 3); /* 1 if no NT! We're targeting NT so we don't care! */
1450
1452
1453 /* Recalculate the button size */
1455
1456#if DUMP_TASKS != 0
1457 SetTimer(hwnd, 1, 5000, NULL);
1458#endif
1459 return TRUE;
1460 }
INT UpdateTbButtonSpacing(IN BOOL bHorizontal, IN BOOL bThemed, IN UINT uiRows=0, IN UINT uiBtnsPerLine=0)
Definition: taskswnd.cpp:203
BOOL Initialize(HWND hWndParent)
Definition: taskswnd.cpp:282
HIMAGELIST WINAPI ImageList_Create(INT cx, INT cy, UINT flags, INT cInitial, INT cGrow)
Definition: imagelist.c:804
#define ILC_COLOR32
Definition: commctrl.h:358
#define ILC_MASK
Definition: commctrl.h:351
BOOL WINAPI RegisterShellHook(HWND hWnd, DWORD dwType)
Definition: shellord.c:312
HRESULT WINAPI SetWindowTheme(_In_ HWND hwnd, _In_ LPCWSTR pszSubAppName, _In_ LPCWSTR pszSubIdList)
Definition: uxthemesupp.c:69
#define SM_CYSMICON
Definition: winuser.h:1013
UINT_PTR WINAPI SetTimer(_In_opt_ HWND, _In_ UINT_PTR, _In_ UINT, _In_opt_ TIMERPROC)
#define SM_CXSMICON
Definition: winuser.h:1012
#define SM_CYICON
Definition: winuser.h:973
#define SM_CXICON
Definition: winuser.h:972
int WINAPI GetSystemMetrics(_In_ int)

◆ OnDestroy()

LRESULT CTaskSwitchWnd::OnDestroy ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 1462 of file taskswnd.cpp.

1463 {
1465
1466 /* Unregister the shell hook */
1468
1471 return TRUE;
1472 }
VOID DeleteAllTasks()
Definition: taskswnd.cpp:1181
HRESULT WINAPI CloseThemeData(HTHEME hTheme)
Definition: system.c:950

◆ OnEraseBackground()

LRESULT CTaskSwitchWnd::OnEraseBackground ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 1776 of file taskswnd.cpp.

1777 {
1778 HDC hdc = (HDC) wParam;
1779
1780 if (!IsAppThemed())
1781 {
1782 bHandled = FALSE;
1783 return 0;
1784 }
1785
1786 RECT rect;
1789
1790 return TRUE;
1791 }
HRESULT WINAPI DrawThemeParentBackground(HWND hwnd, HDC hdc, RECT *prc)
Definition: draw.c:72
BOOL WINAPI IsAppThemed(void)
Definition: system.c:596
HDC hdc
Definition: main.c:9
static HDC
Definition: imagelist.c:92
& rect
Definition: startmenu.cpp:1413
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)

◆ OnKludgeItemRect()

LRESULT CTaskSwitchWnd::OnKludgeItemRect ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 1904 of file taskswnd.cpp.

1905 {
1906 PTASK_ITEM TaskItem = FindTaskItem((HWND) wParam);
1907 if (TaskItem)
1908 {
1909 RECT* prcMinRect = (RECT*) lParam;
1910 RECT rcItem, rcToolbar;
1911 m_TaskBar.GetItemRect(TaskItem->Index, &rcItem);
1912 m_TaskBar.GetWindowRect(&rcToolbar);
1913
1914 OffsetRect(&rcItem, rcToolbar.left, rcToolbar.top);
1915
1916 *prcMinRect = rcItem;
1917 return TRUE;
1918 }
1919 return FALSE;
1920 }
BOOL GetWindowRect(LPRECT lpRect) const
Definition: atlwin.h:816
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
BOOL WINAPI OffsetRect(_Inout_ LPRECT, _In_ int, _In_ int)

◆ OnMouseActivate()

LRESULT CTaskSwitchWnd::OnMouseActivate ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 1922 of file taskswnd.cpp.

1923 {
1924 return MA_NOACTIVATE;
1925 }
#define MA_NOACTIVATE
Definition: winuser.h:2503

◆ OnNcHitTest()

LRESULT CTaskSwitchWnd::OnNcHitTest ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 1808 of file taskswnd.cpp.

1809 {
1810 LRESULT Ret = TRUE;
1811 /* We want the tray window to be draggable everywhere, so make the control
1812 appear transparent */
1813 Ret = DefWindowProc(uMsg, wParam, lParam);
1814 if (Ret != HTVSCROLL && Ret != HTHSCROLL)
1815 Ret = HTTRANSPARENT;
1816 return Ret;
1817 }
#define DefWindowProc
Definition: ros2win.h:31
#define HTVSCROLL
Definition: winuser.h:2482
#define HTHSCROLL
Definition: winuser.h:2481
#define HTTRANSPARENT
Definition: winuser.h:2473

◆ OnNotify()

LRESULT CTaskSwitchWnd::OnNotify ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 1829 of file taskswnd.cpp.

1830 {
1831 LRESULT Ret = TRUE;
1832 const NMHDR *nmh = (const NMHDR *) lParam;
1833
1834 if (nmh->hwndFrom == m_TaskBar.m_hWnd)
1835 {
1836 Ret = HandleToolbarNotification(nmh);
1837 }
1838 return Ret;
1839 }
LRESULT HandleToolbarNotification(IN const NMHDR *nmh)
Definition: taskswnd.cpp:1744
HWND hwndFrom
Definition: winuser.h:3157

◆ OnSetFont()

LRESULT CTaskSwitchWnd::OnSetFont ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 1940 of file taskswnd.cpp.

1941 {
1942 return m_TaskBar.SendMessageW(uMsg, wParam, lParam);
1943 }

◆ OnSettingChanged()

LRESULT CTaskSwitchWnd::OnSettingChanged ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 1945 of file taskswnd.cpp.

1946 {
1947 if (wParam == SPI_SETNONCLIENTMETRICS)
1948 {
1949 /* Don't update the font, this will be done when we get a WM_SETFONT from our parent */
1951 }
1952
1953 return 0;
1954 }

◆ OnShellHook()

LRESULT CTaskSwitchWnd::OnShellHook ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 1501 of file taskswnd.cpp.

1502 {
1503 BOOL Ret = FALSE;
1504
1505 /* In case the shell hook wasn't registered properly, ignore WM_NULLs*/
1506 if (uMsg == 0)
1507 {
1508 bHandled = FALSE;
1509 return 0;
1510 }
1511
1512 TRACE("Received shell hook message: wParam=%08lx, lParam=%08lx\n", wParam, lParam);
1513
1514 switch ((INT) wParam)
1515 {
1516 case HSHELL_APPCOMMAND:
1518 break;
1519
1522 AddTask((HWND) lParam);
1523 break;
1524
1526 /* The window still exists! Delay destroying it a bit */
1529 break;
1530
1532 case HSHELL_WINDOWACTIVATED:
1535 break;
1536
1537 case HSHELL_FLASH:
1539 break;
1540
1541 case HSHELL_REDRAW:
1543 break;
1544
1545 case HSHELL_TASKMAN:
1546 ::PostMessage(m_Tray->GetHWND(), TWM_OPENSTARTMENU, 0, 0);
1547 break;
1548
1550 ::SwitchToThisWindow(m_Tray->GetHWND(), TRUE);
1551 ::SetForegroundWindow(m_Tray->GetHWND());
1552 break;
1553
1554 case HSHELL_LANGUAGE:
1555 case HSHELL_SYSMENU:
1556 case HSHELL_ENDTASK:
1557 case HSHELL_ACCESSIBILITYSTATE:
1558 case HSHELL_WINDOWREPLACED:
1559 case HSHELL_WINDOWREPLACING:
1560
1561 case HSHELL_GETMINRECT:
1562 default:
1563 {
1564#if DEBUG_SHELL_HOOK
1565 int i, found;
1566 for (i = 0, found = 0; i != _countof(hshell_msg); i++)
1567 {
1568 if (hshell_msg[i].msg == (INT) wParam)
1569 {
1570 TRACE("Shell message %ws unhandled (lParam = 0x%p)!\n", hshell_msg[i].msg_name, lParam);
1571 found = 1;
1572 break;
1573 }
1574 }
1575 if (found)
1576 break;
1577#endif
1578 TRACE("Shell message %d unhandled (lParam = 0x%p)!\n", (INT) wParam, lParam);
1579 break;
1580 }
1581 }
1582
1583 return Ret;
1584 }
#define msg(x)
Definition: auth_time.c:54
#define TWM_OPENSTARTMENU
Definition: precomp.h:132
BOOL HandleAppCommand(IN WPARAM wParam, IN LPARAM lParam)
Definition: taskswnd.cpp:1480
BOOL FlashTask(IN HWND hWnd)
Definition: taskswnd.cpp:1201
BOOL RedrawTask(IN HWND hWnd)
Definition: taskswnd.cpp:1241
BOOL DeleteTask(IN HWND hWnd)
Definition: taskswnd.cpp:1164
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define HSHELL_RUDEAPPACTIVATED
Definition: winuser.h:1281
#define HSHELL_ACTIVATESHELLWINDOW
Definition: winuser.h:1257
#define HSHELL_WINDOWDESTROYED
Definition: winuser.h:1256
#define HSHELL_WINDOWCREATED
Definition: winuser.h:1255
#define HSHELL_FLASH
Definition: winuser.h:1280
#define PostMessage
Definition: winuser.h:5832

◆ OnSize()

LRESULT CTaskSwitchWnd::OnSize ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 1793 of file taskswnd.cpp.

1794 {
1795 SIZE szClient;
1796
1797 szClient.cx = LOWORD(lParam);
1798 szClient.cy = HIWORD(lParam);
1799 if (m_TaskBar.m_hWnd != NULL)
1800 {
1801 m_TaskBar.SetWindowPos(NULL, 0, 0, szClient.cx, szClient.cy, SWP_NOZORDER);
1802
1804 }
1805 return TRUE;
1806 }
BOOL SetWindowPos(HWND hWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags)
Definition: atlwin.h:1288
LONG cx
Definition: kdterminal.h:27
LONG cy
Definition: kdterminal.h:28
#define HIWORD(l)
Definition: typedefs.h:247
#define SWP_NOZORDER
Definition: winuser.h:1247

◆ OnTaskbarSettingsChanged()

LRESULT CTaskSwitchWnd::OnTaskbarSettingsChanged ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 1848 of file taskswnd.cpp.

1849 {
1850 BOOL bSettingsChanged = FALSE;
1851 TaskbarSettings* newSettings = (TaskbarSettings*)lParam;
1852
1853 if (newSettings->bGroupButtons != g_TaskbarSettings.bGroupButtons)
1854 {
1855 bSettingsChanged = TRUE;
1858 }
1859
1860 if (newSettings->bSmallIcons != g_TaskbarSettings.bSmallIcons)
1861 {
1862 bSettingsChanged = TRUE;
1864 }
1865
1866 if (bSettingsChanged)
1867 {
1868 /* Refresh each task item view */
1871 }
1872
1873 return 0;
1874 }

◆ OnThemeChanged()

LRESULT CTaskSwitchWnd::OnThemeChanged ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 1414 of file taskswnd.cpp.

1415 {
1416 TRACE("OmThemeChanged\n");
1417
1418 if (m_Theme)
1420
1421 if (IsThemeActive())
1422 m_Theme = OpenThemeData(m_hWnd, L"TaskBand");
1423 else
1424 m_Theme = NULL;
1425
1426 return TRUE;
1427 }
HTHEME WINAPI OpenThemeData(HWND hwnd, LPCWSTR classlist)
Definition: system.c:835
BOOL WINAPI IsThemeActive(void)
Definition: system.c:606

◆ OnTimer()

LRESULT CTaskSwitchWnd::OnTimer ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 1927 of file taskswnd.cpp.

1928 {
1929#if DUMP_TASKS != 0
1930 switch (wParam)
1931 {
1932 case 1:
1933 DumpTasks();
1934 break;
1935 }
1936#endif
1937 return TRUE;
1938 }

◆ OnUpdateTaskbarPos()

LRESULT CTaskSwitchWnd::OnUpdateTaskbarPos ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
inline

Definition at line 1841 of file taskswnd.cpp.

1842 {
1843 /* Update the button spacing */
1844 m_TaskBar.UpdateTbButtonSpacing(m_Tray->IsHorizontal(), m_Theme != NULL);
1845 return TRUE;
1846 }

◆ RedrawTask()

BOOL CTaskSwitchWnd::RedrawTask ( IN HWND  hWnd)
inline

Definition at line 1241 of file taskswnd.cpp.

1242 {
1243 PTASK_ITEM TaskItem;
1244
1245 TaskItem = FindTaskItem(hWnd);
1246 if (TaskItem != NULL)
1247 {
1248 RedrawTaskItem(TaskItem);
1249 return TRUE;
1250 }
1251
1252 return FALSE;
1253 }
VOID RedrawTaskItem(IN OUT PTASK_ITEM TaskItem)
Definition: taskswnd.cpp:1216

Referenced by OnShellHook().

◆ RedrawTaskItem()

VOID CTaskSwitchWnd::RedrawTaskItem ( IN OUT PTASK_ITEM  TaskItem)
inline

Definition at line 1216 of file taskswnd.cpp.

1217 {
1218 PTASK_GROUP TaskGroup;
1219
1220 TaskGroup = TaskItem->Group;
1221 if (m_IsGroupingEnabled && TaskGroup != NULL)
1222 {
1223 if (TaskGroup->IsCollapsed && TaskGroup->Index >= 0)
1224 {
1225 UpdateTaskGroupButton(TaskGroup);
1226 }
1227 else if (TaskItem->Index >= 0)
1228 {
1229 goto UpdateTaskItem;
1230 }
1231 }
1232 else if (TaskItem->Index >= 0)
1233 {
1234 UpdateTaskItem:
1235 TaskItem->RenderFlashed = 0;
1236 UpdateTaskItemButton(TaskItem);
1237 }
1238 }

Referenced by RedrawTask().

◆ RefreshWindowList()

BOOL CTaskSwitchWnd::RefreshWindowList ( )
inline

Definition at line 1407 of file taskswnd.cpp.

1408 {
1409 TRACE("Refreshing window list...\n");
1410 /* Add all windows to the toolbar */
1411 return EnumWindows(s_EnumWindowsProc, (LPARAM)this);
1412 }
static BOOL CALLBACK s_EnumWindowsProc(IN HWND hWnd, IN LPARAM lParam)
Definition: taskswnd.cpp:1400
LONG_PTR LPARAM
Definition: windef.h:208
BOOL WINAPI EnumWindows(_In_ WNDENUMPROC lpEnumFunc, _In_ LPARAM lParam)

Referenced by ActivateTask(), OnCreate(), and OnTaskbarSettingsChanged().

◆ RemoveIcon()

VOID CTaskSwitchWnd::RemoveIcon ( IN PTASK_ITEM  TaskItem)
inline

Definition at line 571 of file taskswnd.cpp.

572 {
573 TBBUTTONINFO tbbi;
574 PTASK_ITEM currentTaskItem, LastItem;
575
576 if (TaskItem->IconIndex == -1)
577 return;
578
579 tbbi.cbSize = sizeof(tbbi);
580 tbbi.dwMask = TBIF_IMAGE;
581
582 currentTaskItem = m_TaskItems;
583 LastItem = currentTaskItem + m_TaskItemCount;
584 while (currentTaskItem != LastItem)
585 {
586 if (currentTaskItem->IconIndex > TaskItem->IconIndex)
587 {
588 currentTaskItem->IconIndex--;
589 tbbi.iImage = currentTaskItem->IconIndex;
590
591 m_TaskBar.SetButtonInfo(currentTaskItem->Index, &tbbi);
592 }
593 currentTaskItem++;
594 }
595
596 ImageList_Remove(m_ImageList, TaskItem->IconIndex);
597 }
BOOL WINAPI ImageList_Remove(HIMAGELIST himl, INT i)
Definition: imagelist.c:2568
#define TBIF_IMAGE
Definition: commctrl.h:1219
#define TBBUTTONINFO
Definition: commctrl.h:1254
INT IconIndex
Definition: taskswnd.cpp:84

Referenced by DeleteTaskItemButton().

◆ RemoveTaskFromTaskGroup()

VOID CTaskSwitchWnd::RemoveTaskFromTaskGroup ( IN OUT PTASK_ITEM  TaskItem)
inline

Definition at line 820 of file taskswnd.cpp.

821 {
822 PTASK_GROUP TaskGroup, CurrentGroup, *PrevLink;
823
824 TaskGroup = TaskItem->Group;
825 if (TaskGroup != NULL)
826 {
827 DWORD dwNewTaskCount = --TaskGroup->dwTaskCount;
828 if (dwNewTaskCount == 0)
829 {
830 /* Find the previous pointer in the chain */
831 CurrentGroup = m_TaskGroups;
832 PrevLink = &m_TaskGroups;
833 while (CurrentGroup != TaskGroup)
834 {
835 PrevLink = &CurrentGroup->Next;
836 CurrentGroup = CurrentGroup->Next;
837 }
838
839 /* Remove the group from the list */
840 ASSERT(TaskGroup == CurrentGroup);
841 *PrevLink = TaskGroup->Next;
842
843 /* Free the task group */
845 0,
846 TaskGroup);
847 }
848 else if (TaskGroup->IsCollapsed &&
849 TaskGroup->Index >= 0)
850 {
851 if (dwNewTaskCount > 1)
852 {
853 /* FIXME: Check if we should expand the group */
854 /* Update the task group button */
855 UpdateTaskGroupButton(TaskGroup);
856 }
857 else
858 {
859 /* Expand the group of one task button to a task button */
860 ExpandTaskGroup(TaskGroup);
861 }
862 }
863 }
864 }
VOID ExpandTaskGroup(IN PTASK_GROUP TaskGroup)
Definition: taskswnd.cpp:481
#define HeapFree(x, y, z)
Definition: compat.h:735

Referenced by DeleteTaskItem().

◆ s_EnumWindowsProc()

static BOOL CALLBACK CTaskSwitchWnd::s_EnumWindowsProc ( IN HWND  hWnd,
IN LPARAM  lParam 
)
inlinestatic

Definition at line 1400 of file taskswnd.cpp.

1401 {
1403
1404 return This->EnumWindowsProc(hWnd);
1405 }

Referenced by RefreshWindowList().

◆ SendAsyncProc()

static VOID CALLBACK CTaskSwitchWnd::SendAsyncProc ( HWND  hwnd,
UINT  uMsg,
DWORD_PTR  dwData,
LRESULT  lResult 
)
inlinestatic

Definition at line 1649 of file taskswnd.cpp.

1650 {
1651 ::PostMessageW(hwnd, WM_NULL, 0, 0);
1652 }
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_NULL
Definition: winuser.h:1607

Referenced by HandleTaskItemRightClick().

◆ SendPulseToTray()

VOID CTaskSwitchWnd::SendPulseToTray ( BOOL  bDelete,
HWND  hwndActive 
)
inline

Definition at line 1474 of file taskswnd.cpp.

1475 {
1476 HWND hwndTray = m_Tray->GetHWND();
1477 ::SendMessage(hwndTray, TWM_PULSE, bDelete, (LPARAM)hwndActive);
1478 }
#define TWM_PULSE
Definition: precomp.h:134

Referenced by HandleButtonClick(), and OnShellHook().

◆ UpdateButtonsSize()

VOID CTaskSwitchWnd::UpdateButtonsSize ( IN BOOL  bRedrawDisabled)
inline

Definition at line 1255 of file taskswnd.cpp.

1256 {
1257 RECT rcClient;
1258 UINT uiRows, uiMax, uiMin, uiBtnsPerLine, ui;
1259 LONG NewBtnSize;
1260 BOOL Horizontal;
1261
1262 /* Update the size of the image list if needed */
1263 int cx, cy;
1267 {
1271
1272 /* SetIconSize removes all icons so we have to reinsert them */
1273 PTASK_ITEM TaskItem = m_TaskItems;
1274 PTASK_ITEM LastTaskItem = m_TaskItems + m_TaskItemCount;
1275 while (TaskItem != LastTaskItem)
1276 {
1277 TaskItem->IconIndex = -1;
1278 UpdateTaskItemButton(TaskItem);
1279
1280 TaskItem++;
1281 }
1282 m_TaskBar.SetImageList(m_ImageList);
1283 }
1284
1285 if (GetClientRect(&rcClient) && !IsRectEmpty(&rcClient))
1286 {
1287 if (m_ButtonCount > 0)
1288 {
1289 Horizontal = m_Tray->IsHorizontal();
1290
1291 if (Horizontal)
1292 {
1293 TBMETRICS tbm = { 0 };
1294 tbm.cbSize = sizeof(tbm);
1296 m_TaskBar.GetMetrics(&tbm);
1297
1298 if (m_ButtonSize.cy + tbm.cyButtonSpacing != 0)
1299 uiRows = (rcClient.bottom + tbm.cyButtonSpacing) / (m_ButtonSize.cy + tbm.cyButtonSpacing);
1300 else
1301 uiRows = 1;
1302
1303 if (uiRows == 0)
1304 uiRows = 1;
1305
1306 uiBtnsPerLine = (m_ButtonCount + uiRows - 1) / uiRows;
1307 }
1308 else
1309 {
1310 uiBtnsPerLine = 1;
1311 uiRows = m_ButtonCount;
1312 }
1313
1314 if (!bRedrawDisabled)
1316
1317 /* We might need to update the button spacing */
1318 int cxButtonSpacing = m_TaskBar.UpdateTbButtonSpacing(
1319 Horizontal, m_Theme != NULL,
1320 uiRows, uiBtnsPerLine);
1321
1322 /* Determine the minimum and maximum width of a button */
1324 if (Horizontal)
1325 {
1327
1328 /* Calculate the ideal width and make sure it's within the allowed range */
1329 NewBtnSize = (rcClient.right - (uiBtnsPerLine * cxButtonSpacing)) / uiBtnsPerLine;
1330
1331 if (NewBtnSize < (LONG) uiMin)
1332 NewBtnSize = uiMin;
1333 if (NewBtnSize >(LONG)uiMax)
1334 NewBtnSize = uiMax;
1335
1336 /* Recalculate how many buttons actually fit into one line */
1337 uiBtnsPerLine = rcClient.right / (NewBtnSize + cxButtonSpacing);
1338 if (uiBtnsPerLine == 0)
1339 uiBtnsPerLine++;
1340 }
1341 else
1342 {
1343 NewBtnSize = uiMax = rcClient.right;
1344 }
1345
1346 m_ButtonSize.cx = NewBtnSize;
1347
1348 m_ButtonsPerLine = uiBtnsPerLine;
1349
1350 for (ui = 0; ui != m_ButtonCount; ui++)
1351 {
1352 TBBUTTONINFOW tbbi = { 0 };
1353 tbbi.cbSize = sizeof(tbbi);
1355 tbbi.cx = (INT) NewBtnSize;
1356 tbbi.fsState = TBSTATE_ENABLED;
1357
1358 /* Check if we're updating a button that is the last one in the
1359 line. If so, we need to set the TBSTATE_WRAP flag! */
1360 if (Horizontal)
1361 {
1362 if ((ui + 1) % uiBtnsPerLine == 0)
1363 tbbi.fsState |= TBSTATE_WRAP;
1364 }
1365 else
1366 {
1367 tbbi.fsState |= TBSTATE_WRAP;
1368 }
1369
1370 if (m_ActiveTaskItem != NULL &&
1372 {
1373 tbbi.fsState |= TBSTATE_CHECKED;
1374 }
1375
1376 m_TaskBar.SetButtonInfo(ui, &tbbi);
1377 }
1378 }
1379 else
1380 {
1381 m_ButtonsPerLine = 0;
1382 m_ButtonSize.cx = 0;
1383 }
1384 }
1385
1386 // FIXME: This seems to be enabling redraws prematurely, but moving it to its right place doesn't work!
1388 }
BOOL WINAPI ImageList_SetIconSize(HIMAGELIST himl, INT cx, INT cy)
Definition: imagelist.c:3038
BOOL WINAPI ImageList_GetIconSize(HIMAGELIST himl, INT *cx, INT *cy)
Definition: imagelist.c:2037
unsigned int UINT
Definition: ndis.h:50
UINT ui
Definition: oleauto.h:49
long LONG
Definition: pedump.c:60
#define INT
Definition: polytest.cpp:20
_Out_opt_ int _Out_opt_ int * cy
Definition: commctrl.h:586
#define TBIF_SIZE
Definition: commctrl.h:1225
_Out_opt_ int * cx
Definition: commctrl.h:585
#define TBMF_BUTTONSPACING
Definition: commctrl.h:1289
#define TBIF_BYINDEX
Definition: commctrl.h:1226
#define TBSTATE_WRAP
Definition: commctrl.h:977
#define TBSTATE_CHECKED
Definition: commctrl.h:972
#define TBIF_STATE
Definition: commctrl.h:1221
DWORD dwMask
Definition: commctrl.h:1243
int cyButtonSpacing
Definition: commctrl.h:1299
DWORD dwMask
Definition: commctrl.h:1293
UINT cbSize
Definition: commctrl.h:1292
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
#define SM_CXMINIMIZED
Definition: winuser.h:1020
#define SM_CXEDGE
Definition: winuser.h:1008
BOOL WINAPI IsRectEmpty(_In_ LPCRECT)
#define SM_CXSIZE
Definition: winuser.h:991

Referenced by AddTaskItemButton(), DeleteTaskItemButton(), OnCreate(), OnSettingChanged(), OnSize(), and OnTaskbarSettingsChanged().

◆ UpdateIndexesAfter()

VOID CTaskSwitchWnd::UpdateIndexesAfter ( IN INT  iIndex,
BOOL  bInserted 
)
inline

Definition at line 409 of file taskswnd.cpp.

410 {
411 PTASK_GROUP CurrentGroup;
412 PTASK_ITEM CurrentTaskItem, LastTaskItem;
413 INT NewIndex;
414
415 int offset = bInserted ? +1 : -1;
416
418 {
419 /* Update all affected groups */
420 CurrentGroup = m_TaskGroups;
421 while (CurrentGroup != NULL)
422 {
423 if (CurrentGroup->IsCollapsed &&
424 CurrentGroup->Index >= iIndex)
425 {
426 /* Update the toolbar buttons */
427 NewIndex = CurrentGroup->Index + offset;
428 if (m_TaskBar.SetButtonCommandId(CurrentGroup->Index + offset, NewIndex))
429 {
430 CurrentGroup->Index = NewIndex;
431 }
432 else
433 CurrentGroup->Index = -1;
434 }
435
436 CurrentGroup = CurrentGroup->Next;
437 }
438 }
439
440 /* Update all affected task items */
441 CurrentTaskItem = m_TaskItems;
442 LastTaskItem = CurrentTaskItem + m_TaskItemCount;
443 while (CurrentTaskItem != LastTaskItem)
444 {
445 CurrentGroup = CurrentTaskItem->Group;
446 if (CurrentGroup != NULL)
447 {
448 if (!CurrentGroup->IsCollapsed &&
449 CurrentTaskItem->Index >= iIndex)
450 {
451 goto UpdateTaskItemBtn;
452 }
453 }
454 else if (CurrentTaskItem->Index >= iIndex)
455 {
456 UpdateTaskItemBtn:
457 /* Update the toolbar buttons */
458 NewIndex = CurrentTaskItem->Index + offset;
459 if (m_TaskBar.SetButtonCommandId(CurrentTaskItem->Index + offset, NewIndex))
460 {
461 CurrentTaskItem->Index = NewIndex;
462 }
463 else
464 CurrentTaskItem->Index = -1;
465 }
466
467 CurrentTaskItem++;
468 }
469 }
BOOL SetButtonCommandId(IN INT iButtonIndex, IN INT iCommandId)
Definition: taskswnd.cpp:246
GLintptr offset
Definition: glext.h:5920

Referenced by AddTaskItemButton(), and DeleteTaskItemButton().

◆ UpdateTaskGroupButton()

INT CTaskSwitchWnd::UpdateTaskGroupButton ( IN PTASK_GROUP  TaskGroup)
inline

Definition at line 472 of file taskswnd.cpp.

473 {
474 ASSERT(TaskGroup->Index >= 0);
475
476 /* FIXME: Implement */
477
478 return TaskGroup->Index;
479 }

Referenced by AddTaskItemButton(), RedrawTaskItem(), and RemoveTaskFromTaskGroup().

◆ UpdateTaskItemButton()

INT CTaskSwitchWnd::UpdateTaskItemButton ( IN PTASK_ITEM  TaskItem)
inline

Definition at line 525 of file taskswnd.cpp.

526 {
527 TBBUTTONINFO tbbi = { 0 };
528 HICON icon;
529 WCHAR windowText[255];
530
531 ASSERT(TaskItem->Index >= 0);
532
533 tbbi.cbSize = sizeof(tbbi);
534 tbbi.dwMask = TBIF_BYINDEX | TBIF_STATE | TBIF_TEXT | TBIF_IMAGE;
535 tbbi.fsState = TBSTATE_ENABLED;
536 if (m_ActiveTaskItem == TaskItem)
537 tbbi.fsState |= TBSTATE_CHECKED;
538
539 if (TaskItem->RenderFlashed)
540 tbbi.fsState |= TBSTATE_MARKED;
541
542 /* Check if we're updating a button that is the last one in the
543 line. If so, we need to set the TBSTATE_WRAP flag! */
544 if (!m_Tray->IsHorizontal() || (m_ButtonsPerLine != 0 &&
545 (TaskItem->Index + 1) % m_ButtonsPerLine == 0))
546 {
547 tbbi.fsState |= TBSTATE_WRAP;
548 }
549
551 {
552 tbbi.pszText = windowText;
553 }
554
555 icon = GetWndIcon(TaskItem->hWnd);
556 if (!icon)
557 icon = static_cast<HICON>(LoadImageW(NULL, MAKEINTRESOURCEW(OIC_SAMPLE), IMAGE_ICON, 0, 0, LR_SHARED | LR_DEFAULTSIZE));
558 TaskItem->IconIndex = ImageList_ReplaceIcon(m_ImageList, TaskItem->IconIndex, icon);
559 tbbi.iImage = TaskItem->IconIndex;
560
561 if (!m_TaskBar.SetButtonInfo(TaskItem->Index, &tbbi))
562 {
563 TaskItem->Index = -1;
564 return -1;
565 }
566
567 TRACE("Updated button %d for hwnd 0x%p\n", TaskItem->Index, TaskItem->hWnd);
568 return TaskItem->Index;
569 }
#define TBIF_TEXT
Definition: commctrl.h:1220
#define TBSTATE_MARKED
Definition: commctrl.h:979

Referenced by AddTaskItemButton(), CheckActivateTaskItem(), FlashTaskItem(), RedrawTaskItem(), and UpdateButtonsSize().

Member Data Documentation

◆ m_ActiveTaskItem

PTASK_ITEM CTaskSwitchWnd::m_ActiveTaskItem
private

◆ m_AllocatedTaskItems

WORD CTaskSwitchWnd::m_AllocatedTaskItems
private

Definition at line 309 of file taskswnd.cpp.

Referenced by AllocTaskItem().

◆ m_ButtonCount

WORD CTaskSwitchWnd::m_ButtonCount
private

◆ m_ButtonSize

SIZE CTaskSwitchWnd::m_ButtonSize
private

Definition at line 324 of file taskswnd.cpp.

Referenced by CTaskSwitchWnd(), and UpdateButtonsSize().

◆ m_ButtonsPerLine

UINT CTaskSwitchWnd::m_ButtonsPerLine
private

Definition at line 316 of file taskswnd.cpp.

Referenced by UpdateButtonsSize(), and UpdateTaskItemButton().

◆ m_HardErrorThread

CHardErrorThread CTaskSwitchWnd::m_HardErrorThread
private

Definition at line 327 of file taskswnd.cpp.

Referenced by OnCopyData().

◆ m_ImageList

HIMAGELIST CTaskSwitchWnd::m_ImageList
private

◆ m_IsDestroying

BOOL CTaskSwitchWnd::m_IsDestroying
private

Definition at line 322 of file taskswnd.cpp.

Referenced by AddTask(), DeleteTaskItem(), and OnDestroy().

◆ m_IsGroupingEnabled

◆ m_ShellHookMsg

UINT CTaskSwitchWnd::m_ShellHookMsg
private

Definition at line 306 of file taskswnd.cpp.

Referenced by OnCreate().

◆ m_TaskBar

◆ m_TaskGroups

PTASK_GROUP CTaskSwitchWnd::m_TaskGroups
private

◆ m_TaskItemCount

◆ m_TaskItems

◆ m_Theme

HTHEME CTaskSwitchWnd::m_Theme
private

◆ m_Tray

◆ m_uHardErrorMsg

UINT CTaskSwitchWnd::m_uHardErrorMsg
private

Definition at line 326 of file taskswnd.cpp.

Referenced by CTaskSwitchWnd(), and OnCopyData().


The documentation for this class was generated from the following file: