18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ci#include <stdio.h> 38c2ecf20Sopenharmony_ci#include <string.h> 48c2ecf20Sopenharmony_ci#include <linux/kernel.h> 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci#include "gtk.h" 78c2ecf20Sopenharmony_ci#include "../ui.h" 88c2ecf20Sopenharmony_ci#include "../helpline.h" 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_cistatic void gtk_helpline_pop(void) 118c2ecf20Sopenharmony_ci{ 128c2ecf20Sopenharmony_ci if (!perf_gtk__is_active_context(pgctx)) 138c2ecf20Sopenharmony_ci return; 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ci gtk_statusbar_pop(GTK_STATUSBAR(pgctx->statbar), 168c2ecf20Sopenharmony_ci pgctx->statbar_ctx_id); 178c2ecf20Sopenharmony_ci} 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_cistatic void gtk_helpline_push(const char *msg) 208c2ecf20Sopenharmony_ci{ 218c2ecf20Sopenharmony_ci if (!perf_gtk__is_active_context(pgctx)) 228c2ecf20Sopenharmony_ci return; 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci gtk_statusbar_push(GTK_STATUSBAR(pgctx->statbar), 258c2ecf20Sopenharmony_ci pgctx->statbar_ctx_id, msg); 268c2ecf20Sopenharmony_ci} 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_cistatic int gtk_helpline_show(const char *fmt, va_list ap) 298c2ecf20Sopenharmony_ci{ 308c2ecf20Sopenharmony_ci int ret; 318c2ecf20Sopenharmony_ci char *ptr; 328c2ecf20Sopenharmony_ci static int backlog; 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_ci ret = vscnprintf(ui_helpline__current + backlog, 358c2ecf20Sopenharmony_ci sizeof(ui_helpline__current) - backlog, fmt, ap); 368c2ecf20Sopenharmony_ci backlog += ret; 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_ci /* only first line can be displayed */ 398c2ecf20Sopenharmony_ci ptr = strchr(ui_helpline__current, '\n'); 408c2ecf20Sopenharmony_ci if (ptr && (ptr - ui_helpline__current) <= backlog) { 418c2ecf20Sopenharmony_ci *ptr = '\0'; 428c2ecf20Sopenharmony_ci ui_helpline__puts(ui_helpline__current); 438c2ecf20Sopenharmony_ci backlog = 0; 448c2ecf20Sopenharmony_ci } 458c2ecf20Sopenharmony_ci 468c2ecf20Sopenharmony_ci return ret; 478c2ecf20Sopenharmony_ci} 488c2ecf20Sopenharmony_ci 498c2ecf20Sopenharmony_cistatic struct ui_helpline gtk_helpline_fns = { 508c2ecf20Sopenharmony_ci .pop = gtk_helpline_pop, 518c2ecf20Sopenharmony_ci .push = gtk_helpline_push, 528c2ecf20Sopenharmony_ci .show = gtk_helpline_show, 538c2ecf20Sopenharmony_ci}; 548c2ecf20Sopenharmony_ci 558c2ecf20Sopenharmony_civoid perf_gtk__init_helpline(void) 568c2ecf20Sopenharmony_ci{ 578c2ecf20Sopenharmony_ci helpline_fns = >k_helpline_fns; 588c2ecf20Sopenharmony_ci} 59