/* caribou.h generated by valac 0.40.7, the Vala compiler, do not modify */


#ifndef __CARIBOU_H__
#define __CARIBOU_H__

#include <glib.h>
#include <glib-object.h>
#include <stdlib.h>
#include <string.h>
#include <gdk/gdk.h>
#include <gio/gio.h>
#include <float.h>
#include <math.h>

G_BEGIN_DECLS


#define CARIBOU_TYPE_DISPLAY_ADAPTER (caribou_display_adapter_get_type ())
#define CARIBOU_DISPLAY_ADAPTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CARIBOU_TYPE_DISPLAY_ADAPTER, CaribouDisplayAdapter))
#define CARIBOU_DISPLAY_ADAPTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CARIBOU_TYPE_DISPLAY_ADAPTER, CaribouDisplayAdapterClass))
#define CARIBOU_IS_DISPLAY_ADAPTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CARIBOU_TYPE_DISPLAY_ADAPTER))
#define CARIBOU_IS_DISPLAY_ADAPTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CARIBOU_TYPE_DISPLAY_ADAPTER))
#define CARIBOU_DISPLAY_ADAPTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CARIBOU_TYPE_DISPLAY_ADAPTER, CaribouDisplayAdapterClass))

typedef struct _CaribouDisplayAdapter CaribouDisplayAdapter;
typedef struct _CaribouDisplayAdapterClass CaribouDisplayAdapterClass;
typedef struct _CaribouDisplayAdapterPrivate CaribouDisplayAdapterPrivate;

#define CARIBOU_TYPE_NULL_ADAPTER (caribou_null_adapter_get_type ())
#define CARIBOU_NULL_ADAPTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CARIBOU_TYPE_NULL_ADAPTER, CaribouNullAdapter))
#define CARIBOU_NULL_ADAPTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CARIBOU_TYPE_NULL_ADAPTER, CaribouNullAdapterClass))
#define CARIBOU_IS_NULL_ADAPTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CARIBOU_TYPE_NULL_ADAPTER))
#define CARIBOU_IS_NULL_ADAPTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CARIBOU_TYPE_NULL_ADAPTER))
#define CARIBOU_NULL_ADAPTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CARIBOU_TYPE_NULL_ADAPTER, CaribouNullAdapterClass))

typedef struct _CaribouNullAdapter CaribouNullAdapter;
typedef struct _CaribouNullAdapterClass CaribouNullAdapterClass;
typedef struct _CaribouNullAdapterPrivate CaribouNullAdapterPrivate;

#define CARIBOU_TYPE_XADAPTER (caribou_xadapter_get_type ())
#define CARIBOU_XADAPTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CARIBOU_TYPE_XADAPTER, CaribouXAdapter))
#define CARIBOU_XADAPTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CARIBOU_TYPE_XADAPTER, CaribouXAdapterClass))
#define CARIBOU_IS_XADAPTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CARIBOU_TYPE_XADAPTER))
#define CARIBOU_IS_XADAPTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CARIBOU_TYPE_XADAPTER))
#define CARIBOU_XADAPTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CARIBOU_TYPE_XADAPTER, CaribouXAdapterClass))

typedef struct _CaribouXAdapter CaribouXAdapter;
typedef struct _CaribouXAdapterClass CaribouXAdapterClass;
typedef struct _CaribouXAdapterPrivate CaribouXAdapterPrivate;

#define CARIBOU_TYPE_IKEYBOARD_OBJECT (caribou_ikeyboard_object_get_type ())
#define CARIBOU_IKEYBOARD_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CARIBOU_TYPE_IKEYBOARD_OBJECT, CaribouIKeyboardObject))
#define CARIBOU_IS_IKEYBOARD_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CARIBOU_TYPE_IKEYBOARD_OBJECT))
#define CARIBOU_IKEYBOARD_OBJECT_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), CARIBOU_TYPE_IKEYBOARD_OBJECT, CaribouIKeyboardObjectIface))

typedef struct _CaribouIKeyboardObject CaribouIKeyboardObject;
typedef struct _CaribouIKeyboardObjectIface CaribouIKeyboardObjectIface;

#define CARIBOU_TYPE_KEY_MODEL (caribou_key_model_get_type ())
#define CARIBOU_KEY_MODEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CARIBOU_TYPE_KEY_MODEL, CaribouKeyModel))
#define CARIBOU_KEY_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CARIBOU_TYPE_KEY_MODEL, CaribouKeyModelClass))
#define CARIBOU_IS_KEY_MODEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CARIBOU_TYPE_KEY_MODEL))
#define CARIBOU_IS_KEY_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CARIBOU_TYPE_KEY_MODEL))
#define CARIBOU_KEY_MODEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CARIBOU_TYPE_KEY_MODEL, CaribouKeyModelClass))

typedef struct _CaribouKeyModel CaribouKeyModel;
typedef struct _CaribouKeyModelClass CaribouKeyModelClass;

#define CARIBOU_TYPE_KEYBOARD_MODEL (caribou_keyboard_model_get_type ())
#define CARIBOU_KEYBOARD_MODEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CARIBOU_TYPE_KEYBOARD_MODEL, CaribouKeyboardModel))
#define CARIBOU_KEYBOARD_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CARIBOU_TYPE_KEYBOARD_MODEL, CaribouKeyboardModelClass))
#define CARIBOU_IS_KEYBOARD_MODEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CARIBOU_TYPE_KEYBOARD_MODEL))
#define CARIBOU_IS_KEYBOARD_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CARIBOU_TYPE_KEYBOARD_MODEL))
#define CARIBOU_KEYBOARD_MODEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CARIBOU_TYPE_KEYBOARD_MODEL, CaribouKeyboardModelClass))

typedef struct _CaribouKeyboardModel CaribouKeyboardModel;
typedef struct _CaribouKeyboardModelClass CaribouKeyboardModelClass;
typedef struct _CaribouKeyboardModelPrivate CaribouKeyboardModelPrivate;

#define CARIBOU_TYPE_GROUP_MODEL (caribou_group_model_get_type ())
#define CARIBOU_GROUP_MODEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CARIBOU_TYPE_GROUP_MODEL, CaribouGroupModel))
#define CARIBOU_GROUP_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CARIBOU_TYPE_GROUP_MODEL, CaribouGroupModelClass))
#define CARIBOU_IS_GROUP_MODEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CARIBOU_TYPE_GROUP_MODEL))
#define CARIBOU_IS_GROUP_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CARIBOU_TYPE_GROUP_MODEL))
#define CARIBOU_GROUP_MODEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CARIBOU_TYPE_GROUP_MODEL, CaribouGroupModelClass))

typedef struct _CaribouGroupModel CaribouGroupModel;
typedef struct _CaribouGroupModelClass CaribouGroupModelClass;

#define CARIBOU_TYPE_KEYBOARD_SERVICE (caribou_keyboard_service_get_type ())
#define CARIBOU_KEYBOARD_SERVICE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CARIBOU_TYPE_KEYBOARD_SERVICE, CaribouKeyboardService))
#define CARIBOU_KEYBOARD_SERVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CARIBOU_TYPE_KEYBOARD_SERVICE, CaribouKeyboardServiceClass))
#define CARIBOU_IS_KEYBOARD_SERVICE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CARIBOU_TYPE_KEYBOARD_SERVICE))
#define CARIBOU_IS_KEYBOARD_SERVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CARIBOU_TYPE_KEYBOARD_SERVICE))
#define CARIBOU_KEYBOARD_SERVICE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CARIBOU_TYPE_KEYBOARD_SERVICE, CaribouKeyboardServiceClass))

typedef struct _CaribouKeyboardService CaribouKeyboardService;
typedef struct _CaribouKeyboardServiceClass CaribouKeyboardServiceClass;
typedef struct _CaribouKeyboardServicePrivate CaribouKeyboardServicePrivate;
typedef struct _CaribouGroupModelPrivate CaribouGroupModelPrivate;

#define CARIBOU_TYPE_SCANNABLE_GROUP (caribou_scannable_group_get_type ())
#define CARIBOU_SCANNABLE_GROUP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CARIBOU_TYPE_SCANNABLE_GROUP, CaribouScannableGroup))
#define CARIBOU_SCANNABLE_GROUP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CARIBOU_TYPE_SCANNABLE_GROUP, CaribouScannableGroupClass))
#define CARIBOU_IS_SCANNABLE_GROUP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CARIBOU_TYPE_SCANNABLE_GROUP))
#define CARIBOU_IS_SCANNABLE_GROUP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CARIBOU_TYPE_SCANNABLE_GROUP))
#define CARIBOU_SCANNABLE_GROUP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CARIBOU_TYPE_SCANNABLE_GROUP, CaribouScannableGroupClass))

typedef struct _CaribouScannableGroup CaribouScannableGroup;
typedef struct _CaribouScannableGroupClass CaribouScannableGroupClass;

#define CARIBOU_TYPE_LEVEL_MODEL (caribou_level_model_get_type ())
#define CARIBOU_LEVEL_MODEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CARIBOU_TYPE_LEVEL_MODEL, CaribouLevelModel))
#define CARIBOU_LEVEL_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CARIBOU_TYPE_LEVEL_MODEL, CaribouLevelModelClass))
#define CARIBOU_IS_LEVEL_MODEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CARIBOU_TYPE_LEVEL_MODEL))
#define CARIBOU_IS_LEVEL_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CARIBOU_TYPE_LEVEL_MODEL))
#define CARIBOU_LEVEL_MODEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CARIBOU_TYPE_LEVEL_MODEL, CaribouLevelModelClass))

typedef struct _CaribouLevelModel CaribouLevelModel;
typedef struct _CaribouLevelModelClass CaribouLevelModelClass;

#define CARIBOU_TYPE_ISCANNABLE_GROUP (caribou_iscannable_group_get_type ())
#define CARIBOU_ISCANNABLE_GROUP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CARIBOU_TYPE_ISCANNABLE_GROUP, CaribouIScannableGroup))
#define CARIBOU_IS_ISCANNABLE_GROUP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CARIBOU_TYPE_ISCANNABLE_GROUP))
#define CARIBOU_ISCANNABLE_GROUP_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), CARIBOU_TYPE_ISCANNABLE_GROUP, CaribouIScannableGroupIface))

typedef struct _CaribouIScannableGroup CaribouIScannableGroup;
typedef struct _CaribouIScannableGroupIface CaribouIScannableGroupIface;

#define CARIBOU_TYPE_ISCANNABLE_ITEM (caribou_iscannable_item_get_type ())
#define CARIBOU_ISCANNABLE_ITEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CARIBOU_TYPE_ISCANNABLE_ITEM, CaribouIScannableItem))
#define CARIBOU_IS_ISCANNABLE_ITEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CARIBOU_TYPE_ISCANNABLE_ITEM))
#define CARIBOU_ISCANNABLE_ITEM_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), CARIBOU_TYPE_ISCANNABLE_ITEM, CaribouIScannableItemIface))

typedef struct _CaribouIScannableItem CaribouIScannableItem;
typedef struct _CaribouIScannableItemIface CaribouIScannableItemIface;

#define CARIBOU_TYPE_SCAN_GROUPING (caribou_scan_grouping_get_type ())
typedef struct _CaribouScannableGroupPrivate CaribouScannableGroupPrivate;
typedef struct _CaribouLevelModelPrivate CaribouLevelModelPrivate;

#define CARIBOU_TYPE_ROW_MODEL (caribou_row_model_get_type ())
#define CARIBOU_ROW_MODEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CARIBOU_TYPE_ROW_MODEL, CaribouRowModel))
#define CARIBOU_ROW_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CARIBOU_TYPE_ROW_MODEL, CaribouRowModelClass))
#define CARIBOU_IS_ROW_MODEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CARIBOU_TYPE_ROW_MODEL))
#define CARIBOU_IS_ROW_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CARIBOU_TYPE_ROW_MODEL))
#define CARIBOU_ROW_MODEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CARIBOU_TYPE_ROW_MODEL, CaribouRowModelClass))

typedef struct _CaribouRowModel CaribouRowModel;
typedef struct _CaribouRowModelClass CaribouRowModelClass;
typedef struct _CaribouRowModelPrivate CaribouRowModelPrivate;

#define CARIBOU_TYPE_COLUMN_MODEL (caribou_column_model_get_type ())
#define CARIBOU_COLUMN_MODEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CARIBOU_TYPE_COLUMN_MODEL, CaribouColumnModel))
#define CARIBOU_COLUMN_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CARIBOU_TYPE_COLUMN_MODEL, CaribouColumnModelClass))
#define CARIBOU_IS_COLUMN_MODEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CARIBOU_TYPE_COLUMN_MODEL))
#define CARIBOU_IS_COLUMN_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CARIBOU_TYPE_COLUMN_MODEL))
#define CARIBOU_COLUMN_MODEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CARIBOU_TYPE_COLUMN_MODEL, CaribouColumnModelClass))

typedef struct _CaribouColumnModel CaribouColumnModel;
typedef struct _CaribouColumnModelClass CaribouColumnModelClass;
typedef struct _CaribouKeyModelPrivate CaribouKeyModelPrivate;

#define CARIBOU_TYPE_MODIFIER_STATE (caribou_modifier_state_get_type ())
typedef struct _CaribouColumnModelPrivate CaribouColumnModelPrivate;

#define CARIBOU_TYPE_SCANNER (caribou_scanner_get_type ())
#define CARIBOU_SCANNER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CARIBOU_TYPE_SCANNER, CaribouScanner))
#define CARIBOU_SCANNER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CARIBOU_TYPE_SCANNER, CaribouScannerClass))
#define CARIBOU_IS_SCANNER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CARIBOU_TYPE_SCANNER))
#define CARIBOU_IS_SCANNER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CARIBOU_TYPE_SCANNER))
#define CARIBOU_SCANNER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CARIBOU_TYPE_SCANNER, CaribouScannerClass))

typedef struct _CaribouScanner CaribouScanner;
typedef struct _CaribouScannerClass CaribouScannerClass;
typedef struct _CaribouScannerPrivate CaribouScannerPrivate;

typedef void (*CaribouKeyButtonCallback) (guint keybuttoncode, gboolean pressed, gpointer user_data);
struct _CaribouDisplayAdapter {
	GObject parent_instance;
	CaribouDisplayAdapterPrivate * priv;
};

struct _CaribouDisplayAdapterClass {
	GObjectClass parent_class;
	void (*keyval_press) (CaribouDisplayAdapter* self, guint keyval);
	void (*keyval_release) (CaribouDisplayAdapter* self, guint keyval);
	void (*mod_lock) (CaribouDisplayAdapter* self, guint mask);
	void (*mod_unlock) (CaribouDisplayAdapter* self, guint mask);
	void (*mod_latch) (CaribouDisplayAdapter* self, guint mask);
	void (*mod_unlatch) (CaribouDisplayAdapter* self, guint mask);
	guint (*get_current_group) (CaribouDisplayAdapter* self, gchar* * group_name, gchar* * variant_name);
	void (*get_groups) (CaribouDisplayAdapter* self, gchar*** group_names, int* group_names_length1, gchar*** variant_names, int* variant_names_length1);
	void (*register_key_func) (CaribouDisplayAdapter* self, guint keyval, CaribouKeyButtonCallback func, gpointer func_target);
	void (*register_button_func) (CaribouDisplayAdapter* self, guint button, CaribouKeyButtonCallback func, gpointer func_target);
};

struct _CaribouNullAdapter {
	CaribouDisplayAdapter parent_instance;
	CaribouNullAdapterPrivate * priv;
};

struct _CaribouNullAdapterClass {
	CaribouDisplayAdapterClass parent_class;
};

struct _CaribouXAdapter {
	CaribouDisplayAdapter parent_instance;
	CaribouXAdapterPrivate * priv;
};

struct _CaribouXAdapterClass {
	CaribouDisplayAdapterClass parent_class;
};

struct _CaribouIKeyboardObjectIface {
	GTypeInterface parent_iface;
	CaribouIKeyboardObject** (*get_children) (CaribouIKeyboardObject* self, int* result_length1);
	CaribouKeyModel** (*get_keys) (CaribouIKeyboardObject* self, int* result_length1);
};

struct _CaribouKeyboardModel {
	GObject parent_instance;
	CaribouKeyboardModelPrivate * priv;
};

struct _CaribouKeyboardModelClass {
	GObjectClass parent_class;
};

struct _CaribouKeyboardService {
	GObject parent_instance;
	CaribouKeyboardServicePrivate * priv;
};

struct _CaribouKeyboardServiceClass {
	GObjectClass parent_class;
	void (*set_cursor_location) (CaribouKeyboardService* self, gint x, gint y, gint w, gint h);
	void (*set_entry_location) (CaribouKeyboardService* self, gint x, gint y, gint w, gint h);
	void (*show) (CaribouKeyboardService* self, guint32 timestamp);
	void (*hide) (CaribouKeyboardService* self, guint32 timestamp);
	void (*name_lost) (CaribouKeyboardService* self, const gchar* name);
};

struct _CaribouGroupModel {
	GObject parent_instance;
	CaribouGroupModelPrivate * priv;
	gchar* group;
	gchar* variant;
};

struct _CaribouGroupModelClass {
	GObjectClass parent_class;
};

struct _CaribouIScannableItemIface {
	GTypeInterface parent_iface;
	gboolean (*get_scan_stepping) (CaribouIScannableItem* self);
	void (*set_scan_stepping) (CaribouIScannableItem* self, gboolean value);
	gboolean (*get_scan_selected) (CaribouIScannableItem* self);
	void (*set_scan_selected) (CaribouIScannableItem* self, gboolean value);
};

typedef enum  {
	CARIBOU_SCAN_GROUPING_NONE,
	CARIBOU_SCAN_GROUPING_SUBGROUPS,
	CARIBOU_SCAN_GROUPING_ROWS,
	CARIBOU_SCAN_GROUPING_LINEAR
} CaribouScanGrouping;

struct _CaribouIScannableGroupIface {
	GTypeInterface parent_iface;
	CaribouIScannableItem* (*child_select) (CaribouIScannableGroup* self);
	void (*scan_reset) (CaribouIScannableGroup* self);
	CaribouIScannableItem** (*get_scan_children) (CaribouIScannableGroup* self, int* result_length1);
	CaribouIScannableItem* (*child_step) (CaribouIScannableGroup* self, gint cycles);
	CaribouIScannableItem** (*get_step_path) (CaribouIScannableGroup* self, int* result_length1);
	CaribouIScannableItem** (*get_selected_path) (CaribouIScannableGroup* self, int* result_length1);
	CaribouScanGrouping (*get_scan_grouping) (CaribouIScannableGroup* self);
	void (*set_scan_grouping) (CaribouIScannableGroup* self, CaribouScanGrouping value);
};

struct _CaribouScannableGroup {
	GObject parent_instance;
	CaribouScannableGroupPrivate * priv;
};

struct _CaribouScannableGroupClass {
	GObjectClass parent_class;
	CaribouIScannableItem** (*get_scan_children) (CaribouScannableGroup* self, int* result_length1);
	CaribouIScannableItem* (*child_select) (CaribouScannableGroup* self);
};

struct _CaribouLevelModel {
	CaribouScannableGroup parent_instance;
	CaribouLevelModelPrivate * priv;
};

struct _CaribouLevelModelClass {
	CaribouScannableGroupClass parent_class;
};

struct _CaribouRowModel {
	CaribouScannableGroup parent_instance;
	CaribouRowModelPrivate * priv;
};

struct _CaribouRowModelClass {
	CaribouScannableGroupClass parent_class;
};

typedef enum  {
	CARIBOU_MODIFIER_STATE_NONE,
	CARIBOU_MODIFIER_STATE_LATCHED,
	CARIBOU_MODIFIER_STATE_LOCKED
} CaribouModifierState;

struct _CaribouKeyModel {
	GObject parent_instance;
	CaribouKeyModelPrivate * priv;
	CaribouModifierState modifier_state;
};

struct _CaribouKeyModelClass {
	GObjectClass parent_class;
};

struct _CaribouColumnModel {
	CaribouScannableGroup parent_instance;
	CaribouColumnModelPrivate * priv;
};

struct _CaribouColumnModelClass {
	CaribouScannableGroupClass parent_class;
};

struct _CaribouScanner {
	GObject parent_instance;
	CaribouScannerPrivate * priv;
};

struct _CaribouScannerClass {
	GObjectClass parent_class;
};


GType caribou_display_adapter_get_type (void) G_GNUC_CONST;
void caribou_display_adapter_keyval_press (CaribouDisplayAdapter* self,
                                           guint keyval);
void caribou_display_adapter_keyval_release (CaribouDisplayAdapter* self,
                                             guint keyval);
void caribou_display_adapter_mod_lock (CaribouDisplayAdapter* self,
                                       guint mask);
void caribou_display_adapter_mod_unlock (CaribouDisplayAdapter* self,
                                         guint mask);
void caribou_display_adapter_mod_latch (CaribouDisplayAdapter* self,
                                        guint mask);
void caribou_display_adapter_mod_unlatch (CaribouDisplayAdapter* self,
                                          guint mask);
guint caribou_display_adapter_get_current_group (CaribouDisplayAdapter* self,
                                                 gchar* * group_name,
                                                 gchar* * variant_name);
void caribou_display_adapter_get_groups (CaribouDisplayAdapter* self,
                                         gchar*** group_names,
                                         int* group_names_length1,
                                         gchar*** variant_names,
                                         int* variant_names_length1);
void caribou_display_adapter_register_key_func (CaribouDisplayAdapter* self,
                                                guint keyval,
                                                CaribouKeyButtonCallback func,
                                                gpointer func_target);
void caribou_display_adapter_register_button_func (CaribouDisplayAdapter* self,
                                                   guint button,
                                                   CaribouKeyButtonCallback func,
                                                   gpointer func_target);
gboolean caribou_display_adapter_set_default (CaribouDisplayAdapter* adapter);
CaribouDisplayAdapter* caribou_display_adapter_get_default (void);
CaribouDisplayAdapter* caribou_display_adapter_construct (GType object_type);
GdkDisplay* caribou_display_adapter_get_display (CaribouDisplayAdapter* self);
GType caribou_null_adapter_get_type (void) G_GNUC_CONST;
CaribouNullAdapter* caribou_null_adapter_new (void);
CaribouNullAdapter* caribou_null_adapter_construct (GType object_type);
GType caribou_xadapter_get_type (void) G_GNUC_CONST;
CaribouXAdapter* caribou_xadapter_new (void);
CaribouXAdapter* caribou_xadapter_construct (GType object_type);
GType caribou_key_model_get_type (void) G_GNUC_CONST;
GType caribou_ikeyboard_object_get_type (void) G_GNUC_CONST;
GType caribou_keyboard_model_get_type (void) G_GNUC_CONST;
gchar** caribou_keyboard_model_get_groups (CaribouKeyboardModel* self,
                                           int* result_length1);
GType caribou_group_model_get_type (void) G_GNUC_CONST;
CaribouGroupModel* caribou_keyboard_model_get_group (CaribouKeyboardModel* self,
                                                     const gchar* group_name);
CaribouKeyboardModel* caribou_keyboard_model_new (void);
CaribouKeyboardModel* caribou_keyboard_model_construct (GType object_type);
const gchar* caribou_keyboard_model_get_active_group (CaribouKeyboardModel* self);
const gchar* caribou_keyboard_model_get_keyboard_type (CaribouKeyboardModel* self);
const gchar* caribou_keyboard_model_get_keyboard_file (CaribouKeyboardModel* self);
GType caribou_keyboard_service_get_type (void) G_GNUC_CONST;
guint caribou_keyboard_service_register_object (void* object,
                                                GDBusConnection* connection,
                                                const gchar* path,
                                                GError** error);
void caribou_keyboard_service_set_cursor_location (CaribouKeyboardService* self,
                                                   gint x,
                                                   gint y,
                                                   gint w,
                                                   gint h);
void caribou_keyboard_service_set_entry_location (CaribouKeyboardService* self,
                                                  gint x,
                                                  gint y,
                                                  gint w,
                                                  gint h);
void caribou_keyboard_service_show (CaribouKeyboardService* self,
                                    guint32 timestamp);
void caribou_keyboard_service_hide (CaribouKeyboardService* self,
                                    guint32 timestamp);
void caribou_keyboard_service_register_keyboard (CaribouKeyboardService* self,
                                                 const gchar* name);
void caribou_keyboard_service_name_lost (CaribouKeyboardService* self,
                                         const gchar* name);
CaribouKeyboardService* caribou_keyboard_service_construct (GType object_type);
CaribouGroupModel* caribou_group_model_new (const gchar* group,
                                            const gchar* variant);
CaribouGroupModel* caribou_group_model_construct (GType object_type,
                                                  const gchar* group,
                                                  const gchar* variant);
gchar* caribou_group_model_create_group_name (const gchar* group,
                                              const gchar* variant);
gchar** caribou_group_model_get_levels (CaribouGroupModel* self,
                                        int* result_length1);
GType caribou_scannable_group_get_type (void) G_GNUC_CONST;
GType caribou_level_model_get_type (void) G_GNUC_CONST;
CaribouLevelModel* caribou_group_model_get_level (CaribouGroupModel* self,
                                                  const gchar* level_name);
const gchar* caribou_group_model_get_active_level (CaribouGroupModel* self);
GType caribou_iscannable_item_get_type (void) G_GNUC_CONST;
GType caribou_scan_grouping_get_type (void) G_GNUC_CONST;
GType caribou_iscannable_group_get_type (void) G_GNUC_CONST;
CaribouLevelModel* caribou_level_model_new (const gchar* mode);
CaribouLevelModel* caribou_level_model_construct (GType object_type,
                                                  const gchar* mode);
GType caribou_row_model_get_type (void) G_GNUC_CONST;
CaribouRowModel** caribou_level_model_get_rows (CaribouLevelModel* self,
                                                int* result_length1);
const gchar* caribou_level_model_get_mode (CaribouLevelModel* self);
CaribouRowModel* caribou_row_model_new (void);
CaribouRowModel* caribou_row_model_construct (GType object_type);
GType caribou_column_model_get_type (void) G_GNUC_CONST;
CaribouColumnModel** caribou_row_model_get_columns (CaribouRowModel* self,
                                                    int* result_length1);
GType caribou_modifier_state_get_type (void) G_GNUC_CONST;
CaribouKeyModel* caribou_key_model_new (const gchar* name,
                                        const gchar* text);
CaribouKeyModel* caribou_key_model_construct (GType object_type,
                                              const gchar* name,
                                              const gchar* text);
void caribou_key_model_press (CaribouKeyModel* self);
void caribou_key_model_release (CaribouKeyModel* self);
CaribouKeyModel** caribou_key_model_get_extended_keys (CaribouKeyModel* self,
                                                       int* result_length1);
void caribou_key_model_activate (CaribouKeyModel* self);
const gchar* caribou_key_model_get_align (CaribouKeyModel* self);
void caribou_key_model_set_align (CaribouKeyModel* self,
                                  const gchar* value);
gdouble caribou_key_model_get_width (CaribouKeyModel* self);
void caribou_key_model_set_width (CaribouKeyModel* self,
                                  gdouble value);
const gchar* caribou_key_model_get_toggle (CaribouKeyModel* self);
void caribou_key_model_set_toggle (CaribouKeyModel* self,
                                   const gchar* value);
gboolean caribou_key_model_get_repeatable (CaribouKeyModel* self);
void caribou_key_model_set_repeatable (CaribouKeyModel* self,
                                       gboolean value);
gboolean caribou_key_model_get_is_modifier (CaribouKeyModel* self);
void caribou_key_model_set_is_modifier (CaribouKeyModel* self,
                                        gboolean value);
gboolean caribou_key_model_get_show_subkeys (CaribouKeyModel* self);
const gchar* caribou_key_model_get_name (CaribouKeyModel* self);
guint caribou_key_model_get_keyval (CaribouKeyModel* self);
const gchar* caribou_key_model_get_text (CaribouKeyModel* self);
const gchar* caribou_key_model_get_label (CaribouKeyModel* self);
void caribou_key_model_set_label (CaribouKeyModel* self,
                                  const gchar* value);
CaribouColumnModel* caribou_column_model_new (void);
CaribouColumnModel* caribou_column_model_construct (GType object_type);
CaribouKeyModel* caribou_column_model_get_key (CaribouColumnModel* self,
                                               gint index);
CaribouKeyModel* caribou_column_model_first_key (CaribouColumnModel* self);
GType caribou_scanner_get_type (void) G_GNUC_CONST;
void caribou_scanner_set_keyboard (CaribouScanner* self,
                                   CaribouKeyboardModel* keyboard);
void caribou_scanner_reset (CaribouScanner* self);
CaribouScanner* caribou_scanner_new (void);
CaribouScanner* caribou_scanner_construct (GType object_type);
gboolean caribou_scanner_get_bind_settings (CaribouScanner* self);
gint caribou_scanner_get_scan_grouping (CaribouScanner* self);
void caribou_scanner_set_scan_grouping (CaribouScanner* self,
                                        gint value);
gboolean caribou_scanner_get_scan_enabled (CaribouScanner* self);
void caribou_scanner_set_scan_enabled (CaribouScanner* self,
                                       gboolean value);
gdouble caribou_scanner_get_step_time (CaribouScanner* self);
void caribou_scanner_set_step_time (CaribouScanner* self,
                                    gdouble value);
const gchar* caribou_scanner_get_switch_device (CaribouScanner* self);
void caribou_scanner_set_switch_device (CaribouScanner* self,
                                        const gchar* value);
const gchar* caribou_scanner_get_keyboard_key (CaribouScanner* self);
void caribou_scanner_set_keyboard_key (CaribouScanner* self,
                                       const gchar* value);
gint caribou_scanner_get_mouse_button (CaribouScanner* self);
void caribou_scanner_set_mouse_button (CaribouScanner* self,
                                       gint value);
gint caribou_scanner_get_scan_cycles (CaribouScanner* self);
void caribou_scanner_set_scan_cycles (CaribouScanner* self,
                                      gint value);
gboolean caribou_scanner_get_autorestart (CaribouScanner* self);
void caribou_scanner_set_autorestart (CaribouScanner* self,
                                      gboolean value);
gboolean caribou_scanner_get_inverse_scanning (CaribouScanner* self);
void caribou_scanner_set_inverse_scanning (CaribouScanner* self,
                                           gboolean value);
gboolean caribou_iscannable_item_get_scan_stepping (CaribouIScannableItem* self);
void caribou_iscannable_item_set_scan_stepping (CaribouIScannableItem* self,
                                                gboolean value);
gboolean caribou_iscannable_item_get_scan_selected (CaribouIScannableItem* self);
void caribou_iscannable_item_set_scan_selected (CaribouIScannableItem* self,
                                                gboolean value);
CaribouIScannableItem* caribou_iscannable_group_child_select (CaribouIScannableGroup* self);
void caribou_iscannable_group_scan_reset (CaribouIScannableGroup* self);
CaribouIScannableItem** caribou_iscannable_group_get_scan_children (CaribouIScannableGroup* self,
                                                                    int* result_length1);
CaribouIScannableItem* caribou_iscannable_group_child_step (CaribouIScannableGroup* self,
                                                            gint cycles);
CaribouIScannableItem** caribou_iscannable_group_get_step_path (CaribouIScannableGroup* self,
                                                                int* result_length1);
CaribouIScannableItem** caribou_iscannable_group_get_selected_path (CaribouIScannableGroup* self,
                                                                    int* result_length1);
CaribouScanGrouping caribou_iscannable_group_get_scan_grouping (CaribouIScannableGroup* self);
void caribou_iscannable_group_set_scan_grouping (CaribouIScannableGroup* self,
                                                 CaribouScanGrouping value);
CaribouIScannableItem** caribou_scannable_group_get_scan_children (CaribouScannableGroup* self,
                                                                   int* result_length1);
CaribouIScannableItem* caribou_scannable_group_child_select (CaribouScannableGroup* self);
CaribouScannableGroup* caribou_scannable_group_construct (GType object_type);
CaribouIKeyboardObject** caribou_ikeyboard_object_get_children (CaribouIKeyboardObject* self,
                                                                int* result_length1);
CaribouKeyModel** caribou_ikeyboard_object_get_keys (CaribouIKeyboardObject* self,
                                                     int* result_length1);


G_END_DECLS

#endif
