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

