Hello list,

I am new to Bazaar and especially Bazaar related development. Anyway, while
trying to get my packages into Bazaar repositories, I will try to help
improving bzr and friends.

The attached patch is a simple first improvement. I don't think it is 
production quality, but perhaps it will be a push into the right
direction.

It is a simple new feature, which allows running bzr visualize and 
resizing the window without the hard drive freaking out. The original
implementation stored the window sizes on each change. This is surely
not a bug but it made me suspicious when first using bzr-gtk. I just
had to check what it was doing to my data.

My attached patch changes the behaviour by updating the config file at
most every 10 seconds (and on exit). This is still not correct, for there
is no locking on the configuration file. Viewing the branch history for
multiple branches at the same time could well break the config file.

Comments welcome.

Greetings, Torsten
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: [email protected]
# target_branch: file:///home/torsten/debian/bzr-gtk/trunk/
# testament_sha1: 7ed0ff0249f80dc2c2a4c696cc069559f94e0557
# timestamp: 2009-04-08 12:53:06 +0200
# base_revision_id: [email protected]
# 
# Begin patch
=== modified file 'viz/branchwin.py'
--- viz/branchwin.py	2008-11-28 16:42:25 +0000
+++ viz/branchwin.py	2009-04-08 10:44:51 +0000
@@ -49,6 +49,7 @@
         self.config      = GlobalConfig()
 
         self._sizes      = {} # window and widget sizes
+        self._sizes_unsaved = {} # each key is the name of an unsaved size
 
         if self.config.get_user_option('viz-compact-view') == 'yes':
             self.compact_view = True
@@ -613,8 +614,29 @@
         if size_changed:
             width, height = allocation.width, allocation.height
             self._sizes[name] = (width, height)
+            self._delayed_store_size(name)
+
+    def _delayed_store_size(self, name):
+        """Ensure that the current size for name is eventually written
+        to the configuration file."""
+
+        dirty_sizes = self._sizes_unsaved
+        if name in dirty_sizes:
+            return      # already marked as dirty
+
+        def write_to_config():
+            (width, height) = self._sizes[name]
             value = '%sx%s' % (width, height)
             self.config.set_user_option(name, value)
+            del dirty_sizes[name]
+        
+        def write_from_timeout():
+            gtk.quit_remove(dirty_sizes[name])
+            write_to_config()
+            return False
+
+        dirty_sizes[name] = gtk.quit_add(1, write_to_config)
+        gobject.timeout_add(10000, write_from_timeout)
 
     def show_diff(self, revid=None, parentid=None):
         """Open a new window to show a diff between the given revisions."""

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

Reply via email to