static void gtk_assert_dialog_copy_callback(GtkWidget*, GtkAssertDialog* dlg) { char *msg, *backtrace; GtkClipboard *clipboard; GString *str; msg = gtk_assert_dialog_get_message (dlg); backtrace = gtk_assert_dialog_get_backtrace (dlg); /* combine both in a single string */ str = g_string_new(""); g_string_printf (str, "ASSERT INFO:\n%s\n\nBACKTRACE:\n%s\n\n", msg, backtrace); /* copy everything in default clipboard */ clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD); gtk_clipboard_set_text (clipboard, str->str, str->len); /* copy everything in primary clipboard too */ clipboard = gtk_clipboard_get (GDK_SELECTION_PRIMARY); gtk_clipboard_set_text (clipboard, str->str, str->len); g_free (msg); g_free (backtrace); g_string_free (str, TRUE); }
void gtk_assert_dialog_save_backtrace_callback (GtkWidget *widget, GtkAssertDialog *dlg) { GtkWidget *dialog; dialog = gtk_file_chooser_dialog_new ("Save assert info to file", GTK_WINDOW(dlg), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) { char *filename, *msg, *backtrace; FILE *fp; filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); msg = gtk_assert_dialog_get_message (dlg); backtrace = gtk_assert_dialog_get_backtrace (dlg); /* open the file and write all info inside it */ fp = fopen (filename, "w"); if (fp && filename) fprintf (fp, "ASSERT INFO:\n%s\n\nBACKTRACE:\n%s", msg, backtrace); g_free (filename); g_free (msg); g_free (backtrace); fclose (fp); } gtk_widget_destroy (dialog); }