Linux Audio

Check our new training course

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