/* vi:set ts=8 sts=4 sw=4 noet:
 *
 * VIM - Vi IMproved		by Bram Moolenaar
 *
 * Do ":help uganda"  in Vim to read copying and usage conditions.
 * Do ":help credits" in Vim to see a list of people who contributed.
 */

#ifndef __GTK_FORM_H__
#define __GTK_FORM_H__

#ifdef USE_GTK3
#include <gtk/gtk.h>
#else
#include <gdk/gdk.h>
#include <gtk/gtkcontainer.h>
#endif


#ifdef __cplusplus
extern "C" {
#endif

#define GTK_TYPE_FORM		       (gtk_form_get_type ())
#ifdef USE_GTK3
#define GTK_FORM(obj)		       (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_FORM, GtkForm))
#define GTK_FORM_CLASS(klass)	       (G_TYPE_CHECK_CLASS_CAST((klass), GTK_TYPE_FORM, GtkFormClass))
#define GTK_IS_FORM(obj)	       (G_TYPE_CHECK_INSTANCE_TYPE((obj), GTK_TYPE_FORM))
#define GTK_IS_FORM_CLASS(klass)       (G_TYPE_CHECK_CLASS_TYPE((klass), GTK_TYPE_FORM))
#else
#define GTK_FORM(obj)		       (GTK_CHECK_CAST ((obj), GTK_TYPE_FORM, GtkForm))
#define GTK_FORM_CLASS(klass)	       (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_FORM, GtkFormClass))
#define GTK_IS_FORM(obj)	       (GTK_CHECK_TYPE ((obj), GTK_TYPE_FORM))
#define GTK_IS_FORM_CLASS(klass)       (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_FORM))
#endif


typedef struct _GtkForm GtkForm;
typedef struct _GtkFormClass GtkFormClass;

struct _GtkForm
{
    GtkContainer container;

    GList *children;

#ifndef USE_GTK3
    guint width;
    guint height;
#endif

    GdkWindow *bin_window;

#ifndef USE_GTK3
    GdkVisibilityState visibility;
    gulong configure_serial;
#endif

    gint freeze_count;
};

struct _GtkFormClass
{
    GtkContainerClass parent_class;
};

#ifdef USE_GTK3
GType gtk_form_get_type(void);
#else
GtkType gtk_form_get_type(void);
#endif

GtkWidget *gtk_form_new(void);

void gtk_form_put(GtkForm * form, GtkWidget * widget,
	gint x, gint y);

void gtk_form_move(GtkForm *form, GtkWidget * widget,
	gint x, gint y);

void gtk_form_move_resize(GtkForm * form, GtkWidget * widget,
	gint x, gint y,
	gint w, gint h);

/* These disable and enable moving and repainting respectively.  If you
 * want to update the layout's offsets but do not want it to repaint
 * itself, you should use these functions.
 */

void gtk_form_freeze(GtkForm *form);
void gtk_form_thaw(GtkForm *form);


#ifdef __cplusplus
}
#endif
#endif	/* __GTK_FORM_H__ */
