[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Patch for GtkOrientable et GtkEntry (again) 2.16



Hi,

Here's the patch for adding GtkOrientable, a new interface added in Gtk 2.16. I tried to do my best and took a look at other interfaces (Gtk2::Editable and Gtk2::Buildable). This patch might need some guidance.

I've resubmitted GtkEntry, because I realized that svn diff doesn't take into a count the files that it doesn't know (the ones svn status lists with '?'). This new version adds the typemap for 2.16.

Emmanuel
Index: maps-2.16
===================================================================
--- maps-2.16	(revision 0)
+++ maps-2.16	(revision 0)
@@ -0,0 +1 @@
+GTK_TYPE_ENTRY_ICON_POSITION  GtkEntryIconPosition  GEnum  Gtk2::EntryIconPosition
Index: xs/GtkEntry.xs
===================================================================
--- xs/GtkEntry.xs	(revision 2104)
+++ xs/GtkEntry.xs	(working copy)
@@ -227,6 +227,60 @@
 
 #endif /* 2.14 */
 
+
+#if GTK_CHECK_VERSION(2, 16, 0)
+
+#
+# FIXME: Missing typemap, actually I don't think that gio is available through Perl
+#
+# GIcon_ornull* gtk_entry_get_gicon (GtkEntry *entry, GtkEntryIconPosition icon_pos);
+# void gtk_entry_set_icon_from_gicon (GtkEntry *entry, GtkEntryIconPosition icon_pos, GIcon_ornull *icon);
+#
+
+gboolean gtk_entry_get_icon_activatable (GtkEntry *entry, GtkEntryIconPosition icon_pos);
+
+gint gtk_entry_get_icon_at_pos (GtkEntry *entry, gint x, gint y);
+
+const gchar_ornull* gtk_entry_get_icon_name (GtkEntry *entry, GtkEntryIconPosition icon_pos);
+
+gboolean gtk_entry_get_icon_sensitive (GtkEntry *entry, GtkEntryIconPosition icon_pos);
+
+GdkPixbuf_ornull* gtk_entry_get_pixbuf (GtkEntry *entry, GtkEntryIconPosition icon_pos);
+
+gdouble gtk_entry_get_progress_fraction (GtkEntry *entry);
+
+gdouble gtk_entry_get_progress_pulse_step (GtkEntry *entry);
+
+void gtk_entry_progress_pulse (GtkEntry *entry);
+
+const gchar_ornull* gtk_entry_get_stock (GtkEntry *entry, GtkEntryIconPosition icon_pos);
+
+GtkImageType gtk_entry_get_storage_type (GtkEntry *entry, GtkEntryIconPosition icon_pos);
+
+void gtk_entry_set_icon_activatable (GtkEntry *entry, GtkEntryIconPosition icon_pos, gboolean activatable);
+
+void gtk_entry_set_icon_from_icon_name (GtkEntry *entry, GtkEntryIconPosition icon_pos, const gchar_ornull *icon_name);
+
+void gtk_entry_set_icon_from_pixbuf (GtkEntry *entry, GtkEntryIconPosition icon_pos, GdkPixbuf_ornull *pixbuf);
+
+void gtk_entry_set_icon_from_stock (GtkEntry *entry, GtkEntryIconPosition icon_pos, const gchar_ornull *stock_id);
+
+void gtk_entry_set_icon_sensitive (GtkEntry *entry, GtkEntryIconPosition icon_pos, gboolean sensitive);
+
+void gtk_entry_set_icon_tooltip_markup (GtkEntry *entry, GtkEntryIconPosition icon_pos, const gchar_ornull *tooltip);
+
+void gtk_entry_set_icon_tooltip_text (GtkEntry *entry, GtkEntryIconPosition icon_pos, const gchar_ornull *tooltip);
+
+void gtk_entry_set_progress_fraction (GtkEntry *entry, gdouble fraction);
+
+void gtk_entry_set_progress_pulse_step (GtkEntry *entry, gdouble fraction);
+
+void gtk_entry_unset_invisible_char (GtkEntry *entry);
+
+
+#endif /* 2.16 */
+
+
 ##
 ## hey, these are deprecated!  is that new as of 2.3.x?
 ##
Index: t/GtkEntry.t
===================================================================
--- t/GtkEntry.t	(revision 2104)
+++ t/GtkEntry.t	(working copy)
@@ -1,6 +1,6 @@
 #!/usr/bin/perl -w
 use strict;
-use Gtk2::TestHelper tests => 23;
+use Gtk2::TestHelper tests => 61;
 
 # $Id$
 
@@ -99,6 +99,113 @@
   is ($entry -> get_overwrite_mode(), FALSE);
 }
 
+SKIP: {
+  skip 'progress methods', 4
+    unless Gtk2->CHECK_VERSION(2, 16, 0);
+
+  my $entry = Gtk2::Entry -> new();
+  is ($entry -> get_icon_at_pos(0, 0), -1);
+	
+	is ($entry -> get_progress_fraction(), 0.0);
+	is ($entry -> get_progress_pulse_step(), 0.1);
+	
+	$entry -> progress_pulse(); # We can't see the changes :(
+	
+	$entry -> set_progress_fraction(0.3);
+	is ($entry -> get_progress_fraction(), 0.3);
+	
+	$entry -> set_progress_pulse_step(0.2);
+}
+
+SKIP: {
+  skip 'unset_invisible_char', 2
+    unless Gtk2->CHECK_VERSION(2, 16, 0);
+
+	# Try the new password methods
+	my $password = Gtk2::Entry -> new();
+	$password -> set_visibility(FALSE);
+
+	
+	# Change the default character
+	my $default = $password -> get_invisible_char();
+	my $char = $default eq 'X' ? '?' : 'X';
+	$password -> set_invisible_char($char);
+	is($password -> get_invisible_char(), $char);
+	
+	# Restore the default character
+	$password -> unset_invisible_char();
+	is($password -> get_invisible_char(), $default);
+}
+
+SKIP: {
+  skip 'icon methods', 18
+    unless Gtk2->CHECK_VERSION(2, 16, 0);
+		
+	test_icon_methods('primary');
+	test_icon_methods('secondary');
+}
+
+
+sub test_icon_methods {
+	my ($icon_pos) = @_;
+
+	my $entry = Gtk2::Entry -> new();
+	
+	is ($entry -> get_icon_activatable($icon_pos), FALSE);
+	is ($entry -> get_icon_name($icon_pos), undef);
+	is ($entry -> get_icon_sensitive($icon_pos), TRUE);
+	is ($entry -> get_pixbuf($icon_pos), undef);
+	is ($entry -> get_stock($icon_pos), undef);
+	
+	$entry -> set_icon_activatable($icon_pos, TRUE);
+	is ($entry -> get_icon_activatable($icon_pos), TRUE);
+
+
+
+	# Is an 'icon name' the same as a 'stock icon'?
+	is ($entry -> get_icon_name($icon_pos), undef);
+	$entry -> set_icon_from_icon_name($icon_pos, 'gtk-yes');
+	is ($entry -> get_icon_name($icon_pos), 'gtk-yes');
+	ok($entry -> get_pixbuf($icon_pos));
+	
+	# Reset through icon_name
+	$entry -> set_icon_from_icon_name($icon_pos, undef);
+	is($entry -> get_pixbuf($icon_pos), undef);
+
+	
+
+	# Set and unset the icon through a stock image
+	$entry -> set_icon_from_stock($icon_pos, 'gtk-yes');
+	ok($entry -> get_pixbuf($icon_pos));
+	$entry -> set_icon_from_stock($icon_pos, undef);
+	is($entry -> get_pixbuf($icon_pos), undef);
+
+	# Reset
+	$entry -> set_icon_from_stock($icon_pos, undef);
+	is ($entry -> get_icon_name($icon_pos), undef);
+	is($entry -> get_pixbuf($icon_pos), undef);
+
+	
+
+	# Set and unset the icon through a pixbuf
+	my $pixbuf = Gtk2::Gdk::Pixbuf->new('rgb', TRUE, 8, 16, 16);
+	$entry -> set_icon_from_pixbuf($icon_pos, $pixbuf);
+	is($entry -> get_pixbuf($icon_pos), $pixbuf);
+	$entry -> set_icon_from_pixbuf($icon_pos, undef);
+	is($entry -> get_pixbuf($icon_pos), undef);
+		
+
+	# This method can't be tested, at least we call them just in case they crash
+	$entry -> set_icon_sensitive($icon_pos, TRUE);
+	$entry -> set_icon_sensitive($icon_pos, FALSE);
+
+	$entry -> set_icon_tooltip_markup($icon_pos, "<b>Pan</b><i>Go</i> tooltip");
+	$entry -> set_icon_tooltip_markup($icon_pos, undef);
+
+	$entry -> set_icon_tooltip_text($icon_pos, "Text tooltip");
+	$entry -> set_icon_tooltip_text($icon_pos, undef);
+}
+
 __END__
 
 Copyright (C) 2003-2006 by the gtk2-perl team (see the file AUTHORS for the
Index: maps-2.16
===================================================================
--- maps-2.16	(revision 0)
+++ maps-2.16	(revision 0)
@@ -0,0 +1 @@
+GTK_TYPE_ORIENTABLE GtkOrientable GInterface Gtk2::Orientable
Index: xs/GtkOrientable.xs
===================================================================
--- xs/GtkOrientable.xs	(revision 0)
+++ xs/GtkOrientable.xs	(revision 0)
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2009 by the gtk2-perl team (see the file AUTHORS)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA  02111-1307  USA.
+ *
+ * $Id: NEW FILE $
+ */
+
+#include "gtk2perl.h"
+
+
+MODULE = Gtk2::Orientable	PACKAGE = Gtk2::Orientable	PREFIX = gtk_orientable_
+
+=for object Gtk2::Orientable - Interface for flippable widgets
+=cut
+
+=for apidoc __hide__
+=cut
+void
+_ADD_INTERFACE (class, const char * target_class)
+    CODE:
+    {
+	static const GInterfaceInfo iface_info = {
+		(GInterfaceInitFunc) NULL,
+		(GInterfaceFinalizeFunc) NULL,
+		(gpointer) NULL
+	};
+	GType gtype = gperl_object_type_from_package (target_class);
+	g_type_add_interface_static (gtype, GTK_TYPE_ORIENTABLE, &iface_info);
+    }
+
+
+GtkOrientation gtk_orientable_get_orientation (GtkOrientable *orientable);
+
+void gtk_orientable_set_orientation (GtkOrientable *orientable, GtkOrientation orientation);
Index: xs_files-2.16
===================================================================
--- xs_files-2.16	(revision 0)
+++ xs_files-2.16	(revision 0)
@@ -0,0 +1 @@
+xs/GtkOrientable.xs
Index: t/GtkOrientable.t
===================================================================
--- t/GtkOrientable.t	(revision 0)
+++ t/GtkOrientable.t	(revision 0)
@@ -0,0 +1,30 @@
+#!/usr/bin/perl -w
+use strict;
+use Gtk2::TestHelper
+	tests => 6,
+	at_least_version => [2, 16, 0, 'GtkOrientable: it appeared in 2.16'];
+
+# $Id: NEW FILE $
+
+
+my $vbox = Gtk2::VBox -> new();
+isa_ok($vbox, "Gtk2::Orientable");
+is($vbox->get_orientation, 'vertical');
+
+my $hbox = Gtk2::HBox -> new();
+isa_ok($hbox, "Gtk2::Orientable");
+is($hbox->get_orientation, 'horizontal');
+
+
+# Swap the orientation
+$vbox->set_orientation('horizontal');
+is($vbox->get_orientation, 'horizontal');
+
+$hbox->set_orientation('vertical');
+is($hbox->get_orientation, 'vertical');
+
+
+__END__
+
+Copyright (C) 2009 by the gtk2-perl team (see the file AUTHORS for the
+full list).  See LICENSE for more information.


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]