From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id uEvRDAqna1+IZQAAWB0awg (envelope-from ) for ; Wed, 23 Sep 2020 15:50:34 -0400 Received: by simark.ca (Postfix, from userid 112) id 322401EE05; Wed, 23 Sep 2020 15:50:34 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=MAILING_LIST_MULTI, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.2 Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id CE4C21E990 for ; Wed, 23 Sep 2020 15:50:33 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 414CE3857C7A; Wed, 23 Sep 2020 19:50:33 +0000 (GMT) Received: from rock.gnat.com (rock.gnat.com [205.232.38.15]) by sourceware.org (Postfix) with ESMTP id B44693857C7A for ; Wed, 23 Sep 2020 19:50:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org B44693857C7A Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=tromey@adacore.com Received: from localhost (localhost.localdomain [127.0.0.1]) by filtered-rock.gnat.com (Postfix) with ESMTP id 7D6FF117507; Wed, 23 Sep 2020 15:50:29 -0400 (EDT) X-Virus-Scanned: Debian amavisd-new at gnat.com Received: from rock.gnat.com ([127.0.0.1]) by localhost (rock.gnat.com [127.0.0.1]) (amavisd-new, port 10024) with LMTP id BU8MLWCwQsxy; Wed, 23 Sep 2020 15:50:29 -0400 (EDT) Received: from murgatroyd (75-166-120-119.hlrn.qwest.net [75.166.120.119]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by rock.gnat.com (Postfix) with ESMTPSA id 1EE56117506; Wed, 23 Sep 2020 15:50:29 -0400 (EDT) From: Tom Tromey To: Simon Marchi Subject: Re: [PATCH] Don't let TUI focus on locator References: <20200923185921.1006372-1-tromey@adacore.com> <1b3329ea-97c0-c379-d343-e891a337244b@simark.ca> X-Attribution: Tom Date: Wed, 23 Sep 2020 13:50:28 -0600 In-Reply-To: <1b3329ea-97c0-c379-d343-e891a337244b@simark.ca> (Simon Marchi's message of "Wed, 23 Sep 2020 15:10:04 -0400") Message-ID: <877dskp917.fsf@tromey.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: gdb-patches@sourceware.org, Tom Tromey Errors-To: gdb-patches-bounces@sourceware.org Sender: "Gdb-patches" Simon> Instead of hard-coding here which windows can receive focus, how about Simon> having a tui_win_info virtual method "is_focusable", where the default Simon> implementation returns true, and tui_locator_window's implementation Simon> returns false? The code in tui_next_win / tui_prev_win would return the Simon> next / prev focusable window. Let me know what you think of this. Tom commit adac0583ca49653e98630757599eee20faca4b33 Author: Tom Tromey Date: Wed Sep 23 12:57:19 2020 -0600 Don't let TUI focus on locator PR tui/26638 notes that the C-x o binding can put the focus on the locator window. However, this is not useful and did not happen historically. This patch changes the TUI to skip this window when switching focus. gdb/ChangeLog 2020-09-23 Tom Tromey PR tui/26638: * tui/tui-stack.h (struct tui_locator_window) : New method. * tui/tui-data.h (struct tui_win_info) : New method. * tui/tui-data.c (tui_next_win): Exclude non-focusable windows. (tui_prev_win): Rewrite. diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 241f3e70271..96fddbcd6e7 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2020-09-23 Tom Tromey + + PR tui/26638: + * tui/tui-stack.h (struct tui_locator_window) : New + method. + * tui/tui-data.h (struct tui_win_info) : New method. + * tui/tui-data.c (tui_next_win): Exclude non-focusable windows. + (tui_prev_win): Rewrite. + 2020-09-23 Tom Tromey PR symtab/25470: diff --git a/gdb/tui/tui-data.c b/gdb/tui/tui-data.c index 8f7d257e945..d475d031065 100644 --- a/gdb/tui/tui-data.c +++ b/gdb/tui/tui-data.c @@ -113,9 +113,18 @@ tui_next_win (struct tui_win_info *cur_win) auto iter = std::find (tui_windows.begin (), tui_windows.end (), cur_win); gdb_assert (iter != tui_windows.end ()); - ++iter; - if (iter == tui_windows.end ()) - return tui_windows[0]; + gdb_assert (cur_win->can_focus ()); + /* This won't loop forever since we can't have just an un-focusable + window. */ + while (true) + { + ++iter; + if (iter == tui_windows.end ()) + iter = tui_windows.begin (); + if ((*iter)->can_focus ()) + break; + } + return *iter; } @@ -125,12 +134,21 @@ tui_next_win (struct tui_win_info *cur_win) struct tui_win_info * tui_prev_win (struct tui_win_info *cur_win) { - auto iter = std::find (tui_windows.begin (), tui_windows.end (), cur_win); - gdb_assert (iter != tui_windows.end ()); + auto iter = std::find (tui_windows.rbegin (), tui_windows.rend (), cur_win); + gdb_assert (iter != tui_windows.rend ()); + + gdb_assert (cur_win->can_focus ()); + /* This won't loop forever since we can't have just an un-focusable + window. */ + while (true) + { + ++iter; + if (iter == tui_windows.rend ()) + iter = tui_windows.rbegin (); + if ((*iter)->can_focus ()) + break; + } - if (iter == tui_windows.begin ()) - return tui_windows.back (); - --iter; return *iter; } diff --git a/gdb/tui/tui-data.h b/gdb/tui/tui-data.h index 5e7a12293c9..d61bfc7dff8 100644 --- a/gdb/tui/tui-data.h +++ b/gdb/tui/tui-data.h @@ -99,6 +99,12 @@ struct tui_win_info return handle != nullptr; } + /* Return true if this window can accept the focus. */ + virtual bool can_focus () const + { + return true; + } + /* Disable output until the next call to doupdate. */ void no_refresh () { diff --git a/gdb/tui/tui-stack.h b/gdb/tui/tui-stack.h index 9ff57b1ba73..0e5916f0ce3 100644 --- a/gdb/tui/tui-stack.h +++ b/gdb/tui/tui-stack.h @@ -52,6 +52,11 @@ struct tui_locator_window : public tui_win_info return false; } + bool can_focus () const override + { + return false; + } + void rerender () override; /* Update the locator, with the provided arguments.