package Desktop::Notify; use warnings; use strict; use Net::DBus; use File::Basename; use Data::Dumper; use Desktop::Notify::Notification; =head1 NAME Desktop::Notify - Communicate with the Desktop Notifications framework =head1 VERSION Version 0.03 =cut our $VERSION = '0.03'; =head1 SYNOPSIS use Desktop::Notify; # Open a connection to the notification daemon my $notify = Desktop::Notify->new(); # Create a notification to display my $notification = $notify->create(summary => 'Desktop::Notify', body => 'Hello, world!', timeout => 5000); # Display the notification $notification->show(); # Close the notification later $notification->close(); =head1 DESCRIPTION This module provides a Perl interface to the Desktop Notifications framework. The framework allows applications to display pop-up notifications on an X desktop. This is implemented with two components: a daemon that displays the notifications, and a client library used by applications to send notifications to the daemon. These components communicate through the DBus message bus protocol. More information is available from L This module serves the same purpose as C, in an object-oriented Perl interface. It is not, however, an interface to C itself, but a separate implementation of the specification using L. =head1 METHODS =head2 new %opts Connect to the notification daemon. %opts can include the following options: =over =item app_name The application name to use for notifications. Default is C =item bus The Net::DBus mesage bus to use. Default is to call Net::DBus->session, which is usually where notification-daemon can be reached. =item service The DBus service name of the daemon. Default is I. =item objpath The path to the notifications DBus object. Default is I. =item objiface The DBus interface to access the notifications object as. Default is I. =back =cut sub new { my ($class, %opts) = @_; my $self = {}; $self->{bus} = $opts{bus} || Net::DBus->session; $self->{service} = $self->{bus} ->get_service($opts{service} || 'org.freedesktop.Notifications'); $self->{notify} = $self->{service} ->get_object($opts{objpath} || '/org/freedesktop/Notifications', $opts{objiface} || 'org.freedesktop.Notifications'); $self->{app_name} = $opts{app_name} || basename($0); $self->{notify}->connect_to_signal('NotificationClosed', sub {$self->_close_cb(@_)}); bless $self, $class; } =head2 create %params Creates a new notification object that can be displayed later. This will return a L object; see that module for information about using it. =cut sub create { my ($self, %params) = @_; return new Desktop::Notify::Notification($self, %params); } sub _register_notification { my ($self, $n) = @_; $self->{notes}->{$n->{id}} = $n; } sub _close_cb { my ($self, $nid) = @_; print __PACKAGE__, ": notification closed\n"; if ($self->{close_callback}) { print "invoking callback\n"; $self->{close_callback}->($self->{notes}->{$nid}); } delete $self->{notes}->{$nid}; } =head2 close_callback $coderef Sets a user-specified function to be called whenever a notification is closed. It will be called with one argument, which is the Notification object that was just closed. =cut sub close_callback { my ($self, $cb) = @_; print "callback is $cb\n"; $self->{close_callback} = $cb; } =head1 AUTHOR Stephen Cavilia, C<< >> =head1 SEE ALSO L L L =head1 BUGS Please report any bugs or feature requests to C, or through the web interface at L. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. =head1 SUPPORT You can find documentation for this module with the perldoc command. perldoc Desktop::Notify You can also look for information at: =over 4 =item * AnnoCPAN: Annotated CPAN documentation L =item * CPAN Ratings L =item * RT: CPAN's request tracker L =item * Search CPAN L =back =head1 ACKNOWLEDGEMENTS =head1 COPYRIGHT & LICENSE Copyright 2007 Stephen Cavilia, all rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut 1; # End of Desktop::Notify