[PATCH 3/6] Port to Gtk3 and the new design

Vratislav Podzimek vpodzime at redhat.com
Wed Jul 11 11:59:44 UTC 2012


---
 meh/__init__.py           |    3 +-
 meh/handler.py            |    5 +-
 meh/ui/gui.py             |  119 +++++++++------------
 meh/ui/text.py            |    2 +-
 po/python-meh.pot         |   59 ++++++++----
 setup.py                  |    2 +-
 ui/detailed-dialog.glade  |  171 -------------------------------
 ui/exception-dialog.glade |  248 +++++++++++++++++++++++++++++++++++++++++++++
 8 files changed, 346 insertions(+), 263 deletions(-)
 delete mode 100644 ui/detailed-dialog.glade
 create mode 100644 ui/exception-dialog.glade

diff --git a/meh/__init__.py b/meh/__init__.py
index 2732e66..69352f8 100644
--- a/meh/__init__.py
+++ b/meh/__init__.py
@@ -25,7 +25,8 @@
 # exception is hit.
 MAIN_RESPONSE_DEBUG = 0
 MAIN_RESPONSE_SAVE = 1
-MAIN_RESPONSE_OK = 2
+MAIN_RESPONSE_QUIT = 2
+MAIN_RESPONSE_NONE = 3
 
 # And these constants represent the return values of buttons on the exception
 # saving dialog.
diff --git a/meh/handler.py b/meh/handler.py
index 143c1b9..75dca12 100644
--- a/meh/handler.py
+++ b/meh/handler.py
@@ -80,7 +80,7 @@ class ExceptionHandler(object):
            a subclass.
         """
 
-        responseHash = {MAIN_RESPONSE_OK: self.runQuit,
+        responseHash = {MAIN_RESPONSE_QUIT: self.runQuit,
                         MAIN_RESPONSE_DEBUG: self.runDebug,
                         MAIN_RESPONSE_SAVE: self.runSave}
 
@@ -107,8 +107,7 @@ class ExceptionHandler(object):
             if not win:
                 self.runQuit((ty, value, tb))
 
-            win.run()
-            rc = win.getrc()
+            rc = win.run()
 
             try:
                 responseHash[rc]((ty, value, tb))
diff --git a/meh/ui/gui.py b/meh/ui/gui.py
index ec05739..2b6ff15 100644
--- a/meh/ui/gui.py
+++ b/meh/ui/gui.py
@@ -18,15 +18,14 @@
 #
 from meh import *
 from meh.ui import *
-import gtk
-import gtk.glade
 import os
 import report
+from gi.repository import Gtk
 
 import gettext
 _ = lambda x: gettext.ldgettext("python-meh", x)
 
-def findGladeFile(file):
+def find_glade_file(file):
     path = os.environ.get("GLADEPATH", "./:ui/:/tmp/updates/:/tmp/updates/ui/:/usr/share/python-meh/")
     for d in path.split(":"):
         fn = d + file
@@ -34,14 +33,6 @@ def findGladeFile(file):
             return fn
     raise RuntimeError, "Unable to find glade file %s" % file
 
-def findPixmap(file):
-    path = os.environ.get("PIXMAPPATH", "./:pixmaps/:/tmp/updates/:/tmp/updates/pixmaps/:/usr/share/python-meh/")
-    for d in path.split(":"):
-        fn = d + file
-        if os.access(fn, os.R_OK):
-            return fn
-    return None
-
 class GraphicalIntf(AbstractIntf):
     def __init__(self, *args, **kwargs):
         AbstractIntf.__init__(self, *args, **kwargs)
@@ -83,74 +74,66 @@ class MainExceptionWindow(AbstractMainExceptionWindow):
         AbstractMainExceptionWindow.__init__(self, shortTraceback, longTracebackFile,
                                              *args, **kwargs)
 
-        xml = gtk.glade.XML(findGladeFile("detailed-dialog.glade"), domain="python-meh")
-        self.dialog = xml.get_widget("detailedDialog")
-        self.mainVBox = xml.get_widget("mainVBox")
-        self.hbox = xml.get_widget("hbox1")
-        self.info = xml.get_widget("info")
-        self.detailedExpander = xml.get_widget("detailedExpander")
-        self.detailedView = xml.get_widget("detailedView")
-
-        # Set the custom icon.
-        img = gtk.Image()
-        img.set_from_file(findPixmap("exception.png"))
-        self.hbox.pack_start(img)
-        self.hbox.reorder_child(img, 0)
-
-        # Set the buttons.
-        for (button, response) in [(_("Debu_g"), MAIN_RESPONSE_DEBUG),
-                                   ("gtk-save", MAIN_RESPONSE_SAVE),
-                                   (_("_Exit"), MAIN_RESPONSE_OK)]:
-            self.dialog.add_button(button, response)
-
-        self.dialog.set_default_response(MAIN_RESPONSE_OK)
-
-        self.info.set_text(_("An unhandled exception has occurred.  This "
-                             "is most likely a bug.  Please save a copy "
-                             "of the detailed exception and file a bug "
-                             "report."))
-
-        if longTracebackFile:
-            f = open(longTracebackFile)
-
-            textbuf = gtk.TextBuffer()
-            i = textbuf.get_start_iter()
+        builder = Gtk.Builder()
+        glade_file = find_glade_file("exception-dialog.glade")
+        builder.add_from_file(glade_file)
+        builder.connect_signals(self)
 
-            while True:
-                # Wish readline would give StopIteration at the end of a file.
-                line = f.readline()
-                if line == "":
-                    break
+        self._main_window = builder.get_object("exceptionWindow")
 
-                if __builtins__.get("type")(line) != unicode:
-                    try:
-                        line = unicode(line, encoding='utf-8')
-                    except UnicodeDecodeError:
-                        pass
+        self._traceback_buffer = builder.get_object("tracebackBuffer")
 
-                textbuf.insert(i, line)
+        if longTracebackFile:
+            with open(longTracebackFile) as fobj:
+                long_traceback = ""
+                for line in fobj:
+                    long_traceback += line
 
-            f.close()
-            self.detailedView.set_buffer(textbuf)
-        else:
-            self.mainVBox.remove(self.detailedExpander)
+        self._traceback_buffer.set_text(long_traceback)
+        self._response = MAIN_RESPONSE_QUIT
 
     def destroy(self, *args, **kwargs):
-        self.dialog.destroy()
+        self._main_window.destroy()
 
     def run(self, *args, **kwargs):
-        self.dialog.show_all()
-        self.rc = self.dialog.run()
-        self.dialog.destroy()
+        self._main_window.show_all()
+        Gtk.main()
+        self.destroy()
+        return self._response
+
+    def on_report_clicked(self, button):
+        self._response = MAIN_RESPONSE_SAVE
+        Gtk.main_quit()
+
+    def on_quit_clicked(self, button):
+        self._response = MAIN_RESPONSE_QUIT
+        Gtk.main_quit()
+
+    def on_debug_clicked(self, button):
+        self._response = MAIN_RESPONSE_DEBUG
+        Gtk.main_quit()
+
+    def on_expander_activated(self, expander, *args):
+        if expander.get_expanded():
+            self._main_window.resize(600, 400)
+        else:
+            #resize the window back to the default size when expander is
+            #minimized
+            self._main_window.resize(1, 1)
+
+    def on_main_window_deleted(self, *args):
+        self._response = MAIN_RESPONSE_NONE
+        self.destroy()
+        Gtk.main_quit()
 
 class MessageWindow(AbstractMessageWindow):
     def __init__(self, title, text, *args, **kwargs):
         AbstractMessageWindow.__init__(self, title, text, *args, **kwargs)
-        self.dialog = gtk.MessageDialog(buttons=gtk.BUTTONS_OK,
-                                        type=gtk.MESSAGE_INFO,
+        self.dialog = Gtk.MessageDialog(buttons=Gtk.ButtonsType.OK,
+                                        type=Gtk.MessageType.INFO,
                                         message_format=text)
         self.dialog.set_title(title)
-        self.dialog.set_position(gtk.WIN_POS_CENTER)
+        self.dialog.set_position(Gtk.WindowPosition.CENTER)
 
     def destroy(self, *args, **kwargs):
         self.dialog.destroy()
@@ -162,9 +145,9 @@ class MessageWindow(AbstractMessageWindow):
 
 class ExitWindow(MessageWindow):
     def __init__(self, title, text, *args, **kwargs):
-        self.dialog = gtk.MessageDialog(buttons=gtk.BUTTONS_NONE,
-                                        type=gtk.MESSAGE_INFO,
+        self.dialog = Gtk.MessageDialog(buttons=Gtk.ButtonsType.NONE,
+                                        type=Gtk.MessageType.INFO,
                                         message_format=text)
         self.dialog.set_title(title)
         self.dialog.add_button(_("_Exit"), 0)
-        self.dialog.set_position(gtk.WIN_POS_CENTER)
+        self.dialog.set_position(Gtk.WindowPosition.CENTER)
diff --git a/meh/ui/text.py b/meh/ui/text.py
index 5dd6fe1..717212e 100644
--- a/meh/ui/text.py
+++ b/meh/ui/text.py
@@ -85,7 +85,7 @@ class MainExceptionWindow(AbstractMainExceptionWindow):
         elif response == string.lower(_("Save")):
             return MAIN_RESPONSE_SAVE
         else:
-            return MAIN_RESPONSE_OK
+            return MAIN_RESPONSE_QUIT
 
 class MessageWindow(AbstractMessageWindow):
     def __init__(self, title, text, *args, **kwargs):
diff --git a/po/python-meh.pot b/po/python-meh.pot
index b291941..ab22b61 100644
--- a/po/python-meh.pot
+++ b/po/python-meh.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-14 10:26+0200\n"
+"POT-Creation-Date: 2012-07-09 14:33+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -17,45 +17,68 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: ../meh/ui/text.py:73 ../meh/ui/text.py:100
+#: ../meh/ui/text.py:73 ../meh/ui/text.py:99
 msgid "OK"
 msgstr ""
 
-#: ../meh/ui/text.py:73 ../meh/ui/text.py:82
+#: ../meh/ui/text.py:73 ../meh/ui/text.py:85
 msgid "Save"
 msgstr ""
 
-#: ../meh/ui/text.py:73 ../meh/ui/text.py:80
+#: ../meh/ui/text.py:73 ../meh/ui/text.py:83
 msgid "Debug"
 msgstr ""
 
-#: ../meh/ui/text.py:88
+#: ../meh/ui/text.py:80
 msgid "Exception Occurred"
 msgstr ""
 
-#: ../meh/ui/text.py:114
+#: ../meh/ui/text.py:113
 msgid "Exit"
 msgstr ""
 
-#. Set the buttons.
-#: ../meh/ui/gui.py:101
-msgid "Debu_g"
+#: ../meh/ui/gui.py:150
+msgid "_Exit"
 msgstr ""
 
-#: ../meh/ui/gui.py:103 ../meh/ui/gui.py:169
-msgid "_Exit"
+#: tmp/exception-dialog.glade.h:1 tmp/exception-dialog-new.glade.h:1
+msgid "'Debug' will take you to tty1. Press Ctrl + Alt + F6 to return."
+msgstr ""
+
+#: tmp/exception-dialog.glade.h:2 tmp/exception-dialog-new.glade.h:2
+msgid "An unknown error has occured"
+msgstr ""
+
+#: tmp/exception-dialog.glade.h:3
+msgid "More _info..."
+msgstr ""
+
+#: tmp/exception-dialog.glade.h:4 tmp/exception-dialog-new.glade.h:4
+msgid "No additional info available."
+msgstr ""
+
+#: tmp/exception-dialog.glade.h:5 tmp/exception-dialog-new.glade.h:5
+msgid "The output below may help determine the cause of the error:"
 msgstr ""
 
-#: ../meh/ui/gui.py:108
+#: tmp/exception-dialog.glade.h:6 tmp/exception-dialog-new.glade.h:6
 msgid ""
-"An unhandled exception has occurred.  This is most likely a bug.  Please "
-"save a copy of the detailed exception and file a bug report."
+"This program has encountered an unknown error. You may\n"
+"report the bug bellow or quit the program."
+msgstr ""
+
+#: tmp/exception-dialog.glade.h:8 tmp/exception-dialog-new.glade.h:8
+msgid "_Debug"
+msgstr ""
+
+#: tmp/exception-dialog.glade.h:9 tmp/exception-dialog-new.glade.h:9
+msgid "_Quit"
 msgstr ""
 
-#: tmp/detailed-dialog.glade.h:1
-msgid "Info"
+#: tmp/exception-dialog.glade.h:10 tmp/exception-dialog-new.glade.h:10
+msgid "_Report Bug"
 msgstr ""
 
-#: tmp/detailed-dialog.glade.h:2
-msgid "_Details"
+#: tmp/exception-dialog-new.glade.h:3
+msgid "More info..."
 msgstr ""
diff --git a/setup.py b/setup.py
index ab48424..5d5628f 100644
--- a/setup.py
+++ b/setup.py
@@ -6,5 +6,5 @@ setup(name='python-meh', version='0.13',
       description='Python module for handling exceptions',
       author='Chris Lumens', author_email='clumens at redhat.com',
       url='http://git.fedoraproject.org/git/?p=python-meh.git',
-      data_files = [('/usr/share/python-meh', ['ui/detailed-dialog.glade', 'pixmaps/exception.png'])],
+      data_files = [('/usr/share/python-meh', ['ui/exception-dialog.glade'])],
       packages=['meh', 'meh.ui'])
diff --git a/ui/detailed-dialog.glade b/ui/detailed-dialog.glade
deleted file mode 100644
index 61fca36..0000000
--- a/ui/detailed-dialog.glade
+++ /dev/null
@@ -1,171 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
-<glade-interface>
-
-<widget class="GtkDialog" id="detailedDialog">
-  <property name="visible">True</property>
-  <property name="title">Exception Occurred</property>
-  <property name="type">GTK_WINDOW_TOPLEVEL</property>
-  <property name="window_position">GTK_WIN_POS_CENTER</property>
-  <property name="modal">True</property>
-  <property name="default_width">550</property>
-  <property name="default_height">400</property>
-  <property name="resizable">True</property>
-  <property name="destroy_with_parent">False</property>
-  <property name="decorated">True</property>
-  <property name="skip_taskbar_hint">False</property>
-  <property name="skip_pager_hint">False</property>
-  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
-  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
-  <property name="focus_on_map">True</property>
-  <property name="urgency_hint">False</property>
-  <property name="has_separator">True</property>
-
-  <child internal-child="vbox">
-    <widget class="GtkVBox" id="detailedDialog-vbox">
-      <property name="visible">True</property>
-      <property name="homogeneous">False</property>
-      <property name="spacing">12</property>
-
-      <child internal-child="action_area">
-	<widget class="GtkHButtonBox" id="buttonBox">
-	  <property name="visible">True</property>
-	  <property name="layout_style">GTK_BUTTONBOX_END</property>
-	</widget>
-	<packing>
-	  <property name="padding">0</property>
-	  <property name="expand">False</property>
-	  <property name="fill">True</property>
-	  <property name="pack_type">GTK_PACK_END</property>
-	</packing>
-      </child>
-
-      <child>
-	<widget class="GtkVBox" id="mainVBox">
-	  <property name="visible">True</property>
-	  <property name="homogeneous">False</property>
-	  <property name="spacing">12</property>
-
-	  <child>
-	    <widget class="GtkHBox" id="hbox1">
-	      <property name="visible">True</property>
-	      <property name="homogeneous">False</property>
-	      <property name="spacing">6</property>
-
-	      <child>
-		<placeholder/>
-	      </child>
-
-	      <child>
-		<widget class="GtkLabel" id="info">
-		  <property name="visible">True</property>
-		  <property name="label" translatable="yes">Info</property>
-		  <property name="use_underline">False</property>
-		  <property name="use_markup">False</property>
-		  <property name="justify">GTK_JUSTIFY_LEFT</property>
-		  <property name="wrap">True</property>
-		  <property name="selectable">False</property>
-		  <property name="xalign">0</property>
-		  <property name="yalign">0.5</property>
-		  <property name="xpad">0</property>
-		  <property name="ypad">0</property>
-		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-		  <property name="width_chars">-1</property>
-		  <property name="single_line_mode">False</property>
-		  <property name="angle">0</property>
-		</widget>
-		<packing>
-		  <property name="padding">0</property>
-		  <property name="expand">True</property>
-		  <property name="fill">True</property>
-		</packing>
-	      </child>
-	    </widget>
-	    <packing>
-	      <property name="padding">0</property>
-	      <property name="expand">False</property>
-	      <property name="fill">False</property>
-	    </packing>
-	  </child>
-
-	  <child>
-	    <widget class="GtkExpander" id="detailedExpander">
-	      <property name="visible">True</property>
-	      <property name="can_focus">True</property>
-	      <property name="expanded">False</property>
-	      <property name="spacing">0</property>
-
-	      <child>
-		<widget class="GtkScrolledWindow" id="scrolledwindow2">
-		  <property name="visible">True</property>
-		  <property name="can_focus">True</property>
-		  <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-		  <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-		  <property name="shadow_type">GTK_SHADOW_IN</property>
-		  <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
-		  <child>
-		    <widget class="GtkTextView" id="detailedView">
-		      <property name="visible">True</property>
-		      <property name="can_focus">True</property>
-		      <property name="editable">False</property>
-		      <property name="overwrite">False</property>
-		      <property name="accepts_tab">True</property>
-		      <property name="justification">GTK_JUSTIFY_LEFT</property>
-		      <property name="wrap_mode">GTK_WRAP_NONE</property>
-		      <property name="cursor_visible">False</property>
-		      <property name="pixels_above_lines">0</property>
-		      <property name="pixels_below_lines">0</property>
-		      <property name="pixels_inside_wrap">0</property>
-		      <property name="left_margin">0</property>
-		      <property name="right_margin">0</property>
-		      <property name="indent">0</property>
-		      <property name="text" translatable="yes"></property>
-		    </widget>
-		  </child>
-		</widget>
-	      </child>
-
-	      <child>
-		<widget class="GtkLabel" id="label1">
-		  <property name="visible">True</property>
-		  <property name="label" translatable="yes">_Details</property>
-		  <property name="use_underline">True</property>
-		  <property name="use_markup">False</property>
-		  <property name="justify">GTK_JUSTIFY_LEFT</property>
-		  <property name="wrap">False</property>
-		  <property name="selectable">False</property>
-		  <property name="xalign">0.5</property>
-		  <property name="yalign">0.5</property>
-		  <property name="xpad">0</property>
-		  <property name="ypad">0</property>
-		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-		  <property name="width_chars">-1</property>
-		  <property name="single_line_mode">False</property>
-		  <property name="angle">0</property>
-		</widget>
-		<packing>
-		  <property name="type">label_item</property>
-		</packing>
-	      </child>
-	    </widget>
-	    <packing>
-	      <property name="padding">0</property>
-	      <property name="expand">True</property>
-	      <property name="fill">True</property>
-	      <property name="pack_type">GTK_PACK_END</property>
-	    </packing>
-	  </child>
-	</widget>
-	<packing>
-	  <property name="padding">0</property>
-	  <property name="expand">True</property>
-	  <property name="fill">True</property>
-	</packing>
-      </child>
-    </widget>
-  </child>
-</widget>
-
-</glade-interface>
diff --git a/ui/exception-dialog.glade b/ui/exception-dialog.glade
new file mode 100644
index 0000000..89b62c2
--- /dev/null
+++ b/ui/exception-dialog.glade
@@ -0,0 +1,248 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkWindow" id="exceptionWindow">
+    <property name="can_focus">False</property>
+    <property name="window_position">center</property>
+    <signal name="delete-event" handler="on_main_window_deleted" swapped="no"/>
+    <child>
+      <object class="GtkBox" id="mainBox">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
+        <child>
+          <object class="GtkBox" id="box1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="halign">start</property>
+            <property name="valign">center</property>
+            <property name="margin_left">20</property>
+            <property name="margin_top">30</property>
+            <child>
+              <object class="GtkImage" id="image1">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="stock">gtk-dialog-warning</property>
+                <property name="icon-size">5</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="padding">7</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="titleLabel">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">An unknown error has occured</property>
+                <attributes>
+                  <attribute name="weight" value="bold"/>
+                  <attribute name="scale" value="1.1000000000000001"/>
+                </attributes>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="explainLabel">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="halign">start</property>
+            <property name="valign">start</property>
+            <property name="margin_left">40</property>
+            <property name="margin_right">40</property>
+            <property name="label" translatable="yes">This program has encountered an unknown error. You may
+report the bug bellow or quit the program.</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="padding">21</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkButtonBox" id="buttonbox1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="valign">start</property>
+            <property name="margin_right">20</property>
+            <property name="spacing">10</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="reportButton">
+                <property name="label" translatable="yes">_Report Bug</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_action_appearance">False</property>
+                <property name="use_underline">True</property>
+                <signal name="clicked" handler="on_report_clicked" swapped="no"/>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="quitButton">
+                <property name="label" translatable="yes">_Quit</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_action_appearance">False</property>
+                <property name="use_underline">True</property>
+                <signal name="clicked" handler="on_quit_clicked" swapped="no"/>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkExpander" id="expander">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="margin_left">10</property>
+            <property name="margin_right">10</property>
+            <property name="margin_bottom">10</property>
+            <property name="use_underline">True</property>
+            <signal name="activate" handler="on_expander_activated" swapped="no"/>
+            <child>
+              <object class="GtkBox" id="box2">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="vexpand">True</property>
+                <property name="orientation">vertical</property>
+                <property name="spacing">6</property>
+                <child>
+                  <object class="GtkLabel" id="commentLabel">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="halign">start</property>
+                    <property name="margin_left">2</property>
+                    <property name="xalign">0.10000000149011612</property>
+                    <property name="label" translatable="yes">The output below may help determine the cause of the error:</property>
+                    <attributes>
+                      <attribute name="style" value="italic"/>
+                    </attributes>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkScrolledWindow" id="tracebackScrolledWindow">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="vexpand">True</property>
+                    <property name="shadow_type">in</property>
+                    <child>
+                      <object class="GtkTextView" id="tracebackView">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="vscroll_policy">natural</property>
+                        <property name="editable">False</property>
+                        <property name="cursor_visible">False</property>
+                        <property name="buffer">tracebackBuffer</property>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkBox" id="bottomBox">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="spacing">4</property>
+                    <child>
+                      <object class="GtkLabel" id="warningLabel">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">0.89999997615814209</property>
+                        <property name="label" translatable="yes">'Debug' will take you to tty1. Press Ctrl + Alt + F6 to return.</property>
+                        <attributes>
+                          <attribute name="style" value="italic"/>
+                          <attribute name="scale" value="0.80000000000000004"/>
+                        </attributes>
+                      </object>
+                      <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkButton" id="debugButton">
+                        <property name="label" translatable="yes">_Debug</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">True</property>
+                        <property name="use_action_appearance">False</property>
+                        <property name="use_underline">True</property>
+                        <signal name="clicked" handler="on_debug_clicked" swapped="no"/>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">2</property>
+                  </packing>
+                </child>
+              </object>
+            </child>
+            <child type="label">
+              <object class="GtkLabel" id="expanderLabel">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">More _info...</property>
+                <property name="use_underline">True</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">3</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+  <object class="GtkTextBuffer" id="tracebackBuffer">
+    <property name="text" translatable="yes">No additional info available.</property>
+  </object>
+</interface>
-- 
1.7.4.4



More information about the anaconda-patches mailing list