From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from re-prd-fep-048.btinternet.com (mailomta28-re.btinternet.com [213.120.69.121]) by sourceware.org (Postfix) with ESMTPS id 598A13858427 for ; Fri, 26 Aug 2022 13:33:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 598A13858427 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=dronecode.org.uk Authentication-Results: sourceware.org; spf=none smtp.mailfrom=dronecode.org.uk Received: from re-prd-rgout-003.btmx-prd.synchronoss.net ([10.2.54.6]) by re-prd-fep-048.btinternet.com with ESMTP id <20220826133315.BVRB3057.re-prd-fep-048.btinternet.com@re-prd-rgout-003.btmx-prd.synchronoss.net>; Fri, 26 Aug 2022 14:33:15 +0100 Authentication-Results: btinternet.com; auth=pass (PLAIN) smtp.auth=jonturney@btinternet.com; bimi=skipped X-SNCR-Rigid: 61A69BAC2ADE126A X-Originating-IP: [86.139.158.127] X-OWM-Source-IP: 86.139.158.127 (GB) X-OWM-Env-Sender: jonturney@btinternet.com X-VadeSecure-score: verdict=clean score=0/300, class=clean X-RazorGate-Vade: gggruggvucftvghtrhhoucdtuddrgedvfedrvdejhedgieehucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuueftkffvkffujffvgffngfevqffopdfqfgfvnecuuegrihhlohhuthemuceftddunecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpefkffggfgfuvfhfhfgjtgfgsehtkeertddtfeejnecuhfhrohhmpeflohhnucfvuhhrnhgvhicuoehjohhnrdhtuhhrnhgvhiesughrohhnvggtohguvgdrohhrghdruhhkqeenucggtffrrghtthgvrhhnpeeludejfefgvdfhkeejhfegieeuffetkeehhedufedtueetieeuveeugfejveehueenucffohhmrghinhepshhouhhrtggvfigrrhgvrdhorhhgnecukfhppeekiedrudefledrudehkedruddvjeenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhephhgvlhhopegludelvddrudeikedruddruddthegnpdhinhgvthepkeeirddufeelrdduheekrdduvdejpdhmrghilhhfrhhomhepjhhonhdrthhurhhnvgihsegurhhonhgvtghouggvrdhorhhgrdhukhdpnhgspghrtghpthhtohepvddprhgtphhtthhopeevhhhrihhsthhirghnrdfhrhgrnhhkvgesthdqohhnlhhinhgvrdguvgdprhgtphhtthhopegthihgfihinhdqrghpphhssegthihgfihinhdrtghomh X-RazorGate-Vade-Verdict: clean 0 X-RazorGate-Vade-Classification: clean Received: from [192.168.1.105] (86.139.158.127) by re-prd-rgout-003.btmx-prd.synchronoss.net (5.8.716.04) (authenticated as jonturney@btinternet.com) id 61A69BAC2ADE126A; Fri, 26 Aug 2022 14:33:15 +0100 Message-ID: <00d3c57f-ce4e-7b11-8be4-3c18829938f7@dronecode.org.uk> Date: Fri, 26 Aug 2022 14:33:14 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.13.0 Subject: Re: [PATCH setup] Keyboard accelerators for install/reinstall/uninstall Content-Language: en-GB To: "cygwin-apps@cygwin.com" , Christian Franke References: <28d2858f-a7b3-ba64-261c-c38e6bfa02db@t-online.de> <3b69d761-018e-dbc3-db57-369f6bf057bb@t-online.de> From: Jon Turney In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-3567.4 required=5.0 tests=BAYES_00,BODY_8BITS,FORGED_SPF_HELO,KAM_DMARC_STATUS,KAM_LAZY_DOMAIN_SECURITY,NICE_REPLY_A,RCVD_IN_BARRACUDACENTRAL,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On 23/08/2022 17:44, Christian Franke wrote: > Jon Turney wrote: >> On 22/08/2022 16:29, Christian Franke wrote: >>> Jon Turney wrote: >>>> On 14/08/2022 12:57, Christian Franke wrote: >>>>> This eases state changes of a selected sequence of packages. >>>> >>>> Nice!  The keyboard control of the package chooser was a bit of an >>>> after-thought, which it really shouldn't be. >>> >>> Thanks - revised patch is attached. >>> >> >> Thanks.  This looks good.  Please apply. > > Thanks. Applied. > > >> >>>>> Ctrl+U is in particular useful to cleanup installations in >>>>> conjunction with "unneeded" view: >>>>> https://sourceware.org/pipermail/cygwin-apps/2022-August/042185.html >>>>> >>>>> Open issue: Add some visual clue (tooltip?) to make this >>>>> functionality more obvious. >>>> >>>> Yeah.  These shortcuts should also be accelerators for the package >>>> action selection popup menu, which would make them more discoverable? >>> >>> Handling these in the popup menu is possibly tricky. According to >>> documentation of TrackPopupMenu(), hWndListView "receives all >>> messages from the menu" which is apparently not the case. >> >> Confused. I don't think that matters (we could probably be using >> TPM_NONOTIFY), because we use TPM_RETURNCMD. >> >> If we mark accelerators in the menu: >> >> --- a/res/en/res.rc >> +++ b/res/en/res.rc >> @@ -573,11 +573,11 @@ BEGIN >>      IDS_PROGRESS_POSTINSTALL "Running..." >>      IDS_PROGRESS_SOLVING "Solving dependencies..." >>      IDS_ACTION_DEFAULT "Default" >> -    IDS_ACTION_INSTALL "Install" >> -    IDS_ACTION_UNINSTALL "Uninstall" >> +    IDS_ACTION_INSTALL "&Install" >> +    IDS_ACTION_UNINSTALL "&Uninstall" >>      IDS_ACTION_SKIP "Skip" >>      IDS_ACTION_KEEP "Keep" >> -    IDS_ACTION_REINSTALL "Reinstall" >> +    IDS_ACTION_REINSTALL "&Reinstall" >>      IDS_ACTION_RETRIEVE "Retrieve" >>      IDS_ACTION_UNKNOWN "Unknown" >>      IDS_ACTION_SOURCE "Source" >> >> They appear when the menu is opened by pressing the menu key (or >> always, if "Underline access keys when available" is on in >> ease-of-access settings), and menu items can be chosen using them. >> >> It's not quite that straightforward because we need to remove the '&' >> when those strings are used elsewhere (e.g. in the action column), but >> I think it can be done... > > Using plain letters (without Ctrl) or first digit of version number > already work in the popup menu. But it is possibly tricky to also > interpret Ctrl+I/R/U in the popup menu. > I think we might be talking at cross-purposes here. I don't think we need to do anything specific to make accelerators work in that menu, because TrackMenuPopup() is running it's own modal message loop which does TranslateAccelerator() for it... >>>>> @@ -670,6 +670,10 @@ packagemeta::set_action (_actions action, >>>>> packageversion const &default_version, >>>>>     else if (action == Uninstall_action) >>>>>       { >>>>>         desired = packageversion (); >>>>> +      pick (false); >>>>> +      srcpick (false); >>>>> +      if (!installed) >>>>> +    action = NoChange_action; >>>> >>>> Hmm... why is adding this needed? >>> >>> Otherwise a strange state change would occur at least in the GUI when >>> an install request is undone: >>> >>> "Skip" == Ctrl+I ==> "3.2-1" == Ctrl+U ==> "Uninstall" >>> >>> The new patch includes another addition which prevents this on >>> installs from local directory when the current default version is not >>> yet downloaded: >>> >>> "Skip" == Ctrl+I ==> "" (empty) >> >> I see.  But these work correctly when chosen via the action menu >> dropdown? > > These state changes are not offered by the popup menu. For example for > not installed packages the popup menu does not contain a selection which > returns Uninstall_action. Undoing an install request is done via > re-selection of "Skip" which returns NoChange_action. > > The design alternatives were either to emulate this in > PickPackageLine::map_key_to_action() or to complete the (hidden) state > machine in packagemeta::set_action(). I decided to use the latter. Ok, that makes perfect sense. Thanks!