]> git.saurik.com Git - wxWidgets.git/commitdiff
added wxTaskBarIcon::IsAvailable
authorVáclav Slavík <vslavik@fastmail.fm>
Tue, 30 Sep 2008 20:54:02 +0000 (20:54 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Tue, 30 Sep 2008 20:54:02 +0000 (20:54 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@55991 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/gtk/taskbarpriv.h
include/wx/taskbar.h
interface/wx/taskbar.h
samples/taskbar/tbtest.cpp
src/unix/taskbarx11.cpp

index f4bb0a27f8f020d73a3d16065ebec0420171bd6d..242d3c6a8933209640efdc26dd5676bb80ed710e 100644 (file)
@@ -20,7 +20,7 @@ public:
     wxTaskBarIconAreaBase();
 
     // Returns true if SYSTRAY protocol is supported by the desktop
-    bool IsProtocolSupported();
+    static bool IsProtocolSupported();
 
     wxEvtHandler *m_invokingWindow;
 
index f3dedd4b6ea849b50607ed46a90315a07b09bac0..a7f523cced173195c58e8dfb8917d2820e729b61 100644 (file)
@@ -29,6 +29,12 @@ class WXDLLIMPEXP_ADV wxTaskBarIconBase : public wxEvtHandler
 public:
     wxTaskBarIconBase() { }
 
+#if defined(__WXGTK__) || defined(__WXX11__) || defined(__WXMOTIF__)
+    static bool IsAvailable();
+#else
+    static bool IsAvailable() { return true; };
+#endif
+
     // Operations:
     virtual bool SetIcon(const wxIcon& icon,
                          const wxString& tooltip = wxEmptyString) = 0;
index 59f1e91cc0b244419d5dc3f1a813abe5643fa251..b4aeaef4606a8cb1a14ca461ccf1281d1a2701fb 100644 (file)
@@ -72,5 +72,28 @@ public:
         Sets the icon, and optional tooltip text.
     */
     bool SetIcon(const wxIcon& icon, const wxString& tooltip);
+
+    /**
+        Returns true if system tray is available in the desktop environment the
+        app runs under.
+
+        On Windows and Mac OS X, the tray is always available and this function
+        simply returns true.
+
+        On Unix, X11 environment may or may not provide the tray, depending on
+        user's desktop environment. Most modern desktops support the tray via
+        the System Tray Protocol by freedesktop.org
+        (http://freedesktop.org/wiki/Specifications/systemtray-spec).
+
+        @note Tray availability may change during application's lifetime
+              under X11 and so applications shouldn't cache the result.
+
+        @note wxTaskBarIcon supports older GNOME 1.2 and KDE 1/2 methods of
+              adding icons to tray, but they are unreliable and this method
+              doesn't detect them.
+
+        @since 2.9.0
+    */
+    static bool IsAvailable();
 };
 
index 397a438fc27c6366ba4f1ad7433048b01bd21028..9723e48ae0e094cf34d5f3171d5cfd08c8b2525e 100644 (file)
@@ -60,6 +60,16 @@ bool MyApp::OnInit()
     if ( !wxApp::OnInit() )
         return false;
 
+    if ( !wxTaskBarIcon::IsAvailable() )
+    {
+        wxMessageBox
+        (
+            "There appears to be no system tray support in your current environment. This sample may not behave as expected.",
+            "Warning",
+            wxOK | wxICON_EXCLAMATION
+        );
+    }
+
     // Create the main window
     gs_dialog = new MyDialog(wxT("wxTaskBarIcon Test Dialog"));
 
index ced3b5e059716e7060ce6ae4f6e17d0d384f2a75..7b4ac6890d22f3eab120552a549372da6b94cf1f 100644 (file)
@@ -66,7 +66,7 @@
                       wxDEFAULT_FRAME_STYLE | wxFRAME_NO_TASKBAR |
                       wxSIMPLE_BORDER | wxFRAME_SHAPED) {}
 
-        bool IsProtocolSupported() const { return false; }
+        static bool IsProtocolSupported() const { return false; }
     };
 #endif
 
@@ -250,6 +250,15 @@ void wxTaskBarIconArea::OnMenuEvent(wxCommandEvent& event)
     m_icon->ProcessEvent(event);
 }
 
+// ----------------------------------------------------------------------------
+// wxTaskBarIconBase class:
+// ----------------------------------------------------------------------------
+
+bool wxTaskBarIconBase::IsAvailable()
+{
+    return wxTaskBarIconArea::IsProtocolSupported();
+}
+
 // ----------------------------------------------------------------------------
 // wxTaskBarIcon class:
 // ----------------------------------------------------------------------------