>From 3ab1a7507a517e757e7134f267bddbee1654323b Mon Sep 17 00:00:00 2001 From: Jiri Moskovcak Date: Mon, 8 Mar 2010 17:08:57 +0100 Subject: [PATCH] GUI: added option to run without main window v2 --- src/Gui/CCDumpList.py | 5 ++++ src/Gui/CCMainWindow.py | 54 +++++++++++++++++++++++++++++++------------ src/Gui/CCReporterDialog.py | 34 ++++++++++++++++++++------- 3 files changed, 69 insertions(+), 24 deletions(-) diff --git a/src/Gui/CCDumpList.py b/src/Gui/CCDumpList.py index f3df21e..c962f21 100644 --- a/src/Gui/CCDumpList.py +++ b/src/Gui/CCDumpList.py @@ -28,6 +28,11 @@ class DumpList(list): else: print "db == None!" + def getDumpByCrashID(self, crashid): + for dump in self: + # crashid can be either hash or uid:hash + if crashid in (dump.getUUID(),dump.getUID()+":"+dump.getUUID()): + return dump __PFList = None __PFList_dbmanager = None diff --git a/src/Gui/CCMainWindow.py b/src/Gui/CCMainWindow.py index 4d7dff4..8129b8a 100644 --- a/src/Gui/CCMainWindow.py +++ b/src/Gui/CCMainWindow.py @@ -30,18 +30,10 @@ import ABRTExceptions class MainWindow(): ccdaemon = None - def __init__(self): + def __init__(self, daemon): self.theme = gtk.icon_theme_get_default() self.updates = "" - try: - self.ccdaemon = CCDBusBackend.DBusManager() - except ABRTExceptions.IsRunning: - # another instance is running, so exit quietly - sys.exit() - except Exception, ex: - # show error message if connection fails - gui_error_message("%s" % ex) - sys.exit() + self.ccdaemon = daemon #Set the Glade file self.gladefile = "%s/ccgui.glade" % sys.path[0] self.wTree = gtk.glade.XML(self.gladefile) @@ -295,19 +287,51 @@ class MainWindow(): self.window.present() if __name__ == "__main__": + verbose = 0 + crashid = None try: - opts, args = getopt.getopt(sys.argv[1:], "v") + opts, args = getopt.getopt(sys.argv[1:], "vh", ["help","report="]) except getopt.GetoptError, err: print str(err) # prints something like "option -a not recognized" sys.exit(2) - verbose = 0 + for opt, arg in opts: if opt == "-v": verbose += 1 + elif opt == "--report": + crashid=arg + elif opt in ("-h","--help"): + print _("Usage: abrt-gui [OPTIONS]" + "\n\t-h, --help \tthis help message" + "\n\t-v[vv] \tverbosity level" + "\n\t--report=\tdirectly report crash with crashid=" + ) + sys.exit() + init_logging("abrt-gui", verbose) log1("log level:%d", verbose) - cc = MainWindow() - cc.hydrate() - cc.show() + try: + daemon = CCDBusBackend.DBusManager() + except ABRTExceptions.IsRunning: + # another instance is running, so exit quietly + sys.exit() + except Exception, ex: + # show error message if connection fails + gui_error_message("%s" % ex) + sys.exit() + + if crashid: + dumplist = getDumpList(daemon) + crashdump = dumplist.getDumpByCrashID(crashid) + if not crashdump: + gui_error_message(_("No such crash in database, probably wrong crashid." + "\ncrashid=%s" % crashid)) + sys.exit() + rs = ReporterSelector(crashdump, daemon, parent=None) + rs.show() + else: + cc = MainWindow(daemon) + cc.hydrate() + cc.show() gtk.main() diff --git a/src/Gui/CCReporterDialog.py b/src/Gui/CCReporterDialog.py index a4c216d..3b3fdd8 100644 --- a/src/Gui/CCReporterDialog.py +++ b/src/Gui/CCReporterDialog.py @@ -42,6 +42,8 @@ class ReporterDialog(): self.window.set_position(gtk.WIN_POS_CENTER_ON_PARENT) self.window.set_transient_for(parent) self.window.set_modal(True) + else: + self.window.set_position(gtk.WIN_POS_CENTER) # comment textview self.tvComment = self.builder.get_object("tvComment") @@ -344,17 +346,26 @@ class ReporterSelector(): self.builder = gtk.Builder() self.builder.add_from_file(builderfile) self.window = self.builder.get_object("w_reporters") + b_cancel = self.builder.get_object("b_close") + if parent: self.window.set_position(gtk.WIN_POS_CENTER_ON_PARENT) self.window.set_transient_for(parent) self.window.set_modal(True) - self.connect_signal(self.window, "delete-event", self.on_window_delete) - self.connect_signal(self.window, "destroy-event", self.on_window_delete) + self.connect_signal(self.window, "delete-event", self.on_window_delete) + self.connect_signal(self.window, "destroy-event", self.on_window_delete) + self.connect_signal(b_cancel, "clicked", self.on_close_clicked) + else: + # if we don't have parent we want to quit the mainloop on close + self.window.set_position(gtk.WIN_POS_CENTER) + self.connect_signal(self.window, "delete-event", gtk.main_quit) + self.connect_signal(self.window, "destroy-event", gtk.main_quit) + self.connect_signal(b_cancel, "clicked", gtk.main_quit) + self.pBarWindow = self.builder.get_object("pBarWindow") - b_cancel = self.builder.get_object("b_close") - self.connect_signal(b_cancel, "clicked", self.on_close_clicked) + reporters_vbox = self.builder.get_object("vb_reporters") for reporter in self.reporters: button = gtk.Button(str(reporter)) @@ -396,6 +407,13 @@ class ReporterSelector(): for obj, signal_id in self.connected_signals: obj.disconnect(signal_id) + def cleanup_and_exit(self): + if not self.window.get_property("visible"): + self.disconnect_signals() + # if the reporter selector doesn't have a parent + if not self.window.get_transient_for(): + gtk.main_quit() + def update_cb(self, daemon, message): self.updates += message if self.updates[-1] != '\n': @@ -447,8 +465,7 @@ class ReporterSelector(): self.pBarWindow.hide() gui_report_dialog(result, self.window) - if not self.window.get_property("visible"): - self.disconnect_signals() + self.cleanup_and_exit() def on_analyze_complete_cb(self, daemon, report, pBarWindow): try: @@ -495,9 +512,8 @@ class ReporterSelector(): # -50 == REFRESH elif response == -50: self.refresh_report(report) - - elif not self.window.get_property("visible"): - self.disconnect_signals() + else: + self.cleanup_and_exit() # call to update the progressbar def progress_update_cb(self, *args): -- 1.6.6.1