/* * Copyright (c) 2003 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$ */ #include "gtk2perl.h" /* ------------------------------------------------------------------------- */ #define GDK2PERL_TEXT_LIST_DECLARE \ guchar *real_text = NULL; \ STRLEN length; \ gchar **list = NULL; \ int i, elements = 0; #define GDK2PERL_TEXT_LIST_FETCH \ real_text = (guchar *) SvPV (text, length); #define GDK2PERL_TEXT_LIST_STORE \ if (elements == 0) \ XSRETURN_EMPTY; \ \ EXTEND (sp, elements); \ \ for (i = 0; i < elements; i++) \ PUSHs (sv_2mortal (newSVpv (list[i], PL_na))); /* ------------------------------------------------------------------------- */ #define GDK2PERL_TEXT_CONVERSION_DECALRE \ GdkAtom encoding; \ gint format; \ guchar *ctext = NULL; \ gint length; #define GDK2PERL_TEXT_CONVERSION_STORE \ EXTEND (sp, 3); \ PUSHs (sv_2mortal (newSVGdkAtom (encoding))); \ PUSHs (sv_2mortal (newSViv (format))); \ PUSHs (sv_2mortal (newSVpv ((gchar *) ctext, length))); /* ------------------------------------------------------------------------- */ MODULE = Gtk2::Gdk::Property PACKAGE = Gtk2::Gdk::Atom PREFIX = gdk_atom_ =for apidoc ne __hide__ =cut ## for easy comparisons of atoms =for apidoc __hide__ =cut gboolean eq (left, right, swap=FALSE) GdkAtom left GdkAtom right ALIAS: ne = 1 CODE: switch (ix) { case 0: RETVAL = left == right; break; case 1: RETVAL = left != right; break; default: croak ("incorrect alias value encountered"); RETVAL = FALSE; } OUTPUT: RETVAL ## GdkAtom gdk_atom_intern (const gchar *atom_name, gboolean only_if_exists) GdkAtom gdk_atom_intern (class, atom_name, only_if_exists=FALSE) const gchar *atom_name gboolean only_if_exists ALIAS: Gtk2::Gdk::Atom::new = 1 C_ARGS: atom_name, only_if_exists CLEANUP: PERL_UNUSED_VAR (ix); ## 2.10 adds gdk_atom_intern_static_string(). This isn't useful from perl. ## gchar* gdk_atom_name (GdkAtom atom) gchar_own * gdk_atom_name (atom) GdkAtom atom # --------------------------------------------------------------------------- # MODULE = Gtk2::Gdk::Property PACKAGE = Gtk2::Gdk::Window PREFIX = gdk_ ### the docs warn us not to use this one, but don't say it's deprecated. ## gboolean gdk_property_get (GdkWindow *window, GdkAtom property, GdkAtom type, gulong offset, gulong length, gint pdelete, GdkAtom *actual_property_type, gint *actual_format, gint *actual_length, guchar **data) =for apidoc =for signature (property_type, format, data) = $window->property_get ($property, $type, $offset, $length, $pdelete) See I for an explanation of the meaning of I. =cut void gdk_property_get (window, property, type, offset, length, pdelete) GdkWindow *window GdkAtom property GdkAtom type gulong offset gulong length gint pdelete PREINIT: GdkAtom actual_property_type; gint actual_format; gint actual_length; guchar *data; guint i; PPCODE: if (! gdk_property_get (window, property, type, offset, length, pdelete, &actual_property_type, &actual_format, &actual_length, &data)) XSRETURN_EMPTY; EXTEND (SP, 2); PUSHs (sv_2mortal (newSVGdkAtom (actual_property_type))); PUSHs (sv_2mortal (newSViv (actual_format))); if (data) { switch (actual_format) { case 8: { gchar *char_data = (gchar *) data; XPUSHs (sv_2mortal (newSVpv (char_data, actual_length))); break; } case 16: { gushort *short_data = (gushort *) data; for (i = 0; i < (actual_length / sizeof (gushort)); i++) XPUSHs (sv_2mortal (newSVuv (short_data[i]))); break; } case 32: { gulong *long_data = (gulong *) data; for (i = 0; i < (actual_length / sizeof (gulong)); i++) XPUSHs (sv_2mortal (newSVuv (long_data[i]))); break; } default: warn ("Unhandled format value %d in gdk_property_get, should not happen", actual_format); } g_free (data); } ### nelements is the number of elements in the data, not the number of bytes. ## void gdk_property_change (GdkWindow *window, GdkAtom property, GdkAtom type, gint format, GdkPropMode mode, const guchar *data, gint nelements) =for apidoc =for arg ... property value(s) Depending on the value of I, the property value(s) can be: +--------------------+------------------------------------+ | format | value | +--------------------+------------------------------------+ | Gtk2::Gdk::CHARS | a string | | Gtk2::Gdk::USHORTS | one or more unsigned short numbers | | Gtk2::Gdk::ULONGS | one or more unsigned long numbers | +--------------------+------------------------------------+ =cut void gdk_property_change (window, property, type, format, mode, ...) GdkWindow *window GdkAtom property GdkAtom type gint format GdkPropMode mode PREINIT: guchar *data = NULL; int i; int first_index = 5; STRLEN nelements; CODE: switch (format) { case 8: { SV *sv = ST (first_index); /* need to use sv_len here because \0's are allowed. */ data = (guchar *) SvPV (sv, nelements); break; } case 16: { gushort *short_data = gperl_alloc_temp (sizeof (gushort) * (items - first_index)); for (i = first_index; i < items; i++) short_data[i - first_index] = (gushort) SvUV (ST (i)); data = (guchar *) short_data; nelements = items - first_index; break; } case 32: { gulong *long_data = gperl_alloc_temp (sizeof (gulong) * (items - first_index)); for (i = first_index; i < items; i++) long_data[i - first_index] = (gulong) SvUV (ST (i)); data = (guchar *) long_data; nelements = items - first_index; break; } default: croak ("Illegal format value %d used; should be either 8, 16 or 32", format); } gdk_property_change (window, property, type, format, mode, data, nelements); ## void gdk_property_delete (GdkWindow *window, GdkAtom property) void gdk_property_delete (window, property) GdkWindow *window GdkAtom property # --------------------------------------------------------------------------- # MODULE = Gtk2::Gdk::Property PACKAGE = Gtk2::Gdk PREFIX = gdk_ =for apidoc Returns a list of strings. =cut ## gint gdk_text_property_to_text_list (GdkAtom encoding, gint format, const guchar *text, gint length, gchar ***list) void gdk_text_property_to_text_list (class, encoding, format, text) GdkAtom encoding gint format SV *text PREINIT: GDK2PERL_TEXT_LIST_DECLARE; PPCODE: GDK2PERL_TEXT_LIST_FETCH; elements = gdk_text_property_to_text_list (encoding, format, real_text, length, &list); GDK2PERL_TEXT_LIST_STORE; gdk_free_text_list (list); =for apidoc Returns a list of strings. =cut ## gint gdk_text_property_to_utf8_list (GdkAtom encoding, gint format, const guchar *text, gint length, gchar ***list) void gdk_text_property_to_utf8_list (class, encoding, format, text) GdkAtom encoding gint format SV *text PREINIT: GDK2PERL_TEXT_LIST_DECLARE; PPCODE: GDK2PERL_TEXT_LIST_FETCH; elements = gdk_text_property_to_utf8_list (encoding, format, real_text, length, &list); GDK2PERL_TEXT_LIST_STORE; g_strfreev (list); =for apidoc Returns a list of strings. =cut ## gint gdk_string_to_compound_text (const gchar *str, GdkAtom *encoding, gint *format, guchar **ctext, gint *length) void gdk_string_to_compound_text (class, str) const gchar *str PREINIT: GDK2PERL_TEXT_CONVERSION_DECALRE; PPCODE: if (0 != gdk_string_to_compound_text (str, &encoding, &format, &ctext, &length)) XSRETURN_EMPTY; GDK2PERL_TEXT_CONVERSION_STORE; gdk_free_compound_text (ctext); =for apidoc Returns a list of strings. =cut ## gboolean gdk_utf8_to_compound_text (const gchar *str, GdkAtom *encoding, gint *format, guchar **ctext, gint *length) void gdk_utf8_to_compound_text (class, str) const gchar *str PREINIT: GDK2PERL_TEXT_CONVERSION_DECALRE; PPCODE: if (! gdk_utf8_to_compound_text (str, &encoding, &format, &ctext, &length)) XSRETURN_EMPTY; GDK2PERL_TEXT_CONVERSION_STORE; gdk_free_compound_text (ctext); #if GTK_CHECK_VERSION (2, 2, 0) =for apidoc Returns a list of strings. =cut ## gint gdk_text_property_to_text_list_for_display (GdkDisplay *display, GdkAtom encoding, gint format, const guchar *text, gint length, gchar ***list) void gdk_text_property_to_text_list_for_display (class, display, encoding, format, text) GdkDisplay *display GdkAtom encoding gint format SV *text PREINIT: GDK2PERL_TEXT_LIST_DECLARE; PPCODE: GDK2PERL_TEXT_LIST_FETCH; elements = gdk_text_property_to_text_list_for_display (display, encoding, format, real_text, length, &list); GDK2PERL_TEXT_LIST_STORE; gdk_free_text_list (list); =for apidoc Returns a list of strings. =cut ## gint gdk_text_property_to_utf8_list_for_display (GdkDisplay *display, GdkAtom encoding, gint format, const guchar *text, gint length, gchar ***list) void gdk_text_property_to_utf8_list_for_display (class, display, encoding, format, text) GdkDisplay *display GdkAtom encoding gint format SV *text PREINIT: GDK2PERL_TEXT_LIST_DECLARE; PPCODE: GDK2PERL_TEXT_LIST_FETCH; elements = gdk_text_property_to_utf8_list_for_display (display, encoding, format, real_text, length, &list); GDK2PERL_TEXT_LIST_STORE; g_strfreev (list); =for apidoc Returns a list of strings. =cut ## gint gdk_string_to_compound_text_for_display (GdkDisplay *display, const gchar *str, GdkAtom *encoding, gint *format, guchar **ctext, gint *length) void gdk_string_to_compound_text_for_display (class, display, str) GdkDisplay *display const gchar *str PREINIT: GDK2PERL_TEXT_CONVERSION_DECALRE; PPCODE: if (0 != gdk_string_to_compound_text_for_display (display, str, &encoding, &format, &ctext, &length)) XSRETURN_EMPTY; GDK2PERL_TEXT_CONVERSION_STORE; gdk_free_compound_text (ctext); =for apidoc Returns a list of strings. =cut ## gboolean gdk_utf8_to_compound_text_for_display (GdkDisplay *display, const gchar *str, GdkAtom *encoding, gint *format, guchar **ctext, gint *length) void gdk_utf8_to_compound_text_for_display (class, display, str) GdkDisplay *display const gchar *str PREINIT: GDK2PERL_TEXT_CONVERSION_DECALRE; PPCODE: if (! gdk_utf8_to_compound_text_for_display (display, str, &encoding, &format, &ctext, &length)) XSRETURN_EMPTY; GDK2PERL_TEXT_CONVERSION_STORE; gdk_free_compound_text (ctext); #endif /* 2.2.0 */ =for apidoc Returns a list of strings. =cut ## gchar *gdk_utf8_to_string_target (const gchar *str) gchar_ornull * gdk_utf8_to_string_target (class, str) const gchar *str C_ARGS: str