diff --git a/bindings/gtk3/examples/helloworld/HelloWorld.lpi b/bindings/gtk3/examples/helloworld/HelloWorld.lpi
new file mode 100644
index 000000000..ca679295c
--- /dev/null
+++ b/bindings/gtk3/examples/helloworld/HelloWorld.lpi
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bindings/gtk3/examples/helloworld/HelloWorld.lpr b/bindings/gtk3/examples/helloworld/HelloWorld.lpr
new file mode 100644
index 000000000..ae46b7be2
--- /dev/null
+++ b/bindings/gtk3/examples/helloworld/HelloWorld.lpr
@@ -0,0 +1,48 @@
+program HelloWorld;
+
+{$mode objfpc}{$H+}
+
+uses
+ Classes, Math, GLib2, GObject2, Gtk3;
+
+// these procedures are signal handlers. they are called when a signal is emitted
+procedure Gtk_Window_Destroy(Sender: PGtkWidget; user_data: gpointer); cdecl;
+begin
+ if gtk_main_level > 0 then
+ gtk_main_quit;
+end;
+
+procedure Button_Click(Sender: PGtkWidget; user_data: gpointer); cdecl;
+begin
+ gtk_main_quit;
+end;
+
+procedure CreateWidgets;
+var
+ Win: PGtkWindow;
+ Button: PGtkButton;
+begin
+ // first create window
+ Win := TGtkWindow.new(GTK_WINDOW_TOPLEVEL);
+ Win^.set_title('Hello World!');
+ Win^.set_size_request(300,200);
+
+ //then create a button and add it to the window
+ Button := TGtkButton.new_with_label('Quit');
+ Win^.add(PGtkWidget(Button));
+
+ // now connect signals
+ g_signal_connect_data(Win, 'destroy', TGCallback(@Gtk_Window_Destroy), nil, nil, 0);
+ g_signal_connect_data(Button, 'clicked', TGCallback(@Button_Click), nil, nil, 0);
+
+ Win^.show_all;
+end;
+
+
+begin
+ SetExceptionMask([exInvalidOp, exDenormalized, exZeroDivide, exOverflow, exUnderflow, exPrecision]);
+ gtk_init(@argc, @argv);
+ CreateWidgets;
+ gtk_main;
+end.
+
diff --git a/bindings/gtk3/gtk/gtkapplication.inc b/bindings/gtk3/gtk/gtkapplication.inc
deleted file mode 100644
index d39a87980..000000000
--- a/bindings/gtk3/gtk/gtkapplication.inc
+++ /dev/null
@@ -1,73 +0,0 @@
-{*
- * Copyright © 2010 Codethink Limited
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the licence, 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- *
- * Author: Ryan Lortie
- *}
-
-{$ifndef __GTK_APPLICATION_H__}
-{$define __GTK_APPLICATION_H__}
-
-#include
-#include
-#include
-
-//G_BEGIN_DECLS
-
-#define GTK_TYPE_APPLICATION (gtk_application_get_type ())
-#define GTK_APPLICATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_APPLICATION, GtkApplication))
-#define GTK_APPLICATION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_APPLICATION, GtkApplicationClass))
-#define GTK_IS_APPLICATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_APPLICATION))
-#define GTK_IS_APPLICATION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_APPLICATION))
-#define GTK_APPLICATION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_APPLICATION, GtkApplicationClass))
-
-typedef struct _GtkApplication GtkApplication;
-typedef struct _GtkApplicationClass GtkApplicationClass;
-typedef struct _GtkApplicationPrivate GtkApplicationPrivate;
-
-struct _GtkApplication
-{
- GApplication parent;
-
- /*< private >*/
- GtkApplicationPrivate *priv;
-};
-
-struct _GtkApplicationClass
-{
- GApplicationClass parent_class;
-
- /*< private >*/
- gpointer padding[16];
-};
-
-function gtk_application_get_type(): GType; external gtk3lib; // G_GNUC_CONST;
-
-function gtk_application_new (const application_id: Pgchar; flags: GApplicationFlags): PGtkApplication; external gtk3lib;
-
-procedure gtk_application_add_window (GtkApplication *application,
- GtkWindow *window);
-
-procedure gtk_application_remove_window (GtkApplication *application,
- GtkWindow *window);
-
-GList * gtk_application_get_windows (GtkApplication *application);
-
-//G_END_DECLS
-
-{$endif} /* __GTK_APPLICATION_H__ */
-
diff --git a/bindings/gtk3/gtk/gtkwindow.inc b/bindings/gtk3/gtk/gtkwindow.inc
deleted file mode 100644
index f0080d6c2..000000000
--- a/bindings/gtk3/gtk/gtkwindow.inc
+++ /dev/null
@@ -1,335 +0,0 @@
-{* GTK - The GIMP Toolkit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- *}
-
-{*
- * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
- * file for a list of people on the GTK+ Team. See the ChangeLog
- * files for a list of changes. These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
- *}
-
-{$ifndef __GTK_WINDOW_H__}
-{$define __GTK_WINDOW_H__}
-
-{$include gtkapplication.inc}
-{$include gtkaccelgroup.inc}
-{$include gtkbin.inc}
-
-//G_BEGIN_DECLS
-
-function GTK_TYPE_WINDOW(): GType;
-{#define GTK_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_WINDOW, GtkWindow))
-#define GTK_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_WINDOW, GtkWindowClass))
-#define GTK_IS_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_WINDOW))
-#define GTK_IS_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_WINDOW))
-#define GTK_WINDOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_WINDOW, GtkWindowClass))}
-
-typedef struct _GtkWindowPrivate GtkWindowPrivate;
-typedef struct _GtkWindowClass GtkWindowClass;
-typedef struct _GtkWindowGeometryInfo GtkWindowGeometryInfo;
-typedef struct _GtkWindowGroup GtkWindowGroup;
-typedef struct _GtkWindowGroupClass GtkWindowGroupClass;
-typedef struct _GtkWindowGroupPrivate GtkWindowGroupPrivate;
-
-struct _GtkWindow
-{
- GtkBin bin;
-
- GtkWindowPrivate *priv;
-};
-
-struct _GtkWindowClass
-{
- GtkBinClass parent_class;
-
- void (* set_focus) (GtkWindow *window,
- GtkWidget *focus);
-
- /* G_SIGNAL_ACTION signals for keybindings */
-
- void (* activate_focus) (GtkWindow *window);
- void (* activate_default) (GtkWindow *window);
- void (* keys_changed) (GtkWindow *window);
-
- /* Padding for future expansion */
- void (*_gtk_reserved1) (void);
- void (*_gtk_reserved2) (void);
- void (*_gtk_reserved3) (void);
- void (*_gtk_reserved4) (void);
-};
-
-#define GTK_TYPE_WINDOW_GROUP (gtk_window_group_get_type ())
-#define GTK_WINDOW_GROUP(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GTK_TYPE_WINDOW_GROUP, GtkWindowGroup))
-#define GTK_WINDOW_GROUP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_WINDOW_GROUP, GtkWindowGroupClass))
-#define GTK_IS_WINDOW_GROUP(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GTK_TYPE_WINDOW_GROUP))
-#define GTK_IS_WINDOW_GROUP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_WINDOW_GROUP))
-#define GTK_WINDOW_GROUP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_WINDOW_GROUP, GtkWindowGroupClass))
-
-struct _GtkWindowGroup
-{
- GObject parent_instance;
-
- GtkWindowGroupPrivate *priv;
-};
-
-struct _GtkWindowGroupClass
-{
- GObjectClass parent_class;
-
- /* Padding for future expansion */
- void (*_gtk_reserved1) (void);
- void (*_gtk_reserved2) (void);
- void (*_gtk_reserved3) (void);
- void (*_gtk_reserved4) (void);
-};
-
-GType gtk_window_get_type (void) G_GNUC_CONST;
-GtkWidget* gtk_window_new (GtkWindowType type);
-void gtk_window_set_title (GtkWindow *window,
- const gchar *title);
-G_CONST_RETURN gchar *gtk_window_get_title (GtkWindow *window);
-void gtk_window_set_wmclass (GtkWindow *window,
- const gchar *wmclass_name,
- const gchar *wmclass_class);
-void gtk_window_set_role (GtkWindow *window,
- const gchar *role);
-void gtk_window_set_startup_id (GtkWindow *window,
- const gchar *startup_id);
-G_CONST_RETURN gchar *gtk_window_get_role (GtkWindow *window);
-void gtk_window_add_accel_group (GtkWindow *window,
- GtkAccelGroup *accel_group);
-void gtk_window_remove_accel_group (GtkWindow *window,
- GtkAccelGroup *accel_group);
-void gtk_window_set_position (GtkWindow *window,
- GtkWindowPosition position);
-gboolean gtk_window_activate_focus (GtkWindow *window);
-void gtk_window_set_focus (GtkWindow *window,
- GtkWidget *focus);
-GtkWidget *gtk_window_get_focus (GtkWindow *window);
-void gtk_window_set_default (GtkWindow *window,
- GtkWidget *default_widget);
-GtkWidget *gtk_window_get_default_widget (GtkWindow *window);
-gboolean gtk_window_activate_default (GtkWindow *window);
-
-void gtk_window_set_transient_for (GtkWindow *window,
- GtkWindow *parent);
-GtkWindow *gtk_window_get_transient_for (GtkWindow *window);
-void gtk_window_set_opacity (GtkWindow *window,
- gdouble opacity);
-gdouble gtk_window_get_opacity (GtkWindow *window);
-void gtk_window_set_type_hint (GtkWindow *window,
- GdkWindowTypeHint hint);
-GdkWindowTypeHint gtk_window_get_type_hint (GtkWindow *window);
-void gtk_window_set_skip_taskbar_hint (GtkWindow *window,
- gboolean setting);
-gboolean gtk_window_get_skip_taskbar_hint (GtkWindow *window);
-void gtk_window_set_skip_pager_hint (GtkWindow *window,
- gboolean setting);
-gboolean gtk_window_get_skip_pager_hint (GtkWindow *window);
-void gtk_window_set_urgency_hint (GtkWindow *window,
- gboolean setting);
-gboolean gtk_window_get_urgency_hint (GtkWindow *window);
-void gtk_window_set_accept_focus (GtkWindow *window,
- gboolean setting);
-gboolean gtk_window_get_accept_focus (GtkWindow *window);
-void gtk_window_set_focus_on_map (GtkWindow *window,
- gboolean setting);
-gboolean gtk_window_get_focus_on_map (GtkWindow *window);
-void gtk_window_set_destroy_with_parent (GtkWindow *window,
- gboolean setting);
-gboolean gtk_window_get_destroy_with_parent (GtkWindow *window);
-void gtk_window_set_mnemonics_visible (GtkWindow *window,
- gboolean setting);
-gboolean gtk_window_get_mnemonics_visible (GtkWindow *window);
-
-void gtk_window_set_resizable (GtkWindow *window,
- gboolean resizable);
-gboolean gtk_window_get_resizable (GtkWindow *window);
-
-void gtk_window_set_gravity (GtkWindow *window,
- GdkGravity gravity);
-GdkGravity gtk_window_get_gravity (GtkWindow *window);
-
-
-void gtk_window_set_geometry_hints (GtkWindow *window,
- GtkWidget *geometry_widget,
- GdkGeometry *geometry,
- GdkWindowHints geom_mask);
-
-void gtk_window_set_screen (GtkWindow *window,
- GdkScreen *screen);
-GdkScreen* gtk_window_get_screen (GtkWindow *window);
-
-gboolean gtk_window_is_active (GtkWindow *window);
-gboolean gtk_window_has_toplevel_focus (GtkWindow *window);
-
-void gtk_window_set_decorated (GtkWindow *window,
- gboolean setting);
-gboolean gtk_window_get_decorated (GtkWindow *window);
-void gtk_window_set_deletable (GtkWindow *window,
- gboolean setting);
-gboolean gtk_window_get_deletable (GtkWindow *window);
-
-void gtk_window_set_icon_list (GtkWindow *window,
- GList *list);
-GList* gtk_window_get_icon_list (GtkWindow *window);
-void gtk_window_set_icon (GtkWindow *window,
- GdkPixbuf *icon);
-void gtk_window_set_icon_name (GtkWindow *window,
- const gchar *name);
-gboolean gtk_window_set_icon_from_file (GtkWindow *window,
- const gchar *filename,
- GError **err);
-GdkPixbuf* gtk_window_get_icon (GtkWindow *window);
-G_CONST_RETURN
-gchar *gtk_window_get_icon_name (GtkWindow *window);
-void gtk_window_set_default_icon_list (GList *list);
-GList* gtk_window_get_default_icon_list (void);
-void gtk_window_set_default_icon (GdkPixbuf *icon);
-void gtk_window_set_default_icon_name (const gchar *name);
-G_CONST_RETURN
-gchar *gtk_window_get_default_icon_name (void);
-gboolean gtk_window_set_default_icon_from_file (const gchar *filename,
- GError **err);
-
-void gtk_window_set_auto_startup_notification (gboolean setting);
-
-/* If window is set modal, input will be grabbed when show and released when hide */
-void gtk_window_set_modal (GtkWindow *window,
- gboolean modal);
-gboolean gtk_window_get_modal (GtkWindow *window);
-GList* gtk_window_list_toplevels (void);
-void gtk_window_set_has_user_ref_count (GtkWindow *window,
- gboolean setting);
-
-void gtk_window_add_mnemonic (GtkWindow *window,
- guint keyval,
- GtkWidget *target);
-void gtk_window_remove_mnemonic (GtkWindow *window,
- guint keyval,
- GtkWidget *target);
-gboolean gtk_window_mnemonic_activate (GtkWindow *window,
- guint keyval,
- GdkModifierType modifier);
-void gtk_window_set_mnemonic_modifier (GtkWindow *window,
- GdkModifierType modifier);
-GdkModifierType gtk_window_get_mnemonic_modifier (GtkWindow *window);
-
-gboolean gtk_window_activate_key (GtkWindow *window,
- GdkEventKey *event);
-gboolean gtk_window_propagate_key_event (GtkWindow *window,
- GdkEventKey *event);
-
-void gtk_window_present (GtkWindow *window);
-void gtk_window_present_with_time (GtkWindow *window,
- guint32 timestamp);
-void gtk_window_iconify (GtkWindow *window);
-void gtk_window_deiconify (GtkWindow *window);
-void gtk_window_stick (GtkWindow *window);
-void gtk_window_unstick (GtkWindow *window);
-void gtk_window_maximize (GtkWindow *window);
-void gtk_window_unmaximize (GtkWindow *window);
-void gtk_window_fullscreen (GtkWindow *window);
-void gtk_window_unfullscreen (GtkWindow *window);
-void gtk_window_set_keep_above (GtkWindow *window, gboolean setting);
-void gtk_window_set_keep_below (GtkWindow *window, gboolean setting);
-
-void gtk_window_begin_resize_drag (GtkWindow *window,
- GdkWindowEdge edge,
- gint button,
- gint root_x,
- gint root_y,
- guint32 timestamp);
-void gtk_window_begin_move_drag (GtkWindow *window,
- gint button,
- gint root_x,
- gint root_y,
- guint32 timestamp);
-
-/* Set initial default size of the window (does not constrain user
- * resize operations)
- */
-void gtk_window_set_default_size (GtkWindow *window,
- gint width,
- gint height);
-void gtk_window_get_default_size (GtkWindow *window,
- gint *width,
- gint *height);
-void gtk_window_resize (GtkWindow *window,
- gint width,
- gint height);
-void gtk_window_get_size (GtkWindow *window,
- gint *width,
- gint *height);
-void gtk_window_move (GtkWindow *window,
- gint x,
- gint y);
-void gtk_window_get_position (GtkWindow *window,
- gint *root_x,
- gint *root_y);
-gboolean gtk_window_parse_geometry (GtkWindow *window,
- const gchar *geometry);
-
-void gtk_window_set_default_geometry (GtkWindow *window,
- gint width,
- gint height);
-void gtk_window_resize_to_geometry (GtkWindow *window,
- gint width,
- gint height);
-
-GtkWindowGroup *gtk_window_get_group (GtkWindow *window);
-gboolean gtk_window_has_group (GtkWindow *window);
-
-/* Ignore this unless you are writing a GUI builder */
-void gtk_window_reshow_with_initial_size (GtkWindow *window);
-
-GtkWindowType gtk_window_get_window_type (GtkWindow *window);
-
-/* Window groups
- */
-GType gtk_window_group_get_type (void) G_GNUC_CONST;
-
-GtkWindowGroup * gtk_window_group_new (void);
-void gtk_window_group_add_window (GtkWindowGroup *window_group,
- GtkWindow *window);
-void gtk_window_group_remove_window (GtkWindowGroup *window_group,
- GtkWindow *window);
-GList * gtk_window_group_list_windows (GtkWindowGroup *window_group);
-
-GtkWidget * gtk_window_group_get_current_grab (GtkWindowGroup *window_group);
-GtkWidget * gtk_window_group_get_current_device_grab (GtkWindowGroup *window_group,
- GdkDevice *device);
-
-function gtk_window_get_application (GtkWindow *window): PGtkApplication;
-procedure gtk_window_set_application (GtkWindow *window,
- GtkApplication *application);
-
-
-{* Window grips
- *}
-procedure gtk_window_set_has_resize_grip (window: PGtkWindow;
- value: gboolean); external gtk3lib;
-gboolean gtk_window_get_has_resize_grip (GtkWindow *window);
-gboolean gtk_window_resize_grip_is_visible (GtkWindow *window);
-gboolean gtk_window_get_resize_grip_area (GtkWindow *window,
- GdkRectangle *rect);
-
-//G_END_DECLS
-
-{$endif} { __GTK_WINDOW_H__ }