helpline.c (1191B)
1// SPDX-License-Identifier: GPL-2.0 2#include <stdio.h> 3#include <string.h> 4#include <linux/kernel.h> 5 6#include "gtk.h" 7#include "../ui.h" 8#include "../helpline.h" 9 10static 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 19static 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 28static 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 49static struct ui_helpline gtk_helpline_fns = { 50 .pop = gtk_helpline_pop, 51 .push = gtk_helpline_push, 52 .show = gtk_helpline_show, 53}; 54 55void perf_gtk__init_helpline(void) 56{ 57 helpline_fns = >k_helpline_fns; 58}