ReactOS  0.4.13-dev-247-g0f29b3f
appswitch.c File Reference
#include <user32.h>
Include dependency graph for appswitch.c:

Go to the source code of this file.

Macros

#define DIALOG_MARGIN   8
 
#define CX_ICON   32
 
#define CY_ICON   32
 
#define ICON_MARGIN   4
 
#define CX_ITEM   (CX_ICON + 2 * ICON_MARGIN)
 
#define CY_ITEM   (CY_ICON + 2 * ICON_MARGIN)
 
#define ITEM_MARGIN   4
 
#define CX_ITEM_SPACE   (CX_ITEM + 2 * ITEM_MARGIN)
 
#define CY_ITEM_SPACE   (CY_ITEM + 2 * ITEM_MARGIN)
 
#define CY_TEXT_MARGIN   4
 
#define MAX_WINDOWS   120
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (user32)
 
DWORD wtodw (const WCHAR *psz)
 
BOOL LoadCoolSwitchSettings (void)
 
void ResizeAndCenter (HWND hwnd, int width, int height)
 
void MakeWindowActive (HWND hwnd)
 
void CompleteSwitch (BOOL doSwitch)
 
BOOL CALLBACK EnumerateCallback (HWND window, LPARAM lParam)
 
void EnumWindowsZOrder (WNDENUMPROC callback, LPARAM lParam)
 
void ProcessMouseMessage (UINT message, LPARAM lParam)
 
void OnPaint (HWND hWnd)
 
DWORD CreateSwitcherWindow (HINSTANCE hInstance)
 
DWORD GetDialogFont (VOID)
 
void PrepareWindow (VOID)
 
BOOL ProcessHotKey (VOID)
 
void RotateTasks (BOOL bShift)
 
static void MoveLeft (void)
 
static void MoveRight (void)
 
static void MoveUp (void)
 
static void MoveDown (void)
 
VOID DestroyAppWindows (VOID)
 
LRESULT WINAPI DoAppSwitch (WPARAM wParam, LPARAM lParam)
 
LRESULT WINAPI SwitchWndProc_common (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL unicode)
 
LRESULT WINAPI SwitchWndProcA (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
LRESULT WINAPI SwitchWndProcW (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 

Variables

HWND switchdialog = NULL
 
HFONT dialogFont
 
int selectedWindow = 0
 
BOOL isOpen = FALSE
 
int fontHeight =0
 
WCHAR windowText [1024]
 
HWND windowList [MAX_WINDOWS]
 
HICON iconList [MAX_WINDOWS]
 
int windowCount = 0
 
int cxBorder
 
int cyBorder
 
int nItems
 
int nCols
 
int nRows
 
int itemsW
 
int itemsH
 
int totalW
 
int totalH
 
int xOffset
 
int yOffset
 
POINT ptStart
 
int nShift = 0
 
BOOL Esc = FALSE
 
BOOL CoolSwitch = TRUE
 
int CoolSwitchRows = 3
 
int CoolSwitchColumns = 7
 
const DWORD Style = WS_POPUP | WS_BORDER | WS_DISABLED
 
const DWORD ExStyle = WS_EX_TOPMOST | WS_EX_DLGMODALFRAME | WS_EX_TOOLWINDOW
 

Macro Definition Documentation

◆ CX_ICON

#define CX_ICON   32

Definition at line 24 of file appswitch.c.

◆ CX_ITEM

#define CX_ITEM   (CX_ICON + 2 * ICON_MARGIN)

Definition at line 28 of file appswitch.c.

◆ CX_ITEM_SPACE

#define CX_ITEM_SPACE   (CX_ITEM + 2 * ITEM_MARGIN)

Definition at line 32 of file appswitch.c.

◆ CY_ICON

#define CY_ICON   32

Definition at line 25 of file appswitch.c.

◆ CY_ITEM

#define CY_ITEM   (CY_ICON + 2 * ICON_MARGIN)

Definition at line 29 of file appswitch.c.

◆ CY_ITEM_SPACE

#define CY_ITEM_SPACE   (CY_ITEM + 2 * ITEM_MARGIN)

Definition at line 33 of file appswitch.c.

◆ CY_TEXT_MARGIN

#define CY_TEXT_MARGIN   4

Definition at line 35 of file appswitch.c.

◆ DIALOG_MARGIN

#define DIALOG_MARGIN   8

Definition at line 22 of file appswitch.c.

◆ ICON_MARGIN

#define ICON_MARGIN   4

Definition at line 26 of file appswitch.c.

◆ ITEM_MARGIN

#define ITEM_MARGIN   4

Definition at line 30 of file appswitch.c.

◆ MAX_WINDOWS

#define MAX_WINDOWS   120

Definition at line 39 of file appswitch.c.

Function Documentation

◆ CompleteSwitch()

void CompleteSwitch ( BOOL  doSwitch)

Definition at line 134 of file appswitch.c.

135 {
136  if (!isOpen)
137  return;
138 
139  isOpen = FALSE;
140 
141  TRACE("[ATbot] CompleteSwitch Hiding Window.\n");
143 
144  if(doSwitch)
145  {
147  return;
148 
149  // FIXME: workaround because reactos fails to activate the previous window correctly.
150  //if(selectedWindow != 0)
151  {
153 
155 
156  TRACE("[ATbot] CompleteSwitch Switching to 0x%08x (%ls)\n", hwnd, windowText);
157 
159  }
160  }
161 
162  windowCount = 0;
163 }
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
HWND switchdialog
Definition: appswitch.c:42
#define SW_HIDE
Definition: winuser.h:762
#define _countof(array)
Definition: fontsub.cpp:30
int windowCount
Definition: appswitch.c:53
BOOL isOpen
Definition: appswitch.c:45
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
#define TRACE(s)
Definition: solgame.cpp:4
int WINAPI GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount)
Definition: window.c:1378
void MakeWindowActive(HWND hwnd)
Definition: appswitch.c:125
WCHAR windowText[1024]
Definition: appswitch.c:49
HWND windowList[MAX_WINDOWS]
Definition: appswitch.c:51
int selectedWindow
Definition: appswitch.c:44

Referenced by DoAppSwitch(), ProcessHotKey(), ProcessMouseMessage(), and SwitchWndProc_common().

◆ CreateSwitcherWindow()

DWORD CreateSwitcherWindow ( HINSTANCE  hInstance)

Definition at line 369 of file appswitch.c.

370 {
372  WC_SWITCH,
373  L"",
377  400, 150,
378  NULL, NULL,
379  hInstance, NULL);
380  if (!switchdialog)
381  {
382  TRACE("[ATbot] Task Switcher Window failed to create.\n");
383  return 0;
384  }
385 
386  isOpen = FALSE;
387  return 1;
388 }
#define WS_DISABLED
Definition: pedump.c:621
HWND switchdialog
Definition: appswitch.c:42
BOOL isOpen
Definition: appswitch.c:45
#define WS_EX_TOOLWINDOW
Definition: winuser.h:404
HINSTANCE hInstance
Definition: charmap.c:20
#define WC_SWITCH
Definition: undocuser.h:12
#define CW_USEDEFAULT
Definition: winuser.h:225
smooth NULL
Definition: ftsmooth.c:416
#define WS_EX_DLGMODALFRAME
Definition: pedump.c:645
#define TRACE(s)
Definition: solgame.cpp:4
static const WCHAR L[]
Definition: oid.c:1250
HWND WINAPI CreateWindowExW(_In_ DWORD dwExStyle, _In_opt_ LPCWSTR lpClassName, _In_opt_ LPCWSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
#define WS_EX_TOPMOST
Definition: pedump.c:647
#define WS_BORDER
Definition: pedump.c:625
#define WS_POPUP
Definition: pedump.c:616

Referenced by DoAppSwitch().

◆ DestroyAppWindows()

VOID DestroyAppWindows ( VOID  )

Definition at line 542 of file appswitch.c.

543 {
544  // for every item of the icon list:
545  INT i;
546  for (i = 0; i < windowCount; ++i)
547  {
548  // destroy the icon
550  iconList[i] = NULL;
551  }
552 }
BOOL WINAPI DestroyIcon(_In_ HICON)
Definition: cursoricon.c:2022
int windowCount
Definition: appswitch.c:53
int32_t INT
Definition: typedefs.h:56
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
smooth NULL
Definition: ftsmooth.c:416
HICON iconList[MAX_WINDOWS]
Definition: appswitch.c:52

Referenced by DoAppSwitch(), and SwitchWndProc_common().

◆ DoAppSwitch()

LRESULT WINAPI DoAppSwitch ( WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 554 of file appswitch.c.

555 {
556  HWND hwndActive;
557  MSG msg;
558 
559  // FIXME: Is loading timing OK?
561 
562  if (!CoolSwitch)
563  return 0;
564 
565  // Already in the loop.
566  if (switchdialog || Esc) return 0;
567 
568  hwndActive = GetActiveWindow();
569  // Nothing is active so exit.
570  if (!hwndActive) return 0;
571 
572  if (lParam == VK_ESCAPE)
573  {
574  Esc = TRUE;
575 
576  windowCount = 0;
578 
579  if (windowCount < 2)
580  return 0;
581 
583 
584  hwndActive = GetActiveWindow();
585 
586  if (hwndActive == NULL)
587  {
588  Esc = FALSE;
589  return 0;
590  }
591  }
592 
593  // Capture current active window.
594  SetCapture( hwndActive );
595 
596  switch (lParam)
597  {
598  case VK_TAB:
600  if( !GetDialogFont() ) goto Exit;
601  if( !ProcessHotKey() ) goto Exit;
602  break;
603 
604  case VK_ESCAPE:
605  break;
606 
607  default:
608  goto Exit;
609  }
610  // Main message loop:
611  while (1)
612  {
613  for (;;)
614  {
615  if (PeekMessageW( &msg, 0, 0, 0, PM_NOREMOVE ))
616  {
617  if (!CallMsgFilterW( &msg, MSGF_NEXTWINDOW )) break;
618  /* remove the message from the queue */
619  PeekMessageW( &msg, 0, msg.message, msg.message, PM_REMOVE );
620  }
621  else
622  WaitMessage();
623  }
624 
625  switch (msg.message)
626  {
627  case WM_KEYUP:
628  {
629  PeekMessageW( &msg, 0, msg.message, msg.message, PM_REMOVE );
630  if (msg.wParam == VK_MENU)
631  {
633  }
634  else if (msg.wParam == VK_RETURN)
635  {
637  }
638  else if (msg.wParam == VK_ESCAPE)
639  {
640  TRACE("DoAppSwitch VK_ESCAPE 2\n");
642  }
643  goto Exit; //break;
644  }
645 
646  case WM_SYSKEYDOWN:
647  {
648  PeekMessageW( &msg, 0, msg.message, msg.message, PM_REMOVE );
649  if (HIWORD(msg.lParam) & KF_ALTDOWN)
650  {
651  if ( msg.wParam == VK_TAB )
652  {
653  if (Esc) break;
654  if (GetKeyState(VK_SHIFT) < 0)
655  {
656  MoveLeft();
657  }
658  else
659  {
660  MoveRight();
661  }
662  }
663  else if ( msg.wParam == VK_ESCAPE )
664  {
665  if (!Esc) break;
667  }
668  else if ( msg.wParam == VK_LEFT )
669  {
670  MoveLeft();
671  }
672  else if ( msg.wParam == VK_RIGHT )
673  {
674  MoveRight();
675  }
676  else if ( msg.wParam == VK_UP )
677  {
678  MoveUp();
679  }
680  else if ( msg.wParam == VK_DOWN )
681  {
682  MoveDown();
683  }
684  }
685  break;
686  }
687 
688  case WM_LBUTTONUP:
689  PeekMessageW( &msg, 0, msg.message, msg.message, PM_REMOVE );
690  ProcessMouseMessage(msg.message, msg.lParam);
691  goto Exit;
692 
693  default:
694  if (PeekMessageW( &msg, 0, msg.message, msg.message, PM_REMOVE ))
695  {
698  }
699  break;
700  }
701  }
702 Exit:
703  ReleaseCapture();
705  if (Esc) DestroyAppWindows();
706  switchdialog = NULL;
707  selectedWindow = 0;
708  windowCount = 0;
709  Esc = FALSE;
710  return 0;
711 }
BOOL CALLBACK EnumerateCallback(HWND window, LPARAM lParam)
Definition: appswitch.c:165
BOOL WINAPI TranslateMessage(_In_ const MSG *)
void CompleteSwitch(BOOL doSwitch)
Definition: appswitch.c:134
#define TRUE
Definition: types.h:120
HWND switchdialog
Definition: appswitch.c:42
DWORD CreateSwitcherWindow(HINSTANCE hInstance)
Definition: appswitch.c:369
BOOL WINAPI WaitMessage(void)
Definition: ntwrapper.h:350
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1827
BOOL Esc
Definition: appswitch.c:64
int windowCount
Definition: appswitch.c:53
#define VK_LEFT
Definition: winuser.h:2178
#define VK_TAB
Definition: winuser.h:2153
#define VK_DOWN
Definition: winuser.h:2181
#define VK_MENU
Definition: winuser.h:2158
#define VK_ESCAPE
Definition: winuser.h:2168
BOOL WINAPI DestroyWindow(_In_ HWND)
HINSTANCE User32Instance
Definition: dllmain.c:10
#define VK_RETURN
Definition: winuser.h:2155
static void MoveDown(void)
Definition: appswitch.c:526
#define PM_NOREMOVE
Definition: winuser.h:1181
#define MSGF_NEXTWINDOW
Definition: winuser.h:1165
BOOL WINAPI CallMsgFilterW(_In_ LPMSG, _In_ INT)
#define VK_UP
Definition: winuser.h:2179
LRESULT WINAPI DispatchMessageW(_In_ const MSG *)
static void MoveUp(void)
Definition: appswitch.c:511
#define VK_SHIFT
Definition: winuser.h:2156
smooth NULL
Definition: ftsmooth.c:416
SHORT WINAPI GetKeyState(_In_ int)
void EnumWindowsZOrder(WNDENUMPROC callback, LPARAM lParam)
Definition: appswitch.c:215
static void MoveLeft(void)
Definition: appswitch.c:497
#define TRACE(s)
Definition: solgame.cpp:4
static void Exit(void)
Definition: sock.c:1331
#define WM_KEYUP
Definition: winuser.h:1692
DWORD GetDialogFont(VOID)
Definition: appswitch.c:390
SHORT WINAPI GetAsyncKeyState(_In_ int)
#define VK_RIGHT
Definition: winuser.h:2180
HWND WINAPI SetCapture(_In_ HWND hWnd)
BOOL LoadCoolSwitchSettings(void)
Definition: appswitch.c:86
BOOL ProcessHotKey(VOID)
Definition: appswitch.c:427
#define WM_LBUTTONUP
Definition: winuser.h:1753
static void MoveRight(void)
Definition: appswitch.c:505
#define KF_ALTDOWN
Definition: winuser.h:2403
void ProcessMouseMessage(UINT message, LPARAM lParam)
Definition: appswitch.c:249
#define msg(x)
Definition: auth_time.c:54
BOOL WINAPI ReleaseCapture(void)
Definition: message.c:2888
void RotateTasks(BOOL bShift)
Definition: appswitch.c:460
#define WM_SYSKEYDOWN
Definition: winuser.h:1695
#define HIWORD(l)
Definition: typedefs.h:246
BOOL WINAPI PeekMessageW(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT, _In_ UINT)
#define PM_REMOVE
Definition: winuser.h:1182
BOOL CoolSwitch
Definition: appswitch.c:66
int selectedWindow
Definition: appswitch.c:44
LPARAM lParam
Definition: combotst.c:139
HWND WINAPI GetActiveWindow(void)
Definition: winpos.c:138
VOID DestroyAppWindows(VOID)
Definition: appswitch.c:542

Referenced by DefWndHandleSysCommand().

◆ EnumerateCallback()

BOOL CALLBACK EnumerateCallback ( HWND  window,
LPARAM  lParam 
)

Definition at line 165 of file appswitch.c.

166 {
167  HICON hIcon;
168  HWND hwndIcon, hwndOwner;
169 
171 
172  hwndOwner = GetWindow(window, GW_OWNER);
173  hwndIcon = (hwndOwner ? hwndOwner : window);
174 
175  // First try to get the big icon assigned to the window
176  hIcon = (HICON)SendMessageW(hwndIcon, WM_GETICON, ICON_BIG, 0);
177  if (!hIcon)
178  {
179  // If no icon is assigned, try to get the icon assigned to the windows' class
180  hIcon = (HICON)GetClassLongPtrW(hwndIcon, GCL_HICON);
181  if (!hIcon)
182  {
183  // If we still don't have an icon, see if we can do with the small icon,
184  // or a default application icon
185  hIcon = (HICON)SendMessageW(hwndIcon, WM_GETICON, ICON_SMALL2, 0);
186  if (!hIcon)
187  {
188  // using windows logo icon as default
189  hIcon = gpsi->hIconWindows;
190  if (!hIcon)
191  {
192  //if all attempts to get icon fails go to the next window
193  return TRUE;
194  }
195  }
196  }
197  }
198 
201 
202  windowCount++;
203 
204  // If we got to the max number of windows,
205  // we won't be able to add any more
206  if(windowCount >= MAX_WINDOWS)
207  return FALSE;
208 
209  return TRUE;
210 }
static HICON
Definition: imagelist.c:84
#define TRUE
Definition: types.h:120
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:323
#define MAX_WINDOWS
Definition: appswitch.c:39
int windowCount
Definition: appswitch.c:53
PSERVERINFO gpsi
Definition: main.c:27
HICON iconList[MAX_WINDOWS]
Definition: appswitch.c:52
HWND WINAPI GetWindow(_In_ HWND, _In_ UINT)
static IHTMLWindow2 * window
Definition: events.c:77
#define GCL_HICON
Definition: winuser.h:661
HICON WINAPI CopyIcon(_In_ HICON)
Definition: cursoricon.c:1980
HICON hIcon
Definition: msconfig.c:44
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define GW_OWNER
Definition: winuser.h:761
HWND windowList[MAX_WINDOWS]
Definition: appswitch.c:51
LPARAM lParam
Definition: combotst.c:139
#define GetClassLongPtrW
Definition: winuser.h:4433
#define ICON_BIG
Definition: tnclass.cpp:51

Referenced by DoAppSwitch(), and ProcessHotKey().

◆ EnumWindowsZOrder()

void EnumWindowsZOrder ( WNDENUMPROC  callback,
LPARAM  lParam 
)

Definition at line 215 of file appswitch.c.

216 {
217  HWND hwnd, hwndOwner;
218  WCHAR szClass[64];
219  DWORD ExStyle;
220 
222  {
223  if (!IsWindowVisible(hwnd))
224  continue;
225 
226  // check special windows
227  if (!GetClassNameW(hwnd, szClass, _countof(szClass)) ||
228  wcscmp(szClass, L"Shell_TrayWnd") == 0 ||
229  wcscmp(szClass, L"Progman") == 0)
230  {
231  continue;
232  }
233 
236  continue;
237 
238  hwndOwner = GetWindow(hwnd, GW_OWNER);
239  if ((ExStyle & WS_EX_APPWINDOW) || !IsWindowVisible(hwndOwner))
240  {
241  if (!callback(hwnd, lParam))
242  break;
243 
244  continue;
245  }
246  }
247 }
#define GW_HWNDNEXT
Definition: winuser.h:756
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
#define _countof(array)
Definition: fontsub.cpp:30
#define GWL_EXSTYLE
Definition: winuser.h:845
#define GetWindowLongPtrW
Definition: winuser.h:4698
#define WS_EX_TOOLWINDOW
Definition: winuser.h:404
HWND WINAPI GetTopWindow(_In_opt_ HWND)
int WINAPI GetClassNameW(_In_ HWND hWnd, _Out_writes_to_(nMaxCount, return) LPWSTR lpClassName, _In_ int nMaxCount)
smooth NULL
Definition: ftsmooth.c:416
MmuTrapHandler callback[0x30]
Definition: mmuobject.c:44
__wchar_t WCHAR
Definition: xmlstorage.h:180
unsigned long DWORD
Definition: ntddk_ex.h:95
HWND WINAPI GetWindow(_In_ HWND, _In_ UINT)
static const WCHAR L[]
Definition: oid.c:1250
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
#define GW_OWNER
Definition: winuser.h:761
BOOL WINAPI IsWindowVisible(_In_ HWND)
#define WS_EX_APPWINDOW
Definition: winuser.h:383
LPARAM lParam
Definition: combotst.c:139
const DWORD ExStyle
Definition: appswitch.c:72

Referenced by DoAppSwitch(), and ProcessHotKey().

◆ GetDialogFont()

DWORD GetDialogFont ( VOID  )

Definition at line 390 of file appswitch.c.

391 {
392  HDC tDC;
393  TEXTMETRIC tm;
394 
396 
397  tDC = GetDC(0);
398  GetTextMetrics(tDC, &tm);
399  fontHeight = tm.tmHeight;
400  ReleaseDC(0, tDC);
401 
402  return 1;
403 }
HGDIOBJ WINAPI GetStockObject(_In_ int)
HFONT dialogFont
Definition: appswitch.c:43
HDC WINAPI GetDC(_In_opt_ HWND)
static HDC
Definition: imagelist.c:92
#define GetTextMetrics
Definition: wingdi.h:4452
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
int fontHeight
Definition: appswitch.c:47
#define DEFAULT_GUI_FONT
Definition: wingdi.h:908
Definition: time.h:76
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)

Referenced by DoAppSwitch().

◆ LoadCoolSwitchSettings()

BOOL LoadCoolSwitchSettings ( void  )

Definition at line 86 of file appswitch.c.

87 {
88  CoolSwitch = TRUE;
89  CoolSwitchRows = 3;
91 
92  // FIXME: load the settings from registry
93 
94  TRACE("CoolSwitch: %d\n", CoolSwitch);
95  TRACE("CoolSwitchRows: %d\n", CoolSwitchRows);
96  TRACE("CoolSwitchColumns: %d\n", CoolSwitchColumns);
97 
98  return TRUE;
99 }
#define TRUE
Definition: types.h:120
#define TRACE(s)
Definition: solgame.cpp:4
int CoolSwitchColumns
Definition: appswitch.c:68
int CoolSwitchRows
Definition: appswitch.c:67
BOOL CoolSwitch
Definition: appswitch.c:66

Referenced by DoAppSwitch().

◆ MakeWindowActive()

void MakeWindowActive ( HWND  hwnd)

Definition at line 125 of file appswitch.c.

126 {
127  if (IsIconic(hwnd))
129 
130  BringWindowToTop(hwnd); // same as: SetWindowPos(hwnd,HWND_TOP,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE); ?
132 }
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
#define SC_RESTORE
Definition: winuser.h:2552
BOOL WINAPI IsIconic(_In_ HWND)
BOOL WINAPI BringWindowToTop(_In_ HWND)
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI SetForegroundWindow(_In_ HWND)
#define WM_SYSCOMMAND
Definition: winuser.h:1717

Referenced by CompleteSwitch(), ProcessHotKey(), and RotateTasks().

◆ MoveDown()

static void MoveDown ( void  )
static

Definition at line 526 of file appswitch.c.

527 {
528  INT iRow = selectedWindow / nCols;
529  INT iCol = selectedWindow % nCols;
530 
531  ++iRow;
532  if (iRow >= nRows)
533  iRow = 0;
534 
535  selectedWindow = iRow * nCols + iCol;
539 }
#define TRUE
Definition: types.h:120
HWND switchdialog
Definition: appswitch.c:42
int nCols
Definition: appswitch.c:56
int windowCount
Definition: appswitch.c:53
int32_t INT
Definition: typedefs.h:56
smooth NULL
Definition: ftsmooth.c:416
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
int nRows
Definition: appswitch.c:56
int selectedWindow
Definition: appswitch.c:44

Referenced by DoAppSwitch().

◆ MoveLeft()

static void MoveLeft ( void  )
static

Definition at line 497 of file appswitch.c.

498 {
500  if (selectedWindow < 0)
503 }
#define TRUE
Definition: types.h:120
HWND switchdialog
Definition: appswitch.c:42
int windowCount
Definition: appswitch.c:53
smooth NULL
Definition: ftsmooth.c:416
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
int selectedWindow
Definition: appswitch.c:44

Referenced by DoAppSwitch().

◆ MoveRight()

static void MoveRight ( void  )
static

Definition at line 505 of file appswitch.c.

506 {
509 }
#define TRUE
Definition: types.h:120
HWND switchdialog
Definition: appswitch.c:42
int windowCount
Definition: appswitch.c:53
smooth NULL
Definition: ftsmooth.c:416
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
int selectedWindow
Definition: appswitch.c:44

Referenced by DoAppSwitch().

◆ MoveUp()

static void MoveUp ( void  )
static

Definition at line 511 of file appswitch.c.

512 {
513  INT iRow = selectedWindow / nCols;
514  INT iCol = selectedWindow % nCols;
515 
516  --iRow;
517  if (iRow < 0)
518  iRow = nRows - 1;
519 
520  selectedWindow = iRow * nCols + iCol;
524 }
#define TRUE
Definition: types.h:120
HWND switchdialog
Definition: appswitch.c:42
int nCols
Definition: appswitch.c:56
int windowCount
Definition: appswitch.c:53
int32_t INT
Definition: typedefs.h:56
smooth NULL
Definition: ftsmooth.c:416
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
int nRows
Definition: appswitch.c:56
int selectedWindow
Definition: appswitch.c:44

Referenced by DoAppSwitch().

◆ OnPaint()

void OnPaint ( HWND  hWnd)

Definition at line 276 of file appswitch.c.

277 {
278  HDC dialogDC;
280  RECT cRC, textRC;
281  int i, xPos, yPos, CharCount;
282  HFONT dcFont;
283  HICON hIcon;
284  HPEN hPen;
285  COLORREF Color;
286 
287  // check
288  if (nCols == 0 || nItems == 0)
289  return;
290 
291  // begin painting
292  dialogDC = BeginPaint(hWnd, &paint);
293  if (dialogDC == NULL)
294  return;
295 
296  // fill the client area
297  GetClientRect(hWnd, &cRC);
298  FillRect(dialogDC, &cRC, (HBRUSH)(COLOR_3DFACE + 1));
299 
300  // if the selection index exceeded the display items, then
301  // do display item shifting
302  if (selectedWindow >= nItems)
303  nShift = selectedWindow - nItems + 1;
304  else
305  nShift = 0;
306 
307  for (i = 0; i < nItems; ++i)
308  {
309  // get the icon to display
310  hIcon = iconList[i + nShift];
311 
312  // calculate the position where we start drawing
313  xPos = DIALOG_MARGIN + CX_ITEM_SPACE * (i % nCols) + ITEM_MARGIN;
314  yPos = DIALOG_MARGIN + CY_ITEM_SPACE * (i / nCols) + ITEM_MARGIN;
315 
316  // centering
318  {
319  xPos += (itemsW - nItems * CX_ITEM_SPACE) / 2;
320  }
321 
322  // if this position is selected,
323  if (selectedWindow == i + nShift)
324  {
325  // create a solid pen
327  hPen = CreatePen(PS_SOLID, 1, Color);
328 
329  // draw a rectangle with using the pen
330  SelectObject(dialogDC, hPen);
332  Rectangle(dialogDC, xPos, yPos, xPos + CX_ITEM, yPos + CY_ITEM);
333  Rectangle(dialogDC, xPos + 1, yPos + 1,
334  xPos + CX_ITEM - 1, yPos + CY_ITEM - 1);
335 
336  // delete the pen
337  DeleteObject(hPen);
338  }
339 
340  // draw icon
341  DrawIconEx(dialogDC, xPos + ICON_MARGIN, yPos + ICON_MARGIN,
343  }
344 
345  // set the text rectangle
348 
349  // draw the sunken button around text
350  DrawFrameControl(dialogDC, &textRC, DFC_BUTTON,
352 
353  // get text
356 
357  // draw text
358  dcFont = SelectObject(dialogDC, dialogFont);
360  SetBkMode(dialogDC, TRANSPARENT);
361  DrawTextW(dialogDC, windowText, CharCount, &textRC,
363  SelectObject(dialogDC, dcFont);
364 
365  // end painting
366  EndPaint(hWnd, &paint);
367 }
HGDIOBJ WINAPI GetStockObject(_In_ int)
HFONT dialogFont
Definition: appswitch.c:43
static HICON
Definition: imagelist.c:84
HPEN WINAPI CreatePen(_In_ int, _In_ int, _In_ COLORREF)
#define DFC_BUTTON
Definition: winuser.h:476
#define COLOR_HIGHLIGHT
Definition: winuser.h:916
#define CX_ICON
Definition: appswitch.c:24
int nCols
Definition: appswitch.c:56
BOOL WINAPI Rectangle(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int)
#define _countof(array)
Definition: fontsub.cpp:30
#define NULL_BRUSH
Definition: wingdi.h:900
static HDC
Definition: imagelist.c:92
HWND hWnd
Definition: settings.c:17
#define ITEM_MARGIN
Definition: appswitch.c:30
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1497
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
BOOL WINAPI DrawFrameControl(_In_ HDC, _Inout_ LPRECT, _In_ UINT, _In_ UINT)
#define ICON_MARGIN
Definition: appswitch.c:26
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
DWORD WINAPI GetSysColor(_In_ int)
struct Color Color
#define PS_SOLID
Definition: wingdi.h:585
#define DFCS_PUSHED
Definition: winuser.h:503
int WINAPI SetBkMode(_In_ HDC, _In_ int)
Definition: dc.c:1032
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 COLOR_3DFACE
Definition: winuser.h:919
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
#define CX_ITEM_SPACE
Definition: appswitch.c:32
#define TRANSPARENT
Definition: wingdi.h:949
int nItems
Definition: appswitch.c:56
#define DT_END_ELLIPSIS
Definition: winuser.h:529
smooth NULL
Definition: ftsmooth.c:416
int totalW
Definition: appswitch.c:58
HICON iconList[MAX_WINDOWS]
Definition: appswitch.c:52
#define DT_VCENTER
Definition: winuser.h:543
#define DIALOG_MARGIN
Definition: appswitch.c:22
int itemsW
Definition: appswitch.c:57
#define CY_ITEM
Definition: appswitch.c:29
BOOL WINAPI DrawIconEx(_In_ HDC, _In_ int, _In_ int, _In_ HICON, _In_ int, _In_ int, _In_ UINT, _In_opt_ HBRUSH, _In_ UINT)
Definition: cursoricon.c:1997
int itemsH
Definition: appswitch.c:57
DWORD COLORREF
Definition: windef.h:285
int totalH
Definition: appswitch.c:58
int nShift
Definition: appswitch.c:62
int CoolSwitchColumns
Definition: appswitch.c:68
#define DI_NORMAL
Definition: wingdi.h:72
#define CY_ICON
Definition: appswitch.c:25
COLORREF WINAPI SetTextColor(_In_ HDC, _In_ COLORREF)
Definition: text.c:886
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define DT_SINGLELINE
Definition: winuser.h:540
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)
int WINAPI GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount)
Definition: window.c:1378
HICON hIcon
Definition: msconfig.c:44
#define DFCS_BUTTONPUSH
Definition: winuser.h:501
static LRESULT paint(HTHEME theme, HWND hwnd, HDC hParamDC, ULONG state)
Definition: theme_combo.c:154
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
WCHAR windowText[1024]
Definition: appswitch.c:49
#define CX_ITEM
Definition: appswitch.c:28
HWND windowList[MAX_WINDOWS]
Definition: appswitch.c:51
#define DT_CENTER
Definition: winuser.h:527
#define COLOR_BTNTEXT
Definition: winuser.h:923
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
int selectedWindow
Definition: appswitch.c:44
INT WINAPI DrawTextW(HDC hdc, LPCWSTR str, INT count, LPRECT rect, UINT flags)
Definition: defwnd.c:17
#define CY_ITEM_SPACE
Definition: appswitch.c:33

Referenced by SwitchWndProc_common().

◆ PrepareWindow()

void PrepareWindow ( VOID  )

Definition at line 405 of file appswitch.c.

406 {
408 
411  if (nRows > CoolSwitchRows)
412  {
414  nItems = nRows * nCols;
415  }
416 
419 
420  totalW = itemsW + 2 * DIALOG_MARGIN;
421  totalH = itemsH + 2 * DIALOG_MARGIN;
423 
425 }
void ResizeAndCenter(HWND hwnd, int width, int height)
Definition: appswitch.c:101
HWND switchdialog
Definition: appswitch.c:42
int nCols
Definition: appswitch.c:56
int windowCount
Definition: appswitch.c:53
#define CY_TEXT_MARGIN
Definition: appswitch.c:35
#define CX_ITEM_SPACE
Definition: appswitch.c:32
int nItems
Definition: appswitch.c:56
int totalW
Definition: appswitch.c:58
#define DIALOG_MARGIN
Definition: appswitch.c:22
int itemsW
Definition: appswitch.c:57
int fontHeight
Definition: appswitch.c:47
int itemsH
Definition: appswitch.c:57
int totalH
Definition: appswitch.c:58
int CoolSwitchColumns
Definition: appswitch.c:68
int CoolSwitchRows
Definition: appswitch.c:67
int nRows
Definition: appswitch.c:56
#define CY_ITEM_SPACE
Definition: appswitch.c:33

Referenced by SwitchWndProc_common().

◆ ProcessHotKey()

BOOL ProcessHotKey ( VOID  )

Definition at line 427 of file appswitch.c.

428 {
429  if (!isOpen)
430  {
431  windowCount=0;
433 
434  if (windowCount == 0)
435  return FALSE;
436 
437  if (windowCount == 1)
438  {
439  selectedWindow = 0;
441  return TRUE;
442  }
443 
444  selectedWindow = 1;
445 
446  TRACE("[ATbot] HotKey Received. Opening window.\n");
449  isOpen = TRUE;
450  }
451  else
452  {
453  TRACE("[ATbot] HotKey Received Rotating.\n");
456  }
457  return TRUE;
458 }
BOOL CALLBACK EnumerateCallback(HWND window, LPARAM lParam)
Definition: appswitch.c:165
void CompleteSwitch(BOOL doSwitch)
Definition: appswitch.c:134
#define TRUE
Definition: types.h:120
HWND switchdialog
Definition: appswitch.c:42
int windowCount
Definition: appswitch.c:53
BOOL isOpen
Definition: appswitch.c:45
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
smooth NULL
Definition: ftsmooth.c:416
void EnumWindowsZOrder(WNDENUMPROC callback, LPARAM lParam)
Definition: appswitch.c:215
#define TRACE(s)
Definition: solgame.cpp:4
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
#define SW_SHOWNORMAL
Definition: winuser.h:764
void MakeWindowActive(HWND hwnd)
Definition: appswitch.c:125
int selectedWindow
Definition: appswitch.c:44

Referenced by DoAppSwitch().

◆ ProcessMouseMessage()

void ProcessMouseMessage ( UINT  message,
LPARAM  lParam 
)

Definition at line 249 of file appswitch.c.

250 {
251  int xPos = LOWORD(lParam);
252  int yPos = HIWORD(lParam);
253 
254  int xIndex = (xPos - DIALOG_MARGIN) / CX_ITEM_SPACE;
255  int yIndex = (yPos - DIALOG_MARGIN) / CY_ITEM_SPACE;
256 
257  if (xIndex < 0 || nCols <= xIndex ||
258  yIndex < 0 || nRows <= yIndex)
259  {
260  return;
261  }
262 
263  selectedWindow = (yIndex*nCols) + xIndex;
264  if (message == WM_MOUSEMOVE)
265  {
267  //RedrawWindow(switchdialog, NULL, NULL, 0);
268  }
269  else
270  {
271  selectedWindow = (yIndex*nCols) + xIndex;
273  }
274 }
Definition: tftpd.h:59
void CompleteSwitch(BOOL doSwitch)
Definition: appswitch.c:134
#define TRUE
Definition: types.h:120
HWND switchdialog
Definition: appswitch.c:42
int nCols
Definition: appswitch.c:56
#define CX_ITEM_SPACE
Definition: appswitch.c:32
smooth NULL
Definition: ftsmooth.c:416
#define DIALOG_MARGIN
Definition: appswitch.c:22
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
#define WM_MOUSEMOVE
Definition: winuser.h:1751
int nRows
Definition: appswitch.c:56
#define HIWORD(l)
Definition: typedefs.h:246
int selectedWindow
Definition: appswitch.c:44
LPARAM lParam
Definition: combotst.c:139
#define LOWORD(l)
Definition: pedump.c:82
#define CY_ITEM_SPACE
Definition: appswitch.c:33

Referenced by DoAppSwitch(), and SwitchWndProc_common().

◆ ResizeAndCenter()

void ResizeAndCenter ( HWND  hwnd,
int  width,
int  height 
)

Definition at line 101 of file appswitch.c.

102 {
103  int x, y;
104  RECT Rect;
105 
106  int screenwidth = GetSystemMetrics(SM_CXSCREEN);
107  int screenheight = GetSystemMetrics(SM_CYSCREEN);
108 
109  x = (screenwidth - width) / 2;
110  y = (screenheight - height) / 2;
111 
112  SetRect(&Rect, x, y, x + width, y + height);
114 
115  x = Rect.left;
116  y = Rect.top;
117  width = Rect.right - Rect.left;
118  height = Rect.bottom - Rect.top;
120 
121  ptStart.x = x;
122  ptStart.y = y;
123 }
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
GLint GLint GLsizei width
Definition: gl.h:1546
POINT ptStart
Definition: appswitch.c:60
long y
Definition: polytest.cpp:48
long x
Definition: polytest.cpp:48
BOOL WINAPI AdjustWindowRectEx(_Inout_ LPRECT, _In_ DWORD, _In_ BOOL, _In_ DWORD)
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
#define SM_CXSCREEN
Definition: winuser.h:949
#define SM_CYSCREEN
Definition: winuser.h:950
const DWORD Style
Definition: appswitch.c:71
int WINAPI GetSystemMetrics(_In_ int)
BOOL WINAPI MoveWindow(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BOOL)
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
struct Rect Rect
const DWORD ExStyle
Definition: appswitch.c:72

Referenced by PrepareWindow().

◆ RotateTasks()

void RotateTasks ( BOOL  bShift)

Definition at line 460 of file appswitch.c.

461 {
462  HWND hwndFirst, hwndLast;
463  DWORD Size;
464 
465  if (windowCount < 2 || !Esc)
466  return;
467 
468  hwndFirst = windowList[0];
469  hwndLast = windowList[windowCount - 1];
470 
471  if (bShift)
472  {
473  SetWindowPos(hwndLast, HWND_TOP, 0, 0, 0, 0,
476 
477  MakeWindowActive(hwndLast);
478 
479  Size = (windowCount - 1) * sizeof(HWND);
481  windowList[0] = hwndLast;
482  }
483  else
484  {
485  SetWindowPos(hwndFirst, hwndLast, 0, 0, 0, 0,
488 
490 
491  Size = (windowCount - 1) * sizeof(HWND);
493  windowList[windowCount - 1] = hwndFirst;
494  }
495 }
BOOL Esc
Definition: appswitch.c:64
int windowCount
Definition: appswitch.c:53
volatile BOOLEAN bShift
Definition: shell.c:71
#define HWND_TOP
Definition: winuser.h:1193
#define MoveMemory
Definition: winbase.h:1632
#define SWP_NOACTIVATE
Definition: winuser.h:1227
unsigned long DWORD
Definition: ntddk_ex.h:95
IN PVOID IN PVOID IN USHORT IN USHORT Size
Definition: pci.h:359
#define SWP_NOSIZE
Definition: winuser.h:1230
void MakeWindowActive(HWND hwnd)
Definition: appswitch.c:125
#define SWP_NOREPOSITION
Definition: winuser.h:1235
HWND windowList[MAX_WINDOWS]
Definition: appswitch.c:51
#define SWP_NOMOVE
Definition: winuser.h:1229
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define SWP_NOOWNERZORDER
Definition: winuser.h:1234

Referenced by DoAppSwitch().

◆ SwitchWndProc_common()

LRESULT WINAPI SwitchWndProc_common ( HWND  hWnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL  unicode 
)

Definition at line 716 of file appswitch.c.

717 {
718  PWND pWnd;
719  PALTTABINFO ati;
720  pWnd = ValidateHwnd(hWnd);
721  if (pWnd)
722  {
723  if (!pWnd->fnid)
724  {
726  }
727  }
728 
729  switch (uMsg)
730  {
731  case WM_NCCREATE:
732  if (!(ati = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*ati))))
733  return 0;
734  SetWindowLongPtrW( hWnd, 0, (LONG_PTR)ati );
735  return TRUE;
736 
737  case WM_SHOWWINDOW:
738  if (wParam)
739  {
740  PrepareWindow();
742  ati->cbSize = sizeof(ALTTABINFO);
743  ati->cItems = nItems;
744  ati->cColumns = nCols;
745  ati->cRows = nRows;
746  if (nCols)
747  {
748  ati->iColFocus = (selectedWindow - nShift) % nCols;
749  ati->iRowFocus = (selectedWindow - nShift) / nCols;
750  }
751  else
752  {
753  ati->iColFocus = 0;
754  ati->iRowFocus = 0;
755  }
756  ati->cxItem = CX_ITEM_SPACE;
757  ati->cyItem = CY_ITEM_SPACE;
758  ati->ptStart = ptStart;
759  }
760  return 0;
761 
762  case WM_MOUSEMOVE:
764  return 0;
765 
766  case WM_ACTIVATE:
767  if (wParam == WA_INACTIVE)
768  {
770  }
771  return 0;
772 
773  case WM_PAINT:
774  OnPaint(hWnd);
775  return 0;
776 
777  case WM_DESTROY:
778  isOpen = FALSE;
780  HeapFree( GetProcessHeap(), 0, ati );
781  SetWindowLongPtrW( hWnd, 0, 0 );
784  return 0;
785  }
786  return DefWindowProcW(hWnd, uMsg, wParam, lParam);
787 }
void CompleteSwitch(BOOL doSwitch)
Definition: appswitch.c:134
#define TRUE
Definition: types.h:120
POINT ptStart
Definition: appswitch.c:60
int nCols
Definition: appswitch.c:56
HWND hWnd
Definition: settings.c:17
BOOL isOpen
Definition: appswitch.c:45
#define WM_SHOWWINDOW
Definition: winuser.h:1610
#define GetWindowLongPtrW
Definition: winuser.h:4698
#define FNID_DESTROY
Definition: ntuser.h:859
#define WM_NCCREATE
Definition: winuser.h:1665
WPARAM wParam
Definition: combotst.c:138
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
struct tagALTTABINFO * PALTTABINFO
POINT ptStart
Definition: winuser.h:3647
DWORD fnid
Definition: ntuser.h:673
#define CX_ITEM_SPACE
Definition: appswitch.c:32
int nItems
Definition: appswitch.c:56
struct tagALTTABINFO ALTTABINFO
#define WM_DESTROY
Definition: winuser.h:1591
#define GetProcessHeap()
Definition: compat.h:395
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
#define FNID_SWITCH
Definition: ntuser.h:827
int nShift
Definition: appswitch.c:62
#define WM_PAINT
Definition: winuser.h:1602
PWND FASTCALL ValidateHwnd(HWND hwnd)
Definition: misc.c:369
void PrepareWindow(VOID)
Definition: appswitch.c:405
Definition: ntuser.h:657
#define WM_ACTIVATE
Definition: winuser.h:1594
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
#define WM_MOUSEMOVE
Definition: winuser.h:1751
#define HEAP_ZERO_MEMORY
Definition: compat.h:123
void ProcessMouseMessage(UINT message, LPARAM lParam)
Definition: appswitch.c:249
int nRows
Definition: appswitch.c:56
DWORD cbSize
Definition: winuser.h:3639
BOOL NTAPI NtUserSetWindowFNID(HWND hWnd, WORD fnID)
Definition: window.c:4107
#define SetWindowLongPtrW
Definition: winuser.h:5215
#define WA_INACTIVE
Definition: winuser.h:2576
void OnPaint(HWND hWnd)
Definition: appswitch.c:276
int selectedWindow
Definition: appswitch.c:44
LPARAM lParam
Definition: combotst.c:139
#define HeapFree(x, y, z)
Definition: compat.h:394
VOID DestroyAppWindows(VOID)
Definition: appswitch.c:542
#define CY_ITEM_SPACE
Definition: appswitch.c:33

Referenced by SwitchWndProcA(), and SwitchWndProcW().

◆ SwitchWndProcA()

LRESULT WINAPI SwitchWndProcA ( HWND  hWnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 789 of file appswitch.c.

790 {
791  return SwitchWndProc_common(hWnd, uMsg, wParam, lParam, FALSE);
792 }
HWND hWnd
Definition: settings.c:17
LRESULT WINAPI SwitchWndProc_common(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL unicode)
Definition: appswitch.c:716
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139

Referenced by RegisterClientPFN().

◆ SwitchWndProcW()

LRESULT WINAPI SwitchWndProcW ( HWND  hWnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 794 of file appswitch.c.

795 {
796  return SwitchWndProc_common(hWnd, uMsg, wParam, lParam, TRUE);
797 }
#define TRUE
Definition: types.h:120
HWND hWnd
Definition: settings.c:17
LRESULT WINAPI SwitchWndProc_common(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL unicode)
Definition: appswitch.c:716
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139

Referenced by RegisterClientPFN().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( user32  )

◆ wtodw()

DWORD wtodw ( const WCHAR psz)

Definition at line 74 of file appswitch.c.

75 {
76  const WCHAR *pch = psz;
77  DWORD Value = 0;
78  while ('0' <= *pch && *pch <= '9')
79  {
80  Value *= 10;
81  Value += *pch - L'0';
82  }
83  return Value;
84 }
_In_opt_ ULONG _Out_ PULONG Value
Definition: rtlfuncs.h:2327
#define pch(ap)
Definition: match.c:418
__wchar_t WCHAR
Definition: xmlstorage.h:180
unsigned long DWORD
Definition: ntddk_ex.h:95
static const WCHAR L[]
Definition: oid.c:1250

Variable Documentation

◆ CoolSwitch

BOOL CoolSwitch = TRUE

Definition at line 66 of file appswitch.c.

Referenced by DoAppSwitch(), and LoadCoolSwitchSettings().

◆ CoolSwitchColumns

int CoolSwitchColumns = 7

Definition at line 68 of file appswitch.c.

Referenced by LoadCoolSwitchSettings(), OnPaint(), and PrepareWindow().

◆ CoolSwitchRows

int CoolSwitchRows = 3

Definition at line 67 of file appswitch.c.

Referenced by LoadCoolSwitchSettings(), and PrepareWindow().

◆ cxBorder

int cxBorder

Definition at line 55 of file appswitch.c.

◆ cyBorder

int cyBorder

Definition at line 55 of file appswitch.c.

◆ dialogFont

HFONT dialogFont

Definition at line 43 of file appswitch.c.

Referenced by GetDialogFont(), and OnPaint().

◆ Esc

BOOL Esc = FALSE

Definition at line 64 of file appswitch.c.

Referenced by DoAppSwitch(), and RotateTasks().

◆ ExStyle

◆ fontHeight

int fontHeight =0

Definition at line 47 of file appswitch.c.

Referenced by add_font(), GetDialogFont(), PrepareWindow(), and realize_font().

◆ iconList

HICON iconList[MAX_WINDOWS]

Definition at line 52 of file appswitch.c.

Referenced by DestroyAppWindows(), EnumerateCallback(), and OnPaint().

◆ isOpen

BOOL isOpen = FALSE

◆ itemsH

int itemsH

Definition at line 57 of file appswitch.c.

Referenced by OnPaint(), and PrepareWindow().

◆ itemsW

int itemsW

Definition at line 57 of file appswitch.c.

Referenced by OnPaint(), and PrepareWindow().

◆ nCols

◆ nItems

◆ nRows

◆ nShift

int nShift = 0

Definition at line 62 of file appswitch.c.

Referenced by OnPaint(), and SwitchWndProc_common().

◆ ptStart

POINT ptStart

Definition at line 60 of file appswitch.c.

Referenced by ResizeAndCenter(), SwitchWndProc_common(), and test_CPoint().

◆ selectedWindow

◆ Style

◆ switchdialog

◆ totalH

int totalH

Definition at line 58 of file appswitch.c.

Referenced by OnPaint(), and PrepareWindow().

◆ totalW

int totalW

Definition at line 58 of file appswitch.c.

Referenced by OnPaint(), and PrepareWindow().

◆ windowCount

◆ windowList

HWND windowList[MAX_WINDOWS]

Definition at line 51 of file appswitch.c.

Referenced by CompleteSwitch(), EnumerateCallback(), OnPaint(), and RotateTasks().

◆ windowText

◆ xOffset

int xOffset

◆ yOffset