[gnome-flashback/wip/muktupavels/lp1875317] desktop: monitor files for changes
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-flashback/wip/muktupavels/lp1875317] desktop: monitor files for changes
- Date: Tue, 28 Apr 2020 11:09:38 +0000 (UTC)
commit f60e48ff4d52c6f027d02b088eb7a70e213ad899
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Tue Apr 28 12:18:07 2020 +0300
desktop: monitor files for changes
https://launchpad.net/bugs/1875317
gnome-flashback/libdesktop/gf-icon.c | 85 +++++++++++++++++++++++++++++++++++-
1 file changed, 84 insertions(+), 1 deletion(-)
---
diff --git a/gnome-flashback/libdesktop/gf-icon.c b/gnome-flashback/libdesktop/gf-icon.c
index a89ec9f..638c341 100644
--- a/gnome-flashback/libdesktop/gf-icon.c
+++ b/gnome-flashback/libdesktop/gf-icon.c
@@ -41,6 +41,8 @@ typedef struct
GFile *file;
GFileInfo *info;
+ GFileMonitor *monitor;
+
GfIconSize icon_size;
guint extra_text_width;
@@ -1031,11 +1033,87 @@ set_icon_size (GfIcon *self,
update_icon (self);
}
+static void
+file_changed_cb (GFileMonitor *monitor,
+ GFile *file,
+ GFile *other_file,
+ GFileMonitorEvent event_type,
+ GfIcon *self)
+{
+ switch (event_type)
+ {
+ case G_FILE_MONITOR_EVENT_CHANGED:
+ break;
+
+ case G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT:
+ icon_refresh (self);
+ break;
+
+ case G_FILE_MONITOR_EVENT_DELETED:
+ break;
+
+ case G_FILE_MONITOR_EVENT_CREATED:
+ break;
+
+ case G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED:
+ gf_icon_update (self);
+ break;
+
+ case G_FILE_MONITOR_EVENT_PRE_UNMOUNT:
+ break;
+
+ case G_FILE_MONITOR_EVENT_UNMOUNTED:
+ break;
+
+ case G_FILE_MONITOR_EVENT_MOVED:
+ break;
+
+ case G_FILE_MONITOR_EVENT_RENAMED:
+ break;
+
+ case G_FILE_MONITOR_EVENT_MOVED_IN:
+ break;
+
+ case G_FILE_MONITOR_EVENT_MOVED_OUT:
+ break;
+
+ default:
+ break;
+ }
+}
+
+static void
+create_file_monitor (GfIcon *self)
+{
+ GfIconPrivate *priv;
+ GError *error;
+
+ priv = gf_icon_get_instance_private (self);
+
+ error = NULL;
+ priv->monitor = g_file_monitor_file (priv->file,
+ G_FILE_MONITOR_NONE,
+ NULL,
+ &error);
+
+ if (error != NULL)
+ {
+ g_warning ("%s", error->message);
+ g_error_free (error);
+ return;
+ }
+
+ g_signal_connect (priv->monitor, "changed",
+ G_CALLBACK (file_changed_cb),
+ self);
+}
+
static void
gf_icon_constructed (GObject *object)
{
G_OBJECT_CLASS (gf_icon_parent_class)->constructed (object);
- icon_refresh (GF_ICON (object));
+ create_file_monitor (GF_ICON (object));
+ gf_icon_update (GF_ICON (object));
}
static void
@@ -1058,6 +1136,8 @@ gf_icon_dispose (GObject *object)
g_clear_object (&priv->file);
g_clear_object (&priv->info);
+ g_clear_object (&priv->monitor);
+
g_clear_object (&priv->app_info);
g_clear_object (&priv->thumbnail);
@@ -1441,6 +1521,9 @@ gf_icon_set_file (GfIcon *self,
g_clear_object (&priv->file);
priv->file = g_object_ref (file);
+ g_clear_object (&priv->monitor);
+ create_file_monitor (self);
+
gf_icon_update (self);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]