diff options
author | Pascal Rigaux <pixel@mandriva.com> | 2007-05-30 11:11:18 +0000 |
---|---|---|
committer | Pascal Rigaux <pixel@mandriva.com> | 2007-05-30 11:11:18 +0000 |
commit | c1af4addb6f18c15b59fc270854a0fbb8d92dcb6 (patch) | |
tree | 5a6f717efc60087849f45827fcbf618d40e15d46 /perl-install/dbus_object.pm | |
download | drakx-backup-do-not-use-c1af4addb6f18c15b59fc270854a0fbb8d92dcb6.tar drakx-backup-do-not-use-c1af4addb6f18c15b59fc270854a0fbb8d92dcb6.tar.gz drakx-backup-do-not-use-c1af4addb6f18c15b59fc270854a0fbb8d92dcb6.tar.bz2 drakx-backup-do-not-use-c1af4addb6f18c15b59fc270854a0fbb8d92dcb6.tar.xz drakx-backup-do-not-use-c1af4addb6f18c15b59fc270854a0fbb8d92dcb6.zip |
create branch 2007.1 from drakx-installer-* tarballs
(needed after the big svn loss)
Diffstat (limited to 'perl-install/dbus_object.pm')
-rw-r--r-- | perl-install/dbus_object.pm | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/perl-install/dbus_object.pm b/perl-install/dbus_object.pm new file mode 100644 index 000000000..1b4a4264e --- /dev/null +++ b/perl-install/dbus_object.pm @@ -0,0 +1,70 @@ +package dbus_object; + +sub system_bus() { + require Net::DBus; + Net::DBus->system; +} + +sub new { + my ($type, $bus, $service, $path, $interface) = @_; + my $o = { + bus => $bus, + service => $service, + path => $path, + interface => $interface, + }; + attach_object($o); + bless $o, $type; +} + +sub attach_object { + my ($o) = @_; + my $service = $o->{bus}->get_service($o->{service}); + $o->{object} = $service->get_object($o->{path}, $o->{interface}); +} + +sub call_method { + my ($o, $method, @args) = @_; + $o->{object}->$method(@args); +} + +sub safe_call_method { + my ($o, $method, @args) = @_; + my @ret; + eval { + @ret = $o->call_method($method, @args); + }; + if ($@) { + print STDERR "($method) exception: $@\n"; + $o->{bus}{connection}->dispatch; + return; + } + @ret; +} + +sub set_gtk2_watch { + my ($o) = @_; + set_gtk2_watch_helper($o->{bus}); +} + +sub set_gtk2_watch_helper { + my ($bus) = @_; + $bus->{connection}->set_watch_callbacks(sub { + my ($con, $watch) = @_; + my $flags = $watch->get_flags; + require Net::DBus::Binding::Watch; + require Gtk2::Helper; + if ($flags & &Net::DBus::Binding::Watch::READABLE) { + Gtk2::Helper->add_watch($watch->get_fileno, 'in', sub { + $watch->handle(&Net::DBus::Binding::Watch::READABLE); + $con->dispatch; + 1; + }); + } + #- do nothing for WRITABLE watch, we dispatch when needed + }, undef, undef); #- do nothing when watch is disabled or toggled yet + + $bus->{connection}->dispatch; +} + +1; |