 1254b51e32
			
		
	
	
	1254b51e32
	
	
	
		
			
			For building perf without libnewt, we can set NO_NEWT=1 as a argument of make. It then defines NO_NEWT_SUPPORT macro for C code to do the proper handling. However it usually used in a negative semantics - e.g. #ifndef - so we saw double negations which can be misleading. Convert it to a positive form to make it more readable. Signed-off-by: Namhyung Kim <namhyung@kernel.org> Cc: Ingo Molnar <mingo@kernel.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Link: http://lkml.kernel.org/r/1348824728-14025-7-git-send-email-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
		
			
				
	
	
		
			124 lines
		
	
	
	
		
			2.6 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
	
		
			2.6 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
 | |
| 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
 | |
| 	.warning	= perf_gtk__warning_info_bar,
 | |
| #else
 | |
| 	.warning	= perf_gtk__warning_statusbar,
 | |
| #endif
 | |
| };
 | |
| 
 | |
| /*
 | |
|  * FIXME: Functions below should be implemented properly.
 | |
|  *        For now, just add stubs for NO_NEWT=1 build.
 | |
|  */
 | |
| #ifndef NEWT_SUPPORT
 | |
| void ui_progress__update(u64 curr __maybe_unused, u64 total __maybe_unused,
 | |
| 			 const char *title __maybe_unused)
 | |
| {
 | |
| }
 | |
| #endif
 |