diff options
| -rw-r--r-- | launcher/TrashLauncherIcon.cpp | 32 | ||||
| -rw-r--r-- | launcher/TrashLauncherIcon.h | 14 |
2 files changed, 15 insertions, 31 deletions
diff --git a/launcher/TrashLauncherIcon.cpp b/launcher/TrashLauncherIcon.cpp index 057af3baa..22df447c2 100644 --- a/launcher/TrashLauncherIcon.cpp +++ b/launcher/TrashLauncherIcon.cpp @@ -39,8 +39,8 @@ namespace TrashLauncherIcon::TrashLauncherIcon() : SimpleLauncherIcon() - , on_trash_changed_handler_id_(0) , proxy_("org.gnome.Nautilus", "/org/gnome/Nautilus", "org.gnome.Nautilus.FileOperations") + , cancellable_(g_cancellable_new()) { tooltip_text = _("Trash"); icon_name = "user-trash"; @@ -52,10 +52,7 @@ TrashLauncherIcon::TrashLauncherIcon() glib::Object<GFile> location(g_file_new_for_uri("trash:///")); glib::Error err; - trash_monitor_ = g_file_monitor_directory(location, - G_FILE_MONITOR_NONE, - NULL, - &err); + trash_monitor_ = g_file_monitor_directory(location, G_FILE_MONITOR_NONE, nullptr, &err); if (err) { @@ -63,10 +60,10 @@ TrashLauncherIcon::TrashLauncherIcon() } else { - on_trash_changed_handler_id_ = g_signal_connect(trash_monitor_, - "changed", - G_CALLBACK(&TrashLauncherIcon::OnTrashChanged), - this); + trash_changed_signal_.Connect(trash_monitor_, "changed", + [this] (GFileMonitor*, GFile*, GFile*, GFileMonitorEvent) { + UpdateTrashIcon(); + }); } UpdateTrashIcon(); @@ -74,9 +71,7 @@ TrashLauncherIcon::TrashLauncherIcon() TrashLauncherIcon::~TrashLauncherIcon() { - if (on_trash_changed_handler_id_ != 0) - g_signal_handler_disconnect((gpointer) trash_monitor_, - on_trash_changed_handler_id_); + g_cancellable_cancel(cancellable_); } std::list<DbusmenuMenuitem*> TrashLauncherIcon::GetMenus() @@ -121,10 +116,9 @@ void TrashLauncherIcon::UpdateTrashIcon() G_FILE_ATTRIBUTE_STANDARD_ICON, G_FILE_QUERY_INFO_NONE, 0, - NULL, + cancellable_, &TrashLauncherIcon::UpdateTrashIconCb, this); - } void TrashLauncherIcon::UpdateTrashIconCb(GObject* source, @@ -147,16 +141,6 @@ void TrashLauncherIcon::UpdateTrashIconCb(GObject* source, } } -void TrashLauncherIcon::OnTrashChanged(GFileMonitor* monitor, - GFile* file, - GFile* other_file, - GFileMonitorEvent event_type, - gpointer data) -{ - TrashLauncherIcon* self = (TrashLauncherIcon*) data; - self->UpdateTrashIcon(); -} - nux::DndAction TrashLauncherIcon::OnQueryAcceptDrop(DndData const& dnd_data) { diff --git a/launcher/TrashLauncherIcon.h b/launcher/TrashLauncherIcon.h index cf7e9277d..204d36ba7 100644 --- a/launcher/TrashLauncherIcon.h +++ b/launcher/TrashLauncherIcon.h @@ -23,6 +23,7 @@ #include <gio/gio.h> #include <UnityCore/GLibDBusProxy.h> #include <UnityCore/GLibWrapper.h> +#include <UnityCore/GLibSignal.h> #include "DndData.h" #include "SimpleLauncherIcon.h" @@ -49,18 +50,17 @@ protected: std::string GetName() const; private: - gulong on_trash_changed_handler_id_; - glib::Object<GFileMonitor> trash_monitor_; - gboolean empty_; - glib::DBusProxy proxy_; - void ActivateLauncherIcon(ActionArg arg); std::list<DbusmenuMenuitem*> GetMenus(); static void UpdateTrashIconCb(GObject* source, GAsyncResult* res, gpointer data); - static void OnTrashChanged(GFileMonitor* monitor, GFile* file, GFile* other_file, - GFileMonitorEvent event_type, gpointer data); static void OnEmptyTrash(DbusmenuMenuitem* item, int time, TrashLauncherIcon* self); + + gboolean empty_; + glib::DBusProxy proxy_; + glib::Object<GCancellable> cancellable_; + glib::Object<GFileMonitor> trash_monitor_; + glib::Signal<void, GFileMonitor*, GFile*, GFile*, GFileMonitorEvent> trash_changed_signal_; }; } |
