#pragma hdrstop
#endif
-#if wxUSE_NOTIFICATION_MESSAGE && wxUSE_TASKBARICON
+// we can only use the native implementation if we have a working
+// wxTaskBarIcon::ShowBalloon() method
+#if wxUSE_NOTIFICATION_MESSAGE && \
+ wxUSE_TASKBARICON && wxUSE_TASKBARICON_BALLOONS
+
+#include "wx/notifmsg.h"
#ifndef WX_PRECOMP
+ #include "wx/toplevel.h"
+ #include "wx/app.h"
#include "wx/string.h"
#endif // WX_PRECOMP
-#include "wx/notifmsg.h"
#include "wx/generic/notifmsg.h"
#include "wx/taskbar.h"
virtual bool DoClose() = 0;
private:
- DECLARE_NO_COPY_CLASS(wxNotifMsgImpl)
+ wxDECLARE_NO_COPY_CLASS(wxNotifMsgImpl);
};
// implementation which is simply a bridge to wxGenericNotificationMessage
// can't close automatic notification [currently]
virtual bool DoClose() { return false; }
-
-private:
- // custom event handler connected to m_icon which will receive the icon
- // close event and delete it and itself when it happens
- wxEvtHandler * const m_iconEvtHandler;
};
// implementation for manually closed notifications
wxTaskBarIcon * const m_icon;
- DECLARE_NO_COPY_CLASS(wxNotificationIconEvtHandler)
+ wxDECLARE_NO_COPY_CLASS(wxNotificationIconEvtHandler);
};
// ============================================================================
m_icon->Connect
(
wxEVT_TASKBAR_BALLOON_CLICK,
- wxTaskBarIconEventHandler(wxNotificationIconEvtHandler::OnTimeout),
+ wxTaskBarIconEventHandler(wxNotificationIconEvtHandler::OnClick),
NULL,
this
);
if ( !icon.IsOk() )
{
// we really must have some icon
- icon = wxIcon(_T("wxICON_AAA"));
+ icon = wxIcon(wxT("wxICON_AAA"));
}
m_icon->SetIcon(icon);
bool
wxManualNotifMsgImpl::DoShow(const wxString& title,
const wxString& message,
- int timeout,
+ int WXUNUSED_UNLESS_DEBUG(timeout),
int flags)
{
wxASSERT_MSG( timeout == wxNotificationMessage::Timeout_Never,
- _T("shouldn't be used") );
+ wxT("shouldn't be used") );
// base class creates the icon for us initially but we could have destroyed
// it in DoClose(), recreate it if this was the case
// ----------------------------------------------------------------------------
wxAutoNotifMsgImpl::wxAutoNotifMsgImpl(wxWindow *win)
- : wxBalloonNotifMsgImpl(win),
- m_iconEvtHandler(new wxNotificationIconEvtHandler(m_icon))
+ : wxBalloonNotifMsgImpl(win)
{
+ if ( m_ownsIcon )
+ {
+ // This object will self-destruct and also delete the icon when the
+ // notification is hidden.
+ new wxNotificationIconEvtHandler(m_icon);
+ }
}
bool
int flags)
{
wxASSERT_MSG( timeout != wxNotificationMessage::Timeout_Never,
- _T("shouldn't be used") );
+ wxT("shouldn't be used") );
if ( timeout == wxNotificationMessage::Timeout_Auto )
{
// wxNotificationMessage
// ----------------------------------------------------------------------------
+/* static */
+bool wxNotificationMessage::ms_alwaysUseGeneric = false;
+
/* static */
wxTaskBarIcon *wxNotificationMessage::UseTaskBarIcon(wxTaskBarIcon *icon)
{
{
if ( !m_impl )
{
- if ( wxTheApp->GetShell32Version() >= 500 )
+ if ( !ms_alwaysUseGeneric && wxTheApp->GetShell32Version() >= 500 )
{
if ( timeout == Timeout_Never )
m_impl = new wxManualNotifMsgImpl(GetParent());