Desktop::Notify - Communicate with the Desktop Notifications framework


Desktop-Notify documentation Contained in the Desktop-Notify distribution.

Index


Code Index:

NAME

Top

Desktop::Notify - Communicate with the Desktop Notifications framework

VERSION

Top

Version 0.03

SYNOPSIS

Top

    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();

DESCRIPTION

Top

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 http://trac.galago-project.org/wiki/DesktopNotifications

This module serves the same purpose as libnotify, in an object-oriented Perl interface. It is not, however, an interface to libnotify itself, but a separate implementation of the specification using Net::DBus.

METHODS

Top

new %opts

Connect to the notification daemon. %opts can include the following options:

app_name

The application name to use for notifications. Default is basename($0)

bus

The Net::DBus mesage bus to use. Default is to call Net::DBus->session, which is usually where notification-daemon can be reached.

service

The DBus service name of the daemon. Default is org.freedesktop.Notifications.

objpath

The path to the notifications DBus object. Default is /org/freedesktop/Notifications.

objiface

The DBus interface to access the notifications object as. Default is org.freedesktop.Notifications.

create %params

Creates a new notification object that can be displayed later. This will return a Desktop::Notify::Notification object; see that module for information about using it.

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.

AUTHOR

Top

Stephen Cavilia, <sac at atomicradi.us>

SEE ALSO

Top

Net::DBus

http://www.galago-project.org/specs/notification/index.php

http://www.galago-project.org/downloads.php

BUGS

Top

Please report any bugs or feature requests to bug-desktop-notify at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Desktop-Notify. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

SUPPORT

Top

You can find documentation for this module with the perldoc command.

    perldoc Desktop::Notify

You can also look for information at:

* AnnoCPAN: Annotated CPAN documentation

http://annocpan.org/dist/Desktop-Notify

* CPAN Ratings

http://cpanratings.perl.org/d/Desktop-Notify

* RT: CPAN's request tracker

http://rt.cpan.org/NoAuth/Bugs.html?Dist=Desktop-Notify

* Search CPAN

http://search.cpan.org/dist/Desktop-Notify

ACKNOWLEDGEMENTS

Top

COPYRIGHT & LICENSE

Top


Desktop-Notify documentation Contained in the Desktop-Notify distribution.
package Desktop::Notify;

use warnings;
use strict;

use Net::DBus;
use File::Basename;
use Data::Dumper;

use Desktop::Notify::Notification;

our $VERSION = '0.03';

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;
}

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};
}

sub close_callback {
    my ($self, $cb) = @_;

    print "callback is $cb\n";
    $self->{close_callback} = $cb;
}

1; # End of Desktop::Notify