Bugzilla – Bug 9912
INPUT.List needs up/down mappings to make sure scrolling is possible
Last modified: 2008-11-13 14:32:18 UTC
My ContextMenu plugin works by pushing the player into INPUT.List mode. With SqueezeCenter 7.3, if I do this while a screensaver is active, the [screensaver] button mappings that make up/down run "done_passbackplaylist" control interpretation of the buttons, making it impossible to scroll the INPUT.List options. It seems to me that INPUT.List should always allow scrolling up/down, so [INPUT.List] should define up/down mappings to make sure.
Created attachment 4208 [details] first stab at a patch to fix this, only tested with SoftSqueeze arrow keys
How to trigger/see the bug: 1) install ContextMenu 7a17 from http://www.tux.org/~peterw/slim/slim7/ContextMenu/ 2) set the When Playing screensaver to Jump to Now Playing 3) start playing music 4) wait for the screensaver to kick in 5) hold the right arrow You'll see a ContextMenu INPUT.List screen, complete with (X of Y) count on line1. Try scrolling with up or down arrows -- you can't. In your log you may see messages like this: Slim::Hardware::IR::executeButton (1088) Error: Subroutine for irCode: [done_passbackplaylist] mode: [] does not exist! The mode stack ($client->modeStack) when this happens looks something like home, INPUT.List, playlist, screensaver, INPUT.List with INPUT.List being the current mode. Since it doesn't define mapping for arrow up/down and knob left/right, the [screensaver] mappings control behavior, and the list isn't scrollable. Apply my patch to the map file and restart SC7 and after step 5 you'll be able to scroll the list.
Triode: care to comment on this one? how does the patch look to you
I don't see a downside to this patch, other than bloating the Default.map file. However it does seem a corner case for Peter's plugin - normally I would expect a screensaver to be poped as soon as the user presses a button in the on state. Is it possible to pop the screensaver and then push input.list Peter? Or for the off mode saver do you need to be able to push input.list while remaining off?
Popping out of modes could be tough. It's not just a screensaver/off problem, it should happen any time the closest parent mode doesn't define the usual up/down functions in its mapping -- [screensaver] is just the first place I encountered this in 7.3. Plus the design of contextmenu --deliberately-- is to change the state minimally, so plugin developers can do their own mode popping if they want something to execute in the mode that was in place before the context menu was requested. The button commands provided by ContextMenu itself demonstrate this notion. Yes, I do need the ability to use INPUT.List while the player is off -- I don't want context menu users having to endure amplifier+speaker thumps, nor playback restarting because the player was synced before being turned off in order to scroll through to find the Size Button or Brightness Button choices on a Boom mini-remote, for instance. I probably can use the irmaps API introduced in SC 7.1.x to programatically fix the INPUT.List mappings (just as I programatically add arrow_right.hold and knob_down.hold mappings), it just seems like up/down ought to definitely work in the UI's in INPUT.List mode. And this is more easily fixed in the .map file than in Perl code. Thanks. P.S. If anyone else wants to test, an easier way to install ContextMenu in 7.3 is to use this URL in the Extension Downloader interface: http://www.tux.org/~peterw/slim/slim7/repodata.xml :-)
So I think this will only be a problem with screensavers as no other modes block out the up/down commands in the same way. That said it seems reasonable to add this.
That'd be great. I just tested on a Boom and confirmed the patch is needed for it, too, and does fix INPUT.List for Boom knob operations, too. Thanks.
change 23926