diff options
Diffstat (limited to 'ui/tray_icon.h')
-rw-r--r-- | ui/tray_icon.h | 38 |
1 files changed, 21 insertions, 17 deletions
diff --git a/ui/tray_icon.h b/ui/tray_icon.h index 866d79d5..24c97eb0 100644 --- a/ui/tray_icon.h +++ b/ui/tray_icon.h @@ -4,38 +4,42 @@ // * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * // ************************************************************************** -#ifndef TRAYICON_H_INCLUDED -#define TRAYICON_H_INCLUDED +#ifndef TRAYICON_H_84217830427534285 +#define TRAYICON_H_84217830427534285 -#include <wx/event.h> +#include <functional> #include <wx/image.h> -//show tray icon with progress during lifetime of this instance -//emits the following wxCommandEvent in case user double-clicks on tray icon or selects corresponding context menu item: -extern const wxEventType FFS_REQUEST_RESUME_TRAY_EVENT; +/* +show tray icon with progress during lifetime of this instance -class FfsTrayIcon : public wxEvtHandler +ATTENTION: wxWidgets never assumes that an object indirectly destroys itself while processing an event! + this includes wxEvtHandler-derived objects!!! + it seems ProcessEvent() works (on Windows), but AddPendingEvent() will crash since it uses "this" after the event processing! + +=> don't derive from wxEvtHandler or any other wxWidgets object here!!!!!! +=> use simple std::function as callback instead => instance may now be safely deleted in callback! +*/ + +class FfsTrayIcon { public: - FfsTrayIcon(); + FfsTrayIcon(const std::function<void()>& onRequestResume); //callback only held during lifetime of this instance ~FfsTrayIcon(); void setToolTip(const wxString& toolTip); void setProgress(double fraction); //number between [0, 1], for small progress indicator private: - FfsTrayIcon(const FfsTrayIcon&); - FfsTrayIcon& operator=(const FfsTrayIcon&); - - void OnContextMenuSelection(wxCommandEvent& event); - void OnDoubleClick(wxCommandEvent& event); + FfsTrayIcon(const FfsTrayIcon&); //=delete + FfsTrayIcon& operator=(const FfsTrayIcon&); //=delete class TaskBarImpl; - TaskBarImpl* trayIcon; //actual tray icon (don't use inheritance to enable delayed deletion) + TaskBarImpl* trayIcon; - wxString toolTipLast; - double fractionLast; + wxString activeToolTip; + double activeFraction; wxImage logo; }; -#endif // TRAYICON_H_INCLUDED +#endif //TRAYICON_H_84217830427534285 |