Monkey-patch in ClutterContainer methods for StBoxLayout
Setting options for children added to StBoxLayout is not convenient since we are missing the varargs methods of clutter_container. Patch in: child_set() - set properties of a child add() - add a child and set properties (this is different from clutter_container_add()! I think the deviation is with avoiding the awkward name add_with_properties() which is what might be expected. ClutterContainer currently doesn't have a method like this at all.) The code is written to allow patching into multiple ClutterContainer classes but for now only StBoxLayout is patched, since it's the only container we are using where we need to set options as properties. https://bugzilla.gnome.org/show_bug.cgi?id=595419
This commit is contained in:
parent
83402957bb
commit
e37790fdf9
@ -37,6 +37,28 @@ let shellDBusService = null;
|
||||
let modalCount = 0;
|
||||
let modalActorFocusStack = [];
|
||||
|
||||
// "monkey patch" in some varargs ClutterContainer methods; we need
|
||||
// to do this per-container class since there is no representation
|
||||
// of interfaces in Javascript
|
||||
function _patchContainerClass(containerClass) {
|
||||
// This one is a straightforward mapping of the C method
|
||||
containerClass.prototype.child_set = function(actor, props) {
|
||||
let meta = this.get_child_meta(actor);
|
||||
for (prop in props)
|
||||
meta[prop] = props[prop];
|
||||
};
|
||||
|
||||
// clutter_container_add() actually is a an add-many-actors
|
||||
// method. We conveniently, but somewhat dubiously, take the
|
||||
// this opportunity to make it do something more useful.
|
||||
containerClass.prototype.add = function(actor, props) {
|
||||
this.add_actor(actor);
|
||||
if (props)
|
||||
this.child_set(actor, props);
|
||||
};
|
||||
}
|
||||
_patchContainerClass(St.BoxLayout);
|
||||
|
||||
function start() {
|
||||
// Add a binding for "global" in the global JS namespace; (gjs
|
||||
// keeps the web browser convention of having that namespace be
|
||||
|
Loading…
Reference in New Issue
Block a user