Package: debgtd
Version: 1.2.1-1
Severity: wishlist
Tags: patch

Updating bugs shouldn't be performed in the GTK main loop because it blocks
repainting which looks really ugly. Patch attached.


Regards,

-- 
Chris Lamb, UK                                       [EMAIL PROTECTED]
                                                            GPG: 0x634F9A20
diff -urNad debgtd-1.2.1.orig/debgtd/gui.py debgtd-1.2.1/debgtd/gui.py
--- debgtd-1.2.1.orig/debgtd/gui.py     2008-08-04 05:20:35.000000000 +0100
+++ debgtd-1.2.1/debgtd/gui.py  2008-08-04 05:20:58.000000000 +0100
@@ -18,6 +18,7 @@
 import gtk
 import gtk.glade
 import os
+import threading
 
 import debgtd
 from debgtd.controller import Controller
@@ -25,12 +26,15 @@
 class Gui:
        def __init__(self,controller):
                self.controller = controller
+               self.active = True
 
                try:
                        gtk.init_check()
                except RuntimeError, e:
                        sys.exit('E: %s. Exiting.' % e)
 
+               gtk.gdk.threads_init()
+
                if os.path.isfile("debgtd.glade"):
                        self.gladefile = "debgtd.glade"
                elif os.path.isfile("/usr/local/share/debgtd/debgtd.glade"):
@@ -43,8 +47,8 @@
                window = self.wTree.get_widget("window1")
                window.resize(800,600)
                window.show()
-               self.wTree.get_widget("quit_menu_item").connect("activate", 
gtk.main_quit)
-               self.wTree.get_widget("window1").connect("destroy", 
gtk.main_quit)
+               self.wTree.get_widget("quit_menu_item").connect("activate", 
self.quit_cb)
+               self.wTree.get_widget("window1").connect("destroy", 
self.quit_cb)
 
                self.tree = self.wTree.get_widget("treeview1")
                self.tree.connect("row-activated", self.row_selected_cb)
@@ -134,9 +138,25 @@
                return av - bv
 
        def refresh_data_cb(self, button):
-               user = self.wTree.get_widget("user_email").get_text()
-               self.controller.set_user(user)
-               self.controller.import_new_bugs()
+               widgets = ("refresh_data_button", "sleep_bug_button",
+                       "ignore_bug_button", "user_email", "sleep_menu_item",
+                       "ignore_menu_item", "quit_menu_item")
+               for widget in widgets:
+                       self.wTree.get_widget(widget).set_sensitive(False)
+
+               old_label = button.get_label()
+               button.set_label("Updating...")
+
+               def refresh_worker():
+                       user = self.wTree.get_widget("user_email").get_text()
+                       self.controller.set_user(user)
+                       self.controller.import_new_bugs()
+                       if not self.active:
+                               return
+                       for widget in widgets:
+                               
self.wTree.get_widget(widget).set_sensitive(True)
+                       button.set_label(old_label)
+               threading.Thread(target=refresh_worker).start()
 
        ### listener methods for Model events
 
@@ -157,6 +177,8 @@
                self.hide_bug(bug['id'])
        
        def bug_changed(self, bug):
+               if not self.active:
+                       return
                if bug.sleeping() or bug.ignoring() or bug.is_done():
                        self.hide_bug(bug['id'])
 
@@ -201,3 +223,7 @@
 
        def user_changed(self, user):
                self.wTree.get_widget("user_email").set_text(user)
+
+       def quit_cb(self, *_):
+               self.active = False
+               gtk.main_quit()

Attachment: signature.asc
Description: PGP signature

Reply via email to