Sophie

Sophie

distrib > Fedora > 15 > i386 > by-pkgid > 404d46ca9bb341d7a0e7e04bc69da9df > files > 1200

ghc-gtk-devel-0.12.0-4.fc15.i686.rpm

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
<title>dist/build/Graphics/UI/Gtk/Gdk/Keymap.hs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a>
<a name="line-2"></a><span class='hs-comment'>{-# LINE 2 "./Graphics/UI/Gtk/Gdk/Keymap.chs" #-}</span>
<a name="line-3"></a><span class='hs-comment'>-- -*-haskell-*-</span>
<a name="line-4"></a><span class='hs-comment'>-- GIMP Toolkit (GTK) Widget Keymap</span>
<a name="line-5"></a><span class='hs-comment'>--</span>
<a name="line-6"></a><span class='hs-comment'>-- Author : Andy Stewart</span>
<a name="line-7"></a><span class='hs-comment'>--</span>
<a name="line-8"></a><span class='hs-comment'>-- Created: 30 Mar 2010</span>
<a name="line-9"></a><span class='hs-comment'>--</span>
<a name="line-10"></a><span class='hs-comment'>-- Copyright (C) 2010 Andy Stewart</span>
<a name="line-11"></a><span class='hs-comment'>--</span>
<a name="line-12"></a><span class='hs-comment'>-- This library is free software; you can redistribute it and/or</span>
<a name="line-13"></a><span class='hs-comment'>-- modify it under the terms of the GNU Lesser General Public</span>
<a name="line-14"></a><span class='hs-comment'>-- License as published by the Free Software Foundation; either</span>
<a name="line-15"></a><span class='hs-comment'>-- version 2.1 of the License, or (at your option) any later version.</span>
<a name="line-16"></a><span class='hs-comment'>--</span>
<a name="line-17"></a><span class='hs-comment'>-- This library is distributed in the hope that it will be useful,</span>
<a name="line-18"></a><span class='hs-comment'>-- but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<a name="line-19"></a><span class='hs-comment'>-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span>
<a name="line-20"></a><span class='hs-comment'>-- Lesser General Public License for more details.</span>
<a name="line-21"></a><span class='hs-comment'>--</span>
<a name="line-22"></a><span class='hs-comment'>-- |</span>
<a name="line-23"></a><span class='hs-comment'>-- Maintainer : gtk2hs-users@lists.sourceforge.net</span>
<a name="line-24"></a><span class='hs-comment'>-- Stability : provisional</span>
<a name="line-25"></a><span class='hs-comment'>-- Portability : portable (depends on GHC)</span>
<a name="line-26"></a><span class='hs-comment'>--</span>
<a name="line-27"></a><span class='hs-comment'>-- Functions for manipulating keyboard codes</span>
<a name="line-28"></a><span class='hs-comment'>--</span>
<a name="line-29"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Graphics</span><span class='hs-varop'>.</span><span class='hs-conid'>UI</span><span class='hs-varop'>.</span><span class='hs-conid'>Gtk</span><span class='hs-varop'>.</span><span class='hs-conid'>Gdk</span><span class='hs-varop'>.</span><span class='hs-conid'>Keymap</span> <span class='hs-layout'>(</span>
<a name="line-30"></a>
<a name="line-31"></a><span class='hs-comment'>-- * Details</span>
<a name="line-32"></a><span class='hs-comment'>--</span>
<a name="line-33"></a><span class='hs-comment'>-- | Key values are the codes which are sent whenever a key is pressed or released. They appear in the</span>
<a name="line-34"></a><span class='hs-comment'>-- keyval field of the 'EventKey' structure, which is passed to signal handlers for the</span>
<a name="line-35"></a><span class='hs-comment'>-- 'keyPressEvent' and 'keyReleaseEvent' signals.</span>
<a name="line-36"></a><span class='hs-comment'>--</span>
<a name="line-37"></a><span class='hs-comment'>-- Key values are regularly updated from the upstream X.org X11 implementation, so new values are added</span>
<a name="line-38"></a><span class='hs-comment'>-- regularly. They will be prefixed with GDK_ rather than XF86XK_ or ' (for older symbols)'.</span>
<a name="line-39"></a><span class='hs-comment'>--</span>
<a name="line-40"></a><span class='hs-comment'>-- Key values can be converted into a string representation using 'keyvalName'. The reverse</span>
<a name="line-41"></a><span class='hs-comment'>-- function, converting a string to a key value, is provided by 'keyvalFromName'.</span>
<a name="line-42"></a><span class='hs-comment'>--</span>
<a name="line-43"></a><span class='hs-comment'>-- The case of key values can be determined using 'keyvalIsUpper'. Key</span>
<a name="line-44"></a><span class='hs-comment'>-- values can be converted to upper or lower case using 'keyvalToUpper' and</span>
<a name="line-45"></a><span class='hs-comment'>-- 'keyvalToLower'.</span>
<a name="line-46"></a><span class='hs-comment'>--</span>
<a name="line-47"></a><span class='hs-comment'>-- When it makes sense, key values can be converted to and from Unicode characters with</span>
<a name="line-48"></a><span class='hs-comment'>-- 'keyvalToUnicode'.</span>
<a name="line-49"></a><span class='hs-comment'>--</span>
<a name="line-50"></a><span class='hs-comment'>-- One 'Keymap' object exists for each user display. 'keymapGetDefault' returns the 'Keymap'</span>
<a name="line-51"></a><span class='hs-comment'>-- for the default display; to obtain keymaps for other displays, use 'keymapGetForDisplay'. A</span>
<a name="line-52"></a><span class='hs-comment'>-- keymap is a mapping from 'KeymapKey' to key values. You can think of a 'KeymapKey' as a</span>
<a name="line-53"></a><span class='hs-comment'>-- representation of a symbol printed on a physical keyboard key. That is, it contains three pieces of</span>
<a name="line-54"></a><span class='hs-comment'>-- information. First, it contains the hardware keycode; this is an identifying number for a physical</span>
<a name="line-55"></a><span class='hs-comment'>-- key. Second, it contains the level of the key. The level indicates which symbol on the key will be</span>
<a name="line-56"></a><span class='hs-comment'>-- used, in a vertical direction. So on a standard US keyboard, the key with the number \"1\" on it also</span>
<a name="line-57"></a><span class='hs-comment'>-- has the exclamation point \"!\" character on it. The level indicates whether to use the \"1\" or the</span>
<a name="line-58"></a><span class='hs-comment'>-- \"!\" symbol. The letter keys are considered to have a lowercase letter at level 0, and an uppercase</span>
<a name="line-59"></a><span class='hs-comment'>-- letter at level 1, though only the uppercase letter is printed. Third, the 'KeymapKey' contains a</span>
<a name="line-60"></a><span class='hs-comment'>-- group; groups are not used on standard US keyboards, but are used in many other countries. On a</span>
<a name="line-61"></a><span class='hs-comment'>-- keyboard with groups, there can be 3 or 4 symbols printed on a single key. The group indicates</span>
<a name="line-62"></a><span class='hs-comment'>-- movement in a horizontal direction. Usually groups are used for two different languages. In group 0,</span>
<a name="line-63"></a><span class='hs-comment'>-- a key might have two English characters, and in group 1 it might have two Hebrew characters. The</span>
<a name="line-64"></a><span class='hs-comment'>-- Hebrew characters will be printed on the key next to the English characters.</span>
<a name="line-65"></a><span class='hs-comment'>--</span>
<a name="line-66"></a><span class='hs-comment'>-- In order to use a keymap to interpret a key event, it's necessary to first convert the keyboard</span>
<a name="line-67"></a><span class='hs-comment'>-- state into an effective group and level. This is done via a set of rules that varies widely</span>
<a name="line-68"></a><span class='hs-comment'>-- according to type of keyboard and user configuration. The function</span>
<a name="line-69"></a><span class='hs-comment'>-- 'keymapTranslateKeyboardState' accepts a keyboard state -- consisting of hardware keycode</span>
<a name="line-70"></a><span class='hs-comment'>-- pressed, active modifiers, and active group -- applies the appropriate rules, and returns the</span>
<a name="line-71"></a><span class='hs-comment'>-- group/level to be used to index the keymap, along with the modifiers which did not affect the group</span>
<a name="line-72"></a><span class='hs-comment'>-- and level. i.e. it returns "unconsumed modifiers." The keyboard group may differ from the effective</span>
<a name="line-73"></a><span class='hs-comment'>-- group used for keymap lookups because some keys don't have multiple groups - e.g. the Enter key is</span>
<a name="line-74"></a><span class='hs-comment'>-- always in group 0 regardless of keyboard state.</span>
<a name="line-75"></a><span class='hs-comment'>--</span>
<a name="line-76"></a><span class='hs-comment'>-- Note that 'keymapTranslateKeyboardState' also returns the keyval, i.e. it goes ahead and</span>
<a name="line-77"></a><span class='hs-comment'>-- performs the keymap lookup in addition to telling you which effective group/level values were used</span>
<a name="line-78"></a><span class='hs-comment'>-- for the lookup. 'EventKey' already contains this keyval, however, so you don't normally need to</span>
<a name="line-79"></a><span class='hs-comment'>-- call 'keymapTranslateKeyboardState' just to get the keyval.</span>
<a name="line-80"></a>
<a name="line-81"></a><span class='hs-comment'>-- * Class Hierarchy</span>
<a name="line-82"></a><span class='hs-comment'>--</span>
<a name="line-83"></a><span class='hs-comment'>-- |</span>
<a name="line-84"></a><span class='hs-comment'>-- @</span>
<a name="line-85"></a><span class='hs-comment'>-- | 'GObject'</span>
<a name="line-86"></a><span class='hs-comment'>-- | +----Keymap</span>
<a name="line-87"></a><span class='hs-comment'>-- @</span>
<a name="line-88"></a>
<a name="line-89"></a><span class='hs-comment'>-- * Types</span>
<a name="line-90"></a>  <span class='hs-conid'>Keymap</span><span class='hs-layout'>,</span>
<a name="line-91"></a>  <span class='hs-conid'>KeymapClass</span><span class='hs-layout'>,</span>
<a name="line-92"></a>  <span class='hs-varid'>castToKeymap</span><span class='hs-layout'>,</span>
<a name="line-93"></a>  <span class='hs-varid'>toKeymap</span><span class='hs-layout'>,</span>
<a name="line-94"></a>  <span class='hs-conid'>KeymapKey</span><span class='hs-layout'>,</span>
<a name="line-95"></a>
<a name="line-96"></a><span class='hs-comment'>-- * Methods</span>
<a name="line-97"></a>  <span class='hs-varid'>keymapGetDefault</span><span class='hs-layout'>,</span>
<a name="line-98"></a>
<a name="line-99"></a>  <span class='hs-varid'>keymapGetForDisplay</span><span class='hs-layout'>,</span>
<a name="line-100"></a>
<a name="line-101"></a>  <span class='hs-varid'>keymapLookupKey</span><span class='hs-layout'>,</span>
<a name="line-102"></a>  <span class='hs-varid'>keymapTranslateKeyboardState</span><span class='hs-layout'>,</span>
<a name="line-103"></a>  <span class='hs-varid'>keymapGetEntriesForKeyval</span><span class='hs-layout'>,</span>
<a name="line-104"></a>  <span class='hs-varid'>keymapGetEntriesForKeycode</span><span class='hs-layout'>,</span>
<a name="line-105"></a>  <span class='hs-varid'>keymapGetDirection</span><span class='hs-layout'>,</span>
<a name="line-106"></a>
<a name="line-107"></a>  <span class='hs-varid'>keymapHaveBidiLayouts</span><span class='hs-layout'>,</span>
<a name="line-108"></a>
<a name="line-109"></a>
<a name="line-110"></a>  <span class='hs-varid'>keymapGetCapsLockState</span><span class='hs-layout'>,</span>
<a name="line-111"></a>
<a name="line-112"></a>
<a name="line-113"></a><span class='hs-comment'>-- * Signals</span>
<a name="line-114"></a>
<a name="line-115"></a>  <span class='hs-varid'>keymapDirectionChanged</span><span class='hs-layout'>,</span>
<a name="line-116"></a>
<a name="line-117"></a>  <span class='hs-varid'>keymapKeysChanged</span><span class='hs-layout'>,</span>
<a name="line-118"></a>
<a name="line-119"></a>  <span class='hs-varid'>keymapStateChanged</span><span class='hs-layout'>,</span>
<a name="line-120"></a>
<a name="line-121"></a>
<a name="line-122"></a>
<a name="line-123"></a>  <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-124"></a>
<a name="line-125"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span> <span class='hs-layout'>(</span><span class='hs-varid'>liftM</span><span class='hs-layout'>)</span>
<a name="line-126"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Maybe</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromMaybe</span><span class='hs-layout'>)</span>
<a name="line-127"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>System</span><span class='hs-varop'>.</span><span class='hs-conid'>Glib</span><span class='hs-varop'>.</span><span class='hs-conid'>FFI</span>
<a name="line-128"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>System</span><span class='hs-varop'>.</span><span class='hs-conid'>Glib</span><span class='hs-varop'>.</span><span class='hs-conid'>UTFString</span>
<a name="line-129"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Graphics</span><span class='hs-varop'>.</span><span class='hs-conid'>UI</span><span class='hs-varop'>.</span><span class='hs-conid'>Gtk</span><span class='hs-varop'>.</span><span class='hs-conid'>Gdk</span><span class='hs-varop'>.</span><span class='hs-conid'>Enums</span> <span class='hs-layout'>(</span><span class='hs-conid'>Modifier</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-130"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Graphics</span><span class='hs-varop'>.</span><span class='hs-conid'>UI</span><span class='hs-varop'>.</span><span class='hs-conid'>Gtk</span><span class='hs-varop'>.</span><span class='hs-conid'>Gdk</span><span class='hs-varop'>.</span><span class='hs-conid'>Keys</span> <span class='hs-layout'>(</span><span class='hs-conid'>KeyVal</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-131"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Graphics</span><span class='hs-varop'>.</span><span class='hs-conid'>Rendering</span><span class='hs-varop'>.</span><span class='hs-conid'>Pango</span><span class='hs-varop'>.</span><span class='hs-conid'>Enums</span>
<a name="line-132"></a><span class='hs-comment'>{-# LINE 131 "./Graphics/UI/Gtk/Gdk/Keymap.chs" #-}</span>
<a name="line-133"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Graphics</span><span class='hs-varop'>.</span><span class='hs-conid'>UI</span><span class='hs-varop'>.</span><span class='hs-conid'>Gtk</span><span class='hs-varop'>.</span><span class='hs-conid'>Types</span>
<a name="line-134"></a><span class='hs-comment'>{-# LINE 132 "./Graphics/UI/Gtk/Gdk/Keymap.chs" #-}</span>
<a name="line-135"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Graphics</span><span class='hs-varop'>.</span><span class='hs-conid'>UI</span><span class='hs-varop'>.</span><span class='hs-conid'>Gtk</span><span class='hs-varop'>.</span><span class='hs-conid'>Signals</span>
<a name="line-136"></a><span class='hs-comment'>{-# LINE 133 "./Graphics/UI/Gtk/Gdk/Keymap.chs" #-}</span>
<a name="line-137"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Graphics</span><span class='hs-varop'>.</span><span class='hs-conid'>UI</span><span class='hs-varop'>.</span><span class='hs-conid'>Gtk</span><span class='hs-varop'>.</span><span class='hs-conid'>General</span><span class='hs-varop'>.</span><span class='hs-conid'>Structs</span> <span class='hs-layout'>(</span><span class='hs-conid'>KeymapKey</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-138"></a>
<a name="line-139"></a>
<a name="line-140"></a><span class='hs-comment'>{-# LINE 136 "./Graphics/UI/Gtk/Gdk/Keymap.chs" #-}</span>
<a name="line-141"></a>
<a name="line-142"></a><span class='hs-comment'>--------------------</span>
<a name="line-143"></a><span class='hs-comment'>-- Methods</span>
<a name="line-144"></a>
<a name="line-145"></a><a name="keymapGetDefault"></a><span class='hs-comment'>-- | Returns the 'Keymap' attached to the default display.</span>
<a name="line-146"></a><span class='hs-comment'>--</span>
<a name="line-147"></a><span class='hs-definition'>keymapGetDefault</span> <span class='hs-keyglyph'>::</span>
<a name="line-148"></a>    <span class='hs-conid'>IO</span> <span class='hs-conid'>Keymap</span> <span class='hs-comment'>-- ^ returns the 'Keymap' attached to the default display.</span>
<a name="line-149"></a><span class='hs-definition'>keymapGetDefault</span> <span class='hs-keyglyph'>=</span>
<a name="line-150"></a>  <span class='hs-varid'>makeNewGObject</span> <span class='hs-varid'>mkKeymap</span> <span class='hs-varop'>$</span>
<a name="line-151"></a>  <span class='hs-varid'>gdk_keymap_get_default</span>
<a name="line-152"></a><span class='hs-comment'>{-# LINE 147 "./Graphics/UI/Gtk/Gdk/Keymap.chs" #-}</span>
<a name="line-153"></a>
<a name="line-154"></a>
<a name="line-155"></a><a name="keymapGetForDisplay"></a><span class='hs-comment'>-- | Returns the 'Keymap' attached to @display@.</span>
<a name="line-156"></a><span class='hs-comment'>--</span>
<a name="line-157"></a><span class='hs-comment'>-- * Available since Gdk version 2.2</span>
<a name="line-158"></a><span class='hs-comment'>--</span>
<a name="line-159"></a><span class='hs-definition'>keymapGetForDisplay</span> <span class='hs-keyglyph'>::</span>
<a name="line-160"></a>    <span class='hs-conid'>Display</span> <span class='hs-comment'>-- ^ @display@ - the 'Display'.</span>
<a name="line-161"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>Keymap</span> <span class='hs-comment'>-- ^ returns the 'Keymap' attached to @display@.</span>
<a name="line-162"></a><span class='hs-definition'>keymapGetForDisplay</span> <span class='hs-varid'>display</span> <span class='hs-keyglyph'>=</span>
<a name="line-163"></a>  <span class='hs-varid'>makeNewGObject</span> <span class='hs-varid'>mkKeymap</span> <span class='hs-varop'>$</span>
<a name="line-164"></a>  <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-conid'>Display</span> <span class='hs-varid'>arg1</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>withForeignPtr</span> <span class='hs-varid'>arg1</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>argPtr1</span> <span class='hs-keyglyph'>-&gt;</span><span class='hs-varid'>gdk_keymap_get_for_display</span> <span class='hs-varid'>argPtr1</span><span class='hs-layout'>)</span>
<a name="line-165"></a><span class='hs-comment'>{-# LINE 159 "./Graphics/UI/Gtk/Gdk/Keymap.chs" #-}</span>
<a name="line-166"></a>    <span class='hs-varid'>display</span>
<a name="line-167"></a>
<a name="line-168"></a>
<a name="line-169"></a><a name="keymapLookupKey"></a><span class='hs-comment'>-- | Looks up the keyval mapped to a keycode\/group\/level triplet. If no</span>
<a name="line-170"></a><span class='hs-comment'>-- keyval is bound to @key@, returns 0. For normal user input, you want to use</span>
<a name="line-171"></a><span class='hs-comment'>-- 'keymapTranslateKeyboardState' instead of this function, since the effective</span>
<a name="line-172"></a><span class='hs-comment'>-- group\/level may not be the same as the current keyboard state.</span>
<a name="line-173"></a><span class='hs-comment'>--</span>
<a name="line-174"></a><span class='hs-definition'>keymapLookupKey</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>KeymapClass</span> <span class='hs-varid'>self</span>
<a name="line-175"></a>                <span class='hs-keyglyph'>=&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-varid'>self</span><span class='hs-layout'>)</span> <span class='hs-comment'>-- ^ @keymap@ a 'Keymap' or 'Nothing' to use the default keymap</span>
<a name="line-176"></a>                <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>KeymapKey</span> <span class='hs-comment'>-- ^ @key@ - a 'KeymapKey'</span>
<a name="line-177"></a>                            <span class='hs-comment'>-- with keycode, group, and level initialized</span>
<a name="line-178"></a>                <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>Int</span> <span class='hs-comment'>-- ^ returns a keyval, or 0 if none was mapped to</span>
<a name="line-179"></a>                            <span class='hs-comment'>-- the given @key@</span>
<a name="line-180"></a><span class='hs-definition'>keymapLookupKey</span> <span class='hs-conid'>Nothing</span> <span class='hs-varid'>key</span> <span class='hs-keyglyph'>=</span>
<a name="line-181"></a>  <span class='hs-varid'>liftM</span> <span class='hs-varid'>fromIntegral</span> <span class='hs-varop'>$</span>
<a name="line-182"></a>  <span class='hs-varid'>allocaBytes</span> <span class='hs-num'>12</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span> <span class='hs-varid'>keyPtr</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span>
<a name="line-183"></a>    <span class='hs-varid'>poke</span> <span class='hs-varid'>keyPtr</span> <span class='hs-varid'>key</span>
<a name="line-184"></a>    <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-conid'>Keymap</span> <span class='hs-varid'>arg1</span><span class='hs-layout'>)</span> <span class='hs-varid'>arg2</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>withForeignPtr</span> <span class='hs-varid'>arg1</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>argPtr1</span> <span class='hs-keyglyph'>-&gt;</span><span class='hs-varid'>gdk_keymap_lookup_key</span> <span class='hs-varid'>argPtr1</span> <span class='hs-varid'>arg2</span><span class='hs-layout'>)</span>
<a name="line-185"></a><span class='hs-comment'>{-# LINE 178 "./Graphics/UI/Gtk/Gdk/Keymap.chs" #-}</span>
<a name="line-186"></a>      <span class='hs-layout'>(</span><span class='hs-conid'>Keymap</span> <span class='hs-varid'>nullForeignPtr</span><span class='hs-layout'>)</span>
<a name="line-187"></a>      <span class='hs-layout'>(</span><span class='hs-varid'>castPtr</span> <span class='hs-varid'>keyPtr</span><span class='hs-layout'>)</span>
<a name="line-188"></a><span class='hs-definition'>keymapLookupKey</span> <span class='hs-layout'>(</span><span class='hs-conid'>Just</span> <span class='hs-varid'>self</span><span class='hs-layout'>)</span> <span class='hs-varid'>key</span> <span class='hs-keyglyph'>=</span>
<a name="line-189"></a>  <span class='hs-varid'>liftM</span> <span class='hs-varid'>fromIntegral</span> <span class='hs-varop'>$</span>
<a name="line-190"></a>  <span class='hs-varid'>allocaBytes</span> <span class='hs-num'>12</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span> <span class='hs-varid'>keyPtr</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span>
<a name="line-191"></a>    <span class='hs-varid'>poke</span> <span class='hs-varid'>keyPtr</span> <span class='hs-varid'>key</span>
<a name="line-192"></a>    <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-conid'>Keymap</span> <span class='hs-varid'>arg1</span><span class='hs-layout'>)</span> <span class='hs-varid'>arg2</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>withForeignPtr</span> <span class='hs-varid'>arg1</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>argPtr1</span> <span class='hs-keyglyph'>-&gt;</span><span class='hs-varid'>gdk_keymap_lookup_key</span> <span class='hs-varid'>argPtr1</span> <span class='hs-varid'>arg2</span><span class='hs-layout'>)</span>
<a name="line-193"></a><span class='hs-comment'>{-# LINE 185 "./Graphics/UI/Gtk/Gdk/Keymap.chs" #-}</span>
<a name="line-194"></a>      <span class='hs-layout'>(</span><span class='hs-varid'>toKeymap</span> <span class='hs-varid'>self</span><span class='hs-layout'>)</span>
<a name="line-195"></a>      <span class='hs-layout'>(</span><span class='hs-varid'>castPtr</span> <span class='hs-varid'>keyPtr</span><span class='hs-layout'>)</span>
<a name="line-196"></a>
<a name="line-197"></a><a name="keymapTranslateKeyboardState"></a><span class='hs-comment'>-- | Translates the contents of a 'EventKey' into a</span>
<a name="line-198"></a><span class='hs-comment'>-- keyval, effective group, and level. Modifiers that affected the translation</span>
<a name="line-199"></a><span class='hs-comment'>-- and are thus unavailable for application use are returned in</span>
<a name="line-200"></a><span class='hs-comment'>-- @consumedModifiers@. See 'keyvalGetKeys' for an explanation of groups and</span>
<a name="line-201"></a><span class='hs-comment'>-- levels. The @effectiveGroup@ is the group that was actually used for the</span>
<a name="line-202"></a><span class='hs-comment'>-- translation; some keys such as Enter are not affected by the active keyboard</span>
<a name="line-203"></a><span class='hs-comment'>-- group. The @level@ is derived from @state@. For convenience, 'EventKey'</span>
<a name="line-204"></a><span class='hs-comment'>-- already contains the translated keyval, so this function</span>
<a name="line-205"></a><span class='hs-comment'>-- isn't as useful as you might think.</span>
<a name="line-206"></a><span class='hs-comment'>--</span>
<a name="line-207"></a><span class='hs-definition'>keymapTranslateKeyboardState</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>KeymapClass</span> <span class='hs-varid'>self</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-varid'>self</span>
<a name="line-208"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Int</span> <span class='hs-comment'>-- ^ @hardwareKeycode@ - a keycode</span>
<a name="line-209"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Modifier</span> <span class='hs-comment'>-- ^ @state@ - a modifier state</span>
<a name="line-210"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Int</span> <span class='hs-comment'>-- ^ @group@ - active keyboard group</span>
<a name="line-211"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-layout'>(</span><span class='hs-conid'>Int</span><span class='hs-layout'>,</span> <span class='hs-conid'>Int</span><span class='hs-layout'>,</span> <span class='hs-conid'>Int</span><span class='hs-layout'>,</span> <span class='hs-conid'>Modifier</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-212"></a><span class='hs-definition'>keymapTranslateKeyboardState</span> <span class='hs-varid'>self</span> <span class='hs-varid'>hardwareKeycode</span> <span class='hs-varid'>state</span> <span class='hs-varid'>group</span> <span class='hs-keyglyph'>=</span>
<a name="line-213"></a>  <span class='hs-varid'>alloca</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>keyvalPtr</span> <span class='hs-keyglyph'>-&gt;</span>
<a name="line-214"></a>  <span class='hs-varid'>alloca</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>effectiveGroupPtr</span> <span class='hs-keyglyph'>-&gt;</span>
<a name="line-215"></a>  <span class='hs-varid'>alloca</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>levelPtr</span> <span class='hs-keyglyph'>-&gt;</span>
<a name="line-216"></a>  <span class='hs-varid'>alloca</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>modifierPtr</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span>
<a name="line-217"></a>    <span class='hs-varid'>success</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>liftM</span> <span class='hs-varid'>toBool</span> <span class='hs-varop'>$</span>
<a name="line-218"></a>              <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-conid'>Keymap</span> <span class='hs-varid'>arg1</span><span class='hs-layout'>)</span> <span class='hs-varid'>arg2</span> <span class='hs-varid'>arg3</span> <span class='hs-varid'>arg4</span> <span class='hs-varid'>arg5</span> <span class='hs-varid'>arg6</span> <span class='hs-varid'>arg7</span> <span class='hs-varid'>arg8</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>withForeignPtr</span> <span class='hs-varid'>arg1</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>argPtr1</span> <span class='hs-keyglyph'>-&gt;</span><span class='hs-varid'>gdk_keymap_translate_keyboard_state</span> <span class='hs-varid'>argPtr1</span> <span class='hs-varid'>arg2</span> <span class='hs-varid'>arg3</span> <span class='hs-varid'>arg4</span> <span class='hs-varid'>arg5</span> <span class='hs-varid'>arg6</span> <span class='hs-varid'>arg7</span> <span class='hs-varid'>arg8</span><span class='hs-layout'>)</span>
<a name="line-219"></a><span class='hs-comment'>{-# LINE 210 "./Graphics/UI/Gtk/Gdk/Keymap.chs" #-}</span>
<a name="line-220"></a>                <span class='hs-layout'>(</span><span class='hs-varid'>toKeymap</span> <span class='hs-varid'>self</span><span class='hs-layout'>)</span>
<a name="line-221"></a>                <span class='hs-layout'>(</span><span class='hs-varid'>fromIntegral</span> <span class='hs-varid'>hardwareKeycode</span><span class='hs-layout'>)</span>
<a name="line-222"></a>                <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-varid'>fromIntegral</span> <span class='hs-varop'>.</span> <span class='hs-varid'>fromEnum</span><span class='hs-layout'>)</span> <span class='hs-varid'>state</span><span class='hs-layout'>)</span>
<a name="line-223"></a>                <span class='hs-layout'>(</span><span class='hs-varid'>fromIntegral</span> <span class='hs-varid'>group</span><span class='hs-layout'>)</span>
<a name="line-224"></a>                <span class='hs-varid'>keyvalPtr</span>
<a name="line-225"></a>                <span class='hs-varid'>effectiveGroupPtr</span>
<a name="line-226"></a>                <span class='hs-varid'>levelPtr</span>
<a name="line-227"></a>                <span class='hs-varid'>modifierPtr</span>
<a name="line-228"></a>    <span class='hs-keyword'>if</span> <span class='hs-varid'>success</span>
<a name="line-229"></a>       <span class='hs-keyword'>then</span> <span class='hs-keyword'>do</span>
<a name="line-230"></a>         <span class='hs-varid'>keyval</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>peek</span> <span class='hs-varid'>keyvalPtr</span>
<a name="line-231"></a>         <span class='hs-varid'>effectiveGroup</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>peek</span> <span class='hs-varid'>effectiveGroupPtr</span>
<a name="line-232"></a>         <span class='hs-varid'>level</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>peek</span> <span class='hs-varid'>levelPtr</span>
<a name="line-233"></a>         <span class='hs-varid'>modifier</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>peek</span> <span class='hs-varid'>modifierPtr</span>
<a name="line-234"></a>         <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>Just</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromIntegral</span> <span class='hs-varid'>keyval</span>
<a name="line-235"></a>                      <span class='hs-layout'>,</span><span class='hs-varid'>fromIntegral</span> <span class='hs-varid'>effectiveGroup</span>
<a name="line-236"></a>                      <span class='hs-layout'>,</span><span class='hs-varid'>fromIntegral</span> <span class='hs-varid'>level</span>
<a name="line-237"></a>                      <span class='hs-layout'>,</span><span class='hs-varid'>toEnum</span> <span class='hs-varop'>$</span> <span class='hs-varid'>fromIntegral</span> <span class='hs-varid'>modifier</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-238"></a>       <span class='hs-keyword'>else</span> <span class='hs-varid'>return</span> <span class='hs-conid'>Nothing</span>
<a name="line-239"></a>
<a name="line-240"></a><a name="keymapGetEntriesForKeyval"></a><span class='hs-comment'>-- | Obtains a list of keycode\/group\/level combinations that will generate</span>
<a name="line-241"></a><span class='hs-comment'>-- @keyval@. Groups and levels are two kinds of keyboard mode; in general, the</span>
<a name="line-242"></a><span class='hs-comment'>-- level determines whether the top or bottom symbol on a key is used, and the</span>
<a name="line-243"></a><span class='hs-comment'>-- group determines whether the left or right symbol is used. On US keyboards,</span>
<a name="line-244"></a><span class='hs-comment'>-- the shift key changes the keyboard level, and there are no groups. A group</span>
<a name="line-245"></a><span class='hs-comment'>-- switch key might convert a keyboard between Hebrew to English modes, for</span>
<a name="line-246"></a><span class='hs-comment'>-- example. 'EventKey' contains a @group@ field that</span>
<a name="line-247"></a><span class='hs-comment'>-- indicates the active keyboard group. The level is computed from the modifier</span>
<a name="line-248"></a><span class='hs-comment'>-- mask.</span>
<a name="line-249"></a><span class='hs-comment'>--</span>
<a name="line-250"></a><span class='hs-definition'>keymapGetEntriesForKeyval</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>KeymapClass</span> <span class='hs-varid'>self</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-varid'>self</span>
<a name="line-251"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>KeyVal</span> <span class='hs-comment'>-- ^ @keyval@ - a keyval, such as @GDK_a@, @GDK_Up@,</span>
<a name="line-252"></a>                       <span class='hs-comment'>-- @GDK_Return@, etc.</span>
<a name="line-253"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>KeymapKey</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-254"></a><span class='hs-definition'>keymapGetEntriesForKeyval</span> <span class='hs-varid'>self</span> <span class='hs-varid'>keyval</span> <span class='hs-keyglyph'>=</span>
<a name="line-255"></a>  <span class='hs-varid'>alloca</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>nKeysPtr</span> <span class='hs-keyglyph'>-&gt;</span>
<a name="line-256"></a>  <span class='hs-varid'>allocaArray</span> <span class='hs-num'>0</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span> <span class='hs-varid'>keysPtr</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span>
<a name="line-257"></a>    <span class='hs-varid'>success</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>liftM</span> <span class='hs-varid'>toBool</span> <span class='hs-varop'>$</span>
<a name="line-258"></a>              <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-conid'>Keymap</span> <span class='hs-varid'>arg1</span><span class='hs-layout'>)</span> <span class='hs-varid'>arg2</span> <span class='hs-varid'>arg3</span> <span class='hs-varid'>arg4</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>withForeignPtr</span> <span class='hs-varid'>arg1</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>argPtr1</span> <span class='hs-keyglyph'>-&gt;</span><span class='hs-varid'>gdk_keymap_get_entries_for_keyval</span> <span class='hs-varid'>argPtr1</span> <span class='hs-varid'>arg2</span> <span class='hs-varid'>arg3</span> <span class='hs-varid'>arg4</span><span class='hs-layout'>)</span>
<a name="line-259"></a><span class='hs-comment'>{-# LINE 249 "./Graphics/UI/Gtk/Gdk/Keymap.chs" #-}</span>
<a name="line-260"></a>                <span class='hs-layout'>(</span><span class='hs-varid'>toKeymap</span> <span class='hs-varid'>self</span><span class='hs-layout'>)</span>
<a name="line-261"></a>                <span class='hs-layout'>(</span><span class='hs-varid'>fromIntegral</span> <span class='hs-varid'>keyval</span><span class='hs-layout'>)</span>
<a name="line-262"></a>                <span class='hs-layout'>(</span><span class='hs-varid'>castPtr</span> <span class='hs-varid'>keysPtr</span><span class='hs-layout'>)</span>
<a name="line-263"></a>                <span class='hs-varid'>nKeysPtr</span>
<a name="line-264"></a>    <span class='hs-keyword'>if</span> <span class='hs-varid'>success</span>
<a name="line-265"></a>       <span class='hs-keyword'>then</span> <span class='hs-keyword'>do</span>
<a name="line-266"></a>         <span class='hs-varid'>nKeys</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>liftM</span> <span class='hs-varid'>fromIntegral</span> <span class='hs-varop'>$</span> <span class='hs-varid'>peek</span> <span class='hs-varid'>nKeysPtr</span>
<a name="line-267"></a>         <span class='hs-varid'>keys</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>peekArray</span> <span class='hs-varid'>nKeys</span> <span class='hs-varid'>keysPtr</span>
<a name="line-268"></a>         <span class='hs-varid'>keyList</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>mapM</span> <span class='hs-varid'>peek</span> <span class='hs-varid'>keys</span>
<a name="line-269"></a>         <span class='hs-varid'>g_free</span> <span class='hs-layout'>(</span><span class='hs-varid'>castPtr</span> <span class='hs-varid'>keysPtr</span><span class='hs-layout'>)</span>
<a name="line-270"></a>         <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>Just</span> <span class='hs-varid'>keyList</span><span class='hs-layout'>)</span>
<a name="line-271"></a>       <span class='hs-keyword'>else</span> <span class='hs-varid'>return</span> <span class='hs-conid'>Nothing</span>
<a name="line-272"></a>
<a name="line-273"></a><a name="keymapGetEntriesForKeycode"></a><span class='hs-comment'>-- | Returns the keyvals bound to @hardwareKeycode@. The Nth 'KeymapKey'</span>
<a name="line-274"></a><span class='hs-comment'>-- in @keys@ is bound to the Nth keyval in @keyvals@.</span>
<a name="line-275"></a><span class='hs-comment'>-- When a keycode is pressed by the user, the</span>
<a name="line-276"></a><span class='hs-comment'>-- keyval from this list of entries is selected by considering the effective</span>
<a name="line-277"></a><span class='hs-comment'>-- keyboard group and level. See 'keymapTranslateKeyboardState'.</span>
<a name="line-278"></a><span class='hs-comment'>--</span>
<a name="line-279"></a><span class='hs-definition'>keymapGetEntriesForKeycode</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>KeymapClass</span> <span class='hs-varid'>self</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-varid'>self</span>
<a name="line-280"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Int</span> <span class='hs-comment'>-- ^ @hardwareKeycode@ - a keycode</span>
<a name="line-281"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>[</span><span class='hs-conid'>KeymapKey</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>,</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>KeyVal</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-282"></a><span class='hs-definition'>keymapGetEntriesForKeycode</span> <span class='hs-varid'>self</span> <span class='hs-varid'>hardwareKeycode</span> <span class='hs-keyglyph'>=</span>
<a name="line-283"></a>  <span class='hs-varid'>alloca</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>nEntriesPtr</span> <span class='hs-keyglyph'>-&gt;</span>
<a name="line-284"></a>  <span class='hs-varid'>allocaArray</span> <span class='hs-num'>0</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span> <span class='hs-varid'>keysPtr</span> <span class='hs-keyglyph'>-&gt;</span>
<a name="line-285"></a>  <span class='hs-varid'>allocaArray</span> <span class='hs-num'>0</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span> <span class='hs-varid'>keyvalsPtr</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span>
<a name="line-286"></a>    <span class='hs-varid'>success</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>liftM</span> <span class='hs-varid'>toBool</span> <span class='hs-varop'>$</span>
<a name="line-287"></a>              <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-conid'>Keymap</span> <span class='hs-varid'>arg1</span><span class='hs-layout'>)</span> <span class='hs-varid'>arg2</span> <span class='hs-varid'>arg3</span> <span class='hs-varid'>arg4</span> <span class='hs-varid'>arg5</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>withForeignPtr</span> <span class='hs-varid'>arg1</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>argPtr1</span> <span class='hs-keyglyph'>-&gt;</span><span class='hs-varid'>gdk_keymap_get_entries_for_keycode</span> <span class='hs-varid'>argPtr1</span> <span class='hs-varid'>arg2</span> <span class='hs-varid'>arg3</span> <span class='hs-varid'>arg4</span> <span class='hs-varid'>arg5</span><span class='hs-layout'>)</span>
<a name="line-288"></a><span class='hs-comment'>{-# LINE 277 "./Graphics/UI/Gtk/Gdk/Keymap.chs" #-}</span>
<a name="line-289"></a>                <span class='hs-layout'>(</span><span class='hs-varid'>toKeymap</span> <span class='hs-varid'>self</span><span class='hs-layout'>)</span>
<a name="line-290"></a>                <span class='hs-layout'>(</span><span class='hs-varid'>fromIntegral</span> <span class='hs-varid'>hardwareKeycode</span><span class='hs-layout'>)</span>
<a name="line-291"></a>                <span class='hs-layout'>(</span><span class='hs-varid'>castPtr</span> <span class='hs-varid'>keysPtr</span><span class='hs-layout'>)</span>
<a name="line-292"></a>                <span class='hs-varid'>keyvalsPtr</span>
<a name="line-293"></a>                <span class='hs-varid'>nEntriesPtr</span>
<a name="line-294"></a>    <span class='hs-keyword'>if</span> <span class='hs-varid'>success</span>
<a name="line-295"></a>       <span class='hs-keyword'>then</span> <span class='hs-keyword'>do</span>
<a name="line-296"></a>         <span class='hs-varid'>nEntries</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>liftM</span> <span class='hs-varid'>fromIntegral</span> <span class='hs-varop'>$</span> <span class='hs-varid'>peek</span> <span class='hs-varid'>nEntriesPtr</span>
<a name="line-297"></a>         <span class='hs-varid'>keys</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>peekArray</span> <span class='hs-varid'>nEntries</span> <span class='hs-varid'>keysPtr</span>
<a name="line-298"></a>         <span class='hs-varid'>keyvals</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>peekArray</span> <span class='hs-varid'>nEntries</span> <span class='hs-varid'>keyvalsPtr</span>
<a name="line-299"></a>         <span class='hs-varid'>keyvalsList</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>mapM</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>x</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>liftM</span> <span class='hs-varid'>fromIntegral</span> <span class='hs-varop'>$</span> <span class='hs-varid'>peek</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-varid'>keyvals</span>
<a name="line-300"></a>         <span class='hs-varid'>keysList</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>mapM</span> <span class='hs-varid'>peek</span> <span class='hs-varid'>keys</span>
<a name="line-301"></a>         <span class='hs-varid'>g_free</span> <span class='hs-layout'>(</span><span class='hs-varid'>castPtr</span> <span class='hs-varid'>keysPtr</span><span class='hs-layout'>)</span>
<a name="line-302"></a>         <span class='hs-varid'>g_free</span> <span class='hs-layout'>(</span><span class='hs-varid'>castPtr</span> <span class='hs-varid'>keyvalsPtr</span><span class='hs-layout'>)</span>
<a name="line-303"></a>         <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>Just</span> <span class='hs-layout'>(</span><span class='hs-varid'>keysList</span><span class='hs-layout'>,</span> <span class='hs-varid'>keyvalsList</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-304"></a>       <span class='hs-keyword'>else</span> <span class='hs-varid'>return</span> <span class='hs-conid'>Nothing</span>
<a name="line-305"></a>
<a name="line-306"></a><a name="keymapGetDirection"></a><span class='hs-comment'>-- | Returns the direction of effective layout of the keymap.</span>
<a name="line-307"></a><span class='hs-comment'>--</span>
<a name="line-308"></a><span class='hs-comment'>-- Returns the direction of the keymap.</span>
<a name="line-309"></a><span class='hs-comment'>--</span>
<a name="line-310"></a><span class='hs-definition'>keymapGetDirection</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>KeymapClass</span> <span class='hs-varid'>self</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-varid'>self</span>
<a name="line-311"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>PangoDirection</span> <span class='hs-comment'>-- ^ returns 'DirectionLtr' or 'DirectionRtl' if it can</span>
<a name="line-312"></a>                 <span class='hs-comment'>-- determine the direction. 'DirectionNeutral' otherwise.</span>
<a name="line-313"></a><span class='hs-definition'>keymapGetDirection</span> <span class='hs-varid'>self</span> <span class='hs-keyglyph'>=</span>
<a name="line-314"></a>  <span class='hs-varid'>liftM</span> <span class='hs-layout'>(</span><span class='hs-varid'>toEnum</span> <span class='hs-varop'>.</span> <span class='hs-varid'>fromIntegral</span><span class='hs-layout'>)</span> <span class='hs-varop'>$</span>
<a name="line-315"></a>  <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-conid'>Keymap</span> <span class='hs-varid'>arg1</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>withForeignPtr</span> <span class='hs-varid'>arg1</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>argPtr1</span> <span class='hs-keyglyph'>-&gt;</span><span class='hs-varid'>gdk_keymap_get_direction</span> <span class='hs-varid'>argPtr1</span><span class='hs-layout'>)</span>
<a name="line-316"></a><span class='hs-comment'>{-# LINE 304 "./Graphics/UI/Gtk/Gdk/Keymap.chs" #-}</span>
<a name="line-317"></a>    <span class='hs-layout'>(</span><span class='hs-varid'>toKeymap</span> <span class='hs-varid'>self</span><span class='hs-layout'>)</span>
<a name="line-318"></a>
<a name="line-319"></a>
<a name="line-320"></a><a name="keymapHaveBidiLayouts"></a><span class='hs-comment'>-- | Determines if keyboard layouts for both right-to-left and left-to-right</span>
<a name="line-321"></a><span class='hs-comment'>-- languages are in use.</span>
<a name="line-322"></a><span class='hs-comment'>--</span>
<a name="line-323"></a><span class='hs-comment'>-- * Available since Gdk version 2.12</span>
<a name="line-324"></a><span class='hs-comment'>--</span>
<a name="line-325"></a><span class='hs-definition'>keymapHaveBidiLayouts</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>KeymapClass</span> <span class='hs-varid'>self</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-varid'>self</span>
<a name="line-326"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>Bool</span> <span class='hs-comment'>-- ^ returns @True@ if there are layouts in both directions,</span>
<a name="line-327"></a>            <span class='hs-comment'>-- @False@ otherwise</span>
<a name="line-328"></a><span class='hs-definition'>keymapHaveBidiLayouts</span> <span class='hs-varid'>self</span> <span class='hs-keyglyph'>=</span>
<a name="line-329"></a>  <span class='hs-varid'>liftM</span> <span class='hs-varid'>toBool</span> <span class='hs-varop'>$</span>
<a name="line-330"></a>  <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-conid'>Keymap</span> <span class='hs-varid'>arg1</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>withForeignPtr</span> <span class='hs-varid'>arg1</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>argPtr1</span> <span class='hs-keyglyph'>-&gt;</span><span class='hs-varid'>gdk_keymap_have_bidi_layouts</span> <span class='hs-varid'>argPtr1</span><span class='hs-layout'>)</span>
<a name="line-331"></a><span class='hs-comment'>{-# LINE 318 "./Graphics/UI/Gtk/Gdk/Keymap.chs" #-}</span>
<a name="line-332"></a>    <span class='hs-layout'>(</span><span class='hs-varid'>toKeymap</span> <span class='hs-varid'>self</span><span class='hs-layout'>)</span>
<a name="line-333"></a>
<a name="line-334"></a>
<a name="line-335"></a>
<a name="line-336"></a><a name="keymapGetCapsLockState"></a><span class='hs-comment'>-- | Returns whether the Caps Lock modifer is locked.</span>
<a name="line-337"></a><span class='hs-comment'>--</span>
<a name="line-338"></a><span class='hs-comment'>-- * Available since Gdk version 2.16</span>
<a name="line-339"></a><span class='hs-comment'>--</span>
<a name="line-340"></a><span class='hs-definition'>keymapGetCapsLockState</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>KeymapClass</span> <span class='hs-varid'>self</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-varid'>self</span>
<a name="line-341"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>Bool</span> <span class='hs-comment'>-- ^ returns @True@ if Caps Lock is on</span>
<a name="line-342"></a><span class='hs-definition'>keymapGetCapsLockState</span> <span class='hs-varid'>self</span> <span class='hs-keyglyph'>=</span>
<a name="line-343"></a>  <span class='hs-varid'>liftM</span> <span class='hs-varid'>toBool</span> <span class='hs-varop'>$</span>
<a name="line-344"></a>  <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-conid'>Keymap</span> <span class='hs-varid'>arg1</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>withForeignPtr</span> <span class='hs-varid'>arg1</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>argPtr1</span> <span class='hs-keyglyph'>-&gt;</span><span class='hs-varid'>gdk_keymap_get_caps_lock_state</span> <span class='hs-varid'>argPtr1</span><span class='hs-layout'>)</span>
<a name="line-345"></a><span class='hs-comment'>{-# LINE 331 "./Graphics/UI/Gtk/Gdk/Keymap.chs" #-}</span>
<a name="line-346"></a>    <span class='hs-layout'>(</span><span class='hs-varid'>toKeymap</span> <span class='hs-varid'>self</span><span class='hs-layout'>)</span>
<a name="line-347"></a>
<a name="line-348"></a>
<a name="line-349"></a><span class='hs-comment'>--------------------</span>
<a name="line-350"></a><span class='hs-comment'>-- Signals</span>
<a name="line-351"></a>
<a name="line-352"></a>
<a name="line-353"></a><a name="keymapDirectionChanged"></a><span class='hs-comment'>-- | The 'keymapDirectionChanged' signal gets emitted when the direction of the</span>
<a name="line-354"></a><span class='hs-comment'>-- keymap changes.</span>
<a name="line-355"></a><span class='hs-comment'>--</span>
<a name="line-356"></a><span class='hs-comment'>-- * Available since Gdk version 2.0</span>
<a name="line-357"></a><span class='hs-comment'>--</span>
<a name="line-358"></a><span class='hs-definition'>keymapDirectionChanged</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>KeymapClass</span> <span class='hs-varid'>self</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>self</span> <span class='hs-layout'>(</span><span class='hs-conid'>IO</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-359"></a><span class='hs-definition'>keymapDirectionChanged</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Signal</span> <span class='hs-layout'>(</span><span class='hs-varid'>connect_NONE__NONE</span> <span class='hs-str'>"direction_changed"</span><span class='hs-layout'>)</span>
<a name="line-360"></a>
<a name="line-361"></a>
<a name="line-362"></a><a name="keymapKeysChanged"></a><span class='hs-comment'>-- | The 'keymapKeysChanged' signal is emitted when the mapping represented by</span>
<a name="line-363"></a><span class='hs-comment'>-- @keymap@ changes.</span>
<a name="line-364"></a><span class='hs-comment'>--</span>
<a name="line-365"></a><span class='hs-comment'>-- * Available since Gdk version 2.2</span>
<a name="line-366"></a><span class='hs-comment'>--</span>
<a name="line-367"></a><span class='hs-definition'>keymapKeysChanged</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>KeymapClass</span> <span class='hs-varid'>self</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>self</span> <span class='hs-layout'>(</span><span class='hs-conid'>IO</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-368"></a><span class='hs-definition'>keymapKeysChanged</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Signal</span> <span class='hs-layout'>(</span><span class='hs-varid'>connect_NONE__NONE</span> <span class='hs-str'>"keys_changed"</span><span class='hs-layout'>)</span>
<a name="line-369"></a>
<a name="line-370"></a>
<a name="line-371"></a><a name="keymapStateChanged"></a><span class='hs-comment'>-- | The 'keymapStateChanged' signal is emitted when the state of the keyboard</span>
<a name="line-372"></a><span class='hs-comment'>-- changes, e.g when Caps Lock is turned on or off. See</span>
<a name="line-373"></a><span class='hs-comment'>-- 'keymapGetCapsLockState'.</span>
<a name="line-374"></a><span class='hs-comment'>--</span>
<a name="line-375"></a><span class='hs-comment'>-- * Available since Gdk version 2.16</span>
<a name="line-376"></a><span class='hs-comment'>--</span>
<a name="line-377"></a><span class='hs-definition'>keymapStateChanged</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>KeymapClass</span> <span class='hs-varid'>self</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>self</span> <span class='hs-layout'>(</span><span class='hs-conid'>IO</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-378"></a><span class='hs-definition'>keymapStateChanged</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Signal</span> <span class='hs-layout'>(</span><span class='hs-varid'>connect_NONE__NONE</span> <span class='hs-str'>"state_changed"</span><span class='hs-layout'>)</span>
<a name="line-379"></a>
<a name="line-380"></a><span class='hs-keyword'>foreign</span> <span class='hs-keyword'>import</span> <span class='hs-keyword'>ccall</span> <span class='hs-keyword'>safe</span> <span class='hs-str'>"gdk_keymap_get_default"</span>
<a name="line-381"></a>  <span class='hs-varid'>gdk_keymap_get_default</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Ptr</span> <span class='hs-conid'>Keymap</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-382"></a>
<a name="line-383"></a><span class='hs-keyword'>foreign</span> <span class='hs-keyword'>import</span> <span class='hs-keyword'>ccall</span> <span class='hs-keyword'>safe</span> <span class='hs-str'>"gdk_keymap_get_for_display"</span>
<a name="line-384"></a>  <span class='hs-varid'>gdk_keymap_get_for_display</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conid'>Ptr</span> <span class='hs-conid'>Display</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Ptr</span> <span class='hs-conid'>Keymap</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-385"></a>
<a name="line-386"></a><span class='hs-keyword'>foreign</span> <span class='hs-keyword'>import</span> <span class='hs-keyword'>ccall</span> <span class='hs-keyword'>safe</span> <span class='hs-str'>"gdk_keymap_lookup_key"</span>
<a name="line-387"></a>  <span class='hs-varid'>gdk_keymap_lookup_key</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conid'>Ptr</span> <span class='hs-conid'>Keymap</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conid'>Ptr</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>IO</span> <span class='hs-conid'>CUInt</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-388"></a>
<a name="line-389"></a><span class='hs-keyword'>foreign</span> <span class='hs-keyword'>import</span> <span class='hs-keyword'>ccall</span> <span class='hs-keyword'>safe</span> <span class='hs-str'>"gdk_keymap_translate_keyboard_state"</span>
<a name="line-390"></a>  <span class='hs-varid'>gdk_keymap_translate_keyboard_state</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conid'>Ptr</span> <span class='hs-conid'>Keymap</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>CUInt</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>CInt</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>CInt</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conid'>Ptr</span> <span class='hs-conid'>CUInt</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conid'>Ptr</span> <span class='hs-conid'>CInt</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conid'>Ptr</span> <span class='hs-conid'>CInt</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conid'>Ptr</span> <span class='hs-conid'>CInt</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>IO</span> <span class='hs-conid'>CInt</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-391"></a>
<a name="line-392"></a><span class='hs-keyword'>foreign</span> <span class='hs-keyword'>import</span> <span class='hs-keyword'>ccall</span> <span class='hs-keyword'>safe</span> <span class='hs-str'>"gdk_keymap_get_entries_for_keyval"</span>
<a name="line-393"></a>  <span class='hs-varid'>gdk_keymap_get_entries_for_keyval</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conid'>Ptr</span> <span class='hs-conid'>Keymap</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>CUInt</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conid'>Ptr</span> <span class='hs-layout'>(</span><span class='hs-conid'>Ptr</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conid'>Ptr</span> <span class='hs-conid'>CInt</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>IO</span> <span class='hs-conid'>CInt</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-394"></a>
<a name="line-395"></a><span class='hs-keyword'>foreign</span> <span class='hs-keyword'>import</span> <span class='hs-keyword'>ccall</span> <span class='hs-keyword'>unsafe</span> <span class='hs-str'>"g_free"</span>
<a name="line-396"></a>  <span class='hs-varid'>g_free</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conid'>Ptr</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>IO</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-397"></a>
<a name="line-398"></a><span class='hs-keyword'>foreign</span> <span class='hs-keyword'>import</span> <span class='hs-keyword'>ccall</span> <span class='hs-keyword'>safe</span> <span class='hs-str'>"gdk_keymap_get_entries_for_keycode"</span>
<a name="line-399"></a>  <span class='hs-varid'>gdk_keymap_get_entries_for_keycode</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conid'>Ptr</span> <span class='hs-conid'>Keymap</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>CUInt</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conid'>Ptr</span> <span class='hs-layout'>(</span><span class='hs-conid'>Ptr</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conid'>Ptr</span> <span class='hs-layout'>(</span><span class='hs-conid'>Ptr</span> <span class='hs-conid'>CUInt</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conid'>Ptr</span> <span class='hs-conid'>CInt</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>IO</span> <span class='hs-conid'>CInt</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-400"></a>
<a name="line-401"></a><span class='hs-keyword'>foreign</span> <span class='hs-keyword'>import</span> <span class='hs-keyword'>ccall</span> <span class='hs-keyword'>safe</span> <span class='hs-str'>"gdk_keymap_get_direction"</span>
<a name="line-402"></a>  <span class='hs-varid'>gdk_keymap_get_direction</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conid'>Ptr</span> <span class='hs-conid'>Keymap</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>IO</span> <span class='hs-conid'>CInt</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-403"></a>
<a name="line-404"></a><span class='hs-keyword'>foreign</span> <span class='hs-keyword'>import</span> <span class='hs-keyword'>ccall</span> <span class='hs-keyword'>safe</span> <span class='hs-str'>"gdk_keymap_have_bidi_layouts"</span>
<a name="line-405"></a>  <span class='hs-varid'>gdk_keymap_have_bidi_layouts</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conid'>Ptr</span> <span class='hs-conid'>Keymap</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>IO</span> <span class='hs-conid'>CInt</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-406"></a>
<a name="line-407"></a><span class='hs-keyword'>foreign</span> <span class='hs-keyword'>import</span> <span class='hs-keyword'>ccall</span> <span class='hs-keyword'>safe</span> <span class='hs-str'>"gdk_keymap_get_caps_lock_state"</span>
<a name="line-408"></a>  <span class='hs-varid'>gdk_keymap_get_caps_lock_state</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conid'>Ptr</span> <span class='hs-conid'>Keymap</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>IO</span> <span class='hs-conid'>CInt</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
</pre></body>
</html>