in your object after creation */ public $__gsignals = array('clicked' => 'override', 'mashed' => array(GObject::SIGNAL_RUN_LAST, GObject::TYPE_BOOLEAN, array(GObject::TYPE_LONG, GtkRequisition::gtype))); /* any method named ___do_{$signalname} will be considered the default handler for a signal */ public function __do_clicked() { echo "do_clicked called\n"; } function __do_mashed($arg, $arg2) { echo "NewType: class closure for `mashed` called with arguments {$arg}, ", get_class($arg2), "\n"; } } /* handler to attach to our new signal */ function my_handler($obj, $arg, $arg2, $ex) { echo "my_handler called with args {$arg}, ", get_class($arg2), " and extra {$ex}\n"; /* This stops bubbling */ return true; } GObject::register_type('NewType'); $c = new NewType(); $r = $c->size_request(); $c->connect('mashed', 'my_handler', 99); $c->emit('clicked'); var_dump($c->emit('mashed', 42, $r)); /* Returns: do_clicked called my_handler called with args 42, GtkRequisition and extra 99 NewType: class closure for `mashed` called with arguments 42, GtkRequisition bool(false) */
{ echo "__set_gproperty called for {$spec} = {$value}\n"; if ($spec->name == 'foo') { $this->foo = $value; } else { if ($spec->name == 'bar') { $this->bar = $value; } else { trigger_error('Unknown property'); } } } } GObject::register_type('NewType'); echo $c, "\n"; $c = new NewType(); var_dump($c->get_property('foo')); var_dump($c->get_property('bar')); var_dump($c->get_property('zoo')); $c->set_property('bar', new GtkButton()); echo $c->get_property('bar'); echo "\n"; /* Returns: __get_gproperty called for [GParamString 'foo'] string(6) "abcdef" __get_gproperty called for [GParamObject 'bar'] NULL __get_gproperty called for [GParamBoolean 'zoo'] bool(true) __set_gproperty called for [GParamObject 'bar'] = [GtkButton object (GtkButton Gtk+ type)] __get_gproperty called for [GParamObject 'bar']
function __do_mashed($arg, $arg2) { echo "NewType2: class closure for `mashed` called, chaining up to NewType\n"; NewType::__do_mashed($arg, $arg2); }