Structures

The following structures are available globally.

ATContext Class

  • GtkATContext is an abstract class provided by GTK to communicate to platform-specific assistive technologies API.

    Each platform supported by GTK implements a GtkATContext subclass, and is responsible for updating the accessible state in response to state changes in GtkAccessible.

    The ATContextRef type acts as a lightweight Swift reference to an underlying GtkATContext instance. It exposes methods that can operate on this data type through ATContextProtocol conformance. Use ATContextRef only as an unowned reference to an existing GtkATContext instance.

    See more

    Declaration

    Swift

    public struct ATContextRef : ATContextProtocol, GWeakCapturing

AboutDialog Class

  • The GtkAboutDialog offers a simple way to display information about a program.

    The shown information includes the programs’ logo, name, copyright, website and license. It is also possible to give credits to the authors, documenters, translators and artists who have worked on the program.

    An about dialog is typically opened when the user selects the About option from the Help menu. All parts of the dialog are optional.

    An example GtkAboutDialog

    About dialogs often contain links and email addresses. GtkAboutDialog displays these as clickable links. By default, it calls [funcGtk.show_uri] when a user clicks one. The behaviour can be overridden with the [signalGtk.AboutDialog::activate-link] signal.

    To specify a person with an email address, use a string like Edgar Allan Poe <edgarpoe.com>. To specify a website with a title, use a string like GTK team https://www.gtk.org.

    To make constructing a GtkAboutDialog as convenient as possible, you can use the function [funcGtk.show_about_dialog] which constructs and shows a dialog and keeps it around so that it can be shown again.

    Note that GTK sets a default title of _("About %s") on the dialog window (where s is replaced by the name of the application, but in order to ensure proper translation of the title, applications should set the title property explicitly when constructing a GtkAboutDialog, as shown in the following example:

    GFile *logo_file = g_file_new_for_path ("./logo.png");
    GdkTexture *example_logo = gdk_texture_new_from_file (logo_file, NULL);
    g_object_unref (logo_file);
    
    gtk_show_about_dialog (NULL,
                           "program-name", "ExampleCode",
                           "logo", example_logo,
                           "title", `_("About ExampleCode")`,
                           NULL);
    

    CSS nodes

    GtkAboutDialog has a single CSS node with the name window and style class .aboutdialog.

    The AboutDialogRef type acts as a lightweight Swift reference to an underlying GtkAboutDialog instance. It exposes methods that can operate on this data type through AboutDialogProtocol conformance. Use AboutDialogRef only as an unowned reference to an existing GtkAboutDialog instance.

    See more

    Declaration

    Swift

    public struct AboutDialogRef : AboutDialogProtocol, GWeakCapturing

ActionBar Class

  • GtkActionBar is designed to present contextual actions.

    An example GtkActionBar

    It is expected to be displayed below the content and expand horizontally to fill the area.

    It allows placing children at the start or the end. In addition, it contains an internal centered box which is centered with respect to the full width of the box, even if the children at either side take up different amounts of space.

    CSS nodes

    actionbar
    ╰── revealer
        ╰── box
            ├── box.start
               ╰── [start children]
            ├── [center widget]
            ╰── box.end
                ╰── [end children]
    

    A GtkActionBar‘s CSS node is called actionbar. It contains a revealer subnode, which contains a box subnode, which contains two box subnodes at the start and end of the action bar, with start and `end style classes respectively, as well as a center node that represents the center child.

    Each of the boxes contains children packed for that side.

    The ActionBarRef type acts as a lightweight Swift reference to an underlying GtkActionBar instance. It exposes methods that can operate on this data type through ActionBarProtocol conformance. Use ActionBarRef only as an unowned reference to an existing GtkActionBar instance.

    See more

    Declaration

    Swift

    public struct ActionBarRef : ActionBarProtocol, GWeakCapturing

ActivateAction Class

  • A GtkShortcutAction that calls gtk_widget_activate().

    The ActivateActionRef type acts as a lightweight Swift reference to an underlying GtkActivateAction instance. It exposes methods that can operate on this data type through ActivateActionProtocol conformance. Use ActivateActionRef only as an unowned reference to an existing GtkActivateAction instance.

    See more

    Declaration

    Swift

    public struct ActivateActionRef : ActivateActionProtocol, GWeakCapturing

Adjustment Class

  • GtkAdjustment is a model for a numeric value.

    The `GtkAdjustment has an associated lower and upper bound. It also contains step and page increments, and a page size.

    Adjustments are used within several GTK widgets, including [classGtk.SpinButton], [classGtk.Viewport], [classGtk.Scrollbar] and [classGtk.Scale].

    The GtkAdjustment object does not update the value itself. Instead it is left up to the owner of the GtkAdjustment to control the value.

    The AdjustmentRef type acts as a lightweight Swift reference to an underlying GtkAdjustment instance. It exposes methods that can operate on this data type through AdjustmentProtocol conformance. Use AdjustmentRef only as an unowned reference to an existing GtkAdjustment instance.

    See more

    Declaration

    Swift

    public struct AdjustmentRef : AdjustmentProtocol, GWeakCapturing

AlternativeTrigger Class

  • A GtkShortcutTrigger that combines two triggers.

    The GtkAlternativeTrigger triggers when either of two trigger.

    This can be cascaded to combine more than two triggers.

    The AlternativeTriggerRef type acts as a lightweight Swift reference to an underlying GtkAlternativeTrigger instance. It exposes methods that can operate on this data type through AlternativeTriggerProtocol conformance. Use AlternativeTriggerRef only as an unowned reference to an existing GtkAlternativeTrigger instance.

    See more

    Declaration

    Swift

    public struct AlternativeTriggerRef : AlternativeTriggerProtocol, GWeakCapturing

AnyFilter Class

  • GtkAnyFilter matches an item when at least one of its filters matches.

    To add filters to a GtkAnyFilter, use [methodGtk.MultiFilter.append].

    The AnyFilterRef type acts as a lightweight Swift reference to an underlying GtkAnyFilter instance. It exposes methods that can operate on this data type through AnyFilterProtocol conformance. Use AnyFilterRef only as an unowned reference to an existing GtkAnyFilter instance.

    See more

    Declaration

    Swift

    public struct AnyFilterRef : AnyFilterProtocol, GWeakCapturing

AppChooserButton Class

  • The GtkAppChooserButton lets the user select an application.

    An example GtkAppChooserButton

    Initially, a GtkAppChooserButton selects the first application in its list, which will either be the most-recently used application or, if [propertyGtk.AppChooserButton:show-default-item] is true, the default application.

    The list of applications shown in a GtkAppChooserButton includes the recommended applications for the given content type. When [propertyGtk.AppChooserButton:show-default-item] is set, the default application is also included. To let the user chooser other applications, you can set the [propertyGtk.AppChooserButton:show-dialog-item] property, which allows to open a full [classGtk.AppChooserDialog].

    It is possible to add custom items to the list, using [methodGtk.AppChooserButton.append_custom_item]. These items cause the [signalGtk.AppChooserButton::custom-item-activated] signal to be emitted when they are selected.

    To track changes in the selected application, use the [signalGtk.AppChooserButton::changed] signal.

    CSS nodes

    GtkAppChooserButton has a single CSS node with the name “appchooserbutton”.

    The AppChooserButtonRef type acts as a lightweight Swift reference to an underlying GtkAppChooserButton instance. It exposes methods that can operate on this data type through AppChooserButtonProtocol conformance. Use AppChooserButtonRef only as an unowned reference to an existing GtkAppChooserButton instance.

    See more

    Declaration

    Swift

    public struct AppChooserButtonRef : AppChooserButtonProtocol, GWeakCapturing

AppChooserDialog Class

  • GtkAppChooserDialog shows a GtkAppChooserWidget inside a GtkDialog.

    An example GtkAppChooserDialog

    Note that GtkAppChooserDialog does not have any interesting methods of its own. Instead, you should get the embedded GtkAppChooserWidget using [methodGtk.AppChooserDialog.get_widget] and call its methods if the generic [ifaceGtk.AppChooser] interface is not sufficient for your needs.

    To set the heading that is shown above the GtkAppChooserWidget, use [methodGtk.AppChooserDialog.set_heading].

    The AppChooserDialogRef type acts as a lightweight Swift reference to an underlying GtkAppChooserDialog instance. It exposes methods that can operate on this data type through AppChooserDialogProtocol conformance. Use AppChooserDialogRef only as an unowned reference to an existing GtkAppChooserDialog instance.

    See more

    Declaration

    Swift

    public struct AppChooserDialogRef : AppChooserDialogProtocol, GWeakCapturing

AppChooserWidget Class

  • GtkAppChooserWidget is a widget for selecting applications.

    It is the main building block for [classGtk.AppChooserDialog]. Most applications only need to use the latter; but you can use this widget as part of a larger widget if you have special needs.

    GtkAppChooserWidget offers detailed control over what applications are shown, using the [propertyGtk.AppChooserWidget:show-default], [propertyGtk.AppChooserWidget:show-recommended], [propertyGtk.AppChooserWidget:show-fallback], [propertyGtk.AppChooserWidget:show-other] and [propertyGtk.AppChooserWidget:show-all] properties. See the [ifaceGtk.AppChooser] documentation for more information about these groups of applications.

    To keep track of the selected application, use the [signalGtk.AppChooserWidget::application-selected] and [signalGtk.AppChooserWidget::application-activated] signals.

    CSS nodes

    GtkAppChooserWidget has a single CSS node with name appchooser.

    The AppChooserWidgetRef type acts as a lightweight Swift reference to an underlying GtkAppChooserWidget instance. It exposes methods that can operate on this data type through AppChooserWidgetProtocol conformance. Use AppChooserWidgetRef only as an unowned reference to an existing GtkAppChooserWidget instance.

    See more

    Declaration

    Swift

    public struct AppChooserWidgetRef : AppChooserWidgetProtocol, GWeakCapturing

Application Class

  • GtkApplication is a high-level API for writing applications.

    It supports many aspects of writing a GTK application in a convenient fashion, without enforcing a one-size-fits-all model.

    Currently, GtkApplication handles GTK initialization, application uniqueness, session management, provides some basic scriptability and desktop shell integration by exporting actions and menus and manages a list of toplevel windows whose life-cycle is automatically tied to the life-cycle of your application.

    While GtkApplication works fine with plain [classGtk.Window]s, it is recommended to use it together with [classGtk.ApplicationWindow].

    Automatic resources

    GtkApplication will automatically load menus from the GtkBuilder resource located at “gtk/menus.ui”, relative to the application’s resource base path (see g_application_set_resource_base_path()). The menu with the ID “menubar” is taken as the application’s menubar. Additional menus (most interesting submenus) can be named and accessed via [methodGtk.Application.get_menu_by_id] which allows for dynamic population of a part of the menu structure.

    It is also possible to provide the menubar manually using [methodGtk.Application.set_menubar].

    GtkApplication will also automatically setup an icon search path for the default icon theme by appending “icons” to the resource base path. This allows your application to easily store its icons as resources. See [methodGtk.IconTheme.add_resource_path] for more information.

    If there is a resource located at “gtk/help-overlay.ui” which defines a [classGtk.ShortcutsWindow] with ID “help_overlay” then GtkApplication associates an instance of this shortcuts window with each [classGtk.ApplicationWindow] and sets up the keyboard accelerator <kbd>Control</kbd>+<kbd>?</kbd> to open it. To create a menu item that displays the shortcuts window, associate the item with the action win.show-help-overlay.

    A simple application

    A simple example is available in the GTK source code repository

    GtkApplication optionally registers with a session manager of the users session (if you set the [propertyGtk.Application:register-session] property) and offers various functionality related to the session life-cycle.

    An application can block various ways to end the session with the [methodGtk.Application.inhibit] function. Typical use cases for this kind of inhibiting are long-running, uninterruptible operations, such as burning a CD or performing a disk backup. The session manager may not honor the inhibitor, but it can be expected to inform the user about the negative consequences of ending the session while inhibitors are present.

    See Also

    HowDoI: Using GtkApplication, Getting Started with GTK: Basics

    The ApplicationRef type acts as a lightweight Swift reference to an underlying GtkApplication instance. It exposes methods that can operate on this data type through ApplicationProtocol conformance. Use ApplicationRef only as an unowned reference to an existing GtkApplication instance.

    See more

    Declaration

    Swift

    public struct ApplicationRef : ApplicationProtocol, GWeakCapturing

ApplicationWindow Class

  • GtkApplicationWindow is a GtkWindow subclass that integrates with GtkApplication.

    Notably, GtkApplicationWindow can handle an application menubar.

    This class implements the GActionGroup and GActionMap interfaces, to let you add window-specific actions that will be exported by the associated [classGtk.Application], together with its application-wide actions. Window-specific actions are prefixed with the “win.” prefix and application-wide actions are prefixed with the “app.” prefix. Actions must be addressed with the prefixed name when referring to them from a GMenuModel.

    Note that widgets that are placed inside a GtkApplicationWindow can also activate these actions, if they implement the [ifaceGtk.Actionable] interface.

    The settings [propertyGtk.Settings:gtk-shell-shows-app-menu] and [propertyGtk.Settings:gtk-shell-shows-menubar] tell GTK whether the desktop environment is showing the application menu and menubar models outside the application as part of the desktop shell. For instance, on OS X, both menus will be displayed remotely; on Windows neither will be.

    If the desktop environment does not display the menubar, then GtkApplicationWindow will automatically show a menubar for it. This behaviour can be overridden with the [propertyGtk.ApplicationWindow:show-menubar] property. If the desktop environment does not display the application menu, then it will automatically be included in the menubar or in the windows client-side decorations.

    See [classGtk.PopoverMenu] for information about the XML language used by GtkBuilder for menu models.

    See also: [methodGtk.Application.set_menubar].

    A GtkApplicationWindow with a menubar

    The code sample below shows how to set up a GtkApplicationWindow with a menu bar defined on the [classGtk.Application]:

    GtkApplication *app = gtk_application_new ("org.gtk.test", 0);
    
    GtkBuilder *builder = gtk_builder_new_from_string (
        "&lt;interface&gt;"
        "  &lt;menu id='menubar'&gt;"
        "    &lt;submenu&gt;"
        "      &lt;attribute name='label' translatable='yes'&gt;_Edit&lt;/attribute&gt;"
        "      &lt;item&gt;"
        "        &lt;attribute name='label' translatable='yes'&gt;_Copy&lt;/attribute&gt;"
        "        &lt;attribute name='action'&gt;win.copy&lt;/attribute&gt;"
        "      &lt;/item&gt;"
        "      &lt;item&gt;"
        "        &lt;attribute name='label' translatable='yes'&gt;_Paste&lt;/attribute&gt;"
        "        &lt;attribute name='action'&gt;win.paste&lt;/attribute&gt;"
        "      &lt;/item&gt;"
        "    &lt;/submenu&gt;"
        "  &lt;/menu&gt;"
        "&lt;/interface&gt;",
        -1);
    
    GMenuModel *menubar = G_MENU_MODEL (gtk_builder_get_object (builder, "menubar"));
    gtk_application_set_menubar (GTK_APPLICATION (app), menubar);
    g_object_unref (builder);
    
    // ...
    
    GtkWidget *window = gtk_application_window_new (app);
    

    The ApplicationWindowRef type acts as a lightweight Swift reference to an underlying GtkApplicationWindow instance. It exposes methods that can operate on this data type through ApplicationWindowProtocol conformance. Use ApplicationWindowRef only as an unowned reference to an existing GtkApplicationWindow instance.

    See more

    Declaration

    Swift

    public struct ApplicationWindowRef : ApplicationWindowProtocol, GWeakCapturing

AspectFrame Class

  • GtkAspectFrame preserves the aspect ratio of its child.

    The frame can respect the aspect ratio of the child widget, or use its own aspect ratio.

    CSS nodes

    GtkAspectFrame uses a CSS node with name frame.

    The AspectFrameRef type acts as a lightweight Swift reference to an underlying GtkAspectFrame instance. It exposes methods that can operate on this data type through AspectFrameProtocol conformance. Use AspectFrameRef only as an unowned reference to an existing GtkAspectFrame instance.

    See more

    Declaration

    Swift

    public struct AspectFrameRef : AspectFrameProtocol, GWeakCapturing

Assistant Class

  • GtkAssistant is used to represent a complex as a series of steps.

    An example GtkAssistant

    Each step consists of one or more pages. GtkAssistant guides the user through the pages, and controls the page flow to collect the data needed for the operation.

    GtkAssistant handles which buttons to show and to make sensitive based on page sequence knowledge and the [enumGtk.AssistantPageType] of each page in addition to state information like the completed and committed page statuses.

    If you have a case that doesn’t quite fit in GtkAssistants way of handling buttons, you can use the GTK_ASSISTANT_PAGE_CUSTOM page type and handle buttons yourself.

    GtkAssistant maintains a GtkAssistantPage object for each added child, which holds additional per-child properties. You obtain the GtkAssistantPage for a child with [methodGtk.Assistant.get_page].

    GtkAssistant as GtkBuildable

    The GtkAssistant implementation of the GtkBuildable interface exposes the action_area as internal children with the name “action_area”.

    To add pages to an assistant in GtkBuilder, simply add it as a child to the GtkAssistant object. If you need to set per-object properties, create a GtkAssistantPage object explicitly, and set the child widget as a property on it.

    CSS nodes

    GtkAssistant has a single CSS node with the name window and style class .assistant.

    The AssistantRef type acts as a lightweight Swift reference to an underlying GtkAssistant instance. It exposes methods that can operate on this data type through AssistantProtocol conformance. Use AssistantRef only as an unowned reference to an existing GtkAssistant instance.

    See more

    Declaration

    Swift

    public struct AssistantRef : AssistantProtocol, GWeakCapturing

AssistantPage Class

  • GtkAssistantPage is an auxiliary object used by `GtkAssistant.

    The AssistantPageRef type acts as a lightweight Swift reference to an underlying GtkAssistantPage instance. It exposes methods that can operate on this data type through AssistantPageProtocol conformance. Use AssistantPageRef only as an unowned reference to an existing GtkAssistantPage instance.

    See more

    Declaration

    Swift

    public struct AssistantPageRef : AssistantPageProtocol, GWeakCapturing

BinLayout Class

  • GtkBinLayout is a GtkLayoutManager subclass useful for create “bins” of widgets.

    GtkBinLayout will stack each child of a widget on top of each other, using the [propertyGtk.Widget:hexpand], [propertyGtk.Widget:vexpand], [propertyGtk.Widget:halign], and [propertyGtk.Widget:valign] properties of each child to determine where they should be positioned.

    The BinLayoutRef type acts as a lightweight Swift reference to an underlying GtkBinLayout instance. It exposes methods that can operate on this data type through BinLayoutProtocol conformance. Use BinLayoutRef only as an unowned reference to an existing GtkBinLayout instance.

    See more

    Declaration

    Swift

    public struct BinLayoutRef : BinLayoutProtocol, GWeakCapturing

ATContextClass Record

  • The ATContextClassRef type acts as a lightweight Swift reference to an underlying GtkATContextClass instance. It exposes methods that can operate on this data type through ATContextClassProtocol conformance. Use ATContextClassRef only as an unowned reference to an existing GtkATContextClass instance.

    See more

    Declaration

    Swift

    public struct ATContextClassRef : ATContextClassProtocol

AccessibleInterface Record

ActionableInterface Record

  • The interface vtable for GtkActionable.

    The ActionableInterfaceRef type acts as a lightweight Swift reference to an underlying GtkActionableInterface instance. It exposes methods that can operate on this data type through ActionableInterfaceProtocol conformance. Use ActionableInterfaceRef only as an unowned reference to an existing GtkActionableInterface instance.

    See more

    Declaration

    Swift

    public struct ActionableInterfaceRef : ActionableInterfaceProtocol

ActivateActionClass Record

AdjustmentClass Record

AlternativeTriggerClass Record

AnyFilterClass Record

  • The AnyFilterClassRef type acts as a lightweight Swift reference to an underlying GtkAnyFilterClass instance. It exposes methods that can operate on this data type through AnyFilterClassProtocol conformance. Use AnyFilterClassRef only as an unowned reference to an existing GtkAnyFilterClass instance.

    See more

    Declaration

    Swift

    public struct AnyFilterClassRef : AnyFilterClassProtocol

ApplicationClass Record

ApplicationWindowClass Record

BinLayoutClass Record

  • The BinLayoutClassRef type acts as a lightweight Swift reference to an underlying GtkBinLayoutClass instance. It exposes methods that can operate on this data type through BinLayoutClassProtocol conformance. Use BinLayoutClassRef only as an unowned reference to an existing GtkBinLayoutClass instance.

    See more

    Declaration

    Swift

    public struct BinLayoutClassRef : BinLayoutClassProtocol

Accessible Interface

  • GtkAccessible is an interface for describing UI elements for Assistive Technologies.

    Every accessible implementation has:

    • a “role”, represented by a value of the [enumGtk.AccessibleRole] enumeration
    • an “attribute”, represented by a set of [enumGtk.AccessibleState], [enumGtk.AccessibleProperty] and [enumGtk.AccessibleRelation] values

    The role cannot be changed after instantiating a GtkAccessible implementation.

    The attributes are updated every time a UI element’s state changes in a way that should be reflected by assistive technologies. For instance, if a GtkWidget visibility changes, the GTK_ACCESSIBLE_STATE_HIDDEN state will also change to reflect the [propertyGtk.Widget:visible] property.

    The AccessibleRef type acts as a lightweight Swift reference to an underlying GtkAccessible instance. It exposes methods that can operate on this data type through AccessibleProtocol conformance. Use AccessibleRef only as an unowned reference to an existing GtkAccessible instance.

    See more

    Declaration

    Swift

    public struct AccessibleRef : AccessibleProtocol

Actionable Interface

  • The GtkActionable interface provides a convenient way of asscociating widgets with actions.

    It primarily consists of two properties: [propertyGtk.Actionable:action-name] and [propertyGtk.Actionable:action-target]. There are also some convenience APIs for setting these properties.

    The action will be looked up in action groups that are found among the widgets ancestors. Most commonly, these will be the actions with the “win.” or “app.” prefix that are associated with the GtkApplicationWindow or GtkApplication, but other action groups that are added with [methodGtk.Widget.insert_action_group] will be consulted as well.

    The ActionableRef type acts as a lightweight Swift reference to an underlying GtkActionable instance. It exposes methods that can operate on this data type through ActionableProtocol conformance. Use ActionableRef only as an unowned reference to an existing GtkActionable instance.

    See more

    Declaration

    Swift

    public struct ActionableRef : ActionableProtocol, GWeakCapturing

AppChooser Interface

  • GtkAppChooser is an interface for widgets which allow the user to choose an application.

    The main objects that implement this interface are [classGtk.AppChooserWidget], [classGtk.AppChooserDialog] and [classGtk.AppChooserButton].

    Applications are represented by GIO GAppInfo objects here. GIO has a concept of recommended and fallback applications for a given content type. Recommended applications are those that claim to handle the content type itself, while fallback also includes applications that handle a more generic content type. GIO also knows the default and last-used application for a given content type. The GtkAppChooserWidget provides detailed control over whether the shown list of applications should include default, recommended or fallback applications.

    To obtain the application that has been selected in a GtkAppChooser, use [methodGtk.AppChooser.get_app_info].

    The AppChooserRef type acts as a lightweight Swift reference to an underlying GtkAppChooser instance. It exposes methods that can operate on this data type through AppChooserProtocol conformance. Use AppChooserRef only as an unowned reference to an existing GtkAppChooser instance.

    See more

    Declaration

    Swift

    public struct AppChooserRef : AppChooserProtocol, GWeakCapturing

Buildable Interface

  • GtkBuildable allows objects to extend and customize their deserialization from ui files.

    The interface includes methods for setting names and properties of objects, parsing custom tags and constructing child objects.

    The GtkBuildable interface is implemented by all widgets and many of the non-widget objects that are provided by GTK. The main user of this interface is [classGtk.Builder]. There should be very little need for applications to call any of these functions directly.

    An object only needs to implement this interface if it needs to extend the GtkBuilder XML format or run any extra routines at deserialization time.

    The BuildableRef type acts as a lightweight Swift reference to an underlying GtkBuildable instance. It exposes methods that can operate on this data type through BuildableProtocol conformance. Use BuildableRef only as an unowned reference to an existing GtkBuildable instance.

    See more

    Declaration

    Swift

    public struct BuildableRef : BuildableProtocol

Bitset Record

  • A GtkBitset represents a set of unsigned integers.

    Another name for this data structure is “bitmap”.

    The current implementation is based on roaring bitmaps.

    A bitset allows adding a set of integers and provides support for set operations like unions, intersections and checks for equality or if a value is contained in the set. GtkBitset also contains various functions to query metadata about the bitset, such as the minimum or maximum values or its size.

    The fastest way to iterate values in a bitset is [structGtk.BitsetIter].

    The main use case for GtkBitset is implementing complex selections for [ifaceGtk.SelectionModel].

    The BitsetRef type acts as a lightweight Swift reference to an underlying GtkBitset instance. It exposes methods that can operate on this data type through BitsetProtocol conformance. Use BitsetRef only as an unowned reference to an existing GtkBitset instance.

    See more

    Declaration

    Swift

    public struct BitsetRef : BitsetProtocol

BitsetIter Record

  • An opaque, stack-allocated struct for iterating over the elements of a GtkBitset.

    Before a GtkBitsetIter can be used, it needs to be initialized with [funcGtk.BitsetIter.init_first], [funcGtk.BitsetIter.init_last] or [funcGtk.BitsetIter.init_at].

    The BitsetIterRef type acts as a lightweight Swift reference to an underlying GtkBitsetIter instance. It exposes methods that can operate on this data type through BitsetIterProtocol conformance. Use BitsetIterRef only as an unowned reference to an existing GtkBitsetIter instance.

    See more

    Declaration

    Swift

    public struct BitsetIterRef : BitsetIterProtocol

BookmarkListClass Record

BoolFilterClass Record

Border Record

  • A struct that specifies a border around a rectangular area.

    Each side can have different width.

    The BorderRef type acts as a lightweight Swift reference to an underlying GtkBorder instance. It exposes methods that can operate on this data type through BorderProtocol conformance. Use BorderRef only as an unowned reference to an existing GtkBorder instance.

    See more

    Declaration

    Swift

    public struct BorderRef : BorderProtocol

BoxClass Record

  • The BoxClassRef type acts as a lightweight Swift reference to an underlying GtkBoxClass instance. It exposes methods that can operate on this data type through BoxClassProtocol conformance. Use BoxClassRef only as an unowned reference to an existing GtkBoxClass instance.

    See more

    Declaration

    Swift

    public struct BoxClassRef : BoxClassProtocol

BoxLayoutClass Record

  • The BoxLayoutClassRef type acts as a lightweight Swift reference to an underlying GtkBoxLayoutClass instance. It exposes methods that can operate on this data type through BoxLayoutClassProtocol conformance. Use BoxLayoutClassRef only as an unowned reference to an existing GtkBoxLayoutClass instance.

    See more

    Declaration

    Swift

    public struct BoxLayoutClassRef : BoxLayoutClassProtocol

BuildableIface Record

  • The GtkBuildableIface interface contains methods that are necessary to allow GtkBuilder to construct an object from a GtkBuilder UI definition.

    The BuildableIfaceRef type acts as a lightweight Swift reference to an underlying GtkBuildableIface instance. It exposes methods that can operate on this data type through BuildableIfaceProtocol conformance. Use BuildableIfaceRef only as an unowned reference to an existing GtkBuildableIface instance.

    See more

    Declaration

    Swift

    public struct BuildableIfaceRef : BuildableIfaceProtocol

BuildableParseContext Record

  • An opaque context struct for GtkBuildableParser.

    The BuildableParseContextRef type acts as a lightweight Swift reference to an underlying GtkBuildableParseContext instance. It exposes methods that can operate on this data type through BuildableParseContextProtocol conformance. Use BuildableParseContextRef only as an unowned reference to an existing GtkBuildableParseContext instance.

    See more

    Declaration

    Swift

    public struct BuildableParseContextRef : BuildableParseContextProtocol

BuildableParser Record

  • A sub-parser for GtkBuildable implementations.

    The BuildableParserRef type acts as a lightweight Swift reference to an underlying GtkBuildableParser instance. It exposes methods that can operate on this data type through BuildableParserProtocol conformance. Use BuildableParserRef only as an unowned reference to an existing GtkBuildableParser instance.

    See more

    Declaration

    Swift

    public struct BuildableParserRef : BuildableParserProtocol

BuilderCScopeClass Record

BuilderClass Record

  • The BuilderClassRef type acts as a lightweight Swift reference to an underlying GtkBuilderClass instance. It exposes methods that can operate on this data type through BuilderClassProtocol conformance. Use BuilderClassRef only as an unowned reference to an existing GtkBuilderClass instance.

    See more

    Declaration

    Swift

    public struct BuilderClassRef : BuilderClassProtocol

BuilderListItemFactoryClass Record

BuilderScopeInterface Record

  • 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.

    The BuilderScopeInterfaceRef type acts as a lightweight Swift reference to an underlying GtkBuilderScopeInterface instance. It exposes methods that can operate on this data type through BuilderScopeInterfaceProtocol conformance. Use BuilderScopeInterfaceRef only as an unowned reference to an existing GtkBuilderScopeInterface instance.

    See more

    Declaration

    Swift

    public struct BuilderScopeInterfaceRef : BuilderScopeInterfaceProtocol

ButtonClass Record

  • The ButtonClassRef type acts as a lightweight Swift reference to an underlying GtkButtonClass instance. It exposes methods that can operate on this data type through ButtonClassProtocol conformance. Use ButtonClassRef only as an unowned reference to an existing GtkButtonClass instance.

    See more

    Declaration

    Swift

    public struct ButtonClassRef : ButtonClassProtocol

CallbackActionClass Record

BookmarkList Class

  • GtkBookmarkList is a list model that wraps GBookmarkFile.

    It presents a GListModel and fills it asynchronously with the GFileInfos returned from that function.

    The GFileInfos in the list have some attributes in the recent namespace added: recentprivate`(boolean) andrecent:applications` (stringv).

    The BookmarkListRef type acts as a lightweight Swift reference to an underlying GtkBookmarkList instance. It exposes methods that can operate on this data type through BookmarkListProtocol conformance. Use BookmarkListRef only as an unowned reference to an existing GtkBookmarkList instance.

    See more

    Declaration

    Swift

    public struct BookmarkListRef : BookmarkListProtocol, GWeakCapturing

BoolFilter Class

  • GtkBoolFilter evaluates a boolean GtkExpression to determine whether to include items.

    The BoolFilterRef type acts as a lightweight Swift reference to an underlying GtkBoolFilter instance. It exposes methods that can operate on this data type through BoolFilterProtocol conformance. Use BoolFilterRef only as an unowned reference to an existing GtkBoolFilter instance.

    See more

    Declaration

    Swift

    public struct BoolFilterRef : BoolFilterProtocol, GWeakCapturing

Box Class

  • The GtkBox widget arranges child widgets into a single row or column.

    An example GtkBox

    Whether it is a row or column depends on the value of its [propertyGtk.Orientable:orientation] property. Within the other dimension, all children are allocated the same size. Of course, the [propertyGtk.Widget:halign] and [propertyGtk.Widget:valign] properties can be used on the children to influence their allocation.

    Use repeated calls to [methodGtk.Box.append] to pack widgets into a GtkBox from start to end. Use [methodGtk.Box.remove] to remove widgets from the GtkBox. [methodGtk.Box.insert_child_after] can be used to add a child at a particular position.

    Use [methodGtk.Box.set_homogeneous] to specify whether or not all children of the GtkBox are forced to get the same amount of space.

    Use [methodGtk.Box.set_spacing] to determine how much space will be minimally placed between all children in the GtkBox. Note that spacing is added between the children.

    Use [methodGtk.Box.reorder_child_after] to move a child to a different place in the box.

    CSS nodes

    GtkBox uses a single CSS node with name box.

    Accessibility

    GtkBox uses the GTK_ACCESSIBLE_ROLE_GROUP role.

    The BoxRef type acts as a lightweight Swift reference to an underlying GtkBox instance. It exposes methods that can operate on this data type through BoxProtocol conformance. Use BoxRef only as an unowned reference to an existing GtkBox instance.

    See more

    Declaration

    Swift

    public struct BoxRef : BoxProtocol, GWeakCapturing

BoxLayout Class

  • GtkBoxLayout is a layout manager that arranges children in a single row or column.

    Whether it is a row or column depends on the value of its [propertyGtk.Orientable:orientation] property. Within the other dimension all children all allocated the same size. The GtkBoxLayout will respect the [propertyGtk.Widget:halign] and [propertyGtk.Widget:valign] properties of each child widget.

    If you want all children to be assigned the same size, you can use the [propertyGtk.BoxLayout:homogeneous] property.

    If you want to specify the amount of space placed between each child, you can use the [propertyGtk.BoxLayout:spacing] property.

    The BoxLayoutRef type acts as a lightweight Swift reference to an underlying GtkBoxLayout instance. It exposes methods that can operate on this data type through BoxLayoutProtocol conformance. Use BoxLayoutRef only as an unowned reference to an existing GtkBoxLayout instance.

    See more

    Declaration

    Swift

    public struct BoxLayoutRef : BoxLayoutProtocol, GWeakCapturing

Builder Class

  • A GtkBuilder reads XML descriptions of a user interface and instantiates the described objects.

    To create a GtkBuilder from a user interface description, call [ctorGtk.Builder.new_from_file], [ctorGtk.Builder.new_from_resource] or [ctorGtk.Builder.new_from_string].

    In the (unusual) case that you want to add user interface descriptions from multiple sources to the same GtkBuilder you can call [ctorGtk.Builder.new] to get an empty builder and populate it by (multiple) calls to [methodGtk.Builder.add_from_file], [methodGtk.Builder.add_from_resource] or [methodGtk.Builder.add_from_string].

    A GtkBuilder holds a reference to all objects that it has constructed and drops these references when it is finalized. This finalization can cause the destruction of non-widget objects or widgets which are not contained in a toplevel window. For toplevel windows constructed by a builder, it is the responsibility of the user to call [methodGtk.Window.destroy] to get rid of them and all the widgets they contain.

    The functions [methodGtk.Builder.get_object] and [methodGtk.Builder.get_objects] can be used to access the widgets in the interface by the names assigned to them inside the UI description. Toplevel windows returned by these functions will stay around until the user explicitly destroys them with [methodGtk.Window.destroy]. Other widgets will either be part of a larger hierarchy constructed by the builder (in which case you should not have to worry about their lifecycle), or without a parent, in which case they have to be added to some container to make use of them. Non-widget objects need to be reffed with g_object_ref() to keep them beyond the lifespan of the builder.

    GtkBuilder UI Definitions

    GtkBuilder parses textual descriptions of user interfaces which are specified in XML format. We refer to these descriptions as “GtkBuilder UI definitions” or just “UI definitions” if the context is clear.

    The toplevel element is &lt;interface&gt;. It optionally takes a “domain” attribute, which will make the builder look for translated strings using dgettext() in the domain specified. This can also be done by calling [methodGtk.Builder.set_translation_domain] on the builder.

    Objects are described by &lt;object&gt; elements, which can contain &lt;property&gt; elements to set properties, &lt;signal&gt; elements which connect signals to handlers, and &lt;child&gt; elements, which describe child objects (most often widgets inside a container, but also e.g. actions in an action group, or columns in a tree model). A &lt;child&gt; element contains an &lt;object&gt; element which describes the child object.

    The target toolkit version(s) are described by &lt;requires&gt; elements, the “lib” attribute specifies the widget library in question (currently the only supported value is “gtk”) and the “version” attribute specifies the target version in the form “&lt;major&gt;.&lt;minor&gt;”. GtkBuilder will error out if the version requirements are not met.

    Typically, the specific kind of object represented by an &lt;object&gt; element is specified by the “class” attribute. If the type has not been loaded yet, GTK tries to find the get_type() function from the class name by applying heuristics. This works in most cases, but if necessary, it is possible to specify the name of the get_type() function explicitly with the “type-func” attribute.

    Objects may be given a name with the “id” attribute, which allows the application to retrieve them from the builder with [methodGtk.Builder.get_object]. An id is also necessary to use the object as property value in other parts of the UI definition. GTK reserves ids starting and ending with ___ (three consecutive underscores) for its own purposes.

    Setting properties of objects is pretty straightforward with the &lt;property&gt; element: the “name” attribute specifies the name of the property, and the content of the element specifies the value. If the “translatable” attribute is set to a true value, GTK uses gettext() (or dgettext() if the builder has a translation domain set) to find a translation for the value. This happens before the value is parsed, so it can be used for properties of any type, but it is probably most useful for string properties. It is also possible to specify a context to disambiguate short strings, and comments which may help the translators.

    GtkBuilder can parse textual representations for the most common property types: characters, strings, integers, floating-point numbers, booleans (strings like “TRUE”, “t”, “yes”, “y”, “1” are interpreted as true, strings like “FALSE”, “f”, “no”, “n”, “0” are interpreted as false), enumerations (can be specified by their name, nick or integer value), flags (can be specified by their name, nick, integer value, optionally combined with “|”, e.g. “GTK_INPUT_HINT_EMOJI|GTK_INPUT_HINT_LOWERCASE”) and colors (in a format understood by [methodGdk.RGBA.parse]).

    GVariants can be specified in the format understood by g_variant_parse(), and pixbufs can be specified as a filename of an image file to load.

    Objects can be referred to by their name and by default refer to objects declared in the local XML fragment and objects exposed via [methodGtk.Builder.expose_object]. In general, GtkBuilder allows forward references to objects — declared in the local XML; an object doesn’t have to be constructed before it can be referred to. The exception to this rule is that an object has to be constructed before it can be used as the value of a construct-only property.

    It is also possible to bind a property value to another object’s property value using the attributes “bind-source” to specify the source object of the binding, and optionally, “bind-property” and “bind-flags” to specify the source property and source binding flags respectively. Internally, GtkBuilder implements this using GBinding objects. For more information see g_object_bind_property().

    Sometimes it is necessary to refer to widgets which have implicitly been constructed by GTK as part of a composite widget, to set properties on them or to add further children (e.g. the content area of a GtkDialog). This can be achieved by setting the “internal-child” property of the &lt;child&gt; element to a true value. Note that GtkBuilder still requires an &lt;object&gt; element for the internal child, even if it has already been constructed.

    A number of widgets have different places where a child can be added (e.g. tabs vs. page content in notebooks). This can be reflected in a UI definition by specifying the “type” attribute on a &lt;child&gt; The possible values for the “type” attribute are described in the sections describing the widget-specific portions of UI definitions.

    Signal handlers and function pointers

    Signal handlers are set up with the &lt;signal&gt; element. The “name” attribute specifies the name of the signal, and the “handler” attribute specifies the function to connect to the signal. The remaining attributes, “after”, “swapped” and “object”, have the same meaning as the corresponding parameters of the g_signal_connect_object() or g_signal_connect_data() functions. A “last_modification_time” attribute is also allowed, but it does not have a meaning to the builder.

    If you rely on GModule support to lookup callbacks in the symbol table, the following details should be noted:

    When compiling applications for Windows, you must declare signal callbacks with G_MODULE_EXPORT, or they will not be put in the symbol table. On Linux and Unix, this is not necessary; applications should instead be compiled with the -Wl,–export-dynamic CFLAGS, and linked against gmodule-export-2.0.

    A GtkBuilder UI Definition

    &lt;interface&gt;
      &lt;object class="GtkDialog" id="dialog1"&gt;
        &lt;child internal-child="content_area"&gt;
          &lt;object class="GtkBox" id="vbox1"&gt;
            &lt;child internal-child="action_area"&gt;
              &lt;object class="GtkBox" id="hbuttonbox1"&gt;
                &lt;child&gt;
                  &lt;object class="GtkButton" id="ok_button"&gt;
                    &lt;property name="label" translatable="yes"&gt;_Ok&lt;/property&gt;
                    &lt;property name="use-underline"&gt;True&lt;/property&gt;
                    &lt;signal name="clicked" handler="ok_button_clicked"/&gt;
                  &lt;/object&gt;
                &lt;/child&gt;
              &lt;/object&gt;
            &lt;/child&gt;
          &lt;/object&gt;
        &lt;/child&gt;
      &lt;/object&gt;
    &lt;/interface&gt;
    

    Beyond this general structure, several object classes define their own XML DTD fragments for filling in the ANY placeholders in the DTD above. Note that a custom element in a <child> element gets parsed by the custom tag handler of the parent object, while a custom element in an <object> element gets parsed by the custom tag handler of the object.

    These XML fragments are explained in the documentation of the respective objects.

    A &lt;template&gt; tag can be used to define a widget class’s components. See the GtkWidget documentation for details.

    The BuilderRef type acts as a lightweight Swift reference to an underlying GtkBuilder instance. It exposes methods that can operate on this data type through BuilderProtocol conformance. Use BuilderRef only as an unowned reference to an existing GtkBuilder instance.

    See more

    Declaration

    Swift

    public struct BuilderRef : BuilderProtocol, GWeakCapturing

BuilderCScope Class

  • A GtkBuilderScope implementation for the C language.

    GtkBuilderCScope instances use symbols explicitly added to builder with prior calls to [methodGtk.BuilderCScope.add_callback_symbol]. If developers want to do that, they are encouraged to create their own scopes for that purpose.

    In the case that symbols are not explicitly added; GTK will uses GModule’s introspective features (by opening the module nil) to look at the application’s symbol table. From here it tries to match the signal function names given in the interface description with symbols in the application.

    Note that unless [methodGtk.BuilderCScope.add_callback_symbol] is called for all signal callbacks which are referenced by the loaded XML, this functionality will require that GModule be supported on the platform.

    The BuilderCScopeRef type acts as a lightweight Swift reference to an underlying GtkBuilderCScope instance. It exposes methods that can operate on this data type through BuilderCScopeProtocol conformance. Use BuilderCScopeRef only as an unowned reference to an existing GtkBuilderCScope instance.

    See more

    Declaration

    Swift

    public struct BuilderCScopeRef : BuilderCScopeProtocol, GWeakCapturing

BuilderListItemFactory Class

  • GtkBuilderListItemFactory is a GtkListItemFactory that creates widgets by instantiating GtkBuilder UI templates.

    The templates must be extending GtkListItem, and typically use GtkExpressions to obtain data from the items in the model.

    Example:

      &lt;interface&gt;
        &lt;template class="GtkListItem"&gt;
          &lt;property name="child"&gt;
            &lt;object class="GtkLabel"&gt;
              &lt;property name="xalign"&gt;0&lt;/property&gt;
              &lt;binding name="label"&gt;
                &lt;lookup name="name" type="SettingsKey"&gt;
                  &lt;lookup name="item"&gt;GtkListItem&lt;/lookup&gt;
                &lt;/lookup&gt;
              &lt;/binding&gt;
            &lt;/object&gt;
          &lt;/property&gt;
        &lt;/template&gt;
      &lt;/interface&gt;
    

    The BuilderListItemFactoryRef type acts as a lightweight Swift reference to an underlying GtkBuilderListItemFactory instance. It exposes methods that can operate on this data type through BuilderListItemFactoryProtocol conformance. Use BuilderListItemFactoryRef only as an unowned reference to an existing GtkBuilderListItemFactory instance.

    See more

    Declaration

    Swift

    public struct BuilderListItemFactoryRef : BuilderListItemFactoryProtocol, GWeakCapturing

Button Class

  • The GtkButton widget is generally used to trigger a callback function that is called when the button is pressed.

    An example GtkButton

    The GtkButton widget can hold any valid child widget. That is, it can hold almost any other standard GtkWidget. The most commonly used child is the GtkLabel.

    CSS nodes

    GtkButton has a single CSS node with name button. The node will get the style classes .image-button or .text-button, if the content is just an image or label, respectively. It may also receive the .flat style class. When activating a button via the keyboard, the button will temporarily gain the .keyboard-activating style class.

    Other style classes that are commonly used with GtkButton include .suggested-action and .destructive-action. In special cases, buttons can be made round by adding the .circular style class.

    Button-like widgets like [classGtk.ToggleButton], [classGtk.MenuButton], [classGtk.VolumeButton], [classGtk.LockButton], [classGtk.ColorButton] or [classGtk.FontButton] use style classes such as .toggle, .popup, .scale, .lock, .color on the button node to differentiate themselves from a plain GtkButton.

    Accessibility

    GtkButton uses the GTK_ACCESSIBLE_ROLE_BUTTON role.

    The ButtonRef type acts as a lightweight Swift reference to an underlying GtkButton instance. It exposes methods that can operate on this data type through ButtonProtocol conformance. Use ButtonRef only as an unowned reference to an existing GtkButton instance.

    See more

    Declaration

    Swift

    public struct ButtonRef : ButtonProtocol, GWeakCapturing

CClosureExpression Class

  • A variant of GtkClosureExpression using a C closure.

    The CClosureExpressionRef type acts as a lightweight Swift reference to an underlying GtkCClosureExpression instance. It exposes methods that can operate on this data type through CClosureExpressionProtocol conformance. Use CClosureExpressionRef only as an unowned reference to an existing GtkCClosureExpression instance.

    See more

    Declaration

    Swift

    public struct CClosureExpressionRef : CClosureExpressionProtocol

BuilderScope Interface

  • GtkBuilderScope is an interface to provide language binding support to GtkBuilder.

    The goal of GtkBuilderScope is to look up programming-language-specific values for strings that are given in a GtkBuilder UI file.

    The primary intended audience is bindings that want to provide deeper integration of GtkBuilder into the language.

    A GtkBuilderScope instance may be used with multiple GtkBuilder objects, even at once.

    By default, GTK will use its own implementation of GtkBuilderScope for the C language which can be created via [ctorGtk.BuilderCScope.new].

    The BuilderScopeRef type acts as a lightweight Swift reference to an underlying GtkBuilderScope instance. It exposes methods that can operate on this data type through BuilderScopeProtocol conformance. Use BuilderScopeRef only as an unowned reference to an existing GtkBuilderScope instance.

    See more

    Declaration

    Swift

    public struct BuilderScopeRef : BuilderScopeProtocol

CellEditable Interface

  • Interface for widgets that can be used for editing cells

    The GtkCellEditable interface must be implemented for widgets to be usable to edit the contents of a GtkTreeView cell. It provides a way to specify how temporary widgets should be configured for editing, get the new value, etc.

    The CellEditableRef type acts as a lightweight Swift reference to an underlying GtkCellEditable instance. It exposes methods that can operate on this data type through CellEditableProtocol conformance. Use CellEditableRef only as an unowned reference to an existing GtkCellEditable instance.

    See more

    Declaration

    Swift

    public struct CellEditableRef : CellEditableProtocol, GWeakCapturing

Calendar Class

  • GtkCalendar is a widget that displays a Gregorian calendar, one month at a time.

    An example GtkCalendar

    A GtkCalendar can be created with [ctorGtk.Calendar.new].

    The date that is currently displayed can be altered with [methodGtk.Calendar.select_day].

    To place a visual marker on a particular day, use [methodGtk.Calendar.mark_day] and to remove the marker, [methodGtk.Calendar.unmark_day]. Alternative, all marks can be cleared with [methodGtk.Calendar.clear_marks].

    The selected date can be retrieved from a GtkCalendar using [methodGtk.Calendar.get_date].

    Users should be aware that, although the Gregorian calendar is the legal calendar in most countries, it was adopted progressively between 1582 and 1929. Display before these dates is likely to be historically incorrect.

    CSS nodes

    calendar.view
    ├── header
       ├── button
       ├── stack.month
       ├── button
       ├── button
       ├── label.year
       ╰── button
    ╰── grid
        ╰── label[.day-name][.week-number][.day-number][.other-month][.today]
    

    GtkCalendar has a main node with name calendar. It contains a subnode called header containing the widgets for switching between years and months.

    The grid subnode contains all day labels, including week numbers on the left (marked with the .week-number css class) and day names on top (marked with the .day-name css class).

    Day labels that belong to the previous or next month get the .other-month style class. The label of the current day get the .today style class.

    Marked day labels get the :selected state assigned.

    The CalendarRef type acts as a lightweight Swift reference to an underlying GtkCalendar instance. It exposes methods that can operate on this data type through CalendarProtocol conformance. Use CalendarRef only as an unowned reference to an existing GtkCalendar instance.

    See more

    Declaration

    Swift

    public struct CalendarRef : CalendarProtocol, GWeakCapturing

CallbackAction Class

  • A GtkShortcutAction that invokes a callback.

    The CallbackActionRef type acts as a lightweight Swift reference to an underlying GtkCallbackAction instance. It exposes methods that can operate on this data type through CallbackActionProtocol conformance. Use CallbackActionRef only as an unowned reference to an existing GtkCallbackAction instance.

    See more

    Declaration

    Swift

    public struct CallbackActionRef : CallbackActionProtocol, GWeakCapturing

CellArea Class

  • An abstract class for laying out GtkCellRenderers

    The GtkCellArea is an abstract class for GtkCellLayout widgets (also referred to as “layouting widgets”) to interface with an arbitrary number of GtkCellRenderers and interact with the user for a given GtkTreeModel row.

    The cell area handles events, focus navigation, drawing and size requests and allocations for a given row of data.

    Usually users dont have to interact with the GtkCellArea directly unless they are implementing a cell-layouting widget themselves.

    Requesting area sizes

    As outlined in GtkWidget’s geometry management section, GTK uses a height-for-width geometry management system to compute the sizes of widgets and user interfaces. GtkCellArea uses the same semantics to calculate the size of an area for an arbitrary number of GtkTreeModel rows.

    When requesting the size of a cell area one needs to calculate the size for a handful of rows, and this will be done differently by different layouting widgets. For instance a GtkTreeViewColumn always lines up the areas from top to bottom while a GtkIconView on the other hand might enforce that all areas received the same width and wrap the areas around, requesting height for more cell areas when allocated less width.

    It’s also important for areas to maintain some cell alignments with areas rendered for adjacent rows (cells can appear “columnized” inside an area even when the size of cells are different in each row). For this reason the GtkCellArea uses a GtkCellAreaContext object to store the alignments and sizes along the way (as well as the overall largest minimum and natural size for all the rows which have been calculated with the said context).

    The GtkCellAreaContext is an opaque object specific to the GtkCellArea which created it (see gtk_cell_area_create_context()). The owning cell-layouting widget can create as many contexts as it wishes to calculate sizes of rows which should receive the same size in at least one orientation (horizontally or vertically), However, it’s important that the same GtkCellAreaContext which was used to request the sizes for a given GtkTreeModel row be used when rendering or processing events for that row.

    In order to request the width of all the rows at the root level of a GtkTreeModel one would do the following:

    (C Language Example):

    GtkTreeIter iter;
    int         minimum_width;
    int         natural_width;
    
    valid = gtk_tree_model_get_iter_first (model, &iter);
    while (valid)
      {
        gtk_cell_area_apply_attributes (area, model, &iter, FALSE, FALSE);
        gtk_cell_area_get_preferred_width (area, context, widget, NULL, NULL);
    
        valid = gtk_tree_model_iter_next (model, &iter);
      }
    gtk_cell_area_context_get_preferred_width (context, &minimum_width, &natural_width);
    

    Note that in this example it’s not important to observe the returned minimum and natural width of the area for each row unless the cell-layouting object is actually interested in the widths of individual rows. The overall width is however stored in the accompanying GtkCellAreaContext object and can be consulted at any time.

    This can be useful since GtkCellLayout widgets usually have to support requesting and rendering rows in treemodels with an exceedingly large amount of rows. The GtkCellLayout widget in that case would calculate the required width of the rows in an idle or timeout source (see g_timeout_add()) and when the widget is requested its actual width in [vfuncGtk.Widget.measure] it can simply consult the width accumulated so far in the GtkCellAreaContext object.

    A simple example where rows are rendered from top to bottom and take up the full width of the layouting widget would look like:

    (C Language Example):

    static void
    foo_get_preferred_width (GtkWidget       *widget,
                             int             *minimum_size,
                             int             *natural_size)
    {
      Foo        *foo  = FOO (widget);
      FooPrivate *priv = foo->priv;
    
      foo_ensure_at_least_one_handfull_of_rows_have_been_requested (foo);
    
      gtk_cell_area_context_get_preferred_width (priv->context, minimum_size, natural_size);
    }
    

    In the above example the Foo widget has to make sure that some row sizes have been calculated (the amount of rows that Foo judged was appropriate to request space for in a single timeout iteration) before simply returning the amount of space required by the area via the GtkCellAreaContext.

    Requesting the height for width (or width for height) of an area is a similar task except in this case the GtkCellAreaContext does not store the data (actually, it does not know how much space the layouting widget plans to allocate it for every row. It’s up to the layouting widget to render each row of data with the appropriate height and width which was requested by the GtkCellArea).

    In order to request the height for width of all the rows at the root level of a GtkTreeModel one would do the following:

    (C Language Example):

    GtkTreeIter iter;
    int         minimum_height;
    int         natural_height;
    int         full_minimum_height = 0;
    int         full_natural_height = 0;
    
    valid = gtk_tree_model_get_iter_first (model, &iter);
    while (valid)
      {
        gtk_cell_area_apply_attributes (area, model, &iter, FALSE, FALSE);
        gtk_cell_area_get_preferred_height_for_width (area, context, widget,
                                                      width, &minimum_height, &natural_height);
    
        if (width_is_for_allocation)
           cache_row_height (&iter, minimum_height, natural_height);
    
        full_minimum_height += minimum_height;
        full_natural_height += natural_height;
    
        valid = gtk_tree_model_iter_next (model, &iter);
      }
    

    Note that in the above example we would need to cache the heights returned for each row so that we would know what sizes to render the areas for each row. However we would only want to really cache the heights if the request is intended for the layouting widgets real allocation.

    In some cases the layouting widget is requested the height for an arbitrary for_width, this is a special case for layouting widgets who need to request size for tens of thousands of rows. For this case it’s only important that the layouting widget calculate one reasonably sized chunk of rows and return that height synchronously. The reasoning here is that any layouting widget is at least capable of synchronously calculating enough height to fill the screen height (or scrolled window height) in response to a single call to [vfuncGtk.Widget.measure]. Returning a perfect height for width that is larger than the screen area is inconsequential since after the layouting receives an allocation from a scrolled window it simply continues to drive the scrollbar values while more and more height is required for the row heights that are calculated in the background.

    Rendering Areas

    Once area sizes have been acquired at least for the rows in the visible area of the layouting widget they can be rendered at [vfuncGtk.Widget.snapshot] time.

    A crude example of how to render all the rows at the root level runs as follows:

    (C Language Example):

    GtkAllocation allocation;
    GdkRectangle  cell_area = { 0, };
    GtkTreeIter   iter;
    int           minimum_width;
    int           natural_width;
    
    gtk_widget_get_allocation (widget, &allocation);
    cell_area.width = allocation.width;
    
    valid = gtk_tree_model_get_iter_first (model, &iter);
    while (valid)
      {
        cell_area.height = get_cached_height_for_row (&iter);
    
        gtk_cell_area_apply_attributes (area, model, &iter, FALSE, FALSE);
        gtk_cell_area_render (area, context, widget, cr,
                              &cell_area, &cell_area, state_flags, FALSE);
    
        cell_area.y += cell_area.height;
    
        valid = gtk_tree_model_iter_next (model, &iter);
      }
    

    Note that the cached height in this example really depends on how the layouting widget works. The layouting widget might decide to give every row its minimum or natural height or, if the model content is expected to fit inside the layouting widget without scrolling, it would make sense to calculate the allocation for each row at the time the widget is allocated using gtk_distribute_natural_allocation().

    Handling Events and Driving Keyboard Focus

    Passing events to the area is as simple as handling events on any normal widget and then passing them to the gtk_cell_area_event() API as they come in. Usually GtkCellArea is only interested in button events, however some customized derived areas can be implemented who are interested in handling other events. Handling an event can trigger the GtkCellAreafocus-changed signal to fire; as well as GtkCellAreaadd-editable in the case that an editable cell was clicked and needs to start editing. You can call gtk_cell_area_stop_editing() at any time to cancel any cell editing that is currently in progress.

    The GtkCellArea drives keyboard focus from cell to cell in a way similar to GtkWidget. For layouting widgets that support giving focus to cells it’s important to remember to pass GTK_CELL_RENDERER_FOCUSED to the area functions for the row that has focus and to tell the area to paint the focus at render time.

    Layouting widgets that accept focus on cells should implement the [vfuncGtk.Widget.focus] virtual method. The layouting widget is always responsible for knowing where GtkTreeModel rows are rendered inside the widget, so at [vfuncGtk.Widget.focus] time the layouting widget should use the GtkCellArea methods to navigate focus inside the area and then observe the GtkDirectionType to pass the focus to adjacent rows and areas.

    A basic example of how the [vfuncGtk.Widget.focus] virtual method should be implemented:

    (C Language Example):

    static gboolean
    foo_focus (GtkWidget       *widget,
               GtkDirectionType direction)
    {
      Foo        *foo  = FOO (widget);
      FooPrivate *priv = foo->priv;
      int         focus_row;
      gboolean    have_focus = FALSE;
    
      focus_row = priv->focus_row;
    
      if (!gtk_widget_has_focus (widget))
        gtk_widget_grab_focus (widget);
    
      valid = gtk_tree_model_iter_nth_child (priv->model, &iter, NULL, priv->focus_row);
      while (valid)
        {
          gtk_cell_area_apply_attributes (priv->area, priv->model, &iter, FALSE, FALSE);
    
          if (gtk_cell_area_focus (priv->area, direction))
            {
               priv->focus_row = focus_row;
               have_focus = TRUE;
               break;
            }
          else
            {
              if (direction == GTK_DIR_RIGHT ||
                  direction == GTK_DIR_LEFT)
                break;
              else if (direction == GTK_DIR_UP ||
                       direction == GTK_DIR_TAB_BACKWARD)
               {
                  if (focus_row == 0)
                    break;
                  else
                   {
                      focus_row--;
                      valid = gtk_tree_model_iter_nth_child (priv->model, &iter, NULL, focus_row);
                   }
                }
              else
                {
                  if (focus_row == last_row)
                    break;
                  else
                    {
                      focus_row++;
                      valid = gtk_tree_model_iter_next (priv->model, &iter);
                    }
                }
            }
        }
        return have_focus;
    }
    

    Note that the layouting widget is responsible for matching the GtkDirectionType values to the way it lays out its cells.

    Cell Properties

    The GtkCellArea introduces cell properties for GtkCellRenderers. This provides some general interfaces for defining the relationship cell areas have with their cells. For instance in a GtkCellAreaBox a cell might “expand” and receive extra space when the area is allocated more than its full natural request, or a cell might be configured to “align” with adjacent rows which were requested and rendered with the same GtkCellAreaContext.

    Use gtk_cell_area_class_install_cell_property() to install cell properties for a cell area class and gtk_cell_area_class_find_cell_property() or gtk_cell_area_class_list_cell_properties() to get information about existing cell properties.

    To set the value of a cell property, use gtk_cell_area_cell_set_property(), gtk_cell_area_cell_set() or gtk_cell_area_cell_set_valist(). To obtain the value of a cell property, use gtk_cell_area_cell_get_property(), gtk_cell_area_cell_get() or gtk_cell_area_cell_get_valist().

    The CellAreaRef type acts as a lightweight Swift reference to an underlying GtkCellArea instance. It exposes methods that can operate on this data type through CellAreaProtocol conformance. Use CellAreaRef only as an unowned reference to an existing GtkCellArea instance.

    See more

    Declaration

    Swift

    public struct CellAreaRef : CellAreaProtocol, GWeakCapturing

CellAreaBox Class

  • A cell area that renders GtkCellRenderers into a row or a column

    The GtkCellAreaBox renders cell renderers into a row or a column depending on its GtkOrientation.

    GtkCellAreaBox uses a notion of packing. Packing refers to adding cell renderers with reference to a particular position in a GtkCellAreaBox. There are two reference positions: the start and the end of the box. When the GtkCellAreaBox is oriented in the GTK_ORIENTATION_VERTICAL orientation, the start is defined as the top of the box and the end is defined as the bottom. In the GTK_ORIENTATION_HORIZONTAL orientation start is defined as the left side and the end is defined as the right side.

    Alignments of GtkCellRenderers rendered in adjacent rows can be configured by configuring the GtkCellAreaBox align child cell property with gtk_cell_area_cell_set_property() or by specifying the “align” argument to gtk_cell_area_box_pack_start() and gtk_cell_area_box_pack_end().

    The CellAreaBoxRef type acts as a lightweight Swift reference to an underlying GtkCellAreaBox instance. It exposes methods that can operate on this data type through CellAreaBoxProtocol conformance. Use CellAreaBoxRef only as an unowned reference to an existing GtkCellAreaBox instance.

    See more

    Declaration

    Swift

    public struct CellAreaBoxRef : CellAreaBoxProtocol, GWeakCapturing

CellAreaContext Class

  • Stores geometrical information for a series of rows in a GtkCellArea

    The GtkCellAreaContext object is created by a given GtkCellArea implementation via its GtkCellAreaClass.create_context() virtual method and is used to store cell sizes and alignments for a series of GtkTreeModel rows that are requested and rendered in the same context.

    GtkCellLayout widgets can create any number of contexts in which to request and render groups of data rows. However, it’s important that the same context which was used to request sizes for a given GtkTreeModel row also be used for the same row when calling other GtkCellArea APIs such as gtk_cell_area_render() and gtk_cell_area_event().

    The CellAreaContextRef type acts as a lightweight Swift reference to an underlying GtkCellAreaContext instance. It exposes methods that can operate on this data type through CellAreaContextProtocol conformance. Use CellAreaContextRef only as an unowned reference to an existing GtkCellAreaContext instance.

    See more

    Declaration

    Swift

    public struct CellAreaContextRef : CellAreaContextProtocol, GWeakCapturing

CellRenderer Class

  • An object for rendering a single cell

    The GtkCellRenderer is a base class of a set of objects used for rendering a cell to a cairo_t. These objects are used primarily by the GtkTreeView widget, though they aren’t tied to them in any specific way. It is worth noting that GtkCellRenderer is not a GtkWidget and cannot be treated as such.

    The primary use of a GtkCellRenderer is for drawing a certain graphical elements on a cairo_t. Typically, one cell renderer is used to draw many cells on the screen. To this extent, it isn’t expected that a CellRenderer keep any permanent state around. Instead, any state is set just prior to use using GObjects property system. Then, the cell is measured using gtk_cell_renderer_get_preferred_size(). Finally, the cell is rendered in the correct location using gtk_cell_renderer_snapshot().

    There are a number of rules that must be followed when writing a new GtkCellRenderer. First and foremost, it’s important that a certain set of properties will always yield a cell renderer of the same size, barring a style change. The GtkCellRenderer also has a number of generic properties that are expected to be honored by all children.

    Beyond merely rendering a cell, cell renderers can optionally provide active user interface elements. A cell renderer can be “activatable” like GtkCellRendererToggle, which toggles when it gets activated by a mouse click, or it can be “editable” like GtkCellRendererText, which allows the user to edit the text using a widget implementing the GtkCellEditable interface, e.g. GtkEntry. To make a cell renderer activatable or editable, you have to implement the GtkCellRendererClass.activate or GtkCellRendererClass.start_editing virtual functions, respectively.

    Many properties of GtkCellRenderer and its subclasses have a corresponding “set” property, e.g. “cell-background-set” corresponds to “cell-background”. These “set” properties reflect whether a property has been set or not. You should not set them independently.

    The CellRendererRef type acts as a lightweight Swift reference to an underlying GtkCellRenderer instance. It exposes methods that can operate on this data type through CellRendererProtocol conformance. Use CellRendererRef only as an unowned reference to an existing GtkCellRenderer instance.

    See more

    Declaration

    Swift

    public struct CellRendererRef : CellRendererProtocol, GWeakCapturing

CellRendererAccel Class

  • Renders a keyboard accelerator in a cell

    GtkCellRendererAccel displays a keyboard accelerator (i.e. a key combination like Control + a). If the cell renderer is editable, the accelerator can be changed by simply typing the new combination.

    The CellRendererAccelRef type acts as a lightweight Swift reference to an underlying GtkCellRendererAccel instance. It exposes methods that can operate on this data type through CellRendererAccelProtocol conformance. Use CellRendererAccelRef only as an unowned reference to an existing GtkCellRendererAccel instance.

    See more

    Declaration

    Swift

    public struct CellRendererAccelRef : CellRendererAccelProtocol, GWeakCapturing

CellRendererCombo Class

  • Renders a combobox in a cell

    GtkCellRendererCombo renders text in a cell like GtkCellRendererText from which it is derived. But while GtkCellRendererText offers a simple entry to edit the text, GtkCellRendererCombo offers a GtkComboBox widget to edit the text. The values to display in the combo box are taken from the tree model specified in the GtkCellRendererCombo:model property.

    The combo cell renderer takes care of adding a text cell renderer to the combo box and sets it to display the column specified by its GtkCellRendererCombo:text-column property. Further properties of the combo box can be set in a handler for the GtkCellRendererediting-started`` signal.

    The CellRendererComboRef type acts as a lightweight Swift reference to an underlying GtkCellRendererCombo instance. It exposes methods that can operate on this data type through CellRendererComboProtocol conformance. Use CellRendererComboRef only as an unowned reference to an existing GtkCellRendererCombo instance.

    See more

    Declaration

    Swift

    public struct CellRendererComboRef : CellRendererComboProtocol, GWeakCapturing

CellRendererPixbuf Class

  • Renders a pixbuf in a cell

    A GtkCellRendererPixbuf can be used to render an image in a cell. It allows to render either a given GdkPixbuf (set via the GtkCellRendererPixbuf:pixbuf property) or a named icon (set via the GtkCellRendererPixbuf:icon-name property).

    To support the tree view, GtkCellRendererPixbuf also supports rendering two alternative pixbufs, when the GtkCellRenderer:is-expander property is true. If the GtkCellRenderer:is-expanded property is true and the GtkCellRendererPixbuf:pixbuf-expander-open property is set to a pixbuf, it renders that pixbuf, if the GtkCellRenderer:is-expanded property is false and the GtkCellRendererPixbuf:pixbuf-expander-closed property is set to a pixbuf, it renders that one.

    The CellRendererPixbufRef type acts as a lightweight Swift reference to an underlying GtkCellRendererPixbuf instance. It exposes methods that can operate on this data type through CellRendererPixbufProtocol conformance. Use CellRendererPixbufRef only as an unowned reference to an existing GtkCellRendererPixbuf instance.

    See more

    Declaration

    Swift

    public struct CellRendererPixbufRef : CellRendererPixbufProtocol, GWeakCapturing

CellRendererProgress Class

  • Renders numbers as progress bars

    GtkCellRendererProgress renders a numeric value as a progress par in a cell. Additionally, it can display a text on top of the progress bar.

    The CellRendererProgressRef type acts as a lightweight Swift reference to an underlying GtkCellRendererProgress instance. It exposes methods that can operate on this data type through CellRendererProgressProtocol conformance. Use CellRendererProgressRef only as an unowned reference to an existing GtkCellRendererProgress instance.

    See more

    Declaration

    Swift

    public struct CellRendererProgressRef : CellRendererProgressProtocol, GWeakCapturing

CellRendererSpin Class

  • Renders a spin button in a cell

    GtkCellRendererSpin renders text in a cell like GtkCellRendererText from which it is derived. But while GtkCellRendererText offers a simple entry to edit the text, GtkCellRendererSpin offers a GtkSpinButton widget. Of course, that means that the text has to be parseable as a floating point number.

    The range of the spinbutton is taken from the adjustment property of the cell renderer, which can be set explicitly or mapped to a column in the tree model, like all properties of cell renders. GtkCellRendererSpin also has properties for the GtkCellRendererSpin:climb-rate and the number of GtkCellRendererSpin:digits to display. Other GtkSpinButton properties can be set in a handler for the GtkCellRendererediting-started`` signal.

    The GtkCellRendererSpin cell renderer was added in GTK 2.10.

    The CellRendererSpinRef type acts as a lightweight Swift reference to an underlying GtkCellRendererSpin instance. It exposes methods that can operate on this data type through CellRendererSpinProtocol conformance. Use CellRendererSpinRef only as an unowned reference to an existing GtkCellRendererSpin instance.

    See more

    Declaration

    Swift

    public struct CellRendererSpinRef : CellRendererSpinProtocol, GWeakCapturing

CellRendererSpinner Class

  • Renders a spinning animation in a cell

    GtkCellRendererSpinner renders a spinning animation in a cell, very similar to GtkSpinner. It can often be used as an alternative to a GtkCellRendererProgress for displaying indefinite activity, instead of actual progress.

    To start the animation in a cell, set the GtkCellRendererSpinner:active property to true and increment the GtkCellRendererSpinner:pulse property at regular intervals. The usual way to set the cell renderer properties for each cell is to bind them to columns in your tree model using e.g. gtk_tree_view_column_add_attribute().

    The CellRendererSpinnerRef type acts as a lightweight Swift reference to an underlying GtkCellRendererSpinner instance. It exposes methods that can operate on this data type through CellRendererSpinnerProtocol conformance. Use CellRendererSpinnerRef only as an unowned reference to an existing GtkCellRendererSpinner instance.

    See more

    Declaration

    Swift

    public struct CellRendererSpinnerRef : CellRendererSpinnerProtocol, GWeakCapturing

CellRendererText Class

  • Renders text in a cell

    A GtkCellRendererText renders a given text in its cell, using the font, color and style information provided by its properties. The text will be ellipsized if it is too long and the GtkCellRendererText:ellipsize property allows it.

    If the GtkCellRenderer:mode is GTK_CELL_RENDERER_MODE_EDITABLE, the GtkCellRendererText allows to edit its text using an entry.

    The CellRendererTextRef type acts as a lightweight Swift reference to an underlying GtkCellRendererText instance. It exposes methods that can operate on this data type through CellRendererTextProtocol conformance. Use CellRendererTextRef only as an unowned reference to an existing GtkCellRendererText instance.

    See more

    Declaration

    Swift

    public struct CellRendererTextRef : CellRendererTextProtocol, GWeakCapturing

CellRendererToggle Class

  • Renders a toggle button in a cell

    GtkCellRendererToggle renders a toggle button in a cell. The button is drawn as a radio or a checkbutton, depending on the GtkCellRendererToggle:radio property. When activated, it emits the GtkCellRendererToggletoggled`` signal.

    The CellRendererToggleRef type acts as a lightweight Swift reference to an underlying GtkCellRendererToggle instance. It exposes methods that can operate on this data type through CellRendererToggleProtocol conformance. Use CellRendererToggleRef only as an unowned reference to an existing GtkCellRendererToggle instance.

    See more

    Declaration

    Swift

    public struct CellRendererToggleRef : CellRendererToggleProtocol, GWeakCapturing

CellView Class

  • A widget displaying a single row of a GtkTreeModel

    A GtkCellView displays a single row of a GtkTreeModel using a GtkCellArea and GtkCellAreaContext. A GtkCellAreaContext can be provided to the GtkCellView at construction time in order to keep the cellview in context of a group of cell views, this ensures that the renderers displayed will be properly aligned with each other (like the aligned cells in the menus of GtkComboBox).

    GtkCellView is GtkOrientable in order to decide in which orientation the underlying GtkCellAreaContext should be allocated. Taking the GtkComboBox menu as an example, cellviews should be oriented horizontally if the menus are listed top-to-bottom and thus all share the same width but may have separate individual heights (left-to-right menus should be allocated vertically since they all share the same height but may have variable widths).

    CSS nodes

    GtkCellView has a single CSS node with name cellview.

    The CellViewRef type acts as a lightweight Swift reference to an underlying GtkCellView instance. It exposes methods that can operate on this data type through CellViewProtocol conformance. Use CellViewRef only as an unowned reference to an existing GtkCellView instance.

    See more

    Declaration

    Swift

    public struct CellViewRef : CellViewProtocol, GWeakCapturing

CenterBox Class

  • GtkCenterBox arranges three children in a row, keeping the middle child centered as well as possible.

    An example GtkCenterBox

    To add children to GtkCenterBox, use [methodGtk.CenterBox.set_start_widget], [methodGtk.CenterBox.set_center_widget] and [methodGtk.CenterBox.set_end_widget].

    The sizing and positioning of children can be influenced with the align and expand properties of the children.

    GtkCenterBox as GtkBuildable

    The GtkCenterBox implementation of the GtkBuildable interface supports placing children in the 3 positions by specifying “start”, “center” or “end” as the “type” attribute of a <child> element.

    CSS nodes

    GtkCenterBox uses a single CSS node with the name “box”,

    The first child of the GtkCenterBox will be allocated depending on the text direction, i.e. in left-to-right layouts it will be allocated on the left and in right-to-left layouts on the right.

    In vertical orientation, the nodes of the children are arranged from top to bottom.

    Accessibility

    GtkCenterBox uses the GTK_ACCESSIBLE_ROLE_GROUP role.

    The CenterBoxRef type acts as a lightweight Swift reference to an underlying GtkCenterBox instance. It exposes methods that can operate on this data type through CenterBoxProtocol conformance. Use CenterBoxRef only as an unowned reference to an existing GtkCenterBox instance.

    See more

    Declaration

    Swift

    public struct CenterBoxRef : CenterBoxProtocol, GWeakCapturing

CenterLayout Class

  • GtkCenterLayout is a layout manager that manages up to three children.

    The start widget is allocated at the start of the layout (left in left-to-right locales and right in right-to-left ones), and the end widget at the end.

    The center widget is centered regarding the full width of the layout’s.

    The CenterLayoutRef type acts as a lightweight Swift reference to an underlying GtkCenterLayout instance. It exposes methods that can operate on this data type through CenterLayoutProtocol conformance. Use CenterLayoutRef only as an unowned reference to an existing GtkCenterLayout instance.

    See more

    Declaration

    Swift

    public struct CenterLayoutRef : CenterLayoutProtocol, GWeakCapturing

CheckButton Class

  • A GtkCheckButton places a label next to an indicator.

    Example GtkCheckButtons

    A GtkCheckButton is created by calling either [ctorGtk.CheckButton.new] or [ctorGtk.CheckButton.new_with_label].

    The state of a GtkCheckButton can be set specifically using [methodGtk.CheckButton.set_active], and retrieved using [methodGtk.CheckButton.get_active].

    Inconsistent state

    In addition to “on” and “off”, check buttons can be an “in between” state that is neither on nor off. This can be used e.g. when the user has selected a range of elements (such as some text or spreadsheet cells) that are affected by a check button, and the current values in that range are inconsistent.

    To set a GtkCheckButton to inconsistent state, use [methodGtk.CheckButton.set_inconsistent].

    Grouping

    Check buttons can be grouped together, to form mutually exclusive groups - only one of the buttons can be toggled at a time, and toggling another one will switch the currently toggled one off.

    Grouped check buttons use a different indicator, and are commonly referred to as radio buttons.

    Example GtkCheckButtons

    To add a GtkCheckButton to a group, use [methodGtk.CheckButton.set_group].

    CSS nodes

    checkbutton[.text-button]
    ├── check
    ╰── [label]
    

    A GtkCheckButton has a main node with name checkbutton. If the [propertyGtk.CheckButton:label] property is set, it contains a label child. The indicator node is named check when no group is set, and radio if the checkbutton is grouped together with other checkbuttons.

    Accessibility

    GtkCheckButton uses the GTK_ACCESSIBLE_ROLE_CHECKBOX role.

    The CheckButtonRef type acts as a lightweight Swift reference to an underlying GtkCheckButton instance. It exposes methods that can operate on this data type through CheckButtonProtocol conformance. Use CheckButtonRef only as an unowned reference to an existing GtkCheckButton instance.

    See more

    Declaration

    Swift

    public struct CheckButtonRef : CheckButtonProtocol, GWeakCapturing

ClosureExpression Class

  • An expression using a custom GClosure to compute the value from its parameters.

    The ClosureExpressionRef type acts as a lightweight Swift reference to an underlying GtkClosureExpression instance. It exposes methods that can operate on this data type through ClosureExpressionProtocol conformance. Use ClosureExpressionRef only as an unowned reference to an existing GtkClosureExpression instance.

    See more

    Declaration

    Swift

    public struct ClosureExpressionRef : ClosureExpressionProtocol

ColorButton Class

  • The GtkColorButton allows to open a color chooser dialog to change the color.

    An example GtkColorButton

    It is suitable widget for selecting a color in a preference dialog.

    CSS nodes

    colorbutton
    ╰── button.color
        ╰── [content]
    

    GtkColorButton has a single CSS node with name colorbutton which contains a button node. To differentiate it from a plain GtkButton, it gets the .color style class.

    The ColorButtonRef type acts as a lightweight Swift reference to an underlying GtkColorButton instance. It exposes methods that can operate on this data type through ColorButtonProtocol conformance. Use ColorButtonRef only as an unowned reference to an existing GtkColorButton instance.

    See more

    Declaration

    Swift

    public struct ColorButtonRef : ColorButtonProtocol, GWeakCapturing

ColorChooserDialog Class

  • A dialog for choosing a color.

    An example GtkColorChooserDialog

    GtkColorChooserDialog implements the [ifaceGtk.ColorChooser] interface and does not provide much API of its own.

    To create a GtkColorChooserDialog, use [ctorGtk.ColorChooserDialog.new].

    To change the initially selected color, use [methodGtk.ColorChooser.set_rgba]. To get the selected color use [methodGtk.ColorChooser.get_rgba].

    The ColorChooserDialogRef type acts as a lightweight Swift reference to an underlying GtkColorChooserDialog instance. It exposes methods that can operate on this data type through ColorChooserDialogProtocol conformance. Use ColorChooserDialogRef only as an unowned reference to an existing GtkColorChooserDialog instance.

    See more

    Declaration

    Swift

    public struct ColorChooserDialogRef : ColorChooserDialogProtocol, GWeakCapturing

ColorChooserWidget Class

  • The GtkColorChooserWidget widget lets the user select a color.

    By default, the chooser presents a predefined palette of colors, plus a small number of settable custom colors. It is also possible to select a different color with the single-color editor.

    To enter the single-color editing mode, use the context menu of any color of the palette, or use the ‘+’ button to add a new custom color.

    The chooser automatically remembers the last selection, as well as custom colors.

    To create a GtkColorChooserWidget, use [ctorGtk.ColorChooserWidget.new].

    To change the initially selected color, use [methodGtk.ColorChooser.set_rgba]. To get the selected color use [methodGtk.ColorChooser.get_rgba].

    The GtkColorChooserWidget is used in the [classGtk.ColorChooserDialog] to provide a dialog for selecting colors.

    CSS names

    GtkColorChooserWidget has a single CSS node with name colorchooser.

    The ColorChooserWidgetRef type acts as a lightweight Swift reference to an underlying GtkColorChooserWidget instance. It exposes methods that can operate on this data type through ColorChooserWidgetProtocol conformance. Use ColorChooserWidgetRef only as an unowned reference to an existing GtkColorChooserWidget instance.

    See more

    Declaration

    Swift

    public struct ColorChooserWidgetRef : ColorChooserWidgetProtocol, GWeakCapturing

ColumnView Class

  • GtkColumnView presents a large dynamic list of items using multiple columns with headers.

    GtkColumnView uses the factories of its columns to generate a cell widget for each column, for each visible item and displays them together as the row for this item.

    The [propertyGtk.ColumnView:show-row-separators] and [propertyGtk.ColumnView:show-column-separators] properties offer a simple way to display separators between the rows or columns.

    GtkColumnView allows the user to select items according to the selection characteristics of the model. For models that allow multiple selected items, it is possible to turn on rubberband selection, using [propertyGtk.ColumnView:enable-rubberband].

    The column view supports sorting that can be customized by the user by clicking on column headers. To set this up, the GtkSorter returned by [methodGtk.ColumnView.get_sorter] must be attached to a sort model for the data that the view is showing, and the columns must have sorters attached to them by calling [methodGtk.ColumnViewColumn.set_sorter]. The initial sort order can be set with [methodGtk.ColumnView.sort_by_column].

    The column view also supports interactive resizing and reordering of columns, via Drag-and-Drop of the column headers. This can be enabled or disabled with the [propertyGtk.ColumnView:reorderable] and [propertyGtk.ColumnViewColumn:resizable] properties.

    To learn more about the list widget framework, see the overview.

    CSS nodes

    columnview[.column-separators][.rich-list][.navigation-sidebar][.data-table]
    ├── header
       ├── &lt;column header&gt;
       
       ╰── &lt;column header&gt;
    
    ├── listview
    
    
    ╰── [rubberband]
    

    GtkColumnView uses a single CSS node named columnview. It may carry the .column-separators style class, when [propertyGtk.ColumnView:show-column-separators] property is set. Header widgets appear below a node with name header. The rows are contained in a GtkListView widget, so there is a listview node with the same structure as for a standalone GtkListView widget. If [propertyGtk.ColumnView:show-row-separators] is set, it will be passed on to the list view, causing its CSS node to carry the .separators style class. For rubberband selection, a node with name rubberband is used.

    The main columnview node may also carry style classes to select the style of list presentation: .rich-list, .navigation-sidebar or .data-table.

    Accessibility

    GtkColumnView uses the GTK_ACCESSIBLE_ROLE_TREE_GRID role, header title widgets are using the GTK_ACCESSIBLE_ROLE_COLUMN_HEADER role. The row widgets are using the GTK_ACCESSIBLE_ROLE_ROW role, and individual cells are using the GTK_ACCESSIBLE_ROLE_GRID_CELL role

    The ColumnViewRef type acts as a lightweight Swift reference to an underlying GtkColumnView instance. It exposes methods that can operate on this data type through ColumnViewProtocol conformance. Use ColumnViewRef only as an unowned reference to an existing GtkColumnView instance.

    See more

    Declaration

    Swift

    public struct ColumnViewRef : ColumnViewProtocol, GWeakCapturing

ColumnViewColumn Class

  • GtkColumnViewColumn represents the columns being added to GtkColumnView.

    The main ingredient for a GtkColumnViewColumn is the GtkListItemFactory that tells the columnview how to create cells for this column from items in the model.

    Columns have a title, and can optionally have a header menu set with [methodGtk.ColumnViewColumn.set_header_menu].

    A sorter can be associated with a column using [methodGtk.ColumnViewColumn.set_sorter], to let users influence sorting by clicking on the column header.

    The ColumnViewColumnRef type acts as a lightweight Swift reference to an underlying GtkColumnViewColumn instance. It exposes methods that can operate on this data type through ColumnViewColumnProtocol conformance. Use ColumnViewColumnRef only as an unowned reference to an existing GtkColumnViewColumn instance.

    See more

    Declaration

    Swift

    public struct ColumnViewColumnRef : ColumnViewColumnProtocol, GWeakCapturing

ComboBox Class

  • A GtkComboBox is a widget that allows the user to choose from a list of valid choices.

    An example GtkComboBox

    The GtkComboBox displays the selected choice; when activated, the GtkComboBox displays a popup which allows the user to make a new choice.

    The GtkComboBox uses the model-view pattern; the list of valid choices is specified in the form of a tree model, and the display of the choices can be adapted to the data in the model by using cell renderers, as you would in a tree view. This is possible since GtkComboBox implements the [ifaceGtk.CellLayout] interface. The tree model holding the valid choices is not restricted to a flat list, it can be a real tree, and the popup will reflect the tree structure.

    To allow the user to enter values not in the model, the [propertyGtk.ComboBox:has-entry] property allows the GtkComboBox to contain a [classGtk.Entry]. This entry can be accessed by calling [methodGtk.ComboBox.get_child] on the combo box.

    For a simple list of textual choices, the model-view API of GtkComboBox can be a bit overwhelming. In this case, [classGtk.ComboBoxText] offers a simple alternative. Both GtkComboBox and GtkComboBoxText can contain an entry.

    CSS nodes

    combobox
    ├── box.linked
       ╰── button.combo
           ╰── box
               ├── cellview
               ╰── arrow
    ╰── window.popup
    

    A normal combobox contains a box with the .linked class, a button with the .combo class and inside those buttons, there are a cellview and an arrow.

    combobox
    ├── box.linked
       ├── entry.combo
       ╰── button.combo
           ╰── box
               ╰── arrow
    ╰── window.popup
    

    A GtkComboBox with an entry has a single CSS node with name combobox. It contains a box with the .linked class. That box contains an entry and a button, both with the .combo class added. The button also contains another node with name arrow.

    Accessibility

    GtkComboBox uses the GTK_ACCESSIBLE_ROLE_COMBO_BOX role.

    The ComboBoxRef type acts as a lightweight Swift reference to an underlying GtkComboBox instance. It exposes methods that can operate on this data type through ComboBoxProtocol conformance. Use ComboBoxRef only as an unowned reference to an existing GtkComboBox instance.

    See more

    Declaration

    Swift

    public struct ComboBoxRef : ComboBoxProtocol, GWeakCapturing

ComboBoxText Class

  • A GtkComboBoxText is a simple variant of GtkComboBox for text-only use cases.

    An example GtkComboBoxText

    GtkComboBoxText hides the model-view complexity of GtkComboBox.

    To create a GtkComboBoxText, use [ctorGtk.ComboBoxText.new] or [ctorGtk.ComboBoxText.new_with_entry].

    You can add items to a GtkComboBoxText with [methodGtk.ComboBoxText.append_text], [methodGtk.ComboBoxText.insert_text] or [methodGtk.ComboBoxText.prepend_text] and remove options with [methodGtk.ComboBoxText.remove].

    If the GtkComboBoxText contains an entry (via the [propertyGtk.ComboBox:has-entry] property), its contents can be retrieved using [methodGtk.ComboBoxText.get_active_text].

    You should not call [methodGtk.ComboBox.set_model] or attempt to pack more cells into this combo box via its [ifaceGtk.CellLayout] interface.

    GtkComboBoxText as GtkBuildable

    The GtkComboBoxText implementation of the GtkBuildable interface supports adding items directly using the <items> element and specifying <item> elements for each item. Each <item> element can specify the “id” corresponding to the appended text and also supports the regular translation attributes “translatable”, “context” and “comments”.

    Here is a UI definition fragment specifying GtkComboBoxText items:

    &lt;object class="GtkComboBoxText"&gt;
      &lt;items&gt;
        &lt;item translatable="yes" id="factory"&gt;Factory&lt;/item&gt;
        &lt;item translatable="yes" id="home"&gt;Home&lt;/item&gt;
        &lt;item translatable="yes" id="subway"&gt;Subway&lt;/item&gt;
      &lt;/items&gt;
    &lt;/object&gt;
    

    CSS nodes

    combobox
    ╰── box.linked
        ├── entry.combo
        ├── button.combo
        ╰── window.popup
    

    GtkComboBoxText has a single CSS node with name combobox. It adds the style class .combo to the main CSS nodes of its entry and button children, and the .linked class to the node of its internal box.

    The ComboBoxTextRef type acts as a lightweight Swift reference to an underlying GtkComboBoxText instance. It exposes methods that can operate on this data type through ComboBoxTextProtocol conformance. Use ComboBoxTextRef only as an unowned reference to an existing GtkComboBoxText instance.

    See more

    Declaration

    Swift

    public struct ComboBoxTextRef : ComboBoxTextProtocol, GWeakCapturing

ConstantExpression Class

  • A constant value in a GtkExpression.

    The ConstantExpressionRef type acts as a lightweight Swift reference to an underlying GtkConstantExpression instance. It exposes methods that can operate on this data type through ConstantExpressionProtocol conformance. Use ConstantExpressionRef only as an unowned reference to an existing GtkConstantExpression instance.

    See more

    Declaration

    Swift

    public struct ConstantExpressionRef : ConstantExpressionProtocol

Constraint Class

  • GtkConstraint describes a constraint between attributes of two widgets, expressed as a linear equation.

    The typical equation for a constraint is:

      target.target_attr = source.source_attr × multiplier + constant
    

    Each GtkConstraint is part of a system that will be solved by a [classGtk.ConstraintLayout] in order to allocate and position each child widget or guide.

    The source and target, as well as their attributes, of a GtkConstraint instance are immutable after creation.

    The ConstraintRef type acts as a lightweight Swift reference to an underlying GtkConstraint instance. It exposes methods that can operate on this data type through ConstraintProtocol conformance. Use ConstraintRef only as an unowned reference to an existing GtkConstraint instance.

    See more

    Declaration

    Swift

    public struct ConstraintRef : ConstraintProtocol, GWeakCapturing

ConstraintGuide Class

  • A GtkConstraintGuide is an invisible layout element in a GtkConstraintLayout.

    The GtkConstraintLayout treats guides like widgets. They can be used as the source or target of a GtkConstraint.

    Guides have a minimum, maximum and natural size. Depending on the constraints that are applied, they can act like a guideline that widgets can be aligned to, or like flexible space.

    Unlike a GtkWidget, a GtkConstraintGuide will not be drawn.

    The ConstraintGuideRef type acts as a lightweight Swift reference to an underlying GtkConstraintGuide instance. It exposes methods that can operate on this data type through ConstraintGuideProtocol conformance. Use ConstraintGuideRef only as an unowned reference to an existing GtkConstraintGuide instance.

    See more

    Declaration

    Swift

    public struct ConstraintGuideRef : ConstraintGuideProtocol, GWeakCapturing

ConstraintLayout Class

  • A layout manager using constraints to describe relations between widgets.

    GtkConstraintLayout is a layout manager that uses relations between widget attributes, expressed via [classGtk.Constraint] instances, to measure and allocate widgets.

    How do constraints work

    Constraints are objects defining the relationship between attributes of a widget; you can read the description of the [classGtk.Constraint] class to have a more in depth definition.

    By taking multiple constraints and applying them to the children of a widget using GtkConstraintLayout, it’s possible to describe complex layout policies; each constraint applied to a child or to the parent widgets contributes to the full description of the layout, in terms of parameters for resolving the value of each attribute.

    It is important to note that a layout is defined by the totality of constraints; removing a child, or a constraint, from an existing layout without changing the remaining constraints may result in an unstable or unsolvable layout.

    Constraints have an implicit “reading order”; you should start describing each edge of each child, as well as their relationship with the parent container, from the top left (or top right, in RTL languages), horizontally first, and then vertically.

    A constraint-based layout with too few constraints can become “unstable”, that is: have more than one solution. The behavior of an unstable layout is undefined.

    A constraint-based layout with conflicting constraints may be unsolvable, and lead to an unstable layout. You can use the [propertyGtk.Constraint:strength] property of [classGtk.Constraint] to “nudge” the layout towards a solution.

    GtkConstraintLayout as GtkBuildable

    GtkConstraintLayout implements the [ifaceGtk.Buildable] interface and has a custom “constraints” element which allows describing constraints in a [classGtk.Builder] UI file.

    An example of a UI definition fragment specifying a constraint:

      &lt;object class="GtkConstraintLayout"&gt;
        &lt;constraints&gt;
          &lt;constraint target="button" target-attribute="start"
                      relation="eq"
                      source="super" source-attribute="start"
                      constant="12"
                      strength="required" /&gt;
          &lt;constraint target="button" target-attribute="width"
                      relation="ge"
                      constant="250"
                      strength="strong" /&gt;
        &lt;/constraints&gt;
      &lt;/object&gt;
    

    The definition above will add two constraints to the GtkConstraintLayout:

    • a required constraint between the leading edge of “button” and the leading edge of the widget using the constraint layout, plus 12 pixels
    • a strong, constant constraint making the width of “button” greater than, or equal to 250 pixels

    The “target” and “target-attribute” attributes are required.

    The “source” and “source-attribute” attributes of the “constraint” element are optional; if they are not specified, the constraint is assumed to be a constant.

    The “relation” attribute is optional; if not specified, the constraint is assumed to be an equality.

    The “strength” attribute is optional; if not specified, the constraint is assumed to be required.

    The “source” and “target” attributes can be set to “super” to indicate that the constraint target is the widget using the GtkConstraintLayout.

    There can be “constant” and “multiplier” attributes.

    Additionally, the “constraints” element can also contain a description of the GtkConstraintGuides used by the layout:

      &lt;constraints&gt;
        &lt;guide min-width="100" max-width="500" name="hspace"/&gt;
        &lt;guide min-height="64" nat-height="128" name="vspace" strength="strong"/&gt;
      &lt;/constraints&gt;
    

    The “guide” element has the following optional attributes:

    • “min-width”, “nat-width”, and “max-width”, describe the minimum, natural, and maximum width of the guide, respectively
    • “min-height”, “nat-height”, and “max-height”, describe the minimum, natural, and maximum height of the guide, respectively
    • “strength” describes the strength of the constraint on the natural size of the guide; if not specified, the constraint is assumed to have a medium strength
    • “name” describes a name for the guide, useful when debugging

    Using the Visual Format Language

    Complex constraints can be described using a compact syntax called VFL, or Visual Format Language.

    The Visual Format Language describes all the constraints on a row or column, typically starting from the leading edge towards the trailing one. Each element of the layout is composed by “views”, which identify a [ifaceGtk.ConstraintTarget].

    For instance:

      [button]-[textField]
    

    Describes a constraint that binds the trailing edge of “button” to the leading edge of “textField”, leaving a default space between the two.

    Using VFL is also possible to specify predicates that describe constraints on attributes like width and height:

      // Width must be greater than, or equal to 50
      [`button(>=50)`]
    
      // Width of button1 must be equal to width of button2
      [`button1(==button2)`]
    

    The default orientation for a VFL description is horizontal, unless otherwise specified:

      // horizontal orientation, default attribute: width
      H:[`button(>=150)`]
    
      // vertical orientation, default attribute: height
      V:[`button1(==button2)`]
    

    It’s also possible to specify multiple predicates, as well as their strength:

      // minimum width of button must be 150
      // natural width of button can be 250
      [`button(>=150@required, ==250@medium)`]
    

    Finally, it’s also possible to use simple arithmetic operators:

      // width of button1 must be equal to width of button2
      // divided by 2 plus 12
      [`button1(button2 / 2 + 12)`]
    

    The ConstraintLayoutRef type acts as a lightweight Swift reference to an underlying GtkConstraintLayout instance. It exposes methods that can operate on this data type through ConstraintLayoutProtocol conformance. Use ConstraintLayoutRef only as an unowned reference to an existing GtkConstraintLayout instance.

    See more

    Declaration

    Swift

    public struct ConstraintLayoutRef : ConstraintLayoutProtocol, GWeakCapturing

ConstraintLayoutChild Class

  • GtkLayoutChild subclass for children in a GtkConstraintLayout.

    The ConstraintLayoutChildRef type acts as a lightweight Swift reference to an underlying GtkConstraintLayoutChild instance. It exposes methods that can operate on this data type through ConstraintLayoutChildProtocol conformance. Use ConstraintLayoutChildRef only as an unowned reference to an existing GtkConstraintLayoutChild instance.

    See more

    Declaration

    Swift

    public struct ConstraintLayoutChildRef : ConstraintLayoutChildProtocol, GWeakCapturing

CssProvider Class

  • GtkCssProvider is an object implementing the GtkStyleProvider interface for CSS.

    It is able to parse CSS-like input in order to style widgets.

    An application can make GTK parse a specific CSS style sheet by calling [methodGtk.CssProvider.load_from_file] or [methodGtk.CssProvider.load_from_resource] and adding the provider with [methodGtk.StyleContext.add_provider] or [funcGtk.StyleContext.add_provider_for_display].

    In addition, certain files will be read when GTK is initialized. First, the file $XDG_CONFIG_HOME/gtk-4.0/gtk.css is loaded if it exists. Then, GTK loads the first existing file among XDG_DATA_HOME/themes/THEME/gtk-VERSION/gtk-VARIANT.css, $HOME/.themes/THEME/gtk-VERSION/gtk-VARIANT.css, $XDG_DATA_DIRS/themes/THEME/gtk-VERSION/gtk-VARIANT.css and DATADIR/share/themes/THEME/gtk-VERSION/gtk-VARIANT.css, where THEME is the name of the current theme (see the [propertyGtk.Settings:gtk-theme-name] setting), VARIANT is the variant to load (see the [propertyGtk.Settings:gtk-application-prefer-dark-theme] setting), DATADIR is the prefix configured when GTK was compiled (unless overridden by the GTK_DATA_PREFIX environment variable), and VERSION is the GTK version number. If no file is found for the current version, GTK tries older versions all the way back to 4.0.

    To track errors while loading CSS, connect to the [signalGtk.CssProvider::parsing-error] signal.

    The CssProviderRef type acts as a lightweight Swift reference to an underlying GtkCssProvider instance. It exposes methods that can operate on this data type through CssProviderProtocol conformance. Use CssProviderRef only as an unowned reference to an existing GtkCssProvider instance.

    See more

    Declaration

    Swift

    public struct CssProviderRef : CssProviderProtocol, GWeakCapturing

CustomFilter Class

  • GtkCustomFilter determines whether to include items with a callback.

    The CustomFilterRef type acts as a lightweight Swift reference to an underlying GtkCustomFilter instance. It exposes methods that can operate on this data type through CustomFilterProtocol conformance. Use CustomFilterRef only as an unowned reference to an existing GtkCustomFilter instance.

    See more

    Declaration

    Swift

    public struct CustomFilterRef : CustomFilterProtocol, GWeakCapturing

CustomLayout Class

  • GtkCustomLayout uses closures for size negotiation.

    A GtkCustomLayoutuses closures matching to the old GtkWidget virtual functions for size negotiation, as a convenience API to ease the porting towards the corresponding `GtkLayoutManager virtual functions.

    The CustomLayoutRef type acts as a lightweight Swift reference to an underlying GtkCustomLayout instance. It exposes methods that can operate on this data type through CustomLayoutProtocol conformance. Use CustomLayoutRef only as an unowned reference to an existing GtkCustomLayout instance.

    See more

    Declaration

    Swift

    public struct CustomLayoutRef : CustomLayoutProtocol, GWeakCapturing

CustomSorter Class

  • GtkCustomSorter is a GtkSorter implementation that sorts via a callback function.

    The CustomSorterRef type acts as a lightweight Swift reference to an underlying GtkCustomSorter instance. It exposes methods that can operate on this data type through CustomSorterProtocol conformance. Use CustomSorterRef only as an unowned reference to an existing GtkCustomSorter instance.

    See more

    Declaration

    Swift

    public struct CustomSorterRef : CustomSorterProtocol, GWeakCapturing

Dialog Class

  • Dialogs are a convenient way to prompt the user for a small amount of input.

    An example GtkDialog

    Typical uses are to display a message, ask a question, or anything else that does not require extensive effort on the user’s part.

    The main area of a GtkDialog is called the “content area”, and is yours to populate with widgets such a GtkLabel or GtkEntry, to present your information, questions, or tasks to the user.

    In addition, dialogs allow you to add “action widgets”. Most commonly, action widgets are buttons. Depending on the platform, action widgets may be presented in the header bar at the top of the window, or at the bottom of the window. To add action widgets, create your GtkDialog using [ctorGtk.Dialog.new_with_buttons], or use [methodGtk.Dialog.add_button], [methodGtk.Dialog.add_buttons], or [methodGtk.Dialog.add_action_widget].

    GtkDialogs uses some heuristics to decide whether to add a close button to the window decorations. If any of the action buttons use the response ID GTK_RESPONSE_CLOSE or GTK_RESPONSE_CANCEL, the close button is omitted.

    Clicking a button that was added as an action widget will emit the [signalGtk.Dialog::response] signal with a response ID that you specified. GTK will never assign a meaning to positive response IDs; these are entirely user-defined. But for convenience, you can use the response IDs in the [enumGtk.ResponseType] enumeration (these all have values less than zero). If a dialog receives a delete event, the [signalGtk.Dialog::response] signal will be emitted with the GTK_RESPONSE_DELETE_EVENT response ID.

    Dialogs are created with a call to [ctorGtk.Dialog.new] or [ctorGtk.Dialog.new_with_buttons]. The latter is recommended; it allows you to set the dialog title, some convenient flags, and add buttons.

    A “modal” dialog (that is, one which freezes the rest of the application from user input), can be created by calling [methodGtk.Window.set_modal] on the dialog. When using [ctorGtk.Dialog.new_with_buttons], you can also pass the GTK_DIALOG_MODAL flag to make a dialog modal.

    For the simple dialog in the following example, a [classGtk.MessageDialog] would save some effort. But you’d need to create the dialog contents manually if you had more than a simple message in the dialog.

    An example for simple GtkDialog usage:

    // Function to open a dialog box with a message
    void
    quick_message (GtkWindow *parent, char *message)
    {
     GtkWidget *dialog, *label, *content_area;
     GtkDialogFlags flags;
    
     // Create the widgets
     flags = GTK_DIALOG_DESTROY_WITH_PARENT;
     dialog = gtk_dialog_new_with_buttons ("Message",
                                           parent,
                                           flags,
                                           `_("_OK")`,
                                           GTK_RESPONSE_NONE,
                                           NULL);
     content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
     label = gtk_label_new (message);
    
     // Ensure that the dialog box is destroyed when the user responds
    
     g_signal_connect_swapped (dialog,
                               "response",
                               G_CALLBACK (gtk_window_destroy),
                               dialog);
    
     // Add the label, and show everything we’ve added
    
     gtk_box_append (GTK_BOX (content_area), label);
     gtk_widget_show (dialog);
    }
    

    GtkDialog as GtkBuildable

    The GtkDialog implementation of the GtkBuildable interface exposes the content_area as an internal child with the name “content_area”.

    GtkDialog supports a custom &lt;action-widgets&gt; element, which can contain multiple &lt;action-widget&gt; elements. The “response” attribute specifies a numeric response, and the content of the element is the id of widget (which should be a child of the dialogs action_area). To mark a response as default, set the “default” attribute of the &lt;action-widget&gt; element to true.

    GtkDialog supports adding action widgets by specifying “action” as the “type” attribute of a &lt;child&gt; element. The widget will be added either to the action area or the headerbar of the dialog, depending on the “use-header-bar” property. The response id has to be associated with the action widget using the &lt;action-widgets&gt; element.

    An example of a GtkDialog UI definition fragment:

    &lt;object class="GtkDialog" id="dialog1"&gt;
      &lt;child type="action"&gt;
        &lt;object class="GtkButton" id="button_cancel"/&gt;
      &lt;/child&gt;
      &lt;child type="action"&gt;
        &lt;object class="GtkButton" id="button_ok"&gt;
        &lt;/object&gt;
      &lt;/child&gt;
      &lt;action-widgets&gt;
        &lt;action-widget response="cancel"&gt;button_cancel&lt;/action-widget&gt;
        &lt;action-widget response="ok" default="true"&gt;button_ok&lt;/action-widget&gt;
      &lt;/action-widgets&gt;
    &lt;/object&gt;
    

    Accessibility

    GtkDialog uses the GTK_ACCESSIBLE_ROLE_DIALOG role.

    The DialogRef type acts as a lightweight Swift reference to an underlying GtkDialog instance. It exposes methods that can operate on this data type through DialogProtocol conformance. Use DialogRef only as an unowned reference to an existing GtkDialog instance.

    See more

    Declaration

    Swift

    public struct DialogRef : DialogProtocol, GWeakCapturing

CellAreaClass Record

  • The CellAreaClassRef type acts as a lightweight Swift reference to an underlying GtkCellAreaClass instance. It exposes methods that can operate on this data type through CellAreaClassProtocol conformance. Use CellAreaClassRef only as an unowned reference to an existing GtkCellAreaClass instance.

    See more

    Declaration

    Swift

    public struct CellAreaClassRef : CellAreaClassProtocol

CellAreaContextClass Record

CellEditableIface Record

CellLayoutIface Record

CellRendererClass Record

CellRendererClassPrivate Record

CellRendererTextClass Record

CenterBoxClass Record

  • The CenterBoxClassRef type acts as a lightweight Swift reference to an underlying GtkCenterBoxClass instance. It exposes methods that can operate on this data type through CenterBoxClassProtocol conformance. Use CenterBoxClassRef only as an unowned reference to an existing GtkCenterBoxClass instance.

    See more

    Declaration

    Swift

    public struct CenterBoxClassRef : CenterBoxClassProtocol

CenterLayoutClass Record

CheckButtonClass Record

ColorChooserInterface Record

ColumnViewClass Record

ColumnViewColumnClass Record

ComboBoxClass Record

  • The ComboBoxClassRef type acts as a lightweight Swift reference to an underlying GtkComboBoxClass instance. It exposes methods that can operate on this data type through ComboBoxClassProtocol conformance. Use ComboBoxClassRef only as an unowned reference to an existing GtkComboBoxClass instance.

    See more

    Declaration

    Swift

    public struct ComboBoxClassRef : ComboBoxClassProtocol

ConstraintClass Record

ConstraintGuideClass Record

ConstraintLayoutChildClass Record

ConstraintLayoutClass Record

ConstraintTargetInterface Record

CssLocation Record

  • Represents a location in a file or other source of data parsed by the CSS engine.

    The bytes and line_bytes offsets are meant to be used to programmatically match data. The lines and line_chars offsets can be used for printing the location in a file.

    Note that the lines parameter starts from 0 and is increased whenever a CSS line break is encountered. (CSS defines the C character sequences “\r\n”, “\r”, “\n” and “\f” as newlines.) If your document uses different rules for line breaking, you might want run into problems here.

    The CssLocationRef type acts as a lightweight Swift reference to an underlying GtkCssLocation instance. It exposes methods that can operate on this data type through CssLocationProtocol conformance. Use CssLocationRef only as an unowned reference to an existing GtkCssLocation instance.

    See more

    Declaration

    Swift

    public struct CssLocationRef : CssLocationProtocol

CssProviderClass Record

CssSection Record

  • Defines a part of a CSS document.

    Because sections are nested into one another, you can use gtk_css_section_get_parent() to get the containing region.

    The CssSectionRef type acts as a lightweight Swift reference to an underlying GtkCssSection instance. It exposes methods that can operate on this data type through CssSectionProtocol conformance. Use CssSectionRef only as an unowned reference to an existing GtkCssSection instance.

    See more

    Declaration

    Swift

    public struct CssSectionRef : CssSectionProtocol

CssStyleChange Record

  • The CssStyleChangeRef type acts as a lightweight Swift reference to an underlying GtkCssStyleChange instance. It exposes methods that can operate on this data type through CssStyleChangeProtocol conformance. Use CssStyleChangeRef only as an unowned reference to an existing GtkCssStyleChange instance.

    See more

    Declaration

    Swift

    public struct CssStyleChangeRef : CssStyleChangeProtocol

CustomFilterClass Record

CustomLayoutClass Record

CustomSorterClass Record

DialogClass Record

  • The DialogClassRef type acts as a lightweight Swift reference to an underlying GtkDialogClass instance. It exposes methods that can operate on this data type through DialogClassProtocol conformance. Use DialogClassRef only as an unowned reference to an existing GtkDialogClass instance.

    See more

    Declaration

    Swift

    public struct DialogClassRef : DialogClassProtocol

CellLayout Interface

  • An interface for packing cells

    GtkCellLayout is an interface to be implemented by all objects which want to provide a GtkTreeViewColumn like API for packing cells, setting attributes and data funcs.

    One of the notable features provided by implementations of GtkCellLayout are attributes. Attributes let you set the properties in flexible ways. They can just be set to constant values like regular properties. But they can also be mapped to a column of the underlying tree model with gtk_cell_layout_set_attributes(), which means that the value of the attribute can change from cell to cell as they are rendered by the cell renderer. Finally, it is possible to specify a function with gtk_cell_layout_set_cell_data_func() that is called to determine the value of the attribute for each cell that is rendered.

    GtkCellLayouts as GtkBuildable

    Implementations of GtkCellLayout which also implement the GtkBuildable interface (GtkCellView, GtkIconView, GtkComboBox, GtkEntryCompletion, GtkTreeViewColumn) accept GtkCellRenderer objects as <child> elements in UI definitions. They support a custom <attributes> element for their children, which can contain multiple <attribute> elements. Each <attribute> element has a name attribute which specifies a property of the cell renderer; the content of the element is the attribute value.

    This is an example of a UI definition fragment specifying attributes:

    <object class="GtkCellView">
      <child>
        <object class="GtkCellRendererText"/>
        <attributes>
          <attribute name="text">0</attribute>
        </attributes>
      </child>"
    </object>
    

    Furthermore for implementations of GtkCellLayout that use a GtkCellArea to lay out cells (all GtkCellLayouts in GTK use a GtkCellArea) cell properties can also be defined in the format by specifying the custom <cell-packing> attribute which can contain multiple <property> elements defined in the normal way.

    Here is a UI definition fragment specifying cell properties:

    <object class="GtkTreeViewColumn">
      <child>
        <object class="GtkCellRendererText"/>
        <cell-packing>
          <property name="align">True</property>
          <property name="expand">False</property>
        </cell-packing>
      </child>"
    </object>
    

    Subclassing GtkCellLayout implementations

    When subclassing a widget that implements GtkCellLayout like GtkIconView or GtkComboBox, there are some considerations related to the fact that these widgets internally use a GtkCellArea. The cell area is exposed as a construct-only property by these widgets. This means that it is possible to e.g. do

    (C Language Example):

    combo = g_object_new (GTK_TYPE_COMBO_BOX, "cell-area", my_cell_area, NULL);
    

    to use a custom cell area with a combo box. But construct properties are only initialized after instance init() functions have run, which means that using functions which rely on the existence of the cell area in your subclass’ init() function will cause the default cell area to be instantiated. In this case, a provided construct property value will be ignored (with a warning, to alert you to the problem).

    (C Language Example):

    static void
    my_combo_box_init (MyComboBox *b)
    {
      GtkCellRenderer *cell;
    
      cell = gtk_cell_renderer_pixbuf_new ();
      // The following call causes the default cell area for combo boxes,
      // a GtkCellAreaBox, to be instantiated
      gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (b), cell, FALSE);
      ...
    }
    
    GtkWidget *
    my_combo_box_new (GtkCellArea *area)
    {
      // This call is going to cause a warning about area being ignored
      return g_object_new (MY_TYPE_COMBO_BOX, "cell-area", area, NULL);
    }
    

    If supporting alternative cell areas with your derived widget is not important, then this does not have to concern you. If you want to support alternative cell areas, you can do so by moving the problematic calls out of init() and into a constructor() for your class.

    The CellLayoutRef type acts as a lightweight Swift reference to an underlying GtkCellLayout instance. It exposes methods that can operate on this data type through CellLayoutProtocol conformance. Use CellLayoutRef only as an unowned reference to an existing GtkCellLayout instance.

    See more

    Declaration

    Swift

    public struct CellLayoutRef : CellLayoutProtocol

ColorChooser Interface

  • GtkColorChooser is an interface that is implemented by widgets for choosing colors.

    Depending on the situation, colors may be allowed to have alpha (translucency).

    In GTK, the main widgets that implement this interface are [classGtk.ColorChooserWidget], [classGtk.ColorChooserDialog] and [classGtk.ColorButton].

    The ColorChooserRef type acts as a lightweight Swift reference to an underlying GtkColorChooser instance. It exposes methods that can operate on this data type through ColorChooserProtocol conformance. Use ColorChooserRef only as an unowned reference to an existing GtkColorChooser instance.

    See more

    Declaration

    Swift

    public struct ColorChooserRef : ColorChooserProtocol

ConstraintTarget Interface

  • The GtkConstraintTarget interface is implemented by objects that can be used as source or target in GtkConstraints.

    Besides GtkWidget, it is also implemented by GtkConstraintGuide.

    The ConstraintTargetRef type acts as a lightweight Swift reference to an underlying GtkConstraintTarget instance. It exposes methods that can operate on this data type through ConstraintTargetProtocol conformance. Use ConstraintTargetRef only as an unowned reference to an existing GtkConstraintTarget instance.

    See more

    Declaration

    Swift

    public struct ConstraintTargetRef : ConstraintTargetProtocol

Editable Interface

  • GtkEditable is an interface for text editing widgets.

    Typical examples of editable widgets are [classGtk.Entry] and [classGtk.SpinButton]. It contains functions for generically manipulating an editable widget, a large number of action signals used for key bindings, and several signals that an application can connect to modify the behavior of a widget.

    As an example of the latter usage, by connecting the following handler to [signalGtk.Editable::insert-text], an application can convert all entry into a widget into uppercase.

    Forcing entry to uppercase.

    `include` &lt;ctype.h&gt;
    
    void
    insert_text_handler (GtkEditable *editable,
                         const char  *text,
                         int          length,
                         int         *position,
                         gpointer     data)
    {
      char *result = g_utf8_strup (text, length);
    
      g_signal_handlers_block_by_func (editable,
                                   (gpointer) insert_text_handler, data);
      gtk_editable_insert_text (editable, result, length, position);
      g_signal_handlers_unblock_by_func (editable,
                                         (gpointer) insert_text_handler, data);
    
      g_signal_stop_emission_by_name (editable, "insert_text");
    
      g_free (result);
    }
    

    Implementing GtkEditable

    The most likely scenario for implementing GtkEditable on your own widget is that you will embed a GtkText inside a complex widget, and want to delegate the editable functionality to that text widget. GtkEditable provides some utility functions to make this easy.

    In your class_init function, call [funcGtk.Editable.install_properties], passing the first available property ID:

    static void
    my_class_init (MyClass *class)
    {
      ...
      g_object_class_install_properties (object_class, NUM_PROPERTIES, props);
      gtk_editable_install_properties (object_clas, NUM_PROPERTIES);
      ...
    }
    

    In your interface_init function for the GtkEditable interface, provide an implementation for the get_delegate vfunc that returns your text widget:

    GtkEditable *
    get_editable_delegate (GtkEditable *editable)
    {
      return GTK_EDITABLE (MY_WIDGET (editable)-&gt;text_widget);
    }
    
    static void
    my_editable_init (GtkEditableInterface *iface)
    {
      iface-&gt;get_delegate = get_editable_delegate;
    }
    

    You don’t need to provide any other vfuncs. The default implementations work by forwarding to the delegate that the GtkEditableInterface.get_delegate() vfunc returns.

    In your instance_init function, create your text widget, and then call [methodGtk.Editable.init_delegate]:

    static void
    my_widget_init (MyWidget *self)
    {
      ...
      self-&gt;text_widget = gtk_text_new ();
      gtk_editable_init_delegate (GTK_EDITABLE (self));
      ...
    }
    

    In your dispose function, call [methodGtk.Editable.finish_delegate] before destroying your text widget:

    static void
    my_widget_dispose (GObject *object)
    {
      ...
      gtk_editable_finish_delegate (GTK_EDITABLE (self));
      g_clear_pointer (&self-&gt;text_widget, gtk_widget_unparent);
      ...
    }
    

    Finally, use [funcGtk.Editable.delegate_set_property] in your set_property function (and similar for get_property), to set the editable properties:

      ...
      if (gtk_editable_delegate_set_property (object, prop_id, value, pspec))
        return;
    
      switch (prop_id)
      ...
    

    It is important to note that if you create a GtkEditable that uses a delegate, the low level [signalGtk.Editable::insert-text] and [signalGtk.Editable::delete-text] signals will be propagated from the “wrapper” editable to the delegate, but they will not be propagated from the delegate to the “wrapper” editable, as they would cause an infinite recursion. If you wish to connect to the [signalGtk.Editable::insert-text] and [signalGtk.Editable::delete-text] signals, you will need to connect to them on the delegate obtained via [methodGtk.Editable.get_delegate].

    The EditableRef type acts as a lightweight Swift reference to an underlying GtkEditable instance. It exposes methods that can operate on this data type through EditableProtocol conformance. Use EditableRef only as an unowned reference to an existing GtkEditable instance.

    See more

    Declaration

    Swift

    public struct EditableRef : EditableProtocol, GWeakCapturing

DirectoryList Class

  • GtkDirectoryList is a list model that wraps g_file_enumerate_children_async().

    It presents a GListModel and fills it asynchronously with the GFileInfos returned from that function.

    Enumeration will start automatically when a the [propertyGtk.DirectoryList:file] property is set.

    While the GtkDirectoryList is being filled, the [propertyGtk.DirectoryList:loading] property will be set to true. You can listen to that property if you want to show information like a GtkSpinner or a “Loading…” text.

    If loading fails at any point, the [propertyGtk.DirectoryList:error] property will be set to give more indication about the failure.

    The GFileInfos returned from a GtkDirectoryList have the “standardfile” attribute set to the GFile they refer to. This way you can get at the file that is referred to in the same way you would via g_file_enumerator_get_child(). This means you do not need access to the GtkDirectoryList, but can access the GFile directly from the GFileInfo when operating with a GtkListView or similar.

    The DirectoryListRef type acts as a lightweight Swift reference to an underlying GtkDirectoryList instance. It exposes methods that can operate on this data type through DirectoryListProtocol conformance. Use DirectoryListRef only as an unowned reference to an existing GtkDirectoryList instance.

    See more

    Declaration

    Swift

    public struct DirectoryListRef : DirectoryListProtocol, GWeakCapturing

DragIcon Class

  • GtkDragIcon is a GtkRoot implementation for drag icons.

    A drag icon moves with the pointer during a Drag-and-Drop operation and is destroyed when the drag ends.

    To set up a drag icon and associate it with an ongoing drag operation, use [funcGtk.DragIcon.get_for_drag] to get the icon for a drag. You can then use it like any other widget and use [methodGtk.DragIcon.set_child] to set whatever widget should be used for the drag icon.

    Keep in mind that drag icons do not allow user input.

    The DragIconRef type acts as a lightweight Swift reference to an underlying GtkDragIcon instance. It exposes methods that can operate on this data type through DragIconProtocol conformance. Use DragIconRef only as an unowned reference to an existing GtkDragIcon instance.

    See more

    Declaration

    Swift

    public struct DragIconRef : DragIconProtocol, GWeakCapturing

DragSource Class

  • GtkDragSource is an event controller to initiate Drag-And-Drop operations.

    GtkDragSource can be set up with the necessary ingredients for a DND operation ahead of time. This includes the source for the data that is being transferred, in the form of a [classGdk.ContentProvider], the desired action, and the icon to use during the drag operation. After setting it up, the drag source must be added to a widget as an event controller, using [methodGtk.Widget.add_controller].

    static void
    my_widget_init (MyWidget *self)
    {
      GtkDragSource *drag_source = gtk_drag_source_new ();
    
      g_signal_connect (drag_source, "prepare", G_CALLBACK (on_drag_prepare), self);
      g_signal_connect (drag_source, "drag-begin", G_CALLBACK (on_drag_begin), self);
    
      gtk_widget_add_controller (GTK_WIDGET (self), GTK_EVENT_CONTROLLER (drag_source));
    }
    

    Setting up the content provider and icon ahead of time only makes sense when the data does not change. More commonly, you will want to set them up just in time. To do so, GtkDragSource has [signalGtk.DragSource::prepare] and [signalGtk.DragSource::drag-begin] signals.

    The prepare signal is emitted before a drag is started, and can be used to set the content provider and actions that the drag should be started with.

    static GdkContentProvider *
    on_drag_prepare (GtkDragSource *source,
                     double         x,
                     double         y,
                     MyWidget      *self)
    {
      // This widget supports two types of content: GFile objects
      // and GdkPixbuf objects; GTK will handle the serialization
      // of these types automatically
      GFile *file = my_widget_get_file (self);
      GdkPixbuf *pixbuf = my_widget_get_pixbuf (self);
    
      return gdk_content_provider_new_union ((GdkContentProvider *[2]) {
          gdk_content_provider_new_typed (G_TYPE_FILE, file),
          gdk_content_provider_new_typed (GDK_TYPE_PIXBUF, pixbuf),
        }, 2);
    }
    

    The drag-begin signal is emitted after the GdkDrag object has been created, and can be used to set up the drag icon.

    static void
    on_drag_begin (GtkDragSource *source,
                   GtkDrag       *drag,
                   MyWidget      *self)
    {
      // Set the widget as the drag icon
      GdkPaintable *paintable = gtk_widget_paintable_new (GTK_WIDGET (self));
      gtk_drag_source_set_icon (source, paintable, 0, 0);
      g_object_unref (paintable);
    }
    

    During the DND operation, GtkDragSource emits signals that can be used to obtain updates about the status of the operation, but it is not normally necessary to connect to any signals, except for one case: when the supported actions include GDK_ACTION_MOVE, you need to listen for the [signalGtk.DragSource::drag-end] signal and delete the data after it has been transferred.

    The DragSourceRef type acts as a lightweight Swift reference to an underlying GtkDragSource instance. It exposes methods that can operate on this data type through DragSourceProtocol conformance. Use DragSourceRef only as an unowned reference to an existing GtkDragSource instance.

    See more

    Declaration

    Swift

    public struct DragSourceRef : DragSourceProtocol, GWeakCapturing

DrawingArea Class

  • GtkDrawingArea is a widget that allows drawing with cairo.

    An example GtkDrawingArea

    It’s essentially a blank widget; you can draw on it. After creating a drawing area, the application may want to connect to:

    • The [signalGtk.Widget::realize] signal to take any necessary actions when the widget is instantiated on a particular display. (Create GDK resources in response to this signal.)

    • The [signalGtk.DrawingArea::resize] signal to take any necessary actions when the widget changes size.

    • Call [methodGtk.DrawingArea.set_draw_func] to handle redrawing the contents of the widget.

    The following code portion demonstrates using a drawing area to display a circle in the normal widget foreground color.

    Simple GtkDrawingArea usage

    static void
    draw_function (GtkDrawingArea *area,
                   cairo_t        *cr,
                   int             width,
                   int             height,
                   gpointer        data)
    {
      GdkRGBA color;
      GtkStyleContext *context;
    
      context = gtk_widget_get_style_context (GTK_WIDGET (area));
    
      cairo_arc (cr,
                 width / 2.0, height / 2.0,
                 MIN (width, height) / 2.0,
                 0, 2 * G_PI);
    
      gtk_style_context_get_color (context,
                                   &color);
      gdk_cairo_set_source_rgba (cr, &color);
    
      cairo_fill (cr);
    }
    
    int
    main (int argc, char **argv)
    {
      gtk_init ();
    
      GtkWidget *area = gtk_drawing_area_new ();
      gtk_drawing_area_set_content_width (GTK_DRAWING_AREA (area), 100);
      gtk_drawing_area_set_content_height (GTK_DRAWING_AREA (area), 100);
      gtk_drawing_area_set_draw_func (GTK_DRAWING_AREA (area),
                                      draw_function,
                                      NULL, NULL);
      return 0;
    }
    

    The draw function is normally called when a drawing area first comes onscreen, or when it’s covered by another window and then uncovered. You can also force a redraw by adding to the “damage region” of the drawing area’s window using [methodGtk.Widget.queue_draw]. This will cause the drawing area to call the draw function again.

    The available routines for drawing are documented on the GDK Drawing Primitives page and the cairo documentation.

    To receive mouse events on a drawing area, you will need to use event controllers. To receive keyboard events, you will need to set the “can-focus” property on the drawing area, and you should probably draw some user-visible indication that the drawing area is focused.

    If you need more complex control over your widget, you should consider creating your own GtkWidget subclass.

    The DrawingAreaRef type acts as a lightweight Swift reference to an underlying GtkDrawingArea instance. It exposes methods that can operate on this data type through DrawingAreaProtocol conformance. Use DrawingAreaRef only as an unowned reference to an existing GtkDrawingArea instance.

    See more

    Declaration

    Swift

    public struct DrawingAreaRef : DrawingAreaProtocol, GWeakCapturing

DropControllerMotion Class

  • GtkDropControllerMotion is an event controller tracking the pointer during Drag-and-Drop operations.

    It is modeled after [classGtk.EventControllerMotion] so if you have used that, this should feel really familiar.

    This controller is not able to accept drops, use [classGtk.DropTarget] for that purpose.

    The DropControllerMotionRef type acts as a lightweight Swift reference to an underlying GtkDropControllerMotion instance. It exposes methods that can operate on this data type through DropControllerMotionProtocol conformance. Use DropControllerMotionRef only as an unowned reference to an existing GtkDropControllerMotion instance.

    See more

    Declaration

    Swift

    public struct DropControllerMotionRef : DropControllerMotionProtocol, GWeakCapturing

DropDown Class

  • GtkDropDown is a widget that allows the user to choose an item from a list of options.

    An example GtkDropDown

    The GtkDropDown displays the selected choice.

    The options are given to GtkDropDown in the form of GListModel and how the individual options are represented is determined by a [classGtk.ListItemFactory]. The default factory displays simple strings.

    GtkDropDown knows how to obtain strings from the items in a [classGtk.StringList]; for other models, you have to provide an expression to find the strings via [methodGtk.DropDown.set_expression].

    GtkDropDown can optionally allow search in the popup, which is useful if the list of options is long. To enable the search entry, use [methodGtk.DropDown.set_enable_search].

    CSS nodes

    GtkDropDown has a single CSS node with name dropdown, with the button and popover nodes as children.

    Accessibility

    GtkDropDown uses the GTK_ACCESSIBLE_ROLE_COMBO_BOX role.

    The DropDownRef type acts as a lightweight Swift reference to an underlying GtkDropDown instance. It exposes methods that can operate on this data type through DropDownProtocol conformance. Use DropDownRef only as an unowned reference to an existing GtkDropDown instance.

    See more

    Declaration

    Swift

    public struct DropDownRef : DropDownProtocol, GWeakCapturing

DropTarget Class

  • GtkDropTarget is an event controller to receive Drag-and-Drop operations.

    The most basic way to use a GtkDropTarget to receive drops on a widget is to create it via [ctorGtk.DropTarget.new], passing in the GType of the data you want to receive and connect to the [signalGtk.DropTarget::drop] signal to receive the data:

    static gboolean
    on_drop (GtkDropTarget *target,
             const GValue  *value,
             double         x,
             double         y,
             gpointer       data)
    {
      MyWidget *self = data;
    
      // Call the appropriate setter depending on the type of data
      // that we received
      if (G_VALUE_HOLDS (value, G_TYPE_FILE))
        my_widget_set_file (self, g_value_get_object (value));
      else if (G_VALUE_HOLDS (value, GDK_TYPE_PIXBUF))
        my_widget_set_pixbuf (self, g_value_get_object (value));
      else
        return FALSE;
    
      return TRUE;
    }
    
    static void
    my_widget_init (MyWidget *self)
    {
      GtkDropTarget *target =
        gtk_drop_target_new (G_TYPE_INVALID, GDK_ACTION_COPY);
    
      // This widget accepts two types of drop types: GFile objects
      // and GdkPixbuf objects
      gtk_drop_target_set_gtypes (target, (GTypes [2]) {
        G_TYPE_FILE,
        GDK_TYPE_PIXBUF,
      }, 2);
    
      gtk_widget_add_controller (GTK_WIDGET (self), GTK_EVENT_CONTROLLER (target));
    }
    

    GtkDropTarget supports more options, such as:

    • rejecting potential drops via the [signalGtk.DropTarget::accept] signal and the [methodGtk.DropTarget.reject] function to let other drop targets handle the drop
    • tracking an ongoing drag operation before the drop via the [signalGtk.DropTarget::enter], [signalGtk.DropTarget::motion] and [signalGtk.DropTarget::leave] signals
    • configuring how to receive data by setting the [propertyGtk.DropTarget:preload] property and listening for its availability via the [propertyGtk.DropTarget:value] property

    However, GtkDropTarget is ultimately modeled in a synchronous way and only supports data transferred via GType. If you want full control over an ongoing drop, the [classGtk.DropTargetAsync] object gives you this ability.

    While a pointer is dragged over the drop target’s widget and the drop has not been rejected, that widget will receive the GTK_STATE_FLAG_DROP_ACTIVE state, which can be used to style the widget.

    If you are not interested in receiving the drop, but just want to update UI state during a Drag-and-Drop operation (e.g. switching tabs), you can use [classGtk.DropControllerMotion].

    The DropTargetRef type acts as a lightweight Swift reference to an underlying GtkDropTarget instance. It exposes methods that can operate on this data type through DropTargetProtocol conformance. Use DropTargetRef only as an unowned reference to an existing GtkDropTarget instance.

    See more

    Declaration

    Swift

    public struct DropTargetRef : DropTargetProtocol, GWeakCapturing

DropTargetAsync Class

  • GtkDropTargetAsync is an event controller to receive Drag-and-Drop operations, asynchronously.

    It is the more complete but also more complex method of handling drop operations compared to [classGtk.DropTarget], and you should only use it if GtkDropTarget doesn’t provide all the features you need.

    To use a GtkDropTargetAsync to receive drops on a widget, you create a GtkDropTargetAsync object, configure which data formats and actions you support, connect to its signals, and then attach it to the widget with [methodGtk.Widget.add_controller].

    During a drag operation, the first signal that a GtkDropTargetAsync emits is [signalGtk.DropTargetAsync::accept], which is meant to determine whether the target is a possible drop site for the ongoing drop. The default handler for the accept signal accepts the drop if it finds a compatible data format and an action that is supported on both sides.

    If it is, and the widget becomes a target, you will receive a [signalGtk.DropTargetAsync::drag-enter] signal, followed by [signalGtk.DropTargetAsync::drag-motion] signals as the pointer moves, optionally a [signalGtk.DropTargetAsync::drop] signal when a drop happens, and finally a [signalGtk.DropTargetAsync::drag-leave] signal when the pointer moves off the widget.

    The drag-enter and drag-motion handler return a GdkDragAction to update the status of the ongoing operation. The drop handler should decide if it ultimately accepts the drop and if it does, it should initiate the data transfer and finish the operation by calling [methodGdk.Drop.finish].

    Between the drag-enter and drag-leave signals the widget is a current drop target, and will receive the GTK_STATE_FLAG_DROP_ACTIVE state, which can be used by themes to style the widget as a drop target.

    The DropTargetAsyncRef type acts as a lightweight Swift reference to an underlying GtkDropTargetAsync instance. It exposes methods that can operate on this data type through DropTargetAsyncProtocol conformance. Use DropTargetAsyncRef only as an unowned reference to an existing GtkDropTargetAsync instance.

    See more

    Declaration

    Swift

    public struct DropTargetAsyncRef : DropTargetAsyncProtocol, GWeakCapturing

EditableLabel Class

  • A GtkEditableLabel is a label that allows users to edit the text by switching to an “edit mode”.

    An example GtkEditableLabel

    GtkEditableLabel does not have API of its own, but it implements the [ifaceGtk.Editable] interface.

    The default bindings for activating the edit mode is to click or press the Enter key. The default bindings for leaving the edit mode are the Enter key (to save the results) or the Escape key (to cancel the editing).

    CSS nodes

    editablelabel[.editing]
    ╰── stack
        ├── label
        ╰── text
    

    GtkEditableLabel has a main node with the name editablelabel. When the entry is in editing mode, it gets the .editing style class.

    For all the subnodes added to the text node in various situations, see [classGtk.Text].

    The EditableLabelRef type acts as a lightweight Swift reference to an underlying GtkEditableLabel instance. It exposes methods that can operate on this data type through EditableLabelProtocol conformance. Use EditableLabelRef only as an unowned reference to an existing GtkEditableLabel instance.

    See more

    Declaration

    Swift

    public struct EditableLabelRef : EditableLabelProtocol, GWeakCapturing

DirectoryListClass Record

DragIconClass Record

  • The DragIconClassRef type acts as a lightweight Swift reference to an underlying GtkDragIconClass instance. It exposes methods that can operate on this data type through DragIconClassProtocol conformance. Use DragIconClassRef only as an unowned reference to an existing GtkDragIconClass instance.

    See more

    Declaration

    Swift

    public struct DragIconClassRef : DragIconClassProtocol

DragSourceClass Record

DrawingAreaClass Record

DropControllerMotionClass Record

DropDownClass Record

  • The DropDownClassRef type acts as a lightweight Swift reference to an underlying GtkDropDownClass instance. It exposes methods that can operate on this data type through DropDownClassProtocol conformance. Use DropDownClassRef only as an unowned reference to an existing GtkDropDownClass instance.

    See more

    Declaration

    Swift

    public struct DropDownClassRef : DropDownClassProtocol

DropTargetAsyncClass Record

DropTargetClass Record

EditableInterface Record

EditableLabelClass Record

EmojiChooserClass Record

EntryBufferClass Record

EntryClass Record

  • Class structure for GtkEntry. All virtual functions have a default implementation. Derived classes may set the virtual function pointers for the signal handlers to nil, but must keep get_text_area_size and get_frame_size non-nil; either use the default implementation, or provide a custom one.

    The EntryClassRef type acts as a lightweight Swift reference to an underlying GtkEntryClass instance. It exposes methods that can operate on this data type through EntryClassProtocol conformance. Use EntryClassRef only as an unowned reference to an existing GtkEntryClass instance.

    See more

    Declaration

    Swift

    public struct EntryClassRef : EntryClassProtocol

EventControllerClass Record

EventControllerFocusClass Record

EventControllerKeyClass Record

EventControllerLegacyClass Record

EventControllerMotionClass Record

EventControllerScrollClass Record

EveryFilterClass Record

ExpressionWatch Record

  • An opaque structure representing a watched GtkExpression.

    The contents of GtkExpressionWatch should only be accessed through the provided API.

    The ExpressionWatchRef type acts as a lightweight Swift reference to an underlying GtkExpressionWatch instance. It exposes methods that can operate on this data type through ExpressionWatchProtocol conformance. Use ExpressionWatchRef only as an unowned reference to an existing GtkExpressionWatch instance.

    See more

    Declaration

    Swift

    public struct ExpressionWatchRef : ExpressionWatchProtocol

FileChooserNativeClass Record

EmojiChooser Class

  • The GtkEmojiChooser is used by text widgets such as GtkEntry or GtkTextView to let users insert Emoji characters.

    An example GtkEmojiChooser

    GtkEmojiChooser emits the [signalGtk.EmojiChooser::emoji-picked] signal when an Emoji is selected.

    CSS nodes

    popover
    ├── box.emoji-searchbar
       ╰── entry.search
    ╰── box.emoji-toolbar
        ├── button.image-button.emoji-section
        ├── ...
        ╰── button.image-button.emoji-section
    

    Every GtkEmojiChooser consists of a main node called popover. The contents of the popover are largely implementation defined and supposed to inherit general styles. The top searchbar used to search emoji and gets the .emoji-searchbar style class itself. The bottom toolbar used to switch between different emoji categories consists of buttons with the .emoji-section style class and gets the .emoji-toolbar style class itself.

    The EmojiChooserRef type acts as a lightweight Swift reference to an underlying GtkEmojiChooser instance. It exposes methods that can operate on this data type through EmojiChooserProtocol conformance. Use EmojiChooserRef only as an unowned reference to an existing GtkEmojiChooser instance.

    See more

    Declaration

    Swift

    public struct EmojiChooserRef : EmojiChooserProtocol, GWeakCapturing

Entry Class

  • GtkEntry is a single line text entry widget.

    An example GtkEntry

    A fairly large set of key bindings are supported by default. If the entered text is longer than the allocation of the widget, the widget will scroll so that the cursor position is visible.

    When using an entry for passwords and other sensitive information, it can be put into “password mode” using [methodGtk.Entry.set_visibility]. In this mode, entered text is displayed using a “invisible” character. By default, GTK picks the best invisible character that is available in the current font, but it can be changed with [methodGtk.Entry.set_invisible_char].

    GtkEntry has the ability to display progress or activity information behind the text. To make an entry display such information, use [methodGtk.Entry.set_progress_fraction] or [methodGtk.Entry.set_progress_pulse_step].

    Additionally, GtkEntry can show icons at either side of the entry. These icons can be activatable by clicking, can be set up as drag source and can have tooltips. To add an icon, use [methodGtk.Entry.set_icon_from_gicon] or one of the various other functions that set an icon from an icon name or a paintable. To trigger an action when the user clicks an icon, connect to the [signalGtk.Entry::icon-press] signal. To allow DND operations from an icon, use [methodGtk.Entry.set_icon_drag_source]. To set a tooltip on an icon, use [methodGtk.Entry.set_icon_tooltip_text] or the corresponding function for markup.

    Note that functionality or information that is only available by clicking on an icon in an entry may not be accessible at all to users which are not able to use a mouse or other pointing device. It is therefore recommended that any such functionality should also be available by other means, e.g. via the context menu of the entry.

    CSS nodes

    entry[.flat][.warning][.error]
    ├── text[.readonly]
    ├── image.left
    ├── image.right
    ╰── [progress[.pulse]]
    

    GtkEntry has a main node with the name entry. Depending on the properties of the entry, the style classes .read-only and .flat may appear. The style classes .warning and .error may also be used with entries.

    When the entry shows icons, it adds subnodes with the name image and the style class .left or .right, depending on where the icon appears.

    When the entry shows progress, it adds a subnode with the name progress. The node has the style class .pulse when the shown progress is pulsing.

    For all the subnodes added to the text node in various situations, see [classGtk.Text].

    GtkEntry as GtkBuildable

    The GtkEntry implementation of the GtkBuildable interface supports a custom <attributes> element, which supports any number of <attribute> elements. The <attribute> element has attributes named “name“, “value“, “start“ and “end“ and allows you to specify PangoAttribute values for this label.

    An example of a UI definition fragment specifying Pango attributes:

    &lt;object class="GtkEntry"&gt;
      &lt;attributes&gt;
        &lt;attribute name="weight" value="PANGO_WEIGHT_BOLD"/&gt;
        &lt;attribute name="background" value="red" start="5" end="10"/&gt;
      &lt;/attributes&gt;
    &lt;/object&gt;
    

    The start and end attributes specify the range of characters to which the Pango attribute applies. If start and end are not specified, the attribute is applied to the whole text. Note that specifying ranges does not make much sense with translatable attributes. Use markup embedded in the translatable content instead.

    Accessibility

    GtkEntry uses the GTK_ACCESSIBLE_ROLE_TEXT_BOX role.

    The EntryRef type acts as a lightweight Swift reference to an underlying GtkEntry instance. It exposes methods that can operate on this data type through EntryProtocol conformance. Use EntryRef only as an unowned reference to an existing GtkEntry instance.

    See more

    Declaration

    Swift

    public struct EntryRef : EntryProtocol, GWeakCapturing

EntryBuffer Class

  • A GtkEntryBuffer hold the text displayed in a GtkText widget.

    A single GtkEntryBuffer object can be shared by multiple widgets which will then share the same text content, but not the cursor position, visibility attributes, icon etc.

    GtkEntryBuffer may be derived from. Such a derived class might allow text to be stored in an alternate location, such as non-pageable memory, useful in the case of important passwords. Or a derived class could integrate with an application’s concept of undo/redo.

    The EntryBufferRef type acts as a lightweight Swift reference to an underlying GtkEntryBuffer instance. It exposes methods that can operate on this data type through EntryBufferProtocol conformance. Use EntryBufferRef only as an unowned reference to an existing GtkEntryBuffer instance.

    See more

    Declaration

    Swift

    public struct EntryBufferRef : EntryBufferProtocol, GWeakCapturing

EntryCompletion Class

  • GtkEntryCompletion is an auxiliary object to provide completion functionality for GtkEntry.

    It implements the [ifaceGtk.CellLayout] interface, to allow the user to add extra cells to the GtkTreeView with completion matches.

    “Completion functionality” means that when the user modifies the text in the entry, GtkEntryCompletion checks which rows in the model match the current content of the entry, and displays a list of matches. By default, the matching is done by comparing the entry text case-insensitively against the text column of the model (see [methodGtk.EntryCompletion.set_text_column]), but this can be overridden with a custom match function (see [methodGtk.EntryCompletion.set_match_func]).

    When the user selects a completion, the content of the entry is updated. By default, the content of the entry is replaced by the text column of the model, but this can be overridden by connecting to the [signalGtk.EntryCompletion::match-selected] signal and updating the entry in the signal handler. Note that you should return true from the signal handler to suppress the default behaviour.

    To add completion functionality to an entry, use [methodGtk.Entry.set_completion].

    GtkEntryCompletion uses a [classGtk.TreeModelFilter] model to represent the subset of the entire model that is currently matching. While the GtkEntryCompletion signals [signalGtk.EntryCompletion::match-selected] and [signalGtk.EntryCompletion::cursor-on-match] take the original model and an iter pointing to that model as arguments, other callbacks and signals (such as GtkCellLayoutDataFunc or [signalGtk.CellArea::apply-attributes)] will generally take the filter model as argument. As long as you are only calling [methodGtk.TreeModel.get], this will make no difference to you. If for some reason, you need the original model, use [methodGtk.TreeModelFilter.get_model]. Don’t forget to use [methodGtk.TreeModelFilter.convert_iter_to_child_iter] to obtain a matching iter.

    The EntryCompletionRef type acts as a lightweight Swift reference to an underlying GtkEntryCompletion instance. It exposes methods that can operate on this data type through EntryCompletionProtocol conformance. Use EntryCompletionRef only as an unowned reference to an existing GtkEntryCompletion instance.

    See more

    Declaration

    Swift

    public struct EntryCompletionRef : EntryCompletionProtocol, GWeakCapturing

EventController Class

  • GtkEventController is the base class for event controllers.

    These are ancillary objects associated to widgets, which react to GdkEvents, and possibly trigger actions as a consequence.

    Event controllers are added to a widget with [methodGtk.Widget.add_controller]. It is rarely necessary to explicitly remove a controller with [methodGtk.Widget.remove_controller].

    See the chapter on input handling for an overview of the basic concepts, such as the capture and bubble phases of even propagation.

    The EventControllerRef type acts as a lightweight Swift reference to an underlying GtkEventController instance. It exposes methods that can operate on this data type through EventControllerProtocol conformance. Use EventControllerRef only as an unowned reference to an existing GtkEventController instance.

    See more

    Declaration

    Swift

    public struct EventControllerRef : EventControllerProtocol, GWeakCapturing

EventControllerFocus Class

  • GtkEventControllerFocus is an event controller to keep track of keyboard focus.

    The event controller offers [signalGtk.EventControllerFocus::enter] and [signalGtk.EventControllerFocus::leave] signals, as well as [propertyGtk.EventControllerFocus:is-focus] and [propertyGtk.EventControllerFocus:contains-focus] properties which are updated to reflect focus changes inside the widget hierarchy that is rooted at the controllers widget.

    The EventControllerFocusRef type acts as a lightweight Swift reference to an underlying GtkEventControllerFocus instance. It exposes methods that can operate on this data type through EventControllerFocusProtocol conformance. Use EventControllerFocusRef only as an unowned reference to an existing GtkEventControllerFocus instance.

    See more

    Declaration

    Swift

    public struct EventControllerFocusRef : EventControllerFocusProtocol, GWeakCapturing

EventControllerKey Class

  • GtkEventControllerKey is an event controller that provides access to key events.

    The EventControllerKeyRef type acts as a lightweight Swift reference to an underlying GtkEventControllerKey instance. It exposes methods that can operate on this data type through EventControllerKeyProtocol conformance. Use EventControllerKeyRef only as an unowned reference to an existing GtkEventControllerKey instance.

    See more

    Declaration

    Swift

    public struct EventControllerKeyRef : EventControllerKeyProtocol, GWeakCapturing

EventControllerLegacy Class

  • GtkEventControllerLegacy is an event controller that provides raw access to the event stream.

    It should only be used as a last resort if none of the other event controllers or gestures do the job.

    The EventControllerLegacyRef type acts as a lightweight Swift reference to an underlying GtkEventControllerLegacy instance. It exposes methods that can operate on this data type through EventControllerLegacyProtocol conformance. Use EventControllerLegacyRef only as an unowned reference to an existing GtkEventControllerLegacy instance.

    See more

    Declaration

    Swift

    public struct EventControllerLegacyRef : EventControllerLegacyProtocol, GWeakCapturing

EventControllerMotion Class

  • GtkEventControllerMotion is an event controller tracking the pointer position.

    The event controller offers [signalGtk.EventControllerMotion::enter] and [signalGtk.EventControllerMotion::leave] signals, as well as [propertyGtk.EventControllerMotion:is-pointer] and [propertyGtk.EventControllerMotion:contains-pointer] properties which are updated to reflect changes in the pointer position as it moves over the widget.

    The EventControllerMotionRef type acts as a lightweight Swift reference to an underlying GtkEventControllerMotion instance. It exposes methods that can operate on this data type through EventControllerMotionProtocol conformance. Use EventControllerMotionRef only as an unowned reference to an existing GtkEventControllerMotion instance.

    See more

    Declaration

    Swift

    public struct EventControllerMotionRef : EventControllerMotionProtocol, GWeakCapturing

EventControllerScroll Class

  • GtkEventControllerScroll is an event controller that handles scroll events.

    It is capable of handling both discrete and continuous scroll events from mice or touchpads, abstracting them both with the [signalGtk.EventControllerScroll::scroll] signal. Deltas in the discrete case are multiples of 1.

    In the case of continuous scroll events, GtkEventControllerScroll encloses all [signalGtk.EventControllerScroll::scroll] emissions between two [signalGtk.EventControllerScroll::scroll-begin] and [signalGtk.EventControllerScroll::scroll-end] signals.

    The behavior of the event controller can be modified by the flags given at creation time, or modified at a later point through methodGtk.EventControllerScroll.set_flags.

    The controller can be set up to emit motion for either/both vertical and horizontal scroll events through GTK_EVENT_CONTROLLER_SCROLL_VERTICAL, GTK_EVENT_CONTROLLER_SCROLL_HORIZONTAL and GTK_EVENT_CONTROLLER_SCROLL_BOTH_AXES. If any axis is disabled, the respective [signalGtk.EventControllerScroll::scroll] delta will be 0. Vertical scroll events will be translated to horizontal motion for the devices incapable of horizontal scrolling.

    The event controller can also be forced to emit discrete events on all devices through GTK_EVENT_CONTROLLER_SCROLL_DISCRETE. This can be used to implement discrete actions triggered through scroll events (e.g. switching across combobox options).

    The GTK_EVENT_CONTROLLER_SCROLL_KINETIC flag toggles the emission of the [signalGtk.EventControllerScroll::decelerate] signal, emitted at the end of scrolling with two X/Y velocity arguments that are consistent with the motion that was received.

    The EventControllerScrollRef type acts as a lightweight Swift reference to an underlying GtkEventControllerScroll instance. It exposes methods that can operate on this data type through EventControllerScrollProtocol conformance. Use EventControllerScrollRef only as an unowned reference to an existing GtkEventControllerScroll instance.

    See more

    Declaration

    Swift

    public struct EventControllerScrollRef : EventControllerScrollProtocol, GWeakCapturing

EveryFilter Class

  • GtkEveryFilter matches an item when each of its filters matches.

    To add filters to a GtkEveryFilter, use [methodGtk.MultiFilter.append].

    The EveryFilterRef type acts as a lightweight Swift reference to an underlying GtkEveryFilter instance. It exposes methods that can operate on this data type through EveryFilterProtocol conformance. Use EveryFilterRef only as an unowned reference to an existing GtkEveryFilter instance.

    See more

    Declaration

    Swift

    public struct EveryFilterRef : EveryFilterProtocol, GWeakCapturing

Expander Class

  • GtkExpander allows the user to reveal its child by clicking on an expander triangle.

    An example GtkExpander

    This is similar to the triangles used in a GtkTreeView.

    Normally you use an expander as you would use a frame; you create the child widget and use [methodGtk.Expander.set_child] to add it to the expander. When the expander is toggled, it will take care of showing and hiding the child automatically.

    Special Usage

    There are situations in which you may prefer to show and hide the expanded widget yourself, such as when you want to actually create the widget at expansion time. In this case, create a GtkExpander but do not add a child to it. The expander widget has an [propertyGtk.Expander:expanded[ property which can be used to monitor its expansion state. You should watch this property with a signal connection as follows:

    static void
    expander_callback (GObject    *object,
                       GParamSpec *param_spec,
                       gpointer    user_data)
    {
      GtkExpander *expander;
    
      expander = GTK_EXPANDER (object);
    
      if (gtk_expander_get_expanded (expander))
        {
          // Show or create widgets
        }
      else
        {
          // Hide or destroy widgets
        }
    }
    
    static void
    create_expander (void)
    {
      GtkWidget *expander = gtk_expander_new_with_mnemonic ("_More Options");
      g_signal_connect (expander, "notify`expanded`",
                        G_CALLBACK (expander_callback), NULL);
    
      // ...
    }
    

    GtkExpander as GtkBuildable

    The GtkExpander implementation of the GtkBuildable interface supports placing a child in the label position by specifying “label” as the “type” attribute of a <child> element. A normal content child can be specified without specifying a <child> type attribute.

    An example of a UI definition fragment with GtkExpander:

    &lt;object class="GtkExpander"&gt;
      &lt;child type="label"&gt;
        &lt;object class="GtkLabel" id="expander-label"/&gt;
      &lt;/child&gt;
      &lt;child&gt;
        &lt;object class="GtkEntry" id="expander-content"/&gt;
      &lt;/child&gt;
    &lt;/object&gt;
    

    CSS nodes

    expander
    ╰── box
        ├── title
           ├── arrow
           ╰── &lt;label widget&gt;
        ╰── &lt;child&gt;
    

    GtkExpander has three CSS nodes, the main node with the name expander, a subnode with name title and node below it with name arrow. The arrow of an expander that is showing its child gets the :checked pseudoclass added to it.

    Accessibility

    GtkExpander uses the GTK_ACCESSIBLE_ROLE_BUTTON role.

    The ExpanderRef type acts as a lightweight Swift reference to an underlying GtkExpander instance. It exposes methods that can operate on this data type through ExpanderProtocol conformance. Use ExpanderRef only as an unowned reference to an existing GtkExpander instance.

    See more

    Declaration

    Swift

    public struct ExpanderRef : ExpanderProtocol, GWeakCapturing

Expression Class

  • GtkExpression provides a way to describe references to values.

    An important aspect of expressions is that the value can be obtained from a source that is several steps away. For example, an expression may describe ‘the value of property A of object1, which is itself the value of a property of object2’. And object1 may not even exist yet at the time that the expression is created. This is contrast to GObject property bindings, which can only create direct connections between the properties of two objects that must both exist for the duration of the binding.

    An expression needs to be “evaluated” to obtain the value that it currently refers to. An evaluation always happens in the context of a current object called this (it mirrors the behavior of object-oriented languages), which may or may not influence the result of the evaluation. Use [methodGtk.Expression.evaluate] for evaluating an expression.

    Various methods for defining expressions exist, from simple constants via [ctorGtk.ConstantExpression.new] to looking up properties in a GObject (even recursively) via [ctorGtk.PropertyExpression.new] or providing custom functions to transform and combine expressions via [ctorGtk.ClosureExpression.new].

    Here is an example of a complex expression:

      color_expr = gtk_property_expression_new (GTK_TYPE_LIST_ITEM,
                                                NULL, "item");
      expression = gtk_property_expression_new (GTK_TYPE_COLOR,
                                                color_expr, "name");
    

    when evaluated with this being a GtkListItem, it will obtain the “item” property from the GtkListItem, and then obtain the “name” property from the resulting object (which is assumed to be of type GTK_TYPE_COLOR).

    A more concise way to describe this would be

      this-&gt;item-&gt;name
    

    The most likely place where you will encounter expressions is in the context of list models and list widgets using them. For example, GtkDropDown is evaluating a GtkExpression to obtain strings from the items in its model that it can then use to match against the contents of its search entry. GtkStringFilter is using a GtkExpression for similar reasons.

    By default, expressions are not paying attention to changes and evaluation is just a snapshot of the current state at a given time. To get informed about changes, an expression needs to be “watched” via a [structGtk.ExpressionWatch], which will cause a callback to be called whenever the value of the expression may have changed; [methodGtk.Expression.watch] starts watching an expression, and [methodGtk.ExpressionWatch.unwatch] stops.

    Watches can be created for automatically updating the property of an object, similar to GObject’s GBinding mechanism, by using [methodGtk.Expression.bind].

    GtkExpression in GObject properties

    In order to use a GtkExpression as a GObject property, you must use the [idgtk_param_spec_expression] when creating a GParamSpec to install in the GObject class being defined; for instance:

    obj_props[PROP_EXPRESSION] =
      gtk_param_spec_expression ("expression",
                                 "Expression",
                                 "The expression used by the widget",
                                 G_PARAM_READWRITE |
                                 G_PARAM_STATIC_STRINGS |
                                 G_PARAM_EXPLICIT_NOTIFY);
    

    When implementing the GObjectClass.set_property and GObjectClass.get_property virtual functions, you must use [idgtk_value_get_expression], to retrieve the stored GtkExpression from the GValue container, and [idgtk_value_set_expression], to store the GtkExpression into the GValue; for instance:

      // in `set_property()`...
      case PROP_EXPRESSION:
        foo_widget_set_expression (foo, gtk_value_get_expression (value));
        break;
    
      // in `get_property()`...
      case PROP_EXPRESSION:
        gtk_value_set_expression (value, foo-&gt;expression);
        break;
    

    GtkExpression in .ui files

    GtkBuilder has support for creating expressions. The syntax here can be used where a GtkExpression object is needed like in a &lt;property&gt; tag for an expression property, or in a &lt;binding&gt; tag to bind a property to an expression.

    To create an property expression, use the &lt;lookup&gt; element. It can have a type attribute to specify the object type, and a name attribute to specify the property to look up. The content of &lt;lookup&gt; can either be an element specfiying the expression to use the object, or a string that specifies the name of the object to use.

    Example:

      &lt;lookup name='search'&gt;string_filter&lt;/lookup&gt;
    

    To create a constant expression, use the &lt;constant&gt; element. If the type attribute is specified, the element content is interpreted as a value of that type. Otherwise, it is assumed to be an object. For instance:

      &lt;constant&gt;string_filter&lt;/constant&gt;
      &lt;constant type='gchararray'&gt;Hello, world&lt;/constant&gt;
    

    To create a closure expression, use the &lt;closure&gt; element. The type and function attributes specify what function to use for the closure, the content of the element contains the expressions for the parameters. For instance:

      &lt;closure type='gchararray' function='combine_args_somehow'&gt;
        &lt;constant type='gchararray'&gt;File size:&lt;/constant&gt;
        &lt;lookup type='GFile' name='size'&gt;myfile&lt;/lookup&gt;
      &lt;/closure&gt;
    

    The ExpressionRef type acts as a lightweight Swift reference to an underlying GtkExpression instance. It exposes methods that can operate on this data type through ExpressionProtocol conformance. Use ExpressionRef only as an unowned reference to an existing GtkExpression instance.

    See more

    Declaration

    Swift

    public struct ExpressionRef : ExpressionProtocol

FileChooserDialog Class

  • GtkFileChooserDialog is a dialog suitable for use with “File Open” or “File Save” commands.

    An example GtkFileChooserDialog

    This widget works by putting a [classGtk.FileChooserWidget] inside a [classGtk.Dialog]. It exposes the [ifaceGtk.FileChooser] interface, so you can use all of the [ifaceGtk.FileChooser] functions on the file chooser dialog as well as those for [classGtk.Dialog].

    Note that GtkFileChooserDialog does not have any methods of its own. Instead, you should use the functions that work on a [ifaceGtk.FileChooser].

    If you want to integrate well with the platform you should use the [classGtk.FileChooserNative] API, which will use a platform-specific dialog if available and fall back to GtkFileChooserDialog otherwise.

    Typical usage

    In the simplest of cases, you can the following code to use GtkFileChooserDialog to select a file for opening:

    static void
    on_open_response (GtkDialog *dialog,
                      int        response)
    {
      if (response == GTK_RESPONSE_ACCEPT)
        {
          GtkFileChooser *chooser = GTK_FILE_CHOOSER (dialog);
    
          `g_autoptr(GFile)` file = gtk_file_chooser_get_file (chooser);
    
          open_file (file);
        }
    
      gtk_window_destroy (GTK_WINDOW (dialog));
    }
    
      // ...
      GtkWidget *dialog;
      GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_OPEN;
    
      dialog = gtk_file_chooser_dialog_new ("Open File",
                                            parent_window,
                                            action,
                                            `_("_Cancel")`,
                                            GTK_RESPONSE_CANCEL,
                                            `_("_Open")`,
                                            GTK_RESPONSE_ACCEPT,
                                            NULL);
    
      gtk_widget_show (dialog);
    
      g_signal_connect (dialog, "response",
                        G_CALLBACK (on_open_response),
                        NULL);
    

    To use a dialog for saving, you can use this:

    static void
    on_save_response (GtkDialog *dialog,
                      int        response)
    {
      if (response == GTK_RESPONSE_ACCEPT)
        {
          GtkFileChooser *chooser = GTK_FILE_CHOOSER (dialog);
    
          `g_autoptr(GFile)` file = gtk_file_chooser_get_file (chooser);
    
          save_to_file (file);
        }
    
      gtk_window_destroy (GTK_WINDOW (dialog));
    }
    
      // ...
      GtkWidget *dialog;
      GtkFileChooser *chooser;
      GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_SAVE;
    
      dialog = gtk_file_chooser_dialog_new ("Save File",
                                            parent_window,
                                            action,
                                            `_("_Cancel")`,
                                            GTK_RESPONSE_CANCEL,
                                            `_("_Save")`,
                                            GTK_RESPONSE_ACCEPT,
                                            NULL);
      chooser = GTK_FILE_CHOOSER (dialog);
    
      if (user_edited_a_new_document)
        gtk_file_chooser_set_current_name (chooser, `_("Untitled document")`);
      else
        gtk_file_chooser_set_file (chooser, existing_filename);
    
      gtk_widget_show (dialog);
    
      g_signal_connect (dialog, "response",
                        G_CALLBACK (on_save_response),
                        NULL);
    

    Setting up a file chooser dialog

    There are various cases in which you may need to use a GtkFileChooserDialog:

    • To select a file for opening, use GTK_FILE_CHOOSER_ACTION_OPEN.

    • To save a file for the first time, use GTK_FILE_CHOOSER_ACTION_SAVE, and suggest a name such as “Untitled” with [methodGtk.FileChooser.set_current_name].

    • To save a file under a different name, use GTK_FILE_CHOOSER_ACTION_SAVE, and set the existing file with [methodGtk.FileChooser.set_file].

    • To choose a folder instead of a filem use GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER.

    In general, you should only cause the file chooser to show a specific folder when it is appropriate to use [methodGtk.FileChooser.set_file], i.e. when you are doing a “Save As” command and you already have a file saved somewhere.

    Response Codes

    GtkFileChooserDialog inherits from [classGtk.Dialog], so buttons that go in its action area have response codes such as GTK_RESPONSE_ACCEPT and GTK_RESPONSE_CANCEL. For example, you could call [ctorGtk.FileChooserDialog.new] as follows:

    GtkWidget *dialog;
    GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_OPEN;
    
    dialog = gtk_file_chooser_dialog_new ("Open File",
                                          parent_window,
                                          action,
                                          `_("_Cancel")`,
                                          GTK_RESPONSE_CANCEL,
                                          `_("_Open")`,
                                          GTK_RESPONSE_ACCEPT,
                                          NULL);
    

    This will create buttons for “Cancel” and “Open” that use predefined response identifiers from [enumGtk.ResponseType]. For most dialog boxes you can use your own custom response codes rather than the ones in [enumGtk.ResponseType], but GtkFileChooserDialog assumes that its “accept”-type action, e.g. an “Open” or “Save” button, will have one of the following response codes:

    • GTK_RESPONSE_ACCEPT
    • GTK_RESPONSE_OK
    • GTK_RESPONSE_YES
    • GTK_RESPONSE_APPLY

    This is because GtkFileChooserDialog must intercept responses and switch to folders if appropriate, rather than letting the dialog terminate — the implementation uses these known response codes to know which responses can be blocked if appropriate.

    To summarize, make sure you use a predefined response code when you use GtkFileChooserDialog to ensure proper operation.

    The FileChooserDialogRef type acts as a lightweight Swift reference to an underlying GtkFileChooserDialog instance. It exposes methods that can operate on this data type through FileChooserDialogProtocol conformance. Use FileChooserDialogRef only as an unowned reference to an existing GtkFileChooserDialog instance.

    See more

    Declaration

    Swift

    public struct FileChooserDialogRef : FileChooserDialogProtocol, GWeakCapturing

FileChooser Interface

  • GtkFileChooser is an interface that can be implemented by file selection widgets.

    In GTK, the main objects that implement this interface are [classGtk.FileChooserWidget] and [classGtk.FileChooserDialog].

    You do not need to write an object that implements the GtkFileChooser interface unless you are trying to adapt an existing file selector to expose a standard programming interface.

    GtkFileChooser allows for shortcuts to various places in the filesystem. In the default implementation these are displayed in the left pane. It may be a bit confusing at first that these shortcuts come from various sources and in various flavours, so lets explain the terminology here:

    • Bookmarks: are created by the user, by dragging folders from the right pane to the left pane, or by using the “Add”. Bookmarks can be renamed and deleted by the user.

    • Shortcuts: can be provided by the application. For example, a Paint program may want to add a shortcut for a Clipart folder. Shortcuts cannot be modified by the user.

    • Volumes: are provided by the underlying filesystem abstraction. They are the “roots” of the filesystem.

    File Names and Encodings

    When the user is finished selecting files in a GtkFileChooser, your program can get the selected filenames as GFiles.

    Adding options

    You can add extra widgets to a file chooser to provide options that are not present in the default design, by using [methodGtk.FileChooser.add_choice]. Each choice has an identifier and a user visible label; additionally, each choice can have multiple options. If a choice has no option, it will be rendered as a check button with the given label; if a choice has options, it will be rendered as a combo box.

    The FileChooserRef type acts as a lightweight Swift reference to an underlying GtkFileChooser instance. It exposes methods that can operate on this data type through FileChooserProtocol conformance. Use FileChooserRef only as an unowned reference to an existing GtkFileChooser instance.

    See more

    Declaration

    Swift

    public struct FileChooserRef : FileChooserProtocol

FontChooser Interface

  • GtkFontChooser is an interface that can be implemented by widgets for choosing fonts.

    In GTK, the main objects that implement this interface are [classGtk.FontChooserWidget], [classGtk.FontChooserDialog] and [classGtk.FontButton].

    The FontChooserRef type acts as a lightweight Swift reference to an underlying GtkFontChooser instance. It exposes methods that can operate on this data type through FontChooserProtocol conformance. Use FontChooserRef only as an unowned reference to an existing GtkFontChooser instance.

    See more

    Declaration

    Swift

    public struct FontChooserRef : FontChooserProtocol

Native Interface

  • GtkNative is the interface implemented by all widgets that have their own GdkSurface.

    The obvious example of a GtkNative is GtkWindow.

    Every widget that is not itself a GtkNative is contained in one, and you can get it with [methodGtk.Widget.get_native].

    To get the surface of a GtkNative, use [methodGtk.Native.get_surface]. It is also possible to find the GtkNative to which a surface belongs, with [funcGtk.Native.get_for_surface].

    In addition to a [classGdk.Surface], a GtkNative also provides a [classGsk.Renderer] for rendering on that surface. To get the renderer, use [methodGtk.Native.get_renderer].

    The NativeRef type acts as a lightweight Swift reference to an underlying GtkNative instance. It exposes methods that can operate on this data type through NativeProtocol conformance. Use NativeRef only as an unowned reference to an existing GtkNative instance.

    See more

    Declaration

    Swift

    public struct NativeRef : NativeProtocol, GWeakCapturing

FileChooserNative Class

  • GtkFileChooserNative is an abstraction of a dialog suitable for use with “File Open” or “File Save as” commands.

    By default, this just uses a GtkFileChooserDialog to implement the actual dialog. However, on some platforms, such as Windows and macOS, the native platform file chooser is used instead. When the application is running in a sandboxed environment without direct filesystem access (such as Flatpak), GtkFileChooserNative may call the proper APIs (portals) to let the user choose a file and make it available to the application.

    While the API of GtkFileChooserNative closely mirrors GtkFileChooserDialog, the main difference is that there is no access to any GtkWindow or GtkWidget for the dialog. This is required, as there may not be one in the case of a platform native dialog.

    Showing, hiding and running the dialog is handled by the [classGtk.NativeDialog] functions.

    Note that unlike GtkFileChooserDialog, GtkFileChooserNative objects are not toplevel widgets, and GTK does not keep them alive. It is your responsibility to keep a reference until you are done with the object.

    Typical usage

    In the simplest of cases, you can the following code to use GtkFileChooserNative to select a file for opening:

    static void
    on_response (GtkNativeDialog *native,
                 int              response)
    {
      if (response == GTK_RESPONSE_ACCEPT)
        {
          GtkFileChooser *chooser = GTK_FILE_CHOOSER (native);
          GFile *file = gtk_file_chooser_get_file (chooser);
    
          open_file (file);
    
          g_object_unref (file);
        }
    
      g_object_unref (native);
    }
    
      // ...
      GtkFileChooserNative *native;
      GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_OPEN;
    
      native = gtk_file_chooser_native_new ("Open File",
                                            parent_window,
                                            action,
                                            "_Open",
                                            "_Cancel");
    
      g_signal_connect (native, "response", G_CALLBACK (on_response), NULL);
      gtk_native_dialog_show (GTK_NATIVE_DIALOG (native));
    

    To use a GtkFileChooserNative for saving, you can use this:

    static void
    on_response (GtkNativeDialog *native,
                 int              response)
    {
      if (response == GTK_RESPONSE_ACCEPT)
        {
          GtkFileChooser *chooser = GTK_FILE_CHOOSER (native);
          GFile *file = gtk_file_chooser_get_file (chooser);
    
          save_to_file (file);
    
          g_object_unref (file);
        }
    
      g_object_unref (native);
    }
    
      // ...
      GtkFileChooserNative *native;
      GtkFileChooser *chooser;
      GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_SAVE;
    
      native = gtk_file_chooser_native_new ("Save File",
                                            parent_window,
                                            action,
                                            "_Save",
                                            "_Cancel");
      chooser = GTK_FILE_CHOOSER (native);
    
      if (user_edited_a_new_document)
        gtk_file_chooser_set_current_name (chooser, `_("Untitled document")`);
      else
        gtk_file_chooser_set_file (chooser, existing_file, NULL);
    
      g_signal_connect (native, "response", G_CALLBACK (on_response), NULL);
      gtk_native_dialog_show (GTK_NATIVE_DIALOG (native));
    

    For more information on how to best set up a file dialog, see the [classGtk.FileChooserDialog] documentation.

    Response Codes

    GtkFileChooserNative inherits from [classGtk.NativeDialog], which means it will return GTK_RESPONSE_ACCEPT if the user accepted, and GTK_RESPONSE_CANCEL if he pressed cancel. It can also return GTK_RESPONSE_DELETE_EVENT if the window was unexpectedly closed.

    Differences from GtkFileChooserDialog

    There are a few things in the [ifaceGtk.FileChooser] interface that are not possible to use with GtkFileChooserNative, as such use would prohibit the use of a native dialog.

    No operations that change the dialog work while the dialog is visible. Set all the properties that are required before showing the dialog.

    Win32 details

    On windows the IFileDialog implementation (added in Windows Vista) is used. It supports many of the features that GtkFileChooser has, but there are some things it does not handle:

    • Any [classGtk.FileFilter] added using a mimetype

    If any of these features are used the regular GtkFileChooserDialog will be used in place of the native one.

    Portal details

    When the org.freedesktop.portal.FileChooser portal is available on the session bus, it is used to bring up an out-of-process file chooser. Depending on the kind of session the application is running in, this may or may not be a GTK file chooser.

    macOS details

    On macOS the NSSavePanel and NSOpenPanel classes are used to provide native file chooser dialogs. Some features provided by GtkFileChooser are not supported:

    • Shortcut folders.

    The FileChooserNativeRef type acts as a lightweight Swift reference to an underlying GtkFileChooserNative instance. It exposes methods that can operate on this data type through FileChooserNativeProtocol conformance. Use FileChooserNativeRef only as an unowned reference to an existing GtkFileChooserNative instance.

    See more

    Declaration

    Swift

    public struct FileChooserNativeRef : FileChooserNativeProtocol, GWeakCapturing

FileChooserWidget Class

  • GtkFileChooserWidget is a widget for choosing files.

    It exposes the [ifaceGtk.FileChooser] interface, and you should use the methods of this interface to interact with the widget.

    CSS nodes

    GtkFileChooserWidget has a single CSS node with name filechooser.

    The FileChooserWidgetRef type acts as a lightweight Swift reference to an underlying GtkFileChooserWidget instance. It exposes methods that can operate on this data type through FileChooserWidgetProtocol conformance. Use FileChooserWidgetRef only as an unowned reference to an existing GtkFileChooserWidget instance.

    See more

    Declaration

    Swift

    public struct FileChooserWidgetRef : FileChooserWidgetProtocol, GWeakCapturing

FileFilter Class

  • GtkFileFilter filters files by name or mime type.

    GtkFileFilter can be used to restrict the files being shown in a GtkFileChooser. Files can be filtered based on their name (with [methodGtk.FileFilter.add_pattern] or [methodGtk.FileFilter.add_suffix]) or on their mime type (with [methodGtk.FileFilter.add_mime_type]).

    Filtering by mime types handles aliasing and subclassing of mime types; e.g. a filter for text/plain also matches a file with mime type application/rtf, since application/rtf is a subclass of text/plain. Note that GtkFileFilter allows wildcards for the subtype of a mime type, so you can e.g. filter for image/*.

    Normally, file filters are used by adding them to a GtkFileChooser (see [methodGtk.FileChooser.add_filter]), but it is also possible to manually use a file filter on any [classGtk.FilterListModel] containing GFileInfo objects.

    GtkFileFilter as GtkBuildable

    The GtkFileFilter implementation of the GtkBuildable interface supports adding rules using the &lt;mime-types&gt; and &lt;patterns&gt; and &lt;suffixes&gt; elements and listing the rules within. Specifying a &lt;mime-type&gt; or &lt;pattern&gt; or &lt;suffix&gt; has the same effect as as calling [methodGtk.FileFilter.add_mime_type] or [methodGtk.FileFilter.add_pattern] or [methodGtk.FileFilter.add_suffix].

    An example of a UI definition fragment specifying GtkFileFilter rules:

    &lt;object class="GtkFileFilter"&gt;
      &lt;property name="name" translatable="yes"&gt;Text and Images&lt;/property&gt;
      &lt;mime-types&gt;
        &lt;mime-type&gt;text/plain&lt;/mime-type&gt;
        &lt;mime-type&gt;image/ *&lt;/mime-type&gt;
      &lt;/mime-types&gt;
      &lt;patterns&gt;
        &lt;pattern&gt;*.txt&lt;/pattern&gt;
      &lt;/patterns&gt;
      &lt;suffixes&gt;
        &lt;suffix&gt;png&lt;/suffix&gt;
      &lt;/suffixes&gt;
    &lt;/object&gt;
    

    The FileFilterRef type acts as a lightweight Swift reference to an underlying GtkFileFilter instance. It exposes methods that can operate on this data type through FileFilterProtocol conformance. Use FileFilterRef only as an unowned reference to an existing GtkFileFilter instance.

    See more

    Declaration

    Swift

    public struct FileFilterRef : FileFilterProtocol, GWeakCapturing

Filter Class

  • A GtkFilter object describes the filtering to be performed by a GtkFilterListModel.

    The model will use the filter to determine if it should include items or not by calling [methodGtk.Filter.match] for each item and only keeping the ones that the function returns true for.

    Filters may change what items they match through their lifetime. In that case, they will emit the [signalGtk.Filter::changed] signal to notify that previous filter results are no longer valid and that items should be checked again via [methodGtk.Filter.match].

    GTK provides various pre-made filter implementations for common filtering operations. These filters often include properties that can be linked to various widgets to easily allow searches.

    However, in particular for large lists or complex search methods, it is also possible to subclass GtkFilter and provide one’s own filter.

    The FilterRef type acts as a lightweight Swift reference to an underlying GtkFilter instance. It exposes methods that can operate on this data type through FilterProtocol conformance. Use FilterRef only as an unowned reference to an existing GtkFilter instance.

    See more

    Declaration

    Swift

    public struct FilterRef : FilterProtocol, GWeakCapturing

FilterListModel Class

  • GtkFilterListModel is a list model that filters the elements of the underlying model according to a GtkFilter.

    It hides some elements from the other model according to criteria given by a GtkFilter.

    The model can be set up to do incremental searching, so that filtering long lists doesn’t block the UI. See [methodGtk.FilterListModel.set_incremental] for details.

    The FilterListModelRef type acts as a lightweight Swift reference to an underlying GtkFilterListModel instance. It exposes methods that can operate on this data type through FilterListModelProtocol conformance. Use FilterListModelRef only as an unowned reference to an existing GtkFilterListModel instance.

    See more

    Declaration

    Swift

    public struct FilterListModelRef : FilterListModelProtocol, GWeakCapturing

Fixed Class

  • GtkFixed places its child widgets at fixed positions and with fixed sizes.

    GtkFixed performs no automatic layout management.

    For most applications, you should not use this container! It keeps you from having to learn about the other GTK containers, but it results in broken applications. With GtkFixed, the following things will result in truncated text, overlapping widgets, and other display bugs:

    • Themes, which may change widget sizes.

    • Fonts other than the one you used to write the app will of course change the size of widgets containing text; keep in mind that users may use a larger font because of difficulty reading the default, or they may be using a different OS that provides different fonts.

    • Translation of text into other languages changes its size. Also, display of non-English text will use a different font in many cases.

    In addition, GtkFixed does not pay attention to text direction and thus may produce unwanted results if your app is run under right-to-left languages such as Hebrew or Arabic. That is: normally GTK will order containers appropriately for the text direction, e.g. to put labels to the right of the thing they label when using an RTL language, but it can’t do that with GtkFixed. So if you need to reorder widgets depending on the text direction, you would need to manually detect it and adjust child positions accordingly.

    Finally, fixed positioning makes it kind of annoying to add/remove UI elements, since you have to reposition all the other elements. This is a long-term maintenance problem for your application.

    If you know none of these things are an issue for your application, and prefer the simplicity of GtkFixed, by all means use the widget. But you should be aware of the tradeoffs.

    The FixedRef type acts as a lightweight Swift reference to an underlying GtkFixed instance. It exposes methods that can operate on this data type through FixedProtocol conformance. Use FixedRef only as an unowned reference to an existing GtkFixed instance.

    See more

    Declaration

    Swift

    public struct FixedRef : FixedProtocol, GWeakCapturing

FixedLayout Class

  • GtkFixedLayout is a layout manager which can place child widgets at fixed positions.

    Most applications should never use this layout manager; fixed positioning and sizing requires constant recalculations on where children need to be positioned and sized. Other layout managers perform this kind of work internally so that application developers don’t need to do it. Specifically, widgets positioned in a fixed layout manager will need to take into account:

    • Themes, which may change widget sizes.

    • Fonts other than the one you used to write the app will of course change the size of widgets containing text; keep in mind that users may use a larger font because of difficulty reading the default, or they may be using a different OS that provides different fonts.

    • Translation of text into other languages changes its size. Also, display of non-English text will use a different font in many cases.

    In addition, GtkFixedLayout does not pay attention to text direction and thus may produce unwanted results if your app is run under right-to-left languages such as Hebrew or Arabic. That is: normally GTK will order containers appropriately depending on the text direction, e.g. to put labels to the right of the thing they label when using an RTL language; GtkFixedLayout won’t be able to do that for you.

    Finally, fixed positioning makes it kind of annoying to add/remove UI elements, since you have to reposition all the other elements. This is a long-term maintenance problem for your application.

    The FixedLayoutRef type acts as a lightweight Swift reference to an underlying GtkFixedLayout instance. It exposes methods that can operate on this data type through FixedLayoutProtocol conformance. Use FixedLayoutRef only as an unowned reference to an existing GtkFixedLayout instance.

    See more

    Declaration

    Swift

    public struct FixedLayoutRef : FixedLayoutProtocol, GWeakCapturing

FixedLayoutChild Class

  • GtkLayoutChild subclass for children in a GtkFixedLayout.

    The FixedLayoutChildRef type acts as a lightweight Swift reference to an underlying GtkFixedLayoutChild instance. It exposes methods that can operate on this data type through FixedLayoutChildProtocol conformance. Use FixedLayoutChildRef only as an unowned reference to an existing GtkFixedLayoutChild instance.

    See more

    Declaration

    Swift

    public struct FixedLayoutChildRef : FixedLayoutChildProtocol, GWeakCapturing

FlattenListModel Class

  • GtkFlattenListModel is a list model that concatenates other list models.

    GtkFlattenListModel takes a list model containing list models, and flattens it into a single model.

    The FlattenListModelRef type acts as a lightweight Swift reference to an underlying GtkFlattenListModel instance. It exposes methods that can operate on this data type through FlattenListModelProtocol conformance. Use FlattenListModelRef only as an unowned reference to an existing GtkFlattenListModel instance.

    See more

    Declaration

    Swift

    public struct FlattenListModelRef : FlattenListModelProtocol, GWeakCapturing

FlowBox Class

  • A GtkFlowBox puts child widgets in reflowing grid.

    For instance, with the horizontal orientation, the widgets will be arranged from left to right, starting a new row under the previous row when necessary. Reducing the width in this case will require more rows, so a larger height will be requested.

    Likewise, with the vertical orientation, the widgets will be arranged from top to bottom, starting a new column to the right when necessary. Reducing the height will require more columns, so a larger width will be requested.

    The size request of a GtkFlowBox alone may not be what you expect; if you need to be able to shrink it along both axes and dynamically reflow its children, you may have to wrap it in a GtkScrolledWindow to enable that.

    The children of a GtkFlowBox can be dynamically sorted and filtered.

    Although a GtkFlowBox must have only GtkFlowBoxChild children, you can add any kind of widget to it via [methodGtk.FlowBox.insert], and a GtkFlowBoxChild widget will automatically be inserted between the box and the widget.

    Also see [classGtk.ListBox].

    CSS nodes

    flowbox
    ├── flowboxchild
       ╰── &lt;child&gt;
    ├── flowboxchild
       ╰── &lt;child&gt;
    
    ╰── [rubberband]
    

    GtkFlowBox uses a single CSS node with name flowbox. GtkFlowBoxChild uses a single CSS node with name flowboxchild. For rubberband selection, a subnode with name rubberband is used.

    Accessibility

    GtkFlowBox uses the GTK_ACCESSIBLE_ROLE_GRID role, and GtkFlowBoxChild uses the GTK_ACCESSIBLE_ROLE_GRID_CELL role.

    The FlowBoxRef type acts as a lightweight Swift reference to an underlying GtkFlowBox instance. It exposes methods that can operate on this data type through FlowBoxProtocol conformance. Use FlowBoxRef only as an unowned reference to an existing GtkFlowBox instance.

    See more

    Declaration

    Swift

    public struct FlowBoxRef : FlowBoxProtocol, GWeakCapturing

FlowBoxChild Class

  • GtkFlowBoxChild is the kind of widget that can be added to a GtkFlowBox.

    The FlowBoxChildRef type acts as a lightweight Swift reference to an underlying GtkFlowBoxChild instance. It exposes methods that can operate on this data type through FlowBoxChildProtocol conformance. Use FlowBoxChildRef only as an unowned reference to an existing GtkFlowBoxChild instance.

    See more

    Declaration

    Swift

    public struct FlowBoxChildRef : FlowBoxChildProtocol, GWeakCapturing

FontButton Class

  • The GtkFontButton allows to open a font chooser dialog to change the font.

    An example GtkFontButton

    It is suitable widget for selecting a font in a preference dialog.

    CSS nodes

    fontbutton
    ╰── button.font
        ╰── [content]
    

    GtkFontButton has a single CSS node with name fontbutton which contains a button node with the .font style class.

    The FontButtonRef type acts as a lightweight Swift reference to an underlying GtkFontButton instance. It exposes methods that can operate on this data type through FontButtonProtocol conformance. Use FontButtonRef only as an unowned reference to an existing GtkFontButton instance.

    See more

    Declaration

    Swift

    public struct FontButtonRef : FontButtonProtocol, GWeakCapturing

FontChooserDialog Class

  • The GtkFontChooserDialog widget is a dialog for selecting a font.

    An example GtkFontChooserDialog

    GtkFontChooserDialog implements the [ifaceGtk.FontChooser] interface and does not provide much API of its own.

    To create a GtkFontChooserDialog, use [ctorGtk.FontChooserDialog.new].

    GtkFontChooserDialog as GtkBuildable

    The GtkFontChooserDialog implementation of the GtkBuildable interface exposes the buttons with the names “select_button” and “cancel_button”.

    The FontChooserDialogRef type acts as a lightweight Swift reference to an underlying GtkFontChooserDialog instance. It exposes methods that can operate on this data type through FontChooserDialogProtocol conformance. Use FontChooserDialogRef only as an unowned reference to an existing GtkFontChooserDialog instance.

    See more

    Declaration

    Swift

    public struct FontChooserDialogRef : FontChooserDialogProtocol, GWeakCapturing

FontChooserWidget Class

  • The GtkFontChooserWidget widget lets the user select a font.

    It is used in the GtkFontChooserDialog widget to provide a dialog for selecting fonts.

    To set the font which is initially selected, use [methodGtk.FontChooser.set_font] or [methodGtk.FontChooser.set_font_desc].

    To get the selected font use [methodGtk.FontChooser.get_font] or [methodGtk.FontChooser.get_font_desc].

    To change the text which is shown in the preview area, use [methodGtk.FontChooser.set_preview_text].

    CSS nodes

    GtkFontChooserWidget has a single CSS node with name fontchooser.

    The FontChooserWidgetRef type acts as a lightweight Swift reference to an underlying GtkFontChooserWidget instance. It exposes methods that can operate on this data type through FontChooserWidgetProtocol conformance. Use FontChooserWidgetRef only as an unowned reference to an existing GtkFontChooserWidget instance.

    See more

    Declaration

    Swift

    public struct FontChooserWidgetRef : FontChooserWidgetProtocol, GWeakCapturing

Frame Class

  • GtkFrame is a widget that surrounds its child with a decorative frame and an optional label.

    An example GtkFrame

    If present, the label is drawn inside the top edge of the frame. The horizontal position of the label can be controlled with [methodGtk.Frame.set_label_align].

    GtkFrame clips its child. You can use this to add rounded corners to widgets, but be aware that it also cuts off shadows.

    GtkFrame as GtkBuildable

    The GtkFrame implementation of the GtkBuildable interface supports placing a child in the label position by specifying “label” as the “type” attribute of a <child> element. A normal content child can be specified without specifying a <child> type attribute.

    An example of a UI definition fragment with GtkFrame:

    &lt;object class="GtkFrame"&gt;
      &lt;child type="label"&gt;
        &lt;object class="GtkLabel" id="frame_label"/&gt;
      &lt;/child&gt;
      &lt;child&gt;
        &lt;object class="GtkEntry" id="frame_content"/&gt;
      &lt;/child&gt;
    &lt;/object&gt;
    

    CSS nodes

    frame
    ├── &lt;label widget&gt;
    ╰── &lt;child&gt;
    

    GtkFrame has a main CSS node with name “frame”, which is used to draw the visible border. You can set the appearance of the border using CSS properties like “border-style” on this node.

    The FrameRef type acts as a lightweight Swift reference to an underlying GtkFrame instance. It exposes methods that can operate on this data type through FrameProtocol conformance. Use FrameRef only as an unowned reference to an existing GtkFrame instance.

    See more

    Declaration

    Swift

    public struct FrameRef : FrameProtocol, GWeakCapturing

GLArea Class

  • GtkGLArea is a widget that allows drawing with OpenGL.

    An example GtkGLArea

    GtkGLArea sets up its own [classGdk.GLContext], and creates a custom GL framebuffer that the widget will do GL rendering onto. It also ensures that this framebuffer is the default GL rendering target when rendering.

    In order to draw, you have to connect to the [signalGtk.GLArea::render] signal, or subclass GtkGLArea and override the GtkGLAreaClass.render virtual function.

    The GtkGLArea widget ensures that the GdkGLContext is associated with the widget’s drawing area, and it is kept updated when the size and position of the drawing area changes.

    Drawing with GtkGLArea

    The simplest way to draw using OpenGL commands in a GtkGLArea is to create a widget instance and connect to the [signalGtk.GLArea::render] signal:

    The render() function will be called when the GtkGLArea is ready for you to draw its content:

    static gboolean
    render (GtkGLArea *area, GdkGLContext *context)
    {
      // inside this function it's safe to use GL; the given
      // GdkGLContext has been made current to the drawable
      // surface used by the `GtkGLArea` and the viewport has
      // already been set to be the size of the allocation
    
      // we can start by clearing the buffer
      glClearColor (0, 0, 0, 0);
      glClear (GL_COLOR_BUFFER_BIT);
    
      // draw your object
      // draw_an_object ();
    
      // we completed our drawing; the draw commands will be
      // flushed at the end of the signal emission chain, and
      // the buffers will be drawn on the window
      return TRUE;
    }
    
    void setup_glarea (void)
    {
      // create a GtkGLArea instance
      GtkWidget *gl_area = gtk_gl_area_new ();
    
      // connect to the "render" signal
      g_signal_connect (gl_area, "render", G_CALLBACK (render), NULL);
    }
    

    If you need to initialize OpenGL state, e.g. buffer objects or shaders, you should use the [signalGtk.Widget::realize] signal; you can use the [signalGtk.Widget::unrealize] signal to clean up. Since the GdkGLContext creation and initialization may fail, you will need to check for errors, using [methodGtk.GLArea.get_error].

    An example of how to safely initialize the GL state is:

    static void
    on_realize (GtkGLarea *area)
    {
      // We need to make the context current if we want to
      // call GL API
      gtk_gl_area_make_current (area);
    
      // If there were errors during the initialization or
      // when trying to make the context current, this
      // function will return a GError for you to catch
      if (gtk_gl_area_get_error (area) != NULL)
        return;
    
      // You can also use `gtk_gl_area_set_error()` in order
      // to show eventual initialization errors on the
      // GtkGLArea widget itself
      GError *internal_error = NULL;
      init_buffer_objects (&error);
      if (error != NULL)
        {
          gtk_gl_area_set_error (area, error);
          g_error_free (error);
          return;
        }
    
      init_shaders (&error);
      if (error != NULL)
        {
          gtk_gl_area_set_error (area, error);
          g_error_free (error);
          return;
        }
    }
    

    If you need to change the options for creating the GdkGLContext you should use the [signalGtk.GLArea::create-context] signal.

    The GLAreaRef type acts as a lightweight Swift reference to an underlying GtkGLArea instance. It exposes methods that can operate on this data type through GLAreaProtocol conformance. Use GLAreaRef only as an unowned reference to an existing GtkGLArea instance.

    See more

    Declaration

    Swift

    public struct GLAreaRef : GLAreaProtocol, GWeakCapturing

FilterClass Record

  • The FilterClassRef type acts as a lightweight Swift reference to an underlying GtkFilterClass instance. It exposes methods that can operate on this data type through FilterClassProtocol conformance. Use FilterClassRef only as an unowned reference to an existing GtkFilterClass instance.

    See more

    Declaration

    Swift

    public struct FilterClassRef : FilterClassProtocol

FilterListModelClass Record

FixedClass Record

  • The FixedClassRef type acts as a lightweight Swift reference to an underlying GtkFixedClass instance. It exposes methods that can operate on this data type through FixedClassProtocol conformance. Use FixedClassRef only as an unowned reference to an existing GtkFixedClass instance.

    See more

    Declaration

    Swift

    public struct FixedClassRef : FixedClassProtocol

FixedLayoutChildClass Record

FixedLayoutClass Record

FlattenListModelClass Record

FlowBoxChildClass Record

FontChooserIface Record

FrameClass Record

  • The FrameClassRef type acts as a lightweight Swift reference to an underlying GtkFrameClass instance. It exposes methods that can operate on this data type through FrameClassProtocol conformance. Use FrameClassRef only as an unowned reference to an existing GtkFrameClass instance.

    See more

    Declaration

    Swift

    public struct FrameClassRef : FrameClassProtocol

GLAreaClass Record

  • The GtkGLAreaClass structure contains only private data.

    The GLAreaClassRef type acts as a lightweight Swift reference to an underlying GtkGLAreaClass instance. It exposes methods that can operate on this data type through GLAreaClassProtocol conformance. Use GLAreaClassRef only as an unowned reference to an existing GtkGLAreaClass instance.

    See more

    Declaration

    Swift

    public struct GLAreaClassRef : GLAreaClassProtocol

Gesture Class

  • GtkGesture is the base class for gesture recognition.

    Although GtkGesture is quite generalized to serve as a base for multi-touch gestures, it is suitable to implement single-touch and pointer-based gestures (using the special nil GdkEventSequence value for these).

    The number of touches that a GtkGesture need to be recognized is controlled by the [propertyGtk.Gesture:n-points] property, if a gesture is keeping track of less or more than that number of sequences, it won’t check whether the gesture is recognized.

    As soon as the gesture has the expected number of touches, it will check regularly if it is recognized, the criteria to consider a gesture as “recognized” is left to GtkGesture subclasses.

    A recognized gesture will then emit the following signals:

    • [signalGtk.Gesture::begin] when the gesture is recognized.
    • [signalGtk.Gesture::update], whenever an input event is processed.
    • [signalGtk.Gesture::end] when the gesture is no longer recognized.

    Event propagation

    In order to receive events, a gesture needs to set a propagation phase through [methodGtk.EventController.set_propagation_phase].

    In the capture phase, events are propagated from the toplevel down to the target widget, and gestures that are attached to containers above the widget get a chance to interact with the event before it reaches the target.

    In the bubble phase, events are propagated up from the target widget to the toplevel, and gestures that are attached to containers above the widget get a chance to interact with events that have not been handled yet.

    States of a sequence

    Whenever input interaction happens, a single event may trigger a cascade of GtkGestures, both across the parents of the widget receiving the event and in parallel within an individual widget. It is a responsibility of the widgets using those gestures to set the state of touch sequences accordingly in order to enable cooperation of gestures around the GdkEventSequences triggering those.

    Within a widget, gestures can be grouped through [methodGtk.Gesture.group]. Grouped gestures synchronize the state of sequences, so calling [methodGtk.Gesture.set_sequence_state] on one will effectively propagate the state throughout the group.

    By default, all sequences start out in the GTK_EVENT_SEQUENCE_NONE state, sequences in this state trigger the gesture event handler, but event propagation will continue unstopped by gestures.

    If a sequence enters into the GTK_EVENT_SEQUENCE_DENIED state, the gesture group will effectively ignore the sequence, letting events go unstopped through the gesture, but the “slot” will still remain occupied while the touch is active.

    If a sequence enters in the GTK_EVENT_SEQUENCE_CLAIMED state, the gesture group will grab all interaction on the sequence, by:

    • Setting the same sequence to GTK_EVENT_SEQUENCE_DENIED on every other gesture group within the widget, and every gesture on parent widgets in the propagation chain.
    • Emitting [signalGtk.Gesture::cancel] on every gesture in widgets underneath in the propagation chain.
    • Stopping event propagation after the gesture group handles the event.

    Note: if a sequence is set early to GTK_EVENT_SEQUENCE_CLAIMED on GDK_TOUCH_BEGIN/GDK_BUTTON_PRESS (so those events are captured before reaching the event widget, this implies GTK_PHASE_CAPTURE), one similar event will emulated if the sequence changes to GTK_EVENT_SEQUENCE_DENIED. This way event coherence is preserved before event propagation is unstopped again.

    Sequence states can’t be changed freely. See [methodGtk.Gesture.set_sequence_state] to know about the possible lifetimes of a GdkEventSequence.

    Touchpad gestures

    On the platforms that support it, GtkGesture will handle transparently touchpad gesture events. The only precautions users of GtkGesture should do to enable this support are:

    • If the gesture has GTK_PHASE_NONE, ensuring events of type GDK_TOUCHPAD_SWIPE and GDK_TOUCHPAD_PINCH are handled by the GtkGesture

    The GestureRef type acts as a lightweight Swift reference to an underlying GtkGesture instance. It exposes methods that can operate on this data type through GestureProtocol conformance. Use GestureRef only as an unowned reference to an existing GtkGesture instance.

    See more

    Declaration

    Swift

    public struct GestureRef : GestureProtocol, GWeakCapturing

GestureClick Class

  • GtkGestureClick is a GtkGesture implementation for clicks.

    It is able to recognize multiple clicks on a nearby zone, which can be listened for through the [signalGtk.GestureClick::pressed] signal. Whenever time or distance between clicks exceed the GTK defaults, [signalGtk.GestureClick::stopped] is emitted, and the click counter is reset.

    The GestureClickRef type acts as a lightweight Swift reference to an underlying GtkGestureClick instance. It exposes methods that can operate on this data type through GestureClickProtocol conformance. Use GestureClickRef only as an unowned reference to an existing GtkGestureClick instance.

    See more

    Declaration

    Swift

    public struct GestureClickRef : GestureClickProtocol, GWeakCapturing

GestureDrag Class

  • GtkGestureDrag is a GtkGesture implementation for drags.

    The drag operation itself can be tracked throughout the [signalGtk.GestureDrag::drag-begin], [signalGtk.GestureDrag::drag-update] and [signalGtk.GestureDrag::drag-end] signals, and the relevant coordinates can be extracted through [methodGtk.GestureDrag.get_offset] and [methodGtk.GestureDrag.get_start_point].

    The GestureDragRef type acts as a lightweight Swift reference to an underlying GtkGestureDrag instance. It exposes methods that can operate on this data type through GestureDragProtocol conformance. Use GestureDragRef only as an unowned reference to an existing GtkGestureDrag instance.

    See more

    Declaration

    Swift

    public struct GestureDragRef : GestureDragProtocol, GWeakCapturing

GestureLongPress Class

  • GtkGestureLongPress is a GtkGesture for long presses.

    This gesture is also known as “Press and Hold”.

    When the timeout is exceeded, the gesture is triggering the [signalGtk.GestureLongPress::pressed] signal.

    If the touchpoint is lifted before the timeout passes, or if it drifts too far of the initial press point, the [signalGtk.GestureLongPress::cancelled] signal will be emitted.

    How long the timeout is before the pressed signal gets emitted is determined by the [propertyGtk.Settings:gtk-long-press-time] setting. It can be modified by the [propertyGtk.GestureLongPress:delay-factor] property.

    The GestureLongPressRef type acts as a lightweight Swift reference to an underlying GtkGestureLongPress instance. It exposes methods that can operate on this data type through GestureLongPressProtocol conformance. Use GestureLongPressRef only as an unowned reference to an existing GtkGestureLongPress instance.

    See more

    Declaration

    Swift

    public struct GestureLongPressRef : GestureLongPressProtocol, GWeakCapturing

GesturePan Class

  • GtkGesturePan is a GtkGesture for pan gestures.

    These are drags that are locked to happen along one axis. The axis that a GtkGesturePan handles is defined at construct time, and can be changed through [methodGtk.GesturePan.set_orientation].

    When the gesture starts to be recognized, GtkGesturePan will attempt to determine as early as possible whether the sequence is moving in the expected direction, and denying the sequence if this does not happen.

    Once a panning gesture along the expected axis is recognized, the [signalGtk.GesturePan::pan] signal will be emitted as input events are received, containing the offset in the given axis.

    The GesturePanRef type acts as a lightweight Swift reference to an underlying GtkGesturePan instance. It exposes methods that can operate on this data type through GesturePanProtocol conformance. Use GesturePanRef only as an unowned reference to an existing GtkGesturePan instance.

    See more

    Declaration

    Swift

    public struct GesturePanRef : GesturePanProtocol, GWeakCapturing

GestureRotate Class

  • GtkGestureRotate is a GtkGesture for 2-finger rotations.

    Whenever the angle between both handled sequences changes, the [signalGtk.GestureRotate::angle-changed] signal is emitted.

    The GestureRotateRef type acts as a lightweight Swift reference to an underlying GtkGestureRotate instance. It exposes methods that can operate on this data type through GestureRotateProtocol conformance. Use GestureRotateRef only as an unowned reference to an existing GtkGestureRotate instance.

    See more

    Declaration

    Swift

    public struct GestureRotateRef : GestureRotateProtocol, GWeakCapturing

GestureSingle Class

  • GtkGestureSingle is a GtkGestures subclass optimized for singe-touch and mouse gestures.

    Under interaction, these gestures stick to the first interacting sequence, which is accessible through [methodGtk.GestureSingle.get_current_sequence] while the gesture is being interacted with.

    By default gestures react to both GDK_BUTTON_PRIMARY and touch events. [methodGtk.GestureSingle.set_touch_only] can be used to change the touch behavior. Callers may also specify a different mouse button number to interact with through [methodGtk.GestureSingle.set_button], or react to any mouse button by setting it to 0. While the gesture is active, the button being currently pressed can be known through [methodGtk.GestureSingle.get_current_button].

    The GestureSingleRef type acts as a lightweight Swift reference to an underlying GtkGestureSingle instance. It exposes methods that can operate on this data type through GestureSingleProtocol conformance. Use GestureSingleRef only as an unowned reference to an existing GtkGestureSingle instance.

    See more

    Declaration

    Swift

    public struct GestureSingleRef : GestureSingleProtocol, GWeakCapturing

GestureStylus Class

  • GtkGestureStylus is a GtkGesture specific to stylus input.

    The provided signals just relay the basic information of the stylus events.

    The GestureStylusRef type acts as a lightweight Swift reference to an underlying GtkGestureStylus instance. It exposes methods that can operate on this data type through GestureStylusProtocol conformance. Use GestureStylusRef only as an unowned reference to an existing GtkGestureStylus instance.

    See more

    Declaration

    Swift

    public struct GestureStylusRef : GestureStylusProtocol, GWeakCapturing

GestureSwipe Class

  • GtkGestureSwipe is a GtkGesture for swipe gestures.

    After a press/move/…/move/release sequence happens, the [signalGtk.GestureSwipe::swipe] signal will be emitted, providing the velocity and directionality of the sequence at the time it was lifted.

    If the velocity is desired in intermediate points, [methodGtk.GestureSwipe.get_velocity] can be called in a [signalGtk.Gesture::update] handler.

    All velocities are reported in pixels/sec units.

    The GestureSwipeRef type acts as a lightweight Swift reference to an underlying GtkGestureSwipe instance. It exposes methods that can operate on this data type through GestureSwipeProtocol conformance. Use GestureSwipeRef only as an unowned reference to an existing GtkGestureSwipe instance.

    See more

    Declaration

    Swift

    public struct GestureSwipeRef : GestureSwipeProtocol, GWeakCapturing

GestureZoom Class

  • GtkGestureZoom is a GtkGesture for 2-finger pinch/zoom gestures.

    Whenever the distance between both tracked sequences changes, the [signalGtk.GestureZoom::scale-changed] signal is emitted to report the scale factor.

    The GestureZoomRef type acts as a lightweight Swift reference to an underlying GtkGestureZoom instance. It exposes methods that can operate on this data type through GestureZoomProtocol conformance. Use GestureZoomRef only as an unowned reference to an existing GtkGestureZoom instance.

    See more

    Declaration

    Swift

    public struct GestureZoomRef : GestureZoomProtocol, GWeakCapturing

Grid Class

  • GtkGrid is a container which arranges its child widgets in rows and columns.

    An example GtkGrid

    It supports arbitrary positions and horizontal/vertical spans.

    Children are added using [methodGtk.Grid.attach]. They can span multiple rows or columns. It is also possible to add a child next to an existing child, using [methodGtk.Grid.attach_next_to]. To remove a child from the grid, use [methodGtk.Grid.remove].

    The behaviour of GtkGrid when several children occupy the same grid cell is undefined.

    GtkGrid as GtkBuildable

    Every child in a GtkGrid has access to a custom [ifaceGtk.Buildable] element, called &lt;layout&gt;. It can by used to specify a position in the grid and optionally spans. All properties that can be used in the &lt;layout&gt; element are implemented by [classGtk.GridLayoutChild].

    It is implemented by GtkWidget using [classGtk.LayoutManager].

    To showcase it, here is a simple example:

    &lt;object class="GtkGrid" id="my_grid"&gt;
      &lt;child&gt;
        &lt;object class="GtkButton" id="button1"&gt;
          &lt;property name="label"&gt;Button 1&lt;/property&gt;
          &lt;layout&gt;
            &lt;property name="column"&gt;0&lt;/property&gt;
            &lt;property name="row"&gt;0&lt;/property&gt;
          &lt;/layout&gt;
        &lt;/object&gt;
      &lt;/child&gt;
      &lt;child&gt;
        &lt;object class="GtkButton" id="button2"&gt;
          &lt;property name="label"&gt;Button 2&lt;/property&gt;
          &lt;layout&gt;
            &lt;property name="column"&gt;1&lt;/property&gt;
            &lt;property name="row"&gt;0&lt;/property&gt;
          &lt;/layout&gt;
        &lt;/object&gt;
      &lt;/child&gt;
      &lt;child&gt;
        &lt;object class="GtkButton" id="button3"&gt;
          &lt;property name="label"&gt;Button 3&lt;/property&gt;
          &lt;layout&gt;
            &lt;property name="column"&gt;2&lt;/property&gt;
            &lt;property name="row"&gt;0&lt;/property&gt;
            &lt;property name="row-span"&gt;2&lt;/property&gt;
          &lt;/layout&gt;
        &lt;/object&gt;
      &lt;/child&gt;
      &lt;child&gt;
        &lt;object class="GtkButton" id="button4"&gt;
          &lt;property name="label"&gt;Button 4&lt;/property&gt;
          &lt;layout&gt;
            &lt;property name="column"&gt;0&lt;/property&gt;
            &lt;property name="row"&gt;1&lt;/property&gt;
            &lt;property name="column-span"&gt;2&lt;/property&gt;
          &lt;/layout&gt;
        &lt;/object&gt;
      &lt;/child&gt;
    &lt;/object&gt;
    

    It organizes the first two buttons side-by-side in one cell each. The third button is in the last column but spans across two rows. This is defined by the row-span property. The last button is located in the second row and spans across two columns, which is defined by the column-span property.

    CSS nodes

    GtkGrid uses a single CSS node with name grid.

    Accessibility

    GtkGrid uses the GTK_ACCESSIBLE_ROLE_GROUP role.

    The GridRef type acts as a lightweight Swift reference to an underlying GtkGrid instance. It exposes methods that can operate on this data type through GridProtocol conformance. Use GridRef only as an unowned reference to an existing GtkGrid instance.

    See more

    Declaration

    Swift

    public struct GridRef : GridProtocol, GWeakCapturing

GridLayout Class

  • GtkGridLayout is a layout manager which arranges child widgets in rows and columns.

    Children have an “attach point” defined by the horizontal and vertical index of the cell they occupy; children can span multiple rows or columns. The layout properties for setting the attach points and spans are set using the [classGtk.GridLayoutChild] associated to each child widget.

    The behaviour of GtkGridLayout when several children occupy the same grid cell is undefined.

    GtkGridLayout can be used like a GtkBoxLayout if all children are attached to the same row or column; however, if you only ever need a single row or column, you should consider using GtkBoxLayout.

    The GridLayoutRef type acts as a lightweight Swift reference to an underlying GtkGridLayout instance. It exposes methods that can operate on this data type through GridLayoutProtocol conformance. Use GridLayoutRef only as an unowned reference to an existing GtkGridLayout instance.

    See more

    Declaration

    Swift

    public struct GridLayoutRef : GridLayoutProtocol, GWeakCapturing

GridLayoutChild Class

  • GtkLayoutChild subclass for children in a GtkGridLayout.

    The GridLayoutChildRef type acts as a lightweight Swift reference to an underlying GtkGridLayoutChild instance. It exposes methods that can operate on this data type through GridLayoutChildProtocol conformance. Use GridLayoutChildRef only as an unowned reference to an existing GtkGridLayoutChild instance.

    See more

    Declaration

    Swift

    public struct GridLayoutChildRef : GridLayoutChildProtocol, GWeakCapturing

GridView Class

  • GtkGridView presents a large dynamic grid of items.

    GtkGridView uses its factory to generate one child widget for each visible item and shows them in a grid. The orientation of the grid view determines if the grid reflows vertically or horizontally.

    GtkGridView allows the user to select items according to the selection characteristics of the model. For models that allow multiple selected items, it is possible to turn on rubberband selection, using [propertyGtk.GridView:enable-rubberband].

    To learn more about the list widget framework, see the overview.

    CSS nodes

    gridview
    ├── child[.activatable]
    
    ├── child[.activatable]
    
    
    ╰── [rubberband]
    

    GtkGridView uses a single CSS node with name gridview. Each child uses a single CSS node with name child. If the [propertyGtk.ListItem:activatable] property is set, the corresponding row will have the .activatable style class. For rubberband selection, a subnode with name rubberband is used.

    Accessibility

    GtkGridView uses the GTK_ACCESSIBLE_ROLE_GRID role, and the items use the GTK_ACCESSIBLE_ROLE_GRID_CELL role.

    The GridViewRef type acts as a lightweight Swift reference to an underlying GtkGridView instance. It exposes methods that can operate on this data type through GridViewProtocol conformance. Use GridViewRef only as an unowned reference to an existing GtkGridView instance.

    See more

    Declaration

    Swift

    public struct GridViewRef : GridViewProtocol, GWeakCapturing

HeaderBar Class

  • GtkHeaderBar is a widget for creating custom title bars for windows.

    An example GtkHeaderBar

    GtkHeaderBar is similar to a horizontal GtkCenterBox. It allows children to be placed at the start or the end. In addition, it allows the window title to be displayed. The title will be centered with respect to the width of the box, even if the children at either side take up different amounts of space.

    GtkHeaderBar can add typical window frame controls, such as minimize, maximize and close buttons, or the window icon.

    For these reasons, GtkHeaderBar is the natural choice for use as the custom titlebar widget of a GtkWindow (see [methodGtk.Window.set_titlebar`]), as it gives features typical of titlebars while allowing the addition of child widgets.

    GtkHeaderBar as GtkBuildable

    The GtkHeaderBar implementation of the GtkBuildable interface supports adding children at the start or end sides by specifying “start” or “end” as the “type” attribute of a <child> element, or setting the title widget by specifying “title” value.

    By default the GtkHeaderBar uses a GtkLabel displaying the title of the window it is contained in as the title widget, equivalent to the following UI definition:

    &lt;object class="GtkHeaderBar"&gt;
      &lt;property name="title-widget"&gt;
        &lt;object class="GtkLabel"&gt;
          &lt;property name="label" translatable="yes"&gt;Label&lt;/property&gt;
          &lt;property name="single-line-mode"&gt;True&lt;/property&gt;
          &lt;property name="ellipsize"&gt;end&lt;/property&gt;
          &lt;property name="width-chars"&gt;5&lt;/property&gt;
          &lt;style&gt;
            &lt;class name="title"/&gt;
          &lt;/style&gt;
        &lt;/object&gt;
      &lt;/property&gt;
    &lt;/object&gt;
    

    CSS nodes

    headerbar
    ╰── windowhandle
        ╰── box
            ├── box.start
               ├── windowcontrols.start
               ╰── [other children]
            ├── [Title Widget]
            ╰── box.end
                ├── [other children]
                ╰── windowcontrols.end
    

    A GtkHeaderBar‘s CSS node is called headerbar. It contains a windowhandle subnode, which contains a box subnode, which contains two box subnodes at the start and end of the header bar, as well as a center node that represents the title.

    Each of the boxes contains a windowcontrols subnode, see [classGtk.WindowControls] for details, as well as other children.

    Accessibility

    GtkHeaderBar uses the GTK_ACCESSIBLE_ROLE_GROUP role.

    The HeaderBarRef type acts as a lightweight Swift reference to an underlying GtkHeaderBar instance. It exposes methods that can operate on this data type through HeaderBarProtocol conformance. Use HeaderBarRef only as an unowned reference to an existing GtkHeaderBar instance.

    See more

    Declaration

    Swift

    public struct HeaderBarRef : HeaderBarProtocol, GWeakCapturing

GestureClass Record

  • The GestureClassRef type acts as a lightweight Swift reference to an underlying GtkGestureClass instance. It exposes methods that can operate on this data type through GestureClassProtocol conformance. Use GestureClassRef only as an unowned reference to an existing GtkGestureClass instance.

    See more

    Declaration

    Swift

    public struct GestureClassRef : GestureClassProtocol

GestureClickClass Record

GestureDragClass Record

GestureLongPressClass Record

GesturePanClass Record

GestureRotateClass Record

GestureSingleClass Record

GestureStylusClass Record

GestureSwipeClass Record

GestureZoomClass Record

GridClass Record

  • The GridClassRef type acts as a lightweight Swift reference to an underlying GtkGridClass instance. It exposes methods that can operate on this data type through GridClassProtocol conformance. Use GridClassRef only as an unowned reference to an existing GtkGridClass instance.

    See more

    Declaration

    Swift

    public struct GridClassRef : GridClassProtocol

GridLayoutChildClass Record

GridLayoutClass Record

GridViewClass Record

  • The GridViewClassRef type acts as a lightweight Swift reference to an underlying GtkGridViewClass instance. It exposes methods that can operate on this data type through GridViewClassProtocol conformance. Use GridViewClassRef only as an unowned reference to an existing GtkGridViewClass instance.

    See more

    Declaration

    Swift

    public struct GridViewClassRef : GridViewClassProtocol

IMContextClass Record

  • The IMContextClassRef type acts as a lightweight Swift reference to an underlying GtkIMContextClass instance. It exposes methods that can operate on this data type through IMContextClassProtocol conformance. Use IMContextClassRef only as an unowned reference to an existing GtkIMContextClass instance.

    See more

    Declaration

    Swift

    public struct IMContextClassRef : IMContextClassProtocol

IMContext Class

  • GtkIMContext defines the interface for GTK input methods.

    GtkIMContext is used by GTK text input widgets like GtkText to map from key events to Unicode character strings.

    An input method may consume multiple key events in sequence before finally outputting the composed result. This is called preediting, and an input method may provide feedback about this process by displaying the intermediate composition states as preedit text. To do so, the GtkIMContext will emit [signalGtk.IMContext::preedit-start], [signalGtk.IMContext::preedit-changed] and [signalGtk.IMContext::preedit-end] signals.

    For instance, the built-in GTK input method [classGtk.IMContextSimple] implements the input of arbitrary Unicode code points by holding down the <kbd>Control</kbd> and <kbd>Shift</kbd> keys and then typing <kbd>u</kbd> followed by the hexadecimal digits of the code point. When releasing the <kbd>Control</kbd> and <kbd>Shift</kbd> keys, preediting ends and the character is inserted as text. For example,

    Ctrl+Shift+u 2 0 A C
    

    results in the € sign.

    Additional input methods can be made available for use by GTK widgets as loadable modules. An input method module is a small shared library which provides a GIOExtension for the extension point named “gtk-im-module”.

    To connect a widget to the users preferred input method, you should use [classGtk.IMMulticontext].

    The IMContextRef type acts as a lightweight Swift reference to an underlying GtkIMContext instance. It exposes methods that can operate on this data type through IMContextProtocol conformance. Use IMContextRef only as an unowned reference to an existing GtkIMContext instance.

    See more

    Declaration

    Swift

    public struct IMContextRef : IMContextProtocol, GWeakCapturing

IMContextSimple Class

  • GtkIMContextSimple is an input method supporting table-based input methods.

    Compose sequences

    GtkIMContextSimple reads compose sequences from the first of the following files that is found: ~/.config/gtk-4.0/Compose, ~/.XCompose, /usr/share/X11/locale/$locale/Compose (for locales that have a nontrivial Compose file). The syntax of these files is described in the Compose(5) manual page.

    If none of these files is found, GtkIMContextSimple uses a built-in table of compose sequences that is derived from the X11 Compose files.

    Note that compose sequences typically start with the Compose_key, which is often not available as a dedicated key on keyboards. Keyboard layouts may map this keysym to other keys, such as the right Control key.

    Unicode characters

    GtkIMContextSimple also supports numeric entry of Unicode characters by typing <kbd>Ctrl</kbd>-<kbd>Shift</kbd>-<kbd>u</kbd>, followed by a hexadecimal Unicode codepoint.

    For example,

    Ctrl-Shift-u 1 2 3 Enter
    

    yields U+0123 LATIN SMALL LETTER G WITH CEDILLA, i.e. ģ.

    Dead keys

    GtkIMContextSimple supports dead keys. For example, typing

    dead_acute a
    

    yields U+00E! LATIN SMALL LETTER_A WITH ACUTE, i.e. á. Note that this depends on the keyboard layout including dead keys.

    The IMContextSimpleRef type acts as a lightweight Swift reference to an underlying GtkIMContextSimple instance. It exposes methods that can operate on this data type through IMContextSimpleProtocol conformance. Use IMContextSimpleRef only as an unowned reference to an existing GtkIMContextSimple instance.

    See more

    Declaration

    Swift

    public struct IMContextSimpleRef : IMContextSimpleProtocol, GWeakCapturing

IMMulticontext Class

  • GtkIMMulticontext is an input method context supporting multiple, switchable input methods.

    Text widgets such as GtkText or GtkTextView use a GtkIMMultiContext to implement their im-module property for switching between different input methods.

    The IMMulticontextRef type acts as a lightweight Swift reference to an underlying GtkIMMulticontext instance. It exposes methods that can operate on this data type through IMMulticontextProtocol conformance. Use IMMulticontextRef only as an unowned reference to an existing GtkIMMulticontext instance.

    See more

    Declaration

    Swift

    public struct IMMulticontextRef : IMMulticontextProtocol, GWeakCapturing

IconPaintable Class

  • Contains information found when looking up an icon in GtkIconTheme.

    GtkIconPaintable implements GdkPaintable.

    The IconPaintableRef type acts as a lightweight Swift reference to an underlying GtkIconPaintable instance. It exposes methods that can operate on this data type through IconPaintableProtocol conformance. Use IconPaintableRef only as an unowned reference to an existing GtkIconPaintable instance.

    See more

    Declaration

    Swift

    public struct IconPaintableRef : IconPaintableProtocol, GWeakCapturing

IconTheme Class

  • GtkIconTheme provides a facility for loading themed icons.

    The main reason for using a name rather than simply providing a filename is to allow different icons to be used depending on what “icon theme” is selected by the user. The operation of icon themes on Linux and Unix follows the Icon Theme Specification There is a fallback icon theme, named hicolor, where applications should install their icons, but additional icon themes can be installed as operating system vendors and users choose.

    In many cases, named themes are used indirectly, via [classGtk.Image] rather than directly, but looking up icons directly is also simple. The GtkIconTheme object acts as a database of all the icons in the current theme. You can create new GtkIconTheme objects, but it’s much more efficient to use the standard icon theme of the GtkWidget so that the icon information is shared with other people looking up icons.

    GtkIconTheme *icon_theme;
    GtkIconPaintable *icon;
    GdkPaintable *paintable;
    
    icon_theme = gtk_icon_theme_get_for_display (gtk_widget_get_display (my_widget));
    icon = gtk_icon_theme_lookup_icon (icon_theme,
                                       "my-icon-name", // icon name
                                       48, // icon size
                                       1,  // scale
                                       0,  // flags);
    paintable = GDK_PAINTABLE (icon);
    // Use the paintable
    g_object_unref (icon);
    

    The IconThemeRef type acts as a lightweight Swift reference to an underlying GtkIconTheme instance. It exposes methods that can operate on this data type through IconThemeProtocol conformance. Use IconThemeRef only as an unowned reference to an existing GtkIconTheme instance.

    See more

    Declaration

    Swift

    public struct IconThemeRef : IconThemeProtocol, GWeakCapturing

IconView Class

  • GtkIconView is a widget which displays data in a grid of icons.

    GtkIconView provides an alternative view on a GtkTreeModel. It displays the model as a grid of icons with labels. Like [classGtk.TreeView], it allows to select one or multiple items (depending on the selection mode, see [methodGtk.IconView.set_selection_mode]). In addition to selection with the arrow keys, GtkIconView supports rubberband selection, which is controlled by dragging the pointer.

    Note that if the tree model is backed by an actual tree store (as opposed to a flat list where the mapping to icons is obvious), GtkIconView will only display the first level of the tree and ignore the tree’s branches.

    CSS nodes

    iconview.view
    ╰── [rubberband]
    

    GtkIconView has a single CSS node with name iconview and style class .view. For rubberband selection, a subnode with name rubberband is used.

    The IconViewRef type acts as a lightweight Swift reference to an underlying GtkIconView instance. It exposes methods that can operate on this data type through IconViewProtocol conformance. Use IconViewRef only as an unowned reference to an existing GtkIconView instance.

    See more

    Declaration

    Swift

    public struct IconViewRef : IconViewProtocol, GWeakCapturing

Image Class

  • The GtkImage widget displays an image.

    An example GtkImage

    Various kinds of object can be displayed as an image; most typically, you would load a GdkTexture from a file, using the convenience function [ctorGtk.Image.new_from_file], for instance:

    GtkWidget *image = gtk_image_new_from_file ("myfile.png");
    

    If the file isn’t loaded successfully, the image will contain a “broken image” icon similar to that used in many web browsers.

    If you want to handle errors in loading the file yourself, for example by displaying an error message, then load the image with [ctorGdk.Texture.new_from_file], then create the GtkImage with [ctorGtk.Image.new_from_paintable].

    Sometimes an application will want to avoid depending on external data files, such as image files. See the documentation of GResource inside GIO, for details. In this case, [propertyGtk.Image:resource], [ctorGtk.Image.new_from_resource], and [methodGtk.Image.set_from_resource] should be used.

    GtkImage displays its image as an icon, with a size that is determined by the application. See [classGtk.Picture] if you want to show an image at is actual size.

    CSS nodes

    GtkImage has a single CSS node with the name image. The style classes .normal-icons or .large-icons may appear, depending on the [propertyGtk.Image:icon-size] property.

    Accessibility

    GtkImage uses the GTK_ACCESSIBLE_ROLE_IMG role.

    The ImageRef type acts as a lightweight Swift reference to an underlying GtkImage instance. It exposes methods that can operate on this data type through ImageProtocol conformance. Use ImageRef only as an unowned reference to an existing GtkImage instance.

    See more

    Declaration

    Swift

    public struct ImageRef : ImageProtocol, GWeakCapturing

InfoBar Class

  • GtkInfoBar can be show messages to the user without a dialog.

    An example GtkInfoBar

    It is often temporarily shown at the top or bottom of a document. In contrast to [classGtk.Dialog], which has an action area at the bottom, GtkInfoBar has an action area at the side.

    The API of GtkInfoBar is very similar to GtkDialog, allowing you to add buttons to the action area with [methodGtk.InfoBar.add_button] or [ctorGtk.InfoBar.new_with_buttons]. The sensitivity of action widgets can be controlled with [methodGtk.InfoBar.set_response_sensitive].

    To add widgets to the main content area of a GtkInfoBar, use [methodGtk.InfoBar.add_child].

    Similar to [classGtk.MessageDialog], the contents of a GtkInfoBar can by classified as error message, warning, informational message, etc, by using [methodGtk.InfoBar.set_message_type]. GTK may use the message type to determine how the message is displayed.

    A simple example for using a GtkInfoBar:

    GtkWidget *message_label;
    GtkWidget *widget;
    GtkWidget *grid;
    GtkInfoBar *bar;
    
    // set up info bar
    widget = gtk_info_bar_new ();
    bar = GTK_INFO_BAR (widget);
    grid = gtk_grid_new ();
    
    message_label = gtk_label_new ("");
    gtk_info_bar_add_child (bar, message_label);
    gtk_info_bar_add_button (bar,
                             `_("_OK")`,
                             GTK_RESPONSE_OK);
    g_signal_connect (bar,
                      "response",
                      G_CALLBACK (gtk_widget_hide),
                      NULL);
    gtk_grid_attach (GTK_GRID (grid),
                     widget,
                     0, 2, 1, 1);
    
    // ...
    
    // show an error message
    gtk_label_set_text (GTK_LABEL (message_label), "An error occurred!");
    gtk_info_bar_set_message_type (bar, GTK_MESSAGE_ERROR);
    gtk_widget_show (bar);
    

    GtkInfoBar as GtkBuildable

    GtkInfoBar supports a custom <action-widgets> element, which can contain multiple <action-widget> elements. The “response” attribute specifies a numeric response, and the content of the element is the id of widget (which should be a child of the dialogs action_area).

    GtkInfoBar supports adding action widgets by specifying “action” as the “type” attribute of a &lt;child&gt; element. The widget will be added either to the action area. The response id has to be associated with the action widget using the &lt;action-widgets&gt; element.

    CSS nodes

    GtkInfoBar has a single CSS node with name infobar. The node may get one of the style classes .info, .warning, .error or .question, depending on the message type. If the info bar shows a close button, that button will have the .close style class applied.

    The InfoBarRef type acts as a lightweight Swift reference to an underlying GtkInfoBar instance. It exposes methods that can operate on this data type through InfoBarProtocol conformance. Use InfoBarRef only as an unowned reference to an existing GtkInfoBar instance.

    See more

    Declaration

    Swift

    public struct InfoBarRef : InfoBarProtocol, GWeakCapturing

KeyvalTrigger Class

  • A GtkShortcutTrigger that triggers when a specific keyval and modifiers are pressed.

    The KeyvalTriggerRef type acts as a lightweight Swift reference to an underlying GtkKeyvalTrigger instance. It exposes methods that can operate on this data type through KeyvalTriggerProtocol conformance. Use KeyvalTriggerRef only as an unowned reference to an existing GtkKeyvalTrigger instance.

    See more

    Declaration

    Swift

    public struct KeyvalTriggerRef : KeyvalTriggerProtocol, GWeakCapturing

IMContextSimpleClass Record

IMMulticontextClass Record

KeyvalTriggerClass Record

Label Class

  • The GtkLabel widget displays a small amount of text.

    As the name implies, most labels are used to label another widget such as a [classButton].

    An example GtkLabel

    CSS nodes

    label
    ├── [selection]
    ├── [link]
    
    ╰── [link]
    

    GtkLabel has a single CSS node with the name label. A wide variety of style classes may be applied to labels, such as .title, .subtitle, .dim-label, etc. In the GtkShortcutsWindow, labels are used with the .keycap style class.

    If the label has a selection, it gets a subnode with name selection.

    If the label has links, there is one subnode per link. These subnodes carry the link or visited state depending on whether they have been visited. In this case, label node also gets a .link style class.

    GtkLabel as GtkBuildable

    The GtkLabel implementation of the GtkBuildable interface supports a custom <attributes> element, which supports any number of <attribute> elements. The <attribute> element has attributes named “name“, “value“, “start“ and “end“ and allows you to specify [structPango.Attribute] values for this label.

    An example of a UI definition fragment specifying Pango attributes:

    &lt;object class="GtkLabel"&gt;
      &lt;attributes&gt;
        &lt;attribute name="weight" value="PANGO_WEIGHT_BOLD"/&gt;
        &lt;attribute name="background" value="red" start="5" end="10"/&gt;
      &lt;/attributes&gt;
    &lt;/object&gt;
    

    The start and end attributes specify the range of characters to which the Pango attribute applies. If start and end are not specified, the attribute is applied to the whole text. Note that specifying ranges does not make much sense with translatable attributes. Use markup embedded in the translatable content instead.

    Accessibility

    GtkLabel uses the GTK_ACCESSIBLE_ROLE_LABEL role.

    Mnemonics

    Labels may contain “mnemonics”. Mnemonics are underlined characters in the label, used for keyboard navigation. Mnemonics are created by providing a string with an underscore before the mnemonic character, such as "_File", to the functions [ctorGtk.Label.new_with_mnemonic] or [methodGtk.Label.set_text_with_mnemonic].

    Mnemonics automatically activate any activatable widget the label is inside, such as a [classGtk.Button]; if the label is not inside the mnemonic’s target widget, you have to tell the label about the target using [classGtk.Label.set_mnemonic_widget]. Here’s a simple example where the label is inside a button:

    // Pressing Alt+H will activate this button
    GtkWidget *button = gtk_button_new ();
    GtkWidget *label = gtk_label_new_with_mnemonic ("_Hello");
    gtk_button_set_child (GTK_BUTTON (button), label);
    

    There’s a convenience function to create buttons with a mnemonic label already inside:

    // Pressing Alt+H will activate this button
    GtkWidget *button = gtk_button_new_with_mnemonic ("_Hello");
    

    To create a mnemonic for a widget alongside the label, such as a [classGtk.Entry], you have to point the label at the entry with [methodGtk.Label.set_mnemonic_widget]:

    // Pressing Alt+H will focus the entry
    GtkWidget *entry = gtk_entry_new ();
    GtkWidget *label = gtk_label_new_with_mnemonic ("_Hello");
    gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry);
    

    Markup (styled text)

    To make it easy to format text in a label (changing colors, fonts, etc.), label text can be provided in a simple markup format:

    Here’s how to create a label with a small font:

    GtkWidget *label = gtk_label_new (NULL);
    gtk_label_set_markup (GTK_LABEL (label), "&lt;small&gt;Small text&lt;/small&gt;");
    

    (See the Pango manual for complete documentation] of available tags, [funcPango.parse_markup])

    The markup passed to gtk_label_set_markup() must be valid; for example, literal <, > and & characters must be escaped as <, >, and &. If you pass text obtained from the user, file, or a network to [methodGtk.Label.set_markup], you’ll want to escape it with g_markup_escape_text() or g_markup_printf_escaped().

    Markup strings are just a convenient way to set the [structPango.AttrList] on a label; [methodGtk.Label.set_attributes] may be a simpler way to set attributes in some cases. Be careful though; [structPango.AttrList] tends to cause internationalization problems, unless you’re applying attributes to the entire string (i.e. unless you set the range of each attribute to [0, G_MAXINT)). The reason is that specifying the start_index and end_index for a [structPango.Attribute] requires knowledge of the exact string being displayed, so translations will cause problems.

    Selectable labels

    Labels can be made selectable with [methodGtk.Label.set_selectable]. Selectable labels allow the user to copy the label contents to the clipboard. Only labels that contain useful-to-copy information — such as error messages — should be made selectable.

    Text layout

    A label can contain any number of paragraphs, but will have performance problems if it contains more than a small number. Paragraphs are separated by newlines or other paragraph separators understood by Pango.

    Labels can automatically wrap text if you call [methodGtk.Label.set_wrap].

    [methodGtk.Label.set_justify] sets how the lines in a label align with one another. If you want to set how the label as a whole aligns in its available space, see the [propertyGtk.Widget:halign] and [propertyGtk.Widget:valign] properties.

    The [propertyGtk.Label:width-chars] and [propertyGtk.Label:max-width-chars] properties can be used to control the size allocation of ellipsized or wrapped labels. For ellipsizing labels, if either is specified (and less than the actual text size), it is used as the minimum width, and the actual text size is used as the natural width of the label. For wrapping labels, width-chars is used as the minimum width, if specified, and max-width-chars is used as the natural width. Even if max-width-chars specified, wrapping labels will be rewrapped to use all of the available width.

    Links

    GTK supports markup for clickable hyperlinks in addition to regular Pango markup. The markup for links is borrowed from HTML, using the &lt;a&gt; with “href“, “title“ and “class“ attributes. GTK renders links similar to the way they appear in web browsers, with colored, underlined text. The “title“ attribute is displayed as a tooltip on the link. The “class“ attribute is used as style class on the CSS node for the link.

    An example looks like this:

    const char *text =
    "Go to the"
    "&lt;a href=\"http://www.gtk.org title=\"&lt;i&gt;Our&lt;/i&gt; website\"&gt;"
    "GTK website&lt;/a&gt; for more...";
    GtkWidget *label = gtk_label_new (NULL);
    gtk_label_set_markup (GTK_LABEL (label), text);
    

    It is possible to implement custom handling for links and their tooltips with the [signalGtk.Label::activate-link] signal and the [methodGtk.Label.get_current_uri] function.

    The LabelRef type acts as a lightweight Swift reference to an underlying GtkLabel instance. It exposes methods that can operate on this data type through LabelProtocol conformance. Use LabelRef only as an unowned reference to an existing GtkLabel instance.

    See more

    Declaration

    Swift

    public struct LabelRef : LabelProtocol, GWeakCapturing

LayoutChild Class

  • GtkLayoutChild is the base class for objects that are meant to hold layout properties.

    If a GtkLayoutManager has per-child properties, like their packing type, or the horizontal and vertical span, or the icon name, then the layout manager should use a GtkLayoutChild implementation to store those properties.

    A GtkLayoutChild instance is only ever valid while a widget is part of a layout.

    The LayoutChildRef type acts as a lightweight Swift reference to an underlying GtkLayoutChild instance. It exposes methods that can operate on this data type through LayoutChildProtocol conformance. Use LayoutChildRef only as an unowned reference to an existing GtkLayoutChild instance.

    See more

    Declaration

    Swift

    public struct LayoutChildRef : LayoutChildProtocol, GWeakCapturing

LayoutManager Class

  • Layout managers are delegate classes that handle the preferred size and the allocation of a widget.

    You typically subclass GtkLayoutManager if you want to implement a layout policy for the children of a widget, or if you want to determine the size of a widget depending on its contents.

    Each GtkWidget can only have a GtkLayoutManager instance associated to it at any given time; it is possible, though, to replace the layout manager instance using [methodGtk.Widget.set_layout_manager].

    Layout properties

    A layout manager can expose properties for controlling the layout of each child, by creating an object type derived from [classGtk.LayoutChild] and installing the properties on it as normal GObject properties.

    Each GtkLayoutChild instance storing the layout properties for a specific child is created through the [methodGtk.LayoutManager.get_layout_child] method; a GtkLayoutManager controls the creation of its GtkLayoutChild instances by overriding the GtkLayoutManagerClass.create_layout_child() virtual function. The typical implementation should look like:

    static GtkLayoutChild *
    create_layout_child (GtkLayoutManager *manager,
                         GtkWidget        *container,
                         GtkWidget        *child)
    {
      return g_object_new (your_layout_child_get_type (),
                           "layout-manager", manager,
                           "child-widget", child,
                           NULL);
    }
    

    The [propertyGtk.LayoutChild:layout-manager] and [propertyGtk.LayoutChild:child-widget] properties on the newly created GtkLayoutChild instance are mandatory. The GtkLayoutManager will cache the newly created GtkLayoutChild instance until the widget is removed from its parent, or the parent removes the layout manager.

    Each GtkLayoutManager instance creating a GtkLayoutChild should use [methodGtk.LayoutManager.get_layout_child] every time it needs to query the layout properties; each GtkLayoutChild instance should call [methodGtk.LayoutManager.layout_changed] every time a property is updated, in order to queue a new size measuring and allocation.

    The LayoutManagerRef type acts as a lightweight Swift reference to an underlying GtkLayoutManager instance. It exposes methods that can operate on this data type through LayoutManagerProtocol conformance. Use LayoutManagerRef only as an unowned reference to an existing GtkLayoutManager instance.

    See more

    Declaration

    Swift

    public struct LayoutManagerRef : LayoutManagerProtocol, GWeakCapturing

LevelBar Class

  • GtkLevelBar is a widget that can be used as a level indicator.

    Typical use cases are displaying the strength of a password, or showing the charge level of a battery.

    An example GtkLevelBar

    Use [methodGtk.LevelBar.set_value] to set the current value, and [methodGtk.LevelBar.add_offset_value] to set the value offsets at which the bar will be considered in a different state. GTK will add a few offsets by default on the level bar: GTK_LEVEL_BAR_OFFSET_LOW, GTK_LEVEL_BAR_OFFSET_HIGH and GTK_LEVEL_BAR_OFFSET_FULL, with values 0.25, 0.75 and 1.0 respectively.

    Note that it is your responsibility to update preexisting offsets when changing the minimum or maximum value. GTK will simply clamp them to the new range.

    Adding a custom offset on the bar

    static GtkWidget *
    create_level_bar (void)
    {
      GtkWidget *widget;
      GtkLevelBar *bar;
    
      widget = gtk_level_bar_new ();
      bar = GTK_LEVEL_BAR (widget);
    
      // This changes the value of the default low offset
    
      gtk_level_bar_add_offset_value (bar,
                                      GTK_LEVEL_BAR_OFFSET_LOW,
                                      0.10);
    
      // This adds a new offset to the bar; the application will
      // be able to change its color CSS like this:
      //
      // levelbar block.my-offset {
      //   background-color: magenta;
      //   border-style: solid;
      //   border-color: black;
      //   border-style: 1px;
      // }
    
      gtk_level_bar_add_offset_value (bar, "my-offset", 0.60);
    
      return widget;
    }
    

    The default interval of values is between zero and one, but it’s possible to modify the interval using [methodGtk.LevelBar.set_min_value] and [methodGtk.LevelBar.set_max_value]. The value will be always drawn in proportion to the admissible interval, i.e. a value of 15 with a specified interval between 10 and 20 is equivalent to a value of 0.5 with an interval between 0 and 1. When GTK_LEVEL_BAR_MODE_DISCRETE is used, the bar level is rendered as a finite number of separated blocks instead of a single one. The number of blocks that will be rendered is equal to the number of units specified by the admissible interval.

    For instance, to build a bar rendered with five blocks, it’s sufficient to set the minimum value to 0 and the maximum value to 5 after changing the indicator mode to discrete.

    GtkLevelBar as GtkBuildable

    The GtkLevelBar implementation of the GtkBuildable interface supports a custom <offsets> element, which can contain any number of <offset> elements, each of which must have name and value attributes.

    CSS nodes

    levelbar[.discrete]
    ╰── trough
        ├── block.filled.level-name
        
        ├── block.empty
        
    

    GtkLevelBar has a main CSS node with name levelbar and one of the style classes .discrete or .continuous and a subnode with name trough. Below the trough node are a number of nodes with name block and style class .filled or .empty. In continuous mode, there is exactly one node of each, in discrete mode, the number of filled and unfilled nodes corresponds to blocks that are drawn. The block.filled nodes also get a style class .level-name corresponding to the level for the current value.

    In horizontal orientation, the nodes are always arranged from left to right, regardless of text direction.

    Accessibility

    GtkLevelBar uses the GTK_ACCESSIBLE_ROLE_METER role.

    The LevelBarRef type acts as a lightweight Swift reference to an underlying GtkLevelBar instance. It exposes methods that can operate on this data type through LevelBarProtocol conformance. Use LevelBarRef only as an unowned reference to an existing GtkLevelBar instance.

    See more

    Declaration

    Swift

    public struct LevelBarRef : LevelBarProtocol, GWeakCapturing

LinkButton Class

  • A GtkLinkButton is a button with a hyperlink.

    An example GtkLinkButton

    It is useful to show quick links to resources.

    A link button is created by calling either [ctorGtk.LinkButton.new] or [ctorGtk.LinkButton.new_with_label]. If using the former, the URI you pass to the constructor is used as a label for the widget.

    The URI bound to a GtkLinkButton can be set specifically using [methodGtk.LinkButton.set_uri].

    By default, GtkLinkButton calls [funcGtk.show_uri] when the button is clicked. This behaviour can be overridden by connecting to the [signalGtk.LinkButton::activate-link] signal and returning true from the signal handler.

    CSS nodes

    GtkLinkButton has a single CSS node with name button. To differentiate it from a plain GtkButton, it gets the .link style class.

    Accessibility

    GtkLinkButton uses the GTK_ACCESSIBLE_ROLE_LINK role.

    The LinkButtonRef type acts as a lightweight Swift reference to an underlying GtkLinkButton instance. It exposes methods that can operate on this data type through LinkButtonProtocol conformance. Use LinkButtonRef only as an unowned reference to an existing GtkLinkButton instance.

    See more

    Declaration

    Swift

    public struct LinkButtonRef : LinkButtonProtocol, GWeakCapturing

ListBase Class

  • GtkListBase is the abstract base class for GTK’s list widgets.

    The ListBaseRef type acts as a lightweight Swift reference to an underlying GtkListBase instance. It exposes methods that can operate on this data type through ListBaseProtocol conformance. Use ListBaseRef only as an unowned reference to an existing GtkListBase instance.

    See more

    Declaration

    Swift

    public struct ListBaseRef : ListBaseProtocol, GWeakCapturing

ListBox Class

  • GtkListBox is a vertical list.

    A GtkListBox only contains GtkListBoxRow children. These rows can by dynamically sorted and filtered, and headers can be added dynamically depending on the row content. It also allows keyboard and mouse navigation and selection like a typical list.

    Using GtkListBox is often an alternative to GtkTreeView, especially when the list contents has a more complicated layout than what is allowed by a GtkCellRenderer, or when the contents is interactive (i.e. has a button in it).

    Although a GtkListBox must have only GtkListBoxRow children, you can add any kind of widget to it via [methodGtk.ListBox.prepend], [methodGtk.ListBox.append] and [methodGtk.ListBox.insert] and a GtkListBoxRow widget will automatically be inserted between the list and the widget.

    GtkListBoxRows can be marked as activatable or selectable. If a row is activatable, [signalGtk.ListBox::row-activated] will be emitted for it when the user tries to activate it. If it is selectable, the row will be marked as selected when the user tries to select it.

    GtkListBox as GtkBuildable

    The GtkListBox implementation of the GtkBuildable interface supports setting a child as the placeholder by specifying “placeholder” as the “type” attribute of a <child> element. See [methodGtk.ListBox.set_placeholder] for info.

    CSS nodes

    (plain Language Example):

    list[.separators][.rich-list][.navigation-sidebar]
    ╰── row[.activatable]
    

    GtkListBox uses a single CSS node named list. It may carry the .separators style class, when the [propertyGtk.ListBox:show-separators] property is set. Each GtkListBoxRow uses a single CSS node named row. The row nodes get the .activatable style class added when appropriate.

    The main list node may also carry style classes to select the style of list presentation: .rich-list, .navigation-sidebar or .data-table.

    Accessibility

    GtkListBox uses the GTK_ACCESSIBLE_ROLE_LIST role and GtkListBoxRow uses the GTK_ACCESSIBLE_ROLE_LIST_ITEM role.

    The ListBoxRef type acts as a lightweight Swift reference to an underlying GtkListBox instance. It exposes methods that can operate on this data type through ListBoxProtocol conformance. Use ListBoxRef only as an unowned reference to an existing GtkListBox instance.

    See more

    Declaration

    Swift

    public struct ListBoxRef : ListBoxProtocol, GWeakCapturing

ListBoxRow Class

  • GtkListBoxRow is the kind of widget that can be added to a GtkListBox.

    The ListBoxRowRef type acts as a lightweight Swift reference to an underlying GtkListBoxRow instance. It exposes methods that can operate on this data type through ListBoxRowProtocol conformance. Use ListBoxRowRef only as an unowned reference to an existing GtkListBoxRow instance.

    See more

    Declaration

    Swift

    public struct ListBoxRowRef : ListBoxRowProtocol, GWeakCapturing

ListItem Class

  • GtkListItem is used by list widgets to represent items in a GListModel.

    The GtkListItems are managed by the list widget (with its factory) and cannot be created by applications, but they need to be populated by application code. This is done by calling [methodGtk.ListItem.set_child].

    GtkListItems exist in 2 stages:

    1. The unbound stage where the listitem is not currently connected to an item in the list. In that case, the [propertyGtk.ListItem:item] property is set to nil.

    2. The bound stage where the listitem references an item from the list. The [propertyGtk.ListItem:item] property is not nil.

    The ListItemRef type acts as a lightweight Swift reference to an underlying GtkListItem instance. It exposes methods that can operate on this data type through ListItemProtocol conformance. Use ListItemRef only as an unowned reference to an existing GtkListItem instance.

    See more

    Declaration

    Swift

    public struct ListItemRef : ListItemProtocol, GWeakCapturing

ListItemFactory Class

  • A GtkListItemFactory creates widgets for the items taken from a GListModel.

    This is one of the core concepts of handling list widgets such as [classGtk.ListView] or [classGtk.GridView].

    The GtkListItemFactory is tasked with creating widgets for items taken from the model when the views need them and updating them as the items displayed by the view change.

    A view is usually only able to display anything after both a factory and a model have been set on the view. So it is important that you do not skip this step when setting up your first view.

    Because views do not display the whole list at once but only a few items, they only need to maintain a few widgets at a time. They will instruct the GtkListItemFactory to create these widgets and bind them to the items that are currently displayed.

    As the list model changes or the user scrolls to the list, the items will change and the view will instruct the factory to bind the widgets to those new items.

    The actual widgets used for displaying those widgets is provided by you.

    When the factory needs widgets created, it will create a GtkListItem and hand it to your code to set up a widget for. This list item will provide various properties with information about what item to display and provide you with some opportunities to configure its behavior. See the [classGtk.ListItem] documentation for further details.

    Various implementations of GtkListItemFactory exist to allow you different ways to provide those widgets. The most common implementations are [classGtk.BuilderListItemFactory] which takes a GtkBuilder .ui file and then creates widgets and manages everything automatically from the information in that file and [classGtk.SignalListItemFactory] which allows you to connect to signals with your own code and retain full control over how the widgets are setup and managed.

    A GtkListItemFactory is supposed to be final - that means its behavior should not change and the first widget created from it should behave the same way as the last widget created from it. If you intend to do changes to the behavior, it is recommended that you create a new GtkListItemFactory which will allow the views to recreate its widgets.

    Once you have chosen your factory and created it, you need to set it on the view widget you want to use it with, such as via [methodGtk.ListView.set_factory]. Reusing factories across different views is allowed, but very uncommon.

    The ListItemFactoryRef type acts as a lightweight Swift reference to an underlying GtkListItemFactory instance. It exposes methods that can operate on this data type through ListItemFactoryProtocol conformance. Use ListItemFactoryRef only as an unowned reference to an existing GtkListItemFactory instance.

    See more

    Declaration

    Swift

    public struct ListItemFactoryRef : ListItemFactoryProtocol, GWeakCapturing

ListStore Class

  • A list-like data structure that can be used with the GtkTreeView

    The GtkListStore object is a list model for use with a GtkTreeView widget. It implements the GtkTreeModel interface, and consequentialy, can use all of the methods available there. It also implements the GtkTreeSortable interface so it can be sorted by the view. Finally, it also implements the tree drag and drop interfaces.

    The GtkListStore can accept most GObject types as a column type, though it can’t accept all custom types. Internally, it will keep a copy of data passed in (such as a string or a boxed pointer). Columns that accept GObjects are handled a little differently. The GtkListStore will keep a reference to the object instead of copying the value. As a result, if the object is modified, it is up to the application writer to call gtk_tree_model_row_changed() to emit the GtkTreeModelrow_changed signal. This most commonly affects lists with GdkTextures stored.

    An example for creating a simple list store: (C Language Example):

    enum {
      COLUMN_STRING,
      COLUMN_INT,
      COLUMN_BOOLEAN,
      N_COLUMNS
    };
    
    {
      GtkListStore *list_store;
      GtkTreePath *path;
      GtkTreeIter iter;
      int i;
    
      list_store = gtk_list_store_new (N_COLUMNS,
                                       G_TYPE_STRING,
                                       G_TYPE_INT,
                                       G_TYPE_BOOLEAN);
    
      for (i = 0; i < 10; i++)
        {
          char *some_data;
    
          some_data = get_some_data (i);
    
          // Add a new row to the model
          gtk_list_store_append (list_store, &iter);
          gtk_list_store_set (list_store, &iter,
                              COLUMN_STRING, some_data,
                              COLUMN_INT, i,
                              COLUMN_BOOLEAN,  FALSE,
                              -1);
    
          // As the store will keep a copy of the string internally,
          // we free some_data.
          g_free (some_data);
        }
    
      // Modify a particular row
      path = gtk_tree_path_new_from_string ("4");
      gtk_tree_model_get_iter (GTK_TREE_MODEL (list_store),
                               &iter,
                               path);
      gtk_tree_path_free (path);
      gtk_list_store_set (list_store, &iter,
                          COLUMN_BOOLEAN, TRUE,
                          -1);
    }
    

    Performance Considerations

    Internally, the GtkListStore was originally implemented with a linked list with a tail pointer. As a result, it was fast at data insertion and deletion, and not fast at random data access. The GtkListStore sets the GTK_TREE_MODEL_ITERS_PERSIST flag, which means that GtkTreeIters can be cached while the row exists. Thus, if access to a particular row is needed often and your code is expected to run on older versions of GTK, it is worth keeping the iter around.

    Atomic Operations

    It is important to note that only the methods gtk_list_store_insert_with_values() and gtk_list_store_insert_with_valuesv() are atomic, in the sense that the row is being appended to the store and the values filled in in a single operation with regard to GtkTreeModel signaling. In contrast, using e.g. gtk_list_store_append() and then gtk_list_store_set() will first create a row, which triggers the GtkTreeModelrow-inserted signal on GtkListStore. The row, however, is still empty, and any signal handler connecting to GtkTreeModelrow-inserted on this particular store should be prepared for the situation that the row might be empty. This is especially important if you are wrapping the GtkListStore inside a GtkTreeModelFilter and are using a GtkTreeModelFilterVisibleFunc. Using any of the non-atomic operations to append rows to the GtkListStore will cause the GtkTreeModelFilterVisibleFunc to be visited with an empty row first; the function must be prepared for that.

    GtkListStore as GtkBuildable

    The GtkListStore implementation of the GtkBuildable interface allows to specify the model columns with a <columns> element that may contain multiple <column> elements, each specifying one model column. The “type” attribute specifies the data type for the column.

    Additionally, it is possible to specify content for the list store in the UI definition, with the <data> element. It can contain multiple <row> elements, each specifying to content for one row of the list model. Inside a <row>, the <col> elements specify the content for individual cells.

    Note that it is probably more common to define your models in the code, and one might consider it a layering violation to specify the content of a list store in a UI definition, data, not presentation, and common wisdom is to separate the two, as far as possible.

    An example of a UI Definition fragment for a list store: (C Language Example):

    <object class="GtkListStore">
      <columns>
        <column type="gchararray"/>
        <column type="gchararray"/>
        <column type="gint"/>
      </columns>
      <data>
        <row>
          <col id="0">John</col>
          <col id="1">Doe</col>
          <col id="2">25</col>
        </row>
        <row>
          <col id="0">Johan</col>
          <col id="1">Dahlin</col>
          <col id="2">50</col>
        </row>
      </data>
    </object>
    

    The ListStoreRef type acts as a lightweight Swift reference to an underlying GtkListStore instance. It exposes methods that can operate on this data type through ListStoreProtocol conformance. Use ListStoreRef only as an unowned reference to an existing GtkListStore instance.

    See more

    Declaration

    Swift

    public struct ListStoreRef : ListStoreProtocol, GWeakCapturing

ListView Class

  • GtkListView presents a large dynamic list of items.

    GtkListView uses its factory to generate one row widget for each visible item and shows them in a linear display, either vertically or horizontally.

    The [propertyGtk.ListView:show-separators] property offers a simple way to display separators between the rows.

    GtkListView allows the user to select items according to the selection characteristics of the model. For models that allow multiple selected items, it is possible to turn on rubberband selection, using [propertyGtk.ListView:enable-rubberband].

    If you need multiple columns with headers, see [classGtk.ColumnView].

    To learn more about the list widget framework, see the overview.

    An example of using GtkListView:

    static void
    setup_listitem_cb (GtkListItemFactory *factory,
                       GtkListItem        *list_item)
    {
      GtkWidget *image;
    
      image = gtk_image_new ();
      gtk_image_set_icon_size (GTK_IMAGE (image), GTK_ICON_SIZE_LARGE);
      gtk_list_item_set_child (list_item, image);
    }
    
    static void
    bind_listitem_cb (GtkListItemFactory *factory,
                      GtkListItem        *list_item)
    {
      GtkWidget *image;
      GAppInfo *app_info;
    
      image = gtk_list_item_get_child (list_item);
      app_info = gtk_list_item_get_item (list_item);
      gtk_image_set_from_gicon (GTK_IMAGE (image), g_app_info_get_icon (app_info));
    }
    
    static void
    activate_cb (GtkListView  *list,
                 guint         position,
                 gpointer      unused)
    {
      GAppInfo *app_info;
    
      app_info = g_list_model_get_item (G_LIST_MODEL (gtk_list_view_get_model (list)), position);
      g_app_info_launch (app_info, NULL, NULL, NULL);
      g_object_unref (app_info);
    }
    
    ...
    
      model = create_application_list ();
    
      factory = gtk_signal_list_item_factory_new ();
      g_signal_connect (factory, "setup", G_CALLBACK (setup_listitem_cb), NULL);
      g_signal_connect (factory, "bind", G_CALLBACK (bind_listitem_cb), NULL);
    
      list = gtk_list_view_new (GTK_SELECTION_MODEL (gtk_single_selection_new (model)), factory);
    
      g_signal_connect (list, "activate", G_CALLBACK (activate_cb), NULL);
    
      gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (sw), list);
    

    CSS nodes

    listview[.separators][.rich-list][.navigation-sidebar][.data-table]
    ├── row[.activatable]
    
    ├── row[.activatable]
    
    
    ╰── [rubberband]
    

    GtkListView uses a single CSS node named listview. It may carry the .separators style class, when [propertyGtk.ListView:show-separators] property is set. Each child widget uses a single CSS node named row. If the [propertyGtk.ListItem:activatable] property is set, the corresponding row will have the .activatable style class. For rubberband selection, a node with name rubberband is used.

    The main listview node may also carry style classes to select the style of list presentation: .rich-list, .navigation-sidebar or .data-table.

    Accessibility

    GtkListView uses the GTK_ACCESSIBLE_ROLE_LIST role, and the list items use the GTK_ACCESSIBLE_ROLE_LIST_ITEM role.

    The ListViewRef type acts as a lightweight Swift reference to an underlying GtkListView instance. It exposes methods that can operate on this data type through ListViewProtocol conformance. Use ListViewRef only as an unowned reference to an existing GtkListView instance.

    See more

    Declaration

    Swift

    public struct ListViewRef : ListViewProtocol, GWeakCapturing

LockButton Class

  • GtkLockButton is a widget to obtain and revoke authorizations needed to operate the controls.

    An example GtkLockButton

    It is typically used in preference dialogs or control panels.

    The required authorization is represented by a GPermission object. Concrete implementations of GPermission may use PolicyKit or some other authorization framework. To obtain a PolicyKit-based GPermission, use polkit_permission_new().

    If the user is not currently allowed to perform the action, but can obtain the permission, the widget looks like this:

    and the user can click the button to request the permission. Depending on the platform, this may pop up an authentication dialog or ask the user to authenticate in some other way. Once the user has obtained the permission, the widget changes to this:

    and the permission can be dropped again by clicking the button. If the user is not able to obtain the permission at all, the widget looks like this:

    If the user has the permission and cannot drop it, the button is hidden.

    The text (and tooltips) that are shown in the various cases can be adjusted with the [propertyGtk.LockButton:text-lock], [propertyGtk.LockButton:text-unlock], [propertyGtk.LockButton:tooltip-lock], [propertyGtk.LockButton:tooltip-unlock] and [propertyGtk.LockButton:tooltip-not-authorized] properties.

    The LockButtonRef type acts as a lightweight Swift reference to an underlying GtkLockButton instance. It exposes methods that can operate on this data type through LockButtonProtocol conformance. Use LockButtonRef only as an unowned reference to an existing GtkLockButton instance.

    See more

    Declaration

    Swift

    public struct LockButtonRef : LockButtonProtocol, GWeakCapturing

MapListModel Class

  • A GtkMapListModel maps the items in a list model to different items.

    GtkMapListModel uses a [callbackGtk.MapListModelMapFunc].

    Example: Create a list of GtkEventControllers

    static gpointer
    map_to_controllers (gpointer widget,
                        gpointer data)
    {
      gpointer result = gtk_widget_observe_controllers (widget);
      g_object_unref (widget);
      return result;
    }
    
    widgets = gtk_widget_observe_children (widget);
    
    controllers = gtk_map_list_model_new (G_TYPE_LIST_MODEL,
                                          widgets,
                                          map_to_controllers,
                                          NULL, NULL);
    
    model = gtk_flatten_list_model_new (GTK_TYPE_EVENT_CONTROLLER,
                                        controllers);
    

    GtkMapListModel will attempt to discard the mapped objects as soon as they are no longer needed and recreate them if necessary.

    The MapListModelRef type acts as a lightweight Swift reference to an underlying GtkMapListModel instance. It exposes methods that can operate on this data type through MapListModelProtocol conformance. Use MapListModelRef only as an unowned reference to an existing GtkMapListModel instance.

    See more

    Declaration

    Swift

    public struct MapListModelRef : MapListModelProtocol, GWeakCapturing

LayoutChildClass Record

LayoutManagerClass Record

  • The GtkLayoutManagerClass structure contains only private data, and should only be accessed through the provided API, or when subclassing GtkLayoutManager.

    The LayoutManagerClassRef type acts as a lightweight Swift reference to an underlying GtkLayoutManagerClass instance. It exposes methods that can operate on this data type through LayoutManagerClassProtocol conformance. Use LayoutManagerClassRef only as an unowned reference to an existing GtkLayoutManagerClass instance.

    See more

    Declaration

    Swift

    public struct LayoutManagerClassRef : LayoutManagerClassProtocol

ListBaseClass Record

  • The ListBaseClassRef type acts as a lightweight Swift reference to an underlying GtkListBaseClass instance. It exposes methods that can operate on this data type through ListBaseClassProtocol conformance. Use ListBaseClassRef only as an unowned reference to an existing GtkListBaseClass instance.

    See more

    Declaration

    Swift

    public struct ListBaseClassRef : ListBaseClassProtocol

ListBoxRowClass Record

ListItemClass Record

  • The ListItemClassRef type acts as a lightweight Swift reference to an underlying GtkListItemClass instance. It exposes methods that can operate on this data type through ListItemClassProtocol conformance. Use ListItemClassRef only as an unowned reference to an existing GtkListItemClass instance.

    See more

    Declaration

    Swift

    public struct ListItemClassRef : ListItemClassProtocol

ListItemFactoryClass Record

ListStoreClass Record

  • The ListStoreClassRef type acts as a lightweight Swift reference to an underlying GtkListStoreClass instance. It exposes methods that can operate on this data type through ListStoreClassProtocol conformance. Use ListStoreClassRef only as an unowned reference to an existing GtkListStoreClass instance.

    See more

    Declaration

    Swift

    public struct ListStoreClassRef : ListStoreClassProtocol

ListViewClass Record

  • The ListViewClassRef type acts as a lightweight Swift reference to an underlying GtkListViewClass instance. It exposes methods that can operate on this data type through ListViewClassProtocol conformance. Use ListViewClassRef only as an unowned reference to an existing GtkListViewClass instance.

    See more

    Declaration

    Swift

    public struct ListViewClassRef : ListViewClassProtocol

MapListModelClass Record

MediaControls Class

  • GtkMediaControls is a widget to show controls for a video.

    An example GtkMediaControls

    Usually, GtkMediaControls is used as part of [classGtk.Video].

    The MediaControlsRef type acts as a lightweight Swift reference to an underlying GtkMediaControls instance. It exposes methods that can operate on this data type through MediaControlsProtocol conformance. Use MediaControlsRef only as an unowned reference to an existing GtkMediaControls instance.

    See more

    Declaration

    Swift

    public struct MediaControlsRef : MediaControlsProtocol, GWeakCapturing

MediaFile Class

  • GtkMediaFile implements GtkMediaStream for files.

    This provides a simple way to play back video files with GTK.

    GTK provides a GIO extension point for GtkMediaFile implementations to allow for external implementations using various media frameworks.

    GTK itself includes implementations using GStreamer and ffmpeg.

    The MediaFileRef type acts as a lightweight Swift reference to an underlying GtkMediaFile instance. It exposes methods that can operate on this data type through MediaFileProtocol conformance. Use MediaFileRef only as an unowned reference to an existing GtkMediaFile instance.

    See more

    Declaration

    Swift

    public struct MediaFileRef : MediaFileProtocol, GWeakCapturing

MediaStream Class

  • GtkMediaStream is the integration point for media playback inside GTK.

    GTK provides an implementation of the GtkMediaStream interface that is called [classGtk.MediaFile].

    Apart from application-facing API for stream playback, GtkMediaStream has a number of APIs that are only useful for implementations and should not be used in applications: [methodGtk.MediaStream.prepared], [methodGtk.MediaStream.unprepared], [methodGtk.MediaStream.update], [methodGtk.MediaStream.ended], [methodGtk.MediaStream.seek_success], [methodGtk.MediaStream.seek_failed], [methodGtk.MediaStream.gerror], [methodGtk.MediaStream.error], [methodGtk.MediaStream.error_valist].

    The MediaStreamRef type acts as a lightweight Swift reference to an underlying GtkMediaStream instance. It exposes methods that can operate on this data type through MediaStreamProtocol conformance. Use MediaStreamRef only as an unowned reference to an existing GtkMediaStream instance.

    See more

    Declaration

    Swift

    public struct MediaStreamRef : MediaStreamProtocol, GWeakCapturing

MenuButton Class

  • The GtkMenuButton widget is used to display a popup when clicked.

    An example GtkMenuButton

    This popup can be provided either as a GtkPopover or as an abstract GMenuModel.

    The GtkMenuButton widget can show either an icon (set with the [propertyGtk.MenuButton:icon-name] property) or a label (set with the [propertyGtk.MenuButton:label] property). If neither is explicitly set, a [classGtk.Image] is automatically created, using an arrow image oriented according to [propertyGtk.MenuButton:direction] or the generic “open-menu-symbolic” icon if the direction is not set.

    The positioning of the popup is determined by the [propertyGtk.MenuButton:direction] property of the menu button.

    For menus, the [propertyGtk.Widget:halign] and [propertyGtk.Widget:valign] properties of the menu are also taken into account. For example, when the direction is GTK_ARROW_DOWN and the horizontal alignment is GTK_ALIGN_START, the menu will be positioned below the button, with the starting edge (depending on the text direction) of the menu aligned with the starting edge of the button. If there is not enough space below the button, the menu is popped up above the button instead. If the alignment would move part of the menu offscreen, it is “pushed in”.

    start center end
    down
    up
    left
    right

    CSS nodes

    menubutton
    ╰── button.toggle
        ╰── &lt;content&gt;
             ╰── [arrow]
    

    GtkMenuButton has a single CSS node with name menubutton which contains a button node with a .toggle style class.

    If the button contains only an icon or an arrow, it will have the .image-button style class, if it contains both, it will have the .arrow-button style class.

    Inside the toggle button content, there is an arrow node for the indicator, which will carry one of the .none, .up, .down, .left or .right style classes to indicate the direction that the menu will appear in. The CSS is expected to provide a suitable image for each of these cases using the -gtk-icon-source property.

    Optionally, the menubutton node can carry the .circular style class to request a round appearance.

    Accessibility

    GtkMenuButton uses the GTK_ACCESSIBLE_ROLE_BUTTON role.

    The MenuButtonRef type acts as a lightweight Swift reference to an underlying GtkMenuButton instance. It exposes methods that can operate on this data type through MenuButtonProtocol conformance. Use MenuButtonRef only as an unowned reference to an existing GtkMenuButton instance.

    See more

    Declaration

    Swift

    public struct MenuButtonRef : MenuButtonProtocol, GWeakCapturing

MessageDialog Class

  • GtkMessageDialog presents a dialog with some message text.

    An example GtkMessageDialog

    It’s simply a convenience widget; you could construct the equivalent of GtkMessageDialog from GtkDialog without too much effort, but GtkMessageDialog saves typing.

    The easiest way to do a modal message dialog is to use the GTK_DIALOG_MODAL flag, which will call [methodGtk.Window.set_modal] internally. The dialog will prevent interaction with the parent window until it’s hidden or destroyed. You can use the [signalGtk.Dialog::response] signal to know when the user dismissed the dialog.

    An example for using a modal dialog:

    GtkDialogFlags flags = GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL;
    dialog = gtk_message_dialog_new (parent_window,
                                     flags,
                                     GTK_MESSAGE_ERROR,
                                     GTK_BUTTONS_CLOSE,
                                     "Error reading “`s`”: `s`",
                                     filename,
                                     g_strerror (errno));
    // Destroy the dialog when the user responds to it
    // (e.g. clicks a button)
    
    g_signal_connect (dialog, "response",
                      G_CALLBACK (gtk_window_destroy),
                      NULL);
    

    You might do a non-modal GtkMessageDialog simply by omitting the GTK_DIALOG_MODAL flag:

    GtkDialogFlags flags = GTK_DIALOG_DESTROY_WITH_PARENT;
    dialog = gtk_message_dialog_new (parent_window,
                                     flags,
                                     GTK_MESSAGE_ERROR,
                                     GTK_BUTTONS_CLOSE,
                                     "Error reading “`s`”: `s`",
                                     filename,
                                     g_strerror (errno));
    
    // Destroy the dialog when the user responds to it
    // (e.g. clicks a button)
    g_signal_connect (dialog, "response",
                      G_CALLBACK (gtk_window_destroy),
                      NULL);
    

    GtkMessageDialog as GtkBuildable

    The GtkMessageDialog implementation of the GtkBuildable interface exposes the message area as an internal child with the name “message_area”.

    The MessageDialogRef type acts as a lightweight Swift reference to an underlying GtkMessageDialog instance. It exposes methods that can operate on this data type through MessageDialogProtocol conformance. Use MessageDialogRef only as an unowned reference to an existing GtkMessageDialog instance.

    See more

    Declaration

    Swift

    public struct MessageDialogRef : MessageDialogProtocol, GWeakCapturing

MnemonicAction Class

  • A GtkShortcutAction that calls gtk_widget_mnemonic_activate().

    The MnemonicActionRef type acts as a lightweight Swift reference to an underlying GtkMnemonicAction instance. It exposes methods that can operate on this data type through MnemonicActionProtocol conformance. Use MnemonicActionRef only as an unowned reference to an existing GtkMnemonicAction instance.

    See more

    Declaration

    Swift

    public struct MnemonicActionRef : MnemonicActionProtocol, GWeakCapturing

MnemonicTrigger Class

  • A GtkShortcutTrigger that triggers when a specific mnemonic is pressed.

    Mnemonics require a mnemonic modifier (typically <kbd>Alt</kbd>) to be pressed together with the mnemonic key.

    The MnemonicTriggerRef type acts as a lightweight Swift reference to an underlying GtkMnemonicTrigger instance. It exposes methods that can operate on this data type through MnemonicTriggerProtocol conformance. Use MnemonicTriggerRef only as an unowned reference to an existing GtkMnemonicTrigger instance.

    See more

    Declaration

    Swift

    public struct MnemonicTriggerRef : MnemonicTriggerProtocol, GWeakCapturing

MountOperation Class

  • GtkMountOperation is an implementation of GMountOperation.

    The functions and objects described here make working with GTK and GIO more convenient.

    GtkMountOperation is needed when mounting volumes: It is an implementation of GMountOperation that can be used with GIO functions for mounting volumes such as g_file_mount_enclosing_volume(), g_file_mount_mountable(), g_volume_mount(), g_mount_unmount_with_operation() and others.

    When necessary, GtkMountOperation shows dialogs to let the user enter passwords, ask questions or show processes blocking unmount.

    The MountOperationRef type acts as a lightweight Swift reference to an underlying GtkMountOperation instance. It exposes methods that can operate on this data type through MountOperationProtocol conformance. Use MountOperationRef only as an unowned reference to an existing GtkMountOperation instance.

    See more

    Declaration

    Swift

    public struct MountOperationRef : MountOperationProtocol, GWeakCapturing

MultiFilter Class

  • GtkMultiFilter is the base class for filters that combine multiple filters.

    The MultiFilterRef type acts as a lightweight Swift reference to an underlying GtkMultiFilter instance. It exposes methods that can operate on this data type through MultiFilterProtocol conformance. Use MultiFilterRef only as an unowned reference to an existing GtkMultiFilter instance.

    See more

    Declaration

    Swift

    public struct MultiFilterRef : MultiFilterProtocol, GWeakCapturing

MultiSelection Class

  • GtkMultiSelection is a GtkSelectionModel that allows selecting multiple elements.

    The MultiSelectionRef type acts as a lightweight Swift reference to an underlying GtkMultiSelection instance. It exposes methods that can operate on this data type through MultiSelectionProtocol conformance. Use MultiSelectionRef only as an unowned reference to an existing GtkMultiSelection instance.

    See more

    Declaration

    Swift

    public struct MultiSelectionRef : MultiSelectionProtocol, GWeakCapturing

MultiSorter Class

  • GtkMultiSorter combines multiple sorters by trying them in turn.

    If the first sorter compares two items as equal, the second is tried next, and so on.

    The MultiSorterRef type acts as a lightweight Swift reference to an underlying GtkMultiSorter instance. It exposes methods that can operate on this data type through MultiSorterProtocol conformance. Use MultiSorterRef only as an unowned reference to an existing GtkMultiSorter instance.

    See more

    Declaration

    Swift

    public struct MultiSorterRef : MultiSorterProtocol, GWeakCapturing

NamedAction Class

  • A GtkShortcutAction that activates an action by name.

    The NamedActionRef type acts as a lightweight Swift reference to an underlying GtkNamedAction instance. It exposes methods that can operate on this data type through NamedActionProtocol conformance. Use NamedActionRef only as an unowned reference to an existing GtkNamedAction instance.

    See more

    Declaration

    Swift

    public struct NamedActionRef : NamedActionProtocol, GWeakCapturing

MediaControlsClass Record

MediaFileClass Record

  • The MediaFileClassRef type acts as a lightweight Swift reference to an underlying GtkMediaFileClass instance. It exposes methods that can operate on this data type through MediaFileClassProtocol conformance. Use MediaFileClassRef only as an unowned reference to an existing GtkMediaFileClass instance.

    See more

    Declaration

    Swift

    public struct MediaFileClassRef : MediaFileClassProtocol

MediaStreamClass Record

MessageDialogClass Record

MnemonicActionClass Record

MnemonicTriggerClass Record

MountOperationClass Record

MultiFilterClass Record

MultiSelectionClass Record

MultiSorterClass Record

NamedActionClass Record

NativeDialog Class

  • Native dialogs are platform dialogs that don’t use GtkDialog.

    They are used in order to integrate better with a platform, by looking the same as other native applications and supporting platform specific features.

    The [classGtk.Dialog] functions cannot be used on such objects, but we need a similar API in order to drive them. The GtkNativeDialog object is an API that allows you to do this. It allows you to set various common properties on the dialog, as well as show and hide it and get a [signalGtk.NativeDialog::response] signal when the user finished with the dialog.

    Note that unlike GtkDialog, GtkNativeDialog objects are not toplevel widgets, and GTK does not keep them alive. It is your responsibility to keep a reference until you are done with the object.

    The NativeDialogRef type acts as a lightweight Swift reference to an underlying GtkNativeDialog instance. It exposes methods that can operate on this data type through NativeDialogProtocol conformance. Use NativeDialogRef only as an unowned reference to an existing GtkNativeDialog instance.

    See more

    Declaration

    Swift

    public struct NativeDialogRef : NativeDialogProtocol, GWeakCapturing

NeverTrigger Class

  • A GtkShortcutTrigger that never triggers.

    The NeverTriggerRef type acts as a lightweight Swift reference to an underlying GtkNeverTrigger instance. It exposes methods that can operate on this data type through NeverTriggerProtocol conformance. Use NeverTriggerRef only as an unowned reference to an existing GtkNeverTrigger instance.

    See more

    Declaration

    Swift

    public struct NeverTriggerRef : NeverTriggerProtocol, GWeakCapturing

NoSelection Class

  • GtkNoSelection is a GtkSelectionModel that does not allow selecting anything.

    This model is meant to be used as a simple wrapper around a GListModel when a GtkSelectionModel is required.

    The NoSelectionRef type acts as a lightweight Swift reference to an underlying GtkNoSelection instance. It exposes methods that can operate on this data type through NoSelectionProtocol conformance. Use NoSelectionRef only as an unowned reference to an existing GtkNoSelection instance.

    See more

    Declaration

    Swift

    public struct NoSelectionRef : NoSelectionProtocol, GWeakCapturing

Notebook Class

  • GtkNotebook is a container whose children are pages switched between using tabs.

    An example GtkNotebook

    There are many configuration options for GtkNotebook. Among other things, you can choose on which edge the tabs appear (see [methodGtk.Notebook.set_tab_pos]), whether, if there are too many tabs to fit the notebook should be made bigger or scrolling arrows added (see [methodGtk.Notebook.set_scrollable]), and whether there will be a popup menu allowing the users to switch pages. (see [methodGtk.Notebook.popup_enable]).

    GtkNotebook as GtkBuildable

    The GtkNotebook implementation of the GtkBuildable interface supports placing children into tabs by specifying “tab” as the “type” attribute of a <child> element. Note that the content of the tab must be created before the tab can be filled. A tab child can be specified without specifying a <child> type attribute.

    To add a child widget in the notebooks action area, specify “action-start” or “action-end” as the “type” attribute of the <child> element.

    An example of a UI definition fragment with GtkNotebook:

    &lt;object class="GtkNotebook"&gt;
      &lt;child&gt;
        &lt;object class="GtkLabel" id="notebook-content"&gt;
          &lt;property name="label"&gt;Content&lt;/property&gt;
        &lt;/object&gt;
      &lt;/child&gt;
      &lt;child type="tab"&gt;
        &lt;object class="GtkLabel" id="notebook-tab"&gt;
          &lt;property name="label"&gt;Tab&lt;/property&gt;
        &lt;/object&gt;
      &lt;/child&gt;
    &lt;/object&gt;
    

    CSS nodes

    notebook
    ├── header.top
       ├── [&lt;action widget&gt;]
       ├── tabs
          ├── [arrow]
          ├── tab
             ╰── &lt;tab label&gt;
          
          ├── tab[.reorderable-page]
             ╰── &lt;tab label&gt;
          ╰── [arrow]
       ╰── [&lt;action widget&gt;]
    
    ╰── stack
        ├── &lt;child&gt;
        
        ╰── &lt;child&gt;
    

    GtkNotebook has a main CSS node with name notebook, a subnode with name header and below that a subnode with name tabs which contains one subnode per tab with name tab.

    If action widgets are present, their CSS nodes are placed next to the tabs node. If the notebook is scrollable, CSS nodes with name arrow are placed as first and last child of the tabs node.

    The main node gets the .frame style class when the notebook has a border (see [methodGtk.Notebook.set_show_border]).

    The header node gets one of the style class .top, .bottom, .left or .right, depending on where the tabs are placed. For reorderable pages, the tab node gets the .reorderable-page class.

    A tab node gets the .dnd style class while it is moved with drag-and-drop.

    The nodes are always arranged from left-to-right, regardless of text direction.

    Accessibility

    GtkNotebook uses the following roles:

    • GTK_ACCESSIBLE_ROLE_GROUP for the notebook widget
    • GTK_ACCESSIBLE_ROLE_TAB_LIST for the list of tabs
    • GTK_ACCESSIBLE_ROLE_TAB role for each tab
    • GTK_ACCESSIBLE_ROLE_TAB_PANEL for each page

    The NotebookRef type acts as a lightweight Swift reference to an underlying GtkNotebook instance. It exposes methods that can operate on this data type through NotebookProtocol conformance. Use NotebookRef only as an unowned reference to an existing GtkNotebook instance.

    See more

    Declaration

    Swift

    public struct NotebookRef : NotebookProtocol, GWeakCapturing

NotebookPage Class

  • GtkNotebookPage is an auxiliary object used by GtkNotebook.

    The NotebookPageRef type acts as a lightweight Swift reference to an underlying GtkNotebookPage instance. It exposes methods that can operate on this data type through NotebookPageProtocol conformance. Use NotebookPageRef only as an unowned reference to an existing GtkNotebookPage instance.

    See more

    Declaration

    Swift

    public struct NotebookPageRef : NotebookPageProtocol, GWeakCapturing

NothingAction Class

  • A GtkShortcutAction that does nothing.

    The NothingActionRef type acts as a lightweight Swift reference to an underlying GtkNothingAction instance. It exposes methods that can operate on this data type through NothingActionProtocol conformance. Use NothingActionRef only as an unowned reference to an existing GtkNothingAction instance.

    See more

    Declaration

    Swift

    public struct NothingActionRef : NothingActionProtocol, GWeakCapturing

NumericSorter Class

  • GtkNumericSorter is a GtkSorter that compares numbers.

    To obtain the numbers to compare, this sorter evaluates a [classGtk.Expression].

    The NumericSorterRef type acts as a lightweight Swift reference to an underlying GtkNumericSorter instance. It exposes methods that can operate on this data type through NumericSorterProtocol conformance. Use NumericSorterRef only as an unowned reference to an existing GtkNumericSorter instance.

    See more

    Declaration

    Swift

    public struct NumericSorterRef : NumericSorterProtocol, GWeakCapturing

ObjectExpression Class

  • A GObject value in a GtkExpression.

    The ObjectExpressionRef type acts as a lightweight Swift reference to an underlying GtkObjectExpression instance. It exposes methods that can operate on this data type through ObjectExpressionProtocol conformance. Use ObjectExpressionRef only as an unowned reference to an existing GtkObjectExpression instance.

    See more

    Declaration

    Swift

    public struct ObjectExpressionRef : ObjectExpressionProtocol

NativeDialogClass Record

  • Class structure for GtkNativeDialog.

    The NativeDialogClassRef type acts as a lightweight Swift reference to an underlying GtkNativeDialogClass instance. It exposes methods that can operate on this data type through NativeDialogClassProtocol conformance. Use NativeDialogClassRef only as an unowned reference to an existing GtkNativeDialogClass instance.

    See more

    Declaration

    Swift

    public struct NativeDialogClassRef : NativeDialogClassProtocol

NativeInterface Record

NeverTriggerClass Record

NoSelectionClass Record

NothingActionClass Record

NumericSorterClass Record

OrientableIface Record

Orientable Interface

  • The GtkOrientable interface is implemented by all widgets that can be oriented horizontally or vertically.

    GtkOrientable is more flexible in that it allows the orientation to be changed at runtime, allowing the widgets to “flip”.

    The OrientableRef type acts as a lightweight Swift reference to an underlying GtkOrientable instance. It exposes methods that can operate on this data type through OrientableProtocol conformance. Use OrientableRef only as an unowned reference to an existing GtkOrientable instance.

    See more

    Declaration

    Swift

    public struct OrientableRef : OrientableProtocol

PrintOperationPreview Interface

  • GtkPrintOperationPreview is the interface that is used to implement print preview.

    A GtkPrintOperationPreview object is passed to the [signalGtk.PrintOperation::preview] signal by [classGtk.PrintOperation].

    The PrintOperationPreviewRef type acts as a lightweight Swift reference to an underlying GtkPrintOperationPreview instance. It exposes methods that can operate on this data type through PrintOperationPreviewProtocol conformance. Use PrintOperationPreviewRef only as an unowned reference to an existing GtkPrintOperationPreview instance.

    See more

    Declaration

    Swift

    public struct PrintOperationPreviewRef : PrintOperationPreviewProtocol

Overlay Class

  • GtkOverlay is a container which contains a single main child, on top of which it can place “overlay” widgets.

    An example GtkOverlay

    The position of each overlay widget is determined by its [propertyGtk.Widget:halign] and [propertyGtk.Widget:valign] properties. E.g. a widget with both alignments set to GTK_ALIGN_START will be placed at the top left corner of the GtkOverlay container, whereas an overlay with halign set to GTK_ALIGN_CENTER and valign set to GTK_ALIGN_END will be placed a the bottom edge of the GtkOverlay, horizontally centered. The position can be adjusted by setting the margin properties of the child to non-zero values.

    More complicated placement of overlays is possible by connecting to the [signalGtk.Overlay::get-child-position] signal.

    An overlay’s minimum and natural sizes are those of its main child. The sizes of overlay children are not considered when measuring these preferred sizes.

    GtkOverlay as GtkBuildable

    The GtkOverlay implementation of the GtkBuildable interface supports placing a child as an overlay by specifying “overlay” as the “type” attribute of a &lt;child&gt; element.

    CSS nodes

    GtkOverlay has a single CSS node with the name “overlay”. Overlay children whose alignments cause them to be positioned at an edge get the style classes “.left”, “.right”, “.top”, and/or “.bottom” according to their position.

    The OverlayRef type acts as a lightweight Swift reference to an underlying GtkOverlay instance. It exposes methods that can operate on this data type through OverlayProtocol conformance. Use OverlayRef only as an unowned reference to an existing GtkOverlay instance.

    See more

    Declaration

    Swift

    public struct OverlayRef : OverlayProtocol, GWeakCapturing

OverlayLayout Class

  • GtkOverlayLayout is the layout manager used by GtkOverlay.

    It places widgets as overlays on top of the main child.

    This is not a reusable layout manager, since it expects its widget to be a GtkOverlay. It only listed here so that its layout properties get documented.

    The OverlayLayoutRef type acts as a lightweight Swift reference to an underlying GtkOverlayLayout instance. It exposes methods that can operate on this data type through OverlayLayoutProtocol conformance. Use OverlayLayoutRef only as an unowned reference to an existing GtkOverlayLayout instance.

    See more

    Declaration

    Swift

    public struct OverlayLayoutRef : OverlayLayoutProtocol, GWeakCapturing

OverlayLayoutChild Class

  • GtkLayoutChild subclass for children in a GtkOverlayLayout.

    The OverlayLayoutChildRef type acts as a lightweight Swift reference to an underlying GtkOverlayLayoutChild instance. It exposes methods that can operate on this data type through OverlayLayoutChildProtocol conformance. Use OverlayLayoutChildRef only as an unowned reference to an existing GtkOverlayLayoutChild instance.

    See more

    Declaration

    Swift

    public struct OverlayLayoutChildRef : OverlayLayoutChildProtocol, GWeakCapturing

PadController Class

  • GtkPadController is an event controller for the pads found in drawing tablets.

    Pads are the collection of buttons and tactile sensors often found around the stylus-sensitive area.

    These buttons and sensors have no implicit meaning, and by default they perform no action. GtkPadController is provided to map those to GAction objects, thus letting the application give them a more semantic meaning.

    Buttons and sensors are not constrained to triggering a single action, some GDK_SOURCE_TABLET_PAD devices feature multiple “modes”. All these input elements have one current mode, which may determine the final action being triggered.

    Pad devices often divide buttons and sensors into groups. All elements in a group share the same current mode, but different groups may have different modes. See [methodGdk.DevicePad.get_n_groups] and [methodGdk.DevicePad.get_group_n_modes].

    Each of the actions that a given button/strip/ring performs for a given mode is defined by a [structGtk.PadActionEntry]. It contains an action name that will be looked up in the given GActionGroup and activated whenever the specified input element and mode are triggered.

    A simple example of GtkPadController usage: Assigning button 1 in all modes and pad devices to an “invert-selection” action:

    GtkPadActionEntry *pad_actions[] = {
      { GTK_PAD_ACTION_BUTTON, 1, -1, "Invert selection", "pad-actions.invert-selection" },
      
    };
    
    
    action_group = g_simple_action_group_new ();
    action = g_simple_action_new ("pad-actions.invert-selection", NULL);
    g_signal_connect (action, "activate", on_invert_selection_activated, NULL);
    g_action_map_add_action (G_ACTION_MAP (action_group), action);
    
    pad_controller = gtk_pad_controller_new (action_group, NULL);
    

    The actions belonging to rings/strips will be activated with a parameter of type G_VARIANT_TYPE_DOUBLE bearing the value of the given axis, it is required that those are made stateful and accepting this GVariantType.

    The PadControllerRef type acts as a lightweight Swift reference to an underlying GtkPadController instance. It exposes methods that can operate on this data type through PadControllerProtocol conformance. Use PadControllerRef only as an unowned reference to an existing GtkPadController instance.

    See more

    Declaration

    Swift

    public struct PadControllerRef : PadControllerProtocol, GWeakCapturing

OverlayLayoutChildClass Record

OverlayLayoutClass Record

PadActionEntry Record

  • Struct defining a pad action entry.

    The PadActionEntryRef type acts as a lightweight Swift reference to an underlying GtkPadActionEntry instance. It exposes methods that can operate on this data type through PadActionEntryProtocol conformance. Use PadActionEntryRef only as an unowned reference to an existing GtkPadActionEntry instance.

    See more

    Declaration

    Swift

    public struct PadActionEntryRef : PadActionEntryProtocol

PadControllerClass Record

PageRange Record

  • A range of pages to print.

    See also [methodGtk.PrintSettings.set_page_ranges].

    The PageRangeRef type acts as a lightweight Swift reference to an underlying GtkPageRange instance. It exposes methods that can operate on this data type through PageRangeProtocol conformance. Use PageRangeRef only as an unowned reference to an existing GtkPageRange instance.

    See more

    Declaration

    Swift

    public struct PageRangeRef : PageRangeProtocol

PaperSize Record

  • GtkPaperSize handles paper sizes.

    It uses the standard called PWG 5101.1-2002 PWG: Standard for Media Standardized Names to name the paper sizes (and to get the data for the page sizes). In addition to standard paper sizes, GtkPaperSize allows to construct custom paper sizes with arbitrary dimensions.

    The GtkPaperSize object stores not only the dimensions (width and height) of a paper size and its name, it also provides default print margins.

    The PaperSizeRef type acts as a lightweight Swift reference to an underlying GtkPaperSize instance. It exposes methods that can operate on this data type through PaperSizeProtocol conformance. Use PaperSizeRef only as an unowned reference to an existing GtkPaperSize instance.

    See more

    Declaration

    Swift

    public struct PaperSizeRef : PaperSizeProtocol

PasswordEntryBufferClass Record

PasswordEntryClass Record

PictureClass Record

  • The PictureClassRef type acts as a lightweight Swift reference to an underlying GtkPictureClass instance. It exposes methods that can operate on this data type through PictureClassProtocol conformance. Use PictureClassRef only as an unowned reference to an existing GtkPictureClass instance.

    See more

    Declaration

    Swift

    public struct PictureClassRef : PictureClassProtocol

PopoverClass Record

  • The PopoverClassRef type acts as a lightweight Swift reference to an underlying GtkPopoverClass instance. It exposes methods that can operate on this data type through PopoverClassProtocol conformance. Use PopoverClassRef only as an unowned reference to an existing GtkPopoverClass instance.

    See more

    Declaration

    Swift

    public struct PopoverClassRef : PopoverClassProtocol

PrintBackend Record

  • The PrintBackendRef type acts as a lightweight Swift reference to an underlying GtkPrintBackend instance. It exposes methods that can operate on this data type through PrintBackendProtocol conformance. Use PrintBackendRef only as an unowned reference to an existing GtkPrintBackend instance.

    See more

    Declaration

    Swift

    public struct PrintBackendRef : PrintBackendProtocol

PrintOperationClass Record

PrintOperationPreviewIface Record

RangeClass Record

  • The RangeClassRef type acts as a lightweight Swift reference to an underlying GtkRangeClass instance. It exposes methods that can operate on this data type through RangeClassProtocol conformance. Use RangeClassRef only as an unowned reference to an existing GtkRangeClass instance.

    See more

    Declaration

    Swift

    public struct RangeClassRef : RangeClassProtocol

PageSetup Class

  • A GtkPageSetup object stores the page size, orientation and margins.

    The idea is that you can get one of these from the page setup dialog and then pass it to the GtkPrintOperation when printing. The benefit of splitting this out of the GtkPrintSettings is that these affect the actual layout of the page, and thus need to be set long before user prints.

    Margins

    The margins specified in this object are the “print margins”, i.e. the parts of the page that the printer cannot print on. These are different from the layout margins that a word processor uses; they are typically used to determine the minimal size for the layout margins.

    To obtain a GtkPageSetup use [ctorGtk.PageSetup.new] to get the defaults, or use [funcGtk.print_run_page_setup_dialog] to show the page setup dialog and receive the resulting page setup.

    A page setup dialog

    static GtkPrintSettings *settings = NULL;
    static GtkPageSetup *page_setup = NULL;
    
    static void
    do_page_setup (void)
    {
      GtkPageSetup *new_page_setup;
    
      if (settings == NULL)
        settings = gtk_print_settings_new ();
    
      new_page_setup = gtk_print_run_page_setup_dialog (GTK_WINDOW (main_window),
                                                        page_setup, settings);
    
      if (page_setup)
        g_object_unref (page_setup);
    
      page_setup = new_page_setup;
    }
    

    The PageSetupRef type acts as a lightweight Swift reference to an underlying GtkPageSetup instance. It exposes methods that can operate on this data type through PageSetupProtocol conformance. Use PageSetupRef only as an unowned reference to an existing GtkPageSetup instance.

    See more

    Declaration

    Swift

    public struct PageSetupRef : PageSetupProtocol, GWeakCapturing

PageSetupUnixDialog Class

  • GtkPageSetupUnixDialog implements a page setup dialog for platforms which don’t provide a native page setup dialog, like Unix.

    An example GtkPageSetupUnixDialog

    It can be used very much like any other GTK dialog, at the cost of the portability offered by the high-level printing API in [classGtk.PrintOperation].

    The PageSetupUnixDialogRef type acts as a lightweight Swift reference to an underlying GtkPageSetupUnixDialog instance. It exposes methods that can operate on this data type through PageSetupUnixDialogProtocol conformance. Use PageSetupUnixDialogRef only as an unowned reference to an existing GtkPageSetupUnixDialog instance.

    See more

    Declaration

    Swift

    public struct PageSetupUnixDialogRef : PageSetupUnixDialogProtocol, GWeakCapturing

Paned Class

  • GtkPaned has two panes, arranged either horizontally or vertically.

    An example GtkPaned

    The division between the two panes is adjustable by the user by dragging a handle.

    Child widgets are added to the panes of the widget with [methodGtk.Paned.set_start_child] and [methodGtk.Paned.set_end_child]. The division between the two children is set by default from the size requests of the children, but it can be adjusted by the user.

    A paned widget draws a separator between the two child widgets and a small handle that the user can drag to adjust the division. It does not draw any relief around the children or around the separator. (The space in which the separator is called the gutter.) Often, it is useful to put each child inside a [classGtk.Frame] so that the gutter appears as a ridge. No separator is drawn if one of the children is missing.

    Each child has two options that can be set, resize and shrink. If resize is true, then when the GtkPaned is resized, that child will expand or shrink along with the paned widget. If shrink is true, then that child can be made smaller than its requisition by the user. Setting shrink to false allows the application to set a minimum size. If resize is false for both children, then this is treated as if resize is true for both children.

    The application can set the position of the slider as if it were set by the user, by calling [methodGtk.Paned.set_position].

    CSS nodes

    paned
    ├── &lt;child&gt;
    ├── separator[.wide]
    ╰── &lt;child&gt;
    

    GtkPaned has a main CSS node with name paned, and a subnode for the separator with name separator. The subnode gets a .wide style class when the paned is supposed to be wide.

    In horizontal orientation, the nodes are arranged based on the text direction, so in left-to-right mode, :first-child will select the leftmost child, while it will select the rightmost child in RTL layouts.

    Creating a paned widget with minimum sizes.

    GtkWidget *hpaned = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL);
    GtkWidget *frame1 = gtk_frame_new (NULL);
    GtkWidget *frame2 = gtk_frame_new (NULL);
    
    gtk_widget_set_size_request (hpaned, 200, -1);
    
    gtk_paned_set_start_child (GTK_PANED (hpaned), frame1);
    gtk_paned_set_start_child_resize (GTK_PANED (hpaned), TRUE);
    gtk_paned_set_start_child_shrink (GTK_PANED (hpaned), FALSE);
    gtk_widget_set_size_request (frame1, 50, -1);
    
    gtk_paned_set_end_child (GTK_PANED (hpaned), frame2);
    gtk_paned_set_end_child_resize (GTK_PANED (hpaned), FALSE);
    gtk_paned_set_end_child_shrink (GTK_PANED (hpaned), FALSE);
    gtk_widget_set_size_request (frame2, 50, -1);
    

    The PanedRef type acts as a lightweight Swift reference to an underlying GtkPaned instance. It exposes methods that can operate on this data type through PanedProtocol conformance. Use PanedRef only as an unowned reference to an existing GtkPaned instance.

    See more

    Declaration

    Swift

    public struct PanedRef : PanedProtocol, GWeakCapturing

ParamSpecExpression Class

  • A GParamSpec for properties holding a GtkExpression.

    The ParamSpecExpressionRef type acts as a lightweight Swift reference to an underlying GtkParamSpecExpression instance. It exposes methods that can operate on this data type through ParamSpecExpressionProtocol conformance. Use ParamSpecExpressionRef only as an unowned reference to an existing GtkParamSpecExpression instance.

    See more

    Declaration

    Swift

    public struct ParamSpecExpressionRef : ParamSpecExpressionProtocol

PasswordEntry Class

  • GtkPasswordEntry is an entry that has been tailored for entering secrets.

    An example GtkPasswordEntry

    It does not show its contents in clear text, does not allow to copy it to the clipboard, and it shows a warning when Caps Lock is engaged. If the underlying platform allows it, GtkPasswordEntry will also place the text in a non-pageable memory area, to avoid it being written out to disk by the operating system.

    Optionally, it can offer a way to reveal the contents in clear text.

    GtkPasswordEntry provides only minimal API and should be used with the [ifaceGtk.Editable] API.

    CSS Nodes

    entry.password
    ╰── text
        ├── image.caps-lock-indicator
        
    

    GtkPasswordEntry has a single CSS node with name entry that carries a .passwordstyle class. The text Css node below it has a child with name image and style class .caps-lock-indicator for the Caps Lock icon, and possibly other children.

    Accessibility

    GtkPasswordEntry uses the GTK_ACCESSIBLE_ROLE_TEXT_BOX role.

    The PasswordEntryRef type acts as a lightweight Swift reference to an underlying GtkPasswordEntry instance. It exposes methods that can operate on this data type through PasswordEntryProtocol conformance. Use PasswordEntryRef only as an unowned reference to an existing GtkPasswordEntry instance.

    See more

    Declaration

    Swift

    public struct PasswordEntryRef : PasswordEntryProtocol, GWeakCapturing

PasswordEntryBuffer Class

  • A GtkEntryBuffer that locks the underlying memory to prevent it from being swapped to disk.

    GtkPasswordEntry uses a GtkPasswordEntryBuffer.

    The PasswordEntryBufferRef type acts as a lightweight Swift reference to an underlying GtkPasswordEntryBuffer instance. It exposes methods that can operate on this data type through PasswordEntryBufferProtocol conformance. Use PasswordEntryBufferRef only as an unowned reference to an existing GtkPasswordEntryBuffer instance.

    See more

    Declaration

    Swift

    public struct PasswordEntryBufferRef : PasswordEntryBufferProtocol, GWeakCapturing

Picture Class

  • The GtkPicture widget displays a GdkPaintable.

    An example GtkPicture

    Many convenience functions are provided to make pictures simple to use. For example, if you want to load an image from a file, and then display it, there’s a convenience function to do this:

    GtkWidget *widget = gtk_picture_new_for_filename ("myfile.png");
    

    If the file isn’t loaded successfully, the picture will contain a “broken image” icon similar to that used in many web browsers. If you want to handle errors in loading the file yourself, for example by displaying an error message, then load the image with [ctorGdk.Texture.new_from_file], then create the GtkPicture with [ctorGtk.Picture.new_for_paintable].

    Sometimes an application will want to avoid depending on external data files, such as image files. See the documentation of GResource for details. In this case, [ctorGtk.Picture.new_for_resource] and [methodGtk.Picture.set_resource] should be used.

    GtkPicture displays an image at its natural size. See [classGtk.Image] if you want to display a fixed-size image, such as an icon.

    Sizing the paintable

    You can influence how the paintable is displayed inside the GtkPicture. By turning off [propertyGtk.Picture:keep-aspect-ratio] you can allow the paintable to get stretched. [propertyGtk.Picture:can-shrink] can be unset to make sure that paintables are never made smaller than their ideal size - but be careful if you do not know the size of the paintable in use (like when displaying user-loaded images). This can easily cause the picture to grow larger than the screen. And [propertyGtkWidget:halign] and [propertyGtkWidget:valign] can be used to make sure the paintable doesn’t fill all available space but is instead displayed at its original size.

    CSS nodes

    GtkPicture has a single CSS node with the name picture.

    Accessibility

    GtkPicture uses the GTK_ACCESSIBLE_ROLE_IMG role.

    The PictureRef type acts as a lightweight Swift reference to an underlying GtkPicture instance. It exposes methods that can operate on this data type through PictureProtocol conformance. Use PictureRef only as an unowned reference to an existing GtkPicture instance.

    See more

    Declaration

    Swift

    public struct PictureRef : PictureProtocol, GWeakCapturing

Popover Class

  • GtkPopover is a bubble-like context popup.

    An example GtkPopover

    It is primarily meant to provide context-dependent information or options. Popovers are attached to a parent widget. By default, they point to the whole widget area, although this behavior can be changed with [methodGtk.Popover.set_pointing_to].

    The position of a popover relative to the widget it is attached to can also be changed with [methodGtk.Popover.set_position]

    By default, GtkPopover performs a grab, in order to ensure input events get redirected to it while it is shown, and also so the popover is dismissed in the expected situations (clicks outside the popover, or the Escape key being pressed). If no such modal behavior is desired on a popover, [methodGtk.Popover.set_autohide] may be called on it to tweak its behavior.

    GtkPopover as menu replacement

    GtkPopover is often used to replace menus. The best was to do this is to use the [classGtk.PopoverMenu] subclass which supports being populated from a GMenuModel with [ctorGtk.PopoverMenu.new_from_model].

    &lt;section&gt;
      &lt;attribute name="display-hint"&gt;horizontal-buttons&lt;/attribute&gt;
      &lt;item&gt;
        &lt;attribute name="label"&gt;Cut&lt;/attribute&gt;
        &lt;attribute name="action"&gt;app.cut&lt;/attribute&gt;
        &lt;attribute name="verb-icon"&gt;edit-cut-symbolic&lt;/attribute&gt;
      &lt;/item&gt;
      &lt;item&gt;
        &lt;attribute name="label"&gt;Copy&lt;/attribute&gt;
        &lt;attribute name="action"&gt;app.copy&lt;/attribute&gt;
        &lt;attribute name="verb-icon"&gt;edit-copy-symbolic&lt;/attribute&gt;
      &lt;/item&gt;
      &lt;item&gt;
        &lt;attribute name="label"&gt;Paste&lt;/attribute&gt;
        &lt;attribute name="action"&gt;app.paste&lt;/attribute&gt;
        &lt;attribute name="verb-icon"&gt;edit-paste-symbolic&lt;/attribute&gt;
      &lt;/item&gt;
    &lt;/section&gt;
    

    CSS nodes

    popover[.menu]
    ├── arrow
    ╰── contents.background
        ╰── &lt;child&gt;
    

    The contents child node always gets the .background style class and the popover itself gets the .menu style class if the popover is menu-like (i.e. GtkPopoverMenu).

    Particular uses of GtkPopover, such as touch selection popups or magnifiers in GtkEntry or GtkTextView get style classes like .touch-selection or .magnifier to differentiate from plain popovers.

    When styling a popover directly, the popover node should usually not have any background. The visible part of the popover can have a shadow. To specify it in CSS, set the box-shadow of the contents node.

    Note that, in order to accomplish appropriate arrow visuals, GtkPopover uses custom drawing for the arrow node. This makes it possible for the arrow to change its shape dynamically, but it also limits the possibilities of styling it using CSS. In particular, the arrow gets drawn over the content node’s border and shadow, so they look like one shape, which means that the border width of the content node and the arrow node should be the same. The arrow also does not support any border shape other than solid, no border-radius, only one border width (border-bottom-width is used) and no box-shadow.

    The PopoverRef type acts as a lightweight Swift reference to an underlying GtkPopover instance. It exposes methods that can operate on this data type through PopoverProtocol conformance. Use PopoverRef only as an unowned reference to an existing GtkPopover instance.

    See more

    Declaration

    Swift

    public struct PopoverRef : PopoverProtocol, GWeakCapturing

PopoverMenu Class

  • GtkPopoverMenu is a subclass of GtkPopover that implements menu behavior.

    An example GtkPopoverMenu

    GtkPopoverMenu treats its children like menus and allows switching between them. It can open submenus as traditional, nested submenus, or in a more touch-friendly sliding fashion.

    GtkPopoverMenu is meant to be used primarily with menu models, using [ctorGtk.PopoverMenu.new_from_model]. If you need to put other widgets such as a GtkSpinButton or a GtkSwitch into a popover, you can use [methodGtk.PopoverMenu.add_child].

    For more dialog-like behavior, use a plain GtkPopover.

    The XML format understood by GtkBuilder for GMenuModel consists of a toplevel &lt;menu&gt; element, which contains one or more &lt;item&gt; elements. Each &lt;item&gt; element contains &lt;attribute&gt; and &lt;link&gt; elements with a mandatory name attribute. &lt;link&gt; elements have the same content model as &lt;menu&gt;. Instead of &lt;link name="submenu"&gt; or &lt;link name="section"&gt;, you can use &lt;submenu&gt; or &lt;section&gt; elements.

    &lt;menu id='app-menu'&gt;
      &lt;section&gt;
        &lt;item&gt;
          &lt;attribute name='label' translatable='yes'&gt;_New Window&lt;/attribute&gt;
          &lt;attribute name='action'&gt;app.new&lt;/attribute&gt;
        &lt;/item&gt;
        &lt;item&gt;
          &lt;attribute name='label' translatable='yes'&gt;_About Sunny&lt;/attribute&gt;
          &lt;attribute name='action'&gt;app.about&lt;/attribute&gt;
        &lt;/item&gt;
        &lt;item&gt;
          &lt;attribute name='label' translatable='yes'&gt;_Quit&lt;/attribute&gt;
          &lt;attribute name='action'&gt;app.quit&lt;/attribute&gt;
        &lt;/item&gt;
      &lt;/section&gt;
    &lt;/menu&gt;
    

    Attribute values can be translated using gettext, like other GtkBuilder content. &lt;attribute&gt; elements can be marked for translation with a translatable="yes" attribute. It is also possible to specify message context and translator comments, using the context and comments attributes. To make use of this, the GtkBuilder must have been given the gettext domain to use.

    The following attributes are used when constructing menu items:

    • “label”: a user-visible string to display
    • “action”: the prefixed name of the action to trigger
    • “target”: the parameter to use when activating the action
    • “icon” and “verb-icon”: names of icons that may be displayed
    • “submenu-action”: name of an action that may be used to track whether a submenu is open
    • “hidden-when”: a string used to determine when the item will be hidden. Possible values include “action-disabled”, “action-missing”, “macos-menubar”. This is mainly useful for exported menus, see [methodGtk.Application.set_menubar].
    • “custom”: a string used to match against the ID of a custom child added with [methodGtk.PopoverMenu.add_child], [methodGtk.PopoverMenuBar.add_child], or in the ui file with &lt;child type="ID"&gt;.

    The following attributes are used when constructing sections:

    • “label”: a user-visible string to use as section heading
    • “display-hint”: a string used to determine special formatting for the section. Possible values include “horizontal-buttons”, “circular-buttons” and “inline-buttons”. They all indicate that section should be displayed as a horizontal row of buttons.
    • “text-direction”: a string used to determine the GtkTextDirection to use when “display-hint” is set to “horizontal-buttons”. Possible values include “rtl”, “ltr”, and “none”.

    The following attributes are used when constructing submenus:

    • “label”: a user-visible string to display
    • “icon”: icon name to display

    Menu items will also show accelerators, which are usually associated with actions via [methodGtk.Application.set_accels_for_action], [idgtk_widget_class_add_binding_action] or [methodGtk.ShortcutController.add_shortcut].

    CSS Nodes

    GtkPopoverMenu is just a subclass of GtkPopover that adds custom content to it, therefore it has the same CSS nodes. It is one of the cases that add a .menu style class to the popover’s main node.

    Accessibility

    GtkPopoverMenu uses the GTK_ACCESSIBLE_ROLE_MENU role, and its items use the GTK_ACCESSIBLE_ROLE_MENU_ITEM, GTK_ACCESSIBLE_ROLE_MENU_ITEM_CHECKBOX or GTK_ACCESSIBLE_ROLE_MENU_ITEM_RADIO roles, depending on the action they are connected to.

    The PopoverMenuRef type acts as a lightweight Swift reference to an underlying GtkPopoverMenu instance. It exposes methods that can operate on this data type through PopoverMenuProtocol conformance. Use PopoverMenuRef only as an unowned reference to an existing GtkPopoverMenu instance.

    See more

    Declaration

    Swift

    public struct PopoverMenuRef : PopoverMenuProtocol, GWeakCapturing

PopoverMenuBar Class

  • GtkPopoverMenuBar presents a horizontal bar of items that pop up popover menus when clicked.

    An example GtkPopoverMenuBar

    The only way to create instances of GtkPopoverMenuBar is from a GMenuModel.

    CSS nodes

    menubar
    ├── item[.active]
       ╰── popover
    ╰── item
        ╰── popover
    

    GtkPopoverMenuBar has a single CSS node with name menubar, below which each item has its CSS node, and below that the corresponding popover.

    The item whose popover is currently open gets the .active style class.

    Accessibility

    GtkPopoverMenuBar uses the GTK_ACCESSIBLE_ROLE_MENU_BAR role, the menu items use the GTK_ACCESSIBLE_ROLE_MENU_ITEM role and the menus use the GTK_ACCESSIBLE_ROLE_MENU role.

    The PopoverMenuBarRef type acts as a lightweight Swift reference to an underlying GtkPopoverMenuBar instance. It exposes methods that can operate on this data type through PopoverMenuBarProtocol conformance. Use PopoverMenuBarRef only as an unowned reference to an existing GtkPopoverMenuBar instance.

    See more

    Declaration

    Swift

    public struct PopoverMenuBarRef : PopoverMenuBarProtocol, GWeakCapturing

PrintContext Class

  • A GtkPrintContext encapsulates context information that is required when drawing pages for printing.

    This includes the cairo context and important parameters like page size and resolution. It also lets you easily create [classPango.Layout] and [classPango.Context] objects that match the font metrics of the cairo surface.

    GtkPrintContext objects get passed to the [signalGtk.PrintOperation::begin-print], [signalGtk.PrintOperation::end-print], [signalGtk.PrintOperation::request-page-setup] and [signalGtk.PrintOperation::draw-page] signals on the [classGtk.PrintOperation] object.

    Using GtkPrintContext in a draw-page callback

    static void
    draw_page (GtkPrintOperation *operation,
               GtkPrintContext   *context,
               int                page_nr)
    {
      cairo_t *cr;
      PangoLayout *layout;
      PangoFontDescription *desc;
    
      cr = gtk_print_context_get_cairo_context (context);
    
      // Draw a red rectangle, as wide as the paper (inside the margins)
      cairo_set_source_rgb (cr, 1.0, 0, 0);
      cairo_rectangle (cr, 0, 0, gtk_print_context_get_width (context), 50);
    
      cairo_fill (cr);
    
      // Draw some lines
      cairo_move_to (cr, 20, 10);
      cairo_line_to (cr, 40, 20);
      cairo_arc (cr, 60, 60, 20, 0, M_PI);
      cairo_line_to (cr, 80, 20);
    
      cairo_set_source_rgb (cr, 0, 0, 0);
      cairo_set_line_width (cr, 5);
      cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND);
      cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND);
    
      cairo_stroke (cr);
    
      // Draw some text
      layout = gtk_print_context_create_pango_layout (context);
      pango_layout_set_text (layout, "Hello World! Printing is easy", -1);
      desc = pango_font_description_from_string ("sans 28");
      pango_layout_set_font_description (layout, desc);
      pango_font_description_free (desc);
    
      cairo_move_to (cr, 30, 20);
      pango_cairo_layout_path (cr, layout);
    
      // Font Outline
      cairo_set_source_rgb (cr, 0.93, 1.0, 0.47);
      cairo_set_line_width (cr, 0.5);
      cairo_stroke_preserve (cr);
    
      // Font Fill
      cairo_set_source_rgb (cr, 0, 0.0, 1.0);
      cairo_fill (cr);
    
      g_object_unref (layout);
    }
    

    The PrintContextRef type acts as a lightweight Swift reference to an underlying GtkPrintContext instance. It exposes methods that can operate on this data type through PrintContextProtocol conformance. Use PrintContextRef only as an unowned reference to an existing GtkPrintContext instance.

    See more

    Declaration

    Swift

    public struct PrintContextRef : PrintContextProtocol, GWeakCapturing

PrintJob Class

  • A GtkPrintJob object represents a job that is sent to a printer.

    You only need to deal directly with print jobs if you use the non-portable [classGtk.PrintUnixDialog] API.

    Use [methodGtk.PrintJob.get_surface] to obtain the cairo surface onto which the pages must be drawn. Use [methodGtk.PrintJob.send] to send the finished job to the printer. If you don’t use cairo GtkPrintJob also supports printing of manually generated PostScript, via [methodGtk.PrintJob.set_source_file].

    The PrintJobRef type acts as a lightweight Swift reference to an underlying GtkPrintJob instance. It exposes methods that can operate on this data type through PrintJobProtocol conformance. Use PrintJobRef only as an unowned reference to an existing GtkPrintJob instance.

    See more

    Declaration

    Swift

    public struct PrintJobRef : PrintJobProtocol, GWeakCapturing

PrintOperation Class

  • GtkPrintOperation is the high-level, portable printing API.

    It looks a bit different than other GTK dialogs such as the GtkFileChooser, since some platforms don’t expose enough infrastructure to implement a good print dialog. On such platforms, GtkPrintOperation uses the native print dialog. On platforms which do not provide a native print dialog, GTK uses its own, see [classGtk.PrintUnixDialog].

    The typical way to use the high-level printing API is to create a GtkPrintOperation object with [ctorGtk.PrintOperation.new] when the user selects to print. Then you set some properties on it, e.g. the page size, any [classGtk.PrintSettings] from previous print operations, the number of pages, the current page, etc.

    Then you start the print operation by calling [methodGtk.PrintOperation.run]. It will then show a dialog, let the user select a printer and options. When the user finished the dialog, various signals will be emitted on the GtkPrintOperation, the main one being [signalGtk.PrintOperation::draw-page], which you are supposed to handle and render the page on the provided [classGtk.PrintContext] using Cairo.

    The high-level printing API

    static GtkPrintSettings *settings = NULL;
    
    static void
    do_print (void)
    {
      GtkPrintOperation *print;
      GtkPrintOperationResult res;
    
      print = gtk_print_operation_new ();
    
      if (settings != NULL)
        gtk_print_operation_set_print_settings (print, settings);
    
      g_signal_connect (print, "begin_print", G_CALLBACK (begin_print), NULL);
      g_signal_connect (print, "draw_page", G_CALLBACK (draw_page), NULL);
    
      res = gtk_print_operation_run (print, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,
                                     GTK_WINDOW (main_window), NULL);
    
      if (res == GTK_PRINT_OPERATION_RESULT_APPLY)
        {
          if (settings != NULL)
            g_object_unref (settings);
          settings = g_object_ref (gtk_print_operation_get_print_settings (print));
        }
    
      g_object_unref (print);
    }
    

    By default GtkPrintOperation uses an external application to do print preview. To implement a custom print preview, an application must connect to the preview signal. The functions [methodGtk.PrintOperationPreview.render_page], [methodGtk.PrintOperationPreview.end_preview] and [methodGtk.PrintOperationPreview.is_selected] are useful when implementing a print preview.

    The PrintOperationRef type acts as a lightweight Swift reference to an underlying GtkPrintOperation instance. It exposes methods that can operate on this data type through PrintOperationProtocol conformance. Use PrintOperationRef only as an unowned reference to an existing GtkPrintOperation instance.

    See more

    Declaration

    Swift

    public struct PrintOperationRef : PrintOperationProtocol, GWeakCapturing

PrintSettings Class

  • A GtkPrintSettings object represents the settings of a print dialog in a system-independent way.

    The main use for this object is that once you’ve printed you can get a settings object that represents the settings the user chose, and the next time you print you can pass that object in so that the user doesn’t have to re-set all his settings.

    Its also possible to enumerate the settings so that you can easily save the settings for the next time your app runs, or even store them in a document. The predefined keys try to use shared values as much as possible so that moving such a document between systems still works.

    The PrintSettingsRef type acts as a lightweight Swift reference to an underlying GtkPrintSettings instance. It exposes methods that can operate on this data type through PrintSettingsProtocol conformance. Use PrintSettingsRef only as an unowned reference to an existing GtkPrintSettings instance.

    See more

    Declaration

    Swift

    public struct PrintSettingsRef : PrintSettingsProtocol, GWeakCapturing

PrintUnixDialog Class

  • GtkPrintUnixDialog implements a print dialog for platforms which don’t provide a native print dialog, like Unix.

    An example GtkPrintUnixDialog

    It can be used very much like any other GTK dialog, at the cost of the portability offered by the high-level printing API with [classGtk.PrintOperation].

    In order to print something with GtkPrintUnixDialog, you need to use [methodGtk.PrintUnixDialog.get_selected_printer] to obtain a [classGtk.Printer] object and use it to construct a [classGtk.PrintJob] using [ctorGtk.PrintJob.new].

    GtkPrintUnixDialog uses the following response values:

    • GTK_RESPONSE_OK: for the “Print” button
    • GTK_RESPONSE_APPLY: for the “Preview” button
    • GTK_RESPONSE_CANCEL: for the “Cancel” button

    GtkPrintUnixDialog as GtkBuildable

    The GtkPrintUnixDialog implementation of the GtkBuildable interface exposes its notebook internal children with the name “notebook”.

    An example of a GtkPrintUnixDialog UI definition fragment:

    &lt;object class="GtkPrintUnixDialog" id="dialog1"&gt;
      &lt;child internal-child="notebook"&gt;
        &lt;object class="GtkNotebook" id="notebook"&gt;
          &lt;child&gt;
            &lt;object type="GtkNotebookPage"&gt;
              &lt;property name="tab_expand"&gt;False&lt;/property&gt;
              &lt;property name="tab_fill"&gt;False&lt;/property&gt;
              &lt;property name="tab"&gt;
                &lt;object class="GtkLabel" id="tablabel"&gt;
                  &lt;property name="label"&gt;Tab label&lt;/property&gt;
                &lt;/object&gt;
              &lt;/property&gt;
              &lt;property name="child"&gt;
                &lt;object class="GtkLabel" id="tabcontent"&gt;
                  &lt;property name="label"&gt;Content on notebook tab&lt;/property&gt;
                &lt;/object&gt;
              &lt;/property&gt;
            &lt;/object&gt;
          &lt;/child&gt;
        &lt;/object&gt;
      &lt;/child&gt;
    &lt;/object&gt;
    

    CSS nodes

    GtkPrintUnixDialog has a single CSS node with name window. The style classes dialog and print are added.

    The PrintUnixDialogRef type acts as a lightweight Swift reference to an underlying GtkPrintUnixDialog instance. It exposes methods that can operate on this data type through PrintUnixDialogProtocol conformance. Use PrintUnixDialogRef only as an unowned reference to an existing GtkPrintUnixDialog instance.

    See more

    Declaration

    Swift

    public struct PrintUnixDialogRef : PrintUnixDialogProtocol, GWeakCapturing

Printer Class

  • A GtkPrinter object represents a printer.

    You only need to deal directly with printers if you use the non-portable [classGtk.PrintUnixDialog] API.

    A GtkPrinter allows to get status information about the printer, such as its description, its location, the number of queued jobs, etc. Most importantly, a GtkPrinter object can be used to create a [classGtk.PrintJob] object, which lets you print to the printer.

    The PrinterRef type acts as a lightweight Swift reference to an underlying GtkPrinter instance. It exposes methods that can operate on this data type through PrinterProtocol conformance. Use PrinterRef only as an unowned reference to an existing GtkPrinter instance.

    See more

    Declaration

    Swift

    public struct PrinterRef : PrinterProtocol, GWeakCapturing

ProgressBar Class

  • GtkProgressBar is typically used to display the progress of a long running operation.

    It provides a visual clue that processing is underway. GtkProgressBar can be used in two different modes: percentage mode and activity mode.

    An example GtkProgressBar

    When an application can determine how much work needs to take place (e.g. read a fixed number of bytes from a file) and can monitor its progress, it can use the GtkProgressBar in percentage mode and the user sees a growing bar indicating the percentage of the work that has been completed. In this mode, the application is required to call [methodGtk.ProgressBar.set_fraction] periodically to update the progress bar.

    When an application has no accurate way of knowing the amount of work to do, it can use the GtkProgressBar in activity mode, which shows activity by a block moving back and forth within the progress area. In this mode, the application is required to call [methodGtk.ProgressBar.pulse] periodically to update the progress bar.

    There is quite a bit of flexibility provided to control the appearance of the GtkProgressBar. Functions are provided to control the orientation of the bar, optional text can be displayed along with the bar, and the step size used in activity mode can be set.

    CSS nodes

    progressbar[.osd]
    ├── [text]
    ╰── trough[.empty][.full]
        ╰── progress[.pulse]
    

    GtkProgressBar has a main CSS node with name progressbar and subnodes with names text and trough, of which the latter has a subnode named progress. The text subnode is only present if text is shown. The progress subnode has the style class .pulse when in activity mode. It gets the style classes .left, .right, .top or .bottom added when the progress ‘touches’ the corresponding end of the GtkProgressBar. The .osd class on the progressbar node is for use in overlays like the one Epiphany has for page loading progress.

    Accessibility

    GtkProgressBar uses the GTK_ACCESSIBLE_ROLE_PROGRESS_BAR role.

    The ProgressBarRef type acts as a lightweight Swift reference to an underlying GtkProgressBar instance. It exposes methods that can operate on this data type through ProgressBarProtocol conformance. Use ProgressBarRef only as an unowned reference to an existing GtkProgressBar instance.

    See more

    Declaration

    Swift

    public struct ProgressBarRef : ProgressBarProtocol, GWeakCapturing

PropertyExpression Class

  • A GObject property value in a GtkExpression.

    The PropertyExpressionRef type acts as a lightweight Swift reference to an underlying GtkPropertyExpression instance. It exposes methods that can operate on this data type through PropertyExpressionProtocol conformance. Use PropertyExpressionRef only as an unowned reference to an existing GtkPropertyExpression instance.

    See more

    Declaration

    Swift

    public struct PropertyExpressionRef : PropertyExpressionProtocol

Range Class

  • GtkRange is the common base class for widgets which visualize an adjustment.

    Widgets that are derived from GtkRange include [classGtk.Scale] and [classGtk.Scrollbar].

    Apart from signals for monitoring the parameters of the adjustment, GtkRange provides properties and methods for setting a “fill level” on range widgets. See [methodGtk.Range.set_fill_level].

    The RangeRef type acts as a lightweight Swift reference to an underlying GtkRange instance. It exposes methods that can operate on this data type through RangeProtocol conformance. Use RangeRef only as an unowned reference to an existing GtkRange instance.

    See more

    Declaration

    Swift

    public struct RangeRef : RangeProtocol, GWeakCapturing

RecentData Record

  • Meta-data to be passed to gtk_recent_manager_add_full() when registering a recently used resource.

    The RecentDataRef type acts as a lightweight Swift reference to an underlying GtkRecentData instance. It exposes methods that can operate on this data type through RecentDataProtocol conformance. Use RecentDataRef only as an unowned reference to an existing GtkRecentData instance.

    See more

    Declaration

    Swift

    public struct RecentDataRef : RecentDataProtocol

RecentInfo Record

  • GtkRecentInfo contains the metadata associated with an item in the recently used files list.

    The RecentInfoRef type acts as a lightweight Swift reference to an underlying GtkRecentInfo instance. It exposes methods that can operate on this data type through RecentInfoProtocol conformance. Use RecentInfoRef only as an unowned reference to an existing GtkRecentInfo instance.

    See more

    Declaration

    Swift

    public struct RecentInfoRef : RecentInfoProtocol

RecentManagerClass Record

  • GtkRecentManagerClass contains only private data.

    The RecentManagerClassRef type acts as a lightweight Swift reference to an underlying GtkRecentManagerClass instance. It exposes methods that can operate on this data type through RecentManagerClassProtocol conformance. Use RecentManagerClassRef only as an unowned reference to an existing GtkRecentManagerClass instance.

    See more

    Declaration

    Swift

    public struct RecentManagerClassRef : RecentManagerClassProtocol

RequestedSize Record

  • Represents a request of a screen object in a given orientation. These are primarily used in container implementations when allocating a natural size for children calling. See gtk_distribute_natural_allocation().

    The RequestedSizeRef type acts as a lightweight Swift reference to an underlying GtkRequestedSize instance. It exposes methods that can operate on this data type through RequestedSizeProtocol conformance. Use RequestedSizeRef only as an unowned reference to an existing GtkRequestedSize instance.

    See more

    Declaration

    Swift

    public struct RequestedSizeRef : RequestedSizeProtocol

Requisition Record

RootInterface Record

  • The RootInterfaceRef type acts as a lightweight Swift reference to an underlying GtkRootInterface instance. It exposes methods that can operate on this data type through RootInterfaceProtocol conformance. Use RootInterfaceRef only as an unowned reference to an existing GtkRootInterface instance.

    See more

    Declaration

    Swift

    public struct RootInterfaceRef : RootInterfaceProtocol

ScaleButtonClass Record

RecentManager Class

  • GtkRecentManager manages and looks up recently used files.

    Each recently used file is identified by its URI, and has meta-data associated to it, like the names and command lines of the applications that have registered it, the number of time each application has registered the same file, the mime type of the file and whether the file should be displayed only by the applications that have registered it.

    The recently used files list is per user.

    GtkRecentManager acts like a database of all the recently used files. You can create new GtkRecentManager objects, but it is more efficient to use the default manager created by GTK.

    Adding a new recently used file is as simple as:

    GtkRecentManager *manager;
    
    manager = gtk_recent_manager_get_default ();
    gtk_recent_manager_add_item (manager, file_uri);
    

    The GtkRecentManager will try to gather all the needed information from the file itself through GIO.

    Looking up the meta-data associated with a recently used file given its URI requires calling [methodGtk.RecentManager.lookup_item]:

    GtkRecentManager *manager;
    GtkRecentInfo *info;
    GError *error = NULL;
    
    manager = gtk_recent_manager_get_default ();
    info = gtk_recent_manager_lookup_item (manager, file_uri, &error);
    if (error)
      {
        g_warning ("Could not find the file: `s`", error-&gt;message);
        g_error_free (error);
      }
    else
     {
       // Use the info object
       gtk_recent_info_unref (info);
     }
    

    In order to retrieve the list of recently used files, you can use [methodGtk.RecentManager.get_items], which returns a list of [structGtk.RecentInfo].

    Note that the maximum age of the recently used files list is controllable through the [propertyGtk.Settings:gtk-recent-files-max-age] property.

    The RecentManagerRef type acts as a lightweight Swift reference to an underlying GtkRecentManager instance. It exposes methods that can operate on this data type through RecentManagerProtocol conformance. Use RecentManagerRef only as an unowned reference to an existing GtkRecentManager instance.

    See more

    Declaration

    Swift

    public struct RecentManagerRef : RecentManagerProtocol, GWeakCapturing

Revealer Class

  • A GtkRevealer animates the transition of its child from invisible to visible.

    The style of transition can be controlled with [methodGtk.Revealer.set_transition_type].

    These animations respect the [propertyGtk.Settings:gtk-enable-animations] setting.

    CSS nodes

    GtkRevealer has a single CSS node with name revealer. When styling GtkRevealer using CSS, remember that it only hides its contents, not itself. That means applied margin, padding and borders will be visible even when the [propertyGtk.Revealer:reveal-child] property is set to false.

    Accessibility

    GtkRevealer uses the GTK_ACCESSIBLE_ROLE_GROUP role.

    The child of GtkRevealer, if set, is always available in the accessibility tree, regardless of the state of the revealer widget.

    The RevealerRef type acts as a lightweight Swift reference to an underlying GtkRevealer instance. It exposes methods that can operate on this data type through RevealerProtocol conformance. Use RevealerRef only as an unowned reference to an existing GtkRevealer instance.

    See more

    Declaration

    Swift

    public struct RevealerRef : RevealerProtocol, GWeakCapturing

Scale Class

  • A GtkScale is a slider control used to select a numeric value.

    An example GtkScale

    To use it, you’ll probably want to investigate the methods on its base class, [classGtkRange], in addition to the methods for GtkScale itself. To set the value of a scale, you would normally use [methodGtk.Range.set_value]. To detect changes to the value, you would normally use the [signalGtk.Range::value-changed] signal.

    Note that using the same upper and lower bounds for the GtkScale (through the GtkRange methods) will hide the slider itself. This is useful for applications that want to show an undeterminate value on the scale, without changing the layout of the application (such as movie or music players).

    GtkScale as GtkBuildable

    GtkScale supports a custom <marks> element, which can contain multiple <mark&gt; elements. The “value” and “position” attributes have the same meaning as [methodGtk.Scale.add_mark] parameters of the same name. If the element is not empty, its content is taken as the markup to show at the mark. It can be translated with the usual ”translatable” and “context” attributes.

    CSS nodes

    scale[.fine-tune][.marks-before][.marks-after]
    ├── [value][.top][.right][.bottom][.left]
    ├── marks.top
       ├── mark
           ├── [label]
           ╰── indicator
       
       ╰── mark
    ├── marks.bottom
       ├── mark
           ├── indicator
           ╰── [label]
       
       ╰── mark
    ╰── trough
        ├── [fill]
        ├── [highlight]
        ╰── slider
    

    GtkScale has a main CSS node with name scale and a subnode for its contents, with subnodes named trough and slider.

    The main node gets the style class .fine-tune added when the scale is in ‘fine-tuning’ mode.

    If the scale has an origin (see [methodGtk.Scale.set_has_origin]), there is a subnode with name highlight below the trough node that is used for rendering the highlighted part of the trough.

    If the scale is showing a fill level (see [methodGtk.Range.set_show_fill_level]), there is a subnode with name fill below the trough node that is used for rendering the filled in part of the trough.

    If marks are present, there is a marks subnode before or after the trough node, below which each mark gets a node with name mark. The marks nodes get either the .top or .bottom style class.

    The mark node has a subnode named indicator. If the mark has text, it also has a subnode named label. When the mark is either above or left of the scale, the label subnode is the first when present. Otherwise, the indicator subnode is the first.

    The main CSS node gets the ‘marks-before’ and/or ‘marks-after’ style classes added depending on what marks are present.

    If the scale is displaying the value (see [propertyGtk.Scale:draw-value]), there is subnode with name value. This node will get the .top or .bottom style classes similar to the marks node.

    Accessibility

    GtkScale uses the GTK_ACCESSIBLE_ROLE_SLIDER role.

    The ScaleRef type acts as a lightweight Swift reference to an underlying GtkScale instance. It exposes methods that can operate on this data type through ScaleProtocol conformance. Use ScaleRef only as an unowned reference to an existing GtkScale instance.

    See more

    Declaration

    Swift

    public struct ScaleRef : ScaleProtocol, GWeakCapturing

Root Interface

  • GtkRoot is the interface implemented by all widgets that can act as a toplevel widget.

    The root widget takes care of providing the connection to the windowing system and manages layout, drawing and event delivery for its widget hierarchy.

    The obvious example of a GtkRoot is GtkWindow.

    To get the display to which a GtkRoot belongs, use [methodGtk.Root.get_display].

    GtkRoot also maintains the location of keyboard focus inside its widget hierarchy, with [methodGtk.Root.set_focus] and [methodGtk.Root.get_focus].

    The RootRef type acts as a lightweight Swift reference to an underlying GtkRoot instance. It exposes methods that can operate on this data type through RootProtocol conformance. Use RootRef only as an unowned reference to an existing GtkRoot instance.

    See more

    Declaration

    Swift

    public struct RootRef : RootProtocol, GWeakCapturing

Scrollable Interface

  • GtkScrollable is an interface for widgets with native scrolling ability.

    To implement this interface you should override the [propertyGtk.Scrollable:hadjustment] and [propertyGtk.Scrollable:vadjustment] properties.

    Creating a scrollable widget

    All scrollable widgets should do the following.

    • When a parent widget sets the scrollable child widget’s adjustments, the widget should populate the adjustments’ [propertyGtk.Adjustment:lower], [propertyGtk.Adjustment:upper], [propertyGtk.Adjustment:step-increment], [propertyGtk.Adjustment:page-increment] and [propertyGtk.Adjustment:page-size] properties and connect to the [signalGtk.Adjustment::value-changed] signal.

    • Because its preferred size is the size for a fully expanded widget, the scrollable widget must be able to cope with underallocations. This means that it must accept any value passed to its [vfuncGtk.Widget.size_allocate] implementation.

    • When the parent allocates space to the scrollable child widget, the widget should update the adjustments’ properties with new values.

    • When any of the adjustments emits the [signalGtk.Adjustment::value-changed] signal, the scrollable widget should scroll its contents.

    The ScrollableRef type acts as a lightweight Swift reference to an underlying GtkScrollable instance. It exposes methods that can operate on this data type through ScrollableProtocol conformance. Use ScrollableRef only as an unowned reference to an existing GtkScrollable instance.

    See more

    Declaration

    Swift

    public struct ScrollableRef : ScrollableProtocol

ScaleButton Class

  • GtkScaleButton provides a button which pops up a scale widget.

    This kind of widget is commonly used for volume controls in multimedia applications, and GTK provides a [classGtk.VolumeButton] subclass that is tailored for this use case.

    CSS nodes

    GtkScaleButton has a single CSS node with name button. To differentiate it from a plain GtkButton, it gets the .scale style class.

    The ScaleButtonRef type acts as a lightweight Swift reference to an underlying GtkScaleButton instance. It exposes methods that can operate on this data type through ScaleButtonProtocol conformance. Use ScaleButtonRef only as an unowned reference to an existing GtkScaleButton instance.

    See more

    Declaration

    Swift

    public struct ScaleButtonRef : ScaleButtonProtocol, GWeakCapturing

Scrollbar Class

  • The GtkScrollbar widget is a horizontal or vertical scrollbar.

    An example GtkScrollbar

    Its position and movement are controlled by the adjustment that is passed to or created by [ctorGtk.Scrollbar.new]. See [classGtk.Adjustment] for more details. The [propertyGtk.Adjustment:value] field sets the position of the thumb and must be between [propertyGtk.Adjustment:lower] and [propertyGtk.Adjustment:upper] - [propertyGtk.Adjustment:page-size]. The [propertyGtk.Adjustment:page-size] represents the size of the visible scrollable area.

    The fields [propertyGtk.Adjustment:step-increment] and [propertyGtk.Adjustment:page-increment] fields are added to or subtracted from the [propertyGtk.Adjustment:value] when the user asks to move by a step (using e.g. the cursor arrow keys) or by a page (using e.g. the Page Down/Up keys).

    CSS nodes

    scrollbar
    ╰── range[.fine-tune]
        ╰── trough
            ╰── slider
    

    GtkScrollbar has a main CSS node with name scrollbar and a subnode for its contents. The main node gets the .horizontal or .vertical style classes applied, depending on the scrollbar’s orientation.

    The range node gets the style class .fine-tune added when the scrollbar is in ‘fine-tuning’ mode.

    Other style classes that may be added to scrollbars inside [classGtk.ScrolledWindow] include the positional classes (.left, .right, .top, .bottom) and style classes related to overlay scrolling (.overlay-indicator, .dragging, .hovering).

    Accessibility

    GtkScrollbar uses the GTK_ACCESSIBLE_ROLE_SCROLLBAR role.

    The ScrollbarRef type acts as a lightweight Swift reference to an underlying GtkScrollbar instance. It exposes methods that can operate on this data type through ScrollbarProtocol conformance. Use ScrollbarRef only as an unowned reference to an existing GtkScrollbar instance.

    See more

    Declaration

    Swift

    public struct ScrollbarRef : ScrollbarProtocol, GWeakCapturing

ScrolledWindow Class

  • GtkScrolledWindow is a container that makes its child scrollable.

    It does so using either internally added scrollbars or externally associated adjustments, and optionally draws a frame around the child.

    Widgets with native scrolling support, i.e. those whose classes implement the [ifaceGtk.Scrollable] interface, are added directly. For other types of widget, the class [classGtk.Viewport] acts as an adaptor, giving scrollability to other widgets. [methodGtk.ScrolledWindow.set_child] intelligently accounts for whether or not the added child is a GtkScrollable. If it isn’t, then it wraps the child in a GtkViewport. Therefore, you can just add any child widget and not worry about the details.

    If [methodGtk.ScrolledWindow.set_child] has added a GtkViewport for you, you can remove both your added child widget from the GtkViewport, and the GtkViewport from the GtkScrolledWindow, like this:

    GtkWidget *scrolled_window = gtk_scrolled_window_new ();
    GtkWidget *child_widget = gtk_button_new ();
    
    // GtkButton is not a GtkScrollable, so GtkScrolledWindow will automatically
    // add a GtkViewport.
    gtk_box_append (GTK_BOX (scrolled_window), child_widget);
    
    // Either of these will result in child_widget being unparented:
    gtk_box_remove (GTK_BOX (scrolled_window), child_widget);
    // or
    gtk_box_remove (GTK_BOX (scrolled_window),
                          gtk_bin_get_child (GTK_BIN (scrolled_window)));
    

    Unless [propertyGtk.ScrolledWindow:hscrollbar-policy] and [propertyGtk.ScrolledWindow:vscrollbar-policy] are GTK_POLICY_NEVER or GTK_POLICY_EXTERNAL, GtkScrolledWindow adds internal GtkScrollbar widgets around its child. The scroll position of the child, and if applicable the scrollbars, is controlled by the [propertyGtk.ScrolledWindow:hadjustment] and [propertyGtk.ScrolledWindow:vadjustment] that are associated with the GtkScrolledWindow. See the docs on [classGtk.Scrollbar] for the details, but note that the “step_increment” and “page_increment” fields are only effective if the policy causes scrollbars to be present.

    If a GtkScrolledWindow doesn’t behave quite as you would like, or doesn’t have exactly the right layout, it’s very possible to set up your own scrolling with GtkScrollbar and for example a GtkGrid.

    Touch support

    GtkScrolledWindow has built-in support for touch devices. When a touchscreen is used, swiping will move the scrolled window, and will expose ‘kinetic’ behavior. This can be turned off with the [propertyGtk.ScrolledWindow:kinetic-scrolling] property if it is undesired.

    GtkScrolledWindow also displays visual ‘overshoot’ indication when the content is pulled beyond the end, and this situation can be captured with the [signalGtk.ScrolledWindow::edge-overshot] signal.

    If no mouse device is present, the scrollbars will overlaid as narrow, auto-hiding indicators over the content. If traditional scrollbars are desired although no mouse is present, this behaviour can be turned off with the [propertyGtk.ScrolledWindow:overlay-scrolling] property.

    CSS nodes

    GtkScrolledWindow has a main CSS node with name scrolledwindow. It gets a .frame style class added when [propertyGtk.ScrolledWindow:has-frame] is true.

    It uses subnodes with names overshoot and undershoot to draw the overflow and underflow indications. These nodes get the .left, .right, .top or .bottom style class added depending on where the indication is drawn.

    GtkScrolledWindow also sets the positional style classes (.left, .right, .top, .bottom) and style classes related to overlay scrolling (.overlay-indicator, .dragging, .hovering) on its scrollbars.

    If both scrollbars are visible, the area where they meet is drawn with a subnode named junction.

    Accessibility

    GtkScrolledWindow uses the GTK_ACCESSIBLE_ROLE_GROUP role.

    The ScrolledWindowRef type acts as a lightweight Swift reference to an underlying GtkScrolledWindow instance. It exposes methods that can operate on this data type through ScrolledWindowProtocol conformance. Use ScrolledWindowRef only as an unowned reference to an existing GtkScrolledWindow instance.

    See more

    Declaration

    Swift

    public struct ScrolledWindowRef : ScrolledWindowProtocol, GWeakCapturing

SearchBar Class

  • GtkSearchBar is a container made to have a search entry.

    An example GtkSearchBar

    It can also contain additional widgets, such as drop-down menus, or buttons. The search bar would appear when a search is started through typing on the keyboard, or the application’s search mode is toggled on.

    For keyboard presses to start a search, the search bar must be told of a widget to capture key events from through [methodGtk.SearchBar.set_key_capture_widget]. This widget will typically be the top-level window, or a parent container of the search bar. Common shortcuts such as Ctrl+F should be handled as an application action, or through the menu items.

    You will also need to tell the search bar about which entry you are using as your search entry using [methodGtk.SearchBar.connect_entry].

    The following example shows you how to create a more complex search entry.

    A simple example

    CSS nodes

    searchbar
    ╰── revealer
        ╰── box
             ├── [child]
             ╰── [button.close]
    

    GtkSearchBar has a main CSS node with name searchbar. It has a child node with name revealer that contains a node with name box. The box node contains both the CSS node of the child widget as well as an optional button node which gets the .close style class applied.

    Accessibility

    GtkSearchBar uses the GTK_ACCESSIBLE_ROLE_SEARCH role.

    The SearchBarRef type acts as a lightweight Swift reference to an underlying GtkSearchBar instance. It exposes methods that can operate on this data type through SearchBarProtocol conformance. Use SearchBarRef only as an unowned reference to an existing GtkSearchBar instance.

    See more

    Declaration

    Swift

    public struct SearchBarRef : SearchBarProtocol, GWeakCapturing

SearchEntry Class

  • GtkSearchEntry is an entry widget that has been tailored for use as a search entry.

    The main API for interacting with a GtkSearchEntry as entry is the GtkEditable interface.

    An example GtkSearchEntry

    It will show an inactive symbolic “find” icon when the search entry is empty, and a symbolic “clear” icon when there is text. Clicking on the “clear” icon will empty the search entry.

    To make filtering appear more reactive, it is a good idea to not react to every change in the entry text immediately, but only after a short delay. To support this, GtkSearchEntry emits the [signalGtk.SearchEntry::search-changed] signal which can be used instead of the [signalGtk.Editable::changed] signal.

    The [signalGtk.SearchEntry::previous-match], [signalGtk.SearchEntry::next-match] and [signalGtk.SearchEntry::stop-search] signals can be used to implement moving between search results and ending the search.

    Often, GtkSearchEntry will be fed events by means of being placed inside a [classGtk.SearchBar]. If that is not the case, you can use [methodGtk.SearchEntry.set_key_capture_widget] to let it capture key input from another widget.

    GtkSearchEntry provides only minimal API and should be used with the [ifaceGtk.Editable] API.

    CSS Nodes

    entry.search
    ╰── text
    

    GtkSearchEntry has a single CSS node with name entry that carries a .search style class, and the text node is a child of that.

    Accessibility

    GtkSearchEntry uses the GTK_ACCESSIBLE_ROLE_SEARCH_BOX role.

    The SearchEntryRef type acts as a lightweight Swift reference to an underlying GtkSearchEntry instance. It exposes methods that can operate on this data type through SearchEntryProtocol conformance. Use SearchEntryRef only as an unowned reference to an existing GtkSearchEntry instance.

    See more

    Declaration

    Swift

    public struct SearchEntryRef : SearchEntryProtocol, GWeakCapturing

SelectionFilterModel Class

  • GtkSelectionFilterModel is a list model that presents the selection from a GtkSelectionModel.

    The SelectionFilterModelRef type acts as a lightweight Swift reference to an underlying GtkSelectionFilterModel instance. It exposes methods that can operate on this data type through SelectionFilterModelProtocol conformance. Use SelectionFilterModelRef only as an unowned reference to an existing GtkSelectionFilterModel instance.

    See more

    Declaration

    Swift

    public struct SelectionFilterModelRef : SelectionFilterModelProtocol, GWeakCapturing

Separator Class

  • GtkSeparator is a horizontal or vertical separator widget.

    An example GtkSeparator

    A GtkSeparator can be used to group the widgets within a window. It displays a line with a shadow to make it appear sunken into the interface.

    CSS nodes

    GtkSeparator has a single CSS node with name separator. The node gets one of the .horizontal or .vertical style classes.

    Accessibility

    GtkSeparator uses the GTK_ACCESSIBLE_ROLE_SEPARATOR role.

    The SeparatorRef type acts as a lightweight Swift reference to an underlying GtkSeparator instance. It exposes methods that can operate on this data type through SeparatorProtocol conformance. Use SeparatorRef only as an unowned reference to an existing GtkSeparator instance.

    See more

    Declaration

    Swift

    public struct SeparatorRef : SeparatorProtocol, GWeakCapturing

Settings Class

  • GtkSettings provides a mechanism to share global settings between applications.

    On the X window system, this sharing is realized by an XSettings manager that is usually part of the desktop environment, along with utilities that let the user change these settings.

    On Wayland, the settings are obtained either via a settings portal, or by reading desktop settings from DConf.

    In the absence of these sharing mechanisms, GTK reads default values for settings from settings.ini files in /etc/gtk-4.0, $XDG_CONFIG_DIRS/gtk-4.0 and $XDG_CONFIG_HOME/gtk-4.0. These files must be valid key files (see GKeyFile), and have a section called Settings. Themes can also provide default values for settings by installing a settings.ini file next to their gtk.css file.

    Applications can override system-wide settings by setting the property of the GtkSettings object with g_object_set(). This should be restricted to special cases though; GtkSettings are not meant as an application configuration facility.

    There is one GtkSettings instance per display. It can be obtained with [funcGtk.Settings.get_for_display], but in many cases, it is more convenient to use [methodGtk.Widget.get_settings].

    The SettingsRef type acts as a lightweight Swift reference to an underlying GtkSettings instance. It exposes methods that can operate on this data type through SettingsProtocol conformance. Use SettingsRef only as an unowned reference to an existing GtkSettings instance.

    See more

    Declaration

    Swift

    public struct SettingsRef : SettingsProtocol, GWeakCapturing

Shortcut Class

  • A GtkShortcut describes a keyboard shortcut.

    It contains a description of how to trigger the shortcut via a [classGtk.ShortcutTrigger] and a way to activate the shortcut on a widget via a [classGtk.ShortcutAction].

    The actual work is usually done via [classGtk.ShortcutController], which decides if and when to activate a shortcut. Using that controller directly however is rarely necessary as various higher level convenience APIs exist on GtkWidgets that make it easier to use shortcuts in GTK.

    GtkShortcut does provide functionality to make it easy for users to work with shortcuts, either by providing informational strings for display purposes or by allowing shortcuts to be configured.

    The ShortcutRef type acts as a lightweight Swift reference to an underlying GtkShortcut instance. It exposes methods that can operate on this data type through ShortcutProtocol conformance. Use ShortcutRef only as an unowned reference to an existing GtkShortcut instance.

    See more

    Declaration

    Swift

    public struct ShortcutRef : ShortcutProtocol, GWeakCapturing

ShortcutAction Class

  • GtkShortcutAction encodes an action that can be triggered by a keyboard shortcut.

    GtkShortcutActions contain functions that allow easy presentation to end users as well as being printed for debugging.

    All GtkShortcutActions are immutable, you can only specify their properties during construction. If you want to change a action, you have to replace it with a new one. If you need to pass arguments to an action, these are specified by the higher-level GtkShortcut object.

    To activate a GtkShortcutAction manually, [methodGtk.ShortcutAction.activate] can be called.

    GTK provides various actions:

    • [classGtk.MnemonicAction]: a shortcut action that calls gtk_widget_mnemonic_activate()
    • [classGtk.CallbackAction]: a shortcut action that invokes a given callback
    • [classGtk.SignalAction]: a shortcut action that emits a given signal
    • [classGtk.ActivateAction]: a shortcut action that calls gtk_widget_activate()
    • [classGtk.NamedAction]: a shortcut action that calls gtk_widget_activate_action()
    • [classGtk.NothingAction]: a shortcut action that does nothing

    The ShortcutActionRef type acts as a lightweight Swift reference to an underlying GtkShortcutAction instance. It exposes methods that can operate on this data type through ShortcutActionProtocol conformance. Use ShortcutActionRef only as an unowned reference to an existing GtkShortcutAction instance.

    See more

    Declaration

    Swift

    public struct ShortcutActionRef : ShortcutActionProtocol, GWeakCapturing

ShortcutController Class

  • GtkShortcutController is an event controller that manages shortcuts.

    Most common shortcuts are using this controller implicitly, e.g. by adding a mnemonic underline to a GtkLabel, or by installing a key binding using [methodGtk.WidgetClass.add_binding], or by adding accelerators to global actions using [methodGtk.Application.set_accels_for_action].

    But it is possible to create your own shortcut controller, and add shortcuts to it.

    GtkShortcutController implements GListModel for querying the shortcuts that have been added to it.

    GtkShortcutController as a GtkBuildable

    GtkShortcutControllers can be creates in ui files to set up shortcuts in the same place as the widgets.

    An example of a UI definition fragment with GtkShortcutController:

      &lt;object class='GtkButton'&gt;
        &lt;child&gt;
          &lt;object class='GtkShortcutController'&gt;
            &lt;property name='scope'&gt;managed&lt;/property&gt;
            &lt;child&gt;
              &lt;object class='GtkShortcut'&gt;
                &lt;property name='trigger'&gt;&lt;Control&gt;k&lt;/property&gt;
                &lt;property name='action'&gt;activate&lt;/property&gt;
              &lt;/object&gt;
            &lt;/child&gt;
          &lt;/object&gt;
        &lt;/child&gt;
      &lt;/object&gt;
    

    This example creates a [classGtk.ActivateAction] for triggering the activate signal of the GtkButton. See [ctorGtk.ShortcutAction.parse_string] for the syntax for other kinds of GtkShortcutAction. See [ctorGtk.ShortcutTrigger.parse_string] to learn more about the syntax for triggers.

    The ShortcutControllerRef type acts as a lightweight Swift reference to an underlying GtkShortcutController instance. It exposes methods that can operate on this data type through ShortcutControllerProtocol conformance. Use ShortcutControllerRef only as an unowned reference to an existing GtkShortcutController instance.

    See more

    Declaration

    Swift

    public struct ShortcutControllerRef : ShortcutControllerProtocol, GWeakCapturing

ShortcutLabel Class

  • GtkShortcutLabel displays a single keyboard shortcut or gesture.

    The main use case for GtkShortcutLabel is inside a [classGtk.ShortcutsWindow].

    The ShortcutLabelRef type acts as a lightweight Swift reference to an underlying GtkShortcutLabel instance. It exposes methods that can operate on this data type through ShortcutLabelProtocol conformance. Use ShortcutLabelRef only as an unowned reference to an existing GtkShortcutLabel instance.

    See more

    Declaration

    Swift

    public struct ShortcutLabelRef : ShortcutLabelProtocol, GWeakCapturing

ShortcutTrigger Class

  • GtkShortcutTrigger tracks how a GtkShortcut should be activated.

    To find out if a GtkShortcutTrigger triggers, you can call [methodGtk.ShortcutTrigger.trigger] on a GdkEvent.

    GtkShortcutTriggers contain functions that allow easy presentation to end users as well as being printed for debugging.

    All GtkShortcutTriggers are immutable, you can only specify their properties during construction. If you want to change a trigger, you have to replace it with a new one.

    The ShortcutTriggerRef type acts as a lightweight Swift reference to an underlying GtkShortcutTrigger instance. It exposes methods that can operate on this data type through ShortcutTriggerProtocol conformance. Use ShortcutTriggerRef only as an unowned reference to an existing GtkShortcutTrigger instance.

    See more

    Declaration

    Swift

    public struct ShortcutTriggerRef : ShortcutTriggerProtocol, GWeakCapturing

ShortcutsGroup Class

  • A GtkShortcutsGroup represents a group of related keyboard shortcuts or gestures.

    The group has a title. It may optionally be associated with a view of the application, which can be used to show only relevant shortcuts depending on the application context.

    This widget is only meant to be used with [classGtk.ShortcutsWindow].

    The ShortcutsGroupRef type acts as a lightweight Swift reference to an underlying GtkShortcutsGroup instance. It exposes methods that can operate on this data type through ShortcutsGroupProtocol conformance. Use ShortcutsGroupRef only as an unowned reference to an existing GtkShortcutsGroup instance.

    See more

    Declaration

    Swift

    public struct ShortcutsGroupRef : ShortcutsGroupProtocol, GWeakCapturing

ShortcutsSection Class

  • A GtkShortcutsSection collects all the keyboard shortcuts and gestures for a major application mode.

    If your application needs multiple sections, you should give each section a unique [propertyGtk.ShortcutsSection:section-name] and a [propertyGtk.ShortcutsSection:title] that can be shown in the section selector of the [classGtk.ShortcutsWindow].

    The [propertyGtk.ShortcutsSection:max-height] property can be used to influence how the groups in the section are distributed over pages and columns.

    This widget is only meant to be used with [classGtk.ShortcutsWindow].

    The ShortcutsSectionRef type acts as a lightweight Swift reference to an underlying GtkShortcutsSection instance. It exposes methods that can operate on this data type through ShortcutsSectionProtocol conformance. Use ShortcutsSectionRef only as an unowned reference to an existing GtkShortcutsSection instance.

    See more

    Declaration

    Swift

    public struct ShortcutsSectionRef : ShortcutsSectionProtocol, GWeakCapturing

ShortcutsShortcut Class

  • A GtkShortcutsShortcut represents a single keyboard shortcut or gesture with a short text.

    This widget is only meant to be used with GtkShortcutsWindow.

    The ShortcutsShortcutRef type acts as a lightweight Swift reference to an underlying GtkShortcutsShortcut instance. It exposes methods that can operate on this data type through ShortcutsShortcutProtocol conformance. Use ShortcutsShortcutRef only as an unowned reference to an existing GtkShortcutsShortcut instance.

    See more

    Declaration

    Swift

    public struct ShortcutsShortcutRef : ShortcutsShortcutProtocol, GWeakCapturing

ShortcutsWindow Class

  • A GtkShortcutsWindow shows information about the keyboard shortcuts and gestures of an application.

    The shortcuts can be grouped, and you can have multiple sections in this window, corresponding to the major modes of your application.

    Additionally, the shortcuts can be filtered by the current view, to avoid showing information that is not relevant in the current application context.

    The recommended way to construct a GtkShortcutsWindow is with [classGtk.Builder], by populating a GtkShortcutsWindow with one or more GtkShortcutsSection objects, which contain GtkShortcutsGroups that in turn contain objects of class GtkShortcutsShortcut.

    A simple example:

    This example has as single section. As you can see, the shortcut groups are arranged in columns, and spread across several pages if there are too many to find on a single page.

    The .ui file for this example can be found here.

    An example with multiple views:

    This example shows a GtkShortcutsWindow that has been configured to show only the shortcuts relevant to the “stopwatch” view.

    The .ui file for this example can be found here.

    An example with multiple sections:

    This example shows a GtkShortcutsWindow with two sections, “Editor Shortcuts” and “Terminal Shortcuts”.

    The .ui file for this example can be found here.

    The ShortcutsWindowRef type acts as a lightweight Swift reference to an underlying GtkShortcutsWindow instance. It exposes methods that can operate on this data type through ShortcutsWindowProtocol conformance. Use ShortcutsWindowRef only as an unowned reference to an existing GtkShortcutsWindow instance.

    See more

    Declaration

    Swift

    public struct ShortcutsWindowRef : ShortcutsWindowProtocol, GWeakCapturing

SignalAction Class

  • A GtkShortcutAction that emits a signal.

    Signals that are used in this way are referred to as keybinding signals, and they are expected to be defined with the G_SIGNAL_ACTION flag.

    The SignalActionRef type acts as a lightweight Swift reference to an underlying GtkSignalAction instance. It exposes methods that can operate on this data type through SignalActionProtocol conformance. Use SignalActionRef only as an unowned reference to an existing GtkSignalAction instance.

    See more

    Declaration

    Swift

    public struct SignalActionRef : SignalActionProtocol, GWeakCapturing

SignalListItemFactory Class

  • GtkSignalListItemFactory is a GtkListItemFactory that emits signals to to manage listitems.

    Signals are emitted for every listitem in the same order:

    1. [signalGtk.SignalListItemFactory::setup] is emitted to set up permanent things on the listitem. This usually means constructing the widgets used in the row and adding them to the listitem.

    2. [signalGtk.SignalListItemFactory::bind] is emitted to bind the item passed via [propertyGtk.ListItem:item] to the widgets that have been created in step 1 or to add item-specific widgets. Signals are connected to listen to changes - both to changes in the item to update the widgets or to changes in the widgets to update the item. After this signal has been called, the listitem may be shown in a list widget.

    3. [signalGtk.SignalListItemFactory::unbind] is emitted to undo everything done in step 2. Usually this means disconnecting signal handlers. Once this signal has been called, the listitem will no longer be used in a list widget.

    4. [signalGtk.SignalListItemFactory::bind] and [signalGtk.SignalListItemFactory::unbind] may be emitted multiple times again to bind the listitem for use with new items. By reusing listitems, potentially costly setup can be avoided. However, it means code needs to make sure to properly clean up the listitem in step 3 so that no information from the previous use leaks into the next use.

      1. [signalGtk.SignalListItemFactory::teardown] is emitted to allow undoing the effects of [signalGtk.SignalListItemFactory::setup]. After this signal was emitted on a listitem, the listitem will be destroyed and not be used again.

    Note that during the signal emissions, changing properties on the GtkListItems passed will not trigger notify signals as the listitem’s notifications are frozen. See g_object_freeze_notify() for details.

    For tracking changes in other properties in the GtkListItem, the notify signal is recommended. The signal can be connected in the [signalGtk.SignalListItemFactory::setup] signal and removed again during [signalGtk.SignalListItemFactory::teardown].

    The SignalListItemFactoryRef type acts as a lightweight Swift reference to an underlying GtkSignalListItemFactory instance. It exposes methods that can operate on this data type through SignalListItemFactoryProtocol conformance. Use SignalListItemFactoryRef only as an unowned reference to an existing GtkSignalListItemFactory instance.

    See more

    Declaration

    Swift

    public struct SignalListItemFactoryRef : SignalListItemFactoryProtocol, GWeakCapturing

SingleSelection Class

  • GtkSingleSelection is a GtkSelectionModel that allows selecting a single item.

    Note that the selection is persistent – if the selected item is removed and re-added in the same items-changed emission, it stays selected. In particular, this means that changing the sort order of an underlying sort model will preserve the selection.

    The SingleSelectionRef type acts as a lightweight Swift reference to an underlying GtkSingleSelection instance. It exposes methods that can operate on this data type through SingleSelectionProtocol conformance. Use SingleSelectionRef only as an unowned reference to an existing GtkSingleSelection instance.

    See more

    Declaration

    Swift

    public struct SingleSelectionRef : SingleSelectionProtocol, GWeakCapturing

SizeGroup Class

  • GtkSizeGroup groups widgets together so they all request the same size.

    This is typically useful when you want a column of widgets to have the same size, but you can’t use a GtkGrid.

    In detail, the size requested for each widget in a GtkSizeGroup is the maximum of the sizes that would have been requested for each widget in the size group if they were not in the size group. The mode of the size group (see [methodGtk.SizeGroup.set_mode]) determines whether this applies to the horizontal size, the vertical size, or both sizes.

    Note that size groups only affect the amount of space requested, not the size that the widgets finally receive. If you want the widgets in a GtkSizeGroup to actually be the same size, you need to pack them in such a way that they get the size they request and not more.

    GtkSizeGroup objects are referenced by each widget in the size group, so once you have added all widgets to a GtkSizeGroup, you can drop the initial reference to the size group with g_object_unref(). If the widgets in the size group are subsequently destroyed, then they will be removed from the size group and drop their references on the size group; when all widgets have been removed, the size group will be freed.

    Widgets can be part of multiple size groups; GTK will compute the horizontal size of a widget from the horizontal requisition of all widgets that can be reached from the widget by a chain of size groups of type GTK_SIZE_GROUP_HORIZONTAL or GTK_SIZE_GROUP_BOTH, and the vertical size from the vertical requisition of all widgets that can be reached from the widget by a chain of size groups of type GTK_SIZE_GROUP_VERTICAL or GTK_SIZE_GROUP_BOTH.

    Note that only non-contextual sizes of every widget are ever consulted by size groups (since size groups have no knowledge of what size a widget will be allocated in one dimension, it cannot derive how much height a widget will receive for a given width). When grouping widgets that trade height for width in mode GTK_SIZE_GROUP_VERTICAL or GTK_SIZE_GROUP_BOTH: the height for the minimum width will be the requested height for all widgets in the group. The same is of course true when horizontally grouping width for height widgets.

    Widgets that trade height-for-width should set a reasonably large minimum width by way of [propertyGtk.Label:width-chars] for instance. Widgets with static sizes as well as widgets that grow (such as ellipsizing text) need no such considerations.

    GtkSizeGroup as GtkBuildable

    Size groups can be specified in a UI definition by placing an <object> element with class="GtkSizeGroup" somewhere in the UI definition. The widgets that belong to the size group are specified by a <widgets> element that may contain multiple <widget> elements, one for each member of the size group. The ”name” attribute gives the id of the widget.

    An example of a UI definition fragment with GtkSizeGroup:

    &lt;object class="GtkSizeGroup"&gt;
      &lt;property name="mode"&gt;horizontal&lt;/property&gt;
      &lt;widgets&gt;
        &lt;widget name="radio1"/&gt;
        &lt;widget name="radio2"/&gt;
      &lt;/widgets&gt;
    &lt;/object&gt;
    

    The SizeGroupRef type acts as a lightweight Swift reference to an underlying GtkSizeGroup instance. It exposes methods that can operate on this data type through SizeGroupProtocol conformance. Use SizeGroupRef only as an unowned reference to an existing GtkSizeGroup instance.

    See more

    Declaration

    Swift

    public struct SizeGroupRef : SizeGroupProtocol, GWeakCapturing

SliceListModel Class

  • GtkSliceListModel is a list model that presents a slice of another model.

    This is useful when implementing paging by setting the size to the number of elements per page and updating the offset whenever a different page is opened.

    The SliceListModelRef type acts as a lightweight Swift reference to an underlying GtkSliceListModel instance. It exposes methods that can operate on this data type through SliceListModelProtocol conformance. Use SliceListModelRef only as an unowned reference to an existing GtkSliceListModel instance.

    See more

    Declaration

    Swift

    public struct SliceListModelRef : SliceListModelProtocol, GWeakCapturing

Snapshot Class

  • GtkSnapshot assists in creating GskRenderNodes for widgets.

    It functions in a similar way to a cairo context, and maintains a stack of render nodes and their associated transformations.

    The node at the top of the stack is the the one that gtk_snapshot_append_… functions operate on. Use the gtk_snapshot_push_… functions and gtk_snapshot_pop() to change the current node.

    The typical way to obtain a GtkSnapshot object is as an argument to the [vfuncGtk.Widget.snapshot] vfunc. If you need to create your own GtkSnapshot, use [ctorGtk.Snapshot.new].

    The SnapshotRef type acts as a lightweight Swift reference to an underlying GtkSnapshot instance. It exposes methods that can operate on this data type through SnapshotProtocol conformance. Use SnapshotRef only as an unowned reference to an existing GtkSnapshot instance.

    See more

    Declaration

    Swift

    public struct SnapshotRef : SnapshotProtocol, GWeakCapturing

SortListModel Class

  • A GListModel that sorts the elements of an underlying model according to a GtkSorter.

    The model can be set up to do incremental sorting, so that sorting long lists doesn’t block the UI. See [methodGtk.SortListModel.set_incremental] for details.

    GtkSortListModel is a generic model and because of that it cannot take advantage of any external knowledge when sorting. If you run into performance issues with GtkSortListModel, it is strongly recommended that you write your own sorting list model.

    The SortListModelRef type acts as a lightweight Swift reference to an underlying GtkSortListModel instance. It exposes methods that can operate on this data type through SortListModelProtocol conformance. Use SortListModelRef only as an unowned reference to an existing GtkSortListModel instance.

    See more

    Declaration

    Swift

    public struct SortListModelRef : SortListModelProtocol, GWeakCapturing

Sorter Class

  • GtkSorter is an object to describe sorting criteria.

    Its primary user is [classGtk.SortListModel]

    The model will use a sorter to determine the order in which its items should appear by calling [methodGtk.Sorter.compare] for pairs of items.

    Sorters may change their sorting behavior through their lifetime. In that case, they will emit the [signalGtk.Sorter::changed] signal to notify that the sort order is no longer valid and should be updated by calling gtk_sorter_compare() again.

    GTK provides various pre-made sorter implementations for common sorting operations. [classGtk.ColumnView] has built-in support for sorting lists via the [propertyGtk.ColumnViewColumn:sorter] property, where the user can change the sorting by clicking on list headers.

    Of course, in particular for large lists, it is also possible to subclass GtkSorter and provide one’s own sorter.

    The SorterRef type acts as a lightweight Swift reference to an underlying GtkSorter instance. It exposes methods that can operate on this data type through SorterProtocol conformance. Use SorterRef only as an unowned reference to an existing GtkSorter instance.

    See more

    Declaration

    Swift

    public struct SorterRef : SorterProtocol, GWeakCapturing

SpinButton Class

  • A GtkSpinButton is an ideal way to allow the user to set the value of some attribute.

    An example GtkSpinButton

    Rather than having to directly type a number into a GtkEntry, GtkSpinButton allows the user to click on one of two arrows to increment or decrement the displayed value. A value can still be typed in, with the bonus that it can be checked to ensure it is in a given range.

    The main properties of a GtkSpinButton are through an adjustment. See the [classGtk.Adjustment] documentation for more details about an adjustment’s properties.

    Note that GtkSpinButton will by default make its entry large enough to accommodate the lower and upper bounds of the adjustment. If this is not desired, the automatic sizing can be turned off by explicitly setting [propertyGtk.Editable:width-chars] to a value != -1.

    Using a GtkSpinButton to get an integer

    // Provides a function to retrieve an integer value from a GtkSpinButton
    // and creates a spin button to model percentage values.
    
    int
    grab_int_value (GtkSpinButton *button,
                    gpointer       user_data)
    {
      return gtk_spin_button_get_value_as_int (button);
    }
    
    void
    create_integer_spin_button (void)
    {
    
      GtkWidget *window, *button;
      GtkAdjustment *adjustment;
    
      adjustment = gtk_adjustment_new (50.0, 0.0, 100.0, 1.0, 5.0, 0.0);
    
      window = gtk_window_new ();
    
      // creates the spinbutton, with no decimal places
      button = gtk_spin_button_new (adjustment, 1.0, 0);
      gtk_window_set_child (GTK_WINDOW (window), button);
    
      gtk_widget_show (window);
    }
    

    Using a GtkSpinButton to get a floating point value

    // Provides a function to retrieve a floating point value from a
    // GtkSpinButton, and creates a high precision spin button.
    
    float
    grab_float_value (GtkSpinButton *button,
                      gpointer       user_data)
    {
      return gtk_spin_button_get_value (button);
    }
    
    void
    create_floating_spin_button (void)
    {
      GtkWidget *window, *button;
      GtkAdjustment *adjustment;
    
      adjustment = gtk_adjustment_new (2.500, 0.0, 5.0, 0.001, 0.1, 0.0);
    
      window = gtk_window_new ();
    
      // creates the spinbutton, with three decimal places
      button = gtk_spin_button_new (adjustment, 0.001, 3);
      gtk_window_set_child (GTK_WINDOW (window), button);
    
      gtk_widget_show (window);
    }
    

    CSS nodes

    spinbutton.horizontal
    ├── text
        ├── undershoot.left
        ╰── undershoot.right
    ├── button.down
    ╰── button.up
    
    spinbutton.vertical
    ├── button.up
    ├── text
        ├── undershoot.left
        ╰── undershoot.right
    ╰── button.down
    

    GtkSpinButtons main CSS node has the name spinbutton. It creates subnodes for the entry and the two buttons, with these names. The button nodes have the style classes .up and .down. The GtkText subnodes (if present) are put below the text node. The orientation of the spin button is reflected in the .vertical or .horizontal style class on the main node.

    Accessiblity

    GtkSpinButton uses the GTK_ACCESSIBLE_ROLE_SPIN_BUTTON role.

    The SpinButtonRef type acts as a lightweight Swift reference to an underlying GtkSpinButton instance. It exposes methods that can operate on this data type through SpinButtonProtocol conformance. Use SpinButtonRef only as an unowned reference to an existing GtkSpinButton instance.

    See more

    Declaration

    Swift

    public struct SpinButtonRef : SpinButtonProtocol, GWeakCapturing

Spinner Class

  • A GtkSpinner widget displays an icon-size spinning animation.

    It is often used as an alternative to a [classGtk.ProgressBar] for displaying indefinite activity, instead of actual progress.

    An example GtkSpinner

    To start the animation, use [methodGtk.Spinner.start], to stop it use [methodGtk.Spinner.stop].

    CSS nodes

    GtkSpinner has a single CSS node with the name spinner. When the animation is active, the :checked pseudoclass is added to this node.

    The SpinnerRef type acts as a lightweight Swift reference to an underlying GtkSpinner instance. It exposes methods that can operate on this data type through SpinnerProtocol conformance. Use SpinnerRef only as an unowned reference to an existing GtkSpinner instance.

    See more

    Declaration

    Swift

    public struct SpinnerRef : SpinnerProtocol, GWeakCapturing

Stack Class

  • GtkStack is a container which only shows one of its children at a time.

    In contrast to GtkNotebook, GtkStack does not provide a means for users to change the visible child. Instead, a separate widget such as [classGtk.StackSwitcher] or [classGtk.StackSidebar] can be used with GtkStack to provide this functionality.

    Transitions between pages can be animated as slides or fades. This can be controlled with [methodGtk.Stack.set_transition_type]. These animations respect the [propertyGtk.Settings:gtk-enable-animations] setting.

    GtkStack maintains a [classGtk.StackPage] object for each added child, which holds additional per-child properties. You obtain the GtkStackPage for a child with [methodGtk.Stack.get_page] and you can obtain a GtkSelectionModel containing all the pages with [methodGtk.Stack.get_pages].

    GtkStack as GtkBuildable

    To set child-specific properties in a .ui file, create GtkStackPage objects explicitly, and set the child widget as a property on it:

      &lt;object class="GtkStack" id="stack"&gt;
        &lt;child&gt;
          &lt;object class="GtkStackPage"&gt;
            &lt;property name="name"&gt;page1&lt;/property&gt;
            &lt;property name="title"&gt;In the beginning…&lt;/property&gt;
            &lt;property name="child"&gt;
              &lt;object class="GtkLabel"&gt;
                &lt;property name="label"&gt;It was dark&lt;/property&gt;
              &lt;/object&gt;
            &lt;/property&gt;
          &lt;/object&gt;
        &lt;/child&gt;
    

    CSS nodes

    GtkStack has a single CSS node named stack.

    Accessibility

    GtkStack uses the GTK_ACCESSIBLE_ROLE_TAB_PANEL for the stack pages, which are the accessible parent objects of the child widgets.

    The StackRef type acts as a lightweight Swift reference to an underlying GtkStack instance. It exposes methods that can operate on this data type through StackProtocol conformance. Use StackRef only as an unowned reference to an existing GtkStack instance.

    See more

    Declaration

    Swift

    public struct StackRef : StackProtocol, GWeakCapturing

StackPage Class

  • GtkStackPage is an auxiliary class used by GtkStack.

    The StackPageRef type acts as a lightweight Swift reference to an underlying GtkStackPage instance. It exposes methods that can operate on this data type through StackPageProtocol conformance. Use StackPageRef only as an unowned reference to an existing GtkStackPage instance.

    See more

    Declaration

    Swift

    public struct StackPageRef : StackPageProtocol, GWeakCapturing

StackSidebar Class

  • A GtkStackSidebar uses a sidebar to switch between GtkStack pages.

    In order to use a GtkStackSidebar, you simply use a GtkStack to organize your UI flow, and add the sidebar to your sidebar area. You can use [methodGtk.StackSidebar.set_stack] to connect the GtkStackSidebar to the GtkStack.

    CSS nodes

    GtkStackSidebar has a single CSS node with name stacksidebar and style class .sidebar.

    When circumstances require it, GtkStackSidebar adds the .needs-attention style class to the widgets representing the stack pages.

    The StackSidebarRef type acts as a lightweight Swift reference to an underlying GtkStackSidebar instance. It exposes methods that can operate on this data type through StackSidebarProtocol conformance. Use StackSidebarRef only as an unowned reference to an existing GtkStackSidebar instance.

    See more

    Declaration

    Swift

    public struct StackSidebarRef : StackSidebarProtocol, GWeakCapturing

StackSwitcher Class

  • The GtkStackSwitcher shows a row of buttons to switch between GtkStack pages.

    An example GtkStackSwitcher

    It acts as a controller for the associated GtkStack.

    All the content for the buttons comes from the properties of the stacks [classGtk.StackPage] objects; the button visibility in a GtkStackSwitcher widget is controlled by the visibility of the child in the GtkStack.

    It is possible to associate multiple GtkStackSwitcher widgets with the same GtkStack widget.

    CSS nodes

    GtkStackSwitcher has a single CSS node named stackswitcher and style class .stack-switcher.

    When circumstances require it, GtkStackSwitcher adds the .needs-attention style class to the widgets representing the stack pages.

    Accessibility

    GtkStackSwitcher uses the GTK_ACCESSIBLE_ROLE_TAB_LIST role and uses the GTK_ACCESSIBLE_ROLE_TAB for its buttons.

    Orientable

    Since GTK 4.4, GtkStackSwitcher implements GtkOrientable allowing the stack switcher to be made vertical with gtk_orientable_set_orientation().

    The StackSwitcherRef type acts as a lightweight Swift reference to an underlying GtkStackSwitcher instance. It exposes methods that can operate on this data type through StackSwitcherProtocol conformance. Use StackSwitcherRef only as an unowned reference to an existing GtkStackSwitcher instance.

    See more

    Declaration

    Swift

    public struct StackSwitcherRef : StackSwitcherProtocol, GWeakCapturing

Statusbar Class

  • A GtkStatusbar widget is usually placed along the bottom of an application’s main [classGtk.Window].

    An example GtkStatusbar

    A GtkStatusBar may provide a regular commentary of the application’s status (as is usually the case in a web browser, for example), or may be used to simply output a message when the status changes, (when an upload is complete in an FTP client, for example).

    Status bars in GTK maintain a stack of messages. The message at the top of the each bar’s stack is the one that will currently be displayed.

    Any messages added to a statusbar’s stack must specify a context id that is used to uniquely identify the source of a message. This context id can be generated by [methodGtk.Statusbar.get_context_id], given a message and the statusbar that it will be added to. Note that messages are stored in a stack, and when choosing which message to display, the stack structure is adhered to, regardless of the context identifier of a message.

    One could say that a statusbar maintains one stack of messages for display purposes, but allows multiple message producers to maintain sub-stacks of the messages they produced (via context ids).

    Status bars are created using [ctorGtk.Statusbar.new].

    Messages are added to the bar’s stack with [methodGtk.Statusbar.push].

    The message at the top of the stack can be removed using [methodGtk.Statusbar.pop]. A message can be removed from anywhere in the stack if its message id was recorded at the time it was added. This is done using [methodGtk.Statusbar.remove].

    CSS node

    GtkStatusbar has a single CSS node with name statusbar.

    The StatusbarRef type acts as a lightweight Swift reference to an underlying GtkStatusbar instance. It exposes methods that can operate on this data type through StatusbarProtocol conformance. Use StatusbarRef only as an unowned reference to an existing GtkStatusbar instance.

    See more

    Declaration

    Swift

    public struct StatusbarRef : StatusbarProtocol, GWeakCapturing

StringFilter Class

  • GtkStringFilter determines whether to include items by comparing strings to a fixed search term.

    The strings are obtained from the items by evaluating a GtkExpression set with [methodGtk.StringFilter.set_expression], and they are compared against a search term set with [methodGtk.StringFilter.set_search].

    GtkStringFilter has several different modes of comparison - it can match the whole string, just a prefix, or any substring. Use [methodGtk.StringFilter.set_match_mode] choose a mode.

    It is also possible to make case-insensitive comparisons, with [methodGtk.StringFilter.set_ignore_case].

    The StringFilterRef type acts as a lightweight Swift reference to an underlying GtkStringFilter instance. It exposes methods that can operate on this data type through StringFilterProtocol conformance. Use StringFilterRef only as an unowned reference to an existing GtkStringFilter instance.

    See more

    Declaration

    Swift

    public struct StringFilterRef : StringFilterProtocol, GWeakCapturing

StringList Class

  • GtkStringList is a list model that wraps an array of strings.

    The objects in the model have a “string” property.

    GtkStringList is well-suited for any place where you would typically use a char*[], but need a list model.

    GtkStringList as GtkBuildable

    The GtkStringList implementation of the GtkBuildable interface supports adding items directly using the <items> element and specifying <item> elements for each item. Each <item> element supports the regular translation attributes “translatable”, “context” and “comments”.

    Here is a UI definition fragment specifying a GtkStringList

    &lt;object class="GtkStringList"&gt;
      &lt;items&gt;
        &lt;item translatable="yes"&gt;Factory&lt;/item&gt;
        &lt;item translatable="yes"&gt;Home&lt;/item&gt;
        &lt;item translatable="yes"&gt;Subway&lt;/item&gt;
      &lt;/items&gt;
    &lt;/object&gt;
    

    The StringListRef type acts as a lightweight Swift reference to an underlying GtkStringList instance. It exposes methods that can operate on this data type through StringListProtocol conformance. Use StringListRef only as an unowned reference to an existing GtkStringList instance.

    See more

    Declaration

    Swift

    public struct StringListRef : StringListProtocol, GWeakCapturing

StringObject Class

  • GtkStringObject is the type of items in a GtkStringList.

    A GtkStringObject is a wrapper around a const char*; it has a [propertyGtk.StringObject:string] property.

    The StringObjectRef type acts as a lightweight Swift reference to an underlying GtkStringObject instance. It exposes methods that can operate on this data type through StringObjectProtocol conformance. Use StringObjectRef only as an unowned reference to an existing GtkStringObject instance.

    See more

    Declaration

    Swift

    public struct StringObjectRef : StringObjectProtocol, GWeakCapturing

StringSorter Class

  • GtkStringSorter is a GtkSorter that compares strings.

    It does the comparison in a linguistically correct way using the current locale by normalizing Unicode strings and possibly case-folding them before performing the comparison.

    To obtain the strings to compare, this sorter evaluates a [classGtk.Expression].

    The StringSorterRef type acts as a lightweight Swift reference to an underlying GtkStringSorter instance. It exposes methods that can operate on this data type through StringSorterProtocol conformance. Use StringSorterRef only as an unowned reference to an existing GtkStringSorter instance.

    See more

    Declaration

    Swift

    public struct StringSorterRef : StringSorterProtocol, GWeakCapturing

StyleContext Class

  • GtkStyleContext stores styling information affecting a widget.

    In order to construct the final style information, GtkStyleContext queries information from all attached GtkStyleProviders. Style providers can be either attached explicitly to the context through [methodGtk.StyleContext.add_provider], or to the display through [funcGtk.StyleContext.add_provider_for_display]. The resulting style is a combination of all providers’ information in priority order.

    For GTK widgets, any GtkStyleContext returned by [methodGtk.Widget.get_style_context] will already have a GdkDisplay and RTL/LTR information set. The style context will also be updated automatically if any of these settings change on the widget.

    Style Classes

    Widgets can add style classes to their context, which can be used to associate different styles by class. The documentation for individual widgets lists which style classes it uses itself, and which style classes may be added by applications to affect their appearance.

    Custom styling in UI libraries and applications

    If you are developing a library with custom widgets that render differently than standard components, you may need to add a GtkStyleProvider yourself with the GTK_STYLE_PROVIDER_PRIORITY_FALLBACK priority, either a GtkCssProvider or a custom object implementing the GtkStyleProvider interface. This way themes may still attempt to style your UI elements in a different way if needed so.

    If you are using custom styling on an applications, you probably want then to make your style information prevail to the theme’s, so you must use a GtkStyleProvider with the GTK_STYLE_PROVIDER_PRIORITY_APPLICATION priority, keep in mind that the user settings in XDG_CONFIG_HOME/gtk-4.0/gtk.css will still take precedence over your changes, as it uses the GTK_STYLE_PROVIDER_PRIORITY_USER priority.

    The StyleContextRef type acts as a lightweight Swift reference to an underlying GtkStyleContext instance. It exposes methods that can operate on this data type through StyleContextProtocol conformance. Use StyleContextRef only as an unowned reference to an existing GtkStyleContext instance.

    See more

    Declaration

    Swift

    public struct StyleContextRef : StyleContextProtocol, GWeakCapturing

Switch Class

  • GtkSwitch is a “light switch” that has two states: on or off.

    An example GtkSwitch

    The user can control which state should be active by clicking the empty area, or by dragging the handle.

    GtkSwitch can also handle situations where the underlying state changes with a delay. See [signalGtkSwitch::state-set] for details.

    CSS nodes

    switch
    ├── label
    ├── label
    ╰── slider
    

    GtkSwitch has four css nodes, the main node with the name switch and subnodes for the slider and the on and off labels. Neither of them is using any style classes.

    Accessibility

    GtkSwitch uses the GTK_ACCESSIBLE_ROLE_SWITCH role.

    The SwitchRef type acts as a lightweight Swift reference to an underlying GtkSwitch instance. It exposes methods that can operate on this data type through SwitchProtocol conformance. Use SwitchRef only as an unowned reference to an existing GtkSwitch instance.

    See more

    Declaration

    Swift

    public struct SwitchRef : SwitchProtocol, GWeakCapturing

Text Class

  • The GtkText widget is a single-line text entry widget.

    GtkText is the common implementation of single-line text editing that is shared between GtkEntry, GtkPasswordEntry, GtkSpinButton and other widgets. In all of these, GtkText is used as the delegate for the [ifaceGtk.Editable] implementation.

    A fairly large set of key bindings are supported by default. If the entered text is longer than the allocation of the widget, the widget will scroll so that the cursor position is visible.

    When using an entry for passwords and other sensitive information, it can be put into “password mode” using [methodGtk.Text.set_visibility]. In this mode, entered text is displayed using a “invisible” character. By default, GTK picks the best invisible character that is available in the current font, but it can be changed with [methodGtk.Text.set_invisible_char].

    If you are looking to add icons or progress display in an entry, look at GtkEntry. There other alternatives for more specialized use cases, such as GtkSearchEntry.

    If you need multi-line editable text, look at GtkTextView.

    CSS nodes

    text[.read-only]
    ├── placeholder
    ├── undershoot.left
    ├── undershoot.right
    ├── [selection]
    ├── [block-cursor]
    ╰── [window.popup]
    

    GtkText has a main node with the name text. Depending on the properties of the widget, the .read-only style class may appear.

    When the entry has a selection, it adds a subnode with the name selection.

    When the entry is in overwrite mode, it adds a subnode with the name block-cursor that determines how the block cursor is drawn.

    The CSS node for a context menu is added as a subnode below text as well.

    The undershoot nodes are used to draw the underflow indication when content is scrolled out of view. These nodes get the .left and .right style classes added depending on where the indication is drawn.

    When touch is used and touch selection handles are shown, they are using CSS nodes with name cursor-handle. They get the .top or .bottom style class depending on where they are shown in relation to the selection. If there is just a single handle for the text cursor, it gets the style class .insertion-cursor.

    Accessibility

    GtkText uses the GTK_ACCESSIBLE_ROLE_NONE role, which causes it to be skipped for accessibility. This is because GtkText is expected to be used as a delegate for a GtkEditable implementation that will be represented to accessibility.

    The TextRef type acts as a lightweight Swift reference to an underlying GtkText instance. It exposes methods that can operate on this data type through TextProtocol conformance. Use TextRef only as an unowned reference to an existing GtkText instance.

    See more

    Declaration

    Swift

    public struct TextRef : TextProtocol, GWeakCapturing

ScaleClass Record

  • The ScaleClassRef type acts as a lightweight Swift reference to an underlying GtkScaleClass instance. It exposes methods that can operate on this data type through ScaleClassProtocol conformance. Use ScaleClassRef only as an unowned reference to an existing GtkScaleClass instance.

    See more

    Declaration

    Swift

    public struct ScaleClassRef : ScaleClassProtocol

ScrollableInterface Record

SelectionFilterModelClass Record

SelectionModelInterface Record

  • The list of virtual functions for the GtkSelectionModel interface. No function must be implemented, but unless GtkSelectionModelis_selected() is implemented, it will not be possible to select items in the set.

    The model does not need to implement any functions to support either selecting or unselecting items. Of course, if the model does not do that, it means that users cannot select or unselect items in a list widget using the model.

    All selection functions fall back to GtkSelectionModelset_selection() so it is sufficient to implement just that function for full selection support.

    The SelectionModelInterfaceRef type acts as a lightweight Swift reference to an underlying GtkSelectionModelInterface instance. It exposes methods that can operate on this data type through SelectionModelInterfaceProtocol conformance. Use SelectionModelInterfaceRef only as an unowned reference to an existing GtkSelectionModelInterface instance.

    See more

    Declaration

    Swift

    public struct SelectionModelInterfaceRef : SelectionModelInterfaceProtocol

ShortcutActionClass Record

ShortcutClass Record

  • The ShortcutClassRef type acts as a lightweight Swift reference to an underlying GtkShortcutClass instance. It exposes methods that can operate on this data type through ShortcutClassProtocol conformance. Use ShortcutClassRef only as an unowned reference to an existing GtkShortcutClass instance.

    See more

    Declaration

    Swift

    public struct ShortcutClassRef : ShortcutClassProtocol

ShortcutControllerClass Record

ShortcutLabelClass Record

ShortcutManagerInterface Record

  • 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.

    The ShortcutManagerInterfaceRef type acts as a lightweight Swift reference to an underlying GtkShortcutManagerInterface instance. It exposes methods that can operate on this data type through ShortcutManagerInterfaceProtocol conformance. Use ShortcutManagerInterfaceRef only as an unowned reference to an existing GtkShortcutManagerInterface instance.

    See more

    Declaration

    Swift

    public struct ShortcutManagerInterfaceRef : ShortcutManagerInterfaceProtocol

ShortcutTriggerClass Record

ShortcutsGroupClass Record

ShortcutsSectionClass Record

ShortcutsShortcutClass Record

SignalActionClass Record

SignalListItemFactoryClass Record

SingleSelectionClass Record

SliceListModelClass Record

SnapshotClass Record

  • The SnapshotClassRef type acts as a lightweight Swift reference to an underlying GtkSnapshotClass instance. It exposes methods that can operate on this data type through SnapshotClassProtocol conformance. Use SnapshotClassRef only as an unowned reference to an existing GtkSnapshotClass instance.

    See more

    Declaration

    Swift

    public struct SnapshotClassRef : SnapshotClassProtocol

SortListModelClass Record

SorterClass Record

  • The virtual table for GtkSorter.

    The SorterClassRef type acts as a lightweight Swift reference to an underlying GtkSorterClass instance. It exposes methods that can operate on this data type through SorterClassProtocol conformance. Use SorterClassRef only as an unowned reference to an existing GtkSorterClass instance.

    See more

    Declaration

    Swift

    public struct SorterClassRef : SorterClassProtocol

StringFilterClass Record

StringListClass Record

StringObjectClass Record

StringSorterClass Record

StyleContextClass Record

TextBufferClass Record

  • The class structure for GtkTextBuffer.

    The TextBufferClassRef type acts as a lightweight Swift reference to an underlying GtkTextBufferClass instance. It exposes methods that can operate on this data type through TextBufferClassProtocol conformance. Use TextBufferClassRef only as an unowned reference to an existing GtkTextBufferClass instance.

    See more

    Declaration

    Swift

    public struct TextBufferClassRef : TextBufferClassProtocol

SelectionModel Interface

  • GtkSelectionModel is an interface that add support for selection to list models.

    This support is then used by widgets using list models to add the ability to select and unselect various items.

    GTK provides default implementations of the most common selection modes such as [classGtk.SingleSelection], so you will only need to implement this interface if you want detailed control about how selections should be handled.

    A GtkSelectionModel supports a single boolean per item indicating if an item is selected or not. This can be queried via [methodGtk.SelectionModel.is_selected]. When the selected state of one or more items changes, the model will emit the [signalGtk.SelectionModel::selection-changed] signal by calling the [methodGtk.SelectionModel.selection_changed] function. The positions given in that signal may have their selection state changed, though that is not a requirement. If new items added to the model via the items-changed signal are selected or not is up to the implementation.

    Note that items added via items-changed may already be selected and no [Gtk.SelectionModelselection-changed] will be emitted for them. So to track which items are selected, it is necessary to listen to both signals.

    Additionally, the interface can expose functionality to select and unselect items. If these functions are implemented, GTK’s list widgets will allow users to select and unselect items. However, GtkSelectionModels are free to only implement them partially or not at all. In that case the widgets will not support the unimplemented operations.

    When selecting or unselecting is supported by a model, the return values of the selection functions do not indicate if selection or unselection happened. They are only meant to indicate complete failure, like when this mode of selecting is not supported by the model.

    Selections may happen asynchronously, so the only reliable way to find out when an item was selected is to listen to the signals that indicate selection.

    The SelectionModelRef type acts as a lightweight Swift reference to an underlying GtkSelectionModel instance. It exposes methods that can operate on this data type through SelectionModelProtocol conformance. Use SelectionModelRef only as an unowned reference to an existing GtkSelectionModel instance.

    See more

    Declaration

    Swift

    public struct SelectionModelRef : SelectionModelProtocol

ShortcutManager Interface

  • The GtkShortcutManager interface is used to implement shortcut scopes.

    This is important for [ifaceGtk.Native] widgets that have their own surface, since the event controllers that are used to implement managed and global scopes are limited to the same native.

    Examples for widgets implementing GtkShortcutManager are [classGtk.Window] and [classGtk.Popover].

    Every widget that implements GtkShortcutManager will be used as a GTK_SHORTCUT_SCOPE_MANAGED.

    The ShortcutManagerRef type acts as a lightweight Swift reference to an underlying GtkShortcutManager instance. It exposes methods that can operate on this data type through ShortcutManagerProtocol conformance. Use ShortcutManagerRef only as an unowned reference to an existing GtkShortcutManager instance.

    See more

    Declaration

    Swift

    public struct ShortcutManagerRef : ShortcutManagerProtocol

StyleProvider Interface

  • GtkStyleProvider is an interface for style information used by GtkStyleContext.

    See [methodGtk.StyleContext.add_provider] and [funcGtk.StyleContext.add_provider_for_display] for adding GtkStyleProviders.

    GTK uses the GtkStyleProvider implementation for CSS in [ifaceGtk.CssProvider].

    The StyleProviderRef type acts as a lightweight Swift reference to an underlying GtkStyleProvider instance. It exposes methods that can operate on this data type through StyleProviderProtocol conformance. Use StyleProviderRef only as an unowned reference to an existing GtkStyleProvider instance.

    See more

    Declaration

    Swift

    public struct StyleProviderRef : StyleProviderProtocol

TreeDragDest Interface

  • Interface for Drag-and-Drop destinations in GtkTreeView.

    The TreeDragDestRef type acts as a lightweight Swift reference to an underlying GtkTreeDragDest instance. It exposes methods that can operate on this data type through TreeDragDestProtocol conformance. Use TreeDragDestRef only as an unowned reference to an existing GtkTreeDragDest instance.

    See more

    Declaration

    Swift

    public struct TreeDragDestRef : TreeDragDestProtocol

TextBuffer Class

  • Stores text and attributes for display in a GtkTextView.

    You may wish to begin by reading the text widget conceptual overview, which gives an overview of all the objects and data types related to the text widget and how they work together.

    GtkTextBuffer can support undoing changes to the buffer content, see [methodGtk.TextBuffer.set_enable_undo].

    The TextBufferRef type acts as a lightweight Swift reference to an underlying GtkTextBuffer instance. It exposes methods that can operate on this data type through TextBufferProtocol conformance. Use TextBufferRef only as an unowned reference to an existing GtkTextBuffer instance.

    See more

    Declaration

    Swift

    public struct TextBufferRef : TextBufferProtocol, GWeakCapturing

TextChildAnchor Class

  • A GtkTextChildAnchor is a spot in a GtkTextBuffer where child widgets can be “anchored”.

    The anchor can have multiple widgets anchored, to allow for multiple views.

    The TextChildAnchorRef type acts as a lightweight Swift reference to an underlying GtkTextChildAnchor instance. It exposes methods that can operate on this data type through TextChildAnchorProtocol conformance. Use TextChildAnchorRef only as an unowned reference to an existing GtkTextChildAnchor instance.

    See more

    Declaration

    Swift

    public struct TextChildAnchorRef : TextChildAnchorProtocol, GWeakCapturing

TextMark Class

  • A GtkTextMark is a position in a GtkTextbuffer that is preserved across modifications.

    You may wish to begin by reading the text widget conceptual overview, which gives an overview of all the objects and data types related to the text widget and how they work together.

    A GtkTextMark is like a bookmark in a text buffer; it preserves a position in the text. You can convert the mark to an iterator using [methodGtk.TextBuffer.get_iter_at_mark]. Unlike iterators, marks remain valid across buffer mutations, because their behavior is defined when text is inserted or deleted. When text containing a mark is deleted, the mark remains in the position originally occupied by the deleted text. When text is inserted at a mark, a mark with “left gravity” will be moved to the beginning of the newly-inserted text, and a mark with “right gravity” will be moved to the end.

    Note that “left” and “right” here refer to logical direction (left is the toward the start of the buffer); in some languages such as Hebrew the logically-leftmost text is not actually on the left when displayed.

    Marks are reference counted, but the reference count only controls the validity of the memory; marks can be deleted from the buffer at any time with [methodGtk.TextBuffer.delete_mark]. Once deleted from the buffer, a mark is essentially useless.

    Marks optionally have names; these can be convenient to avoid passing the GtkTextMark object around.

    Marks are typically created using the [methodGtk.TextBuffer.create_mark] function.

    The TextMarkRef type acts as a lightweight Swift reference to an underlying GtkTextMark instance. It exposes methods that can operate on this data type through TextMarkProtocol conformance. Use TextMarkRef only as an unowned reference to an existing GtkTextMark instance.

    See more

    Declaration

    Swift

    public struct TextMarkRef : TextMarkProtocol, GWeakCapturing

TextTag Class

  • A tag that can be applied to text contained in a GtkTextBuffer.

    You may wish to begin by reading the text widget conceptual overview, which gives an overview of all the objects and data types related to the text widget and how they work together.

    Tags should be in the [classGtk.TextTagTable] for a given GtkTextBuffer before using them with that buffer.

    [methodGtk.TextBuffer.create_tag] is the best way to create tags. See “gtk4-demo” for numerous examples.

    For each property of GtkTextTag, there is a “set” property, e.g. “font-set” corresponds to “font”. These “set” properties reflect whether a property has been set or not.

    They are maintained by GTK and you should not set them independently.

    The TextTagRef type acts as a lightweight Swift reference to an underlying GtkTextTag instance. It exposes methods that can operate on this data type through TextTagProtocol conformance. Use TextTagRef only as an unowned reference to an existing GtkTextTag instance.

    See more

    Declaration

    Swift

    public struct TextTagRef : TextTagProtocol, GWeakCapturing

TextTagTable Class

  • The collection of tags in a GtkTextBuffer

    You may wish to begin by reading the text widget conceptual overview, which gives an overview of all the objects and data types related to the text widget and how they work together.

    GtkTextTagTables as GtkBuildable

    The GtkTextTagTable implementation of the GtkBuildable interface supports adding tags by specifying “tag” as the “type” attribute of a <child> element.

    An example of a UI definition fragment specifying tags:

    &lt;object class="GtkTextTagTable"&gt;
     &lt;child type="tag"&gt;
       &lt;object class="GtkTextTag"/&gt;
     &lt;/child&gt;
    &lt;/object&gt;
    

    The TextTagTableRef type acts as a lightweight Swift reference to an underlying GtkTextTagTable instance. It exposes methods that can operate on this data type through TextTagTableProtocol conformance. Use TextTagTableRef only as an unowned reference to an existing GtkTextTagTable instance.

    See more

    Declaration

    Swift

    public struct TextTagTableRef : TextTagTableProtocol, GWeakCapturing

TextView Class

  • A widget that displays the contents of a [classGtk.TextBuffer].

    An example GtkTextview

    You may wish to begin by reading the conceptual overview, which gives an overview of all the objects and data types related to the text widget and how they work together.

    CSS nodes

    textview.view
    ├── border.top
    ├── border.left
    ├── text
       ╰── [selection]
    ├── border.right
    ├── border.bottom
    ╰── [window.popup]
    

    GtkTextView has a main css node with name textview and style class .view, and subnodes for each of the border windows, and the main text area, with names border and text, respectively. The border nodes each get one of the style classes .left, .right, .top or .bottom.

    A node representing the selection will appear below the text node.

    If a context menu is opened, the window node will appear as a subnode of the main node.

    Accessibility

    GtkTextView uses the GTK_ACCESSIBLE_ROLE_TEXT_BOX role.

    The TextViewRef type acts as a lightweight Swift reference to an underlying GtkTextView instance. It exposes methods that can operate on this data type through TextViewProtocol conformance. Use TextViewRef only as an unowned reference to an existing GtkTextView instance.

    See more

    Declaration

    Swift

    public struct TextViewRef : TextViewProtocol, GWeakCapturing

ToggleButton Class

  • A GtkToggleButton is a button which remains “pressed-in” when clicked.

    Clicking again will cause the toggle button to return to its normal state.

    A toggle button is created by calling either [ctorGtk.ToggleButton.new] or [ctorGtk.ToggleButton.new_with_label]. If using the former, it is advisable to pack a widget, (such as a GtkLabel and/or a GtkImage), into the toggle button’s container. (See [classGtk.Button] for more information).

    The state of a GtkToggleButton can be set specifically using [methodGtk.ToggleButton.set_active], and retrieved using [methodGtk.ToggleButton.get_active].

    To simply switch the state of a toggle button, use [methodGtk.ToggleButton.toggled].

    Grouping

    Toggle buttons can be grouped together, to form mutually exclusive groups - only one of the buttons can be toggled at a time, and toggling another one will switch the currently toggled one off.

    To add a GtkToggleButton to a group, use [methodGtk.ToggleButton.set_group].

    CSS nodes

    GtkToggleButton has a single CSS node with name button. To differentiate it from a plain GtkButton, it gets the .toggle style class.

    Creating two GtkToggleButton widgets.

    static void output_state (GtkToggleButton *source, gpointer user_data)
    {
      printf ("Active: `d`\n", gtk_toggle_button_get_active (source));
    }
    
    void make_toggles (void)
    {
      GtkWidget *window, *toggle1, *toggle2;
      GtkWidget *box;
      const char *text;
    
      window = gtk_window_new ();
      box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
    
      text = "Hi, I’m a toggle button.";
      toggle1 = gtk_toggle_button_new_with_label (text);
    
      g_signal_connect (toggle1, "toggled",
                        G_CALLBACK (output_state),
                        NULL);
      gtk_box_append (GTK_BOX (box), toggle1);
    
      text = "Hi, I’m a toggle button.";
      toggle2 = gtk_toggle_button_new_with_label (text);
      g_signal_connect (toggle2, "toggled",
                        G_CALLBACK (output_state),
                        NULL);
      gtk_box_append (GTK_BOX (box), toggle2);
    
      gtk_window_set_child (GTK_WINDOW (window), box);
      gtk_widget_show (window);
    }
    

    The ToggleButtonRef type acts as a lightweight Swift reference to an underlying GtkToggleButton instance. It exposes methods that can operate on this data type through ToggleButtonProtocol conformance. Use ToggleButtonRef only as an unowned reference to an existing GtkToggleButton instance.

    See more

    Declaration

    Swift

    public struct ToggleButtonRef : ToggleButtonProtocol, GWeakCapturing

Tooltip Class

  • GtkTooltip is an object representing a widget tooltip.

    Basic tooltips can be realized simply by using [methodGtk.Widget.set_tooltip_text] or [methodGtk.Widget.set_tooltip_markup] without any explicit tooltip object.

    When you need a tooltip with a little more fancy contents, like adding an image, or you want the tooltip to have different contents per GtkTreeView row or cell, you will have to do a little more work:

    • Set the [propertyGtk.Widget:has-tooltip] property to true. This will make GTK monitor the widget for motion and related events which are needed to determine when and where to show a tooltip.

    • Connect to the [signalGtk.Widget::query-tooltip] signal. This signal will be emitted when a tooltip is supposed to be shown. One of the arguments passed to the signal handler is a GtkTooltip object. This is the object that we are about to display as a tooltip, and can be manipulated in your callback using functions like [methodGtk.Tooltip.set_icon]. There are functions for setting the tooltip’s markup, setting an image from a named icon, or even putting in a custom widget.

    • Return true from your query-tooltip handler. This causes the tooltip to be show. If you return false, it will not be shown.

    The TooltipRef type acts as a lightweight Swift reference to an underlying GtkTooltip instance. It exposes methods that can operate on this data type through TooltipProtocol conformance. Use TooltipRef only as an unowned reference to an existing GtkTooltip instance.

    See more

    Declaration

    Swift

    public struct TooltipRef : TooltipProtocol, GWeakCapturing

TreeExpander Class

  • GtkTreeExpander is a widget that provides an expander for a list.

    It is typically placed as a bottommost child into a GtkListView to allow users to expand and collapse children in a list with a [classGtk.TreeListModel]. GtkTreeExpander provides the common UI elements, gestures and keybindings for this purpose.

    On top of this, the “listitem.expand”, “listitem.collapse” and “listitem.toggle-expand” actions are provided to allow adding custom UI for managing expanded state.

    The GtkTreeListModel must be set to not be passthrough. Then it will provide [classGtk.TreeListRow] items which can be set via [methodGtk.TreeExpander.set_list_row] on the expander. The expander will then watch that row item automatically. [methodGtk.TreeExpander.set_child] sets the widget that displays the actual row contents.

    CSS nodes

    treeexpander
    ├── [indent]*
    ├── [expander]
    ╰── &lt;child&gt;
    

    GtkTreeExpander has zero or one CSS nodes with the name “expander” that should display the expander icon. The node will be :checked when it is expanded. If the node is not expandable, an “indent” node will be displayed instead.

    For every level of depth, another “indent” node is prepended.

    Accessibility

    GtkTreeExpander uses the GTK_ACCESSIBLE_ROLE_GROUP role. The expander icon is represented as a GTK_ACCESSIBLE_ROLE_BUTTON, labelled by the expander’s child, and toggling it will change the GTK_ACCESSIBLE_STATE_EXPANDED state.

    The TreeExpanderRef type acts as a lightweight Swift reference to an underlying GtkTreeExpander instance. It exposes methods that can operate on this data type through TreeExpanderProtocol conformance. Use TreeExpanderRef only as an unowned reference to an existing GtkTreeExpander instance.

    See more

    Declaration

    Swift

    public struct TreeExpanderRef : TreeExpanderProtocol, GWeakCapturing

TreeListModel Class

  • GtkTreeListModel is a list model that can create child models on demand.

    The TreeListModelRef type acts as a lightweight Swift reference to an underlying GtkTreeListModel instance. It exposes methods that can operate on this data type through TreeListModelProtocol conformance. Use TreeListModelRef only as an unowned reference to an existing GtkTreeListModel instance.

    See more

    Declaration

    Swift

    public struct TreeListModelRef : TreeListModelProtocol, GWeakCapturing

TreeListRow Class

  • GtkTreeListRow is used by GtkTreeListModel to represent items.

    It allows navigating the model as a tree and modify the state of rows.

    GtkTreeListRow instances are created by a GtkTreeListModel only when the [propertyGtk.TreeListModel:passthrough] property is not set.

    There are various support objects that can make use of GtkTreeListRow objects, such as the [classGtk.TreeExpander] widget that allows displaying an icon to expand or collapse a row or [classGtk.TreeListRowSorter] that makes it possible to sort trees properly.

    The TreeListRowRef type acts as a lightweight Swift reference to an underlying GtkTreeListRow instance. It exposes methods that can operate on this data type through TreeListRowProtocol conformance. Use TreeListRowRef only as an unowned reference to an existing GtkTreeListRow instance.

    See more

    Declaration

    Swift

    public struct TreeListRowRef : TreeListRowProtocol, GWeakCapturing

TreeListRowSorter Class

  • GtkTreeListRowSorter is a special-purpose sorter that will apply a given sorter to the levels in a tree.

    Here is an example for setting up a column view with a tree model and a GtkTreeListSorter:

    column_sorter = gtk_column_view_get_sorter (view);
    sorter = gtk_tree_list_row_sorter_new (g_object_ref (column_sorter));
    sort_model = gtk_sort_list_model_new (tree_model, sorter);
    selection = gtk_single_selection_new (sort_model);
    gtk_column_view_set_model (view, G_LIST_MODEL (selection));
    

    The TreeListRowSorterRef type acts as a lightweight Swift reference to an underlying GtkTreeListRowSorter instance. It exposes methods that can operate on this data type through TreeListRowSorterProtocol conformance. Use TreeListRowSorterRef only as an unowned reference to an existing GtkTreeListRowSorter instance.

    See more

    Declaration

    Swift

    public struct TreeListRowSorterRef : TreeListRowSorterProtocol, GWeakCapturing

TreeModelFilter Class

  • A GtkTreeModel which hides parts of an underlying tree model

    A GtkTreeModelFilter is a tree model which wraps another tree model, and can do the following things:

    • Filter specific rows, based on data from a “visible column”, a column storing booleans indicating whether the row should be filtered or not, or based on the return value of a “visible function”, which gets a model, iter and user_data and returns a boolean indicating whether the row should be filtered or not.

    • Modify the “appearance” of the model, using a modify function. This is extremely powerful and allows for just changing some values and also for creating a completely different model based on the given child model.

    • Set a different root node, also known as a “virtual root”. You can pass in a GtkTreePath indicating the root node for the filter at construction time.

    The basic API is similar to GtkTreeModelSort. For an example on its usage, see the section on GtkTreeModelSort.

    When using GtkTreeModelFilter, it is important to realize that GtkTreeModelFilter maintains an internal cache of all nodes which are visible in its clients. The cache is likely to be a subtree of the tree exposed by the child model. GtkTreeModelFilter will not cache the entire child model when unnecessary to not compromise the caching mechanism that is exposed by the reference counting scheme. If the child model implements reference counting, unnecessary signals may not be emitted because of reference counting rule 3, see the GtkTreeModel documentation. (Note that e.g. GtkTreeStore does not implement reference counting and will always emit all signals, even when the receiving node is not visible).

    Because of this, limitations for possible visible functions do apply. In general, visible functions should only use data or properties from the node for which the visibility state must be determined, its siblings or its parents. Usually, having a dependency on the state of any child node is not possible, unless references are taken on these explicitly. When no such reference exists, no signals may be received for these child nodes (see reference counting rule number 3 in the GtkTreeModel section).

    Determining the visibility state of a given node based on the state of its child nodes is a frequently occurring use case. Therefore, GtkTreeModelFilter explicitly supports this. For example, when a node does not have any children, you might not want the node to be visible. As soon as the first row is added to the node’s child level (or the last row removed), the node’s visibility should be updated.

    This introduces a dependency from the node on its child nodes. In order to accommodate this, GtkTreeModelFilter must make sure the necessary signals are received from the child model. This is achieved by building, for all nodes which are exposed as visible nodes to GtkTreeModelFilter‘s clients, the child level (if any) and take a reference on the first node in this level. Furthermore, for every row-inserted, row-changed or row-deleted signal (also these which were not handled because the node was not cached), GtkTreeModelFilter will check if the visibility state of any parent node has changed.

    Beware, however, that this explicit support is limited to these two cases. For example, if you want a node to be visible only if two nodes in a child’s child level (2 levels deeper) are visible, you are on your own. In this case, either rely on GtkTreeStore to emit all signals because it does not implement reference counting, or for models that do implement reference counting, obtain references on these child levels yourself.

    The TreeModelFilterRef type acts as a lightweight Swift reference to an underlying GtkTreeModelFilter instance. It exposes methods that can operate on this data type through TreeModelFilterProtocol conformance. Use TreeModelFilterRef only as an unowned reference to an existing GtkTreeModelFilter instance.

    See more

    Declaration

    Swift

    public struct TreeModelFilterRef : TreeModelFilterProtocol, GWeakCapturing

TreeModelSort Class

  • A GtkTreeModel which makes an underlying tree model sortable

    The GtkTreeModelSort is a model which implements the GtkTreeSortable interface. It does not hold any data itself, but rather is created with a child model and proxies its data. It has identical column types to this child model, and the changes in the child are propagated. The primary purpose of this model is to provide a way to sort a different model without modifying it. Note that the sort function used by GtkTreeModelSort is not guaranteed to be stable.

    The use of this is best demonstrated through an example. In the following sample code we create two GtkTreeView widgets each with a view of the same data. As the model is wrapped here by a GtkTreeModelSort, the two GtkTreeViews can each sort their view of the data without affecting the other. By contrast, if we simply put the same model in each widget, then sorting the first would sort the second.

    Using a GtkTreeModelSort

    (C Language Example):

    {
      GtkTreeView *tree_view1;
      GtkTreeView *tree_view2;
      GtkTreeModel *sort_model1;
      GtkTreeModel *sort_model2;
      GtkTreeModel *child_model;
    
      // get the child model
      child_model = get_my_model ();
    
      // Create the first tree
      sort_model1 = gtk_tree_model_sort_new_with_model (child_model);
      tree_view1 = gtk_tree_view_new_with_model (sort_model1);
    
      // Create the second tree
      sort_model2 = gtk_tree_model_sort_new_with_model (child_model);
      tree_view2 = gtk_tree_view_new_with_model (sort_model2);
    
      // Now we can sort the two models independently
      gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model1),
                                            COLUMN_1, GTK_SORT_ASCENDING);
      gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model2),
                                            COLUMN_1, GTK_SORT_DESCENDING);
    }
    

    To demonstrate how to access the underlying child model from the sort model, the next example will be a callback for the GtkTreeSelection GtkTreeSelectionchanged`` signal. In this callback, we get a string from COLUMN_1 of the model. We then modify the string, find the same selected row on the child model, and change the row there.

    Accessing the child model of in a selection changed callback

    (C Language Example):

    void
    selection_changed (GtkTreeSelection *selection, gpointer data)
    {
      GtkTreeModel *sort_model = NULL;
      GtkTreeModel *child_model;
      GtkTreeIter sort_iter;
      GtkTreeIter child_iter;
      char *some_data = NULL;
      char *modified_data;
    
      // Get the current selected row and the model.
      if (! gtk_tree_selection_get_selected (selection,
                                             &sort_model,
                                             &sort_iter))
        return;
    
      // Look up the current value on the selected row and get
      // a new value to change it to.
      gtk_tree_model_get (GTK_TREE_MODEL (sort_model), &sort_iter,
                          COLUMN_1, &some_data,
                          -1);
    
      modified_data = change_the_data (some_data);
      g_free (some_data);
    
      // Get an iterator on the child model, instead of the sort model.
      gtk_tree_model_sort_convert_iter_to_child_iter (GTK_TREE_MODEL_SORT (sort_model),
                                                      &child_iter,
                                                      &sort_iter);
    
      // Get the child model and change the value of the row. In this
      // example, the child model is a GtkListStore. It could be any other
      // type of model, though.
      child_model = gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT (sort_model));
      gtk_list_store_set (GTK_LIST_STORE (child_model), &child_iter,
                          COLUMN_1, &modified_data,
                          -1);
      g_free (modified_data);
    }
    

    The TreeModelSortRef type acts as a lightweight Swift reference to an underlying GtkTreeModelSort instance. It exposes methods that can operate on this data type through TreeModelSortProtocol conformance. Use TreeModelSortRef only as an unowned reference to an existing GtkTreeModelSort instance.

    See more

    Declaration

    Swift

    public struct TreeModelSortRef : TreeModelSortProtocol, GWeakCapturing

TreeSelection Class

  • The selection object for GtkTreeView

    The GtkTreeSelection object is a helper object to manage the selection for a GtkTreeView widget. The GtkTreeSelection object is automatically created when a new GtkTreeView widget is created, and cannot exist independently of this widget. The primary reason the GtkTreeSelection objects exists is for cleanliness of code and API. That is, there is no conceptual reason all these functions could not be methods on the GtkTreeView widget instead of a separate function.

    The GtkTreeSelection object is gotten from a GtkTreeView by calling gtk_tree_view_get_selection(). It can be manipulated to check the selection status of the tree, as well as select and deselect individual rows. Selection is done completely view side. As a result, multiple views of the same model can have completely different selections. Additionally, you cannot change the selection of a row on the model that is not currently displayed by the view without expanding its parents first.

    One of the important things to remember when monitoring the selection of a view is that the GtkTreeSelectionchanged signal is mostly a hint. That is, it may only emit one signal when a range of rows is selected. Additionally, it may on occasion emit a GtkTreeSelectionchanged signal when nothing has happened (mostly as a result of programmers calling select_row on an already selected row).

    The TreeSelectionRef type acts as a lightweight Swift reference to an underlying GtkTreeSelection instance. It exposes methods that can operate on this data type through TreeSelectionProtocol conformance. Use TreeSelectionRef only as an unowned reference to an existing GtkTreeSelection instance.

    See more

    Declaration

    Swift

    public struct TreeSelectionRef : TreeSelectionProtocol, GWeakCapturing

TreeStore Class

  • A tree-like data structure that can be used with the GtkTreeView

    The GtkTreeStore object is a list model for use with a GtkTreeView widget. It implements the GtkTreeModel interface, and consequently, can use all of the methods available there. It also implements the GtkTreeSortable interface so it can be sorted by the view. Finally, it also implements the tree drag and drop interfaces.

    GtkTreeStore as GtkBuildable

    The GtkTreeStore implementation of the GtkBuildable interface allows to specify the model columns with a <columns> element that may contain multiple <column> elements, each specifying one model column. The “type” attribute specifies the data type for the column.

    An example of a UI Definition fragment for a tree store:

    <object class="GtkTreeStore">
      <columns>
        <column type="gchararray"/>
        <column type="gchararray"/>
        <column type="gint"/>
      </columns>
    </object>
    

    The TreeStoreRef type acts as a lightweight Swift reference to an underlying GtkTreeStore instance. It exposes methods that can operate on this data type through TreeStoreProtocol conformance. Use TreeStoreRef only as an unowned reference to an existing GtkTreeStore instance.

    See more

    Declaration

    Swift

    public struct TreeStoreRef : TreeStoreProtocol, GWeakCapturing

TreeView Class

  • A widget for displaying both trees and lists

    Widget that displays any object that implements the [ifaceGtk.TreeModel] interface.

    Please refer to the tree widget conceptual overview for an overview of all the objects and data types related to the tree widget and how they work together.

    Coordinate systems in GtkTreeView API

    Several different coordinate systems are exposed in the GtkTreeView API. These are:

    • Widget coordinates: Coordinates relative to the widget (usually widget-&gt;window).

    • Bin window coordinates: Coordinates relative to the window that GtkTreeView renders to.

    • Tree coordinates: Coordinates relative to the entire scrollable area of GtkTreeView. These coordinates start at (0, 0) for row 0 of the tree.

    Several functions are available for converting between the different coordinate systems. The most common translations are between widget and bin window coordinates and between bin window and tree coordinates. For the former you can use methodGtk.TreeView.convert_widget_to_bin_window_coords, for the latter methodGtk.TreeView.convert_bin_window_to_tree_coords.

    GtkTreeView as GtkBuildable

    The GtkTreeView implementation of the GtkBuildable interface accepts [classGtk.TreeViewColumn] objects as &lt;child&gt; elements and exposes the internal [classGtk.TreeSelection] in UI definitions.

    An example of a UI definition fragment with GtkTreeView:

    &lt;object class="GtkTreeView" id="treeview"&gt;
      &lt;property name="model"&gt;liststore1&lt;/property&gt;
      &lt;child&gt;
        &lt;object class="GtkTreeViewColumn" id="test-column"&gt;
          &lt;property name="title"&gt;Test&lt;/property&gt;
          &lt;child&gt;
            &lt;object class="GtkCellRendererText" id="test-renderer"/&gt;
            &lt;attributes&gt;
              &lt;attribute name="text"&gt;1&lt;/attribute&gt;
            &lt;/attributes&gt;
          &lt;/child&gt;
        &lt;/object&gt;
      &lt;/child&gt;
      &lt;child internal-child="selection"&gt;
        &lt;object class="GtkTreeSelection" id="selection"&gt;
          &lt;signal name="changed" handler="on_treeview_selection_changed"/&gt;
        &lt;/object&gt;
      &lt;/child&gt;
    &lt;/object&gt;
    

    CSS nodes

    treeview.view
    ├── header
       ├── button
          ╰── [sort-indicator]
       
       ╰── button
           ╰── [sort-indicator]
    
    ├── [rubberband]
    ╰── [dndtarget]
    

    GtkTreeView has a main CSS node with name treeview and style class .view. It has a subnode with name header, which is the parent for all the column header widgets’ CSS nodes.

    Each column header consists of a button, which among other content, has a child with name sort-indicator, which carries the .ascending or .descending style classes when the column header should show a sort indicator. The CSS is expected to provide a suitable image using the -gtk-icon-source property.

    For rubberband selection, a subnode with name rubberband is used.

    For the drop target location during DND, a subnode with name dndtarget is used.

    The TreeViewRef type acts as a lightweight Swift reference to an underlying GtkTreeView instance. It exposes methods that can operate on this data type through TreeViewProtocol conformance. Use TreeViewRef only as an unowned reference to an existing GtkTreeView instance.

    See more

    Declaration

    Swift

    public struct TreeViewRef : TreeViewProtocol, GWeakCapturing

TreeViewColumn Class

  • A visible column in a GtkTreeView widget

    The GtkTreeViewColumn object represents a visible column in a GtkTreeView widget. It allows to set properties of the column header, and functions as a holding pen for the cell renderers which determine how the data in the column is displayed.

    Please refer to the tree widget conceptual overview for an overview of all the objects and data types related to the tree widget and how they work together, and to the GtkTreeView documentation for specifics about the CSS node structure for treeviews and their headers.

    The TreeViewColumnRef type acts as a lightweight Swift reference to an underlying GtkTreeViewColumn instance. It exposes methods that can operate on this data type through TreeViewColumnProtocol conformance. Use TreeViewColumnRef only as an unowned reference to an existing GtkTreeViewColumn instance.

    See more

    Declaration

    Swift

    public struct TreeViewColumnRef : TreeViewColumnProtocol, GWeakCapturing

Video Class

  • GtkVideo is a widget to show a GtkMediaStream with media controls.

    An example GtkVideo

    The controls are available separately as [classGtk.MediaControls]. If you just want to display a video without controls, you can treat it like any other paintable and for example put it into a [classGtk.Picture].

    GtkVideo aims to cover use cases such as previews, embedded animations, etc. It supports autoplay, looping, and simple media controls. It does not have support for video overlays, multichannel audio, device selection, or input. If you are writing a full-fledged video player, you may want to use the [classGdk.Paintable] API and a media framework such as Gstreamer directly.

    The VideoRef type acts as a lightweight Swift reference to an underlying GtkVideo instance. It exposes methods that can operate on this data type through VideoProtocol conformance. Use VideoRef only as an unowned reference to an existing GtkVideo instance.

    See more

    Declaration

    Swift

    public struct VideoRef : VideoProtocol, GWeakCapturing

TextChildAnchorClass Record

TextIter Record

  • An iterator for the contents of a GtkTextBuffer.

    You may wish to begin by reading the text widget conceptual overview, which gives an overview of all the objects and data types related to the text widget and how they work together.

    The TextIterRef type acts as a lightweight Swift reference to an underlying GtkTextIter instance. It exposes methods that can operate on this data type through TextIterProtocol conformance. Use TextIterRef only as an unowned reference to an existing GtkTextIter instance.

    See more

    Declaration

    Swift

    public struct TextIterRef : TextIterProtocol

TextMarkClass Record

  • The TextMarkClassRef type acts as a lightweight Swift reference to an underlying GtkTextMarkClass instance. It exposes methods that can operate on this data type through TextMarkClassProtocol conformance. Use TextMarkClassRef only as an unowned reference to an existing GtkTextMarkClass instance.

    See more

    Declaration

    Swift

    public struct TextMarkClassRef : TextMarkClassProtocol

TextTagClass Record

  • The TextTagClassRef type acts as a lightweight Swift reference to an underlying GtkTextTagClass instance. It exposes methods that can operate on this data type through TextTagClassProtocol conformance. Use TextTagClassRef only as an unowned reference to an existing GtkTextTagClass instance.

    See more

    Declaration

    Swift

    public struct TextTagClassRef : TextTagClassProtocol

TextViewClass Record

  • The TextViewClassRef type acts as a lightweight Swift reference to an underlying GtkTextViewClass instance. It exposes methods that can operate on this data type through TextViewClassProtocol conformance. Use TextViewClassRef only as an unowned reference to an existing GtkTextViewClass instance.

    See more

    Declaration

    Swift

    public struct TextViewClassRef : TextViewClassProtocol

ToggleButtonClass Record

TreeDragDestIface Record

TreeDragSourceIface Record

TreeExpanderClass Record

TreeIter Record

  • The GtkTreeIter is the primary structure for accessing a GtkTreeModel. Models are expected to put a unique integer in the stamp member, and put model-specific data in the three user_data members.

    The TreeIterRef type acts as a lightweight Swift reference to an underlying GtkTreeIter instance. It exposes methods that can operate on this data type through TreeIterProtocol conformance. Use TreeIterRef only as an unowned reference to an existing GtkTreeIter instance.

    See more

    Declaration

    Swift

    public struct TreeIterRef : TreeIterProtocol

TreeListModelClass Record

TreeListRowClass Record

TreeListRowSorterClass Record

TreeModelFilterClass Record

TreeModelIface Record

  • The TreeModelIfaceRef type acts as a lightweight Swift reference to an underlying GtkTreeModelIface instance. It exposes methods that can operate on this data type through TreeModelIfaceProtocol conformance. Use TreeModelIfaceRef only as an unowned reference to an existing GtkTreeModelIface instance.

    See more

    Declaration

    Swift

    public struct TreeModelIfaceRef : TreeModelIfaceProtocol

TreeModelSortClass Record

TreePath Record

  • An opaque structure representing a path to a row in a model.

    The TreePathRef type acts as a lightweight Swift reference to an underlying GtkTreePath instance. It exposes methods that can operate on this data type through TreePathProtocol conformance. Use TreePathRef only as an unowned reference to an existing GtkTreePath instance.

    See more

    Declaration

    Swift

    public struct TreePathRef : TreePathProtocol

TreeRowReference Record

  • A GtkTreeRowReference tracks model changes so that it always refers to the same row (a GtkTreePath refers to a position, not a fixed row). Create a new GtkTreeRowReference with gtk_tree_row_reference_new().

    The TreeRowReferenceRef type acts as a lightweight Swift reference to an underlying GtkTreeRowReference instance. It exposes methods that can operate on this data type through TreeRowReferenceProtocol conformance. Use TreeRowReferenceRef only as an unowned reference to an existing GtkTreeRowReference instance.

    See more

    Declaration

    Swift

    public struct TreeRowReferenceRef : TreeRowReferenceProtocol

TreeSortableIface Record

TreeStoreClass Record

  • The TreeStoreClassRef type acts as a lightweight Swift reference to an underlying GtkTreeStoreClass instance. It exposes methods that can operate on this data type through TreeStoreClassProtocol conformance. Use TreeStoreClassRef only as an unowned reference to an existing GtkTreeStoreClass instance.

    See more

    Declaration

    Swift

    public struct TreeStoreClassRef : TreeStoreClassProtocol

TreeViewClass Record

  • The TreeViewClassRef type acts as a lightweight Swift reference to an underlying GtkTreeViewClass instance. It exposes methods that can operate on this data type through TreeViewClassProtocol conformance. Use TreeViewClassRef only as an unowned reference to an existing GtkTreeViewClass instance.

    See more

    Declaration

    Swift

    public struct TreeViewClassRef : TreeViewClassProtocol

VideoClass Record

  • The VideoClassRef type acts as a lightweight Swift reference to an underlying GtkVideoClass instance. It exposes methods that can operate on this data type through VideoClassProtocol conformance. Use VideoClassRef only as an unowned reference to an existing GtkVideoClass instance.

    See more

    Declaration

    Swift

    public struct VideoClassRef : VideoClassProtocol

TreeDragSource Interface

  • Interface for Drag-and-Drop destinations in GtkTreeView.

    The TreeDragSourceRef type acts as a lightweight Swift reference to an underlying GtkTreeDragSource instance. It exposes methods that can operate on this data type through TreeDragSourceProtocol conformance. Use TreeDragSourceRef only as an unowned reference to an existing GtkTreeDragSource instance.

    See more

    Declaration

    Swift

    public struct TreeDragSourceRef : TreeDragSourceProtocol

TreeModel Interface

  • The tree interface used by GtkTreeView

    The GtkTreeModel interface defines a generic tree interface for use by the GtkTreeView widget. It is an abstract interface, and is designed to be usable with any appropriate data structure. The programmer just has to implement this interface on their own data type for it to be viewable by a GtkTreeView widget.

    The model is represented as a hierarchical tree of strongly-typed, columned data. In other words, the model can be seen as a tree where every node has different values depending on which column is being queried. The type of data found in a column is determined by using the GType system (ie. G_TYPE_INT, GTK_TYPE_BUTTON, G_TYPE_POINTER, etc). The types are homogeneous per column across all nodes. It is important to note that this interface only provides a way of examining a model and observing changes. The implementation of each individual model decides how and if changes are made.

    In order to make life simpler for programmers who do not need to write their own specialized model, two generic models are provided — the GtkTreeStore and the GtkListStore. To use these, the developer simply pushes data into these models as necessary. These models provide the data structure as well as all appropriate tree interfaces. As a result, implementing drag and drop, sorting, and storing data is trivial. For the vast majority of trees and lists, these two models are sufficient.

    Models are accessed on a node/column level of granularity. One can query for the value of a model at a certain node and a certain column on that node. There are two structures used to reference a particular node in a model. They are the [structGtk.TreePath] and the structGtk.TreeIter. Most of the interface consists of operations on a [structGtk.TreeIter].

    A path is essentially a potential node. It is a location on a model that may or may not actually correspond to a node on a specific model. A [structGtk.TreePath] can be converted into either an array of unsigned integers or a string. The string form is a list of numbers separated by a colon. Each number refers to the offset at that level. Thus, the path 0 refers to the root node and the path 2:4 refers to the fifth child of the third node.

    By contrast, a [structGtk.TreeIter] is a reference to a specific node on a specific model. It is a generic struct with an integer and three generic pointers. These are filled in by the model in a model-specific way. One can convert a path to an iterator by calling gtk_tree_model_get_iter(). These iterators are the primary way of accessing a model and are similar to the iterators used by GtkTextBuffer. They are generally statically allocated on the stack and only used for a short time. The model interface defines a set of operations using them for navigating the model.

    It is expected that models fill in the iterator with private data. For example, the GtkListStore model, which is internally a simple linked list, stores a list node in one of the pointers. The GtkTreeModelSort stores an array and an offset in two of the pointers. Additionally, there is an integer field. This field is generally filled with a unique stamp per model. This stamp is for catching errors resulting from using invalid iterators with a model.

    The lifecycle of an iterator can be a little confusing at first. Iterators are expected to always be valid for as long as the model is unchanged (and doesn’t emit a signal). The model is considered to own all outstanding iterators and nothing needs to be done to free them from the user’s point of view. Additionally, some models guarantee that an iterator is valid for as long as the node it refers to is valid (most notably the GtkTreeStore and GtkListStore). Although generally uninteresting, as one always has to allow for the case where iterators do not persist beyond a signal, some very important performance enhancements were made in the sort model. As a result, the GTK_TREE_MODEL_ITERS_PERSIST flag was added to indicate this behavior.

    To help show some common operation of a model, some examples are provided. The first example shows three ways of getting the iter at the location 3:2:5. While the first method shown is easier, the second is much more common, as you often get paths from callbacks.

    Acquiring a GtkTreeIter

    // Three ways of getting the iter pointing to the location
    GtkTreePath *path;
    GtkTreeIter iter;
    GtkTreeIter parent_iter;
    
    // get the iterator from a string
    gtk_tree_model_get_iter_from_string (model,
                                         &iter,
                                         "3:2:5");
    
    // get the iterator from a path
    path = gtk_tree_path_new_from_string ("3:2:5");
    gtk_tree_model_get_iter (model, &iter, path);
    gtk_tree_path_free (path);
    
    // walk the tree to find the iterator
    gtk_tree_model_iter_nth_child (model, &iter,
                                   NULL, 3);
    parent_iter = iter;
    gtk_tree_model_iter_nth_child (model, &iter,
                                   &parent_iter, 2);
    parent_iter = iter;
    gtk_tree_model_iter_nth_child (model, &iter,
                                   &parent_iter, 5);
    

    This second example shows a quick way of iterating through a list and getting a string and an integer from each row. The populate_model() function used below is not shown, as it is specific to the GtkListStore. For information on how to write such a function, see the GtkListStore documentation.

    Reading data from a GtkTreeModel

    enum
    {
      STRING_COLUMN,
      INT_COLUMN,
      N_COLUMNS
    };
    
    ...
    
    GtkTreeModel *list_store;
    GtkTreeIter iter;
    gboolean valid;
    int row_count = 0;
    
    // make a new list_store
    list_store = gtk_list_store_new (N_COLUMNS,
                                     G_TYPE_STRING,
                                     G_TYPE_INT);
    
    // Fill the list store with data
    populate_model (list_store);
    
    // Get the first iter in the list, check it is valid and walk
    // through the list, reading each row.
    
    valid = gtk_tree_model_get_iter_first (list_store,
                                           &iter);
    while (valid)
     {
       char *str_data;
       int    int_data;
    
       // Make sure you terminate calls to `gtk_tree_model_get()` with a “-1” value
       gtk_tree_model_get (list_store, &iter,
                           STRING_COLUMN, &str_data,
                           INT_COLUMN, &int_data,
                           -1);
    
       // Do something with the data
       g_print ("Row `d:` (`s`,`d`)\n",
                row_count, str_data, int_data);
       g_free (str_data);
    
       valid = gtk_tree_model_iter_next (list_store,
                                         &iter);
       row_count++;
     }
    

    The GtkTreeModel interface contains two methods for reference counting: gtk_tree_model_ref_node() and gtk_tree_model_unref_node(). These two methods are optional to implement. The reference counting is meant as a way for views to let models know when nodes are being displayed. GtkTreeView will take a reference on a node when it is visible, which means the node is either in the toplevel or expanded. Being displayed does not mean that the node is currently directly visible to the user in the viewport. Based on this reference counting scheme a caching model, for example, can decide whether or not to cache a node based on the reference count. A file-system based model would not want to keep the entire file hierarchy in memory, but just the folders that are currently expanded in every current view.

    When working with reference counting, the following rules must be taken into account:

    • Never take a reference on a node without owning a reference on its parent. This means that all parent nodes of a referenced node must be referenced as well.

    • Outstanding references on a deleted node are not released. This is not possible because the node has already been deleted by the time the row-deleted signal is received.

    • Models are not obligated to emit a signal on rows of which none of its siblings are referenced. To phrase this differently, signals are only required for levels in which nodes are referenced. For the root level however, signals must be emitted at all times (however the root level is always referenced when any view is attached).

    The TreeModelRef type acts as a lightweight Swift reference to an underlying GtkTreeModel instance. It exposes methods that can operate on this data type through TreeModelProtocol conformance. Use TreeModelRef only as an unowned reference to an existing GtkTreeModel instance.

    See more

    Declaration

    Swift

    public struct TreeModelRef : TreeModelProtocol

TreeSortable Interface

  • The interface for sortable models used by GtkTreeView

    GtkTreeSortable is an interface to be implemented by tree models which support sorting. The GtkTreeView uses the methods provided by this interface to sort the model.

    The TreeSortableRef type acts as a lightweight Swift reference to an underlying GtkTreeSortable instance. It exposes methods that can operate on this data type through TreeSortableProtocol conformance. Use TreeSortableRef only as an unowned reference to an existing GtkTreeSortable instance.

    See more

    Declaration

    Swift

    public struct TreeSortableRef : TreeSortableProtocol

Viewport Class

  • GtkViewport implements scrollability for widgets that lack their own scrolling capabilities.

    Use GtkViewport to scroll child widgets such as GtkGrid, GtkBox, and so on.

    The GtkViewport will start scrolling content only if allocated less than the child widget’s minimum size in a given orientation.

    CSS nodes

    GtkViewport has a single CSS node with name viewport.

    Accessibility

    GtkViewport uses the GTK_ACCESSIBLE_ROLE_GROUP role.

    The ViewportRef type acts as a lightweight Swift reference to an underlying GtkViewport instance. It exposes methods that can operate on this data type through ViewportProtocol conformance. Use ViewportRef only as an unowned reference to an existing GtkViewport instance.

    See more

    Declaration

    Swift

    public struct ViewportRef : ViewportProtocol, GWeakCapturing

VolumeButton Class

  • GtkVolumeButton is a GtkScaleButton subclass tailored for volume control.

    An example GtkVolumeButton

    The VolumeButtonRef type acts as a lightweight Swift reference to an underlying GtkVolumeButton instance. It exposes methods that can operate on this data type through VolumeButtonProtocol conformance. Use VolumeButtonRef only as an unowned reference to an existing GtkVolumeButton instance.

    See more

    Declaration

    Swift

    public struct VolumeButtonRef : VolumeButtonProtocol, GWeakCapturing

Widget Class

  • The base class for all widgets.

    GtkWidget is the base class all widgets in GTK derive from. It manages the widget lifecycle, layout, states and style.

    Height-for-width Geometry Management

    GTK uses a height-for-width (and width-for-height) geometry management system. Height-for-width means that a widget can change how much vertical space it needs, depending on the amount of horizontal space that it is given (and similar for width-for-height). The most common example is a label that reflows to fill up the available width, wraps to fewer lines, and therefore needs less height.

    Height-for-width geometry management is implemented in GTK by way of two virtual methods:

    • [vfuncGtk.Widget.get_request_mode]
    • [vfuncGtk.Widget.measure]

    There are some important things to keep in mind when implementing height-for-width and when using it in widget implementations.

    If you implement a direct GtkWidget subclass that supports height-for-width or width-for-height geometry management for itself or its child widgets, the [vfuncGtk.Widget.get_request_mode] virtual function must be implemented as well and return the widget’s preferred request mode. The default implementation of this virtual function returns GTK_SIZE_REQUEST_CONSTANT_SIZE, which means that the widget will only ever get -1 passed as the for_size value to its [vfuncGtk.Widget.measure] implementation.

    The geometry management system will query a widget hierarchy in only one orientation at a time. When widgets are initially queried for their minimum sizes it is generally done in two initial passes in the [enumGtk.SizeRequestMode] chosen by the toplevel.

    For example, when queried in the normal GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH mode:

    First, the default minimum and natural width for each widget in the interface will be computed using [idgtk_widget_measure] with an orientation of GTK_ORIENTATION_HORIZONTAL and a for_size of -1. Because the preferred widths for each widget depend on the preferred widths of their children, this information propagates up the hierarchy, and finally a minimum and natural width is determined for the entire toplevel. Next, the toplevel will use the minimum width to query for the minimum height contextual to that width using [idgtk_widget_measure] with an orientation of GTK_ORIENTATION_VERTICAL and a for_size of the just computed width. This will also be a highly recursive operation. The minimum height for the minimum width is normally used to set the minimum size constraint on the toplevel.

    After the toplevel window has initially requested its size in both dimensions it can go on to allocate itself a reasonable size (or a size previously specified with [methodGtk.Window.set_default_size]). During the recursive allocation process it’s important to note that request cycles will be recursively executed while widgets allocate their children. Each widget, once allocated a size, will go on to first share the space in one orientation among its children and then request each child’s height for its target allocated width or its width for allocated height, depending. In this way a GtkWidget will typically be requested its size a number of times before actually being allocated a size. The size a widget is finally allocated can of course differ from the size it has requested. For this reason, GtkWidget caches a small number of results to avoid re-querying for the same sizes in one allocation cycle.

    If a widget does move content around to intelligently use up the allocated size then it must support the request in both GtkSizeRequestModes even if the widget in question only trades sizes in a single orientation.

    For instance, a [classGtk.Label] that does height-for-width word wrapping will not expect to have [vfuncGtk.Widget.measure] with an orientation of GTK_ORIENTATION_VERTICAL called because that call is specific to a width-for-height request. In this case the label must return the height required for its own minimum possible width. By following this rule any widget that handles height-for-width or width-for-height requests will always be allocated at least enough space to fit its own content.

    Here are some examples of how a GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH widget generally deals with width-for-height requests:

    static void
    foo_widget_measure (GtkWidget      *widget,
                        GtkOrientation  orientation,
                        int             for_size,
                        int            *minimum_size,
                        int            *natural_size,
                        int            *minimum_baseline,
                        int            *natural_baseline)
    {
      if (orientation == GTK_ORIENTATION_HORIZONTAL)
        {
          // Calculate minimum and natural width
        }
      else // VERTICAL
        {
          if (i_am_in_height_for_width_mode)
            {
              int min_width, dummy;
    
              // First, get the minimum width of our widget
              GTK_WIDGET_GET_CLASS (widget)-&gt;measure (widget, GTK_ORIENTATION_HORIZONTAL, -1,
                                                      &min_width, &dummy, &dummy, &dummy);
    
              // Now use the minimum width to retrieve the minimum and natural height to display
              // that width.
              GTK_WIDGET_GET_CLASS (widget)-&gt;measure (widget, GTK_ORIENTATION_VERTICAL, min_width,
                                                      minimum_size, natural_size, &dummy, &dummy);
            }
          else
            {
              // ... some widgets do both.
            }
        }
    }
    

    Often a widget needs to get its own request during size request or allocation. For example, when computing height it may need to also compute width. Or when deciding how to use an allocation, the widget may need to know its natural size. In these cases, the widget should be careful to call its virtual methods directly, like in the code example above.

    It will not work to use the wrapper function [methodGtk.Widget.measure] inside your own [vfuncGtk.Widget.size_allocate] implementation. These return a request adjusted by [classGtk.SizeGroup], the widget’s align and expand flags, as well as its CSS style.

    If a widget used the wrappers inside its virtual method implementations, then the adjustments (such as widget margins) would be applied twice. GTK therefore does not allow this and will warn if you try to do it.

    Of course if you are getting the size request for another widget, such as a child widget, you must use [idgtk_widget_measure]; otherwise, you would not properly consider widget margins, [classGtk.SizeGroup], and so forth.

    GTK also supports baseline vertical alignment of widgets. This means that widgets are positioned such that the typographical baseline of widgets in the same row are aligned. This happens if a widget supports baselines, has a vertical alignment of GTK_ALIGN_BASELINE, and is inside a widget that supports baselines and has a natural “row” that it aligns to the baseline, or a baseline assigned to it by the grandparent.

    Baseline alignment support for a widget is also done by the [vfuncGtk.Widget.measure] virtual function. It allows you to report both a minimum and natural size.

    If a widget ends up baseline aligned it will be allocated all the space in the parent as if it was GTK_ALIGN_FILL, but the selected baseline can be found via [idgtk_widget_get_allocated_baseline]. If the baseline has a value other than -1 you need to align the widget such that the baseline appears at the position.

    GtkWidget as GtkBuildable

    The GtkWidget implementation of the GtkBuildable interface supports various custom elements to specify additional aspects of widgets that are not directly expressed as properties.

    If the widget uses a [classGtk.LayoutManager], GtkWidget supports a custom &lt;layout&gt; element, used to define layout properties:

    &lt;object class="GtkGrid" id="my_grid"&gt;
      &lt;child&gt;
        &lt;object class="GtkLabel" id="label1"&gt;
          &lt;property name="label"&gt;Description&lt;/property&gt;
          &lt;layout&gt;
            &lt;property name="column"&gt;0&lt;/property&gt;
            &lt;property name="row"&gt;0&lt;/property&gt;
            &lt;property name="row-span"&gt;1&lt;/property&gt;
            &lt;property name="column-span"&gt;1&lt;/property&gt;
          &lt;/layout&gt;
        &lt;/object&gt;
      &lt;/child&gt;
      &lt;child&gt;
        &lt;object class="GtkEntry" id="description_entry"&gt;
          &lt;layout&gt;
            &lt;property name="column"&gt;1&lt;/property&gt;
            &lt;property name="row"&gt;0&lt;/property&gt;
            &lt;property name="row-span"&gt;1&lt;/property&gt;
            &lt;property name="column-span"&gt;1&lt;/property&gt;
          &lt;/layout&gt;
        &lt;/object&gt;
      &lt;/child&gt;
    &lt;/object&gt;
    

    GtkWidget allows style information such as style classes to be associated with widgets, using the custom &lt;style&gt; element:

    &lt;object class="GtkButton" id="button1"&gt;
      &lt;style&gt;
        &lt;class name="my-special-button-class"/&gt;
        &lt;class name="dark-button"/&gt;
      &lt;/style&gt;
    &lt;/object&gt;
    

    GtkWidget allows defining accessibility information, such as properties, relations, and states, using the custom &lt;accessibility&gt; element:

    &lt;object class="GtkButton" id="button1"&gt;
      &lt;accessibility&gt;
        &lt;property name="label"&gt;Download&lt;/property&gt;
        &lt;relation name="labelled-by"&gt;label1&lt;/relation&gt;
      &lt;/accessibility&gt;
    &lt;/object&gt;
    

    Building composite widgets from template XML

    GtkWidgetexposes some facilities to automate the procedure of creating composite widgets using “templates”.

    To create composite widgets with GtkBuilder XML, one must associate the interface description with the widget class at class initialization time using [methodGtk.WidgetClass.set_template].

    The interface description semantics expected in composite template descriptions is slightly different from regular [classGtk.Builder] XML.

    Unlike regular interface descriptions, [methodGtk.WidgetClass.set_template] will expect a &lt;template&gt; tag as a direct child of the toplevel &lt;interface&gt; tag. The &lt;template&gt; tag must specify the “class” attribute which must be the type name of the widget. Optionally, the “parent” attribute may be specified to specify the direct parent type of the widget type, this is ignored by GtkBuilder but required for UI design tools like Glade to introspect what kind of properties and internal children exist for a given type when the actual type does not exist.

    The XML which is contained inside the &lt;template&gt; tag behaves as if it were added to the &lt;object&gt; tag defining the widget itself. You may set properties on a widget by inserting &lt;property&gt; tags into the &lt;template&gt; tag, and also add &lt;child&gt; tags to add children and extend a widget in the normal way you would with &lt;object&gt; tags.

    Additionally, &lt;object&gt; tags can also be added before and after the initial &lt;template&gt; tag in the normal way, allowing one to define auxiliary objects which might be referenced by other widgets declared as children of the &lt;template&gt; tag.

    An example of a template definition:

    &lt;interface&gt;
      &lt;template class="FooWidget" parent="GtkBox"&gt;
        &lt;property name="orientation"&gt;horizontal&lt;/property&gt;
        &lt;property name="spacing"&gt;4&lt;/property&gt;
        &lt;child&gt;
          &lt;object class="GtkButton" id="hello_button"&gt;
            &lt;property name="label"&gt;Hello World&lt;/property&gt;
            &lt;signal name="clicked" handler="hello_button_clicked" object="FooWidget" swapped="yes"/&gt;
          &lt;/object&gt;
        &lt;/child&gt;
        &lt;child&gt;
          &lt;object class="GtkButton" id="goodbye_button"&gt;
            &lt;property name="label"&gt;Goodbye World&lt;/property&gt;
          &lt;/object&gt;
        &lt;/child&gt;
      &lt;/template&gt;
    &lt;/interface&gt;
    

    Typically, you’ll place the template fragment into a file that is bundled with your project, using GResource. In order to load the template, you need to call [methodGtk.WidgetClass.set_template_from_resource] from the class initialization of your GtkWidget type:

    static void
    foo_widget_class_init (FooWidgetClass *klass)
    {
      // ...
    
      gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (klass),
                                                   "/com/example/ui/foowidget.ui");
    }
    

    You will also need to call [methodGtk.Widget.init_template] from the instance initialization function:

    static void
    foo_widget_init (FooWidget *self)
    {
      // ...
      gtk_widget_init_template (GTK_WIDGET (self));
    }
    

    You can access widgets defined in the template using the [idgtk_widget_get_template_child] function, but you will typically declare a pointer in the instance private data structure of your type using the same name as the widget in the template definition, and call methodGtk.WidgetClass.bind_template_child_full with that name, e.g.

    typedef struct {
      GtkWidget *hello_button;
      GtkWidget *goodbye_button;
    } FooWidgetPrivate;
    
    G_DEFINE_TYPE_WITH_PRIVATE (FooWidget, foo_widget, GTK_TYPE_BOX)
    
    static void
    foo_widget_class_init (FooWidgetClass *klass)
    {
      // ...
      gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (klass),
                                                   "/com/example/ui/foowidget.ui");
      gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (klass),
                                                    FooWidget, hello_button);
      gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (klass),
                                                    FooWidget, goodbye_button);
    }
    
    static void
    foo_widget_init (FooWidget *widget)
    {
    
    }
    

    You can also use methodGtk.WidgetClass.bind_template_callback_full to connect a signal callback defined in the template with a function visible in the scope of the class, e.g.

    // the signal handler has the instance and user data swapped
    // because of the swapped="yes" attribute in the template XML
    static void
    hello_button_clicked (FooWidget *self,
                          GtkButton *button)
    {
      g_print ("Hello, world!\n");
    }
    
    static void
    foo_widget_class_init (FooWidgetClass *klass)
    {
      // ...
      gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (klass),
                                                   "/com/example/ui/foowidget.ui");
      gtk_widget_class_bind_template_callback (GTK_WIDGET_CLASS (klass), hello_button_clicked);
    }
    

    The WidgetRef type acts as a lightweight Swift reference to an underlying GtkWidget instance. It exposes methods that can operate on this data type through WidgetProtocol conformance. Use WidgetRef only as an unowned reference to an existing GtkWidget instance.

    See more

    Declaration

    Swift

    public struct WidgetRef : WidgetProtocol, GWeakCapturing

WidgetClass Record

  • The WidgetClassRef type acts as a lightweight Swift reference to an underlying GtkWidgetClass instance. It exposes methods that can operate on this data type through WidgetClassProtocol conformance. Use WidgetClassRef only as an unowned reference to an existing GtkWidgetClass instance.

    See more

    Declaration

    Swift

    public struct WidgetClassRef : WidgetClassProtocol

WidgetClassPrivate Record

WidgetPaintableClass Record

WindowClass Record

  • The WindowClassRef type acts as a lightweight Swift reference to an underlying GtkWindowClass instance. It exposes methods that can operate on this data type through WindowClassProtocol conformance. Use WindowClassRef only as an unowned reference to an existing GtkWindowClass instance.

    See more

    Declaration

    Swift

    public struct WindowClassRef : WindowClassProtocol

WindowControlsClass Record

WindowGroupClass Record

WindowHandleClass Record

WidgetPaintable Class

  • GtkWidgetPaintable is a GdkPaintable that displays the contents of a widget.

    GtkWidgetPaintable will also take care of the widget not being in a state where it can be drawn (like when it isn’t shown) and just draw nothing or where it does not have a size (like when it is hidden) and report no size in that case.

    Of course, GtkWidgetPaintable allows you to monitor widgets for size changes by emitting the [signalGdk.Paintable::invalidate-size] signal whenever the size of the widget changes as well as for visual changes by emitting the [signalGdk.Paintable::invalidate-contents] signal whenever the widget changes.

    You can use a GtkWidgetPaintable everywhere a GdkPaintable is allowed, including using it on a GtkPicture (or one of its parents) that it was set on itself via gtk_picture_set_paintable(). The paintable will take care of recursion when this happens. If you do this however, ensure that the [propertyGtk.Picture:can-shrink] property is set to true or you might end up with an infinitely growing widget.

    The WidgetPaintableRef type acts as a lightweight Swift reference to an underlying GtkWidgetPaintable instance. It exposes methods that can operate on this data type through WidgetPaintableProtocol conformance. Use WidgetPaintableRef only as an unowned reference to an existing GtkWidgetPaintable instance.

    See more

    Declaration

    Swift

    public struct WidgetPaintableRef : WidgetPaintableProtocol, GWeakCapturing

Window Class

  • A GtkWindow is a toplevel window which can contain other widgets.

    An example GtkWindow

    Windows normally have decorations that are under the control of the windowing system and allow the user to manipulate the window (resize it, move it, close it,…).

    GtkWindow as GtkBuildable

    The GtkWindow implementation of the [ifaceGtk.Buildable] interface supports setting a child as the titlebar by specifying “titlebar” as the “type” attribute of a <child> element.

    CSS nodes

    window.background [.csd / .solid-csd / .ssd] [.maximized / .fullscreen / .tiled]
    ├── &lt;child&gt;
    ╰── &lt;titlebar child&gt;.titlebar [.default-decoration]
    

    GtkWindow has a main CSS node with name window and style class .background.

    Style classes that are typically used with the main CSS node are .csd (when client-side decorations are in use), .solid-csd (for client-side decorations without invisible borders), .ssd (used by mutter when rendering server-side decorations). GtkWindow also represents window states with the following style classes on the main node: .maximized, .fullscreen, .tiled (when supported, also .tiled-top, .tiled-left, .tiled-right, .tiled-bottom).

    GtkWindow subclasses often add their own discriminating style classes, such as .dialog, .popup or .tooltip.

    Generally, some CSS properties don’t make sense on the toplevel window node, such as margins or padding. When client-side decorations without invisible borders are in use (i.e. the .solid-csd style class is added to the main window node), the CSS border of the toplevel window is used for resize drags. In the .csd case, the shadow area outside of the window can be used to resize it.

    GtkWindow adds the .titlebar and .default-decoration style classes to the widget that is added as a titlebar child.

    Accessibility

    GtkWindow uses the GTK_ACCESSIBLE_ROLE_WINDOW role.

    The WindowRef type acts as a lightweight Swift reference to an underlying GtkWindow instance. It exposes methods that can operate on this data type through WindowProtocol conformance. Use WindowRef only as an unowned reference to an existing GtkWindow instance.

    See more

    Declaration

    Swift

    public struct WindowRef : WindowProtocol, GWeakCapturing

WindowControls Class

  • GtkWindowControls shows window frame controls.

    Typical window frame controls are minimize, maximize and close buttons, and the window icon.

    An example GtkWindowControls

    GtkWindowControls only displays start or end side of the controls (see [propertyGtk.WindowControls:side]), so it’s intended to be always used in pair with another GtkWindowControls for the opposite side, for example:

    &lt;object class="GtkBox"&gt;
      &lt;child&gt;
        &lt;object class="GtkWindowControls"&gt;
          &lt;property name="side"&gt;start&lt;/property&gt;
        &lt;/object&gt;
      &lt;/child&gt;
    
      ...
    
      &lt;child&gt;
        &lt;object class="GtkWindowControls"&gt;
          &lt;property name="side"&gt;end&lt;/property&gt;
        &lt;/object&gt;
      &lt;/child&gt;
    &lt;/object&gt;
    

    CSS nodes

    windowcontrols
    ├── [image.icon]
    ├── [button.minimize]
    ├── [button.maximize]
    ╰── [button.close]
    

    A GtkWindowControls‘ CSS node is called windowcontrols. It contains subnodes corresponding to each title button. Which of the title buttons exist and where they are placed exactly depends on the desktop environment and [propertyGtk.WindowControls:decoration-layout] value.

    When [propertyGtk.WindowControls:empty] is true, it gets the .empty style class.

    Accessibility

    GtkWindowControls uses the GTK_ACCESSIBLE_ROLE_GROUP role.

    The WindowControlsRef type acts as a lightweight Swift reference to an underlying GtkWindowControls instance. It exposes methods that can operate on this data type through WindowControlsProtocol conformance. Use WindowControlsRef only as an unowned reference to an existing GtkWindowControls instance.

    See more

    Declaration

    Swift

    public struct WindowControlsRef : WindowControlsProtocol, GWeakCapturing

WindowGroup Class

  • GtkWindowGroup makes group of windows behave like separate applications.

    It achieves this by limiting the effect of GTK grabs and modality to windows in the same group.

    A window can be a member in at most one window group at a time. Windows that have not been explicitly assigned to a group are implicitly treated like windows of the default window group.

    GtkWindowGroup objects are referenced by each window in the group, so once you have added all windows to a GtkWindowGroup, you can drop the initial reference to the window group with g_object_unref(). If the windows in the window group are subsequently destroyed, then they will be removed from the window group and drop their references on the window group; when all window have been removed, the window group will be freed.

    The WindowGroupRef type acts as a lightweight Swift reference to an underlying GtkWindowGroup instance. It exposes methods that can operate on this data type through WindowGroupProtocol conformance. Use WindowGroupRef only as an unowned reference to an existing GtkWindowGroup instance.

    See more

    Declaration

    Swift

    public struct WindowGroupRef : WindowGroupProtocol, GWeakCapturing

WindowHandle Class

  • GtkWindowHandle is a titlebar area widget.

    When added into a window, it can be dragged to move the window, and handles right click, double click and middle click as expected of a titlebar.

    CSS nodes

    GtkWindowHandle has a single CSS node with the name windowhandle.

    Accessibility

    GtkWindowHandle uses the GTK_ACCESSIBLE_ROLE_GROUP role.

    The WindowHandleRef type acts as a lightweight Swift reference to an underlying GtkWindowHandle instance. It exposes methods that can operate on this data type through WindowHandleProtocol conformance. Use WindowHandleRef only as an unowned reference to an existing GtkWindowHandle instance.

    See more

    Declaration

    Swift

    public struct WindowHandleRef : WindowHandleProtocol, GWeakCapturing
  • Types of user actions that may be blocked by GtkApplication.

    See [methodGtk.Application.inhibit].

    See more

    Declaration

    Swift

    public struct ApplicationInhibitFlags : OptionSet
  • The list of flags that can be passed to gtk_builder_create_closure().

    New values may be added in the future for new features, so external implementations of [ifaceGtk.BuilderScope] should test the flags for unknown values and raise a GTK_BUILDER_ERROR_INVALID_ATTRIBUTE error when they encounter one.

    See more

    Declaration

    Swift

    public struct BuilderClosureFlags : OptionSet
  • Tells how a cell is to be rendered.

    See more

    Declaration

    Swift

    public struct CellRendererState : OptionSet
  • Flags to use with gtk_set_debug_flags().

    Settings these flags causes GTK to print out different types of debugging information. Some of these flags are only available when GTK has been configured with -Ddebug=true.

    See more

    Declaration

    Swift

    public struct DebugFlags : OptionSet
  • Flags used to influence dialog construction.

    See more

    Declaration

    Swift

    public struct DialogFlags : OptionSet
  • Describes the behavior of a GtkEventControllerScroll.

    See more

    Declaration

    Swift

    public struct EventControllerScrollFlags : OptionSet
  • Specifies the granularity of font selection that is desired in a GtkFontChooser.

    This enumeration may be extended in the future; applications should ignore unknown values.

    See more

    Declaration

    Swift

    public struct FontChooserLevel : OptionSet
  • Used to specify options for gtk_icon_theme_lookup_icon().

    See more

    Declaration

    Swift

    public struct IconLookupFlags : OptionSet
  • Describes hints that might be taken into account by input methods or applications.

    Note that input methods may already tailor their behaviour according to the GtkInputPurpose of the entry.

    Some common sense is expected when using these flags - mixing GTK_INPUT_HINT_LOWERCASE with any of the uppercase hints makes no sense.

    This enumeration may be extended in the future; input methods should ignore unknown values.

    See more

    Declaration

    Swift

    public struct InputHints : OptionSet
  • Flags that influence the behavior of gtk_widget_pick().

    See more

    Declaration

    Swift

    public struct PickFlags : OptionSet
  • Flags that affect how popover menus are created from a menu model.

    See more

    Declaration

    Swift

    public struct PopoverMenuFlags : OptionSet
  • Specifies which features the print dialog should offer.

    If neither GTK_PRINT_CAPABILITY_GENERATE_PDF nor GTK_PRINT_CAPABILITY_GENERATE_PS is specified, GTK assumes that all formats are supported.

    See more

    Declaration

    Swift

    public struct PrintCapabilities : OptionSet
  • List of flags that can be passed to action activation.

    More flags may be added in the future.

    See more

    Declaration

    Swift

    public struct ShortcutActionFlags : OptionSet
  • Describes a widget state.

    Widget states are used to match the widget against CSS pseudo-classes. Note that GTK extends the regular CSS classes and sometimes uses different names.

    See more

    Declaration

    Swift

    public struct StateFlags : OptionSet
  • Flags that modify the behavior of gtk_style_context_to_string().

    New values may be added to this enumeration.

    See more

    Declaration

    Swift

    public struct StyleContextPrintFlags : OptionSet
  • 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.

    See more

    Declaration

    Swift

    public struct TextSearchFlags : OptionSet
  • These flags indicate various properties of a GtkTreeModel.

    They are returned by [methodGtk.TreeModel.get_flags], and must be static for the lifetime of the object. A more complete description of GTK_TREE_MODEL_ITERS_PERSIST can be found in the overview of this section.

    See more

    Declaration

    Swift

    public struct TreeModelFlags : OptionSet