Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp21623938ybl; Mon, 6 Jan 2020 08:09:32 -0800 (PST) X-Google-Smtp-Source: APXvYqxC0//kjzfSyJaNs2f7+EWlh//ws18NNpXTbNcTcem3B8icmjL7erpZ94z4JD1PHH7zZSgL X-Received: by 2002:a9d:6f8f:: with SMTP id h15mr111003856otq.1.1578326972443; Mon, 06 Jan 2020 08:09:32 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1578326972; cv=none; d=google.com; s=arc-20160816; b=cNl8x7eeddOy1aZhAymhNH/6vQ8iRCZ5wEMzzLgCcCmjbBDE3LQdOirKl+F3b/SefA wsPxEaFosMGw7upSRYFKfdyBwFvEF4nFxE9fRBwCtyb5ipGg6QY6aYRd8F9FACsyHKDn YMa5s0IaiyTbhEk/NmlO5lS6KdYhq1kXf4IeiKEhhvbwYK+bwUOBVuOnQwk5TNkRFaGq RGaL10yVGzaDDesaeG/hGlF9HhkbEgbnrlFjVNcamGq0pgvaoNWma6YFmONEH70wlu3r qeLeCMk0RwWMZQYiC9fMJKauP1GFt2oRe4H7DZwlnrZ8gQneCNlZUkDGrRoSO87TD/6r wosg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=AR8qTusyS+80OgBFXxRIz3gr6FqOicF037Wllr6+/eo=; b=nqXBRauEWwlVVUl0/F47SlEn+PZCAZAd2EvlZvhscrgPXCkx96AlBFVgEsyp7rFakl 5qhEhpsNsRRyHYgCX8IsJ5J/uxDiNiZN+fPGf8ycqhZ79rumjNe+tsp9uYxZ4pets5KM R3EIxGM9RbT65vpIASUojz7Vu8X0mxNVG0StxvjOPTB/a236iGMC3c5R9DNLr2DFb6RD P7AKqzp7mYulOB4y+YgpIYfs0+IHn/ElwsNsQocXuC7HA0aqMTuCmR+PHC7067Hwj3qH pbfMNSMYl/K/psvFC1a0r6oNOhE1bz6REmiKOM5lbJoeFRHqhEDMUSm7lG1XdLYP1HCH IXGg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=bE3B1Gw0; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id m25si35861861otn.208.2020.01.06.08.09.20; Mon, 06 Jan 2020 08:09:32 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=bE3B1Gw0; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727260AbgAFQIQ (ORCPT + 99 others); Mon, 6 Jan 2020 11:08:16 -0500 Received: from mail.kernel.org ([198.145.29.99]:46772 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727257AbgAFQIO (ORCPT ); Mon, 6 Jan 2020 11:08:14 -0500 Received: from quaco.ghostprotocols.net (unknown [179.97.35.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 4F40A208C4; Mon, 6 Jan 2020 16:08:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1578326893; bh=EQNyy90Oyn0nohwgTUgao1qv6E6MpaB8z0MoSlBOFeo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=bE3B1Gw02ebUj7aXXpxZv6CbmAw1arW+UQBR20xUqADHhXlTS34iWqjayW7CkHhKn ebt7R6P1+VIpdCyAwj9Szj/7IVsqasPrqBCgRg882DB5jPQmTs0CL3XknimpqQlYOW OqZf18unABkKxufJ9ZgG4r3yEF0EppJHGYoURLk0= From: Arnaldo Carvalho de Melo To: Ingo Molnar , Thomas Gleixner Cc: Jiri Olsa , Namhyung Kim , Clark Williams , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, Arnaldo Carvalho de Melo , Adrian Hunter , Andi Kleen , Jin Yao , Kan Liang , Linus Torvalds Subject: [PATCH 16/20] tools ui popup: Allow returning hotkeys Date: Mon, 6 Jan 2020 13:07:01 -0300 Message-Id: <20200106160705.10899-17-acme@kernel.org> X-Mailer: git-send-email 2.21.1 In-Reply-To: <20200106160705.10899-1-acme@kernel.org> References: <20200106160705.10899-1-acme@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Arnaldo Carvalho de Melo With this patch if an optional pointer is passed to ui__popup_menu() then when any key that is not being handled (ENTER, ESC, etc) is typed, it'll record that key in the pointer and return, allowing for hotkey processing on the caller. If NULL is passed, no change in logic, unhandled keys continue to be ignored. Reviewed-by: Jiri Olsa Cc: Adrian Hunter Cc: Andi Kleen Cc: Jin Yao Cc: Kan Liang Cc: Linus Torvalds Cc: Namhyung Kim Link: https://lkml.kernel.org/n/tip-6ojn19mqzgmrdm8kdoigic0m@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/ui/browsers/hists.c | 4 ++-- tools/perf/ui/browsers/res_sample.c | 2 +- tools/perf/ui/browsers/scripts.c | 2 +- tools/perf/ui/tui/util.c | 12 ++++++++---- tools/perf/ui/util.h | 2 +- 5 files changed, 13 insertions(+), 9 deletions(-) diff --git a/tools/perf/ui/browsers/hists.c b/tools/perf/ui/browsers/hists.c index ac118aef5ed1..c44b508f9e06 100644 --- a/tools/perf/ui/browsers/hists.c +++ b/tools/perf/ui/browsers/hists.c @@ -2393,7 +2393,7 @@ static int switch_data_file(void) closedir(pwd_dir); if (nr_options) { - choice = ui__popup_menu(nr_options, options); + choice = ui__popup_menu(nr_options, options, NULL); if (choice < nr_options && choice >= 0) { tmp = strdup(abs_path[choice]); if (tmp) { @@ -3279,7 +3279,7 @@ static int perf_evsel__hists_browse(struct evsel *evsel, int nr_events, do { struct popup_action *act; - choice = ui__popup_menu(nr_options, options); + choice = ui__popup_menu(nr_options, options, NULL); if (choice == -1 || choice >= nr_options) break; diff --git a/tools/perf/ui/browsers/res_sample.c b/tools/perf/ui/browsers/res_sample.c index 76d356a18790..7cb2d6678039 100644 --- a/tools/perf/ui/browsers/res_sample.c +++ b/tools/perf/ui/browsers/res_sample.c @@ -56,7 +56,7 @@ int res_sample_browse(struct res_sample *res_samples, int num_res, return -1; } } - choice = ui__popup_menu(num_res, names); + choice = ui__popup_menu(num_res, names, NULL); for (i = 0; i < num_res; i++) zfree(&names[i]); free(names); diff --git a/tools/perf/ui/browsers/scripts.c b/tools/perf/ui/browsers/scripts.c index fc733a6354d4..47d2c7a8cbe1 100644 --- a/tools/perf/ui/browsers/scripts.c +++ b/tools/perf/ui/browsers/scripts.c @@ -126,7 +126,7 @@ static int list_scripts(char *script_name, bool *custom, SCRIPT_FULLPATH_LEN); if (num < 0) num = 0; - choice = ui__popup_menu(num + max_std, (char * const *)names); + choice = ui__popup_menu(num + max_std, (char * const *)names, NULL); if (choice < 0) { ret = -1; goto out; diff --git a/tools/perf/ui/tui/util.c b/tools/perf/ui/tui/util.c index b98dd0e31dc1..0f562e2cb1e8 100644 --- a/tools/perf/ui/tui/util.c +++ b/tools/perf/ui/tui/util.c @@ -23,7 +23,7 @@ static void ui_browser__argv_write(struct ui_browser *browser, ui_browser__write_nstring(browser, *arg, browser->width); } -static int popup_menu__run(struct ui_browser *menu) +static int popup_menu__run(struct ui_browser *menu, int *keyp) { int key; @@ -45,6 +45,11 @@ static int popup_menu__run(struct ui_browser *menu) key = -1; break; default: + if (keyp) { + *keyp = key; + key = menu->nr_entries; + break; + } continue; } @@ -55,7 +60,7 @@ static int popup_menu__run(struct ui_browser *menu) return key; } -int ui__popup_menu(int argc, char * const argv[]) +int ui__popup_menu(int argc, char * const argv[], int *keyp) { struct ui_browser menu = { .entries = (void *)argv, @@ -64,8 +69,7 @@ int ui__popup_menu(int argc, char * const argv[]) .write = ui_browser__argv_write, .nr_entries = argc, }; - - return popup_menu__run(&menu); + return popup_menu__run(&menu, keyp); } int ui_browser__input_window(const char *title, const char *text, char *input, diff --git a/tools/perf/ui/util.h b/tools/perf/ui/util.h index 40891942f465..e30cea807564 100644 --- a/tools/perf/ui/util.h +++ b/tools/perf/ui/util.h @@ -5,7 +5,7 @@ #include int ui__getch(int delay_secs); -int ui__popup_menu(int argc, char * const argv[]); +int ui__popup_menu(int argc, char * const argv[], int *keyp); int ui__help_window(const char *text); int ui__dialog_yesno(const char *msg); void __ui__info_window(const char *title, const char *text, const char *exit_msg); -- 2.21.1