home *** CD-ROM | disk | FTP | other *** search
- #!/usr/bin/perl -w
- use strict;
- use Gnome2;
-
- # $Header: /cvsroot/gtk2-perl/gtk2-perl-xs/Gnome2/examples/session-management.pl,v 1.1 2003/12/10 21:13:17 kaffeetisch Exp $
-
- my $application = Gnome2::Program -> init("Test", "0.1", "libgnomeui");
- my $client = Gnome2::Client -> master();
-
- ###############################################################################
-
- $client -> signal_connect(die => sub {
- # No time to save anything, just die.
- Gtk2 -> main_quit();
- });
-
- $client -> signal_connect(save_yourself => sub {
- my ($client,
- $phase,
- $save_style,
- $shutting_down,
- $interact_style,
- $fast) = @_;
-
- if ($fast) { # We're in a hurry, so don't do anything that takes ages.
- unless (save_session_quickly()) {
- error("Saving session failed.") if ($interact_style & "error");
- return 0;
- }
- }
- else { # We've plenty of time.
- unless (save_session()) {
- if ($interact_style & "any") {
- question("Couldn't save session. Do you want me to " .
- "delete all your personal files in response?",
- sub { delete_all_personal_files(); });
- }
- elsif ($interact_style & "error") {
- error("Saving session failed.");
- }
-
- return 0;
- }
- }
-
- return 1;
- });
-
- ###############################################################################
-
- my $app = Gnome2::App -> new("test", "Test");
- my $box = Gtk2::VBox -> new(0, 0);
-
- my $button_die = Gtk2::Button -> new("_Die");
- my $button_save = Gtk2::Button -> new("_Save");
- my $button_save_quickly = Gtk2::Button -> new("Save quickly");
-
- # Normally, those events are fired by the session manager when the user logs
- # out or kills the application via the session UI. We emulate them here.
- $button_die -> signal_connect(clicked => sub {
- $client -> signal_emit("die");
- });
-
- $button_save -> signal_connect(clicked => sub {
- $client -> request_save("local", 0, "any", 0, 0);
- });
-
- $button_save_quickly -> signal_connect(clicked => sub {
- $client -> request_save("local", 0, "errors", 1, 0);
- });
-
- $box -> pack_start($button_die, 0, 0, 0);
- $box -> pack_start($button_save, 0, 0, 0);
- $box -> pack_start($button_save_quickly, 0, 0, 0);
-
- $app -> set_contents($box);
- $app -> show_all();
-
- $app -> signal_connect(destroy => sub {
- Gtk2 -> main_quit();
- });
-
- Gtk2 -> main();
-
- ###############################################################################
-
- sub delete_all_personal_files {
- $| = 1;
- print "Deleting all personal files ...";
- select(undef, undef, undef, 0.25);
- print " done.\n";
- }
-
- sub error {
- my ($label) = @_;
-
- my $dialog = Gtk2::MessageDialog -> new($app,
- [qw(modal destroy-with-parent)],
- "error",
- "ok",
- $label);
-
- $dialog -> signal_connect(response => sub {
- my ($dialog, $response) = @_;
- $dialog -> hide();
- });
-
- $client -> save_error_dialog($dialog);
- }
-
- sub question {
- my ($label, $callback) = @_;
-
- my $dialog = Gtk2::MessageDialog -> new($app,
- [qw(modal destroy-with-parent)],
- "question",
- "yes-no",
- $label);
-
- $dialog -> signal_connect(response => sub {
- my ($dialog, $response) = @_;
- $callback -> () if ($response eq "yes");
- $dialog -> hide();
- });
-
- $client -> save_any_dialog($dialog);
- }
-
- sub save_session {
- select(undef, undef, undef, 0.5);
- return int(rand(2));
- }
-
- sub save_session_quickly {
- select(undef, undef, undef, 0.1);
- return int(rand(2));
- }
-