KeymapProtocol

public protocol KeymapProtocol : ObjectProtocol

The KeymapProtocol protocol exposes the methods and properties of an underlying GdkKeymap instance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, see Keymap. Alternatively, use KeymapRef as a lighweight, unowned reference if you already have an instance you just want to use.

A GdkKeymap defines the translation from keyboard state (including a hardware key, a modifier mask, and active keyboard group) to a keyval. This translation has two phases. The first phase is to determine the effective keyboard group and level for the keyboard state; the second phase is to look up the keycode/group/level triplet in the keymap and see what keyval it corresponds to.

  • ptr

    Untyped pointer to the underlying GdkKeymap instance.

    Declaration

    Swift

    var ptr: UnsafeMutableRawPointer! { get }
  • keymap_ptr Default implementation

    Typed pointer to the underlying GdkKeymap instance.

    Default Implementation

    Return the stored, untyped pointer as a typed pointer to the GdkKeymap instance.

    Declaration

    Swift

    var keymap_ptr: UnsafeMutablePointer<GdkKeymap>! { get }
  • Required Initialiser for types conforming to KeymapProtocol

    Declaration

    Swift

    init(raw: UnsafeMutableRawPointer)

Keymap signals

  • Connect a Swift signal handler to the given, typed KeymapSignalName signal

    Declaration

    Swift

    @discardableResult
    @inlinable
    func connect(signal s: KeymapSignalName, flags f: ConnectFlags = ConnectFlags(0), handler h: @escaping SignalHandler) -> Int

    Parameters

    signal

    The signal to connect

    flags

    The connection flags to use

    data

    A pointer to user data to provide to the callback

    destroyData

    A GClosureNotify C function to destroy the data pointed to by userData

    handler

    The Swift signal handler (function or callback) to invoke on the given signal

    Return Value

    The signal handler ID (always greater than 0 for successful connections)

  • Connect a C signal handler to the given, typed KeymapSignalName signal

    Declaration

    Swift

    @discardableResult
    @inlinable
    func connect(signal s: KeymapSignalName, flags f: ConnectFlags = ConnectFlags(0), data userData: gpointer!, destroyData destructor: GClosureNotify? = nil, signalHandler h: @escaping GCallback) -> Int

    Parameters

    signal

    The signal to connect

    flags

    The connection flags to use

    data

    A pointer to user data to provide to the callback

    destroyData

    A GClosureNotify C function to destroy the data pointed to by userData

    signalHandler

    The C function to be called on the given signal

    Return Value

    The signal handler ID (always greater than 0 for successful connections)

  • The direction-changed signal gets emitted when the direction of the keymap changes.

    Note

    This represents the underlying direction-changed signal

    Declaration

    Swift

    @discardableResult
    @inlinable
    func onDirectionChanged(flags: ConnectFlags = ConnectFlags(0), handler: @escaping (_ unownedSelf: KeymapRef) -> Void) -> Int

    Parameters

    flags

    Flags

    unownedSelf

    Reference to instance of self

    handler

    The signal handler to call Run the given callback whenever the directionChanged signal is emitted

  • directionChangedSignal Extension method

    Typed direction-changed signal for using the connect(signal:) methods

    Declaration

    Swift

    static var directionChangedSignal: KeymapSignalName { get }
  • The keys-changed signal is emitted when the mapping represented by keymap changes.

    Note

    This represents the underlying keys-changed signal

    Declaration

    Swift

    @discardableResult
    @inlinable
    func onKeysChanged(flags: ConnectFlags = ConnectFlags(0), handler: @escaping (_ unownedSelf: KeymapRef) -> Void) -> Int

    Parameters

    flags

    Flags

    unownedSelf

    Reference to instance of self

    handler

    The signal handler to call Run the given callback whenever the keysChanged signal is emitted

  • keysChangedSignal Extension method

    Typed keys-changed signal for using the connect(signal:) methods

    Declaration

    Swift

    static var keysChangedSignal: KeymapSignalName { get }
  • The state-changed signal is emitted when the state of the keyboard changes, e.g when Caps Lock is turned on or off. See gdk_keymap_get_caps_lock_state().

    Note

    This represents the underlying state-changed signal

    Declaration

    Swift

    @discardableResult
    @inlinable
    func onStateChanged(flags: ConnectFlags = ConnectFlags(0), handler: @escaping (_ unownedSelf: KeymapRef) -> Void) -> Int

    Parameters

    flags

    Flags

    unownedSelf

    Reference to instance of self

    handler

    The signal handler to call Run the given callback whenever the stateChanged signal is emitted

  • stateChangedSignal Extension method

    Typed state-changed signal for using the connect(signal:) methods

    Declaration

    Swift

    static var stateChangedSignal: KeymapSignalName { get }

Keymap Class: KeymapProtocol extension (methods and fields)

  • addVirtualModifiers(state:) Extension method

    Maps the non-virtual modifiers (i.e Mod2, Mod3, …) which are set in state to the virtual modifiers (i.e. Super, Hyper and Meta) and set the corresponding bits in state.

    GDK already does this before delivering key events, but for compatibility reasons, it only sets the first virtual modifier it finds, whereas this function sets all matching virtual modifiers.

    This function is useful when matching key events against accelerators.

    Declaration

    Swift

    @inlinable
    func addVirtualModifiers(state: UnsafeMutablePointer<GdkModifierType>!)
  • getCapsLockState() Extension method

    Returns whether the Caps Lock modifer is locked.

    Declaration

    Swift

    @inlinable
    func getCapsLockState() -> Bool
  • getDirection() Extension method

    Returns the direction of effective layout of the keymap.

    Declaration

    Swift

    @inlinable
    func getDirection() -> PangoDirection
  • Returns the keyvals bound to hardware_keycode. The Nth GdkKeymapKey in keys is bound to the Nth keyval in keyvals. Free the returned arrays with g_free(). When a keycode is pressed by the user, the keyval from this list of entries is selected by considering the effective keyboard group and level. See gdk_keymap_translate_keyboard_state().

    Declaration

    Swift

    @inlinable
    func getEntriesForKeycode(hardwareKeycode: Int, keys: UnsafeMutablePointer<UnsafeMutablePointer<GdkKeymapKey>?>! = nil, keyvals: UnsafeMutablePointer<UnsafeMutablePointer<guint>?>! = nil, nEntries: UnsafeMutablePointer<gint>!) -> Bool
  • Obtains a list of keycode/group/level combinations that will generate keyval. Groups and levels are two kinds of keyboard mode; in general, the level determines whether the top or bottom symbol on a key is used, and the group determines whether the left or right symbol is used. On US keyboards, the shift key changes the keyboard level, and there are no groups. A group switch key might convert a keyboard between Hebrew to English modes, for example. GdkEventKey contains a group field that indicates the active keyboard group. The level is computed from the modifier mask. The returned array should be freed with g_free().

    Declaration

    Swift

    @inlinable
    func getEntriesFor(keyval: Int, keys: UnsafeMutablePointer<UnsafeMutablePointer<GdkKeymapKey>?>!, nKeys: UnsafeMutablePointer<gint>!) -> Bool
  • getModifierMask(intent:) Extension method

    Returns the modifier mask the keymap’s windowing system backend uses for a particular purpose.

    Note that this function always returns real hardware modifiers, not virtual ones (e.g. it will return GDK_MOD1_MASK rather than GDK_META_MASK if the backend maps MOD1 to META), so there are use cases where the return value of this function has to be transformed by gdk_keymap_add_virtual_modifiers() in order to contain the expected result.

    Declaration

    Swift

    @inlinable
    func getModifierMask(intent: GdkModifierIntent) -> ModifierType
  • getModifierState() Extension method

    Returns the current modifier state.

    Declaration

    Swift

    @inlinable
    func getModifierState() -> Int
  • getNumLockState() Extension method

    Returns whether the Num Lock modifer is locked.

    Declaration

    Swift

    @inlinable
    func getNumLockState() -> Bool
  • getScrollLockState() Extension method

    Returns whether the Scroll Lock modifer is locked.

    Declaration

    Swift

    @inlinable
    func getScrollLockState() -> Bool
  • haveBidiLayouts() Extension method

    Determines if keyboard layouts for both right-to-left and left-to-right languages are in use.

    Declaration

    Swift

    @inlinable
    func haveBidiLayouts() -> Bool
  • lookup(key:) Extension method

    Looks up the keyval mapped to a keycode/group/level triplet. If no keyval is bound to key, returns 0. For normal user input, you want to use gdk_keymap_translate_keyboard_state() instead of this function, since the effective group/level may not be the same as the current keyboard state.

    Declaration

    Swift

    @inlinable
    func lookup<KeymapKeyT>(key: KeymapKeyT) -> Int where KeymapKeyT : KeymapKeyProtocol
  • mapVirtualModifiers(state:) Extension method

    Maps the virtual modifiers (i.e. Super, Hyper and Meta) which are set in state to their non-virtual counterparts (i.e. Mod2, Mod3,…) and set the corresponding bits in state.

    This function is useful when matching key events against accelerators.

    Declaration

    Swift

    @inlinable
    func mapVirtualModifiers(state: UnsafeMutablePointer<GdkModifierType>!) -> Bool
  • Translates the contents of a GdkEventKey into a keyval, effective group, and level. Modifiers that affected the translation and are thus unavailable for application use are returned in consumed_modifiers. See Groups for an explanation of groups and levels. The effective_group is the group that was actually used for the translation; some keys such as Enter are not affected by the active keyboard group. The level is derived from state. For convenience, GdkEventKey already contains the translated keyval, so this function isn’t as useful as you might think.

    consumed_modifiers gives modifiers that should be masked outfrom state when comparing this key press to a hot key. For instance, on a US keyboard, the plus symbol is shifted, so when comparing a key press to a &lt;Control&gt;plus accelerator &lt;Shift&gt; should be masked out.

    (C Language Example):

    // We want to ignore irrelevant modifiers like ScrollLock
    #define ALL_ACCELS_MASK (GDK_CONTROL_MASK | GDK_SHIFT_MASK | GDK_MOD1_MASK)
    gdk_keymap_translate_keyboard_state (keymap, event->hardware_keycode,
                                         event->state, event->group,
                                         &keyval, NULL, NULL, &consumed);
    if (keyval == GDK_PLUS &&
        (event->state & ~consumed & ALL_ACCELS_MASK) == GDK_CONTROL_MASK)
      // Control was pressed
    

    An older interpretation consumed_modifiers was that it contained all modifiers that might affect the translation of the key; this allowed accelerators to be stored with irrelevant consumed modifiers, by doing: (C Language Example):

    // XXX Don’t do this XXX
    if (keyval == accel_keyval &&
        (event->state & ~consumed & ALL_ACCELS_MASK) == (accel_mods & ~consumed))
      // Accelerator was pressed
    

    However, this did not work if multi-modifier combinations were used in the keymap, since, for instance, &lt;Control&gt; would be masked out even if only &lt;Control&gt;&lt;Alt&gt; was used in the keymap. To support this usage as well as well as possible, all single modifier combinations that could affect the key for any combination of modifiers will be returned in consumed_modifiers; multi-modifier combinations are returned only when actually found in state. When you store accelerators, you should always store them with consumed modifiers removed. Store &lt;Control&gt;plus, not &lt;Control&gt;&lt;Shift&gt;plus,

    Declaration

    Swift

    @inlinable
    func translateKeyboardState(hardwareKeycode: Int, state: ModifierType, group: Int, keyval: UnsafeMutablePointer<guint>! = nil, effectiveGroup: UnsafeMutablePointer<gint>! = nil, level: UnsafeMutablePointer<gint>! = nil, consumedModifiers: UnsafeMutablePointer<GdkModifierType>! = nil) -> Bool
  • capsLockState Extension method

    Returns whether the Caps Lock modifer is locked.

    Declaration

    Swift

    @inlinable
    var capsLockState: Bool { get }
  • direction Extension method

    Returns the direction of effective layout of the keymap.

    Declaration

    Swift

    @inlinable
    var direction: PangoDirection { get }
  • modifierState Extension method

    Returns the current modifier state.

    Declaration

    Swift

    @inlinable
    var modifierState: Int { get }
  • numLockState Extension method

    Returns whether the Num Lock modifer is locked.

    Declaration

    Swift

    @inlinable
    var numLockState: Bool { get }
  • scrollLockState Extension method

    Returns whether the Scroll Lock modifer is locked.

    Declaration

    Swift

    @inlinable
    var scrollLockState: Bool { get }