[perl-Gtk3] Add an override for Gtk3::show_about_dialog
- From: Torsten SchÃnfeld <tsch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [perl-Gtk3] Add an override for Gtk3::show_about_dialog
- Date: Sat, 23 Jun 2012 16:48:11 +0000 (UTC)
commit ffd7da017c329eecd1586ae9373d9d1eae46f235
Author: Torsten SchÃnfeld <kaffeetisch gmx de>
Date: Sat Jun 23 18:44:53 2012 +0200
Add an override for Gtk3::show_about_dialog
NEWS | 2 ++
lib/Gtk3.pm | 39 +++++++++++++++++++++++++++++++++++++++
t/overrides.t | 32 +++++++++++++++++++++++---------
3 files changed, 64 insertions(+), 9 deletions(-)
---
diff --git a/NEWS b/NEWS
index cfdfde3..a1b0ce0 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,7 @@
{{$NEXT}}
+* Add an override for Gtk3::show_about_dialog.
+
Overview of changes in Gtk3 0.006 [2012-06-04]
==============================================
diff --git a/lib/Gtk3.pm b/lib/Gtk3.pm
index 222b0e6..170bd6e 100644
--- a/lib/Gtk3.pm
+++ b/lib/Gtk3.pm
@@ -139,6 +139,45 @@ sub Gtk3::main_quit {
Glib::Object::Introspection->invoke ($_GTK_BASENAME, undef, 'main_quit');
}
+{
+ my $global_about_dialog = undef;
+ my $about_dialog_key = '__gtk3_about_dialog';
+
+ sub Gtk3::show_about_dialog {
+ # For backwards-compatibility, optionally accept and discard a class
+ # argument.
+ my $parent_or_class = shift;
+ my $parent = defined $parent_or_class && $parent_or_class eq 'Gtk3'
+ ? shift
+ : $parent_or_class;
+ my %props = @_;
+ my $dialog = defined $parent
+ ? $parent->{$about_dialog_key}
+ : $global_about_dialog;
+
+ if (!$dialog) {
+ $dialog = Gtk3::AboutDialog->new;
+ $dialog->signal_connect (delete_event => \&Gtk3::Widget::hide_on_delete);
+ # FIXME: We can't actually do this fully correctly, because the license
+ # and credits subdialogs are private.
+ $dialog->signal_connect (response => \&Gtk3::Widget::hide);
+ foreach my $prop (keys %props) {
+ $dialog->set ($prop => $props{$prop});
+ }
+ if ($parent) {
+ $dialog->set_modal (Glib::TRUE);
+ $dialog->set_transient_for ($parent);
+ $dialog->set_destroy_with_parent (Glib::TRUE);
+ $parent->{$about_dialog_key} = $dialog;
+ } else {
+ $global_about_dialog = $dialog;
+ }
+ }
+
+ $dialog->present;
+ }
+}
+
sub Gtk3::Builder::add_objects_from_file {
my ($builder, $filename, @rest) = @_;
my $ref = _rest_to_ref (\ rest);
diff --git a/t/overrides.t b/t/overrides.t
index 448be74..2f9f572 100644
--- a/t/overrides.t
+++ b/t/overrides.t
@@ -5,7 +5,7 @@ BEGIN { require './t/inc/setup.pl' };
use strict;
use warnings;
-plan tests => 79;
+plan tests => 80;
# Gtk3::CHECK_VERSION and check_version
{
@@ -22,6 +22,28 @@ plan tests => 79;
ok (defined Gtk3->check_version ($x, $y, $z));
}
+# Gtk3::Window::new and list_toplevels. This is at the top to avoid testing
+# against a polluted list of toplevels.
+{
+ my $window1 = Gtk3::Window->new ('toplevel');
+ my $window2 = Gtk3::Window->new;
+ is_deeply ([Gtk3::Window::list_toplevels ()], [$window1, $window2]);
+ is (scalar Gtk3::Window::list_toplevels (), $window2);
+}
+
+# Gtk3::show_about_dialog
+{
+ my %props = (program_name => 'Foo',
+ version => '42',
+ authors => [qw/me myself i/],
+ license_type => 'lgpl-2-1');
+ Gtk3::show_about_dialog (undef, %props);
+ Gtk3->show_about_dialog (undef, %props);
+ Gtk3::show_about_dialog (Gtk3::Window->new, %props);
+ Gtk3->show_about_dialog (Gtk3::Window->new, %props);
+ ok (1);
+}
+
# Gtk3::CellLayout::get_cells
{
my $cell = Gtk3::TreeViewColumn->new;
@@ -213,14 +235,6 @@ SKIP: {
isa_ok ($sel_iter, 'Gtk3::TreeIter');
}
-# Gtk3::Window::new and list_toplevels
-{
- my $window1 = Gtk3::Window->new ('toplevel');
- my $window2 = Gtk3::Window->new;
- is_deeply ([Gtk3::Window::list_toplevels ()], [$window1, $window2]);
- is (scalar Gtk3::Window::list_toplevels (), $window2);
-}
-
# Gtk3::Gdk::Window::new
SKIP: {
# FIXME: https://bugzilla.gnome.org/show_bug.cgi?id=670369
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]