[perl-Gtk3] Add more overrides
- From: Torsten SchÃnfeld <tsch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [perl-Gtk3] Add more overrides
- Date: Sat, 10 Sep 2011 21:59:16 +0000 (UTC)
commit f6c1e09498fda28a2a06ba085eaf5c7d9604764a
Author: Torsten SchÃnfeld <kaffeetisch gmx de>
Date: Sat Sep 10 23:51:37 2011 +0200
Add more overrides
lib/Gtk3.pm | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
t/overrides.t | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 106 insertions(+), 1 deletions(-)
---
diff --git a/lib/Gtk3.pm b/lib/Gtk3.pm
index f7d35b1..9abb0fb 100644
--- a/lib/Gtk3.pm
+++ b/lib/Gtk3.pm
@@ -10,6 +10,13 @@ our @ISA = qw(Exporter);
my $_GTK_BASENAME = 'Gtk';
my $_GTK_VERSION = '3.0';
my $_GTK_PACKAGE = 'Gtk3';
+my @_GTK_FLATTEN_ARRAY_REF_RETURN_FOR = qw/
+ Gtk3::Window::list_toplevels
+/;
+my @_GTK_HANDLE_SENTINEL_BOOLEAN_FOR = qw/
+ Gtk3::TreeModel::get_iter_first
+ Gtk3::TreeSelection::get_selected
+/;
sub import {
my $class = shift;
@@ -17,7 +24,9 @@ sub import {
Glib::Object::Introspection->setup (
basename => $_GTK_BASENAME,
version => $_GTK_VERSION,
- package => $_GTK_PACKAGE);
+ package => $_GTK_PACKAGE,
+ flatten_array_ref_return_for => \ _GTK_FLATTEN_ARRAY_REF_RETURN_FOR,
+ handle_sentinel_boolean_for => \ _GTK_HANDLE_SENTINEL_BOOLEAN_FOR);
my $init = 0;
my @unknown_args = ($class);
@@ -66,6 +75,16 @@ sub Gtk3::main_quit {
Glib::Object::Introspection->invoke ($_GTK_BASENAME, undef, 'main_quit');
}
+sub Gtk3::Button::new {
+ my ($class, $label) = @_;
+ if (defined $label) {
+ return $class->new_with_mnemonic ($label);
+ } else {
+ return Glib::Object::Introspection->invoke (
+ $_GTK_BASENAME, 'Button', 'new', @_);
+ }
+}
+
sub Gtk3::ListStore::new {
my ($class, @types) = @_;
local $@;
@@ -77,6 +96,11 @@ sub Gtk3::ListStore::new {
$class, $real_types);
}
+# Reroute 'get' to Gtk3::ListStore instead of Glib::Object.
+sub Gtk3::ListStore::get {
+ return Gtk3::TreeModel::get (@_);
+}
+
sub Gtk3::ListStore::set {
my ($model, $iter, @columns_and_values) = @_;
my (@columns, @values);
@@ -103,6 +127,33 @@ sub Gtk3::ListStore::set {
$model, $iter, \ columns, \ wrapped_values);
}
+sub Gtk3::MessageDialog::new {
+ my ($class, $parent, $flags, $type, $buttons, $format, @args) = @_;
+ my $dialog = Glib::Object::new ($class, message_type => $type,
+ buttons => $buttons);
+ if (defined $format) {
+ # sprintf can handle empty @args
+ my $msg = sprintf $format, @args;
+ $dialog->set (text => $msg);
+ }
+ if (defined $parent) {
+ $dialog->set_transient_for ($parent);
+ }
+ if ($flags & 'modal') {
+ $dialog->set_modal (Glib::TRUE);
+ }
+ if ($flags & 'destroy-with-parent') {
+ $dialog->set_destroy_with_parent (Glib::TRUE);
+ }
+ return $dialog;
+}
+
+sub Gtk3::TreeModel::get {
+ my ($model, $iter, @columns) = @_;
+ my @values = map { $model->get_value ($iter, $_) } @columns;
+ return @values[0..$#values];
+}
+
sub Gtk3::TreePath::new {
my ($class, @args) = @_;
my $method = (@args == 1) ? 'new_from_string' : 'new';
diff --git a/t/overrides.t b/t/overrides.t
new file mode 100644
index 0000000..6c331a5
--- /dev/null
+++ b/t/overrides.t
@@ -0,0 +1,54 @@
+#!/usr/bin/env perl
+
+BEGIN { require './t/inc/setup.pl' };
+
+use strict;
+use warnings;
+
+plan tests => 11;
+
+# Gtk3::Window::list_toplevels
+{
+ my $window1 = Gtk3::Window->new ('toplevel');
+ my $window2 = Gtk3::Window->new ('toplevel');
+ is_deeply ([Gtk3::Window::list_toplevels ()], [$window1, $window2]);
+ is (scalar Gtk3::Window::list_toplevels (), $window2);
+}
+
+# Gtk3::ListStore->new, set and get
+{
+ my $model = Gtk3::ListStore->new ([qw/Glib::String Glib::Int/]);
+ my $iter = $model->append;
+ $model->set ($iter, [0, 1], ['Foo', 23]);
+ is_deeply ([$model->get ($iter, 0,1)], ['Foo', 23]);
+ is (scalar $model->get ($iter, 0,1), 23);
+
+ $iter = $model->append;
+ $model->set ($iter, 0 => 'Bar', 1 => 42);
+ is_deeply ([$model->get ($iter, 0,1)], ['Bar', 42]);
+ is (scalar $model->get ($iter, 0,1), 42);
+
+ local $@;
+ eval { $model->set ($iter, 0) };
+ like ($@, qr/Usage/);
+}
+
+# Gtk3::TreeModel->get_iter_first
+{
+ my $model = Gtk3::ListStore->new ('Glib::String');
+ is ($model->get_iter_first, undef);
+ my $iter = $model->append;
+ isa_ok ($model->get_iter_first, 'Gtk3::TreeIter');
+}
+
+# Gtk3::TreeSelection->get_selected
+{
+ my $model = Gtk3::ListStore->new ('Glib::String');
+ my $view = Gtk3::TreeView->new ($model);
+ my $selection = $view->get_selection;
+ my $iter = $model->append;
+ $selection->select_iter ($iter);
+ my ($sel_model, $sel_iter) = $selection->get_selected;
+ is ($sel_model, $model);
+ isa_ok ($sel_iter, 'Gtk3::TreeIter');
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]