[meld: 35/63] patchdialog: Use a simplistic GtkSourceFileSaver for saving patch files
- From: Kai Willadsen <kaiw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [meld: 35/63] patchdialog: Use a simplistic GtkSourceFileSaver for saving patch files
- Date: Wed, 16 Dec 2015 21:21:55 +0000 (UTC)
commit bb4c1112a77c3f2ff1cfe4e0e875f995ea5f378a
Author: Kai Willadsen <kai willadsen gmail com>
Date: Wed Aug 12 09:06:32 2015 +1000
patchdialog: Use a simplistic GtkSourceFileSaver for saving patch files
meld/patchdialog.py | 64 ++++++++++++++++++++++++++++++++++----------------
1 files changed, 43 insertions(+), 21 deletions(-)
---
diff --git a/meld/patchdialog.py b/meld/patchdialog.py
index c6c3d8e..dedc485 100644
--- a/meld/patchdialog.py
+++ b/meld/patchdialog.py
@@ -17,12 +17,15 @@
import difflib
import os
+from gi.repository import Gio
+from gi.repository import GLib
from gi.repository import Gtk
from gi.repository import GtkSource
from .ui import gnomeglade
from meld.conf import _
+from meld.misc import error_dialog
from meld.settings import meldsettings
from .util.compat import text_type
from meld.sourceview import LanguageManager
@@ -94,32 +97,51 @@ class PatchDialog(gnomeglade.Component):
diff_text = "".join(difflib.unified_diff(text0, text1, name0, name1))
buf.set_text(diff_text)
+ def save_patch(self, filename):
+ buf = self.textview.get_buffer()
+ sourcefile = GtkSource.File.new()
+ targetfile = Gio.File.new_for_path(filename)
+ saver = GtkSource.FileSaver.new_with_target(
+ buf, sourcefile, targetfile)
+ saver.save_async(
+ GLib.PRIORITY_HIGH,
+ callback=self.file_saved_cb,
+ )
+
+ def file_saved_cb(self, saver, result, *args):
+ gfile = saver.get_location()
+ try:
+ saver.save_finish(result)
+ except GLib.Error as err:
+ filename = GLib.markup_escape_text(
+ gfile.get_parse_name()).decode('utf-8')
+ error_dialog(
+ primary=_("Could not save file %s.") % filename,
+ secondary=_("Couldn't save file due to:\n%s") % (
+ GLib.markup_escape_text(str(err))),
+ )
+
def run(self):
self.update_patch()
- while 1:
- result = self.widget.run()
- if result < 0:
- break
+ result = self.widget.run()
+ if result < 0:
+ self.widget.hide()
+ return
+ # Copy patch to clipboard
+ if result == 1:
buf = self.textview.get_buffer()
start, end = buf.get_bounds()
- txt = text_type(buf.get_text(start, end, False), 'utf8')
-
- # Copy patch to clipboard
- if result == 1:
- clip = Gtk.clipboard_get()
- clip.set_text(txt)
- clip.store()
- break
- # Save patch as a file
- else:
- # FIXME: These filediff methods are actually general utility.
- filename = self.filediff._get_filename_for_saving(
- _("Save Patch"))
- if filename:
- txt = txt.encode('utf-8')
- self.filediff._save_text_to_filename(filename, txt)
- break
+ clip = Gtk.Clipboard.get()
+ clip.set_text(buf.get_text(start, end, False))
+ clip.store()
+ # Save patch as a file
+ else:
+ # FIXME: These filediff methods are actually general utility.
+ filename = self.filediff._get_filename_for_saving(
+ _("Save Patch"))
+ if filename:
+ self.save_patch(filename)
self.widget.hide()
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]