summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiri Moskovcak <jmoskovc@redhat.com>2010-03-08 17:32:04 +0100
committerJiri Moskovcak <jmoskovc@redhat.com>2010-03-08 17:32:04 +0100
commite74c5cb7835d2e6e3ddbeee69023995304d08264 (patch)
tree919c788c3ec6000ecd4e383cdf213586f89407bf
parenta799b20e533e0b55b5b85d887ea3a7d13254c11d (diff)
downloadabrt-e74c5cb7835d2e6e3ddbeee69023995304d08264.tar.gz
abrt-e74c5cb7835d2e6e3ddbeee69023995304d08264.tar.xz
abrt-e74c5cb7835d2e6e3ddbeee69023995304d08264.zip
GUI: added option to run without main window v3
-rw-r--r--src/Gui/CCDumpList.py5
-rw-r--r--src/Gui/CCMainWindow.py54
-rw-r--r--src/Gui/CCReporterDialog.py34
-rwxr-xr-xsrc/Gui/abrt-gui2
4 files changed, 70 insertions, 25 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=<crashid>\tdirectly report crash with crashid=<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):
diff --git a/src/Gui/abrt-gui b/src/Gui/abrt-gui
index 78379be..059d867 100755
--- a/src/Gui/abrt-gui
+++ b/src/Gui/abrt-gui
@@ -1,5 +1,5 @@
#!/bin/sh
-if test x"$1" = x"--help" || test x"$1" = x"--version"; then
+if test x"$1" = x"--version"; then
echo "abrt-gui VERSION"
exit 0
fi