[gnome-flashback/wip/muktupavels/lp1875317: 6/8] 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: 6/8] desktop: monitor files for changes
- Date: Wed, 29 Apr 2020 15:24:34 +0000 (UTC)
commit 499c47b8ed737dbae7d1860d2be09a4d42bcc5e5
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 | 91 ++++++++++++++++++++++++++++++++++--
1 file changed, 87 insertions(+), 4 deletions(-)
---
diff --git a/gnome-flashback/libdesktop/gf-icon.c b/gnome-flashback/libdesktop/gf-icon.c
index a89ec9f..7e08c0c 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,6 +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
+set_file (GfIcon *self,
+ GFile *file)
+{
+ GfIconPrivate *priv;
+ GError *error;
+
+ priv = gf_icon_get_instance_private (self);
+
+ g_clear_object (&priv->file);
+ g_clear_object (&priv->monitor);
+
+ priv->file = g_object_ref (file);
+
+ 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)
{
@@ -1058,6 +1141,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);
@@ -1134,7 +1219,7 @@ gf_icon_set_property (GObject *object,
case PROP_FILE:
g_assert (priv->file == NULL);
- priv->file = g_value_dup_object (value);
+ set_file (self, g_value_get_object (value));
break;
case PROP_INFO:
@@ -1438,9 +1523,7 @@ gf_icon_set_file (GfIcon *self,
g_clear_pointer (&priv->popover, gtk_widget_destroy);
- g_clear_object (&priv->file);
- priv->file = g_object_ref (file);
-
+ set_file (self, file);
gf_icon_update (self);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]