[meld: 33/63] meldwindow: Move to handling page removal in a callback
- From: Kai Willadsen <kaiw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [meld: 33/63] meldwindow: Move to handling page removal in a callback
- Date: Wed, 16 Dec 2015 21:21:44 +0000 (UTC)
commit 7424577c4cb357e914d6ca47654bc382a0cb7c48
Author: Kai Willadsen <kai willadsen gmail com>
Date: Wed Aug 12 08:12:05 2015 +1000
meldwindow: Move to handling page removal in a callback
While this is much harder to handle, this is a necessary change if we
are going to support async saving, since we can't wait up for any error
cases when closing pages or quiting.
meld/meldwindow.py | 40 ++++++++++++++++++++--------------------
1 files changed, 20 insertions(+), 20 deletions(-)
---
diff --git a/meld/meldwindow.py b/meld/meldwindow.py
index bed2bbe..0a67e8c 100644
--- a/meld/meldwindow.py
+++ b/meld/meldwindow.py
@@ -296,9 +296,13 @@ class MeldWindow(gnomeglade.Component):
for c in reversed(self.notebook.get_children()):
page = c.pyobject
self.notebook.set_current_page(self.notebook.page_num(page.widget))
- response = self.try_remove_page(page, appquit=1)
+ response = page.on_delete_event()
if response == Gtk.ResponseType.CANCEL:
return True
+ # TODO: Now also need to check whether any page is in an error
+ # state, or is asynchronously closing, or... etc. Some errors
+ # or cancellation requests will be returned from the page's
+ # on_delete_event, but not all.
def has_pages(self):
return self.notebook.get_n_pages() > 0
@@ -453,7 +457,7 @@ class MeldWindow(gnomeglade.Component):
i = self.notebook.get_current_page()
if i >= 0:
page = self.notebook.get_nth_page(i).pyobject
- self.try_remove_page(page)
+ page.on_delete_event()
def on_menu_undo_activate(self, *extra):
self.current_doc().on_undo_activate()
@@ -568,21 +572,16 @@ class MeldWindow(gnomeglade.Component):
"/Menubar/TabMenu/TabPlaceholder",
name, name, Gtk.UIManagerItemType.MENUITEM, False)
- def try_remove_page(self, page, appquit=0):
- "See if a page will allow itself to be removed"
- response = page.on_delete_event()
- if response != Gtk.ResponseType.CANCEL:
- if hasattr(page, 'scheduler'):
- self.scheduler.remove_scheduler(page.scheduler)
- page_num = self.notebook.page_num(page.widget)
-
- self.notebook.remove_page(page_num)
- # Normal switch-page handlers don't get run for removing
- # the last page from a notebook.
- if self.notebook.get_n_pages() == 0:
- self.on_switch_page(self.notebook, page, -1)
- self._update_page_action_sensitivity()
- return response
+ def page_removed(self, page, status):
+ if hasattr(page, 'scheduler'):
+ self.scheduler.remove_scheduler(page.scheduler)
+
+ page_num = self.notebook.page_num(page.widget)
+
+ self.notebook.remove_page(page_num)
+ if self.notebook.get_n_pages() == 0:
+ self.on_switch_page(self.notebook, page, -1)
+ self._update_page_action_sensitivity()
def on_file_changed(self, srcpage, filename):
for c in self.notebook.get_children():
@@ -591,8 +590,8 @@ class MeldWindow(gnomeglade.Component):
page.on_file_changed(filename)
def _append_page(self, page, icon):
- nbl = notebooklabel.NotebookLabel(icon, "",
- lambda b: self.try_remove_page(page))
+ nbl = notebooklabel.NotebookLabel(
+ icon, "", lambda b: page.on_delete_event())
self.notebook.append_page(page.widget, nbl)
# Change focus to the newly created page only if the user is on a
@@ -610,6 +609,7 @@ class MeldWindow(gnomeglade.Component):
page.connect("file-changed", self.on_file_changed)
page.connect("create-diff", lambda obj, arg, kwargs:
self.append_diff(arg, **kwargs))
+ page.connect("close", self.page_removed)
self.notebook.set_tab_reorderable(page.widget, True)
@@ -619,7 +619,7 @@ class MeldWindow(gnomeglade.Component):
self.on_notebook_label_changed(doc, _("New comparison"), None)
def diff_created_cb(doc, newdoc):
- self.try_remove_page(doc)
+ doc.on_delete_event()
idx = self.notebook.page_num(newdoc.widget)
self.notebook.set_current_page(idx)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]