void gimp_error_console_add (GimpErrorConsole *console, GimpMessageSeverity severity, const gchar *domain, const gchar *message) { const gchar *desc; GtkTextIter end; GtkTextMark *end_mark; GdkPixbuf *pixbuf; gchar *str; g_return_if_fail (GIMP_IS_ERROR_CONSOLE (console)); g_return_if_fail (domain != NULL); g_return_if_fail (message != NULL); gimp_enum_get_value (GIMP_TYPE_MESSAGE_SEVERITY, severity, NULL, NULL, &desc, NULL); gtk_text_buffer_get_end_iter (console->text_buffer, &end); pixbuf = gtk_widget_render_icon (console->text_view, gimp_get_message_stock_id (severity), GTK_ICON_SIZE_BUTTON, NULL); gtk_text_buffer_insert_pixbuf (console->text_buffer, &end, pixbuf); g_object_unref (pixbuf); gtk_text_buffer_insert (console->text_buffer, &end, " ", -1); str = g_strdup_printf ("%s %s", domain, desc); gtk_text_buffer_insert_with_tags_by_name (console->text_buffer, &end, str, -1, "title", NULL); g_free (str); gtk_text_buffer_insert (console->text_buffer, &end, "\n", -1); gtk_text_buffer_insert_with_tags_by_name (console->text_buffer, &end, message, -1, "message", NULL); gtk_text_buffer_insert (console->text_buffer, &end, "\n\n", -1); end_mark = gtk_text_buffer_create_mark (console->text_buffer, NULL, &end, TRUE); gtk_text_view_scroll_to_mark (GTK_TEXT_VIEW (console->text_view), end_mark, FALSE, TRUE, 1.0, 0.0); gtk_text_buffer_delete_mark (console->text_buffer, end_mark); }
static gboolean gui_message_error_dialog (Gimp *gimp, GObject *handler, GimpMessageSeverity severity, const gchar *domain, const gchar *message) { GtkWidget *dialog; if (GIMP_IS_PROGRESS (handler)) { /* If there's already an error dialog associated with this * progress, then continue without trying gimp_progress_message(). */ if (! g_object_get_data (handler, "gimp-error-dialog") && gimp_progress_message (GIMP_PROGRESS (handler), gimp, severity, domain, message)) { return TRUE; } } else if (GTK_IS_WIDGET (handler)) { GtkWidget *parent = GTK_WIDGET (handler); GtkMessageType type = GTK_MESSAGE_ERROR; switch (severity) { case GIMP_MESSAGE_INFO: type = GTK_MESSAGE_INFO; break; case GIMP_MESSAGE_WARNING: type = GTK_MESSAGE_WARNING; break; case GIMP_MESSAGE_ERROR: type = GTK_MESSAGE_ERROR; break; } dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (parent)), GTK_DIALOG_DESTROY_WITH_PARENT, type, GTK_BUTTONS_OK, "%s", message); g_signal_connect (dialog, "response", G_CALLBACK (gtk_widget_destroy), NULL); gtk_widget_show (dialog); return TRUE; } if (GIMP_IS_PROGRESS (handler) && ! GIMP_IS_PROGRESS_DIALOG (handler)) dialog = progress_error_dialog (GIMP_PROGRESS (handler)); else dialog = global_error_dialog (); if (dialog) { gimp_error_dialog_add (GIMP_ERROR_DIALOG (dialog), gimp_get_message_stock_id (severity), domain, message); gtk_window_present (GTK_WINDOW (dialog)); return TRUE; } return FALSE; }