summaryrefslogtreecommitdiff
diff options
-rw-r--r--launcher/TrashLauncherIcon.cpp32
-rw-r--r--launcher/TrashLauncherIcon.h14
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_;
};
}