From owner-svn-src-head@freebsd.org Sun Feb 25 17:02:52 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id EA1CDF3A766; Sun, 25 Feb 2018 17:02:51 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 7BD7486ED3; Sun, 25 Feb 2018 17:02:51 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 5CB3E7B78; Sun, 25 Feb 2018 17:02:51 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w1PH2p3c015646; Sun, 25 Feb 2018 17:02:51 GMT (envelope-from kevans@FreeBSD.org) Received: (from kevans@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w1PH2pIk015645; Sun, 25 Feb 2018 17:02:51 GMT (envelope-from kevans@FreeBSD.org) Message-Id: <201802251702.w1PH2pIk015645@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kevans set sender to kevans@FreeBSD.org using -f From: Kyle Evans Date: Sun, 25 Feb 2018 17:02:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r329987 - head/stand/lua X-SVN-Group: head X-SVN-Commit-Author: kevans X-SVN-Commit-Paths: head/stand/lua X-SVN-Commit-Revision: 329987 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 25 Feb 2018 17:02:52 -0000 Author: kevans Date: Sun Feb 25 17:02:50 2018 New Revision: 329987 URL: https://svnweb.freebsd.org/changeset/base/329987 Log: lualoader: Track the menu currently drawn, instead of validity This cleans up the odd approach to menu drawing. Instead of tracking validity, we track the menu that was drawn on the screen. Whenever we draw a menu, we'll set this to that menu. Anything that invalidates the screen should go ahead and trigger an explicit redraw, rather than finding a wy to set screen_invalid. The currently drawn menu is then reset in menu.run as we exit the menu system, so that dropping to the loader prompt or leaving menu.run() will just behave as expected without doing redundant work every time we leave a menu. Modified: head/stand/lua/menu.lua Modified: head/stand/lua/menu.lua ============================================================================== --- head/stand/lua/menu.lua Sun Feb 25 16:29:02 2018 (r329986) +++ head/stand/lua/menu.lua Sun Feb 25 17:02:50 2018 (r329987) @@ -38,7 +38,7 @@ local drawer = require("drawer") local menu = {} -local screen_invalid = true +local drawn_menu local function OnOff(str, b) if b then @@ -82,7 +82,6 @@ menu.handlers = { end end, [core.MENU_SUBMENU] = function(_, entry) - screen_invalid = true menu.process(entry.submenu) end, [core.MENU_RETURN] = function(_, entry) @@ -348,12 +347,12 @@ menu.default = menu.welcome -- the local alias_table in menu.process. menu.current_alias_table = {} -function menu.redraw(m) - -- redraw screen +function menu.draw(m) + -- Clear the screen, reset the cursor, then draw screen.clear() screen.defcursor() menu.current_alias_table = drawer.drawscreen(m) - screen_invalid = false + drawn_menu = m end -- 'keypress' allows the caller to indicate that a key has been pressed that we @@ -361,10 +360,8 @@ end function menu.process(m, keypress) assert(m ~= nil) - -- Trigger a redraw if we've been invalidated. Otherwise, we assume - -- that this menu has already been drawn. - if screen_invalid then - menu.redraw(m) + if drawn_menu ~= m then + menu.draw(m) end while true do @@ -404,13 +401,9 @@ function menu.process(m, keypress) end -- If we got an alias key the screen is out of date... -- redraw it. - menu.redraw(m) + menu.draw(m) end end - -- Invalidate the screen upon exit so that it gets redrawn upon - -- processing a new menu, assuming it won't be redrawn after leaving - -- this menu - screen_invalid = false end function menu.run() @@ -419,10 +412,11 @@ function menu.run() return end - menu.redraw(menu.default) + menu.draw(menu.default) local autoboot_key = menu.autoboot() menu.process(menu.default, autoboot_key) + drawn_menu = nil screen.defcursor() print("Exiting menu!")