// Author: Julian Smart
// Modified by: Vaclav Slavik
// Created: 24/3/98
-// RCS-ID: $Id$
// Copyright: (c)
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////
#include "wx/frame.h"
#include "wx/utils.h"
#include "wx/menu.h"
+ #include "wx/app.h"
#endif
#include "wx/msw/wrapshl.h"
#include <string.h>
#include "wx/taskbar.h"
+#include "wx/msw/private.h"
#include "wx/dynlib.h"
#ifndef NIN_BALLOONTIMEOUT
#define NIF_INFO 0x00000010
#endif
+#ifndef NOTIFYICONDATA_V1_SIZE
+ #ifdef UNICODE
+ #define NOTIFYICONDATA_V1_SIZE 0x0098
+ #else
+ #define NOTIFYICONDATA_V1_SIZE 0x0058
+ #endif
+#endif
+
+#ifndef NOTIFYICONDATA_V2_SIZE
+ #ifdef UNICODE
+ #define NOTIFYICONDATA_V2_SIZE 0x03A8
+ #else
+ #define NOTIFYICONDATA_V2_SIZE 0x01E8
+ #endif
+#endif
// initialized on demand
static UINT gs_msgTaskbar = 0;
NotifyIconData(WXHWND hwnd)
{
memset(this, 0, sizeof(NOTIFYICONDATA));
- cbSize = sizeof(NOTIFYICONDATA);
+
+ // Do _not_ use sizeof(NOTIFYICONDATA) here, it may be too big if we're
+ // compiled with newer headers but running on an older system and while
+ // we could do complicated tests for the exact system version it's
+ // easier to just use an old size which should be supported everywhere
+ // from Windows 2000 up and which is all we need as we don't use any
+ // newer features so far. But if we're running under a really ancient
+ // system (Win9x), fall back to even smaller size -- then the balloon
+ // related features won't be available but the rest will still work.
+ cbSize = wxTheApp->GetShell32Version() >= 500
+ ? NOTIFYICONDATA_V2_SIZE
+ : NOTIFYICONDATA_V1_SIZE;
+
hWnd = (HWND) hwnd;
uCallbackMessage = gs_msgTaskbar;
uFlags = NIF_MESSAGE;
// wxTaskBarIcon
// ----------------------------------------------------------------------------
-wxTaskBarIcon::wxTaskBarIcon()
+wxTaskBarIcon::wxTaskBarIcon(wxTaskBarIconType WXUNUSED(iconType))
{
m_win = NULL;
m_iconAdded = false;
NotifyIconData notifyData(GetHwndOf(m_win));
- if (icon.Ok())
+ if (icon.IsOk())
{
notifyData.uFlags |= NIF_ICON;
notifyData.hIcon = GetHiconOf(icon);
notifyData.uFlags |= NIF_TIP;
if ( !tooltip.empty() )
{
- wxStrlcpy(notifyData.szTip, tooltip.wx_str(), WXSIZEOF(notifyData.szTip));
+ wxStrlcpy(notifyData.szTip, tooltip.t_str(), WXSIZEOF(notifyData.szTip));
}
bool ok = wxShellNotifyIcon(m_iconAdded ? NIM_MODIFY
int flags)
{
wxCHECK_MSG( m_iconAdded, false,
- _T("can't be used before the icon is created") );
+ wxT("can't be used before the icon is created") );
const HWND hwnd = GetHwndOf(m_win);
// the balloon disappearance
NotifyIconData notifyData(hwnd);
notifyData.uFlags = 0;
- notifyData.uVersion = 3 /* NOTIFYICON_VERSION for Windows XP */;
+ notifyData.uVersion = 3 /* NOTIFYICON_VERSION for Windows 2000/XP */;
if ( !wxShellNotifyIcon(NIM_SETVERSION, ¬ifyData) )
{
notifyData = NotifyIconData(hwnd);
notifyData.uFlags |= NIF_INFO;
notifyData.uTimeout = msec;
- wxStrlcpy(notifyData.szInfo, text.wx_str(), WXSIZEOF(notifyData.szInfo));
- wxStrlcpy(notifyData.szInfoTitle, title.wx_str(),
+ wxStrlcpy(notifyData.szInfo, text.t_str(), WXSIZEOF(notifyData.szInfo));
+ wxStrlcpy(notifyData.szInfoTitle, title.t_str(),
WXSIZEOF(notifyData.szInfoTitle));
if ( flags & wxICON_INFORMATION )
#if wxUSE_MENUS
bool wxTaskBarIcon::PopupMenu(wxMenu *menu)
{
- wxASSERT_MSG( m_win != NULL, _T("taskbar icon not initialized") );
+ wxASSERT_MSG( m_win != NULL, wxT("taskbar icon not initialized") );
static bool s_inPopup = false;