Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
  1#include "../util.h"
  2#include "../../util/debug.h"
  3#include "gtk.h"
  4
  5#include <string.h>
  6
  7
  8struct perf_gtk_context *pgctx;
  9
 10struct perf_gtk_context *perf_gtk__activate_context(GtkWidget *window)
 11{
 12	struct perf_gtk_context *ctx;
 13
 14	ctx = malloc(sizeof(*pgctx));
 15	if (ctx)
 16		ctx->main_window = window;
 17
 18	return ctx;
 19}
 20
 21int perf_gtk__deactivate_context(struct perf_gtk_context **ctx)
 22{
 23	if (!perf_gtk__is_active_context(*ctx))
 24		return -1;
 25
 26	zfree(ctx);
 27	return 0;
 28}
 29
 30static int perf_gtk__error(const char *format, va_list args)
 31{
 32	char *msg;
 33	GtkWidget *dialog;
 34
 35	if (!perf_gtk__is_active_context(pgctx) ||
 36	    vasprintf(&msg, format, args) < 0) {
 37		fprintf(stderr, "Error:\n");
 38		vfprintf(stderr, format, args);
 39		fprintf(stderr, "\n");
 40		return -1;
 41	}
 42
 43	dialog = gtk_message_dialog_new_with_markup(GTK_WINDOW(pgctx->main_window),
 44					GTK_DIALOG_DESTROY_WITH_PARENT,
 45					GTK_MESSAGE_ERROR,
 46					GTK_BUTTONS_CLOSE,
 47					"<b>Error</b>\n\n%s", msg);
 48	gtk_dialog_run(GTK_DIALOG(dialog));
 49
 50	gtk_widget_destroy(dialog);
 51	free(msg);
 52	return 0;
 53}
 54
 55#ifdef HAVE_GTK_INFO_BAR_SUPPORT
 56static int perf_gtk__warning_info_bar(const char *format, va_list args)
 57{
 58	char *msg;
 59
 60	if (!perf_gtk__is_active_context(pgctx) ||
 61	    vasprintf(&msg, format, args) < 0) {
 62		fprintf(stderr, "Warning:\n");
 63		vfprintf(stderr, format, args);
 64		fprintf(stderr, "\n");
 65		return -1;
 66	}
 67
 68	gtk_label_set_text(GTK_LABEL(pgctx->message_label), msg);
 69	gtk_info_bar_set_message_type(GTK_INFO_BAR(pgctx->info_bar),
 70				      GTK_MESSAGE_WARNING);
 71	gtk_widget_show(pgctx->info_bar);
 72
 73	free(msg);
 74	return 0;
 75}
 76#else
 77static int perf_gtk__warning_statusbar(const char *format, va_list args)
 78{
 79	char *msg, *p;
 80
 81	if (!perf_gtk__is_active_context(pgctx) ||
 82	    vasprintf(&msg, format, args) < 0) {
 83		fprintf(stderr, "Warning:\n");
 84		vfprintf(stderr, format, args);
 85		fprintf(stderr, "\n");
 86		return -1;
 87	}
 88
 89	gtk_statusbar_pop(GTK_STATUSBAR(pgctx->statbar),
 90			  pgctx->statbar_ctx_id);
 91
 92	/* Only first line can be displayed */
 93	p = strchr(msg, '\n');
 94	if (p)
 95		*p = '\0';
 96
 97	gtk_statusbar_push(GTK_STATUSBAR(pgctx->statbar),
 98			   pgctx->statbar_ctx_id, msg);
 99
100	free(msg);
101	return 0;
102}
103#endif
104
105struct perf_error_ops perf_gtk_eops = {
106	.error		= perf_gtk__error,
107#ifdef HAVE_GTK_INFO_BAR_SUPPORT
108	.warning	= perf_gtk__warning_info_bar,
109#else
110	.warning	= perf_gtk__warning_statusbar,
111#endif
112};