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