def _info(type_, value, tb): if not _exception_in_progress.acquire(False): # Exceptions have piled up, so we use the default exception # handler for such exceptions _excepthook_save(type_, value, tb) return dialog = HigDialog( None, Gtk.MessageType.WARNING, Gtk.ButtonsType.NONE, _('A programming error has been detected'), _('It probably is not fatal, but should be reported ' 'to the developers nonetheless.')) dialog.set_modal(False) #FIXME: add icon to this button RESPONSE_REPORT_BUG = 42 dialog.add_buttons(Gtk.STOCK_CLOSE, Gtk.ButtonsType.CLOSE, _('_Report Bug'), RESPONSE_REPORT_BUG) report_button = dialog.action_area.get_children()[0] # right to left report_button.grab_focus() # Details textview = Gtk.TextView() textview.set_editable(False) textview.override_font(Pango.FontDescription('Monospace')) sw = Gtk.ScrolledWindow() sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw.add(textview) frame = Gtk.Frame() frame.set_shadow_type(Gtk.ShadowType.IN) frame.add(sw) frame.set_border_width(6) textbuffer = textview.get_buffer() trace = StringIO() traceback.print_exception(type_, value, tb, None, trace) textbuffer.set_text(trace.getvalue()) textview.set_size_request(Gdk.Screen.width() / 3, Gdk.Screen.height() / 4) expander = Gtk.Expander(label=_('Details')) expander.add(frame) dialog.vbox.pack_start(expander, True, True, 0) dialog.set_resizable(True) # on expand the details the dialog remains centered on screen dialog.set_position(Gtk.WindowPosition.CENTER_ALWAYS) def on_dialog_response(dialog, response): if response == RESPONSE_REPORT_BUG: url = 'http://trac.gajim.org/wiki/HowToCreateATicket' helpers.launch_browser_mailer('url', url) else: dialog.destroy() dialog.connect('response', on_dialog_response) dialog.show_all() _exception_in_progress.release()
def _info(type_, value, tb): if not _exception_in_progress.acquire(False): # Exceptions have piled up, so we use the default exception # handler for such exceptions _excepthook_save(type_, value, tb) return dialog = HigDialog(None, Gtk.MessageType.WARNING, Gtk.ButtonsType.NONE, _('A programming error has been detected'), _('It probably is not fatal, but should be reported ' 'to the developers nonetheless.')) dialog.set_modal(False) #FIXME: add icon to this button RESPONSE_REPORT_BUG = 42 dialog.add_buttons(Gtk.STOCK_CLOSE, Gtk.ButtonsType.CLOSE, _('_Report Bug'), RESPONSE_REPORT_BUG) report_button = dialog.action_area.get_children()[0] # right to left report_button.grab_focus() # Details textview = Gtk.TextView() textview.set_editable(False) textview.override_font(Pango.FontDescription('Monospace')) sw = Gtk.ScrolledWindow() sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw.add(textview) frame = Gtk.Frame() frame.set_shadow_type(Gtk.ShadowType.IN) frame.add(sw) frame.set_border_width(6) textbuffer = textview.get_buffer() trace = StringIO() traceback.print_exception(type_, value, tb, None, trace) textbuffer.set_text(trace.getvalue()) textview.set_size_request( Gdk.Screen.width() / 3, Gdk.Screen.height() / 4) expander = Gtk.Expander(label=_('Details')) expander.add(frame) dialog.vbox.pack_start(expander, True, True, 0) dialog.set_resizable(True) # on expand the details the dialog remains centered on screen dialog.set_position(Gtk.WindowPosition.CENTER_ALWAYS) def on_dialog_response(dialog, response): if response == RESPONSE_REPORT_BUG: url = 'http://trac.gajim.org/wiki/HowToCreateATicket' helpers.launch_browser_mailer('url', url) else: dialog.destroy() dialog.connect('response', on_dialog_response) dialog.show_all() _exception_in_progress.release()