Release Pandora Overlay Menu


WizardStan

Mega GP Mania
Joined
May 24, 2008
Messages
16,731
And my entry is... not finished, not by a long shot. I was struggling to decide what to do until a flash of inspiration hit me about 3 weeks ago: so yeah, I started after the original deadline. :p I could probably get a lot more done in the next 2 days, but unfortunately I'm going away for the weekend starting early tomorrow, so what I have will have to do.


What it is: You know that zenity menu that displays a list of running PND processes so that you can kill them? I've written a replacement. One that works with Notaz's new SDL, and 3D apps, not just windowed applications. It's also (supposed to be) more feature rich, sporting some pretty icons, a clock, battery gauge, and wifi toggle button. Of course, as I said these are features not yet complete, so right now all it is is a grey box with a single "button".


What it does: Upon releasing the Pandora button after holding it for at least 4 seconds, all currently running PNDs are sent a SIGSTOP. Input is intercepted so that keys pressed won't be buffered when the PND continues. The screen is blurred to give a kind of "background" aesthetic. The main window is then displayed with its "kill all" button. At this point you can press ESC to close the window and everything is undone (clear the window, unblurr, unintercept, SIGCONT) so you can continue playing, or press the 'K' button to force kill all running PNDs and return to the desktop.


What it doesn't do but hopefully will over the next few weeks: process list and single PND kill, clock display, battery gauge, wifi display and toggle, text reader for manual/guide-book reading, and some basic settings that you may want to tweak without having to quit all the way to the desktop (gamma, tv out, and blur filter come to mind). Anything else I think of along the way or someone suggests that would be useful will also be added.


How to use it: Download the PND when it becomes available. It has a single entry: Install Overlay Menu. This will copy about 160KB to the NAND (most of which is the rebirth splash we have to include with our entries :p ) and replace the op_menu.sh to run my program instead of the zenity window. If you have made customizations to op_menu.sh, you'll have to make them again. A backup of the current op_menu.sh is made to the overlay menu's install program's appdata directory, so you can restore it any time you want. Since it is modifying NAND it will require you to enter your password.


Most of this blurriness is intentional, the rest is because I don't have a camera suitable for taking a picture of an LCD screen

IMG_20120329_200452.jpg
 
Last edited by a moderator:
Sounds pretty awesome! Good luck!


Also, if possible in the future, make it skinnable, everyone likes customization!
 
Looks like the start of something great. :) A few suggestions for the future (ignoring any thoughts about viability for a moment):


- Near instant activation on Pandora keypress (half a second maybe)


- Exit menu either with a quick Pandora keypress, or B button (to make it more console-like)


- Option to minimise app, say if you need to get into a file manager momentarily


And a visual mockup: http://i.imgur.com/F3W5u.png
 
Nice one :)


I'd been thinking on and off to do this for a couple years, but had stopped as I thought it'd take kernel work to suspend events to the /dev/eventX listeners; I had no idea that ioctl existed already.. *damn*


So, very awesome, keep it up :)


jeff
 
Wow! This will be a great feature when it's done... I've been pining after something that would allow me to easily and quickly switch between the running app and a text file. So, just being able to minimize with a key combination would be awesome!


Sent from my HTC Sensation Z710e using Tapatalk
 
Great work, everyone talks about it and you just went ahead and did it ;)


I am wondering what the scope of the project is (as it was discussed a while ago), do you want the menu to have just general features like kill, open docu, etc. or will it have some sort of API (if that's even possible, I have no idea) for programs to expose data and functionality to so it can show program specific actions (like moving the in-game pause menu completely to this application, supplying a graphical overview of the controls or giving the option to exit the program graciously, etc.).


The reason why I am asking is because I think this could be a good starting point of the XBOXLive-like system with integrated chat, lobby, whatever.


Also what language is it written in and will it be open source?


In any case, keep up the good work!
 
Been thinking about something like this too :p , like many of us probably have. What libraries/language(s) are you using?


EDIT: Also, if this was to have some kind of running application specific customization system, it would be the perfect place for Cristoph.Krn's guihints.
 
Last edited by a moderator:
Ah yes, some sort of API would be a good idea, just to display simple info for now, maybe framerates or something, but eventually tie it into the Pandora Community effort that is being discussed in the other forum, yes. Eventually. Way down the line.


I don't know if it'll be possible to "minimize" anything though. If you start an SDL application, I can hide it so you can see the desktop again, but intercepting inputs is a global thing: either everything gets the input or nothing (except the process doing the intercepting, of course) gets the input. Even if temporarily going back to the desktop, you wouldn't be able to start or use another application because anything you typed into that application would then be sent to the hidden application when it's restored. That's why I wanted to build in a text reader. Unless I can come up with some hack to halt input on a process by process basis...


In either case, there's also additional problems to worry about: starting a desktop application would probably be no problem, but I have no idea what would happen if you started another SDL app while one was already running but hidden.
 
I don't know if it'll be possible to "minimize" anything though. If you start an SDL application, I can hide it so you can see the desktop again, but intercepting inputs is a global thing: either everything gets the input or nothing (except the process doing the intercepting, of course) gets the input. Even if temporarily going back to the desktop, you wouldn't be able to start or use another application because anything you typed into that application would then be sent to the hidden application when it's restored. That's why I wanted to build in a text reader. Unless I can come up with some hack to halt input on a process by process basis...

That makes no sense to me... normally input would be intercepted by the currently active application wouldn't it? If you've brought another application into focus, and are interacting with it why would any other 'minimised' application still be buffering the input?


- Neelix
 
That makes no sense to me... normally input would be intercepted by the currently active application wouldn't it? If you've brought another application into focus, and are interacting with it why would any other 'minimised' application still be buffering the input?
That only applies to windowed applications. The old SDL did that, you could minimize and carry on with no problem. Notaz's improved SDL doesn't have a window, it draws directly to the framebuffer. That makes it faster, makes it better, allows for a lot of things that couldn't happen before, but has the drawback that there is no longer a window that can be said to have focus, or to lose focus, nor can it be minimized. Since it has no window for focus, it can't rely on X to pass it events. Instead, it goes directly to the event queue itself, and reads everything unless another application has told the OS to stop filling the event queue, which is what I've done but it's a global thing, not a per process thing.


In order to "minimize" a new SDL application, you have to simply hide the frame buffer so the GPU doesn't draw it anymore. It's still there, it just isn't being drawn to the screen, unlike a minimized window which is technically not even there anymore, having been reduced to an icon. If you then start another application which uses the new SDL while the first application is still using this hidden frame buffer, it would then change the resolution of the frame buffer for its own use and then unhide it, and I have no idea what these things will actually do to an already running application.
 
Last edited by a moderator:
We talked about this quite a few times. I think it is absolutely awesome that you have decided to make it a reality and am looking forward to see what the results will be.
 
How does this jive with Minimenu? Does it work with that or only when running from the full desktop?
 
In theory it could work with minimenu, but I didn't try it. I think some additional setup would be required for minimenu. By the time it is done it will be compatible with minimenu definitely as well.
 
Not much one can say about this - other than it works well.


One little item to mention: My first test was on the desktop without anything running (yeah, pointless but 'sif I wasn't going to do that). It leaves the blur effect in place until something fullscreen has been launched.


And just a thought on the Rebirth banner - I don't suppose you'll want that in there forever, but the comp rules do allow you to tuck it away in an About screen or something like that.
 
Great idea! I did a quick test by launching the Chrome browser, and pressing the Pandora key. When the overlay window appeared, I couldn't do much, except closing it with ESC. When displayed, the "k" key was doing nothing, and the browser was still receiving stylus input. Is it normal? Or maybe it only works with SDL full screen apps?
 
It's supposed to work with all PND applications but I didn't really test it that extensively. Didn't intercept stylus input either, just keyboard. That'll be fixed.
 
Back
Top