mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 17:52:56 +00:00
tool tip texts for notification icons
svn path=/trunk/; revision=8715
This commit is contained in:
parent
b61431ec36
commit
e8f56accc6
6 changed files with 117 additions and 28 deletions
|
@ -8,7 +8,7 @@ CC = gcc
|
||||||
CXX = g++
|
CXX = g++
|
||||||
LINK = g++
|
LINK = g++
|
||||||
|
|
||||||
CFLAGS = -DWIN32 -D_WIN32_IE=0x0501 -D_WIN32_WINNT=0x0501 -fexceptions -Wall
|
CFLAGS = -DWIN32 -D_WIN32_IE=0x0600 -D_WIN32_WINNT=0x0501 -fexceptions -Wall
|
||||||
RCFLAGS = -DWIN32 -D__WINDRES__
|
RCFLAGS = -DWIN32 -D__WINDRES__
|
||||||
LFLAGS = -Wl,--subsystem,windows
|
LFLAGS = -Wl,--subsystem,windows
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ SRCDIR = .
|
||||||
MODULE = explorer.exe
|
MODULE = explorer.exe
|
||||||
APPMODE = gui
|
APPMODE = gui
|
||||||
IMPORTS = shell32 comctl32 ole32 user32 gdi32 kernel32 advapi32 oleaut32
|
IMPORTS = shell32 comctl32 ole32 user32 gdi32 kernel32 advapi32 oleaut32
|
||||||
EXTRADEFS = -D__WINE__ -D_WIN32_IE=0x0501 -D_WIN32_WINNT=0x0501 -D__MINGW32__
|
EXTRADEFS = -D__WINE__ -D_WIN32_IE=0x0600 -D_WIN32_WINNT=0x0501 -D__MINGW32__
|
||||||
#EXTRA_OBJS = explorer_intres.res
|
#EXTRA_OBJS = explorer_intres.res
|
||||||
EXTRALIBS = $(LIBUUID)
|
EXTRALIBS = $(LIBUUID)
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
- read "DESCRIPT.ION" files to display file descriptions
|
- read "DESCRIPT.ION" files to display file descriptions
|
||||||
- tool tip texts for notification icons
|
|
||||||
- hiding of notification icons
|
- hiding of notification icons
|
||||||
- context menus for quick launch bar
|
- context menus for quick launch bar
|
||||||
- detect display mode changes and adjust desktop bar size
|
- detect display mode changes and adjust desktop bar size
|
||||||
|
|
|
@ -49,7 +49,7 @@ RSC=rc.exe
|
||||||
# PROP Ignore_Export_Lib 0
|
# PROP Ignore_Export_Lib 0
|
||||||
# PROP Target_Dir ""
|
# PROP Target_Dir ""
|
||||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
||||||
# ADD CPP /nologo /MD /W3 /GR /GX /O1 /D "NDEBUG" /D "WIN32" /D _WIN32_IE=0x0501 /D _WIN32_WINNT=0x0501 /YX /FD /c
|
# ADD CPP /nologo /MD /W3 /GR /GX /O1 /D "NDEBUG" /D "WIN32" /D _WIN32_IE=0x0600 /D _WIN32_WINNT=0x0501 /YX /FD /c
|
||||||
# ADD BASE RSC /l 0x407 /d "NDEBUG"
|
# ADD BASE RSC /l 0x407 /d "NDEBUG"
|
||||||
# ADD RSC /l 0x407 /d "NDEBUG"
|
# ADD RSC /l 0x407 /d "NDEBUG"
|
||||||
BSC32=bscmake.exe
|
BSC32=bscmake.exe
|
||||||
|
@ -74,7 +74,7 @@ LINK32=link.exe
|
||||||
# PROP Ignore_Export_Lib 0
|
# PROP Ignore_Export_Lib 0
|
||||||
# PROP Target_Dir ""
|
# PROP Target_Dir ""
|
||||||
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
|
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
|
||||||
# ADD CPP /nologo /MDd /W3 /Gm /GR /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D _WIN32_IE=0x0501 /D _WIN32_WINNT=0x0501 /FR /YX /FD /GZ /c
|
# ADD CPP /nologo /MDd /W3 /Gm /GR /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D _WIN32_IE=0x0600 /D _WIN32_WINNT=0x0501 /FR /YX /FD /GZ /c
|
||||||
# ADD BASE RSC /l 0x407 /d "_DEBUG"
|
# ADD BASE RSC /l 0x407 /d "_DEBUG"
|
||||||
# ADD RSC /l 0x407 /d "_DEBUG"
|
# ADD RSC /l 0x407 /d "_DEBUG"
|
||||||
BSC32=bscmake.exe
|
BSC32=bscmake.exe
|
||||||
|
@ -100,7 +100,7 @@ LINK32=link.exe
|
||||||
# PROP Ignore_Export_Lib 0
|
# PROP Ignore_Export_Lib 0
|
||||||
# PROP Target_Dir ""
|
# PROP Target_Dir ""
|
||||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_ROS_" /YX /FD /c
|
# ADD BASE CPP /nologo /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_ROS_" /YX /FD /c
|
||||||
# ADD CPP /nologo /MD /W3 /GR /GX /Zi /O2 /D "NDEBUG" /D "WIN32" /D _WIN32_IE=0x0501 /D _WIN32_WINNT=0x0501 /FR /YX /FD /c
|
# ADD CPP /nologo /MD /W3 /GR /GX /Zi /O2 /D "NDEBUG" /D "WIN32" /D _WIN32_IE=0x0600 /D _WIN32_WINNT=0x0501 /FR /YX /FD /c
|
||||||
# ADD BASE RSC /l 0x407 /d "NDEBUG"
|
# ADD BASE RSC /l 0x407 /d "NDEBUG"
|
||||||
# ADD RSC /l 0x407 /d "NDEBUG"
|
# ADD RSC /l 0x407 /d "NDEBUG"
|
||||||
BSC32=bscmake.exe
|
BSC32=bscmake.exe
|
||||||
|
@ -126,7 +126,7 @@ LINK32=link.exe
|
||||||
# PROP Ignore_Export_Lib 0
|
# PROP Ignore_Export_Lib 0
|
||||||
# PROP Target_Dir ""
|
# PROP Target_Dir ""
|
||||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "UNICODE" /D "_ROS_" /YX /FD /c
|
# ADD BASE CPP /nologo /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "UNICODE" /D "_ROS_" /YX /FD /c
|
||||||
# ADD CPP /nologo /MD /W3 /GR /GX /O2 /D "NDEBUG" /D "UNICODE" /D "WIN32" /D _WIN32_IE=0x0501 /D _WIN32_WINNT=0x0501 /YX /FD /c
|
# ADD CPP /nologo /MD /W3 /GR /GX /O2 /D "NDEBUG" /D "UNICODE" /D "WIN32" /D _WIN32_IE=0x0600 /D _WIN32_WINNT=0x0501 /YX /FD /c
|
||||||
# ADD BASE RSC /l 0x407 /d "NDEBUG"
|
# ADD BASE RSC /l 0x407 /d "NDEBUG"
|
||||||
# ADD RSC /l 0x407 /d "NDEBUG"
|
# ADD RSC /l 0x407 /d "NDEBUG"
|
||||||
BSC32=bscmake.exe
|
BSC32=bscmake.exe
|
||||||
|
@ -152,7 +152,7 @@ LINK32=link.exe
|
||||||
# PROP Ignore_Export_Lib 0
|
# PROP Ignore_Export_Lib 0
|
||||||
# PROP Target_Dir ""
|
# PROP Target_Dir ""
|
||||||
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "UNICODE" /D "_ROS_" /FR /YX /FD /GZ /c
|
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "UNICODE" /D "_ROS_" /FR /YX /FD /GZ /c
|
||||||
# ADD CPP /nologo /MDd /W3 /Gm /GR /GX /ZI /Od /D "_DEBUG" /D "UNICODE" /D "WIN32" /D _WIN32_IE=0x0501 /D _WIN32_WINNT=0x0501 /FR /YX /FD /GZ /c
|
# ADD CPP /nologo /MDd /W3 /Gm /GR /GX /ZI /Od /D "_DEBUG" /D "UNICODE" /D "WIN32" /D _WIN32_IE=0x0600 /D _WIN32_WINNT=0x0501 /FR /YX /FD /GZ /c
|
||||||
# ADD BASE RSC /l 0x407 /d "_DEBUG"
|
# ADD BASE RSC /l 0x407 /d "_DEBUG"
|
||||||
# ADD RSC /l 0x407 /d "_DEBUG"
|
# ADD RSC /l 0x407 /d "_DEBUG"
|
||||||
BSC32=bscmake.exe
|
BSC32=bscmake.exe
|
||||||
|
@ -178,7 +178,7 @@ LINK32=link.exe
|
||||||
# PROP Ignore_Export_Lib 0
|
# PROP Ignore_Export_Lib 0
|
||||||
# PROP Target_Dir ""
|
# PROP Target_Dir ""
|
||||||
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_ROS_" /D _WIN32_IE=0x0501 /D _WIN32_WINNT=0x0501 /FR /YX /FD /GZ /c
|
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_ROS_" /D _WIN32_IE=0x0501 /D _WIN32_WINNT=0x0501 /FR /YX /FD /GZ /c
|
||||||
# ADD CPP /nologo /MDd /W3 /Gm /GR /GX /ZI /Od /D "_DEBUG" /D "_NO_COMUTIL" /D "WIN32" /D _WIN32_IE=0x0501 /D _WIN32_WINNT=0x0501 /FR /YX /FD /GZ /c
|
# ADD CPP /nologo /MDd /W3 /Gm /GR /GX /ZI /Od /D "_DEBUG" /D "_NO_COMUTIL" /D "WIN32" /D _WIN32_IE=0x0600 /D _WIN32_WINNT=0x0501 /FR /YX /FD /GZ /c
|
||||||
# ADD BASE RSC /l 0x407 /d "_DEBUG"
|
# ADD BASE RSC /l 0x407 /d "_DEBUG"
|
||||||
# ADD RSC /l 0x407 /d "_DEBUG"
|
# ADD RSC /l 0x407 /d "_DEBUG"
|
||||||
BSC32=bscmake.exe
|
BSC32=bscmake.exe
|
||||||
|
@ -205,7 +205,7 @@ LINK32=link.exe
|
||||||
# PROP Ignore_Export_Lib 0
|
# PROP Ignore_Export_Lib 0
|
||||||
# PROP Target_Dir ""
|
# PROP Target_Dir ""
|
||||||
# ADD BASE CPP /nologo /MDd /W3 /Gm /GR /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_ROS_" /D _WIN32_IE=0x0501 /D _WIN32_WINNT=0x0501 /FR /YX /FD /GZ /c
|
# ADD BASE CPP /nologo /MDd /W3 /Gm /GR /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_ROS_" /D _WIN32_IE=0x0501 /D _WIN32_WINNT=0x0501 /FR /YX /FD /GZ /c
|
||||||
# ADD CPP /nologo /MDd /W3 /Gm /GR /GX /ZI /Od /D "_DEBUG" /D "UNICODE" /D "WIN32" /D _WIN32_IE=0x0501 /D _WIN32_WINNT=0x0501 /FR /YX /FD /GZ /c
|
# ADD CPP /nologo /MDd /W3 /Gm /GR /GX /ZI /Od /D "_DEBUG" /D "UNICODE" /D "WIN32" /D _WIN32_IE=0x0600 /D _WIN32_WINNT=0x0501 /FR /YX /FD /GZ /c
|
||||||
# ADD BASE RSC /l 0x407 /d "_DEBUG"
|
# ADD BASE RSC /l 0x407 /d "_DEBUG"
|
||||||
# ADD RSC /l 0x407 /d "_DEBUG"
|
# ADD RSC /l 0x407 /d "_DEBUG"
|
||||||
BSC32=bscmake.exe
|
BSC32=bscmake.exe
|
||||||
|
@ -232,7 +232,7 @@ LINK32=link.exe
|
||||||
# PROP Ignore_Export_Lib 0
|
# PROP Ignore_Export_Lib 0
|
||||||
# PROP Target_Dir ""
|
# PROP Target_Dir ""
|
||||||
# ADD BASE CPP /nologo /MDd /W3 /Gm /GR /GX /ZI /Od /D "_DEBUG" /D "UNICODE" /D "WIN32" /D "_ROS_" /D _WIN32_IE=0x0501 /D _WIN32_WINNT=0x0501 /FR /YX /FD /GZ /c
|
# ADD BASE CPP /nologo /MDd /W3 /Gm /GR /GX /ZI /Od /D "_DEBUG" /D "UNICODE" /D "WIN32" /D "_ROS_" /D _WIN32_IE=0x0501 /D _WIN32_WINNT=0x0501 /FR /YX /FD /GZ /c
|
||||||
# ADD CPP /nologo /MT /W3 /GR /GX /O2 /D "NDEBUG" /D "UNICODE" /D "WIN32" /D _WIN32_IE=0x0501 /D _WIN32_WINNT=0x0501 /FD /c
|
# ADD CPP /nologo /MT /W3 /GR /GX /O2 /D "NDEBUG" /D "UNICODE" /D "WIN32" /D _WIN32_IE=0x0600 /D _WIN32_WINNT=0x0501 /FD /c
|
||||||
# ADD BASE RSC /l 0x407 /d "_DEBUG"
|
# ADD BASE RSC /l 0x407 /d "_DEBUG"
|
||||||
# ADD RSC /l 0x407 /d "_DEBUG"
|
# ADD RSC /l 0x407 /d "_DEBUG"
|
||||||
BSC32=bscmake.exe
|
BSC32=bscmake.exe
|
||||||
|
@ -259,7 +259,7 @@ LINK32=link.exe
|
||||||
# PROP Ignore_Export_Lib 0
|
# PROP Ignore_Export_Lib 0
|
||||||
# PROP Target_Dir ""
|
# PROP Target_Dir ""
|
||||||
# ADD BASE CPP /nologo /MT /W3 /GR /GX /O2 /D "NDEBUG" /D "UNICODE" /D "WIN32" /D "_ROS_" /D _WIN32_IE=0x0501 /D _WIN32_WINNT=0x0501 /FD /c
|
# ADD BASE CPP /nologo /MT /W3 /GR /GX /O2 /D "NDEBUG" /D "UNICODE" /D "WIN32" /D "_ROS_" /D _WIN32_IE=0x0501 /D _WIN32_WINNT=0x0501 /FD /c
|
||||||
# ADD CPP /nologo /MD /W3 /GR /GX /O2 /D "NDEBUG" /D "UNICODE" /D "WIN32" /D _WIN32_IE=0x0501 /D _WIN32_WINNT=0x0501 /FD /c
|
# ADD CPP /nologo /MD /W3 /GR /GX /O2 /D "NDEBUG" /D "UNICODE" /D "WIN32" /D _WIN32_IE=0x0600 /D _WIN32_WINNT=0x0501 /FD /c
|
||||||
# ADD BASE RSC /l 0x407 /d "_DEBUG"
|
# ADD BASE RSC /l 0x407 /d "_DEBUG"
|
||||||
# ADD RSC /l 0x407 /d "_DEBUG"
|
# ADD RSC /l 0x407 /d "_DEBUG"
|
||||||
BSC32=bscmake.exe
|
BSC32=bscmake.exe
|
||||||
|
|
|
@ -57,6 +57,7 @@ NotifyInfo::NotifyInfo()
|
||||||
_hIcon = 0;
|
_hIcon = 0;
|
||||||
_dwState = 0;
|
_dwState = 0;
|
||||||
_uCallbackMessage = 0;
|
_uCallbackMessage = 0;
|
||||||
|
_version = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -77,22 +78,37 @@ NotifyInfo& NotifyInfo::operator=(NOTIFYICONDATA* pnid)
|
||||||
_hIcon = (HICON) CopyImage(pnid->hIcon, IMAGE_ICON, 16, 16, 0);
|
_hIcon = (HICON) CopyImage(pnid->hIcon, IMAGE_ICON, 16, 16, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef NIF_STATE // currently (as of 21.08.2003) missing in MinGW headers
|
#ifdef NIF_STATE // as of 21.08.2003 missing in MinGW headers
|
||||||
if (pnid->uFlags & NIF_STATE)
|
if (pnid->uFlags & NIF_STATE)
|
||||||
_dwState = (_dwState&~pnid->dwStateMask) | (pnid->dwState&pnid->dwStateMask);
|
_dwState = (_dwState&~pnid->dwStateMask) | (pnid->dwState&pnid->dwStateMask);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
///@todo store and display tool tip texts
|
// store tool tip text
|
||||||
|
if (pnid->uFlags & NIF_TIP)
|
||||||
|
// UNICODE version of NOTIFYICONDATA structure
|
||||||
|
if (pnid->cbSize == sizeof(NOTIFYICONDATAW) || // _WIN32_IE = 0x600
|
||||||
|
pnid->cbSize == sizeof(NOTIFYICONDATAW)-sizeof(GUID) || // _WIN32_IE = 0x500
|
||||||
|
pnid->cbSize == sizeof(NOTIFYICONDATAW)-sizeof(GUID)-(128-64)*sizeof(WCHAR))// _WIN32_IE < 0x500
|
||||||
|
_tipText = (LPCWSTR)pnid->szTip;
|
||||||
|
// ANSI version of NOTIFYICONDATA structure
|
||||||
|
else if (pnid->cbSize == sizeof(NOTIFYICONDATAA) || // _WIN32_IE = 0x600
|
||||||
|
pnid->cbSize == sizeof(NOTIFYICONDATAA)-sizeof(GUID) || // _WIN32_IE = 0x500
|
||||||
|
pnid->cbSize == sizeof(NOTIFYICONDATAA)-sizeof(GUID)-(128-64)*sizeof(CHAR)) // _WIN32_IE < 0x400
|
||||||
|
_tipText = (LPCSTR)pnid->szTip;
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
NotifyArea::NotifyArea(HWND hwnd)
|
NotifyArea::NotifyArea(HWND hwnd)
|
||||||
: super(hwnd)
|
: super(hwnd),
|
||||||
|
_tooltip(hwnd)
|
||||||
{
|
{
|
||||||
_next_idx = 0;
|
_next_idx = 0;
|
||||||
_clock_width = 0;
|
_clock_width = 0;
|
||||||
|
_show_hidden = false;
|
||||||
|
|
||||||
|
_tooltip.add(_hwnd, _hwnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
LRESULT NotifyArea::Init(LPCREATESTRUCT pcs)
|
LRESULT NotifyArea::Init(LPCREATESTRUCT pcs)
|
||||||
|
@ -212,14 +228,15 @@ LRESULT NotifyArea::WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam)
|
||||||
PostMessage(entry._hWnd, entry._uCallbackMessage, entry._uID, nmsg);
|
PostMessage(entry._hWnd, entry._uCallbackMessage, entry._uID, nmsg);
|
||||||
else {
|
else {
|
||||||
// allow SetForegroundWindow() in client process
|
// allow SetForegroundWindow() in client process
|
||||||
DWORD processId;
|
DWORD pid;
|
||||||
GetWindowThreadProcessId(entry._hWnd, &processId);
|
|
||||||
|
|
||||||
// bind dynamically to AllowSetForegroundWindow() to be compatible to WIN98
|
if (GetWindowThreadProcessId(entry._hWnd, &pid)) {
|
||||||
static DynamicFct<BOOL(WINAPI*)(DWORD dwProcessId)> AllowSetForegroundWindow(TEXT("USER32"), "AllowSetForegroundWindow");
|
// bind dynamically to AllowSetForegroundWindow() to be compatible to WIN98
|
||||||
|
static DynamicFct<BOOL(WINAPI*)(DWORD)> AllowSetForegroundWindow(TEXT("USER32"), "AllowSetForegroundWindow");
|
||||||
|
|
||||||
if (AllowSetForegroundWindow)
|
if (AllowSetForegroundWindow)
|
||||||
(*AllowSetForegroundWindow)(processId);
|
(*AllowSetForegroundWindow)(pid);
|
||||||
|
}
|
||||||
|
|
||||||
SendMessage(entry._hWnd, entry._uCallbackMessage, entry._uID, nmsg);
|
SendMessage(entry._hWnd, entry._uCallbackMessage, entry._uID, nmsg);
|
||||||
}
|
}
|
||||||
|
@ -235,6 +252,27 @@ LRESULT NotifyArea::WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int NotifyArea::Notify(int id, NMHDR* pnmh)
|
||||||
|
{
|
||||||
|
if (pnmh->code == TTN_GETDISPINFO) {
|
||||||
|
LPNMTTDISPINFO pdi = (LPNMTTDISPINFO)pnmh;
|
||||||
|
|
||||||
|
Point pt(GetMessagePos());
|
||||||
|
ScreenToClient(_hwnd, &pt);
|
||||||
|
|
||||||
|
NotifyIconSet::iterator found = IconHitTest(pt);
|
||||||
|
|
||||||
|
if (found != _sorted_icons.end()) {
|
||||||
|
NotifyInfo& entry = const_cast<NotifyInfo&>(*found); // Why does GCC 3.3 need this additional const_cast ?!
|
||||||
|
|
||||||
|
if (!entry._tipText.empty())
|
||||||
|
_tcscpy(pdi->szText, entry._tipText);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void NotifyArea::CancelModes()
|
void NotifyArea::CancelModes()
|
||||||
{
|
{
|
||||||
PostMessage(HWND_BROADCAST, WM_CANCELMODE, 0, 0);
|
PostMessage(HWND_BROADCAST, WM_CANCELMODE, 0, 0);
|
||||||
|
@ -248,13 +286,18 @@ LRESULT NotifyArea::ProcessTrayNotification(int notify_code, NOTIFYICONDATA* pni
|
||||||
switch(notify_code) {
|
switch(notify_code) {
|
||||||
case NIM_ADD:
|
case NIM_ADD:
|
||||||
case NIM_MODIFY:
|
case NIM_MODIFY:
|
||||||
if ((int)pnid->uID >= 0) { ///@todo fix for windows task manager
|
if ((int)pnid->uID >= 0) { ///@todo This is a fix for Windows Task Manager.
|
||||||
NotifyInfo& entry = _icon_map[pnid] = pnid;
|
NotifyInfo& entry = _icon_map[pnid] = pnid;
|
||||||
|
|
||||||
// a new entry?
|
// a new entry?
|
||||||
if (entry._idx == -1)
|
if (entry._idx == -1)
|
||||||
entry._idx = ++_next_idx;
|
entry._idx = ++_next_idx;
|
||||||
|
|
||||||
|
#if NOTIFYICON_VERSION>=3 // as of 21.08.2003 missing in MinGW headers
|
||||||
|
if (DetermineHideState(entry))
|
||||||
|
entry._dwState |= NIS_HIDDEN;
|
||||||
|
#endif
|
||||||
|
|
||||||
Refresh(); ///@todo call only if really changes occurred
|
Refresh(); ///@todo call only if really changes occurred
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -273,12 +316,19 @@ LRESULT NotifyArea::ProcessTrayNotification(int notify_code, NOTIFYICONDATA* pni
|
||||||
}
|
}
|
||||||
break;}
|
break;}
|
||||||
|
|
||||||
#if NOTIFYICON_VERSION>=3 // currently (as of 21.08.2003) missing in MinGW headers
|
#if NOTIFYICON_VERSION>=3 // as of 21.08.2003 missing in MinGW headers
|
||||||
case NIM_SETFOCUS:
|
case NIM_SETFOCUS:
|
||||||
|
SetForegroundWindow(_hwnd);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
case NIM_SETVERSION:
|
case NIM_SETVERSION:
|
||||||
return FALSE; ///@todo
|
NotifyIconMap::iterator found = _icon_map.find(pnid);
|
||||||
|
|
||||||
|
if (found != _icon_map.end()) {
|
||||||
|
found->second._version = pnid->UNION_MEMBER(uVersion);
|
||||||
|
return TRUE;
|
||||||
|
} else
|
||||||
|
return FALSE;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -293,8 +343,8 @@ void NotifyArea::Refresh()
|
||||||
for(NotifyIconMap::const_iterator it=_icon_map.begin(); it!=_icon_map.end(); ++it) {
|
for(NotifyIconMap::const_iterator it=_icon_map.begin(); it!=_icon_map.end(); ++it) {
|
||||||
const NotifyInfo& entry = it->second;
|
const NotifyInfo& entry = it->second;
|
||||||
|
|
||||||
#ifdef NIF_STATE // currently (as of 21.08.2003) missing in MinGW headers
|
#ifdef NIF_STATE // as of 21.08.2003 missing in MinGW headers
|
||||||
if (!(entry._dwState & NIS_HIDDEN))
|
if (_show_hidden || !(entry._dwState & NIS_HIDDEN))
|
||||||
#endif
|
#endif
|
||||||
_sorted_icons.insert(entry);
|
_sorted_icons.insert(entry);
|
||||||
}
|
}
|
||||||
|
@ -367,6 +417,38 @@ NotifyIconSet::iterator NotifyArea::IconHitTest(const POINT& pos)
|
||||||
return it;
|
return it;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if NOTIFYICON_VERSION>=3 // as of 21.08.2003 missing in MinGW headers
|
||||||
|
bool NotifyArea::DetermineHideState(NotifyInfo& entry)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
DWORD pid;
|
||||||
|
|
||||||
|
if (GetWindowThreadProcessId(entry._hWnd, &pid)) {
|
||||||
|
|
||||||
|
//@@ look for executable path
|
||||||
|
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
TCHAR title[MAX_PATH];
|
||||||
|
|
||||||
|
if (GetWindowText(entry._hWnd, title, MAX_PATH)) {
|
||||||
|
if (_tcsstr(title, TEXT("Task Manager")))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (_tcsstr(title, TEXT("AntiVir")))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (_tcsstr(title, TEXT("Apache")))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (_tcsstr(title, TEXT("FRITZ!web")))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
ClockWindow::ClockWindow(HWND hwnd)
|
ClockWindow::ClockWindow(HWND hwnd)
|
||||||
: super(hwnd),
|
: super(hwnd),
|
||||||
|
|
|
@ -67,6 +67,8 @@ struct NotifyInfo : public NotifyIconIndex
|
||||||
HICON _hIcon;
|
HICON _hIcon;
|
||||||
DWORD _dwState;
|
DWORD _dwState;
|
||||||
UINT _uCallbackMessage;
|
UINT _uCallbackMessage;
|
||||||
|
UINT _version;
|
||||||
|
String _tipText;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef map<NotifyIconIndex, NotifyInfo> NotifyIconMap;
|
typedef map<NotifyIconIndex, NotifyInfo> NotifyIconMap;
|
||||||
|
@ -86,15 +88,20 @@ struct NotifyArea : public Window
|
||||||
LRESULT ProcessTrayNotification(int notify_code, NOTIFYICONDATA* pnid);
|
LRESULT ProcessTrayNotification(int notify_code, NOTIFYICONDATA* pnid);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
WindowHandle _hwndClock;
|
||||||
|
int _clock_width;
|
||||||
|
|
||||||
NotifyIconMap _icon_map;
|
NotifyIconMap _icon_map;
|
||||||
NotifyIconSet _sorted_icons;
|
NotifyIconSet _sorted_icons;
|
||||||
int _next_idx;
|
int _next_idx;
|
||||||
|
|
||||||
WindowHandle _hwndClock;
|
ToolTip _tooltip;
|
||||||
int _clock_width;
|
|
||||||
|
bool _show_hidden;
|
||||||
|
|
||||||
LRESULT Init(LPCREATESTRUCT pcs);
|
LRESULT Init(LPCREATESTRUCT pcs);
|
||||||
LRESULT WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam);
|
LRESULT WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam);
|
||||||
|
int Notify(int id, NMHDR* pnmh);
|
||||||
|
|
||||||
void Refresh();
|
void Refresh();
|
||||||
void Paint();
|
void Paint();
|
||||||
|
@ -102,6 +109,7 @@ protected:
|
||||||
void CancelModes();
|
void CancelModes();
|
||||||
|
|
||||||
NotifyIconSet::iterator IconHitTest(const POINT& pos);
|
NotifyIconSet::iterator IconHitTest(const POINT& pos);
|
||||||
|
bool DetermineHideState(NotifyInfo& entry);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue