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()
signature.asc
Description: PGP signature