7¤0ì"©“@¨£q03•›™™™™™™Yé¤Ýˆa[äJ£ün)¤ÁJuhïf/Û�‰†ýnšŒuzÆè�ˆè—Õ¥GÕ(“ 	
…™8"Q¦ù  €‹‘Š�	‰ÉƒáH „BqDQC1FAÇIHY™  ÄØô8Ë)d                   VAILABLE_IN_ALL
gboolean          gtk_print_job_get_reverse     (GtkPrintJob       *job);
GDK_AVAILABLE_IN_ALL
void              gtk_print_job_set_reverse     (GtkPrintJob       *job,
                                                 gboolean           reverse);

G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkPrintJob, g_object_unref)

G_END_DECLS


/* This file is generated by glib-mkenums, do not modify it. This code is licensed under the same license as the containing project. Note that it links to GLib, so must comply with the LGPL linking clauses. */

#ifndef __GSK_ENUM_TYPES_H__
#define __GSK_ENUM_TYPES_H__

#include <gdk/gdk.h>

G_BEGIN_DECLS

/* enumerations from "gskenums.h" */
GDK_AVAILABLE_IN_ALL GType gsk_render_node_type_get_type (void) G_GNUC_EPRECATED_IN_4_10_FOR(GtkDropDown)
void          gtk_combo_box_set_child            (GtkComboBox *combo_box,
                                                  GtkWidget   *child);
GDK_DEPRECATED_IN_4_10_FOR(GtkDropDown)
GtkWidget *   gtk_combo_box_get_child            (GtkComboBox *combo_box);

G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkComboBox, g_object_unref)

G_END_DECLS

/* GTK - The GIMP Toolkit
 * gtkfilechooserwidget.h: Embeddable file selector widget
 * Copyright (C) 2003, Red Hat, Inc.
 *
 * 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, see <http://www.gnu.org/licenses/>.
 */

#pragma once

#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
#error "Only <gtk/gtk.h> can be included directly."
#endif

#include <gtk/deprecated/gtkfilechooser.h>
#include <gtk/gtkbox.h>

G_BEGIN_DECLS

#define GTK_TYPE_FILE_CHOOSER_WIDGET             (gtk_file_chooser_widget_get_type ())
#define GTK_FILE_CHOOSER_WIDGET(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_FILE_CHOOSER_WIDGET, GtkFileChooserWidget))
#define GTK_IS_FILE_CHOOSER_WIDGET(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_FILE_CHOOSER_WIDGET))

typedef struct _GtkFileChooserWidget        GtkFileChooserWidget;

GDK_AVAILABLE_IN_ALL
GType      gtk_file_chooser_widget_get_type         (void) G_GNUC_CONST;
GDK_DEPRECATED_IN_4_10
GtkWidget *gtk_file_chooser_widget_new              (GtkFileChooserAction  action);

G_D                                        GdkEvent             *event,
                                                          GtkWidget            *widget,
                                                          const char           *path,
                                                          const GdkRectangle   *background_area,
                                                          const GdkRectangle   *cell_area,
                                                          GtkCellRendererState  flags);

  /* Signals */
  void (* editing_canceled) (GtkCellRenderer *cell);
  void (* editing_started)  (GtkCellRenderer *cell,
			     GtkCellEditable *editable,
			     const char      *path);

  /*< private >*/
  gpointer padding[8];
};

GDK_AVAILABLE_IN_ALL
GType              gtk_cell_renderer_get_type       (void) G_GNUC_CONST;

GDK_DEPRECATED_IN_4_10
GtkSizeRequestMode gtk_cell_renderer_get_request_mode               (GtkCellRenderer    *cell);
GDK_DEPRECATED_IN_4_10
void               gtk_cell_renderer_get_preferred_width            (GtkCellRenderer    *cell,
                                                                     GtkWidget          *widget,
                                                                     int                *minimum_size,
                                                                     int                *natural_size);
GDK_DEPRECATED_IN_4_10
void               gtk_cell_renderer_get_preferred_height_for_width (GtkCellRenderer    *cell,
                                                                     GtkWidget          *widget,
                                                                     int                 width,
                                                                     int                *minimum_height,
                                                                     int                *natural_height);
GDK_DEPRECATED_IN_4_10
void               gtk_cell_renderer_get_preferred_height      n @model
 * @b: Another `GtkTreeIter` in @model
 * @user_data: Data passed when the compare func is assigned e.g. by
 *  gtk_tree_sortable_set_sort_func()
 *
 * A GtkTreeIterCompareFunc should return a negative integer, zero, or a positive
 * integer if @a sorts before @b, @a sorts with @b, or @a sorts after @b
 * respectively.
 *
 * If two iters compare as equal, their order in the sorted model
 * is undefined. In order to ensure that the `GtkTreeSortable` behaves as
 * expected, the GtkTreeIterCompareFunc must define a partial order on
 * the model, i.e. it must be reflexive, antisymmetric and transitive.
 *
 * For example, if @model is a product catalogue, then a compare function
 * for the â€œpriceâ€� column could be one which returns
 * `price_of(@a) - price_of(@b)`.
 *
 * Returns: a negative integer, zero or a positive integer depending on whether
 *   @a sorts before, with or after @b
 */
typedef int (* GtkTreeIterCompareFunc) (GtkTreeModel *model,
					GtkTreeIter  *a,
					GtkTreeIter  *b,
					gpointer      user_data);


/**
 * GtkTreeSortableIface:
 * @sort_column_changed: Signal emitted when the sort column or sort
 *    order of sortable is changed.
 * @get_sort_column_id: Fills in sort_column_id and order with the
 *    current sort column and the order.
 * @set_sort_column_id: Sets the current sort column to be
 *    sort_column_id.
 * @set_sort_func: Sets the comparison function used when sorting to
 *    be sort_func.
 * @set_default_sort_func: Sets the default comparison function used
 *    when sorting to be sort_func.
 * @has_default_sort_func: %TRUE if the model has a default sort
 * function.
 */
struct _GtkTreeSortableIface
{
  /*< private >*/
  GTypeInterface g_iface;

  /*< public >*/

  /* signals */
  void     (* sort_column_changed)   (GtkTreeSortable        *sortable);

  /* virtual table */
  gboolean (* get_sort_column_id)    (GtkTreeSortable        *sortable,
				      int                    *sort_column_id,
				      GtkSortType   cell_layout);
GDK_DEPRECATED_IN_4_10
void  gtk_cell_layout_set_attributes     (GtkCellLayout         *cell_layout,
                                          GtkCellRenderer       *cell,
                                          ...) G_GNUC_NULL_TERMINATED;
GDK_DEPRECATED_IN_4_10
void  gtk_cell_layout_add_attribute      (GtkCellLayout         *cell_layout,
                                          GtkCellRenderer       *cell,
                                          const char            *attribute,
                                          int                    column);
GDK_DEPRECATED_IN_4_10
void  gtk_cell_layout_set_cell_data_func (GtkCellLayout         *cell_layout,
                                          GtkCellRenderer       *cell,
                                          GtkCellLayoutDataFunc  func,
                                          gpointer               func_data,
                                          GDestroyNotify         destroy);
GDK_DEPRECATED_IN_4_10
void  gtk_cell_layout_clear_attributes   (GtkCellLayout         *cell_layout,
                                          GtkCellRenderer       *cell);
GDK_DEPRECATED_IN_4_10
void  gtk_cell_layout_reorder            (GtkCellLayout         *cell_layout,
                                          GtkCellRenderer       *cell,
                                          int                    position);
GDK_DEPRECATED_IN_4_10
GtkCellArea *gtk_cell_layout_get_area    (GtkCellLayout         *cell_layout);

gboolean _gtk_cell_layout_buildable_custom_tag_start (GtkBuildable       *buildable,
                                                      GtkBuilder         *builder,
                                                      GObject            *child,
                                                      const char         *tagname,
                                                      GtkBuildableParser *parser,
                                                      gpointer           *data);
gboolenclude <gtk/deprecated/gtkcellrenderer.h>
#include <gtk/deprecated/gtktreemodel.h>
#include <gtk/deprecated/gtktreesortable.h>
#include <gtk/deprecated/gtkcellarea.h>


G_BEGIN_DECLS


#define GTK_TYPE_TREE_VIEW_COLUMN	     (gtk_tree_view_column_get_type ())
#define GTK_TREE_VIEW_COLUMN(obj)	     (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_TREE_VIEW_COLUMN, GtkTreeViewColumn))
#define GTK_IS_TREE_VIEW_COLUMN(obj)	     (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_TREE_VIEW_COLUMN))

typedef struct _GtkTreeViewColumn        GtkTreeViewColumn;

/**
 * GtkTreeViewColumnSizing:
 * @GTK_TREE_VIEW_COLUMN_GROW_ONLY: Columns only get bigger in reaction to changes in the model
 * @GTK_TREE_VIEW_COLUMN_AUTOSIZE: Columns resize to be the optimal size every time the model changes.
 * @GTK_TREE_VIEW_COLUMN_FIXED: Columns are a fixed numbers of pixels wide.
 *
 * The sizing method the column uses to determine its width.  Please note
 * that %GTK_TREE_VIEW_COLUMN_AUTOSIZE are inefficient for large views, and
 * can make columns appear choppy.
 */
typedef enum
{
  GTK_TREE_VIEW_COLUMN_GROW_ONLY,
  GTK_TREE_VIEW_COLUMN_AUTOSIZE,
  GTK_TREE_VIEW_COLUMN_FIXED
} GtkTreeViewColumnSizing;

/**
 * GtkTreeCellDataFunc:
 * @tree_column: A `GtkTreeViewColumn`
 * @cell: The `GtkCellRenderer` that is being rendered by @tree_column
 * @tree_model: The `GtkTreeModel` being rendered
 * @iter: A `GtkTreeIter` of the current row rendered
 * @data: (closure): user data
 *
 * A function to set the properties of a cell instead of just using the
 * straight mapping between the cell and the model.
 *
 * This function is useful for customizing the cell renderer. For example,
 * a function might get an* integer from the @tree_model, and render it to
 * the â€œtextâ€� attribute of â€œcellâ€� by converting it to its written equivalent.
 *
 * See also: gtk_tree_view_column_set_cell_data_func()
 */
typedef void (* GtkTreeCellDataFunc) (GtkTreeViewColumn *tree_column,
				      GtkCellRenderer   *cell,
				 tree_row_reference_free      (GtkTreeRowReference *reference);
/* These two functions are only needed if you created the row reference with a
 * proxy object */
GDK_DEPRECATED_IN_4_10_FOR(GListModel)
void                 gtk_tree_row_reference_inserted  (GObject     *proxy,
						       GtkTreePath *path);
GDK_DEPRECATED_IN_4_10_FOR(GListModel)
void                 gtk_tree_row_reference_deleted   (GObject     *proxy,
						       GtkTreePath *path);
GDK_DEPRECATED_IN_4_10_FOR(GListModel)
void                 gtk_tree_row_reference_reordered (GObject     *proxy,
						       GtkTreePath *path,
						       GtkTreeIter *iter,
						       int         *new_order);

/* GtkTreeIter operations */
GDK_DEPRECATED_IN_4_10_FOR(GListModel)
GtkTreeIter *     gtk_tree_iter_copy             (GtkTreeIter  *iter);
GDK_DEPRECATED_IN_4_10_FOR(GListModel)
void              gtk_tree_iter_free             (GtkTreeIter  *iter);
GDK_AVAILABLE_IN_ALL
GType             gtk_tree_iter_get_type         (void) G_GNUC_CONST;

GDK_AVAILABLE_IN_ALL
GType             gtk_tree_model_get_type        (void) G_GNUC_CONST;
GDK_DEPRECATED_IN_4_10_FOR(GListModel)
GtkTreeModelFlags gtk_tree_model_get_flags       (GtkTreeModel *tree_model);
GDK_DEPRECATED_IN_4_10_FOR(GListModel)
int               gtk_tree_model_get_n_columns   (GtkTreeModel *tree_model);
GDK_DEPRECATED_IN_4_10_FOR(GListModel)
GType             gtk_tree_model_get_column_type (GtkTreeModel *tree_model,
						  int           index_);


/* Iterator movement */
GDK_DEPRECATED_IN_4_10_FOR(GListModel)
gboolean          gtk_tree_model_get_iter        (GtkTreeModel *tree_model,
						  GtkTreeIter  *iter,
						  GtkTreePath  *path);
GDK_DEPRECATED_IN_4_10_FOR(GListModel)
gboolean          gtk_tree_model_get_iter_from_string (GtkTreeModel *tree_model,
						       GtkTreeIter  *iter,
						       const char   *path_string);
GDK_DEPRECATED_IN_4_10_FOR(GListModel)
char *           gtk_tree_model_get_string_from_iter (GtkTreeModel *tree_model,
     EQUEST_WIDTH_FOR_HEIGHT.
 * @get_preferred_width_for_height: Calculates the minimum and natural width
 *   for the area if the passed @context would be allocated the given
 *   height. The same as `GtkCellAreaClass.get_preferred_height_for_width()`
 *   only for handling requests in the %GTK_SIZE_REQUEST_WIDTH_FOR_HEIGHT
 *   mode.
 * @set_cell_property: This should be implemented to handle changes in child
 *   cell properties for a given `GtkCellRenderer` that were previously
 *   installed on the `GtkCellAreaClass` with gtk_cell_area_class_install_cell_property().
 * @get_cell_property: This should be implemented to report the values of
 *   child cell properties for a given child `GtkCellRenderer`.
 * @focus: This virtual method should be implemented to navigate focus from
 *   cell to cell inside the `GtkCellArea`. The `GtkCellArea` should move
 *   focus from cell to cell inside the area and return %FALSE if focus
 *   logically leaves the area with the following exceptions: When the
 *   area contains no activatable cells, the entire area receives focus.
 *   Focus should not be given to cells that are actually â€œfocus siblingsâ€�
 *   of other sibling cells (see gtk_cell_area_get_focus_from_sibling()).
 *   Focus is set by calling gtk_cell_area_set_focus_cell().
 * @is_activatable: Returns whether the `GtkCellArea` can respond to
 *   `GtkCellAreaClass.activate()`, usually this does not need to be
 *   implemented since the base class takes care of this however it can
 *   be enhanced if the `GtkCellArea` subclass can handle activation in
 *   other ways than activating its `GtkCellRenderers`.
 * @activate: This is called when the layouting widget rendering the
 *   `GtkCellArea` activates the focus cell (see gtk_cell_area_get_focus_cell()).
 */
struct _GtkCellAreaClass
{
  /*< private >*/
  GInitiallyUnownedClass parent_class;

  /*< public >*/

  /* Basic methods */
  void               (* add)                             (GtkCellArea             *area,ree_view_set_reorderable               (GtkTreeView               *tree_view,
								    gboolean                   reorderable);
GDK_DEPRECATED_IN_4_10_FOR(GtkListView)
gboolean               gtk_tree_view_get_reorderable               (GtkTreeView               *tree_view);
GDK_DEPRECATED_IN_4_10_FOR(GtkListView)
void                   gtk_tree_view_set_cursor                    (GtkTreeView               *tree_view,
								    GtkTreePath               *path,
								    GtkTreeViewColumn         *focus_column,
								    gboolean                   start_editing);
GDK_DEPRECATED_IN_4_10_FOR(GtkListView)
void                   gtk_tree_view_set_cursor_on_cell            (GtkTreeView               *tree_view,
								    GtkTreePath               *path,
								    GtkTreeViewColumn         *focus_column,
								    GtkCellRenderer           *focus_cell,
								    gboolean                   start_editing);
GDK_DEPRECATED_IN_4_10_FOR(GtkListView)
void                   gtk_tree_view_get_cursor                    (GtkTreeView               *tree_view,
								    GtkTreePath              **path,
								    GtkTreeViewColumn        **focus_column);


/* Layout information */
GDK_DEPRECATED_IN_4_10_FOR(GtkListView)
gboolean               gtk_tree_view_get_path_at_pos               (GtkTreeView               *tree_view,
								    int                        x,
								    int                        y,
								    GtkTreePath              **path,
								    GtkTreeViewColumn        **column,
								    int                       *cell_x,
								    int                       *cell_y);
GDK_DEPRECATED_IN_4_10_FOR(GtkListView)
void                   gtk_tree_view_get_cell_area                 (GtkTreeView               *tree_view,
								    GtkTreePath               *path,
								    GtkTreeViewColumn         *column,
								    GdkRectangle              *rect);
GDK_DEPRECATED_IN_4_10_FOR(GtkListView)
void                   gtk_tree_view_get_background_area  tkTreeViewColumn       *next_column,
						gpointer                 data);

/**
 * GtkTreeViewMappingFunc:
 * @tree_view: A `GtkTreeView`
 * @path: The path thatâ€™s expanded
 * @user_data: user data
 *
 * Function used for gtk_tree_view_map_expanded_rows().
 */
typedef void     (* GtkTreeViewMappingFunc)    (GtkTreeView             *tree_view,
						GtkTreePath             *path,
						gpointer                 user_data);

/**
 * GtkTreeViewSearchEqualFunc:
 * @model: the `GtkTreeModel` being searched
 * @column: the search column set by gtk_tree_view_set_search_column()
 * @key: the key string to compare with
 * @iter: a `GtkTreeIter` pointing the row of @model that should be compared
 *  with @key.
 * @search_data: (closure): user data from gtk_tree_view_set_search_equal_func()
 *
 * A function used for checking whether a row in @model matches
 * a search key string entered by the user. Note the return value
 * is reversed from what you would normally expect, though it
 * has some similarity to strcmp() returning 0 for equal strings.
 *
 * Returns: %FALSE if the row matches, %TRUE otherwise.
 */
typedef gboolean (*GtkTreeViewSearchEqualFunc) (GtkTreeModel            *model,
						int                      column,
						const char              *key,
						GtkTreeIter             *iter,
						gpointer                 search_data);

/**
 * GtkTreeViewRowSeparatorFunc:
 * @model: the `GtkTreeModel`
 * @iter: a `GtkTreeIter` pointing at a row in @model
 * @data: (closure): user data
 *
 * Function type for determining whether the row pointed to by @iter should
 * be rendered as a separator. A common way to implement this is to have a
 * boolean column in the model, whose values the `GtkTreeViewRowSeparatorFunc`
 * returns.
 *
 * Returns: %TRUE if the row is a separator
 */
typedef gboolean (*GtkTreeViewRowSeparatorFunc) (GtkTreeModel      *model,
						 GtkTreeIter       *iter,
						 gpointer           data);

struct _GtkTreeView
{
  GtkWidget parent_instance;
};

skFontChooser))
#define GTK_IS_FONT_CHOOSER(obj)		(G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_FONT_CHOOSER))
#define GTK_FONT_CHOOSER_GET_IFACE(inst)	(G_TYPE_INSTANCE_GET_INTERFACE ((inst), GTK_TYPE_FONT_CHOOSER, GtkFontChooserIface))

typedef struct _GtkFontChooser      GtkFontChooser; /* dummy */
typedef struct _GtkFontChooserIface GtkFontChooserIface;

struct _GtkFontChooserIface
{
  GTypeInterface base_iface;

  /* Methods */
  PangoFontFamily * (* get_font_family)         (GtkFontChooser  *fontchooser);
  PangoFontFace *   (* get_font_face)           (GtkFontChooser  *fontchooser);
  int               (* get_font_size)           (GtkFontChooser  *fontchooser);

  void              (* set_filter_func)         (GtkFontChooser   *fontchooser,
                                                 GtkFontFilterFunc filter,
                                                 gpointer          user_data,
                                                 GDestroyNotify    destroy);

  /* Signals */
  void (* font_activated) (GtkFontChooser *chooser,
                           const char     *fontname);

  /* More methods */
  void              (* set_font_map)            (GtkFontChooser   *fontchooser,
                                                 PangoFontMap     *fontmap);
  PangoFontMap *    (* get_font_map)            (GtkFontChooser   *fontchooser);

  /*< private >*/
  /* Padding; remove in GTK-next */
  gpointer padding[10];
};

GDK_AVAILABLE_IN_ALL
GType            gtk_font_chooser_get_type                 (void) G_GNUC_CONST;

GDK_DEPRECATED_IN_4_10
PangoFontFamily *gtk_font_chooser_get_font_family          (GtkFontChooser   *fontchooser);
GDK_DEPRECATED_IN_4_10
PangoFontFace   *gtk_font_chooser_get_font_face            (GtkFontChooser   *fontchooser);
GDK_DEPRECATED_IN_4_10
int              gtk_font_chooser_get_font_size            (GtkFontChooser   *fontchooser);

GDK_DEPRECATED_IN_4_10
PangoFontDescription *
                 gtk_font_chooser_get_font_desc      _RESULT_IN_PROGRESS
} GtkPrintOperationResult;

/**
 * GtkPrintOperationAction:
 * @GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG: Show the print dialog.
 * @GTK_PRINT_OPERATION_ACTION_PRINT: Start to print without showing
 *   the print dialog, based on the current print settings.
 * @GTK_PRINT_OPERATION_ACTION_PREVIEW: Show the print preview.
 * @GTK_PRINT_OPERATION_ACTION_EXPORT: Export to a file. This requires
 *   the export-filename property to be set.
 *
 * Determines what action the print operation should perform.
 *
 * A parameter of this typs is passed to [method@Gtk.PrintOperation.run].
 */
typedef enum {
  GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,
  GTK_PRINT_OPERATION_ACTION_PRINT,
  GTK_PRINT_OPERATION_ACTION_PREVIEW,
  GTK_PRINT_OPERATION_ACTION_EXPORT
} GtkPrintOperationAction;


struct _GtkPrintOperation
{
  GObject parent_instance;

  /*< private >*/
  GtkPrintOperationPrivate *priv;
};

/**
 * GtkPrintOperationClass:
 * @parent_class: The parent class.
 * @done: Signal emitted when the print operation run has finished
 *    doing everything required for printing.
 * @begin_print: Signal emitted after the user has finished changing
 *    print settings in the dialog, before the actual rendering starts.
 * @paginate: Signal emitted after the â€œbegin-printâ€� signal, but
 *    before the actual rendering starts.
 * @request_page_setup: Emitted once for every page that is printed,
 *    to give the application a chance to modify the page setup.
 * @draw_page: Signal emitted for every page that is printed.
 * @end_print: Signal emitted after all pages have been rendered.
 * @status_changed: Emitted at between the various phases of the print
 *    operation.
 * @create_custom_widget: Signal emitted when displaying the print dialog.
 * @custom_widget_apply: Signal emitted right before â€œbegin-printâ€� if
 *    you added a custom widget in the â€œcreate-custom-widgetâ€� handler.
 * @preview: Signal emitted when a preview is requested from the
 *    native dito store the format
 * of the output. The supported values are â€œPSâ€� and â€œPDFâ€�.
 */
#define GTK_PRINT_SETTINGS_OUTPUT_FILE_FORMAT  "output-file-format"

/**
 * GTK_PRINT_SETTINGS_OUTPUT_URI:
 *
 * The key used by the â€œPrint to fileâ€� printer to store the URI
 * to which the output should be written. GTK itself supports
 * only â€œfile://â€� URIs.
 */
#define GTK_PRINT_SETTINGS_OUTPUT_URI          "output-uri"

/**
 * GTK_PRINT_SETTINGS_WIN32_DRIVER_VERSION:
 *
 * The key used by the â€œPrint to fileâ€� printer to store the 32-bit Windows
 * driver version.
 */
#define GTK_PRINT_SETTINGS_WIN32_DRIVER_VERSION "win32-driver-version"

/**
 * GTK_PRINT_SETTINGS_WIN32_DRIVER_EXTRA:
 *
 * The key used by the â€œPrint to fileâ€� printer to store 32-bit Windows extra
 * driver.
 */
#define GTK_PRINT_SETTINGS_WIN32_DRIVER_EXTRA   "win32-driver-extra"

/* Helpers: */

GDK_AVAILABLE_IN_ALL
const char *         gtk_print_settings_get_printer           (GtkPrintSettings   *settings);
GDK_AVAILABLE_IN_ALL
void                  gtk_print_settings_set_printer           (GtkPrintSettings   *settings,
								const char         *printer);
GDK_AVAILABLE_IN_ALL
GtkPageOrientation    gtk_print_settings_get_orientation       (GtkPrintSettings   *settings);
GDK_AVAILABLE_IN_ALL
void                  gtk_print_settings_set_orientation       (GtkPrintSettings   *settings,
								GtkPageOrientation  orientation);
GDK_AVAILABLE_IN_ALL
GtkPaperSize *        gtk_print_settings_get_paper_size        (GtkPrintSettings   *settings);
GDK_AVAILABLE_IN_ALL
void                  gtk_print_settings_set_paper_size        (GtkPrintSettings   *settings,
								GtkPaperSize       *paper_size);
GDK_AVAILABLE_IN_ALL
double                gtk_print_settings_get_paper_width       (GtkPrintSettings   *settings,
								GtkUnit             unit);
GDK_AVAILABLE_IN_ALL
void                  gtk_print_settings_set_paper_width       (GtkPrintSettings   *settings,
								double              width,
					yleProvider))
#define GTK_IS_STYLE_PROVIDER(o)         (G_TYPE_CHECK_INSTANCE_TYPE ((o), GTK_TYPE_STYLE_PROVIDER))

/**
 * GTK_STYLE_PROVIDER_PRIORITY_FALLBACK:
 *
 * The priority used for default style information
 * that is used in the absence of themes.
 *
 * Note that this is not very useful for providing default
 * styling for custom style classes - themes are likely to
 * override styling provided at this priority with
 * catch-all `* {...}` rules.
 */
#define GTK_STYLE_PROVIDER_PRIORITY_FALLBACK      1

/**
 * GTK_STYLE_PROVIDER_PRIORITY_THEME:
 *
 * The priority used for style information provided
 * by themes.
 */
#define GTK_STYLE_PROVIDER_PRIORITY_THEME     200

/**
 * GTK_STYLE_PROVIDER_PRIORITY_SETTINGS:
 *
 * The priority used for style information provided
 * via `GtkSettings`.
 *
 * This priority is higher than %GTK_STYLE_PROVIDER_PRIORITY_THEME
 * to let settings override themes.
 */
#define GTK_STYLE_PROVIDER_PRIORITY_SETTINGS    400

/**
 * GTK_STYLE_PROVIDER_PRIORITY_APPLICATION:
 *
 * A priority that can be used when adding a `GtkStyleProvider`
 * for application-specific style information.
 */
#define GTK_STYLE_PROVIDER_PRIORITY_APPLICATION 600

/**
 * GTK_STYLE_PROVIDER_PRIORITY_USER:
 *
 * The priority used for the style information from
 * `$XDG_CONFIG_HOME/gtk-4.0/gtk.css`.
 *
 * You should not use priorities higher than this, to
 * give the user the last word.
 */
#define GTK_STYLE_PROVIDER_PRIORITY_USER        800

typedef struct _GtkStyleProvider GtkStyleProvider; /* dummy typedef */

GDK_AVAILABLE_IN_ALL
GType gtk_style_provider_get_type (void) G_GNUC_CONST;

G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkStyleProvider, g_object_unref)

GDK_AVAILABLE_IN_ALL
void gtk_style_context_add_provider_for_display    (GdkDisplay       *display,
                                                    GtkStyleProvider *provider,
                                                    guint             priority);
GDK_AVAILABLE_IN_ALL
void gtk_style_context_remove_provir does not match any item,
 *   gtk_filter_match() will always return %FALSE.
 * @GTK_FILTER_MATCH_ALL: The filter matches all items,
 *   gtk_filter_match() will alays return %TRUE.
 *
 * Describes the known strictness of a filter.
 *
 * Note that for filters where the strictness is not known,
 * %GTK_FILTER_MATCH_SOME is always an acceptable value,
 * even if a filter does match all or no items.
 */
typedef enum {
  GTK_FILTER_MATCH_SOME = 0,
  GTK_FILTER_MATCH_NONE,
  GTK_FILTER_MATCH_ALL
} GtkFilterMatch;

/**
 * GtkFilterChange:
 * @GTK_FILTER_CHANGE_DIFFERENT: The filter change cannot be
 *   described with any of the other enumeration values.
 * @GTK_FILTER_CHANGE_LESS_STRICT: The filter is less strict than
 *   it was before: All items that it used to return %TRUE for
 *   still return %TRUE, others now may, too.
 * @GTK_FILTER_CHANGE_MORE_STRICT: The filter is more strict than
 *   it was before: All items that it used to return %FALSE for
 *   still return %FALSE, others now may, too.
 *
 * Describes changes in a filter in more detail and allows objects
 * using the filter to optimize refiltering items.
 *
 * If you are writing an implementation and are not sure which
 * value to pass, %GTK_FILTER_CHANGE_DIFFERENT is always a correct
 * choice.
 */
typedef enum {
  GTK_FILTER_CHANGE_DIFFERENT = 0,
  GTK_FILTER_CHANGE_LESS_STRICT,
  GTK_FILTER_CHANGE_MORE_STRICT,
} GtkFilterChange;

#define GTK_TYPE_FILTER             (gtk_filter_get_type ())

GDK_AVAILABLE_IN_ALL
G_DECLARE_DERIVABLE_TYPE (GtkFilter, gtk_filter, GTK, FILTER, GObject)

struct _GtkFilterClass
{
  GObjectClass parent_class;

  gboolean              (* match)                               (GtkFilter              *self,
                                                                 gpointer                item);

  /* optional */
  GtkFilterMatch        (* get_strictness)                      (GtkFilter              *self);

  /* Padding for future expansion */
  void (*_gtk_reserved1) (void_BUTTON(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_MENU_BUTTON))

typedef struct _GtkMenuButton        GtkMenuButton;

/**
 * GtkMenuButtonCreatePopupFunc:
 * @menu_button: the `GtkMenuButton`
 * @user_data: User data passed to gtk_menu_button_set_create_popup_func()
 *
 * User-provided callback function to create a popup for a
 * `GtkMenuButton` on demand.
 *
 * This function is called when the popup of @menu_button is shown,
 * but none has been provided via [method@Gtk.MenuButton.set_popover]
 * or [method@Gtk.MenuButton.set_menu_model].
 */
typedef void  (*GtkMenuButtonCreatePopupFunc) (GtkMenuButton *menu_button,
                                               gpointer       user_data);

GDK_AVAILABLE_IN_ALL
GType        gtk_menu_button_get_type       (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
GtkWidget   *gtk_menu_button_new            (void);

GDK_AVAILABLE_IN_ALL
void         gtk_menu_button_set_popover    (GtkMenuButton *menu_button,
                                             GtkWidget     *popover);
GDK_AVAILABLE_IN_ALL
GtkPopover  *gtk_menu_button_get_popover    (GtkMenuButton *menu_button);

GDK_AVAILABLE_IN_ALL
void         gtk_menu_button_set_direction  (GtkMenuButton *menu_button,
                                             GtkArrowType   direction);
GDK_AVAILABLE_IN_ALL
GtkArrowType gtk_menu_button_get_direction  (GtkMenuButton *menu_button);

GDK_AVAILABLE_IN_ALL
void         gtk_menu_button_set_menu_model (GtkMenuButton *menu_button,
                                             GMenuModel    *menu_model);
GDK_AVAILABLE_IN_ALL
GMenuModel  *gtk_menu_button_get_menu_model (GtkMenuButton *menu_button);

GDK_AVAILABLE_IN_ALL
void         gtk_menu_button_set_icon_name (GtkMenuButton *menu_button,
                                            const char    *icon_name);
GDK_AVAILABLE_IN_ALL
const char * gtk_menu_button_get_icon_name (GtkMenuButton *menu_button);

GDK_AVAILABLE_IN_4_4
void         gtk_menu_button_set_always_show_arrow (GtkMefor the text view. The default implementation is to just call
 *   gtk_text_buffer_new().
 * @snapshot_layer: The snapshot_layer vfunc is called before and after the text
 *   view is drawing its own text. Applications can override this vfunc
 *   in a subclass to draw customized content underneath or above the
 *   text. In the %GTK_TEXT_VIEW_LAYER_BELOW_TEXT and %GTK_TEXT_VIEW_LAYER_ABOVE_TEXT
 *   layers the drawing is done in the buffer coordinate space.
 * @extend_selection: The class handler for the `GtkTextView::extend-selection` signal.
 * @insert_emoji: The class handler for the `GtkTextView::insert-emoji` signal.
 */
struct _GtkTextViewClass
{
  GtkWidgetClass parent_class;

  /*< public >*/

  void (* move_cursor)           (GtkTextView      *text_view,
                                  GtkMovementStep   step,
                                  int               count,
                                  gboolean          extend_selection);
  void (* set_anchor)            (GtkTextView      *text_view);
  void (* insert_at_cursor)      (GtkTextView      *text_view,
                                  const char       *str);
  void (* delete_from_cursor)    (GtkTextView      *text_view,
                                  GtkDeleteType     type,
                                  int               count);
  void (* backspace)             (GtkTextView      *text_view);
  void (* cut_clipboard)         (GtkTextView      *text_view);
  void (* copy_clipboard)        (GtkTextView      *text_view);
  void (* paste_clipboard)       (GtkTextView      *text_view);
  void (* toggle_overwrite)      (GtkTextView      *text_view);
  GtkTextBuffer * (* create_buffer) (GtkTextView   *text_view);
  void (* snapshot_layer)        (GtkTextView      *text_view,
			          GtkTextViewLayer  layer,
			          GtkSnapshot      *snapshot);
  gboolean (* extend_selection)  (GtkTextView            *text_view,
                                  GtkTextExtendSelection  granularity,
  ook_set_group_name (GtkNotebook *notebook,
                                          const char  *group_name);
GDK_AVAILABLE_IN_ALL
const char *gtk_notebook_get_group_name  (GtkNotebook *notebook);



/***********************************************************
 *            query, set current NotebookPage              *
 ***********************************************************/

GDK_AVAILABLE_IN_ALL
int        gtk_notebook_get_current_page (GtkNotebook *notebook);
GDK_AVAILABLE_IN_ALL
GtkWidget* gtk_notebook_get_nth_page     (GtkNotebook *notebook,
					  int          page_num);
GDK_AVAILABLE_IN_ALL
int        gtk_notebook_get_n_pages      (GtkNotebook *notebook);
GDK_AVAILABLE_IN_ALL
int        gtk_notebook_page_num         (GtkNotebook *notebook,
					  GtkWidget   *child);
GDK_AVAILABLE_IN_ALL
void       gtk_notebook_set_current_page (GtkNotebook *notebook,
					  int          page_num);
GDK_AVAILABLE_IN_ALL
void       gtk_notebook_next_page        (GtkNotebook *notebook);
GDK_AVAILABLE_IN_ALL
void       gtk_notebook_prev_page        (GtkNotebook *notebook);

/***********************************************************
 *            set Notebook, NotebookTab style              *
 ***********************************************************/

GDK_AVAILABLE_IN_ALL
void     gtk_notebook_set_show_border      (GtkNotebook     *notebook,
					    gboolean         show_border);
GDK_AVAILABLE_IN_ALL
gboolean gtk_notebook_get_show_border      (GtkNotebook     *notebook);
GDK_AVAILABLE_IN_ALL
void     gtk_notebook_set_show_tabs        (GtkNotebook     *notebook,
					    gboolean         show_tabs);
GDK_AVAILABLE_IN_ALL
gboolean gtk_notebook_get_show_tabs        (GtkNotebook     *notebook);
GDK_AVAILABLE_IN_ALL
void     gtk_notebook_set_tab_pos          (GtkNotebook     *notebook,
				            GtkPositionType  pos);
GDK_AVAILABLE_IN_ALL
GtkPositionType gtk_notebook_get_tab_pos   (GtkNotebook     *notebook);
GDK_AVAILABLE_IN_ALL
void     gtk_notebook_set_scrollable K_IS_DRAWING_AREA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_DRAWING_AREA))
#define GTK_DRAWING_AREA_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_DRAWING_AREA, GtkDrawingAreaClass))

typedef struct _GtkDrawingArea       GtkDrawingArea;
typedef struct _GtkDrawingAreaClass  GtkDrawingAreaClass;

/**
 * GtkDrawingAreaDrawFunc:
 * @drawing_area: the `GtkDrawingArea` to redraw
 * @cr: the context to draw to
 * @width: the actual width of the contents. This value will be at least
 *   as wide as GtkDrawingArea:width.
 * @height: the actual height of the contents. This value will be at least
 *   as wide as GtkDrawingArea:height.
 * @user_data: (closure): user data
 *
 * Whenever @drawing_area needs to redraw, this function will be called.
 *
 * This function should exclusively redraw the contents of the drawing area
 * and must not call any widget functions that cause changes.
 */
typedef void (* GtkDrawingAreaDrawFunc)  (GtkDrawingArea *drawing_area,
                                          cairo_t        *cr,
                                          int             width,
                                          int             height,
                                          gpointer        user_data);

struct _GtkDrawingArea
{
  GtkWidget widget;
};

struct _GtkDrawingAreaClass
{
  GtkWidgetClass parent_class;

  void           (* resize)         (GtkDrawingArea *area,
                                     int             width,
                                     int             height);

  /*< private >*/

  gpointer padding[8];
};


GDK_AVAILABLE_IN_ALL
GType      gtk_drawing_area_get_type (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
GtkWidget* gtk_drawing_area_new      (void);

GDK_AVAILABLE_IN_ALL
void            gtk_drawing_area_set_content_width      (GtkDrawingArea         *self,
                                                         int                     width);
GDK_AVAILABLE_IN_ALL
int             gtk_drawing_area_get_contndif

#include <gtk/gtktreelistmodel.h>
#include <gtk/gtkwidget.h>

G_BEGIN_DECLS

#define GTK_TYPE_TREE_EXPANDER         (gtk_tree_expander_get_type ())

GDK_AVAILABLE_IN_ALL
G_DECLARE_FINAL_TYPE (GtkTreeExpander, gtk_tree_expander, GTK, TREE_EXPANDER, GtkWidget)

GDK_AVAILABLE_IN_ALL
GtkWidget *             gtk_tree_expander_new                  (void);

GDK_AVAILABLE_IN_ALL
GtkWidget *             gtk_tree_expander_get_child            (GtkTreeExpander        *self);
GDK_AVAILABLE_IN_ALL
void                    gtk_tree_expander_set_child            (GtkTreeExpander        *self,
                                                                GtkWidget              *child);

GDK_AVAILABLE_IN_ALL
gpointer                gtk_tree_expander_get_item             (GtkTreeExpander        *self);
GDK_AVAILABLE_IN_ALL
GtkTreeListRow *        gtk_tree_expander_get_list_row         (GtkTreeExpander        *self);
GDK_AVAILABLE_IN_ALL
void                    gtk_tree_expander_set_list_row         (GtkTreeExpander        *self,
                                                                GtkTreeListRow         *list_row);
GDK_AVAILABLE_IN_4_10
gboolean                gtk_tree_expander_get_indent_for_depth (GtkTreeExpander        *self);
GDK_AVAILABLE_IN_4_10
void                    gtk_tree_expander_set_indent_for_depth (GtkTreeExpander        *self,
                                                                gboolean                indent_for_depth);
GDK_AVAILABLE_IN_4_6
gboolean                gtk_tree_expander_get_indent_for_icon  (GtkTreeExpander        *self);
GDK_AVAILABLE_IN_4_6
void                    gtk_tree_expander_set_indent_for_icon  (GtkTreeExpander        *self,
                                                                gboolean               indent_for_icon);
GDK_AVAILABLE_IN_4_10
gboolean                gtk_tree_expander_get_hide_expander    (GtkTreeExpander        *self);
GDK_AVAILABLE_IN_4_10
void                    gtk_tree_expander_set_hide            gpointer              user_data);

GDK_AVAILABLE_IN_4_10
GListModel *     gtk_file_dialog_select_multiple_folders_finish
                                                     (GtkFileDialog        *self,
                                                      GAsyncResult         *result,
                                                      GError              **error);


G_END_DECLS
/* gtkshortcutlabelprivate.h
 *
 * Copyright (C) 2015 Christian Hergert <christian@hergert.me>
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Library General Public License as
 *  published by the Free Software Foundation; either version 2 of the
 *  License, or (at your option) any later version.
 *
 *  This library is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *  Library General Public License for more details.
 *
 *  You should have received a copy of the GNU Library General Public
 *  License along with this library. If not, see <http://www.gnu.org/licenses/>.
 */

#pragma once

#include <gtk/gtkwidget.h>

G_BEGIN_DECLS

#define GTK_TYPE_SHORTCUT_LABEL (gtk_shortcut_label_get_type())
#define GTK_SHORTCUT_LABEL(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_SHORTCUT_LABEL, GtkShortcutLabel))
#define GTK_IS_SHORTCUT_LABEL(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_SHORTCUT_LABEL))


typedef struct _GtkShortcutLabel      GtkShortcutLabel;
typedef struct _GtkShortcutLabelClass GtkShortcutLabelClass;

GDK_AVAILABLE_IN_ALL
GType        gtk_shortcut_label_get_type        (void) G_GNUC_CONST;

GDK_AVAILABLE_IN_ALL
GtkWidget   *gtk_shortcut_label_new             (const char       *accelerator);

GDK_AVAILABLE_IN_ALL
const char *gtk_shortcut_label_get_accelerator (GtkShortcutLabel *self);

GDK_AVAILABLE_IN_ALL
void         gtk_shortcut_label_set_acce_CONST;
#define GTK_TYPE_SORTER_CHANGE (gtk_sorter_change_get_type ())

/* enumerations from "gtkspinbutton.h" */
GDK_AVAILABLE_IN_ALL GType gtk_spin_button_update_policy_get_type (void) G_GNUC_CONST;
#define GTK_TYPE_SPIN_BUTTON_UPDATE_POLICY (gtk_spin_button_update_policy_get_type ())
GDK_AVAILABLE_IN_ALL GType gtk_spin_type_get_type (void) G_GNUC_CONST;
#define GTK_TYPE_SPIN_TYPE (gtk_spin_type_get_type ())

/* enumerations from "gtkstack.h" */
GDK_AVAILABLE_IN_ALL GType gtk_stack_transition_type_get_type (void) G_GNUC_CONST;
#define GTK_TYPE_STACK_TRANSITION_TYPE (gtk_stack_transition_type_get_type ())

/* enumerations from "gtkstringfilter.h" */
GDK_AVAILABLE_IN_ALL GType gtk_string_filter_match_mode_get_type (void) G_GNUC_CONST;
#define GTK_TYPE_STRING_FILTER_MATCH_MODE (gtk_string_filter_match_mode_get_type ())

/* enumerations from "gtkstringsorter.h" */
GDK_AVAILABLE_IN_ALL GType gtk_collation_get_type (void) G_GNUC_CONST;
#define GTK_TYPE_COLLATION (gtk_collation_get_type ())

/* enumerations from "gtktextiter.h" */
GDK_AVAILABLE_IN_ALL GType gtk_text_search_flags_get_type (void) G_GNUC_CONST;
#define GTK_TYPE_TEXT_SEARCH_FLAGS (gtk_text_search_flags_get_type ())

/* enumerations from "gtktextview.h" */
GDK_AVAILABLE_IN_ALL GType gtk_text_window_type_get_type (void) G_GNUC_CONST;
#define GTK_TYPE_TEXT_WINDOW_TYPE (gtk_text_window_type_get_type ())
GDK_AVAILABLE_IN_ALL GType gtk_text_view_layer_get_type (void) G_GNUC_CONST;
#define GTK_TYPE_TEXT_VIEW_LAYER (gtk_text_view_layer_get_type ())
GDK_AVAILABLE_IN_ALL GType gtk_text_extend_selection_get_type (void) G_GNUC_CONST;
#define GTK_TYPE_TEXT_EXTEND_SELECTION (gtk_text_extend_selection_get_type ())

/* enumerations from "gtkprintoperation.h" */
GDK_AVAILABLE_IN_ALL GType gtk_print_status_get_type (void) G_GNUC_CONST;
#define GTK_TYPE_PRINT_STATUS (gtk_print_status_get_type ())
GDK_AVAILABLE_IN_ALL GType gtk_print_operation_result_get_type (void) G_GNUC_CONST;
#define GTK_TYPE_PRINT_OPERATION_RESULT (gtk_pk_cell_renderer_mode_get_type ())

/* enumerations from "gtkcellrendereraccel.h" */
GDK_AVAILABLE_IN_ALL GType gtk_cell_renderer_accel_mode_get_type (void) G_GNUC_CONST;
#define GTK_TYPE_CELL_RENDERER_ACCEL_MODE (gtk_cell_renderer_accel_mode_get_type ())

/* enumerations from "gtkdialog.h" */
GDK_AVAILABLE_IN_ALL GType gtk_dialog_flags_get_type (void) G_GNUC_CONST;
#define GTK_TYPE_DIALOG_FLAGS (gtk_dialog_flags_get_type ())
GDK_AVAILABLE_IN_ALL GType gtk_response_type_get_type (void) G_GNUC_CONST;
#define GTK_TYPE_RESPONSE_TYPE (gtk_response_type_get_type ())

/* enumerations from "gtkfilechooser.h" */
GDK_AVAILABLE_IN_ALL GType gtk_file_chooser_action_get_type (void) G_GNUC_CONST;
#define GTK_TYPE_FILE_CHOOSER_ACTION (gtk_file_chooser_action_get_type ())
GDK_AVAILABLE_IN_ALL GType gtk_file_chooser_error_get_type (void) G_GNUC_CONST;
#define GTK_TYPE_FILE_CHOOSER_ERROR (gtk_file_chooser_error_get_type ())

/* enumerations from "gtkfontchooser.h" */
GDK_AVAILABLE_IN_ALL GType gtk_font_chooser_level_get_type (void) G_GNUC_CONST;
#define GTK_TYPE_FONT_CHOOSER_LEVEL (gtk_font_chooser_level_get_type ())

/* enumerations from "gtkiconview.h" */
GDK_AVAILABLE_IN_ALL GType gtk_icon_view_drop_position_get_type (void) G_GNUC_CONST;
#define GTK_TYPE_ICON_VIEW_DROP_POSITION (gtk_icon_view_drop_position_get_type ())

/* enumerations from "gtkmessagedialog.h" */
GDK_AVAILABLE_IN_ALL GType gtk_buttons_type_get_type (void) G_GNUC_CONST;
#define GTK_TYPE_BUTTONS_TYPE (gtk_buttons_type_get_type ())

/* enumerations from "gtkstylecontext.h" */
GDK_AVAILABLE_IN_ALL GType gtk_style_context_print_flags_get_type (void) G_GNUC_CONST;
#define GTK_TYPE_STYLE_CONTEXT_PRINT_FLAGS (gtk_style_context_print_flags_get_type ())

/* enumerations from "gtktreemodel.h" */
GDK_AVAILABLE_IN_ALL GType gtk_tree_model_flags_get_type (void) G_GNUC_CONST;
#define GTK_TYPE_TREE_MODEL_FLAGS (gtk_tree_model_flags_get_type ())

/* enumerations from "gtktreeview.h" */
GDK_AVAILABLE_IN_ALL GType gtk_tree_view_d                          ...) G_GNUC_PRINTF (4, 5);
GDK_AVAILABLE_IN_ALL
void                    gtk_media_stream_error_valist           (GtkMediaStream *self,
                                                                 GQuark          domain,
                                                                 int             code,
                                                                 const char     *format,
                                                                 va_list         args) G_GNUC_PRINTF (4, 0);

G_END_DECLS

/*
 * Copyright Â© 2019 Benjamin Otte
 *
 * 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.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * 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, see <http://www.gnu.org/licenses/>.
 *
 * Authors: Benjamin Otte <otte@gnome.org>
 */

#pragma once

#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
#error "Only <gtk/gtk.h> can be included directly."
#endif

#include <gtk/gtkfilter.h>

G_BEGIN_DECLS

/**
 * GtkCustomFilterFunc:
 * @item: (type GObject): The item to be matched
 * @user_data: user data
 *
 * User function that is called to determine if the @item should be matched.
 *
 * If the filter matches the item, this function must return %TRUE. If the
 * item should be filtered out, %FALSE must be returned.
 *
 * Returns: %TRUE to keep the item around
 */
typedef gboolean (* GtkCustomFilterFunc) (gpointer item, gpointer user_data);

#define GTK_TYPE_CUSTOM_FILTER             (gtk_custom_filter_getE_FIXED_LAYOUT_CHILD (gtk_fixed_layout_child_get_type ())

/* GtkFixedLayout */

GDK_AVAILABLE_IN_ALL
G_DECLARE_FINAL_TYPE (GtkFixedLayout, gtk_fixed_layout, GTK, FIXED_LAYOUT, GtkLayoutManager)

GDK_AVAILABLE_IN_ALL
GtkLayoutManager *      gtk_fixed_layout_new    (void);

/* GtkFixedLayoutChild */

GDK_AVAILABLE_IN_ALL
G_DECLARE_FINAL_TYPE (GtkFixedLayoutChild, gtk_fixed_layout_child, GTK, FIXED_LAYOUT_CHILD, GtkLayoutChild)

GDK_AVAILABLE_IN_ALL
void            gtk_fixed_layout_child_set_transform    (GtkFixedLayoutChild *child,
                                                         GskTransform        *transform);
GDK_AVAILABLE_IN_ALL
GskTransform *  gtk_fixed_layout_child_get_transform    (GtkFixedLayoutChild *child);

G_END_DECLS
/*
 * Copyright (c) 2017 Timm BÃ¤der <mail@baedert.org>
 *
 * This program 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 program 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 program; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * Author: Timm BÃ¤der <mail@baedert.org>
 *
 */

#pragma once

#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
#error "Only <gtk/gtk.h> can be included directly."
#endif

#include "gtkwidget.h"

G_BEGIN_DECLS

#define GTK_TYPE_CENTER_BOX                 (gtk_center_box_get_type ())
#define GTK_CENTER_BOX(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_CENTER_BOX, GtkCenterBox))
#define GTK_CENTER_BOX_CLASS(klass)     ."
#endif

#include <gtk/gtkexpression.h>
#include <gtk/gtksorter.h>

G_BEGIN_DECLS

#define GTK_TYPE_STRING_SORTER             (gtk_string_sorter_get_type ())
GDK_AVAILABLE_IN_ALL
G_DECLARE_FINAL_TYPE (GtkStringSorter, gtk_string_sorter, GTK, STRING_SORTER, GtkSorter)

GDK_AVAILABLE_IN_ALL
GtkStringSorter *       gtk_string_sorter_new                   (GtkExpression          *expression);

GDK_AVAILABLE_IN_ALL
GtkExpression *         gtk_string_sorter_get_expression        (GtkStringSorter        *self);
GDK_AVAILABLE_IN_ALL
void                    gtk_string_sorter_set_expression        (GtkStringSorter        *self,
                                                                 GtkExpression          *expression);
GDK_AVAILABLE_IN_ALL
gboolean                gtk_string_sorter_get_ignore_case       (GtkStringSorter        *self);
GDK_AVAILABLE_IN_ALL
void                    gtk_string_sorter_set_ignore_case       (GtkStringSorter        *self,
                                                                 gboolean                ignore_case);

/**
 * GtkCollation:
 * @GTK_COLLATION_NONE: Don't do any collation
 * @GTK_COLLATION_UNICODE: Use [func@GLib.utf8_collate_key]
 * @GTK_COLLATION_FILENAME: Use [func@GLib.utf8_collate_key_for_filename]
 *
 * Describes how a [class@Gtk.StringSorter] turns strings into sort keys to
 * compare them.
 *
 * Note that the result of sorting will in general depend on the current locale
 * unless the mode is @GTK_COLLATION_NONE.
 *
 * Since: 4.10
 */
typedef enum
{
  GTK_COLLATION_NONE,
  GTK_COLLATION_UNICODE,
  GTK_COLLATION_FILENAME
} GtkCollation;

GDK_AVAILABLE_IN_4_10
void                    gtk_string_sorter_set_collation         (GtkStringSorter        *self,
                                                                 GtkCollation            collation);

GDK_AVAILABLE_IN_4_10
GtkCollation            gtk_string_sorter_get_collation         (GtkStringSorter        *self);

G_END_DECLS

/*
 * Copyright Â© 2018 Benjam           gtk_filter_list_model_get_pending       (GtkFilterListModel     *self);


G_END_DECLS

/* GTK - The GIMP Toolkit
 * gtklinkbutton.h - a hyperlink-enabled button
 *
 * Copyright (C) 2005 Emmanuele Bassi <ebassi@gmail.com>
 * All rights reserved.
 *
 * Based on gnome-href code by:
 * 	James Henstridge <james@daa.com.au>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public
 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
 */

#pragma once

#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
#error "Only <gtk/gtk.h> can be included directly."
#endif

#include <gtk/gtkbutton.h>

G_BEGIN_DECLS

#define GTK_TYPE_LINK_BUTTON		(gtk_link_button_get_type ())
#define GTK_LINK_BUTTON(obj)		(G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_LINK_BUTTON, GtkLinkButton))
#define GTK_IS_LINK_BUTTON(obj)		(G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_LINK_BUTTON))

typedef struct _GtkLinkButton GtkLinkButton;

GDK_AVAILABLE_IN_ALL
GType                 gtk_link_button_get_type          (void) G_GNUC_CONST;

GDK_AVAILABLE_IN_ALL
GtkWidget *           gtk_link_button_new               (const char    *uri);
GDK_AVAILABLE_IN_ALL
GtkWidget *           gtk_link_button_new_with_label    (const char    *uri,
						         const char    *label);

GDK_AVAILABLE_IN_ALL
const char *         gtk_link_button_get_uri           (GtkLinkButton *link_button);
GDK_AVAILABLE_IN_ALL
void                  gtk_link_button_set_uri _free (msg__); \
  } \
} G_STMT_END

/**
 * gtk_test_accessible_assert_state:
 * @accessible: a `GtkAccessible`
 * @state: a `GtkAccessibleRelation`
 * @...: the expected value of @state
 *
 * Checks whether a `GtkAccessible` implementation has its accessible
 * state set to the expected value, and raises an assertion if the
 * condition is not satisfied.
 */
#define gtk_test_accessible_assert_state(accessible,state,...) \
G_STMT_START { \
  GtkAccessible *__a = GTK_ACCESSIBLE (accessible); \
  GtkAccessibleState __s = (state); \
  char *value__ = gtk_test_accessible_check_state (__a, __s, __VA_ARGS__); \
  if (value__ == NULL); else { \
    char *msg__ = g_strdup_printf ("assertion failed: (" #accessible ".accessible-state(" #state ") == " # __VA_ARGS__ "): value = '%s'", value__); \
    g_assertion_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg__); \
    g_free (msg__); \
  } \
} G_STMT_END

GDK_AVAILABLE_IN_ALL
gboolean        gtk_test_accessible_has_role            (GtkAccessible         *accessible,
                                                         GtkAccessibleRole      role);
GDK_AVAILABLE_IN_ALL
gboolean        gtk_test_accessible_has_property        (GtkAccessible         *accessible,
                                                         GtkAccessibleProperty  property);
GDK_AVAILABLE_IN_ALL
gboolean        gtk_test_accessible_has_relation        (GtkAccessible         *accessible,
                                                         GtkAccessibleRelation  relation);
GDK_AVAILABLE_IN_ALL
gboolean        gtk_test_accessible_has_state           (GtkAccessible         *accessible,
                                                         GtkAccessibleState     state);

GDK_AVAILABLE_IN_ALL
char *          gtk_test_accessible_check_property      (GtkAccessible         *accessible,
                                                         GtkAccessibleProperty  property,
                                                         ...);
GDK_#define GTK_TYPE_FILE_LAUNCHER (gtk_file_launcher_get_type ())

GDK_AVAILABLE_IN_4_10
G_DECLARE_FINAL_TYPE (GtkFileLauncher, gtk_file_launcher, GTK, FILE_LAUNCHER, GObject)

GDK_AVAILABLE_IN_4_10
GtkFileLauncher * gtk_file_launcher_new                          (GFile               *file);

GDK_AVAILABLE_IN_4_10
GFile           * gtk_file_launcher_get_file                     (GtkFileLauncher     *self);
GDK_AVAILABLE_IN_4_10
void              gtk_file_launcher_set_file                     (GtkFileLauncher     *self,
                                                                  GFile               *file);
GDK_AVAILABLE_IN_4_12
gboolean          gtk_file_launcher_get_always_ask               (GtkFileLauncher     *self);
GDK_AVAILABLE_IN_4_12
void              gtk_file_launcher_set_always_ask               (GtkFileLauncher     *self,
                                                                  gboolean             always_ask);

GDK_AVAILABLE_IN_4_14
gboolean          gtk_file_launcher_get_writable                 (GtkFileLauncher     *self);
GDK_AVAILABLE_IN_4_14
void              gtk_file_launcher_set_writable                 (GtkFileLauncher     *self,
                                                                  gboolean             writable);
GDK_AVAILABLE_IN_4_10
void             gtk_file_launcher_launch                        (GtkFileLauncher     *self,
                                                                  GtkWindow           *parent,
                                                                  GCancellable        *cancellable,
                                                                  GAsyncReadyCallback  callback,
                                                                  gpointer             user_data);

GDK_AVAILABLE_IN_4_10
gboolean         gtk_file_launcher_launch_finish                 (GtkFileLauncher     *self,
                                                                  GAsyncResult        *result,
    ) G_GNUC_MALLOC;
GDK_AVAILABLE_IN_ALL
GtkRequisition *gtk_requisition_copy     (const GtkRequisition *requisition);
GDK_AVAILABLE_IN_ALL
void            gtk_requisition_free     (GtkRequisition       *requisition);

GDK_AVAILABLE_IN_ALL
gboolean     gtk_widget_in_destruction (GtkWidget *widget);

GDK_DEPRECATED_IN_4_10
GtkStyleContext * gtk_widget_get_style_context (GtkWidget *widget);

GDK_AVAILABLE_IN_ALL
void              gtk_widget_class_set_css_name (GtkWidgetClass *widget_class,
                                                 const char     *name);
GDK_AVAILABLE_IN_ALL
const char *      gtk_widget_class_get_css_name (GtkWidgetClass *widget_class);

GDK_AVAILABLE_IN_ALL
guint gtk_widget_add_tick_callback (GtkWidget       *widget,
                                    GtkTickCallback  callback,
                                    gpointer         user_data,
                                    GDestroyNotify   notify);

GDK_AVAILABLE_IN_ALL
void gtk_widget_remove_tick_callback (GtkWidget       *widget,
                                      guint            id);

/**
 * gtk_widget_class_bind_template_callback:
 * @widget_class: a `GtkWidgetClass`
 * @callback: the callback symbol
 *
 * Binds a callback function defined in a template to the @widget_class.
 *
 * This macro is a convenience wrapper around the
 * gtk_widget_class_bind_template_callback_full() function. It is not
 * supported after gtk_widget_class_set_template_scope() has been used
 * on @widget_class.
 */
#define gtk_widget_class_bind_template_callback(widget_class, callback) \
  gtk_widget_class_bind_template_callback_full (GTK_WIDGET_CLASS (widget_class), \
                                                #callback, \
                                                G_CALLBACK (callback))

/**
 * gtk_widget_class_bind_template_child:
 * @widget_class: a `GtkWidgetClass`
 * @TypeName: the type name of this widget
 * @member_name: name of the instance member in the instance struct for @data_type
 *
 *tionType     direction);
  void     (* set_focus_child)          (GtkWidget           *widget,
                                         GtkWidget           *child);

  /* keyboard navigation */
  void     (* move_focus)               (GtkWidget           *widget,
                                         GtkDirectionType     direction);
  gboolean (* keynav_failed)            (GtkWidget           *widget,
                                         GtkDirectionType     direction);

  gboolean     (* query_tooltip)      (GtkWidget  *widget,
                                       int         x,
                                       int         y,
                                       gboolean    keyboard_tooltip,
                                       GtkTooltip *tooltip);

  void         (* compute_expand)     (GtkWidget  *widget,
                                       gboolean   *hexpand_p,
                                       gboolean   *vexpand_p);

  void         (* css_changed)                 (GtkWidget            *widget,
                                                GtkCssStyleChange    *change);

  void         (* system_setting_changed)      (GtkWidget            *widget,
                                                GtkSystemSetting      settings);

  void         (* snapshot)                    (GtkWidget            *widget,
                                                GtkSnapshot          *snapshot);

  gboolean     (* contains)                    (GtkWidget *widget,
                                                double     x,
                                                double     y);

  /*< private >*/

  GtkWidgetClassPrivate *priv;

  gpointer padding[8];
};


GDK_AVAILABLE_IN_ALL
GType      gtk_widget_get_type            (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
void       gtk_widget_unparent            (GtkWidget           *widget);
GDK_DEPRECATED_IN_4_10_FOR(gtk_widget_set_visible or gtk_window_present)
void       gtk_widget_show      * @start: the start offset, in characters
   * @end: the end offset, in characters,
   * @extents (out caller-allocates): return location for the extents
   *
   * Obtains the extents of a range of text, in widget coordinates.
   *
   * Returns: true if the extents were filled in, false otherwise
   *
   * Since: 4.16
   */
  gboolean (* get_extents) (GtkAccessibleText *self,
                            unsigned int       start,
                            unsigned int       end,
                            graphene_rect_t   *extents);

  /**
   * GtkAccessibleTextInterface::get_offset:
   * @self: the accessible object
   * @point: a point in widget coordinates of @self
   * @offset: (out): return location for the text offset at @point
   *
   * Gets the text offset at a given point.
   *
   * Returns: true if the offset was set, false otherwise
   *
   * Since: 4.16
   */
  gboolean (* get_offset) (GtkAccessibleText      *self,
                           const graphene_point_t *point,
                           unsigned int           *offset);
};

GDK_AVAILABLE_IN_4_14
void gtk_accessible_text_update_caret_position (GtkAccessibleText *self);

GDK_AVAILABLE_IN_4_14
void gtk_accessible_text_update_selection_bound (GtkAccessibleText *self);

GDK_AVAILABLE_IN_4_14
void gtk_accessible_text_update_contents (GtkAccessibleText              *self,
                                          GtkAccessibleTextContentChange  change,
                                          unsigned int                    start,
                                          unsigned int                    end);

/**
 * GTK_ACCESSIBLE_ATTRIBUTE_FAMILY:
 *
 * An attribute for the font family name.
 *
 * Since: 4.14
 */
#define GTK_ACCESSIBLE_ATTRIBUTE_FAMILY                   "family-name"
/**
 * GTK_ACCESSIBLE_ATTRIBUTE_STYLE:
 *
 * An attribute for the font style.
 *
 * Possible values are:
 *
 * - [const@Gtk.ACCESSIBLE_ATTRIBUTE_STYLE_NORMAL]
 * - [const@Gtk.ACCESSIBLE_ATTRIBUTE_STYLE_OBLIQUE]
new features, so external
 * implementations of [iface@Gtk.BuilderScope] should test the flags
 * for unknown values and raise a %GTK_BUILDER_ERROR_INVALID_ATTRIBUTE error
 * when they encounter one.
 */
typedef enum { /*< prefix=GTK_BUILDER_CLOSURE >*/
  GTK_BUILDER_CLOSURE_SWAPPED = (1 << 0)
} GtkBuilderClosureFlags;

/**
 * GtkBuilderScopeInterface:
 * @get_type_from_name: Try to lookup a `GType` via the its name. See
 *   gtk_builder_get_type_from_name() for more details.
 *   The C implementation will use g_type_from_name() and if that fails try to guess the
 *   correct function name for registering the type and then use dlsym() to load it.
 *   The default implementation just tries g_type_from_name() and otherwise fails.
 * @get_type_from_function: Try to lookup a `GType` via the given function name, specified
 *   explicitly in a GtkBuilder file, like via the "type-func" attribute in the `<object>` tag.
 *   This function is very rarely used.
 *   The C implementation will use dlsym() and call the resulting function as a `GTypeFunc`.
 *   The default implementation will fail and just return %G_TYPE_INVALID.
 * @create_closure: Create a closure with the given arguments. See gtk_builder_create_closure()
 *   for more details on those.
 *   The C implementation will try to use dlsym() to locate the function name and then
 *   g_cclosure_new() to create a closure for the symbol.
 *   The default implementation just fails and returns %NULL.
 *
 * The virtual function table to implement for `GtkBuilderScope` implementations.
 * Default implementations for each function do exist, but they usually just fail,
 * so it is suggested that implementations implement all of them.
 */
struct _GtkBuilderScopeInterface
{
  /*< private >*/
  GTypeInterface g_iface;

  /*< public >*/
  GType                 (* get_type_from_name)                  (GtkBuilderScope        *self,
                                                                 GtkBuilder             *builder,
  
void       gtk_grid_set_baseline_row       (GtkGrid         *grid,
                                            int              row);
GDK_AVAILABLE_IN_ALL
int        gtk_grid_get_baseline_row       (GtkGrid         *grid);

GDK_AVAILABLE_IN_ALL
void       gtk_grid_query_child            (GtkGrid         *grid,
                                            GtkWidget       *child,
                                            int             *column,
                                            int             *row,
                                            int             *width,
                                            int             *height);

G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkGrid, g_object_unref)

G_END_DECLS

/*
 * SPDX-License-Identifier: LGPL-2.1-or-later
 *
 * 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, see <http://www.gnu.org/licenses/>.
 */

#pragma once

#include <gtk/gtklayoutmanager.h>

G_BEGIN_DECLS

#define GTK_TYPE_CENTER_LAYOUT (gtk_center_layout_get_type ())

GDK_AVAILABLE_IN_ALL
G_DECLARE_FINAL_TYPE (GtkCenterLayout, gtk_center_layout, GTK, CENTER_LAYOUT, GtkLayoutManager)

GDK_AVAILABLE_IN_ALL
GtkLayoutManager *      gtk_center_layout_new                   (void);
GDK_AVAILABLE_IN_ALL
void                    gtk_center_layout_set_orientation       (GtkCenterLayout     *self,
                                                                 GtkOrientation       orientation);CE_CAST ((obj), GTK_TYPE_TEXT_BUFFER, GtkTextBuffer))
#define GTK_TEXT_BUFFER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_TEXT_BUFFER, GtkTextBufferClass))
#define GTK_IS_TEXT_BUFFER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_TEXT_BUFFER))
#define GTK_IS_TEXT_BUFFER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_TEXT_BUFFER))
#define GTK_TEXT_BUFFER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_TEXT_BUFFER, GtkTextBufferClass))

typedef struct _GtkTextBufferPrivate GtkTextBufferPrivate;
typedef struct _GtkTextBufferClass GtkTextBufferClass;

struct _GtkTextBuffer
{
  GObject parent_instance;

  GtkTextBufferPrivate *priv;
};

/**
 * GtkTextBufferCommitNotify:
 * @buffer: the text buffer being notified
 * @flags: the type of commit notification
 * @position: the position of the text operation
 * @length: the length of the text operation in characters
 * @user_data: (closure): user data passed to the callback
 *
 * A notification callback used by [method@Gtk.TextBuffer.add_commit_notify].
 *
 * You may not modify the [class@Gtk.TextBuffer] from a
 * [callback@Gtk.TextBufferCommitNotify] callback and that is enforced
 * by the [class@Gtk.TextBuffer] API.
 *
 * [callback@Gtk.TextBufferCommitNotify] may be used to be notified about
 * changes to the underlying buffer right before-or-after the changes are
 * committed to the underlying B-Tree. This is useful if you want to observe
 * changes to the buffer without other signal handlers potentially modifying
 * state on the way to the default signal handler.
 *
 * When @flags is `GTK_TEXT_BUFFER_NOTIFY_BEFORE_INSERT`, `position` is set to
 * the offset in characters from the start of the buffer where the insertion
 * will occur. `length` is set to the number of characters to be inserted.  You
 * may not yet retrieve the text until it has been inserted. You may access the
 * text from `GTK_TEXT_BUFFER_NOTIFY_AFTER_INSERT` using
 * [method@Gtk.TextBuffer.get_slice].
 *
INVALID: An â€œinvalidâ€� state; set when a widget
 *   is showing an error. Value type: [enum@AccessibleInvalidState]
 * @GTK_ACCESSIBLE_STATE_PRESSED: A â€œpressedâ€� state; indicates the current
 *   state of a [class@ToggleButton]. Value type: [enum@AccessibleTristate]
 *   enumeration
 * @GTK_ACCESSIBLE_STATE_SELECTED: A â€œselectedâ€� state; set when a widget
 *   is selected. Value type: boolean or undefined
 *
 * The possible accessible states of a [iface@Accessible].
 */
/**
  * GTK_ACCESSIBLE_STATE_VISITED:
  *
  * Indicates that a widget with the GTK_ACCESSIBLE_ROLE_LINK has been visited.
  * Value type: boolean.
  *
  * Since: 4.12
  */
typedef enum {
  GTK_ACCESSIBLE_STATE_BUSY,
  GTK_ACCESSIBLE_STATE_CHECKED,
  GTK_ACCESSIBLE_STATE_DISABLED,
  GTK_ACCESSIBLE_STATE_EXPANDED,
  GTK_ACCESSIBLE_STATE_HIDDEN,
  GTK_ACCESSIBLE_STATE_INVALID,
  GTK_ACCESSIBLE_STATE_PRESSED,
  GTK_ACCESSIBLE_STATE_SELECTED,
  GTK_ACCESSIBLE_STATE_VISITED GDK_AVAILABLE_ENUMERATOR_IN_4_12
} GtkAccessibleState;

/**
 * GTK_ACCESSIBLE_VALUE_UNDEFINED:
 *
 * An undefined value. The accessible attribute is either unset, or its
 * value is undefined.
 */
#define GTK_ACCESSIBLE_VALUE_UNDEFINED  (-1)

/**
 * GtkAccessibleProperty:
 * @GTK_ACCESSIBLE_PROPERTY_AUTOCOMPLETE: Indicates whether inputting text
 *    could trigger display of one or more predictions of the user's intended
 *    value for a combobox, searchbox, or textbox and specifies how predictions
 *    would be presented if they were made. Value type: [enum@AccessibleAutocomplete]
 * @GTK_ACCESSIBLE_PROPERTY_DESCRIPTION: Defines a string value that describes
 *    or annotates the current element. Value type: string
 * @GTK_ACCESSIBLE_PROPERTY_HAS_POPUP: Indicates the availability and type of
 *    interactive popup element, such as menu or dialog, that can be triggered
 *    by an element.
 * @GTK_ACCESSIBLE_PROPERTY_KEY_SHORTCUTS: Indicates keyboard shortcuts that an
 *    author has implemented to activate or give focRTCUT_SCOPE_GLOBAL: Shortcuts are handled by
 *   the root widget.
 *
 * Describes where [class@Shortcut]s added to a
 * [class@ShortcutController] get handled.
 */
typedef enum
{
  GTK_SHORTCUT_SCOPE_LOCAL,
  GTK_SHORTCUT_SCOPE_MANAGED,
  GTK_SHORTCUT_SCOPE_GLOBAL
} GtkShortcutScope;

/**
 * GtkPickFlags:
 * @GTK_PICK_DEFAULT: The default behavior, include widgets that are receiving events
 * @GTK_PICK_INSENSITIVE: Include widgets that are insensitive
 * @GTK_PICK_NON_TARGETABLE: Include widgets that are marked as non-targetable. See [property@Widget:can-target]
 *
 * Flags that influence the behavior of [method@Widget.pick].
 */
typedef enum {
  GTK_PICK_DEFAULT        = 0,
  GTK_PICK_INSENSITIVE    = 1 << 0,
  GTK_PICK_NON_TARGETABLE = 1 << 1
} GtkPickFlags;

/**
 * GtkConstraintRelation:
 * @GTK_CONSTRAINT_RELATION_EQ: Equal
 * @GTK_CONSTRAINT_RELATION_LE: Less than, or equal
 * @GTK_CONSTRAINT_RELATION_GE: Greater than, or equal
 *
 * The relation between two terms of a constraint.
 */
typedef enum {
  GTK_CONSTRAINT_RELATION_LE = -1,
  GTK_CONSTRAINT_RELATION_EQ = 0,
  GTK_CONSTRAINT_RELATION_GE = 1
} GtkConstraintRelation;

/**
 * GtkConstraintStrength:
 * @GTK_CONSTRAINT_STRENGTH_REQUIRED: The constraint is required towards solving the layout
 * @GTK_CONSTRAINT_STRENGTH_STRONG: A strong constraint
 * @GTK_CONSTRAINT_STRENGTH_MEDIUM: A medium constraint
 * @GTK_CONSTRAINT_STRENGTH_WEAK: A weak constraint
 *
 * The strength of a constraint, expressed as a symbolic constant.
 *
 * The strength of a [class@Constraint] can be expressed with any positive
 * integer; the values of this enumeration can be used for readability.
 */
typedef enum {
  GTK_CONSTRAINT_STRENGTH_REQUIRED = 1001001000,
  GTK_CONSTRAINT_STRENGTH_STRONG   = 1000000000,
  GTK_CONSTRAINT_STRENGTH_MEDIUM   = 1000,
  GTK_CONSTRAINT_STRENGTH_WEAK     = 1
} GtkConstraintStrength;

/**
 * GtkConstraintAttribute:
 * @GTK_CONSTRAINT_ATTRIBUTE_NONE: No attribute, used for constant
 *   relations
 * @Gicular when using %PANGO_WRAP_WORD_CHAR as the
 *   wrap mode.
 *
 * Options for selecting a different wrap mode for natural size
 * requests.
 *
 * See for example the [property@Gtk.Label:natural-wrap-mode] property.
 *
 * Since: 4.6
 */
typedef enum
{
  GTK_NATURAL_WRAP_INHERIT,
  GTK_NATURAL_WRAP_NONE,
  GTK_NATURAL_WRAP_WORD
} GtkNaturalWrapMode;

/**
 * GtkScrollStep:
 * @GTK_SCROLL_STEPS: Scroll in steps.
 * @GTK_SCROLL_PAGES: Scroll by pages.
 * @GTK_SCROLL_ENDS: Scroll to ends.
 * @GTK_SCROLL_HORIZONTAL_STEPS: Scroll in horizontal steps.
 * @GTK_SCROLL_HORIZONTAL_PAGES: Scroll by horizontal pages.
 * @GTK_SCROLL_HORIZONTAL_ENDS: Scroll to the horizontal ends.
 *
 * Passed as argument to various keybinding signals.
 */
typedef enum
{
  GTK_SCROLL_STEPS,
  GTK_SCROLL_PAGES,
  GTK_SCROLL_ENDS,
  GTK_SCROLL_HORIZONTAL_STEPS,
  GTK_SCROLL_HORIZONTAL_PAGES,
  GTK_SCROLL_HORIZONTAL_ENDS
} GtkScrollStep;

/**
 * GtkOrientation:
 * @GTK_ORIENTATION_HORIZONTAL: The element is in horizontal orientation.
 * @GTK_ORIENTATION_VERTICAL: The element is in vertical orientation.
 *
 * Represents the orientation of widgets and other objects.
 *
 * Typical examples are [class@Box] or [class@GesturePan].
 */
typedef enum
{
  GTK_ORIENTATION_HORIZONTAL,
  GTK_ORIENTATION_VERTICAL
} GtkOrientation;

/**
 * GtkOverflow:
 * @GTK_OVERFLOW_VISIBLE: No change is applied. Content is drawn at the specified
 *   position.
 * @GTK_OVERFLOW_HIDDEN: Content is clipped to the bounds of the area. Content
 *   outside the area is not drawn and cannot be interacted with.
 *
 * Defines how content overflowing a given area should be handled.
 *
 * This is used in [method@Gtk.Widget.set_overflow]. The
 * [property@Gtk.Widget:overflow] property is modeled after the
 * CSS overflow property, but implements it only partially.
 */
typedef enum
{
  GTK_OVERFLOW_VISIBLE,
  GTK_OVERFLOW_HIDDEN
} GtkOverflow;

/**
 * GtkPackType:
 * @GTK_PACK_START: The child is packed into the start of the widget
 * @GTin)            (GtkIMContext   *context);
  void     (*focus_out)           (GtkIMContext   *context);
  void     (*reset)               (GtkIMContext   *context);
  void     (*set_cursor_location) (GtkIMContext   *context,
				   GdkRectangle   *area);
  void     (*set_use_preedit)     (GtkIMContext   *context,
				   gboolean        use_preedit);
  void     (*set_surrounding)     (GtkIMContext   *context,
				   const char     *text,
				   int             len,
				   int             cursor_index);
  gboolean (*get_surrounding)     (GtkIMContext   *context,
				   char          **text,
				   int            *cursor_index);
  void     (*set_surrounding_with_selection)
                                  (GtkIMContext   *context,
				   const char     *text,
				   int             len,
				   int             cursor_index,
                                   int             anchor_index);
  gboolean (*get_surrounding_with_selection)
                                  (GtkIMContext   *context,
				   char          **text,
				   int            *cursor_index,
                                   int            *anchor_index);

  /*< private >*/
  void (* activate_osk) (GtkIMContext *context);
  gboolean (* activate_osk_with_event) (GtkIMContext *context,
                                        GdkEvent     *event);

  /* Padding for future expansion */
  void (*_gtk_reserved2) (void);
  void (*_gtk_reserved3) (void);
  void (*_gtk_reserved4) (void);
};

GDK_AVAILABLE_IN_ALL
GType    gtk_im_context_get_type            (void) G_GNUC_CONST;

GDK_AVAILABLE_IN_ALL
void     gtk_im_context_set_client_widget   (GtkIMContext       *context,
                                             GtkWidget          *widget);
GDK_AVAILABLE_IN_ALL
void     gtk_im_context_get_preedit_string  (GtkIMContext       *context,
					     char              **str,
					     PangoAttrList     **attrs,
					     int                *cursor_pos);
GDK_AVAILABLE_IN_ALL
gboolean gtk_im_context_filter_keypress   .gtk.org/pub/gtk/.
 */

#pragma once

#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
#error "Only <gtk/gtk.h> can be included directly."
#endif

#include <gdk/gdk.h>

G_BEGIN_DECLS

typedef struct _GtkAdjustment          GtkAdjustment;
typedef struct _GtkATContext           GtkATContext;
typedef struct _GtkBitset              GtkBitset;
typedef struct _GtkBuilder             GtkBuilder;
typedef struct _GtkBuilderScope        GtkBuilderScope;

/**
 * GtkCssStyleChange:
 *
 * A CSS style change.
 */
typedef struct _GtkCssStyleChange      GtkCssStyleChange;
typedef struct _GtkEventController     GtkEventController;
typedef struct _GtkGesture             GtkGesture;
typedef struct _GtkLayoutManager       GtkLayoutManager;
typedef struct _GtkListItem            GtkListItem;
typedef struct _GtkListItemFactory     GtkListItemFactory;
typedef struct _GtkNative              GtkNative;
typedef struct _GtkRequisition	       GtkRequisition;
typedef struct _GtkRoot  	       GtkRoot;
typedef struct _GtkScrollInfo  	       GtkScrollInfo;
typedef struct _GtkSettings            GtkSettings;
typedef struct _GtkShortcut            GtkShortcut;
typedef struct _GtkShortcutAction      GtkShortcutAction;
typedef struct _GtkShortcutTrigger     GtkShortcutTrigger;
typedef GdkSnapshot                    GtkSnapshot;
typedef struct _GtkStyleContext        GtkStyleContext;
typedef struct _GtkTooltip             GtkTooltip;
typedef struct _GtkWidget              GtkWidget;
typedef struct _GtkWindow              GtkWindow;

/**
 * GTK_INVALID_LIST_POSITION:
 *
 * The value used to refer to a guaranteed invalid position
 * in a `GListModel`.
 *
 * This value may be returned from some functions, others may
 * accept it as input. Its interpretation may differ for different
 * functions.
 *
 * Refer to each function's documentation for if this value is
 * allowed and what it does.
 */
#define GTK_INVALID_LIST_POSITION ((guint) 0xffffffff)

G_END_DECLS

/*
 * Copyright Â© 2022 Benjam
#pragma once

#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
#error "Only <gtk/gtk.h> can be included directly."
#endif

#include <gdk/gdk.h>
#include <gtk/gtkeventcontroller.h>
#include <gtk/gtkimcontext.h>

G_BEGIN_DECLS

#define GTK_TYPE_EVENT_CONTROLLER_KEY         (gtk_event_controller_key_get_type ())
#define GTK_EVENT_CONTROLLER_KEY(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), GTK_TYPE_EVENT_CONTROLLER_KEY, GtkEventControllerKey))
#define GTK_EVENT_CONTROLLER_KEY_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST ((k), GTK_TYPE_EVENT_CONTROLLER_KEY, GtkEventControllerKeyClass))
#define GTK_IS_EVENT_CONTROLLER_KEY(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), GTK_TYPE_EVENT_CONTROLLER_KEY))
#define GTK_IS_EVENT_CONTROLLER_KEY_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), GTK_TYPE_EVENT_CONTROLLER_KEY))
#define GTK_EVENT_CONTROLLER_KEY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GTK_TYPE_EVENT_CONTROLLER_KEY, GtkEventControllerKeyClass))

typedef struct _GtkEventControllerKey GtkEventControllerKey;
typedef struct _GtkEventControllerKeyClass GtkEventControllerKeyClass;

GDK_AVAILABLE_IN_ALL
GType               gtk_event_controller_key_get_type  (void) G_GNUC_CONST;

GDK_AVAILABLE_IN_ALL
GtkEventController *gtk_event_controller_key_new (void);

GDK_AVAILABLE_IN_ALL
void                gtk_event_controller_key_set_im_context (GtkEventControllerKey *controller,
                                                             GtkIMContext          *im_context);
GDK_AVAILABLE_IN_ALL
GtkIMContext *      gtk_event_controller_key_get_im_context (GtkEventControllerKey *controller);

GDK_AVAILABLE_IN_ALL
gboolean            gtk_event_controller_key_forward        (GtkEventControllerKey *controller,
                                                             GtkWidget             *widget);
GDK_AVAILABLE_IN_ALL
guint               gtk_event_controller_key_get_group      (GtkEventControllerKey *controller);


G_END_DECLS

/* GTK - The GIMP Toolkit
 * Copyright (C) 2014 Red HaTK_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;

struct _GtkApplication
{
  GApplication parent_instance;
};

/**
 * GtkApplicationClass:
 * @parent_class: The parent class.
 * @window_added: Signal emitted when a `GtkWindow` is added to
 *    application through gtk_application_add_window().
 * @window_removed: Signal emitted when a `GtkWindow` is removed from
 *    application, either as a side-effect of being destroyed or
 *    explicitly through gtk_application_remove_window().
 */
struct _GtkApplicationClass
{
  GApplicationClass parent_class;

  /*< public >*/

  void (*window_added)   (GtkApplication *application,
                          GtkWindow      *window);
  void (*window_removed) (GtkApplication *application,
                          GtkWindow      *window);

  /*< private >*/
  gpointer padding[8];
};

GDK_AVAILABLE_IN_ALL
GType            gtk_application_get_type      (void) G_GNUC_CONST;

GDK_AVAILABLE_IN_ALL
GtkApplication * gtk_application_new           (const char        *application_id,
                                                GApplicationFlags  flags);

GDK_AVAILABLE_IN_ALL
void             gtk_application_add_window    (GtkApplication    *application,
                                                GtkWindow         *window);

GDK_AVAILABLE_IN_ALL
void             gtk_application_remove_window (GtkApplication    *application,
                                                GtkWindow         *window);
GDK_AVAILABLE_IN_ALL
GList *          gtk_application_get_windows   (GtkApplication    *application);

GDK_AVAILABLE_IN_ALL
GMenuModel *     gtk_application_get_menubar   (GtkApplication    *application);
GDK_AVAILABLE_IN_ALL
void             gtk_application_set_menu      *adjustment);
GDK_AVAILABLE_IN_ALL
GtkAdjustment *gtk_list_box_get_adjustment               (GtkListBox                    *box);

typedef void (* GtkListBoxForeachFunc) (GtkListBox      *box,
                                        GtkListBoxRow   *row,
                                        gpointer         user_data);

GDK_AVAILABLE_IN_ALL
void           gtk_list_box_selected_foreach             (GtkListBox                    *box,
                                                          GtkListBoxForeachFunc          func,
                                                          gpointer                       data);
GDK_AVAILABLE_IN_ALL
GList         *gtk_list_box_get_selected_rows            (GtkListBox                    *box);
GDK_AVAILABLE_IN_ALL
void           gtk_list_box_unselect_row                 (GtkListBox                    *box,
                                                          GtkListBoxRow                 *row);
GDK_AVAILABLE_IN_ALL
void           gtk_list_box_select_all                   (GtkListBox                    *box);
GDK_AVAILABLE_IN_ALL
void           gtk_list_box_unselect_all                 (GtkListBox                    *box);

GDK_AVAILABLE_IN_ALL
void           gtk_list_box_set_selection_mode           (GtkListBox                    *box,
                                                          GtkSelectionMode               mode);
GDK_AVAILABLE_IN_ALL
GtkSelectionMode gtk_list_box_get_selection_mode         (GtkListBox                    *box);
GDK_AVAILABLE_IN_ALL
void           gtk_list_box_set_filter_func              (GtkListBox                    *box,
                                                          GtkListBoxFilterFunc           filter_func,
                                                          gpointer                       user_data,
                                                          GDestroyNotify                 destroy);
GDK_AVAILABLE_IN_ALL
void           gtk_list_box_set_headere GTK_IS_COLUMN_VIEW_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), GTK_TYPE_COLUMN_VIEW))
#define GTK_COLUMN_VIEW_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GTK_TYPE_COLUMN_VIEW, GtkColumnViewClass))


typedef struct _GtkColumnView GtkColumnView;
typedef struct _GtkColumnViewClass GtkColumnViewClass;
/* forward declaration */
typedef struct _GtkColumnViewColumn GtkColumnViewColumn;

GDK_AVAILABLE_IN_ALL
GType           gtk_column_view_get_type                        (void) G_GNUC_CONST;

GDK_AVAILABLE_IN_ALL
GtkWidget *     gtk_column_view_new                             (GtkSelectionModel      *model);

GDK_AVAILABLE_IN_ALL
GListModel *    gtk_column_view_get_columns                     (GtkColumnView          *self);
GDK_AVAILABLE_IN_ALL
void            gtk_column_view_append_column                   (GtkColumnView          *self,
                                                                 GtkColumnViewColumn    *column);
GDK_AVAILABLE_IN_ALL
void            gtk_column_view_remove_column                   (GtkColumnView          *self,
                                                                 GtkColumnViewColumn    *column);
GDK_AVAILABLE_IN_ALL
void            gtk_column_view_insert_column                   (GtkColumnView          *self,
                                                                 guint                   position,
                                                                 GtkColumnViewColumn    *column);

GDK_AVAILABLE_IN_ALL
GtkSelectionModel *
                gtk_column_view_get_model                       (GtkColumnView          *self);
GDK_AVAILABLE_IN_ALL
void            gtk_column_view_set_model                       (GtkColumnView          *self,
                                                                 GtkSelectionModel      *model);

GDK_AVAILABLE_IN_ALL
gboolean        gtk_column_view_get_show_row_separators         (GtkColumnView          *self);
GDK_AVAILABLE_IN_ALL
void            gtk_column_view_set_showinside the matched range.
 * @GTK_TEXT_SEARCH_CASE_INSENSITIVE: The text will be matched regardless of
 * what case it is in.
 *
 * Flags affecting how a search is done.
 *
 * If neither %GTK_TEXT_SEARCH_VISIBLE_ONLY nor %GTK_TEXT_SEARCH_TEXT_ONLY are
 * enabled, the match must be exact; the special 0xFFFC character will match
 * embedded paintables or child widgets.
 */
typedef enum {
  GTK_TEXT_SEARCH_VISIBLE_ONLY     = 1 << 0,
  GTK_TEXT_SEARCH_TEXT_ONLY        = 1 << 1,
  GTK_TEXT_SEARCH_CASE_INSENSITIVE = 1 << 2
  /* Possible future plans: SEARCH_REGEXP */
} GtkTextSearchFlags;

/*
 * Iter: represents a location in the text. Becomes invalid if the
 * characters/pixmaps/widgets (indexable objects) in the text buffer
 * are changed.
 */

typedef struct _GtkTextBuffer GtkTextBuffer;

#define GTK_TYPE_TEXT_ITER     (gtk_text_iter_get_type ())

struct _GtkTextIter {
  /* GtkTextIter is an opaque datatype; ignore all these fields.
   * Initialize the iter with gtk_text_buffer_get_iter_*
   * functions
   */
  /*< private >*/
  gpointer dummy1;
  gpointer dummy2;
  int dummy3;
  int dummy4;
  int dummy5;
  int dummy6;
  int dummy7;
  int dummy8;
  gpointer dummy9;
  gpointer dummy10;
  int dummy11;
  int dummy12;
  /* padding */
  int dummy13;
  gpointer dummy14;
};


/* This is primarily intended for language bindings that want to avoid
   a "buffer" argument to text insertions, deletions, etc. */
GDK_AVAILABLE_IN_ALL
GtkTextBuffer *gtk_text_iter_get_buffer (const GtkTextIter *iter);

/*
 * Life cycle
 */

GDK_AVAILABLE_IN_ALL
GtkTextIter *gtk_text_iter_copy     (const GtkTextIter *iter);
GDK_AVAILABLE_IN_ALL
void         gtk_text_iter_free     (GtkTextIter       *iter);
GDK_AVAILABLE_IN_ALL
void         gtk_text_iter_assign   (GtkTextIter       *iter,
                                     const GtkTextIter *other);

GDK_AVAILABLE_IN_ALL
GType        gtk_text_iter_get_type (void) G_GNUC_CONST;

/*
 * Convert to different kinds of index
 */

GDK_AVAILABLE_IN_ALL
int                        gboolean           propagate);
GDK_AVAILABLE_IN_ALL
gboolean       gtk_scrolled_window_get_propagate_natural_height (GtkScrolledWindow *scrolled_window);

GDK_AVAILABLE_IN_ALL
void           gtk_scrolled_window_set_child        (GtkScrolledWindow *scrolled_window,
                                                     GtkWidget         *child);
GDK_AVAILABLE_IN_ALL
GtkWidget     *gtk_scrolled_window_get_child        (GtkScrolledWindow *scrolled_window);

G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkScrolledWindow, g_object_unref)

G_END_DECLS


/*
 * Copyright Â© 2023 Benjamin Otte
 *
 * 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.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * 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, see <http://www.gnu.org/licenses/>.
 *
 * Authors: Benjamin Otte <otte@gnome.org>
 */

#pragma once

#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
#error "Only <gtk/gtk.h> can be included directly."
#endif

#include <gtk/gtktypes.h>
#include <gtk/gtklistitem.h>

G_BEGIN_DECLS

#define GTK_TYPE_COLUMN_VIEW_CELL (gtk_column_view_cell_get_type ())
GDK_AVAILABLE_IN_4_12
GDK_DECLARE_INTERNAL_TYPE(GtkColumnViewCell, gtk_column_view_cell, GTK, COLUMN_VIEW_CELL, GtkListItem)

GDK_AVAILABLE_IN_4_12
gpointer        gtk_column_view_cell_get_item                   (GtkColumnViewCell      *self);
GDK_AVAILABLE_IN_4_12
guint           gtk_column_view_cell_get_position               (GtkColumnViewCell      *self) G_GNUC_PURE;
GDK_AVAILABLE_IN_4_12
gboolePE_ICON_PAINTABLE, GtkIconPaintable))
#define GTK_IS_ICON_PAINTABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_ICON_PAINTABLE))

#define GTK_TYPE_ICON_THEME        (gtk_icon_theme_get_type ())
#define GTK_ICON_THEME(obj)        (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_ICON_THEME, GtkIconTheme))
#define GTK_IS_ICON_THEME(obj)     (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_ICON_THEME))

typedef struct _GtkIconPaintable  GtkIconPaintable;
typedef struct _GtkIconTheme      GtkIconTheme;

/**
 * GtkIconLookupFlags:
 * @GTK_ICON_LOOKUP_FORCE_REGULAR: Try to always load regular icons, even
 *   when symbolic icon names are given
 * @GTK_ICON_LOOKUP_FORCE_SYMBOLIC: Try to always load symbolic icons, even
 *   when regular icon names are given
 * @GTK_ICON_LOOKUP_PRELOAD: Starts loading the texture in the background
 *   so it is ready when later needed.
 *
 * Used to specify options for gtk_icon_theme_lookup_icon().
 */
typedef enum
{
  GTK_ICON_LOOKUP_FORCE_REGULAR  = 1 << 0,
  GTK_ICON_LOOKUP_FORCE_SYMBOLIC = 1 << 1,
  GTK_ICON_LOOKUP_PRELOAD        = 1 << 2,
} GtkIconLookupFlags;

/**
 * GTK_ICON_THEME_ERROR:
 *
 * The `GQuark` used for `GtkIconThemeError` errors.
 */
#define GTK_ICON_THEME_ERROR gtk_icon_theme_error_quark ()

/**
 * GtkIconThemeError:
 * @GTK_ICON_THEME_NOT_FOUND: The icon specified does not exist in the theme
 * @GTK_ICON_THEME_FAILED: An unspecified error occurred.
 *
 * Error codes for `GtkIconTheme` operations.
 **/
typedef enum {
  GTK_ICON_THEME_NOT_FOUND,
  GTK_ICON_THEME_FAILED
} GtkIconThemeError;

GDK_AVAILABLE_IN_ALL
GQuark gtk_icon_theme_error_quark (void);

GDK_AVAILABLE_IN_ALL
GType            gtk_icon_theme_get_type             (void) G_GNUC_CONST;

GDK_AVAILABLE_IN_ALL
GtkIconTheme    *gtk_icon_theme_new                  (void);
GDK_AVAILABLE_IN_ALL
GtkIconTheme    *gtk_icon_theme_get_for_display      (GdkDisplay                  *display);

GDK_AVAILABLE_IN_ALL
GdkDisplay *     gtk_icon_theme_get_display          (GtkIcon_ENTRY))
#define GTK_ENTRY_GET_CLASS(obj)        (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_ENTRY, GtkEntryClass))

/**
 * GtkEntryIconPosition:
 * @GTK_ENTRY_ICON_PRIMARY: At the beginning of the entry (depending on the text direction).
 * @GTK_ENTRY_ICON_SECONDARY: At the end of the entry (depending on the text direction).
 *
 * Specifies the side of the entry at which an icon is placed.
 */
typedef enum
{
  GTK_ENTRY_ICON_PRIMARY,
  GTK_ENTRY_ICON_SECONDARY
} GtkEntryIconPosition;

typedef struct _GtkEntry              GtkEntry;
typedef struct _GtkEntryClass         GtkEntryClass;

struct _GtkEntry
{
  /*< private >*/
  GtkWidget  parent_instance;
};

/**
 * GtkEntryClass:
 * @parent_class: The parent class.
 * @activate: Class handler for the `GtkEntry::activate` signal. The default
 *   implementation activates the gtk.activate-default action.
 *
 * Class structure for `GtkEntry`. All virtual functions have a default
 * implementation. Derived classes may set the virtual function pointers for the
 * signal handlers to %NULL, but must keep @get_text_area_size and
 * @get_frame_size non-%NULL; either use the default implementation, or provide
 * a custom one.
 */
struct _GtkEntryClass
{
  GtkWidgetClass parent_class;

  /* Action signals
   */
  void (* activate)           (GtkEntry             *entry);

  /*< private >*/

  gpointer padding[8];
};

GDK_AVAILABLE_IN_ALL
GType      gtk_entry_get_type       		(void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
GtkWidget* gtk_entry_new            		(void);
GDK_AVAILABLE_IN_ALL
GtkWidget* gtk_entry_new_with_buffer            (GtkEntryBuffer *buffer);

GDK_AVAILABLE_IN_ALL
GtkEntryBuffer* gtk_entry_get_buffer            (GtkEntry       *entry);
GDK_AVAILABLE_IN_ALL
void       gtk_entry_set_buffer                 (GtkEntry       *entry,
                                                 GtkEntryBuffer *buffer);

GDK_AVAILABLE_IN_ALL
void       gtk_entry_set_visibility 		(GtkEntry      *entry,
						 gboolean       visible);
GDKe 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, see <http://www.gnu.org/licenses/>.
 *
 * Author(s): Carlos Garnacho <carlosg@gnome.org>
 */
#pragma once

#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
#error "Only <gtk/gtk.h> can be included directly."
#endif

#include <gtk/gtkwidget.h>
#include <gtk/gtkgesturesingle.h>

G_BEGIN_DECLS

#define GTK_TYPE_GESTURE_DRAG         (gtk_gesture_drag_get_type ())
#define GTK_GESTURE_DRAG(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), GTK_TYPE_GESTURE_DRAG, GtkGestureDrag))
#define GTK_GESTURE_DRAG_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST ((k), GTK_TYPE_GESTURE_DRAG, GtkGestureDragClass))
#define GTK_IS_GESTURE_DRAG(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), GTK_TYPE_GESTURE_DRAG))
#define GTK_IS_GESTURE_DRAG_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), GTK_TYPE_GESTURE_DRAG))
#define GTK_GESTURE_DRAG_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GTK_TYPE_GESTURE_DRAG, GtkGestureDragClass))

typedef struct _GtkGestureDrag GtkGestureDrag;
typedef struct _GtkGestureDragClass GtkGestureDragClass;

GDK_AVAILABLE_IN_ALL
GType        gtk_gesture_drag_get_type          (void) G_GNUC_CONST;

GDK_AVAILABLE_IN_ALL
GtkGesture * gtk_gesture_drag_new               (void);

GDK_AVAILABLE_IN_ALL
gboolean     gtk_gesture_drag_get_start_point   (GtkGestureDrag *gesture,
                                                 double         *x,
                                                 double         *y);
GDK_AVAILABLE_IN_ALL
gboolean     gtk_gesture_drag_get_offset        (GtkGestureDrag *gesture,
                                                 double         *x,
                                                 double         *y);

G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkGestureDrag, g_object_unref)

G_END_DECLS

/* GTK - The GIMP Toolkit
 * Copyright (C) 2012, One Laptop Per Child.
 * Copyright (C) 2014, Red Hay."
#endif

#include <glib-object.h>
#include <gtk/gtktypes.h>
#include <gtk/gtkenums.h>

G_BEGIN_DECLS

#define GTK_TYPE_ACCESSIBLE (gtk_accessible_get_type())

GDK_AVAILABLE_IN_4_10
G_DECLARE_INTERFACE (GtkAccessible, gtk_accessible, GTK, ACCESSIBLE, GObject)

/**
 * GtkAccessiblePlatformState:
 * @GTK_ACCESSIBLE_PLATFORM_STATE_FOCUSABLE: whether the accessible can be focused
 * @GTK_ACCESSIBLE_PLATFORM_STATE_FOCUSED: whether the accessible has focus
 * @GTK_ACCESSIBLE_PLATFORM_STATE_ACTIVE: whether the accessible is active
 *
 * The various platform states which can be queried
 * using [method@Gtk.Accessible.get_platform_state].
 *
 * Since: 4.10
 */
typedef enum {
  GTK_ACCESSIBLE_PLATFORM_STATE_FOCUSABLE,
  GTK_ACCESSIBLE_PLATFORM_STATE_FOCUSED,
  GTK_ACCESSIBLE_PLATFORM_STATE_ACTIVE
} GtkAccessiblePlatformState;

/**
 * GtkAccessibleInterface:
 * @get_at_context: retrieve the platform-specific accessibility context
 *   for the accessible implementation
 * @get_platform_state: retrieve the accessible state
 *
 * The common interface for accessible objects.
 *
 * Since: 4.10
 */
struct _GtkAccessibleInterface
{
  GTypeInterface g_iface;

  /**
   * GtkAccessibleInterface::get_at_context:
   * @self: an accessible object
   *
   * Retrieves the platform-specific accessibility context for the
   * accessible implementation.
   *
   * Returns: (transfer full) (nullable): the accessibility context
   *
   * Since: 4.10
   */
  GtkATContext * (* get_at_context) (GtkAccessible *self);

  /**
   * GtkAccessibleInterface::get_platform_state:
   * @self: an accessible object
   * @state: the state to query
   *
   * Checks if the given @state applies to the accessible object.
   *
   * Returns: true if the @state is set, and false otherwise
   *
   * Since: 4.10
   */
  gboolean (* get_platform_state) (GtkAccessible              *self,
                                   GtkAccessiblePlatformState  state);

  /**
   * GtkAccessibleInterface::get_accessible_parent:
   *            GtkWidget              *child);
GDK_AVAILABLE_IN_ALL
GtkWidget *     gtk_drag_icon_get_child                         (GtkDragIcon            *self);

GDK_AVAILABLE_IN_ALL
void            gtk_drag_icon_set_from_paintable (GdkDrag      *drag,
                                                  GdkPaintable *paintable,
                                                  int           hot_x,
                                                  int           hot_y);

GDK_AVAILABLE_IN_ALL
GtkWidget *     gtk_drag_icon_create_widget_for_value           (const GValue           *value);

G_END_DECLS


/* 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, see <http://www.gnu.org/licenses/>.
 */

/*
 * 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/.
 */

#pragma once

#define __GTK_H_INSIDE__

#include <gtk/css/gtkcss.h>
#include <gdk/gdk.h>
#include <gsk/gsk.h>

#include <gtk/gtkaboutdialog.h>
#include <gtk/gtkaccelgroup.h>
#include <gtk/gtkaccessible.h>
#include <gtk/gtkaccessiblerange.h>
#include <gtk/gtkaccessibletext.h>
#include <gtk/gtkactionable.h>
#include <gtk/gtkactionbar.h>
#include <gtk/gtkadjustment.h>
#iDK_AVAILABLE_IN_ALL
G_DECLARE_INTERFACE (GtkShortcutManager, gtk_shortcut_manager, GTK, SHORTCUT_MANAGER, GtkWidget)

/**
 * GtkShortcutManagerInterface:
 * @add_controller: Add a `GtkShortcutController` to be managed.
 * @remove_controller: Remove a `GtkShortcutController` that had previously
 *   been added
 *
 * The list of functions that can be implemented for the `GtkShortcutManager`
 * interface.
 *
 * Note that no function is mandatory to implement, the default implementation
 * will work fine.
 */
struct _GtkShortcutManagerInterface
{
  /*< private >*/
  GTypeInterface g_iface;

  /*< public >*/
  void                  (* add_controller)              (GtkShortcutManager           *self,
                                                         GtkShortcutController        *controller);
  void                  (* remove_controller)           (GtkShortcutManager           *self,
                                                         GtkShortcutController        *controller);
};


G_END_DECLS

/*
 * Copyright Â© 2020 Red Hat, Inc.
 *
 * 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.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * 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, see <http://www.gnu.org/licenses/>.
 *
 * Authors: Matthias Clasen <mclasen@redhat.com>
 */

#pragma once


#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
#error "Only <gtk/gtk.h> can be included directly."
#endif

#include <gio/gio.h>
/* for GDK_AVAILABLE_IN_ALL */
#include <gdk/gdk.h>


G_BEGconst GValue             *value);
GDK_AVAILABLE_IN_4_4
GskRenderNode *         gsk_value_dup_render_node               (const GValue             *value);

G_DEFINE_AUTOPTR_CLEANUP_FUNC(GskRenderNode, gsk_render_node_unref)

G_END_DECLS

/*
 * Copyright Â© 2019 Benjamin Otte
 *
 * 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.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * 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, see <http://www.gnu.org/licenses/>.
 *
 * Authors: Benjamin Otte <otte@gnome.org>
 */


#pragma once

#if !defined (__GSK_H_INSIDE__) && !defined (GTK_COMPILATION)
#error "Only <gsk/gsk.h> can be included directly."
#endif

#include <gsk/gskenums.h>
#include <gsk/gsktypes.h>

G_BEGIN_DECLS

#define GSK_TYPE_TRANSFORM (gsk_transform_get_type ())

GDK_AVAILABLE_IN_ALL
GType                   gsk_transform_get_type                  (void) G_GNUC_CONST;

GDK_AVAILABLE_IN_ALL
GskTransform *          gsk_transform_ref                       (GskTransform                   *self);
GDK_AVAILABLE_IN_ALL
void                    gsk_transform_unref                     (GskTransform                   *self);

GDK_AVAILABLE_IN_ALL
void                    gsk_transform_print                     (GskTransform                   *self,
                                                                 GString                        *string);
GDK_AVAILABLE_IN_ALL
char *                  gsk_transform_to_string                 (GskTransform                   *self);
GDK_AVAILABLE_IN_ALL
gboole          (GdkTexture               *texture,
                                                                 const graphene_rect_t    *bounds,
                                                                 GskScalingFilter          filter);
GDK_AVAILABLE_IN_4_10
GdkTexture *            gsk_texture_scale_node_get_texture      (const GskRenderNode      *node) G_GNUC_PURE;
GDK_AVAILABLE_IN_4_10
GskScalingFilter        gsk_texture_scale_node_get_filter       (const GskRenderNode      *node) G_GNUC_PURE;

GDK_AVAILABLE_IN_ALL
GType                   gsk_linear_gradient_node_get_type           (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
GskRenderNode *         gsk_linear_gradient_node_new                (const graphene_rect_t    *bounds,
                                                                     const graphene_point_t   *start,
                                                                     const graphene_point_t   *end,
                                                                     const GskColorStop       *color_stops,
                                                                     gsize                     n_color_stops);
GDK_AVAILABLE_IN_ALL
const graphene_point_t * gsk_linear_gradient_node_get_start         (const GskRenderNode      *node) G_GNUC_PURE;
GDK_AVAILABLE_IN_ALL
const graphene_point_t * gsk_linear_gradient_node_get_end           (const GskRenderNode      *node) G_GNUC_PURE;
GDK_AVAILABLE_IN_ALL
gsize                    gsk_linear_gradient_node_get_n_color_stops (const GskRenderNode      *node) G_GNUC_PURE;
GDK_AVAILABLE_IN_ALL
const GskColorStop *     gsk_linear_gradient_node_get_color_stops   (const GskRenderNode      *node,
                                                                     gsize                    *n_stops);

GDK_AVAILABLE_IN_ALL
GType                   gsk_repeating_linear_gradient_node_get_type (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
GskRenderNode *         gsk_repeating_linear_gradient_node_new      (          *self,
                                                                 GskPathForeachFlags     flags,
                                                                 GskPathForeachFunc      func,
                                                                 gpointer                user_data);

G_DEFINE_AUTOPTR_CLEANUP_FUNC(GskPath, gsk_path_unref)

G_END_DECLS
/*
 * Copyright Â© 2020 Benjamin Otte
 *
 * 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.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * 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, see <http://www.gnu.org/licenses/>.
 *
 * Authors: Benjamin Otte <otte@gnome.org>
 */

#pragma once

#if !defined (__GSK_H_INSIDE__) && !defined (GTK_COMPILATION)
#error "Only <gsk/gsk.h> can be included directly."
#endif


#include <gsk/gskpath.h>
#include <gsk/gskpathpoint.h>

G_BEGIN_DECLS

#define GSK_TYPE_PATH_MEASURE (gsk_path_measure_get_type ())

GDK_AVAILABLE_IN_4_14
GType                   gsk_path_measure_get_type               (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_4_14
GskPathMeasure *        gsk_path_measure_new                    (GskPath                *path);
GDK_AVAILABLE_IN_4_14
GskPathMeasure *        gsk_path_measure_new_with_tolerance     (GskPath                *path,
                                                                 float                   tolerance);

GDK_AVAILABLE_IN_4_14
GskPathMeasure *        gsk_path_measure_ref                    (GskPathMeasure         *self);
GDK_AVAILABLE_IN_4_14
void  N_IGNORE_DEPRECATIONS

G_BEGIN_DECLS

#define GSK_TYPE_SHADER_ARGS_BUILDER    (gsk_shader_args_builder_get_type ())

/**
 * GskShaderArgsBuilder:
 *
 * An object to build the uniforms data for a `GskGLShader`.
 */
typedef struct _GskGLShader GskGLShader GDK_DEPRECATED_TYPE_IN_4_16_FOR(GtkGLArea);
typedef struct _GskShaderArgsBuilder GskShaderArgsBuilder GDK_DEPRECATED_TYPE_IN_4_16_FOR(GtkGLArea);

#define GSK_TYPE_GL_SHADER (gsk_gl_shader_get_type ())

GDK_DEPRECATED_IN_4_16_FOR(GtkGLArea)
G_DECLARE_FINAL_TYPE (GskGLShader, gsk_gl_shader, GSK, GL_SHADER, GObject)

GDK_DEPRECATED_IN_4_16_FOR(GtkGLArea)
GskGLShader *    gsk_gl_shader_new_from_bytes          (GBytes           *sourcecode);
GDK_DEPRECATED_IN_4_16_FOR(GtkGLArea)
GskGLShader *    gsk_gl_shader_new_from_resource       (const char       *resource_path);
GDK_DEPRECATED_IN_4_16_FOR(GtkGLArea)
gboolean         gsk_gl_shader_compile                 (GskGLShader      *shader,
                                                        GskRenderer      *renderer,
                                                        GError          **error);
GDK_DEPRECATED_IN_4_16_FOR(GtkGLArea)
GBytes *         gsk_gl_shader_get_source              (GskGLShader      *shader);
GDK_DEPRECATED_IN_4_16_FOR(GtkGLArea)
const char *     gsk_gl_shader_get_resource            (GskGLShader      *shader);
GDK_DEPRECATED_IN_4_16_FOR(GtkGLArea)
int              gsk_gl_shader_get_n_textures          (GskGLShader      *shader);
GDK_DEPRECATED_IN_4_16_FOR(GtkGLArea)
int              gsk_gl_shader_get_n_uniforms          (GskGLShader      *shader);
GDK_DEPRECATED_IN_4_16_FOR(GtkGLArea)
const char *     gsk_gl_shader_get_uniform_name        (GskGLShader      *shader,
                                                        int               idx);
GDK_DEPRECATED_IN_4_16_FOR(GtkGLArea)
int              gsk_gl_shader_find_uniform_by_name    (GskGLShader      *shader,
                                                        const char       *name);
GDKSettings *gtk_page_setup_unix_dialog_get_print_settings (GtkPageSetupUnixDialog *dialog);

G_END_DECLS

/* GtkPrintUnixDialog
 * Copyright (C) 2006 John (J5) Palmieri <johnp@redhat.com>
 *
 * 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, see <http://www.gnu.org/licenses/>.
 */

#pragma once

#if !defined (__GTK_UNIX_PRINT_H_INSIDE__) && !defined (GTK_COMPILATION)
#error "Only <gtk/gtkunixprint.h> can be included directly."
#endif

#include <gtk/gtk.h>
#include <gtk/print/gtkprinter.h>
#include <gtk/print/gtkprintjob.h>

G_BEGIN_DECLS

#define GTK_TYPE_PRINT_UNIX_DIALOG                  (gtk_print_unix_dialog_get_type ())
#define GTK_PRINT_UNIX_DIALOG(obj)                  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_PRINT_UNIX_DIALOG, GtkPrintUnixDialog))
#define GTK_IS_PRINT_UNIX_DIALOG(obj)               (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_PRINT_UNIX_DIALOG))


typedef struct _GtkPrintUnixDialog GtkPrintUnixDialog;


GDK_AVAILABLE_IN_ALL
GType                gtk_print_unix_dialog_get_type                (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
GtkWidget *          gtk_print_unix_dialog_new                     (const char *title,
                                                                    GtkWindow   *parent);

GDK_AVA