Re: problems destroying Gtk2::Window
- From: muppet <scott asofyet org>
- To: Tomáš Bažant <tbazant suse cz>
- Cc: gtk-perl-list gnome org
- Subject: Re: problems destroying Gtk2::Window
- Date: Thu, 17 Sep 2009 19:53:30 -0400
On Sep 17, 2009, at 4:40 AM, Tomáš Bažant wrote:
hi
i working an a small application which uses one main Gtk2::Window. i
have connected the destroy-event and delete-event to it, but after
clicking on X close button of the window manager, the window
disappears
and i have no chance to manage it any further.
any idea how to make it obey?
Depends on what you want to do. Are you wanting to catch the user
clicking the "x" so you can prompt before closing the window?
The delete-event signal has a return type, and what you return from
delete-event is important!
Here's one that does pretty much everything and should give you a feel
for it. You connect to destroy to kill the main loop so that the main
loop stops no matter how the window is destroyed. You connect to
delete-event to trap the user trying to kill the window via the window
manager (including shortcuts like Alt+F4, etc). There's really no
reason to connect to destroy-event.
#!/usr/bin/env perl
use strict;
use warnings;
use Gtk2 -init;
use Glib ':constants';
my $window = Gtk2::Window->new;
$window->set_title ("I do stuff.");
my $want_prompt_check =
Gtk2::CheckButton->new ("Ask before closing via window manager
kill");
my $kill_me_button = Gtk2::Button->new ("I demand that you shoot me
now");
$kill_me_button->signal_connect (clicked => sub {
print "Clicky! Killing the window directly.\n";
$window->destroy;
});
$window->signal_connect (delete_event => sub {
print "Window manager kill event!\n";
my $should_prompt = $want_prompt_check->get_active;
print " User " . ($should_prompt ? "wants" : "does not want")
. " to be prompted first.\n";
if ($should_prompt) {
my $dialog = Gtk2::MessageDialog->new
($window, [], 'question', 'none',
"Do you really want to kill the window?");
$dialog->add_buttons ( "No, just kidding" => 'cancel',
"Yes, kill it" => 'accept');
my $response = $dialog->run;
$dialog->destroy;
if ($response ne 'accept') {
print "User didn't say yes, returning TRUE to say we
handled the"
. "event\nand inhibit the default event actions.\n";
return TRUE;
}
}
print "Returning FALSE from delete-event will let the default
action happen.\n"
. "(The default action is to destroy the window.)\n";
return FALSE;
});
$window->signal_connect (destroy => sub {
print "Woe betide me, i art dead. I will stop main loop now.\n";
Gtk2->main_quit;
});
my $vbox = Gtk2::VBox->new;
$vbox->pack_start ($want_prompt_check, FALSE, FALSE, 0);
$vbox->pack_start ($kill_me_button, FALSE, FALSE, 0);
$window->add ($vbox);
$window->show_all;
Gtk2->main;
print "Main loop finished!\n";
__END__
--
Santa ate all the cookies!
-- Zella's first, indignant words on Christmas morning, '07.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]