[gedit] Also check if permission changed when checking if a local file was modified.
- From: Paolo Borelli <pborelli src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gedit] Also check if permission changed when checking if a local file was modified.
- Date: Sun, 18 Apr 2010 10:31:10 +0000 (UTC)
commit cf336fa71642dd6457dc34f44d74e641632f8b47
Author: Paolo Borelli <pborelli gnome org>
Date: Sun Apr 18 12:15:54 2010 +0200
Also check if permission changed when checking if a local file was
modified.
gedit/gedit-document.c | 52 ++++++++++++++++++++++++++++++++---------------
1 files changed, 35 insertions(+), 17 deletions(-)
---
diff --git a/gedit/gedit-document.c b/gedit/gedit-document.c
index 808b494..6af85b2 100644
--- a/gedit/gedit-document.c
+++ b/gedit/gedit-document.c
@@ -1127,18 +1127,20 @@ gedit_document_get_mime_type (GeditDocument *doc)
}
/* Note: do not emit the notify::read-only signal */
-static void
+static gboolean
set_readonly (GeditDocument *doc,
gboolean readonly)
{
gedit_debug (DEBUG_DOCUMENT);
-
+
readonly = (readonly != FALSE);
if (doc->priv->readonly == readonly)
- return;
+ return FALSE;
doc->priv->readonly = readonly;
+
+ return TRUE;
}
/**
@@ -1156,9 +1158,10 @@ _gedit_document_set_readonly (GeditDocument *doc,
g_return_if_fail (GEDIT_IS_DOCUMENT (doc));
- set_readonly (doc, readonly);
-
- g_object_notify (G_OBJECT (doc), "read-only");
+ if (set_readonly (doc, readonly))
+ {
+ g_object_notify (G_OBJECT (doc), "read-only");
+ }
}
gboolean
@@ -1174,7 +1177,6 @@ _gedit_document_check_externally_modified (GeditDocument *doc)
{
GFile *gfile;
GFileInfo *info;
- GTimeVal timeval;
g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), FALSE);
@@ -1185,23 +1187,39 @@ _gedit_document_check_externally_modified (GeditDocument *doc)
gfile = g_file_new_for_uri (doc->priv->uri);
info = g_file_query_info (gfile,
- G_FILE_ATTRIBUTE_TIME_MODIFIED,
+ G_FILE_ATTRIBUTE_TIME_MODIFIED "," \
+ G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE,
G_FILE_QUERY_INFO_NONE,
NULL, NULL);
g_object_unref (gfile);
- if (info == NULL ||
- !g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_TIME_MODIFIED))
+ if (info != NULL)
{
- return FALSE;
- }
+ /* While at it also check if permissions changed */
+ if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE))
+ {
+ gboolean read_only;
- g_file_info_get_modification_time (info, &timeval);
- g_object_unref (info);
+ read_only = !g_file_info_get_attribute_boolean (info,
+ G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE);
+
+ _gedit_document_set_readonly (doc, read_only);
+ }
+
+ if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_TIME_MODIFIED))
+ {
+ GTimeVal timeval;
+
+ g_file_info_get_modification_time (info, &timeval);
+ g_object_unref (info);
- return (timeval.tv_sec > doc->priv->mtime.tv_sec) ||
- (timeval.tv_sec == doc->priv->mtime.tv_sec &&
- timeval.tv_usec > doc->priv->mtime.tv_usec);
+ return (timeval.tv_sec > doc->priv->mtime.tv_sec) ||
+ (timeval.tv_sec == doc->priv->mtime.tv_sec &&
+ timeval.tv_usec > doc->priv->mtime.tv_usec);
+ }
+ }
+
+ return FALSE;
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]