1 // SPDX-License-Identifier: GPL-2.0 2 #include <stdio.h> 3 #include <string.h> 4 5 #include "gtk.h" 6 #include "../ui.h" 7 #include "../helpline.h" 8 #include "../../util/debug.h" 9 10 static void gtk_helpline_pop(void) 11 { 12 if (!perf_gtk__is_active_context(pgctx)) 13 return; 14 15 gtk_statusbar_pop(GTK_STATUSBAR(pgctx->statbar), 16 pgctx->statbar_ctx_id); 17 } 18 19 static void gtk_helpline_push(const char *msg) 20 { 21 if (!perf_gtk__is_active_context(pgctx)) 22 return; 23 24 gtk_statusbar_push(GTK_STATUSBAR(pgctx->statbar), 25 pgctx->statbar_ctx_id, msg); 26 } 27 28 static int gtk_helpline_show(const char *fmt, va_list ap) 29 { 30 int ret; 31 char *ptr; 32 static int backlog; 33 34 ret = vscnprintf(ui_helpline__current + backlog, 35 sizeof(ui_helpline__current) - backlog, fmt, ap); 36 backlog += ret; 37 38 /* only first line can be displayed */ 39 ptr = strchr(ui_helpline__current, '\n'); 40 if (ptr && (ptr - ui_helpline__current) <= backlog) { 41 *ptr = '\0'; 42 ui_helpline__puts(ui_helpline__current); 43 backlog = 0; 44 } 45 46 return ret; 47 } 48 49 static struct ui_helpline gtk_helpline_fns = { 50 .pop = gtk_helpline_pop, 51 .push = gtk_helpline_push, 52 .show = gtk_helpline_show, 53 }; 54 55 void perf_gtk__init_helpline(void) 56 { 57 helpline_fns = >k_helpline_fns; 58 } 59