/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/**
+/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
if (fputs (content, file) == EOF)
return FALSE;
+#ifndef G_OS_WIN32
fsync (fd);
+#endif
rewind (file);
return TRUE;
static gboolean
egg_recent_model_changed_timeout (EggRecentModel *model)
{
+ model->priv->changed_timeout = 0;
+
egg_recent_model_changed (model);
return FALSE;
egg_recent_model_monitor (EggRecentModel *model, gboolean should_monitor)
{
if (should_monitor && model->priv->monitor == NULL) {
+ char *uri;
+
+ uri = gnome_vfs_get_uri_from_local_path (model->priv->path);
gnome_vfs_monitor_add (&model->priv->monitor,
- model->priv->path,
- GNOME_VFS_MONITOR_FILE,
- egg_recent_model_monitor_cb,
- model);
+ uri,
+ GNOME_VFS_MONITOR_FILE,
+ egg_recent_model_monitor_cb,
+ model);
+
+ g_free (uri);
/* if the above fails, don't worry about it.
* local notifications will still happen
static gboolean
egg_recent_model_lock_file (FILE *file)
{
+#ifdef F_TLOCK
int fd;
gint try = 5;
}
return FALSE;
+#else
+ return TRUE;
+#endif
}
static gboolean
egg_recent_model_unlock_file (FILE *file)
{
+#ifdef F_TLOCK
int fd;
rewind (file);
fd = fileno (file);
return (lockf (fd, F_ULOCK, 0) == 0) ? TRUE : FALSE;
+#else
+ return TRUE;
+#endif
}
static void
{
EggRecentModel *model = EGG_RECENT_MODEL (object);
+ if (model->priv->changed_timeout > 0) {
+ g_source_remove (model->priv->changed_timeout);
+ }
+
egg_recent_model_monitor (model, FALSE);
ret = TRUE;
} else {
g_warning ("Failed to lock: %s", strerror (errno));
+ fclose (file);
return FALSE;
}