]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/notifmsg.cpp
Enable variadic macros for VC9 and later.
[wxWidgets.git] / src / msw / notifmsg.cpp
index 136a1bc9c79221c72b5b47cc1e0f501da2f24e2a..0b43293b4f87e2bb554e8b548858726375139379 100644 (file)
     #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"
@@ -52,7 +58,7 @@ public:
     virtual bool DoClose() = 0;
 
 private:
-    DECLARE_NO_COPY_CLASS(wxNotifMsgImpl)
+    wxDECLARE_NO_COPY_CLASS(wxNotifMsgImpl);
 };
 
 // implementation which is simply a bridge to wxGenericNotificationMessage
@@ -128,11 +134,6 @@ public:
 
     // 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
@@ -178,7 +179,7 @@ private:
 
     wxTaskBarIcon * const m_icon;
 
-    DECLARE_NO_COPY_CLASS(wxNotificationIconEvtHandler)
+    wxDECLARE_NO_COPY_CLASS(wxNotificationIconEvtHandler);
 };
 
 // ============================================================================
@@ -203,7 +204,7 @@ wxNotificationIconEvtHandler::wxNotificationIconEvtHandler(wxTaskBarIcon *icon)
     m_icon->Connect
             (
               wxEVT_TASKBAR_BALLOON_CLICK,
-              wxTaskBarIconEventHandler(wxNotificationIconEvtHandler::OnTimeout),
+              wxTaskBarIconEventHandler(wxNotificationIconEvtHandler::OnClick),
               NULL,
               this
             );
@@ -274,7 +275,7 @@ void wxBalloonNotifMsgImpl::SetUpIcon(wxWindow *win)
         if ( !icon.IsOk() )
         {
             // we really must have some icon
-            icon = wxIcon(_T("wxICON_AAA"));
+            icon = wxIcon(wxT("wxICON_AAA"));
         }
 
         m_icon->SetIcon(icon);
@@ -311,11 +312,11 @@ wxManualNotifMsgImpl::~wxManualNotifMsgImpl()
 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
@@ -350,9 +351,14 @@ bool wxManualNotifMsgImpl::DoClose()
 // ----------------------------------------------------------------------------
 
 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
@@ -362,7 +368,7 @@ wxAutoNotifMsgImpl::DoShow(const wxString& title,
                            int flags)
 {
     wxASSERT_MSG( timeout != wxNotificationMessage::Timeout_Never,
-                    _T("shouldn't be used") );
+                    wxT("shouldn't be used") );
 
     if ( timeout == wxNotificationMessage::Timeout_Auto )
     {
@@ -377,6 +383,9 @@ wxAutoNotifMsgImpl::DoShow(const wxString& title,
 // wxNotificationMessage
 // ----------------------------------------------------------------------------
 
+/* static */
+bool wxNotificationMessage::ms_alwaysUseGeneric = false;
+
 /* static */
 wxTaskBarIcon *wxNotificationMessage::UseTaskBarIcon(wxTaskBarIcon *icon)
 {
@@ -387,7 +396,7 @@ bool wxNotificationMessage::Show(int timeout)
 {
     if ( !m_impl )
     {
-        if ( wxTheApp->GetShell32Version() >= 500 )
+        if ( !ms_alwaysUseGeneric && wxTheApp->GetShell32Version() >= 500 )
         {
             if ( timeout == Timeout_Never )
                 m_impl = new wxManualNotifMsgImpl(GetParent());