>From 0f6502c7ed15afd8139deb0808355d655a8f52eb Mon Sep 17 00:00:00 2001 From: Jiri Moskovcak Date: Mon, 8 Mar 2010 11:02:46 +0100 Subject: [PATCH] GUI: added option to run without main window - if the argument --report=crashid is passed to gui it doesn't show the main window and reports the crash directly --- src/Gui/CCDumpList.py | 4 ++++ src/Gui/CCMainWindow.py | 36 +++++++++++++++++++++++------------- src/Gui/CCReporterDialog.py | 34 +++++++++++++++++++++++++--------- 3 files changed, 52 insertions(+), 22 deletions(-) diff --git a/src/Gui/CCDumpList.py b/src/Gui/CCDumpList.py index f3df21e..e464fb6 100644 --- a/src/Gui/CCDumpList.py +++ b/src/Gui/CCDumpList.py @@ -28,6 +28,10 @@ class DumpList(list): else: print "db == None!" + def getDumpByCrashID(self, crashid): + for dump in self: + if dump.getUUID() == crashid: + return dump __PFList = None __PFList_dbmanager = None diff --git a/src/Gui/CCMainWindow.py b/src/Gui/CCMainWindow.py index 4d7dff4..3328f6b 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) @@ -296,18 +288,36 @@ class MainWindow(): if __name__ == "__main__": try: - opts, args = getopt.getopt(sys.argv[1:], "v") + 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() + try: + opts, args = getopt.getopt(sys.argv[1:], "v", ["report="]) except getopt.GetoptError, err: print str(err) # prints something like "option -a not recognized" sys.exit(2) + verbose = 0 + crashid = None for opt, arg in opts: if opt == "-v": verbose += 1 + elif opt == "--report": + crashid=arg init_logging("abrt-gui", verbose) log1("log level:%d", verbose) - cc = MainWindow() + cc = MainWindow(daemon) cc.hydrate() - cc.show() + if crashid: + dumplist = getDumpList(daemon) + rs = ReporterSelector(dumplist.getDumpByCrashID(crashid),daemon,parent=None) + rs.show() + else: + cc.show() gtk.main() diff --git a/src/Gui/CCReporterDialog.py b/src/Gui/CCReporterDialog.py index 123fa2d..306743f 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") @@ -349,17 +351,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)) @@ -401,6 +412,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': @@ -452,8 +470,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: @@ -500,9 +517,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