2.5.3
-----
+All (GUI):
+
+- added wxTaskBarIcon::CreatePopupMenu which is now recommended way
+ of showing popup menu; calling wxTaskBarIcon::PopupMenu directly
+ is discouraged
+
Unix:
- wxTaskBarIcon now supports freedesktop.org System Tray protocol
wxGTK:
- fixed wrong colour of tooltips under some themes
-
+- implemented wxColourDialog as native dialog
2.5.2
\wxheading{Event handling}
To process input from a taskbar icon, use the following event handler macros to direct input to member
-functions that take a wxTaskBarIconEvent argument.
+functions that take a wxTaskBarIconEvent argument. Note that not all ports are
+required to send these events and so it's better to override
+\helpref{CreatePopupMenu}{wxtaskbariconcreatepopupmenu} if all that
+the application does is that it shows a popup menu in reaction to mouse click.
\twocolwidtha{7cm}
\begin{twocollist}\itemsep=0pt
Destroys the wxTaskBarIcon object, removing the icon if not already removed.
+\membersection{wxTaskBarIcon::CreatePopupMenu}\label{wxtaskbariconcreatepopupmenu}
+
+\func{virtual wxMenu*}{CreatePopupMenu}{\void}
+
+This method is called by the library when the user requests popup menu
+(on Windows and Unix platforms, this is when the user right-clicks the icon).
+Override this function in order to provide popup menu associated with the icon.
+
+If CreatePopupIcon returns NULL (this happens by default),
+no menu is shown, otherwise the menu is
+displayed and then deleted by the library as soon as the user dismisses it.
+The events can be handled by a class derived from wxTaskBarIcon.
+
\membersection{wxTaskBarIcon::IsIconInstalled}\label{wxtaskbariconisiconinstalled}
\func{bool}{IsIconInstalled}{\void}
Pops up a menu at the current mouse position. The events can be handled by
a class derived from wxTaskBarIcon.
+\wxheading{Note}
+
+It is recommended to override
+\helpref{CreatePopupIcon}{wxtaskbariconcreatepopupmenu}
+callback instead of calling this method from event handler, because some
+ports (e.g. wxCocoa) may not implement PopupMenu and mouse click events at all.
+
\membersection{wxTaskBarIcon::RemoveIcon}\label{wxtaskbariconremoveicon}
\func{bool}{RemoveIcon}{\void}
#include "wx/event.h"
+class WXDLLIMPEXP_ADV wxTaskBarIconEvent;
+
// ----------------------------------------------------------------------------
// wxTaskBarIconBase: define wxTaskBarIcon interface
// ----------------------------------------------------------------------------
{
public:
wxTaskBarIconBase() { }
-
+
+ // Operations:
+ virtual bool SetIcon(const wxIcon& icon,
+ const wxString& tooltip = wxEmptyString) = 0;
+ virtual bool RemoveIcon() = 0;
+ virtual bool PopupMenu(wxMenu *menu) = 0;
+
+protected:
+ // creates menu to be displayed when user clicks on the icon
+ virtual wxMenu *CreatePopupMenu() { return NULL; }
+
private:
+ // default events handling, calls CreatePopupMenu:
+ void OnRightButtonDown(wxEvent& event);
+
+ DECLARE_EVENT_TABLE()
DECLARE_NO_COPY_CLASS(wxTaskBarIconBase)
};
EVT_MENU(PU_RESTORE, MyTaskBarIcon::OnMenuRestore)
EVT_MENU(PU_EXIT, MyTaskBarIcon::OnMenuExit)
EVT_MENU(PU_NEW_ICON,MyTaskBarIcon::OnMenuSetNewIcon)
- EVT_TASKBAR_RIGHT_DOWN (MyTaskBarIcon::OnRButtonDown)
EVT_TASKBAR_LEFT_DCLICK (MyTaskBarIcon::OnLButtonDClick)
END_EVENT_TABLE()
}
// Overridables
-void MyTaskBarIcon::OnRButtonDown(wxEvent&)
+wxMenu *MyTaskBarIcon::CreatePopupMenu()
{
- wxMenu menu;
+ wxMenu *menu = new wxMenu;
+
+ menu->Append(PU_RESTORE, _T("&Restore TBTest"));
+ menu->Append(PU_NEW_ICON,_T("&Set New Icon"));
+ menu->Append(PU_EXIT, _T("E&xit"));
- menu.Append(PU_RESTORE, _T("&Restore TBTest"));
- menu.Append(PU_NEW_ICON,_T("&Set New Icon"));
- menu.Append(PU_EXIT, _T("E&xit"));
-
- PopupMenu(&menu);
+ return menu;
}
void MyTaskBarIcon::OnLButtonDClick(wxEvent&)
public:
MyTaskBarIcon() {};
- void OnRButtonDown(wxEvent&);
void OnLButtonDClick(wxEvent&);
void OnMenuRestore(wxCommandEvent&);
void OnMenuExit(wxCommandEvent&);
void OnMenuSetNewIcon(wxCommandEvent&);
+ virtual wxMenu *CreatePopupMenu();
+
DECLARE_EVENT_TABLE()
};
DEFINE_EVENT_TYPE( wxEVT_TASKBAR_LEFT_DCLICK )
DEFINE_EVENT_TYPE( wxEVT_TASKBAR_RIGHT_DCLICK )
-#endif //def wxHAS_TASK_BAR_ICON
+
+BEGIN_EVENT_TABLE(wxTaskBarIconBase, wxEvtHandler)
+ EVT_TASKBAR_RIGHT_DOWN(wxTaskBarIconBase::OnRightButtonDown)
+END_EVENT_TABLE()
+
+void wxTaskBarIconBase::OnRightButtonDown(wxEvent& WXUNUSED(event))
+{
+ wxMenu *menu = CreatePopupMenu();
+ if (menu)
+ {
+ PopupMenu(menu);
+ delete menu;
+ }
+}
+
+#endif // defined(wxHAS_TASK_BAR_ICON)