From 70cd66a60bd778c5b2fbd2c0dc748e5a2fe53e2f Mon Sep 17 00:00:00 2001 From: Raffaele Sandrini Date: Wed, 9 Jul 2008 09:17:43 +0000 Subject: [PATCH] Add support for creation methods with a different (mostly super) type than 2008-07-09 Raffaele Sandrini * gobject/valaccodegenerator.vala: * gobject/valaccodemethodbinding.vala: * vala/valacreationmethod.vala: * vala/valainterfacewriter.vala: * vapigen/valagidlparser.vala: Add support for creation methods with a different (mostly super) type than the type of the object it creates. Add a `type' parameter to the CCode attribute which will be used to get the casts right for such creation methods. * vapi/gio-2.0.vapi: * vapi/gtk+-2.0.vapi: Regenerated, fixes bug 540661 svn path=/trunk/; revision=1688 --- ChangeLog | 18 ++++ gobject/valaccodegenerator.vala | 26 ++++-- gobject/valaccodemethodbinding.vala | 33 ++++++- vala/valacreationmethod.vala | 8 ++ vala/valainterfacewriter.vala | 3 + vapi/gio-2.0.vapi | 11 +++ vapi/gtk+-2.0.vapi | 170 ++++++++++++++++++++++++++++++++++++ vapigen/valagidlparser.vala | 9 ++ 8 files changed, 269 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3c3314b..3cbcaf5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,21 @@ +2008-07-09 Raffaele Sandrini + + * gobject/valaccodegenerator.vala: + * gobject/valaccodemethodbinding.vala: + * vala/valacreationmethod.vala: + * vala/valainterfacewriter.vala: + * vapigen/valagidlparser.vala: + + Add support for creation methods with a different (mostly super) type + than the type of the object it creates. Add a `type' parameter to the + CCode attribute which will be used to get the casts right for such + creation methods. + + * vapi/gio-2.0.vapi: + * vapi/gtk+-2.0.vapi: + + Regenerated, fixes bug 540661 + 2008-07-08 Raffaele Sandrini * vapi/packages/gtk+-2.0/gtk+-2.0.metadata: diff --git a/gobject/valaccodegenerator.vala b/gobject/valaccodegenerator.vala index 5e3358f..45e4689 100644 --- a/gobject/valaccodegenerator.vala +++ b/gobject/valaccodegenerator.vala @@ -3083,7 +3083,7 @@ public class Vala.CCodeGenerator : CodeGenerator { expr.accept_children (this); CCodeExpression instance = null; - CCodeFunctionCall creation_call = null; + CCodeExpression creation_expr = null; var st = expr.type_reference.data_type as Struct; if ((st != null && !st.is_simple_type ()) || expr.get_object_initializer ().size > 0) { @@ -3095,6 +3095,8 @@ public class Vala.CCodeGenerator : CodeGenerator { } if (expr.symbol_reference == null) { + CCodeFunctionCall creation_call; + // no creation method if (expr.type_reference.data_type == glist_type || expr.type_reference.data_type == gslist_type) { @@ -3116,10 +3118,13 @@ public class Vala.CCodeGenerator : CodeGenerator { creation_call.add_argument (new CCodeConstant ("0")); creation_call.add_argument (new CCodeIdentifier ("sizeof (%s)".printf (expr.type_reference.get_cname ()))); } + + creation_expr = creation_call; } else if (expr.symbol_reference is Method) { // use creation method var m = (Method) expr.symbol_reference; var params = m.get_parameters (); + CCodeFunctionCall creation_call; creation_call = new CCodeFunctionCall (new CCodeIdentifier (m.get_cname ())); @@ -3230,9 +3235,18 @@ public class Vala.CCodeGenerator : CodeGenerator { // ensure variable argument list ends with NULL creation_call.add_argument (new CCodeConstant ("NULL")); } + + creation_expr = creation_call; + + // cast the return value of the creation method back to the intended type if + // it requested a special C return type + if (method_binding (m).get_custom_creturn_type () != null) { + creation_expr = new CCodeCastExpression (creation_expr, expr.type_reference.get_cname ()); + } } else if (expr.symbol_reference is ErrorCode) { var ecode = (ErrorCode) expr.symbol_reference; var edomain = (ErrorDomain) ecode.parent_symbol; + CCodeFunctionCall creation_call; creation_call = new CCodeFunctionCall (new CCodeIdentifier ("g_error_new")); creation_call.add_argument (new CCodeIdentifier (edomain.get_upper_case_cname ())); @@ -3241,6 +3255,8 @@ public class Vala.CCodeGenerator : CodeGenerator { foreach (Expression arg in expr.get_argument_list ()) { creation_call.add_argument ((CCodeExpression) arg.ccodenode); } + + creation_expr = creation_call; } else { assert (false); } @@ -3249,9 +3265,9 @@ public class Vala.CCodeGenerator : CodeGenerator { var ccomma = new CCodeCommaExpression (); if (expr.type_reference.data_type is Struct) { - ccomma.append_expression (creation_call); + ccomma.append_expression (creation_expr); } else { - ccomma.append_expression (new CCodeAssignment (instance, creation_call)); + ccomma.append_expression (new CCodeAssignment (instance, creation_expr)); } foreach (MemberInitializer init in expr.get_object_initializer ()) { @@ -3278,8 +3294,8 @@ public class Vala.CCodeGenerator : CodeGenerator { ccomma.append_expression (instance); expr.ccodenode = ccomma; - } else if (creation_call != null) { - expr.ccodenode = creation_call; + } else if (creation_expr != null) { + expr.ccodenode = creation_expr; } } diff --git a/gobject/valaccodemethodbinding.vala b/gobject/valaccodemethodbinding.vala index b113591..06155e7 100644 --- a/gobject/valaccodemethodbinding.vala +++ b/gobject/valaccodemethodbinding.vala @@ -18,6 +18,7 @@ * * Author: * Jürg Billeter + * Raffaele Sandrini */ using GLib; @@ -33,6 +34,25 @@ public class Vala.CCodeMethodBinding : CCodeBinding { get { return (method.get_attribute ("NoWrapper") == null); } } + public string? get_custom_creturn_type () { + var attr = method.get_attribute ("CCode"); + if (attr != null) { + string type = attr.get_string ("type"); + if (type != null) { + return type; + } + } + return null; + } + + string get_creturn_type (string default_value) { + string type = get_custom_creturn_type (); + if (type == null) { + return default_value; + } + return type; + } + public CCodeMethodBinding (CCodeGenerator codegen, Method method) { this.method = method; this.codegen = codegen; @@ -127,7 +147,7 @@ public class Vala.CCodeMethodBinding : CCodeBinding { } } - codegen.function = new CCodeFunction (m.get_real_cname (), creturn_type.get_cname ()); + codegen.function = new CCodeFunction (m.get_real_cname (), get_creturn_type (creturn_type.get_cname ())); m.ccodenode = codegen.function; if (m.is_inline) { @@ -166,7 +186,7 @@ public class Vala.CCodeMethodBinding : CCodeBinding { cparam_map.set (codegen.get_param_pos (m.cinstance_parameter_position), instance_param); if (m.is_abstract || m.is_virtual) { - var vdecl = new CCodeDeclaration (creturn_type.get_cname ()); + var vdecl = new CCodeDeclaration (get_creturn_type (creturn_type.get_cname ())); vdeclarator = new CCodeFunctionDeclarator (m.vfunc_name); vdecl.add_declarator (vdeclarator); codegen.type_struct.add_declaration (vdecl); @@ -498,7 +518,7 @@ public class Vala.CCodeMethodBinding : CCodeBinding { cstmt = new CCodeReturnStatement (vcall); } else { /* store method return value for postconditions */ - var cdecl = new CCodeDeclaration (creturn_type.get_cname ()); + var cdecl = new CCodeDeclaration (get_creturn_type (creturn_type.get_cname ())); cdecl.add_declarator (new CCodeVariableDeclarator.with_initializer ("result", vcall)); cstmt = cdecl; } @@ -549,8 +569,13 @@ public class Vala.CCodeMethodBinding : CCodeBinding { } if (codegen.current_type_symbol is Class) { + CCodeExpression cresult = new CCodeIdentifier ("self"); + if (get_custom_creturn_type () != null) { + cresult = new CCodeCastExpression (cresult, get_custom_creturn_type ()); + } + var creturn = new CCodeReturnStatement (); - creturn.return_expression = new CCodeIdentifier ("self"); + creturn.return_expression = cresult; codegen.function.block.add_statement (creturn); } } diff --git a/vala/valacreationmethod.vala b/vala/valacreationmethod.vala index b4cffbd..b2c40e9 100644 --- a/vala/valacreationmethod.vala +++ b/vala/valacreationmethod.vala @@ -38,6 +38,14 @@ public class Vala.CreationMethod : Method { public int n_construction_params { get; set; } /** + * Specifies a custom C return type for that creation method. + * Only the idl parser and the interface writer should use this. + * FIXME: remove this as soon the compiler has a decent attribute + * handling. + */ + public string? custom_return_type_cname { get; set; } + + /** * Creates a new method. * * @param name method name diff --git a/vala/valainterfacewriter.vala b/vala/valainterfacewriter.vala index 510b525..db97941 100644 --- a/vala/valainterfacewriter.vala +++ b/vala/valainterfacewriter.vala @@ -769,6 +769,9 @@ public class Vala.InterfaceWriter : CodeVisitor { ccode_params.append_printf ("%ssentinel = \"%s\"", separator, m.sentinel); separator = ", "; } + if (m is CreationMethod && ((CreationMethod)m).custom_return_type_cname != null) { + ccode_params.append_printf ("%stype = \"%s\"", separator, ((CreationMethod)m).custom_return_type_cname); + } if (ccode_params.len > 0) { write_indent (); diff --git a/vapi/gio-2.0.vapi b/vapi/gio-2.0.vapi index f4f227f..2e69843 100644 --- a/vapi/gio-2.0.vapi +++ b/vapi/gio-2.0.vapi @@ -254,7 +254,9 @@ namespace GLib { public class BufferedInputStream : GLib.FilterInputStream { public ulong get_available (); public ulong get_buffer_size (); + [CCode (type = "GInputStream*")] public BufferedInputStream (GLib.InputStream base_stream); + [CCode (type = "GInputStream*")] public BufferedInputStream.sized (GLib.InputStream base_stream, ulong size); public ulong peek (void* buffer, ulong offset, ulong count); public void* peek_buffer (ulong count); @@ -269,7 +271,9 @@ namespace GLib { public class BufferedOutputStream : GLib.FilterOutputStream { public bool get_auto_grow (); public ulong get_buffer_size (); + [CCode (type = "GOutputStream*")] public BufferedOutputStream (GLib.OutputStream base_stream); + [CCode (type = "GOutputStream*")] public BufferedOutputStream.sized (GLib.OutputStream base_stream, ulong size); public void set_auto_grow (bool auto_grow); public void set_buffer_size (ulong size); @@ -340,6 +344,7 @@ namespace GLib { [CCode (cheader_filename = "gio/gio.h")] public class FileIcon : GLib.Object, GLib.Icon, GLib.LoadableIcon { public weak GLib.File get_file (); + [CCode (type = "GIcon*")] public FileIcon (GLib.File file); } [CCode (cheader_filename = "gio/gio.h")] @@ -494,7 +499,9 @@ namespace GLib { [CCode (cheader_filename = "gio/gio.h")] public class MemoryInputStream : GLib.InputStream, GLib.Seekable { public void add_data (void* data, long len, GLib.DestroyNotify? destroy); + [CCode (type = "GInputStream*")] public MemoryInputStream (); + [CCode (type = "GInputStream*")] public MemoryInputStream.from_data (void* data, long len, GLib.DestroyNotify? destroy); } [CCode (cheader_filename = "gio/gio.h")] @@ -502,6 +509,7 @@ namespace GLib { public void* get_data (); public ulong get_data_size (); public ulong get_size (); + [CCode (type = "GOutputStream*")] public MemoryOutputStream (void* data, ulong len, GLib.ReallocFunc realloc_fn, GLib.DestroyNotify? destroy); } [CCode (cheader_filename = "gio/gio.h")] @@ -584,8 +592,11 @@ namespace GLib { public class ThemedIcon : GLib.Object, GLib.Icon { public void append_name (string iconname); public weak string get_names (); + [CCode (type = "GIcon*")] public ThemedIcon (string iconname); + [CCode (type = "GIcon*")] public ThemedIcon.from_names (string[] iconnames, int len); + [CCode (type = "GIcon*")] public ThemedIcon.with_default_fallbacks (string iconname); public void prepend_name (string iconname); [NoAccessorMethod] diff --git a/vapi/gtk+-2.0.vapi b/vapi/gtk+-2.0.vapi index ad2cd2c..7acf3e2 100644 --- a/vapi/gtk+-2.0.vapi +++ b/vapi/gtk+-2.0.vapi @@ -1745,6 +1745,7 @@ namespace Gtk { public weak string get_website (); public weak string get_website_label (); public bool get_wrap_license (); + [CCode (type = "GtkWidget*")] public AboutDialog (); [NoArrayLength] public void set_artists (string[] artists); @@ -1809,6 +1810,7 @@ namespace Gtk { public ushort accel_string_width; public weak Gtk.Widget get_accel_widget (); public uint get_accel_width (); + [CCode (type = "GtkWidget*")] public AccelLabel (string str); public bool refetch (); public void set_accel_closure (GLib.Closure accel_closure); @@ -1927,6 +1929,7 @@ namespace Gtk { public class Adjustment : Gtk.Object { public void clamp_page (double lower, double upper); public double get_value (); + [CCode (type = "GtkObject*")] public Adjustment (double value, double lower, double upper, double step_increment, double page_increment, double page_size); public void set_value (double value); [NoAccessorMethod] @@ -1948,6 +1951,7 @@ namespace Gtk { [CCode (cheader_filename = "gtk/gtk.h")] public class Alignment : Gtk.Bin, Atk.Implementor, Gtk.Buildable { public void get_padding (uint padding_top, uint padding_bottom, uint padding_left, uint padding_right); + [CCode (type = "GtkWidget*")] public Alignment (float xalign, float yalign, float xscale, float yscale); public void set (float xalign, float yalign, float xscale, float yscale); public void set_padding (uint padding_top, uint padding_bottom, uint padding_left, uint padding_right); @@ -1970,6 +1974,7 @@ namespace Gtk { } [CCode (cheader_filename = "gtk/gtk.h")] public class Arrow : Gtk.Misc, Atk.Implementor, Gtk.Buildable { + [CCode (type = "GtkWidget*")] public Arrow (Gtk.ArrowType arrow_type, Gtk.ShadowType shadow_type); public void set (Gtk.ArrowType arrow_type, Gtk.ShadowType shadow_type); [NoAccessorMethod] @@ -1980,6 +1985,7 @@ namespace Gtk { [CCode (cheader_filename = "gtk/gtk.h")] public class AspectFrame : Gtk.Frame, Atk.Implementor, Gtk.Buildable { public Gtk.Allocation center_allocation; + [CCode (type = "GtkWidget*")] public AspectFrame (string label, float xalign, float yalign, float ratio, bool obey_child); public void set (float xalign, float yalign, float ratio, bool obey_child); [NoAccessorMethod] @@ -2007,6 +2013,7 @@ namespace Gtk { public weak string get_page_title (Gtk.Widget page); public Gtk.AssistantPageType get_page_type (Gtk.Widget page); public int insert_page (Gtk.Widget page, int position); + [CCode (type = "GtkWidget*")] public Assistant (); public int prepend_page (Gtk.Widget page); public void remove_action_widget (Gtk.Widget child); @@ -2080,9 +2087,13 @@ namespace Gtk { public Gtk.ReliefStyle get_relief (); public bool get_use_stock (); public bool get_use_underline (); + [CCode (type = "GtkWidget*")] public Button (); + [CCode (type = "GtkWidget*")] public Button.from_stock (string stock_id); + [CCode (type = "GtkWidget*")] public Button.with_label (string label); + [CCode (type = "GtkWidget*")] public Button.with_mnemonic (string label); public void set_alignment (float xalign, float yalign); public void set_focus_on_click (bool focus_on_click); @@ -2155,6 +2166,7 @@ namespace Gtk { public int get_detail_width_chars (); public Gtk.CalendarDisplayOptions get_display_options (); public bool mark_day (uint day); + [CCode (type = "GtkWidget*")] public Calendar (); public void select_day (uint day); public bool select_month (uint month, uint year); @@ -2236,6 +2248,7 @@ namespace Gtk { public weak Gtk.Widget edit_widget; public weak Gtk.Widget grab_widget; public weak Gtk.Widget sizing_label; + [CCode (type = "GtkCellRenderer*")] public CellRendererAccel (); [NoAccessorMethod] public uint accel_key { get; set; } @@ -2251,6 +2264,7 @@ namespace Gtk { [CCode (cheader_filename = "gtk/gtk.h")] public class CellRendererCombo : Gtk.CellRendererText { public uint focus_out_id; + [CCode (type = "GtkCellRenderer*")] public CellRendererCombo (); [NoAccessorMethod] public bool has_entry { get; set; } @@ -2262,6 +2276,7 @@ namespace Gtk { } [CCode (cheader_filename = "gtk/gtk.h")] public class CellRendererPixbuf : Gtk.CellRenderer { + [CCode (type = "GtkCellRenderer*")] public CellRendererPixbuf (); [NoAccessorMethod] public bool follow_state { get; set; } @@ -2282,6 +2297,7 @@ namespace Gtk { } [CCode (cheader_filename = "gtk/gtk.h")] public class CellRendererProgress : Gtk.CellRenderer { + [CCode (type = "GtkCellRenderer*")] public CellRendererProgress (); [NoAccessorMethod] public Gtk.ProgressBarOrientation orientation { get; set; } @@ -2298,6 +2314,7 @@ namespace Gtk { } [CCode (cheader_filename = "gtk/gtk.h")] public class CellRendererSpin : Gtk.CellRendererText { + [CCode (type = "GtkCellRenderer*")] public CellRendererSpin (); [NoAccessorMethod] public Gtk.Adjustment adjustment { get; set; } @@ -2313,6 +2330,7 @@ namespace Gtk { public Pango.Underline underline_style; public int fixed_height_rows; public uint calc_fixed_height; + [CCode (type = "GtkCellRenderer*")] public CellRendererText (); public void set_fixed_height_from_font (int number_of_rows); [NoAccessorMethod] @@ -2409,6 +2427,7 @@ namespace Gtk { public class CellRendererToggle : Gtk.CellRenderer { public bool get_active (); public bool get_radio (); + [CCode (type = "GtkCellRenderer*")] public CellRendererToggle (); public void set_active (bool setting); public void set_radio (bool radio); @@ -2427,9 +2446,13 @@ namespace Gtk { public weak GLib.List get_cell_renderers (); public weak Gtk.TreePath get_displayed_row (); public bool get_size_of_row (Gtk.TreePath path, out Gtk.Requisition requisition); + [CCode (type = "GtkWidget*")] public CellView (); + [CCode (type = "GtkWidget*")] public CellView.with_markup (string markup); + [CCode (type = "GtkWidget*")] public CellView.with_pixbuf (Gdk.Pixbuf pixbuf); + [CCode (type = "GtkWidget*")] public CellView.with_text (string text); public void set_background_color (Gdk.Color color); public void set_displayed_row (Gtk.TreePath path); @@ -2445,8 +2468,11 @@ namespace Gtk { } [CCode (cheader_filename = "gtk/gtk.h")] public class CheckButton : Gtk.ToggleButton, Atk.Implementor, Gtk.Buildable { + [CCode (type = "GtkWidget*")] public CheckButton (); + [CCode (type = "GtkWidget*")] public CheckButton.with_label (string label); + [CCode (type = "GtkWidget*")] public CheckButton.with_mnemonic (string label); [NoWrapper] public virtual void draw_indicator (Gdk.Rectangle area); @@ -2457,8 +2483,11 @@ namespace Gtk { public bool get_active (); public bool get_draw_as_radio (); public bool get_inconsistent (); + [CCode (type = "GtkWidget*")] public CheckMenuItem (); + [CCode (type = "GtkWidget*")] public CheckMenuItem.with_label (string label); + [CCode (type = "GtkWidget*")] public CheckMenuItem.with_mnemonic (string label); public void set_active (bool is_active); public void set_draw_as_radio (bool draw_as_radio); @@ -2506,7 +2535,9 @@ namespace Gtk { public void get_color (out Gdk.Color color); public weak string get_title (); public bool get_use_alpha (); + [CCode (type = "GtkWidget*")] public ColorButton (); + [CCode (type = "GtkWidget*")] public ColorButton.with_color (Gdk.Color color); public void set_alpha (ushort alpha); public void set_color (Gdk.Color color); @@ -2527,6 +2558,7 @@ namespace Gtk { public ushort get_previous_alpha (); public void get_previous_color (out Gdk.Color color); public bool is_adjusting (); + [CCode (type = "GtkWidget*")] public ColorSelection (); public static bool palette_from_string (string str, Gdk.Color[] colors); public static weak string palette_to_string (Gdk.Color[] colors); @@ -2549,6 +2581,7 @@ namespace Gtk { public weak Gtk.Widget ok_button; public weak Gtk.Widget cancel_button; public weak Gtk.Widget help_button; + [CCode (type = "GtkWidget*")] public ColorSelectionDialog (string title); } [CCode (cheader_filename = "gtk/gtk.h")] @@ -2566,8 +2599,11 @@ namespace Gtk { public weak string get_title (); public int get_wrap_width (); public void insert_text (int position, string text); + [CCode (type = "GtkWidget*")] public ComboBox (); + [CCode (type = "GtkWidget*")] public ComboBox.text (); + [CCode (type = "GtkWidget*")] public ComboBox.with_model (Gtk.TreeModel model); public void prepend_text (string text); public void remove_text (int position); @@ -2605,8 +2641,11 @@ namespace Gtk { [CCode (cheader_filename = "gtk/gtk.h")] public class ComboBoxEntry : Gtk.ComboBox, Atk.Implementor, Gtk.Buildable, Gtk.CellEditable, Gtk.CellLayout { public int get_text_column (); + [CCode (type = "GtkWidget*")] public ComboBoxEntry (); + [CCode (type = "GtkWidget*")] public ComboBoxEntry.text (); + [CCode (type = "GtkWidget*")] public ComboBoxEntry.with_model (Gtk.TreeModel model, int text_column); public void set_text_column (int text_column); public int text_column { get; set; } @@ -2678,6 +2717,7 @@ namespace Gtk { [NoArrayLength] public weak float[] ctlpoint; public void get_vector (int veclen, float[] vector); + [CCode (type = "GtkWidget*")] public Curve (); public void reset (); public void set_curve_type (Gtk.CurveType type); @@ -2706,7 +2746,9 @@ namespace Gtk { public void add_buttons (...); public bool get_has_separator (); public int get_response_for_widget (Gtk.Widget widget); + [CCode (type = "GtkWidget*")] public Dialog (); + [CCode (type = "GtkWidget*")] public Dialog.with_buttons (string? title, Gtk.Window? parent, Gtk.DialogFlags flags, ...); public int run (); [CCode (sentinel = "-1")] @@ -2723,6 +2765,7 @@ namespace Gtk { [CCode (cheader_filename = "gtk/gtk.h")] public class DrawingArea : Gtk.Widget, Atk.Implementor, Gtk.Buildable { public void* draw_data; + [CCode (type = "GtkWidget*")] public DrawingArea (); } [CCode (cheader_filename = "gtk/gtk.h")] @@ -2773,6 +2816,7 @@ namespace Gtk { public bool get_visibility (); public int get_width_chars (); public int layout_index_to_text_index (int layout_index); + [CCode (type = "GtkWidget*")] public Entry (); public void set_activates_default (bool setting); public void set_alignment (float xalign); @@ -2865,6 +2909,7 @@ namespace Gtk { public class EventBox : Gtk.Bin, Atk.Implementor, Gtk.Buildable { public bool get_above_child (); public bool get_visible_window (); + [CCode (type = "GtkWidget*")] public EventBox (); public void set_above_child (bool above_child); public void set_visible_window (bool visible_window); @@ -2879,7 +2924,9 @@ namespace Gtk { public int get_spacing (); public bool get_use_markup (); public bool get_use_underline (); + [CCode (type = "GtkWidget*")] public Expander (string label); + [CCode (type = "GtkWidget*")] public Expander.with_mnemonic (string label); public void set_expanded (bool expanded); public void set_label (string label); @@ -2900,8 +2947,11 @@ namespace Gtk { public bool get_focus_on_click (); public weak string get_title (); public int get_width_chars (); + [CCode (type = "GtkWidget*")] public FileChooserButton (string title, Gtk.FileChooserAction action); + [CCode (type = "GtkWidget*")] public FileChooserButton.with_backend (string title, Gtk.FileChooserAction action, string backend); + [CCode (type = "GtkWidget*")] public FileChooserButton.with_dialog (Gtk.Widget dialog); public void set_focus_on_click (bool focus_on_click); public void set_title (string title); @@ -2915,12 +2965,16 @@ namespace Gtk { } [CCode (cheader_filename = "gtk/gtk.h")] public class FileChooserDialog : Gtk.Dialog, Atk.Implementor, Gtk.Buildable, Gtk.FileChooser { + [CCode (type = "GtkWidget*")] public FileChooserDialog (string? title, Gtk.Window? parent, Gtk.FileChooserAction action, ...); + [CCode (type = "GtkWidget*")] public FileChooserDialog.with_backend (string? title, Gtk.Window? parent, Gtk.FileChooserAction action, string backend, ...); } [CCode (cheader_filename = "gtk/gtk.h")] public class FileChooserWidget : Gtk.VBox, Atk.Implementor, Gtk.Buildable, Gtk.FileChooser, Gtk.FileChooserEmbed { + [CCode (type = "GtkWidget*")] public FileChooserWidget (Gtk.FileChooserAction action); + [CCode (type = "GtkWidget*")] public FileChooserWidget.with_backend (Gtk.FileChooserAction action, string backend); } [CCode (cheader_filename = "gtk/gtk.h")] @@ -2940,6 +2994,7 @@ namespace Gtk { public weak GLib.List children; public bool get_has_window (); public void move (Gtk.Widget widget, int x, int y); + [CCode (type = "GtkWidget*")] public Fixed (); public void put (Gtk.Widget widget, int x, int y); public void set_has_window (bool has_window); @@ -2952,7 +3007,9 @@ namespace Gtk { public weak string get_title (); public bool get_use_font (); public bool get_use_size (); + [CCode (type = "GtkWidget*")] public FontButton (); + [CCode (type = "GtkWidget*")] public FontButton.with_font (string fontname); public bool set_font_name (string fontname); public void set_show_size (bool show_size); @@ -2985,6 +3042,7 @@ namespace Gtk { public int size; public weak string get_font_name (); public weak string get_preview_text (); + [CCode (type = "GtkWidget*")] public FontSelection (); public bool set_font_name (string fontname); public void set_preview_text (string text); @@ -3005,6 +3063,7 @@ namespace Gtk { public bool auto_resize; public weak string get_font_name (); public weak string get_preview_text (); + [CCode (type = "GtkWidget*")] public FontSelectionDialog (string title); public bool set_font_name (string fontname); public void set_preview_text (string text); @@ -3016,6 +3075,7 @@ namespace Gtk { public void get_label_align (float xalign, float yalign); public weak Gtk.Widget get_label_widget (); public Gtk.ShadowType get_shadow_type (); + [CCode (type = "GtkWidget*")] public Frame (string? label); public void set_label (string label); public void set_label_align (float xalign, float yalign); @@ -3042,35 +3102,44 @@ namespace Gtk { public float gamma; public weak Gtk.Widget gamma_dialog; public weak Gtk.Widget gamma_text; + [CCode (type = "GtkWidget*")] public GammaCurve (); } [CCode (cheader_filename = "gtk/gtk.h")] public class HBox : Gtk.Box, Atk.Implementor, Gtk.Buildable { + [CCode (type = "GtkWidget*")] public HBox (bool homogeneous, int spacing); } [CCode (cheader_filename = "gtk/gtk.h")] public class HButtonBox : Gtk.ButtonBox, Atk.Implementor, Gtk.Buildable { + [CCode (type = "GtkWidget*")] public HButtonBox (); } [CCode (cheader_filename = "gtk/gtk.h")] public class HPaned : Gtk.Paned, Atk.Implementor, Gtk.Buildable { + [CCode (type = "GtkWidget*")] public HPaned (); } [CCode (cheader_filename = "gtk/gtk.h")] public class HRuler : Gtk.Ruler, Atk.Implementor, Gtk.Buildable { + [CCode (type = "GtkWidget*")] public HRuler (); } [CCode (cheader_filename = "gtk/gtk.h")] public class HScale : Gtk.Scale, Atk.Implementor, Gtk.Buildable { + [CCode (type = "GtkWidget*")] public HScale (Gtk.Adjustment adjustment); + [CCode (type = "GtkWidget*")] public HScale.with_range (double min, double max, double step); } [CCode (cheader_filename = "gtk/gtk.h")] public class HScrollbar : Gtk.Scrollbar, Atk.Implementor, Gtk.Buildable { + [CCode (type = "GtkWidget*")] public HScrollbar (Gtk.Adjustment adjustment); } [CCode (cheader_filename = "gtk/gtk.h")] public class HSeparator : Gtk.Separator, Atk.Implementor, Gtk.Buildable { + [CCode (type = "GtkWidget*")] public HSeparator (); } [CCode (cheader_filename = "gtk/gtk.h")] @@ -3087,6 +3156,7 @@ namespace Gtk { public Gtk.PositionType get_handle_position (); public Gtk.ShadowType get_shadow_type (); public Gtk.PositionType get_snap_edge (); + [CCode (type = "GtkWidget*")] public HandleBox (); public void set_handle_position (Gtk.PositionType position); public void set_shadow_type (Gtk.ShadowType type); @@ -3131,6 +3201,7 @@ namespace Gtk { public uint in_hex_sequence; public uint modifiers_dropped; public void add_table (ushort data, int max_seq_len, int n_seqs); + [CCode (type = "GtkIMContext*")] public IMContextSimple (); } [CCode (cheader_filename = "gtk/gtk.h")] @@ -3138,6 +3209,7 @@ namespace Gtk { public weak Gtk.IMContext slave; public weak string context_id; public void append_menuitems (Gtk.MenuShell menushell); + [CCode (type = "GtkIMContext*")] public IMMulticontext (); } [CCode (cheader_filename = "gtk/gtk.h")] @@ -3203,7 +3275,9 @@ namespace Gtk { public int get_tooltip_column (); public bool get_tooltip_context (int x, int y, bool keyboard_tip, out weak Gtk.TreeModel model, out weak Gtk.TreePath path, out Gtk.TreeIter iter); public bool get_visible_range (out weak Gtk.TreePath start_path, out weak Gtk.TreePath end_path); + [CCode (type = "GtkWidget*")] public IconView (); + [CCode (type = "GtkWidget*")] public IconView.with_model (Gtk.TreeModel model); public bool path_is_selected (Gtk.TreePath path); public void scroll_to_path (Gtk.TreePath path, bool use_align, float row_align, float col_align); @@ -3268,15 +3342,25 @@ namespace Gtk { public void get_pixmap (out weak Gdk.Pixmap pixmap, out weak Gdk.Bitmap mask); public void get_stock (out weak string stock_id, out Gtk.IconSize size); public Gtk.ImageType get_storage_type (); + [CCode (type = "GtkWidget*")] public Image (); + [CCode (type = "GtkWidget*")] public Image.from_animation (Gdk.PixbufAnimation animation); + [CCode (type = "GtkWidget*")] public Image.from_file (string filename); + [CCode (type = "GtkWidget*")] public Image.from_gicon (GLib.Icon icon, Gtk.IconSize size); + [CCode (type = "GtkWidget*")] public Image.from_icon_name (string icon_name, Gtk.IconSize size); + [CCode (type = "GtkWidget*")] public Image.from_icon_set (Gtk.IconSet icon_set, Gtk.IconSize size); + [CCode (type = "GtkWidget*")] public Image.from_image (Gdk.Image image, Gdk.Bitmap mask); + [CCode (type = "GtkWidget*")] public Image.from_pixbuf (Gdk.Pixbuf pixbuf); + [CCode (type = "GtkWidget*")] public Image.from_pixmap (Gdk.Pixmap pixmap, Gdk.Bitmap mask); + [CCode (type = "GtkWidget*")] public Image.from_stock (string stock_id, Gtk.IconSize size); public void set_from_animation (Gdk.PixbufAnimation animation); public void set_from_file (string filename); @@ -3316,9 +3400,13 @@ namespace Gtk { [CCode (cheader_filename = "gtk/gtk.h")] public class ImageMenuItem : Gtk.MenuItem, Atk.Implementor, Gtk.Buildable { public weak Gtk.Widget get_image (); + [CCode (type = "GtkWidget*")] public ImageMenuItem (); + [CCode (type = "GtkWidget*")] public ImageMenuItem.from_stock (string stock_id, Gtk.AccelGroup? accel_group); + [CCode (type = "GtkWidget*")] public ImageMenuItem.with_label (string label); + [CCode (type = "GtkWidget*")] public ImageMenuItem.with_mnemonic (string label); public void set_image (Gtk.Widget image); public Gtk.Widget image { get; set; } @@ -3335,6 +3423,7 @@ namespace Gtk { public weak Gdk.Device current_device; public weak Gtk.Widget keys_list; public weak Gtk.Widget keys_listbox; + [CCode (type = "GtkWidget*")] public InputDialog (); public virtual signal void disable_device (Gdk.Device device); public virtual signal void enable_device (Gdk.Device device); @@ -3343,7 +3432,9 @@ namespace Gtk { public class Invisible : Gtk.Widget, Atk.Implementor, Gtk.Buildable { public bool has_user_ref_count; public weak Gdk.Screen get_screen (); + [CCode (type = "GtkWidget*")] public Invisible (); + [CCode (type = "GtkWidget*")] public Invisible.for_screen (Gdk.Screen screen); public void set_screen (Gdk.Screen screen); public Gdk.Screen screen { get; set; } @@ -3388,7 +3479,9 @@ namespace Gtk { public bool get_use_markup (); public bool get_use_underline (); public int get_width_chars (); + [CCode (type = "GtkWidget*")] public Label (string? str); + [CCode (type = "GtkWidget*")] public Label.with_mnemonic (string str); public void select_region (int start_offset, int end_offset); public void set_angle (double angle); @@ -3448,6 +3541,7 @@ namespace Gtk { public void get_size (out uint width, out uint height); public weak Gtk.Adjustment get_vadjustment (); public void move (Gtk.Widget child_widget, int x, int y); + [CCode (type = "GtkWidget*")] public Layout (Gtk.Adjustment hadjustment, Gtk.Adjustment vadjustment); public void put (Gtk.Widget child_widget, int x, int y); public void set_hadjustment (Gtk.Adjustment adjustment); @@ -3464,7 +3558,9 @@ namespace Gtk { [CCode (cheader_filename = "gtk/gtk.h")] public class LinkButton : Gtk.Button, Atk.Implementor, Gtk.Buildable { public weak string get_uri (); + [CCode (type = "GtkWidget*")] public LinkButton (string uri); + [CCode (type = "GtkWidget*")] public LinkButton.with_label (string uri, string label); public void set_uri (string uri); public static weak Gtk.LinkButtonUriFunc set_uri_hook (Gtk.LinkButtonUriFunc func, void* data, GLib.DestroyNotify destroy); @@ -3549,6 +3645,7 @@ namespace Gtk { public static weak GLib.List get_for_attach_widget (Gtk.Widget widget); public bool get_tearoff_state (); public weak string get_title (); + [CCode (type = "GtkWidget*")] public Menu (); public void popdown (); public void popup (Gtk.Widget? parent_menu_shell, Gtk.Widget? parent_menu_item, Gtk.MenuPositionFunc? func, uint button, uint activate_time); @@ -3570,6 +3667,7 @@ namespace Gtk { public class MenuBar : Gtk.MenuShell, Atk.Implementor, Gtk.Buildable { public Gtk.PackDirection get_child_pack_direction (); public Gtk.PackDirection get_pack_direction (); + [CCode (type = "GtkWidget*")] public MenuBar (); public void set_child_pack_direction (Gtk.PackDirection child_pack_dir); public void set_pack_direction (Gtk.PackDirection pack_dir); @@ -3591,8 +3689,11 @@ namespace Gtk { public uint timer; public bool get_right_justified (); public weak Gtk.Widget get_submenu (); + [CCode (type = "GtkWidget*")] public MenuItem (); + [CCode (type = "GtkWidget*")] public MenuItem.with_label (string label); + [CCode (type = "GtkWidget*")] public MenuItem.with_mnemonic (string label); public void set_accel_path (string accel_path); public void set_right_justified (bool right_justified); @@ -3644,7 +3745,9 @@ namespace Gtk { [CCode (cheader_filename = "gtk/gtk.h")] public class MenuToolButton : Gtk.ToolButton, Atk.Implementor, Gtk.Buildable { public weak Gtk.Widget get_menu (); + [CCode (type = "GtkToolItem*")] public MenuToolButton (Gtk.Widget icon_widget, string label); + [CCode (type = "GtkToolItem*")] public MenuToolButton.from_stock (string stock_id); public void set_arrow_tooltip_markup (string markup); public void set_arrow_tooltip_text (string text); @@ -3657,7 +3760,9 @@ namespace Gtk { public weak Gtk.Widget label; public void format_secondary_markup (string message_format); public void format_secondary_text (string message_format); + [CCode (type = "GtkWidget*")] public MessageDialog (Gtk.Window? parent, Gtk.DialogFlags flags, Gtk.MessageType type, Gtk.ButtonsType buttons, string message_format, ...); + [CCode (type = "GtkWidget*")] public MessageDialog.with_markup (Gtk.Window? parent, Gtk.DialogFlags flags, Gtk.MessageType type, Gtk.ButtonsType buttons, string message_format, ...); public void set_image (Gtk.Widget image); public void set_markup (string str); @@ -3695,6 +3800,7 @@ namespace Gtk { public class MountOperation : GLib.MountOperation { public weak Gtk.Window get_parent (); public weak Gdk.Screen get_screen (); + [CCode (type = "GMountOperation*")] public MountOperation (Gtk.Window parent); public void set_parent (Gtk.Window parent); public void set_screen (Gdk.Screen screen); @@ -3739,6 +3845,7 @@ namespace Gtk { public Gtk.PositionType get_tab_pos (); public bool get_tab_reorderable (Gtk.Widget child); public int insert_page_menu (Gtk.Widget child, Gtk.Widget tab_label, Gtk.Widget menu_label, int position); + [CCode (type = "GtkWidget*")] public Notebook (); public void next_page (); public void popup_disable (); @@ -3889,7 +3996,9 @@ namespace Gtk { public void @construct (Gdk.NativeWindow socket_id); public void construct_for_display (Gdk.Display display, Gdk.NativeWindow socket_id); public Gdk.NativeWindow get_id (); + [CCode (type = "GtkWidget*")] public Plug (Gdk.NativeWindow socket_id); + [CCode (type = "GtkWidget*")] public Plug.for_display (Gdk.Display display, Gdk.NativeWindow socket_id); [NoAccessorMethod] public bool embedded { get; } @@ -4048,6 +4157,7 @@ namespace Gtk { public Gtk.ProgressBarOrientation get_orientation (); public double get_pulse_step (); public weak string get_text (); + [CCode (type = "GtkWidget*")] public ProgressBar (); public void pulse (); public void set_ellipsize (Pango.EllipsizeMode mode); @@ -4087,11 +4197,17 @@ namespace Gtk { [CCode (cheader_filename = "gtk/gtk.h")] public class RadioButton : Gtk.CheckButton, Atk.Implementor, Gtk.Buildable { public weak GLib.SList get_group (); + [CCode (type = "GtkWidget*")] public RadioButton (GLib.SList? group); + [CCode (type = "GtkWidget*")] public RadioButton.from_widget (Gtk.RadioButton radio_group_member); + [CCode (type = "GtkWidget*")] public RadioButton.with_label (GLib.SList? group, string label); + [CCode (type = "GtkWidget*")] public RadioButton.with_label_from_widget (Gtk.RadioButton radio_group_member, string label); + [CCode (type = "GtkWidget*")] public RadioButton.with_mnemonic (GLib.SList? group, string label); + [CCode (type = "GtkWidget*")] public RadioButton.with_mnemonic_from_widget (Gtk.RadioButton radio_group_member, string label); public void set_group (GLib.SList group); public Gtk.RadioButton group { set; } @@ -4100,11 +4216,17 @@ namespace Gtk { [CCode (cheader_filename = "gtk/gtk.h")] public class RadioMenuItem : Gtk.CheckMenuItem, Atk.Implementor, Gtk.Buildable { public weak GLib.SList get_group (); + [CCode (type = "GtkWidget*")] public RadioMenuItem (GLib.SList group); + [CCode (type = "GtkWidget*")] public RadioMenuItem.from_widget (Gtk.RadioMenuItem group); + [CCode (type = "GtkWidget*")] public RadioMenuItem.with_label (GLib.SList group, string label); + [CCode (type = "GtkWidget*")] public RadioMenuItem.with_label_from_widget (Gtk.RadioMenuItem group, string label); + [CCode (type = "GtkWidget*")] public RadioMenuItem.with_mnemonic (GLib.SList group, string label); + [CCode (type = "GtkWidget*")] public RadioMenuItem.with_mnemonic_from_widget (Gtk.RadioMenuItem group, string label); public void set_group (GLib.SList group); public Gtk.RadioMenuItem group { set; } @@ -4113,9 +4235,13 @@ namespace Gtk { [CCode (cheader_filename = "gtk/gtk.h")] public class RadioToolButton : Gtk.ToggleToolButton, Atk.Implementor, Gtk.Buildable { public weak GLib.SList get_group (); + [CCode (type = "GtkToolItem*")] public RadioToolButton (GLib.SList group); + [CCode (type = "GtkToolItem*")] public RadioToolButton.from_stock (GLib.SList group, string stock_id); + [CCode (type = "GtkToolItem*")] public RadioToolButton.from_widget (Gtk.RadioToolButton group); + [CCode (type = "GtkToolItem*")] public RadioToolButton.with_stock_from_widget (Gtk.RadioToolButton group, string stock_id); public void set_group (GLib.SList group); public Gtk.RadioToolButton group { set; } @@ -4214,20 +4340,26 @@ namespace Gtk { [CCode (cheader_filename = "gtk/gtk.h")] public class RecentAction : Gtk.Action, Gtk.Buildable, Gtk.RecentChooser { public bool get_show_numbers (); + [CCode (type = "GtkAction*")] public RecentAction (string name, string label, string tooltip, string stock_id); + [CCode (type = "GtkAction*")] public RecentAction.for_manager (string name, string label, string tooltip, string stock_id, Gtk.RecentManager manager); public void set_show_numbers (bool show_numbers); public bool show_numbers { get; set; } } [CCode (cheader_filename = "gtk/gtk.h")] public class RecentChooserDialog : Gtk.Dialog, Atk.Implementor, Gtk.Buildable, Gtk.RecentChooser { + [CCode (type = "GtkWidget*")] public RecentChooserDialog (string title, Gtk.Window parent, ...); + [CCode (type = "GtkWidget*")] public RecentChooserDialog.for_manager (string title, Gtk.Window parent, Gtk.RecentManager manager, ...); } [CCode (cheader_filename = "gtk/gtk.h")] public class RecentChooserMenu : Gtk.Menu, Atk.Implementor, Gtk.Buildable, Gtk.RecentChooser { public bool get_show_numbers (); + [CCode (type = "GtkWidget*")] public RecentChooserMenu (); + [CCode (type = "GtkWidget*")] public RecentChooserMenu.for_manager (Gtk.RecentManager manager); public void set_show_numbers (bool show_numbers); [NoWrapper] @@ -4242,7 +4374,9 @@ namespace Gtk { } [CCode (cheader_filename = "gtk/gtk.h")] public class RecentChooserWidget : Gtk.VBox, Atk.Implementor, Gtk.Buildable, Gtk.RecentChooser { + [CCode (type = "GtkWidget*")] public RecentChooserWidget (); + [CCode (type = "GtkWidget*")] public RecentChooserWidget.for_manager (Gtk.RecentManager manager); } [CCode (cheader_filename = "gtk/gtk.h")] @@ -4326,6 +4460,7 @@ namespace Gtk { public weak Gtk.Widget minus_button; public weak Gtk.Adjustment get_adjustment (); public double get_value (); + [CCode (type = "GtkWidget*")] public ScaleButton (Gtk.IconSize size, double min, double max, double step, string[] icons); public void set_adjustment (Gtk.Adjustment adjustment); public void set_icons (string[] icons); @@ -4358,6 +4493,7 @@ namespace Gtk { public Gtk.ShadowType get_shadow_type (); public weak Gtk.Adjustment get_vadjustment (); public weak Gtk.Widget get_vscrollbar (); + [CCode (type = "GtkWidget*")] public ScrolledWindow (Gtk.Adjustment? hadjustment, Gtk.Adjustment? vadjustment); public void set_hadjustment (Gtk.Adjustment hadjustment); public void set_placement (Gtk.CornerType window_placement); @@ -4384,11 +4520,13 @@ namespace Gtk { } [CCode (cheader_filename = "gtk/gtk.h")] public class SeparatorMenuItem : Gtk.MenuItem, Atk.Implementor, Gtk.Buildable { + [CCode (type = "GtkWidget*")] public SeparatorMenuItem (); } [CCode (cheader_filename = "gtk/gtk.h")] public class SeparatorToolItem : Gtk.ToolItem, Atk.Implementor, Gtk.Buildable { public bool get_draw (); + [CCode (type = "GtkToolItem*")] public SeparatorToolItem (); public void set_draw (bool draw); public bool draw { get; set; } @@ -4539,6 +4677,7 @@ namespace Gtk { public weak Gtk.Widget toplevel; public void add_id (Gdk.NativeWindow window_id); public Gdk.NativeWindow get_id (); + [CCode (type = "GtkWidget*")] public Socket (); public virtual signal void plug_added (); public virtual signal bool plug_removed (); @@ -4564,7 +4703,9 @@ namespace Gtk { public double get_value (); public int get_value_as_int (); public bool get_wrap (); + [CCode (type = "GtkWidget*")] public SpinButton (Gtk.Adjustment adjustment, double climb_rate, uint digits); + [CCode (type = "GtkWidget*")] public SpinButton.with_range (double min, double max, double step); public void set_adjustment (Gtk.Adjustment adjustment); public void set_digits (uint digits); @@ -4651,6 +4792,7 @@ namespace Gtk { public weak Gdk.Window grip_window; public uint get_context_id (string context_description); public bool get_has_resize_grip (); + [CCode (type = "GtkWidget*")] public Statusbar (); public void pop (uint context_id); public uint push (uint context_id, string text); @@ -4782,6 +4924,7 @@ namespace Gtk { public uint get_default_row_spacing (); public bool get_homogeneous (); public uint get_row_spacing (uint row); + [CCode (type = "GtkWidget*")] public Table (uint rows, uint columns, bool homogeneous); public void resize (uint rows, uint columns); public void set_col_spacing (uint column, uint spacing); @@ -4801,6 +4944,7 @@ namespace Gtk { [CCode (cheader_filename = "gtk/gtk.h")] public class TearoffMenuItem : Gtk.MenuItem, Atk.Implementor, Gtk.Buildable { public uint torn_off; + [CCode (type = "GtkWidget*")] public TearoffMenuItem (); } [CCode (cheader_filename = "gtk/gtk.h")] @@ -5161,7 +5305,9 @@ namespace Gtk { public void move_child (Gtk.Widget child, int xpos, int ypos); public bool move_mark_onscreen (Gtk.TextMark mark); public bool move_visually (Gtk.TextIter iter, int count); + [CCode (type = "GtkWidget*")] public TextView (); + [CCode (type = "GtkWidget*")] public TextView.with_buffer (Gtk.TextBuffer buffer); public bool place_cursor_onscreen (); public void scroll_mark_onscreen (Gtk.TextMark mark); @@ -5233,8 +5379,11 @@ namespace Gtk { public bool get_active (); public bool get_inconsistent (); public bool get_mode (); + [CCode (type = "GtkWidget*")] public ToggleButton (); + [CCode (type = "GtkWidget*")] public ToggleButton.with_label (string label); + [CCode (type = "GtkWidget*")] public ToggleButton.with_mnemonic (string label); public void set_active (bool is_active); public void set_inconsistent (bool setting); @@ -5249,7 +5398,9 @@ namespace Gtk { [CCode (cheader_filename = "gtk/gtk.h")] public class ToggleToolButton : Gtk.ToolButton, Atk.Implementor, Gtk.Buildable { public bool get_active (); + [CCode (type = "GtkToolItem*")] public ToggleToolButton (); + [CCode (type = "GtkToolItem*")] public ToggleToolButton.from_stock (string stock_id); public void set_active (bool is_active); public bool active { get; set; } @@ -5263,7 +5414,9 @@ namespace Gtk { public weak Gtk.Widget get_label_widget (); public weak string get_stock_id (); public bool get_use_underline (); + [CCode (type = "GtkToolItem*")] public ToolButton (Gtk.Widget icon_widget, string label); + [CCode (type = "GtkToolItem*")] public ToolButton.from_stock (string stock_id); public void set_icon_name (string icon_name); public void set_icon_widget (Gtk.Widget icon_widget); @@ -5325,6 +5478,7 @@ namespace Gtk { public bool get_show_arrow (); public bool get_tooltips (); public void insert (Gtk.ToolItem item, int pos); + [CCode (type = "GtkWidget*")] public Toolbar (); public void set_drop_highlight_item (Gtk.ToolItem tool_item, int index_); public void set_icon_size (Gtk.IconSize icon_size); @@ -5366,6 +5520,7 @@ namespace Gtk { public void convert_iter_to_child_iter (out Gtk.TreeIter child_iter, Gtk.TreeIter filter_iter); public weak Gtk.TreePath convert_path_to_child_path (Gtk.TreePath filter_path); public weak Gtk.TreeModel get_model (); + [CCode (type = "GtkTreeModel*")] public TreeModelFilter (Gtk.TreeModel child_model, Gtk.TreePath? root); public void refilter (); public void set_modify_func (int n_columns, GLib.Type[] types, Gtk.TreeModelFilterModifyFunc func, void* data, Gtk.DestroyNotify destroy); @@ -5401,6 +5556,7 @@ namespace Gtk { public weak Gtk.TreePath convert_path_to_child_path (Gtk.TreePath sorted_path); public weak Gtk.TreeModel get_model (); public bool iter_is_valid (Gtk.TreeIter iter); + [CCode (type = "GtkTreeModel*")] public TreeModelSort.with_model (Gtk.TreeModel child_model); public void reset_default_sort_func (); [NoAccessorMethod] @@ -5536,7 +5692,9 @@ namespace Gtk { public bool is_rubber_banding_active (); public void map_expanded_rows (Gtk.TreeViewMappingFunc func, void* data); public void move_column_after (Gtk.TreeViewColumn column, Gtk.TreeViewColumn base_column); + [CCode (type = "GtkWidget*")] public TreeView (); + [CCode (type = "GtkWidget*")] public TreeView.with_model (Gtk.TreeModel model); public int remove_column (Gtk.TreeViewColumn column); public void scroll_to_cell (Gtk.TreePath? path, Gtk.TreeViewColumn? column, bool use_align, float row_align, float col_align); @@ -5712,6 +5870,7 @@ namespace Gtk { public weak string get_ui (); public void insert_action_group (Gtk.ActionGroup action_group, int pos); public UIManager (); + [CCode (type = "guint")] public UIManager.merge_id (Gtk.UIManager self); public void remove_action_group (Gtk.ActionGroup action_group); public void remove_ui (uint merge_id); @@ -5729,31 +5888,39 @@ namespace Gtk { } [CCode (cheader_filename = "gtk/gtk.h")] public class VBox : Gtk.Box, Atk.Implementor, Gtk.Buildable { + [CCode (type = "GtkWidget*")] public VBox (bool homogeneous, int spacing); } [CCode (cheader_filename = "gtk/gtk.h")] public class VButtonBox : Gtk.ButtonBox, Atk.Implementor, Gtk.Buildable { + [CCode (type = "GtkWidget*")] public VButtonBox (); } [CCode (cheader_filename = "gtk/gtk.h")] public class VPaned : Gtk.Paned, Atk.Implementor, Gtk.Buildable { + [CCode (type = "GtkWidget*")] public VPaned (); } [CCode (cheader_filename = "gtk/gtk.h")] public class VRuler : Gtk.Ruler, Atk.Implementor, Gtk.Buildable { + [CCode (type = "GtkWidget*")] public VRuler (); } [CCode (cheader_filename = "gtk/gtk.h")] public class VScale : Gtk.Scale, Atk.Implementor, Gtk.Buildable { + [CCode (type = "GtkWidget*")] public VScale (Gtk.Adjustment adjustment); + [CCode (type = "GtkWidget*")] public VScale.with_range (double min, double max, double step); } [CCode (cheader_filename = "gtk/gtk.h")] public class VScrollbar : Gtk.Scrollbar, Atk.Implementor, Gtk.Buildable { + [CCode (type = "GtkWidget*")] public VScrollbar (Gtk.Adjustment adjustment); } [CCode (cheader_filename = "gtk/gtk.h")] public class VSeparator : Gtk.Separator, Atk.Implementor, Gtk.Buildable { + [CCode (type = "GtkWidget*")] public VSeparator (); } [CCode (cheader_filename = "gtk/gtk.h")] @@ -5763,6 +5930,7 @@ namespace Gtk { public weak Gtk.Adjustment get_hadjustment (); public Gtk.ShadowType get_shadow_type (); public weak Gtk.Adjustment get_vadjustment (); + [CCode (type = "GtkWidget*")] public Viewport (Gtk.Adjustment hadjustment, Gtk.Adjustment vadjustment); public void set_hadjustment (Gtk.Adjustment adjustment); public void set_shadow_type (Gtk.ShadowType type); @@ -5774,6 +5942,7 @@ namespace Gtk { } [CCode (cheader_filename = "gtk/gtk.h")] public class VolumeButton : Gtk.ScaleButton, Atk.Implementor, Gtk.Buildable { + [CCode (type = "GtkWidget*")] public VolumeButton (); } [CCode (cheader_filename = "gtk/gtk.h")] @@ -5848,6 +6017,7 @@ namespace Gtk { public void maximize (); public bool mnemonic_activate (uint keyval, Gdk.ModifierType modifier); public void move (int x, int y); + [CCode (type = "GtkWidget*")] public Window (Gtk.WindowType type); public bool parse_geometry (string geometry); public void present (); diff --git a/vapigen/valagidlparser.vala b/vapigen/valagidlparser.vala index c97d87d..2b39443 100644 --- a/vapigen/valagidlparser.vala +++ b/vapigen/valagidlparser.vala @@ -1257,6 +1257,15 @@ public class Vala.GIdlParser : CodeVisitor { } else if (m.name.has_prefix ("new_")) { m.name = m.name.offset ("new_".len ()); } + // For classes, check whether a creation method return type equals to the + // type of the class created. If the types do not match (e.g. in most + // gtk widgets) add an attribute to the creation method indicating the used + // return type. + if (current_data_type is Class && res != null) { + if ("%s*".printf (current_data_type.get_cname()) != res.type.unparsed) { + ((CreationMethod)m).custom_return_type_cname = res.type.unparsed; + } + } } else { m = new Method (name, return_type, current_source_reference); } -- 2.7.4