Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

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