Thanks alot.. I was waiting for this. I would like to suggest a little more, see if it makes sense. Lets assume we use the gnome tweak tool or some other place to enable/disable with out reloading the shell. Now as an extension writer, I may also want to give a little more options than just enabling/disabling. So if there is a meta level of saying 'these are the options made available' and 'these methods implement them'
options = [ ] options = [ { name : 'option-name' , type : 'toggle' , method : 'methodname' } ... ] It may end up like a dbus interface but need not be that rich. Instead of taking inSignature, outSignature we may ask the type of UI element that collects info and the method that handles it. I am talking about creating UI controls by reading a specification. This is just one way of doing it, I am not 100% clear with the implementation. It would be nice to specify certain things and the UI/manager that controls the lifecycle of the extension can some how pick up the options. This may need a little more work but i guess its worth it. for instance 1) places-menu can have 'show/hide icons' , 'show/hide devices' 2) mediaplayers extension may allow to choose default set of players shown or add a new player if it supports the DBus interface. please add your comments and suggestions. -- vamsi On Tue, Jun 21, 2011 at 11:09 AM, Jasper St. Pierre <jstpie...@mecheye.net>wrote: > Hey guys, it's Jasper. > > As part of my work on SweetTooth[0], I'm planning on a bunch of > changes to make the user experience for installing, enabling and > disabling extensions better. Unfortunately, I'm gonna have to break > some stuff unless someone can come up with a clever hack. These > changes are not set in stone, but they're what I'm hacking on > currently, and I'd like to discuss them to make sure I'm on the right > track. Extension developers, I'm talking to you: > > * I want live extension enabling and disabling. The user experience > is "click a button on extensions.gnome3.org, it takes effect > immediately". > > * I want to make it safer and more usable for developers to import > code and assets their extension directory. > > * I want extensions to be smart about their dependencies. For > instance, the systemMonitor extension depends on an introspectable > GTop, which AFAIK is unreleased, and hasn't been packaged in F15. The > only clue users have that something has gone wrong is the Errors tab > in the LookingGlass. > > Unfortunately, in order to do these things, I need your cooperation. > I'm going to break some stuff, and I'd like your involvement so that I > don't make a wrong decision which means another API break. I'd rather > break it all at once and do things right. > > Let's tackle item 1: > > == Enabling and Disabling == > > I'm going to remove the main() method, and replace it with a new system. > > You still require one function: init(). It does everything the main() > function usually does, except it cannot change *any* Shell state. This > is here so that you can set up anything you need to, like gettext > silly shell actors. It's guaranteed to be called at most once per > shell session. > > So, what's used to change the Shell UI? We introduce two new methods: > enable() and disable(). Here's some simple rules: > > * The Shell will call init(), and then enable() if your extension is > enabled when the shell starts up. > > * The Shell may then call disable() and enable() again during the > same session, but it should never call init() more than once, ever. > > * The Shell will not call disable() if your extension is disabled at > startup. > > * Right now the Shell calls init() even for disabled extensions at > startup, but I may change that so that it calls init(), then enable() > at first enable. The simplest solution is to not rely on init() coming > at the start of the Shell session. > > For those of you who would like something a bit more object-oriented, > you're in luck: init() can also return a state object. All that > requires is functions named "enable" and "disable" on that object, the > type doesn't matter nor do any other fields. The shell won't touch > that object except for calling 'enable()' or 'disable()' on it. If you > don't return anything (or return a false-y object), it's assumed that > enabl() and disable() are on the moduie itself. Here's a simple code > example: For lack of better terms, I'm calling these extensions > "stateful", and the module ones "stateless", even though that's a huge > lie: both have state. > > Starting with an improved version of the stock "Hello, World!" > extension in the old system[1], we can build a new extension in one of > two ways: > > 1. We can simply rename the main() function to init(), and move the > line of code that adds the actor to the Shell to a new enable() > method, and add a disable() method that does the reverse.[2] > > 2. Or we can make the extension return an object that has enable() > and disable() functions.[3] > > If you want your extension to be compatible for old versions of the > shell, thankfully, it's very easy: just write a main() that calls > init(), then enable(). For the extensions website, I may allow > so-called "legacy" extensions with a special method that restarts the > Shell, but it would break the user-experience a bit, and it's extra > code that I don't think would get used. > > Checking out the code samples, you may notice an argument called > "helper". That's a cliff-hanger for next time, when I want to talk > about items 2 and 3. I'd like your feedback on the information I'd > provided so far, and any questions on SweetTooth, the web site, or the > modifications I'm making would be extremely appreciated. > > Jasper > > [0] http://live.gnome.org/GnomeShell/SweetTooth > [1] > http://magcius.mecheye.net/shell/SweetTooth/Code/HelloWorld-Old/extension.js > [2] > http://magcius.mecheye.net/shell/SweetTooth/Code/HelloWorld-Stateless/extension.js > [3] > http://magcius.mecheye.net/shell/SweetTooth/Code/HelloWorld-Stateful/extension.js > _______________________________________________ > gnome-shell-list mailing list > gnome-shell-list@gnome.org > http://mail.gnome.org/mailman/listinfo/gnome-shell-list >
_______________________________________________ gnome-shell-list mailing list gnome-shell-list@gnome.org http://mail.gnome.org/mailman/listinfo/gnome-shell-list