diff options
Diffstat (limited to 'lib/App/XScreenSaver/DBus/SaverProxy.pm')
-rw-r--r-- | lib/App/XScreenSaver/DBus/SaverProxy.pm | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/lib/App/XScreenSaver/DBus/SaverProxy.pm b/lib/App/XScreenSaver/DBus/SaverProxy.pm new file mode 100644 index 0000000..d098045 --- /dev/null +++ b/lib/App/XScreenSaver/DBus/SaverProxy.pm @@ -0,0 +1,34 @@ +package App::XScreenSaver::DBus::SaverProxy; +use strict; +use warnings; +use experimental 'signatures'; +# this is the interface name +use Net::DBus::Exporter qw(org.freedesktop.ScreenSaver); +use parent 'Net::DBus::Object'; + +dbus_method('Inhibit',['string','string'],['uint32']); +dbus_method('UnInhibit',['uint32'],[]); + +sub new($class,$service,$path,$inhibit_cb,$uninhibit_cb) { + my $self = $class->SUPER::new($service, $path); + bless $self, $class; + $self->{__inhibit_cb} = $inhibit_cb; + $self->{__uninhibit_cb} = $uninhibit_cb; + return $self; +} + +our $_message; +sub _dispatch_object($self,$connection,$message,@etc) { + local $_message = $message; + return $self->SUPER::_dispatch_object($connection,$message,@etc); +} + +sub Inhibit($self,$name,$reason) { + return $self->{__inhibit_cb}->($name,$reason,$_message); +} + +sub UnInhibit($self,$cookie) { + return $self->{__uninhibit_cb}->($cookie,$_message); +} + +1; |