Extensible Shell



Hi,

Jon McCann has been putting together some ideas for a pluggable, single
window approach to the control center shell. The code is available in
the extensible-shell branch of control-center. I'd like to start a
discussion on how the API works and how we expect it to be used.

So firstly, from reading the code, this is what I currently understand:

 * CcPanel - a top level object representing a control center panel
           - properties: id, display-name, current-page
           - signals:    active-changed

 * CcPage  - an object representing a page within a CcPanel
           - properties: id, display-name
           - signals:    active-changed

Both objects derive from GtkAlignment. The current implementation in the
capplets that have converted is that each CcPage is packed into a
notebook created by the CcPanel object. Each page and panel also have a
set_active() function, which is called when the shell or Panel expects
the widget to be on screen.


libgnome-control-center-extension contains all this API, but also all
the cruft that was in the capplets/common directory. I don't think this
should all be publicly available. The theme utilities (for example)
should be kept private.


I'm hoping Jon can describe a bit more about how the shell, panels and
pages interact. From what I can see at the moment, the shell will parent
the panel object, but it does not interact with the pages object.

I have a few questions to start off the discussion:

 * Why do CcPanel and CcPage derive from GtkAlignment rather than (e.g.)
GtkBin.

 * Why does the shell not create a notebook for the panel and pack pages
into it? CcPanel would then not need to derive from GtkWidget.

 * Should "active" be a property on the CcPanel and CcPage objects?


It will be important to have a good API to allow third party capplets to
be well integrated, so we must make sure we define and document this API
before it is available in a final release.

Regards,

Thomas



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]