Subject pretty much says it all.

As mentioned in the bug comment, this has some drawbacks because
the base class defines the semantic of 'ctrl-W' and 'ctrl-Q' a
bit aggressively.

The actual definition is fine when there is only one window
opened by a given command but here the gstatus window can spawn
one or several diff windows and closing one shouldn't bring the
other down.

Arguably closing the status window itself may close all children
windows though.

Since changing that behavior will be invasive regarding other
commands, I didn't try to implement it to fix that bug, but that
something that we may want to consider.

Concretely, instead of calling destroy() on ctrl-W we should call
close() which itself can call destroy(). And we shouldn't call
main_quit() if parent is None but instead leave that to the upper
level to handle (which knows if children windows has been opened
and can decide whether it's appropriate to quit or not).

          Vincent

# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: [EMAIL PROTECTED]
# target_branch: http://bazaar.launchpad.net/%7Ebzr-gtk/bzr-gtk/trunk
# testament_sha1: 5d810471f32a4a14a4b27a3c57bd90df1379b268
# timestamp: 2008-10-23 10:18:57 +0200
# base_revision_id: [EMAIL PROTECTED]
# 
# Begin patch
=== modified file '__init__.py'
--- __init__.py	2008-08-06 14:35:39 +0000
+++ __init__.py	2008-10-23 08:14:59 +0000
@@ -402,7 +402,7 @@
 
     Graphical user interface for showing status 
     information."""
-    
+
     aliases = [ "gst" ]
     takes_args = ['PATH?']
     takes_options = ['revision']
@@ -410,21 +410,23 @@
     def run(self, path='.', revision=None):
         import os
         gtk = open_display()
-        from status import StatusDialog
+        from bzrlib.plugins.gtk.status import StatusWindow
         (wt, wt_path) = workingtree.WorkingTree.open_containing(path)
-        
+
         if revision is not None:
             try:
                 revision_id = revision[0].as_revision_id(wt.branch)
             except:
                 from bzrlib.errors import BzrError
-                raise BzrError('Revision %r doesn\'t exist' % revision[0].user_spec )
+                raise BzrError('Revision %r doesn\'t exist'
+                               % revision[0].user_spec )
         else:
             revision_id = None
 
-        status = StatusDialog(wt, wt_path, revision_id)
+        status = StatusWindow(wt, wt_path, revision_id)
         status.connect("destroy", gtk.main_quit)
-        status.run()
+        status.show()
+        gtk.main()
 
 
 class cmd_gsend(GTKCommand):

=== modified file 'status.py'
--- status.py	2008-07-08 21:40:38 +0000
+++ status.py	2008-10-23 08:14:59 +0000
@@ -21,23 +21,25 @@
     pass
 
 import gtk
-from bzrlib.plugins.gtk import _i18n
-
-
-class StatusDialog(gtk.Dialog):
+from bzrlib.plugins.gtk import (
+    _i18n,
+    window,
+    )
+
+
+class StatusWindow(window.Window):
     """ Display Status window and perform the needed actions. """
     def __init__(self, wt, wtpath, revision=None):
         """ Initialize the Status window. """
-        super(StatusDialog, self).__init__(flags=gtk.DIALOG_MODAL, buttons=(gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE))
+        super(StatusWindow, self).__init__()
         self.set_title("Working tree changes")
-        self.set_default_response(gtk.RESPONSE_CLOSE)
         self._create()
         self.wt = wt
         self.wtpath = wtpath
 
         if revision is None:
             revision = self.wt.branch.last_revision()
-            
+
         # Set the old working tree
         self.old_tree = self.wt.branch.repository.revision_tree(revision)
         # Generate status output
@@ -45,20 +47,17 @@
 
     def _create(self):
         self.set_default_size(400, 300)
-        self.set_has_separator(False)
         sw = gtk.ScrolledWindow()
         sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
         sw.set_shadow_type(gtk.SHADOW_IN)
         self.treeview = gtk.TreeView()
         sw.add(self.treeview)
-        self.vbox.pack_start(sw, True, True)
-        self.vbox.show_all()
+        self.add(sw)
 
         # sane border and spacing widths (as recommended by GNOME HIG) 
         self.set_border_width(5)
         sw.set_border_width(5)
-        self.vbox.set_spacing(2)
-        self.action_area.set_border_width(5)
+        self.show_all()
 
 
     def row_diff(self, tv, path, tvc):
@@ -78,18 +77,18 @@
         self.treeview.set_headers_visible(False)
         self.treeview.set_model(self.model)
         self.treeview.connect("row-activated", self.row_diff)
-        
+
         cell = gtk.CellRendererText()
         cell.set_property("width-chars", 20)
         column = gtk.TreeViewColumn()
         column.pack_start(cell, expand=True)
         column.add_attribute(cell, "text", 0)
         self.treeview.append_column(column)
-        
+
         delta = self.wt.changes_from(self.old_tree)
 
         changes = False
-        
+
         if len(delta.added):
             changes = True
             titer = self.model.append(None, [ _i18n('Added'), None ])
@@ -114,7 +113,7 @@
             titer = self.model.append(None, [ _i18n('Modified'), None ])
             for path, id, kind, text_modified, meta_modified in delta.modified:
                 self.model.append(titer, [ path, path ])
-        
+
         done_unknown = False
         for path in self.wt.unknowns():
             changes = True
@@ -127,6 +126,6 @@
             self.model.append(None, [ _i18n('No changes.'), None ])
 
         self.treeview.expand_all()
-    
+
     def close(self, widget=None):
         self.window.destroy()

=== modified file 'window.py'
--- window.py	2007-10-14 15:54:57 +0000
+++ window.py	2008-10-23 08:14:59 +0000
@@ -7,9 +7,9 @@
     def __init__(self, parent=None):
         gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL)
         self._parent = parent
-        
+
         self.connect('key-press-event', self._on_key_press)
-        
+
     def _on_key_press(self, widget, event):
         keyname = gtk.gdk.keyval_name(event.keyval)
         if event.state & gtk.gdk.CONTROL_MASK:

# Begin bundle
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
-- 
bzr-gtk mailing list
[email protected]
Modify settings or unsubscribe at: 
https://lists.canonical.com/mailman/listinfo/bzr-gtk

Reply via email to