[meld: 37/63] filediff: Rework file saving logic to handle errors in async save
- From: Kai Willadsen <kaiw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [meld: 37/63] filediff: Rework file saving logic to handle errors in async save
- Date: Wed, 16 Dec 2015 21:22:05 +0000 (UTC)
commit 87eba5f574e02fa7caeb1bea3871d28026e03026
Author: Kai Willadsen <kai willadsen gmail com>
Date: Sat Sep 5 08:46:32 2015 +1000
filediff: Rework file saving logic to handle errors in async save
meld/filediff.py | 27 +++++++++++++++++----------
meld/melddoc.py | 2 +-
2 files changed, 18 insertions(+), 11 deletions(-)
---
diff --git a/meld/filediff.py b/meld/filediff.py
index b1c762d..e765732 100644
--- a/meld/filediff.py
+++ b/meld/filediff.py
@@ -176,6 +176,7 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
for widget in self.selector_hbox:
column_sizes.add_widget(widget)
+ self.state = melddoc.STATE_NORMAL
self.warned_bad_comparison = False
self._keymask = 0
self.meta = {}
@@ -814,17 +815,15 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
response = dialog.widget.run()
try_save = [b.get_active() for b in buttons]
dialog.widget.destroy()
- if response == Gtk.ResponseType.OK:
+ if response == Gtk.ResponseType.OK and any(try_save):
for i in range(self.num_panes):
if try_save[i]:
- # FIXME: See save_file; we can't assume that
- # the save has succeeded at this point.
- if not self.save_file(i):
- return Gtk.ResponseType.CANCEL
- elif response == Gtk.ResponseType.DELETE_EVENT:
- response = Gtk.ResponseType.CANCEL
-
- if response == Gtk.ResponseType.CLOSE:
+ self.save_file(i)
+ return Gtk.ResponseType.CANCEL
+
+ if response == Gtk.ResponseType.DELETE_EVENT:
+ response = Gtk.ResponseType.CANCEL
+ elif response == Gtk.ResponseType.CLOSE:
response = Gtk.ResponseType.OK
if response == Gtk.ResponseType.OK and self.meta:
@@ -845,10 +844,13 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
if resolve_response == Gtk.ResponseType.OK:
conflict_file = self.textbuffer[1].data.filename
parent.command('resolve', [conflict_file])
+ elif response == Gtk.ResponseType.CANCEL:
+ self.state = melddoc.STATE_NORMAL
return response
def on_delete_event(self):
+ self.state = melddoc.STATE_CLOSING
response = self.check_save_modified()
if response == Gtk.ResponseType.OK:
for h in self.settings_handlers:
@@ -1547,7 +1549,12 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
buf.data.update_mtime()
if pane == 1 and self.num_panes == 3:
self.meta['middle_saved'] = True
- self.state = melddoc.STATE_NORMAL
+
+ if (self.state == melddoc.STATE_CLOSING and
+ not any(b.data.modified for b in self.textbuffer)):
+ self.on_delete_event()
+ else:
+ self.state = melddoc.STATE_NORMAL
def make_patch(self, *extra):
dialog = patchdialog.PatchDialog(self)
diff --git a/meld/melddoc.py b/meld/melddoc.py
index 823fdfa..e90f94e 100644
--- a/meld/melddoc.py
+++ b/meld/melddoc.py
@@ -51,7 +51,7 @@ def make_custom_editor_command(path, line=0):
# TODO: Consider use-cases for states in gedit-enum-types.c
-STATE_NORMAL, STATE_SAVING_ERROR, NUM_STATES = range(3)
+STATE_NORMAL, STATE_CLOSING, STATE_SAVING_ERROR, NUM_STATES = range(4)
class MeldDoc(GObject.GObject):
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]