Standardize all the feature flags based on the HAVE_{FEATURE}_SUPPORT naming convention:
		HAVE_ARCH_X86_64_SUPPORT
		HAVE_BACKTRACE_SUPPORT
		HAVE_CPLUS_DEMANGLE_SUPPORT
		HAVE_DWARF_SUPPORT
		HAVE_ELF_GETPHDRNUM_SUPPORT
		HAVE_GTK2_SUPPORT
		HAVE_GTK_INFO_BAR_SUPPORT
		HAVE_LIBAUDIT_SUPPORT
		HAVE_LIBELF_MMAP_SUPPORT
		HAVE_LIBELF_SUPPORT
		HAVE_LIBNUMA_SUPPORT
		HAVE_LIBUNWIND_SUPPORT
		HAVE_ON_EXIT_SUPPORT
		HAVE_PERF_REGS_SUPPORT
		HAVE_SLANG_SUPPORT
		HAVE_STRLCPY_SUPPORT
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lkml.kernel.org/n/tip-u3zvqejddfZhtrbYbfhi3spa@git.kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
		
	
			
		
			
				
	
	
		
			113 lines
		
	
	
	
		
			2.3 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
	
		
			2.3 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
#include "../util.h"
 | 
						|
#include "../../util/debug.h"
 | 
						|
#include "gtk.h"
 | 
						|
 | 
						|
#include <string.h>
 | 
						|
 | 
						|
 | 
						|
struct perf_gtk_context *pgctx;
 | 
						|
 | 
						|
struct perf_gtk_context *perf_gtk__activate_context(GtkWidget *window)
 | 
						|
{
 | 
						|
	struct perf_gtk_context *ctx;
 | 
						|
 | 
						|
	ctx = malloc(sizeof(*pgctx));
 | 
						|
	if (ctx)
 | 
						|
		ctx->main_window = window;
 | 
						|
 | 
						|
	return ctx;
 | 
						|
}
 | 
						|
 | 
						|
int perf_gtk__deactivate_context(struct perf_gtk_context **ctx)
 | 
						|
{
 | 
						|
	if (!perf_gtk__is_active_context(*ctx))
 | 
						|
		return -1;
 | 
						|
 | 
						|
	free(*ctx);
 | 
						|
	*ctx = NULL;
 | 
						|
	return 0;
 | 
						|
}
 | 
						|
 | 
						|
static int perf_gtk__error(const char *format, va_list args)
 | 
						|
{
 | 
						|
	char *msg;
 | 
						|
	GtkWidget *dialog;
 | 
						|
 | 
						|
	if (!perf_gtk__is_active_context(pgctx) ||
 | 
						|
	    vasprintf(&msg, format, args) < 0) {
 | 
						|
		fprintf(stderr, "Error:\n");
 | 
						|
		vfprintf(stderr, format, args);
 | 
						|
		fprintf(stderr, "\n");
 | 
						|
		return -1;
 | 
						|
	}
 | 
						|
 | 
						|
	dialog = gtk_message_dialog_new_with_markup(GTK_WINDOW(pgctx->main_window),
 | 
						|
					GTK_DIALOG_DESTROY_WITH_PARENT,
 | 
						|
					GTK_MESSAGE_ERROR,
 | 
						|
					GTK_BUTTONS_CLOSE,
 | 
						|
					"<b>Error</b>\n\n%s", msg);
 | 
						|
	gtk_dialog_run(GTK_DIALOG(dialog));
 | 
						|
 | 
						|
	gtk_widget_destroy(dialog);
 | 
						|
	free(msg);
 | 
						|
	return 0;
 | 
						|
}
 | 
						|
 | 
						|
#ifdef HAVE_GTK_INFO_BAR_SUPPORT
 | 
						|
static int perf_gtk__warning_info_bar(const char *format, va_list args)
 | 
						|
{
 | 
						|
	char *msg;
 | 
						|
 | 
						|
	if (!perf_gtk__is_active_context(pgctx) ||
 | 
						|
	    vasprintf(&msg, format, args) < 0) {
 | 
						|
		fprintf(stderr, "Warning:\n");
 | 
						|
		vfprintf(stderr, format, args);
 | 
						|
		fprintf(stderr, "\n");
 | 
						|
		return -1;
 | 
						|
	}
 | 
						|
 | 
						|
	gtk_label_set_text(GTK_LABEL(pgctx->message_label), msg);
 | 
						|
	gtk_info_bar_set_message_type(GTK_INFO_BAR(pgctx->info_bar),
 | 
						|
				      GTK_MESSAGE_WARNING);
 | 
						|
	gtk_widget_show(pgctx->info_bar);
 | 
						|
 | 
						|
	free(msg);
 | 
						|
	return 0;
 | 
						|
}
 | 
						|
#else
 | 
						|
static int perf_gtk__warning_statusbar(const char *format, va_list args)
 | 
						|
{
 | 
						|
	char *msg, *p;
 | 
						|
 | 
						|
	if (!perf_gtk__is_active_context(pgctx) ||
 | 
						|
	    vasprintf(&msg, format, args) < 0) {
 | 
						|
		fprintf(stderr, "Warning:\n");
 | 
						|
		vfprintf(stderr, format, args);
 | 
						|
		fprintf(stderr, "\n");
 | 
						|
		return -1;
 | 
						|
	}
 | 
						|
 | 
						|
	gtk_statusbar_pop(GTK_STATUSBAR(pgctx->statbar),
 | 
						|
			  pgctx->statbar_ctx_id);
 | 
						|
 | 
						|
	/* Only first line can be displayed */
 | 
						|
	p = strchr(msg, '\n');
 | 
						|
	if (p)
 | 
						|
		*p = '\0';
 | 
						|
 | 
						|
	gtk_statusbar_push(GTK_STATUSBAR(pgctx->statbar),
 | 
						|
			   pgctx->statbar_ctx_id, msg);
 | 
						|
 | 
						|
	free(msg);
 | 
						|
	return 0;
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
struct perf_error_ops perf_gtk_eops = {
 | 
						|
	.error		= perf_gtk__error,
 | 
						|
#ifdef HAVE_GTK_INFO_BAR_SUPPORT
 | 
						|
	.warning	= perf_gtk__warning_info_bar,
 | 
						|
#else
 | 
						|
	.warning	= perf_gtk__warning_statusbar,
 | 
						|
#endif
 | 
						|
};
 |