From c9fdcf782e7ad7f54a35ab5c156cf0a2fa84ad1e Mon Sep 17 00:00:00 2001 From: necoro <> Date: Mon, 16 Oct 2006 15:01:55 +0000 Subject: Introduced watch_cursor decorator --- geneticone/gui/gui_helper.py | 8 ++++---- geneticone/gui/windows.py | 44 +++++++++++++++++++++++++++----------------- 2 files changed, 31 insertions(+), 21 deletions(-) (limited to 'geneticone') diff --git a/geneticone/gui/gui_helper.py b/geneticone/gui/gui_helper.py index 5540570..cb32417 100644 --- a/geneticone/gui/gui_helper.py +++ b/geneticone/gui/gui_helper.py @@ -343,7 +343,7 @@ class EmergeQueue: @param oneshot: True if this package should not be added to the world-file. @type oneshot: boolean @param options: additional options to get showed in tree - @param options: string[] + @type options: string[] @raises geneticone.backend.PackageNotFoundException: if trying to add a package which does not exist""" @@ -387,7 +387,7 @@ class EmergeQueue: @param cpv: cpv to add @type cpv: string (cpv) - @param onehost: True if this package should not be added to the world-file. + @param oneshot: True if this package should not be added to the world-file. @type oneshot: boolean @returns: options set @@ -516,8 +516,8 @@ class EmergeQueue: def remove_with_children (self, it, removeNewFlags = True): """Convenience function which removes all children of an iterator and than the iterator itself. - @param parentIt: The iter which to remove. - @type parentIt: gtk.TreeIter + @param it: The iter which to remove. + @type it: gtk.TreeIter @param removeNewFlags: True if new flags should be removed; False otherwise. Default: True. @type removeNewFlags: boolean""" diff --git a/geneticone/gui/windows.py b/geneticone/gui/windows.py index 9d4db62..ade3fa9 100644 --- a/geneticone/gui/windows.py +++ b/geneticone/gui/windows.py @@ -926,42 +926,52 @@ class MainWindow: return True - def cb_update_clicked (self, action): - if not backend.am_i_root(): - not_root_dialog() - - else: - + def watch_cursor (func): + """This is a decorator for functions being so time consuming, that it is appropriate to show the watch-cursor. + @attention: this function relies on the gtk.Window-Object being stored as self.window""" + def wrapper (self, *args, **kwargs): + ret = None def cb_idle(): try: - updating = backend.update_world(newuse = self.cfg.get_boolean(self.cfg.const["newuse_opt"]), deep = self.cfg.get_boolean(self.cfg.const["deep_opt"])) - - debug("updating list:", [(x.get_cpv(), y.get_cpv()) for x,y in updating]) - for pkg, old_pkg in updating: - self.queue.append(pkg.get_cpv(), options=["update from "+old_pkg.get_version()]) - - if len(updating): self.doUpdate = True + ret = func(self, *args, **kwargs) finally: self.window.window.set_cursor(None) return False - + watch = gtk.gdk.Cursor(gtk.gdk.WATCH) self.window.window.set_cursor(watch) - gobject.idle_add(cb_idle) + return ret + return wrapper + @watch_cursor + def cb_update_clicked (self, action): + if not backend.am_i_root(): + not_root_dialog() + + else: + updating = backend.update_world(newuse = self.cfg.get_boolean(self.cfg.const["newuse_opt"]), deep = self.cfg.get_boolean(self.cfg.const["deep_opt"])) + + debug("updating list:", [(x.get_cpv(), y.get_cpv()) for x,y in updating]) + for pkg, old_pkg in updating: + self.queue.append(pkg.get_cpv(), options=["update from "+old_pkg.get_version()]) + + if len(updating): self.doUpdate = True return True def cb_sync_clicked (self, action): self.notebook.set_current_page(1) self.queue.sync() - + + @watch_cursor def cb_reload_clicked (self, action): + """Reloads the portage settings and the database.""" backend.reload_settings() del self.db self.db = Database() self.db.populate() - + + @watch_cursor def cb_search_clicked (self, button, data = None): """Do a search.""" if self.searchEntry.get_text() != "": -- cgit v1.2.3-54-g00ecf