[meld] Pause reload notifications monitoring during asynchronous save (bgo#759851)
- From: Kai Willadsen <kaiw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [meld] Pause reload notifications monitoring during asynchronous save (bgo#759851)
- Date: Sun, 7 Aug 2016 00:28:44 +0000 (UTC)
commit bf9fbfa333deb1d8c3e6a11bac8aacbd1742be99
Author: Vasily Galkin <galkin-vv ya ru>
Date: Wed Aug 3 18:34:02 2016 +0300
Pause reload notifications monitoring during asynchronous save (bgo#759851)
Notifications are paused before saving and resumed after both
successful and failed saves.
This definitely loses reload notifications if another application
tries saving file in the same time, but such situation is very racy and
notification can be lost before this change too.
meld/filediff.py | 4 +++-
meld/meldbuffer.py | 10 +++++-----
2 files changed, 8 insertions(+), 6 deletions(-)
---
diff --git a/meld/filediff.py b/meld/filediff.py
index 00a672d..f1888f8 100644
--- a/meld/filediff.py
+++ b/meld/filediff.py
@@ -1539,6 +1539,7 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
# handling the GtkSource.FileSaverError.EXTERNALLY_MODIFIED error
if force_overwrite:
saver.set_flags(GtkSource.FileSaverFlags.IGNORE_MODIFICATION_TIME)
+ bufdata.disconnect_monitor()
saver.save_async(
GLib.PRIORITY_HIGH,
callback=self.file_saved_cb,
@@ -1549,6 +1550,8 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
def file_saved_cb(self, saver, result, user_data):
gfile = saver.get_location()
pane = user_data[0]
+ buf = saver.get_buffer()
+ buf.data.connect_monitor()
try:
saver.save_finish(result)
@@ -1565,7 +1568,6 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
self.state = melddoc.STATE_SAVING_ERROR
return
- buf = saver.get_buffer()
self.emit('file-changed', gfile.get_path())
self.undosequence.checkpoint(buf)
buf.data.update_mtime()
diff --git a/meld/meldbuffer.py b/meld/meldbuffer.py
index 5fec841..8c0b763 100644
--- a/meld/meldbuffer.py
+++ b/meld/meldbuffer.py
@@ -123,7 +123,7 @@ class MeldBufferData(GObject.GObject):
self.savefile = None
def __del__(self):
- self._disconnect_monitor()
+ self.disconnect_monitor()
@property
def label(self):
@@ -139,14 +139,14 @@ class MeldBufferData(GObject.GObject):
return
self._label = value
- def _connect_monitor(self):
+ def connect_monitor(self):
if not self._gfile:
return
monitor = self._gfile.monitor_file(Gio.FileMonitorFlags.NONE, None)
handler_id = monitor.connect('changed', self._handle_file_change)
self._monitor = monitor, handler_id
- def _disconnect_monitor(self):
+ def disconnect_monitor(self):
if not self._monitor:
return
monitor, handler_id = self._monitor
@@ -176,7 +176,7 @@ class MeldBufferData(GObject.GObject):
@gfile.setter
def gfile(self, value):
- self._disconnect_monitor()
+ self.disconnect_monitor()
self._gfile = value
self._sourcefile = GtkSource.File()
self._sourcefile.set_location(value)
@@ -186,7 +186,7 @@ class MeldBufferData(GObject.GObject):
# FIXME: maintaining previous comment above; this is now wrong in different awful ways
self.filename = value.get_path() if value else None
self.update_mtime()
- self._connect_monitor()
+ self.connect_monitor()
@property
def sourcefile(self):
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]