<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
        {font-family:굴림;
        panose-1:2 11 6 0 0 1 1 1 1 1;}
@font-face
        {font-family:굴림;
        panose-1:2 11 6 0 0 1 1 1 1 1;}
@font-face
        {font-family:"맑은 고딕";
        panose-1:2 11 5 3 2 0 0 2 0 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:"\@맑은 고딕";
        panose-1:2 11 5 3 2 0 0 2 0 4;}
@font-face
        {font-family:"\@굴림";
        panose-1:2 11 6 0 0 1 1 1 1 1;}
@font-face
        {font-family:"¹d1Ç40  ¬e0µ15";
        panose-1:0 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:"\@¹d1Ç40  ¬e0µ15";
        panose-1:0 0 0 0 0 0 0 0 0 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:굴림;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:굴림;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"맑은 고딕";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"맑은 고딕";}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:3.0cm 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=KO link=blue vlink=purple><div class=WordSection1><p class=MsoNormal style='word-break:break-hangul'><span lang=EN-US style='font-size:10.0pt;font-family:"맑은 고딕";color:#1F497D'>Dear Daniel and Jasper St.Pierre,<o:p></o:p></span></p><p class=MsoNormal style='word-break:break-hangul'><span lang=EN-US style='font-size:10.0pt;font-family:"맑은 고딕";color:#1F497D'>thank you for your opinion !<o:p></o:p></span></p><p class=MsoNormal style='word-break:break-hangul'><span lang=EN-US style='font-size:10.0pt;font-family:"맑은 고딕";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal style='word-break:break-hangul'><span lang=EN-US style='font-size:10.0pt;font-family:"맑은 고딕";color:#1F497D'>There is a key processing module as a plugin module of a wayland compositor and it has data structures tightly coupled with a keycode.<o:p></o:p></span></p><p class=MsoNormal style='word-break:break-hangul'><span lang=EN-US style='font-size:10.0pt;font-family:"맑은 고딕";color:#1F497D'>I’m considering to re-write the data structures which contain keysym type variable instead of keycode variable.<o:p></o:p></span></p><p class=MsoNormal style='word-break:break-hangul'><span lang=EN-US style='font-size:10.0pt;font-family:"맑은 고딕";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal style='word-break:break-hangul'><span lang=EN-US style='font-size:10.0pt;font-family:"맑은 고딕";color:#1F497D'>Thanks and regards,<o:p></o:p></span></p><p class=MsoNormal style='word-break:break-hangul'><span lang=EN-US style='font-size:10.0pt;font-family:"맑은 고딕";color:#1F497D'>Sung-Jin Park<o:p></o:p></span></p><p class=MsoNormal style='word-break:break-hangul'><span lang=EN-US style='font-size:10.0pt;font-family:"맑은 고딕";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><b><span lang=EN-US style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span lang=EN-US style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> magcius@gmail.com [mailto:magcius@gmail.com] <b>On Behalf Of </b>Jasper St. Pierre<br><b>Sent:</b> Tuesday, June 02, 2015 12:41 AM<br><b>To:</b> Daniel Stone<br><b>Cc:</b> sj76.park@samsung.com; Ran Benita; wayland-devel@lists.freedesktop.org<br><b>Subject:</b> Re: Re: [libxkbcommon] Question about how to get xkb_keycode_t from xkb_keysym_t.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><div><div><p class=MsoNormal style='margin-bottom:12.0pt'><span lang=EN-US>Note that there are non-obvious consequences to this. The keymap is hierarchical upon layouts and levels. You can either do a depth-first search, or a breadth-first search. This can change behavior. XKeysymToKeycode is documented as doing a breadth-first search. This can have consequences in behavior. See:<br><br><a href="https://git.gnome.org/browse/mutter/commit/src/core/keybindings.c?id=60c22b62366d737f7f6eabe7d46fa682c6f400d7">https://git.gnome.org/browse/mutter/commit/src/core/keybindings.c?id=60c22b62366d737f7f6eabe7d46fa682c6f400d7</a><o:p></o:p></span></p></div><p class=MsoNormal><span lang=EN-US>I'd highly recommend doing keygrabs on keysyms if you do want to let your clients do key grabs at all.<o:p></o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><div><p class=MsoNormal><span lang=EN-US>On Mon, Jun 1, 2015 at 6:02 AM, Daniel Stone <<a href="mailto:daniel@fooishbar.org" target="_blank">daniel@fooishbar.org</a>> wrote:<o:p></o:p></span></p><div><p class=MsoNormal><span lang=EN-US>Hi,<o:p></o:p></span></p><div><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><div><p class=MsoNormal><span lang=EN-US>On 1 June 2015 at 12:22, </span>박성진<span lang=EN-US> <<a href="mailto:sj76.park@samsung.com" target="_blank">sj76.park@samsung.com</a>> wrote:<o:p></o:p></span></p><div><p><span lang=EN-US>Actually, we'd like to provide a key grab protocol to wayland client(s)<o:p></o:p></span></p><p><span lang=EN-US>with which each client can make request to grab a key to wayland compositor.<o:p></o:p></span></p><p><span lang=EN-US>To use the protocol, we need to provide one or more keycodes associated with a given keysym to the compositor as an argument.<o:p></o:p></span></p><p><span lang=EN-US>At this moment we would like to call the following API to get keycode(s) from a keysym if exist.<o:p></o:p></span></p><p><span lang=EN-US>Could you share your opinion ?<o:p></o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US>You might be better off asking to grab on a particular keysym instead, since the compositor always needs to track the current state so can trivially extract the keysym.<o:p></o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US>  <o:p></o:p></span></p></div><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm'><div><p><span lang=EN-US>/**<o:p></o:p></span></p><p><span lang=EN-US> @param[in] keymap : xkb_keymap pointer<o:p></o:p></span></p><p><span lang=EN-US> @param[in] keysym : xkb_keysym_t keysym<o:p></o:p></span></p><p><span lang=EN-US> @param[out] keycodes array : xkb_keycode_t pointer<o:p></o:p></span></p><p><span lang=EN-US> @return number of keycodes found on success, otherwise -1<o:p></o:p></span></p><p><span lang=EN-US>*/<o:p></o:p></span></p><p><span lang=EN-US>XKB_EXPORT int xkb_keycodes_from_keysym(struct xkb_keymap *keymap, xkb_keysym_t keysym, xkb_keycode_t *keycodes);<o:p></o:p></span></p><p><span lang=EN-US>or XKB_EXPORT int xkb_keymap_keycodes_from_keysym(struct xkb_keymap *keymap, xkb_keysym_t keysym, xkb_keycode_t *keycodes);<o:p></o:p></span></p></div></blockquote><div><p class=MsoNormal><span lang=EN-US>On the face of it, this seems okay, except you might want to document that 0 is a valid, non-error, return code; presumably in order to deal with keycode allocation, you would have to do something like:<o:p></o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US>xkb_keycode_t *keycodes;<o:p></o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US>int num_keycodes;<o:p></o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US>num_keycodes = xkb_keymap_keycodes_from_keysym(keymap, keysym, NULL);<o:p></o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US>if (num_keycodes == -1)<o:p></o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US>    return -1;<o:p></o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US>else if (num_keycodes == 0)<o:p></o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US>    return 1; /* still succeeded, just don't have any keycodes */<o:p></o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US>keycodes = malloc(num_keycodes * sizeof(*keycodes));<o:p></o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US>num_keycodes = xkb_keymap_keycodes_from_keysym(keymap, keysym, keycodes);<o:p></o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US>Cheers,<o:p></o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US>Daniel<o:p></o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US> <o:p></o:p></span></p></div><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm'><div><p><span lang=EN-US>Thanks and regards,<o:p></o:p></span></p><p><span lang=EN-US>Sung-Jin Park<o:p></o:p></span></p><p><span lang=EN-US> <o:p></o:p></span></p><p><span lang=EN-US>------- <b>Original Message</b> -------<o:p></o:p></span></p><p><b><span lang=EN-US>Sender</span></b><span lang=EN-US> : Daniel Stone<<a href="mailto:daniel@fooishbar.org" target="_blank">daniel@fooishbar.org</a>><o:p></o:p></span></p><p><b><span lang=EN-US>Date</span></b><span lang=EN-US> : 2015-06-01 18:57 (GMT+09:00)<o:p></o:p></span></p><p><b><span lang=EN-US>Title</span></b><span lang=EN-US> : Re: [libxkbcommon] Question about how to get xkb_keycode_t from xkb_keysym_t.<o:p></o:p></span></p><div><div><p><span lang=EN-US> <o:p></o:p></span></p><div><p class=MsoNormal><span lang=EN-US>Hi Sung-Jin, <o:p></o:p></span></p><div><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><div><p class=MsoNormal><span lang=EN-US>On 1 June 2015 at 07:16, Sung-Jin Park <<a href="mailto:sj76.park@samsung.com" target="_blank">sj76.park@samsung.com</a>> wrote:<o:p></o:p></span></p><div><p><span lang=EN-US style='font-family:"¹d1Ç40  ¬e0µ15","serif";color:#333333'>I'd like to ask how to get keycode(s) from keysym using libxkbcommon API.</span><span lang=EN-US><o:p></o:p></span></p><div><p class=MsoNormal><span lang=EN-US style='font-family:"맑은 고딕";color:#333333'>Is there any API in libxkbcommon ?</span><span lang=EN-US style='font-family:"Arial","sans-serif";color:#222222'><o:p></o:p></span></p></div></div><div><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US>The short answer is, no.<o:p></o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US>The long answer is, look through the keymap and find every keycode which produces that keysym, which may be on various layouts (groups) or shift levels.<o:p></o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US>If you can share more details of what you actually want to achieve, that might be helpful.<o:p></o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US>Cheers,<o:p></o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US>Daniel <o:p></o:p></span></p></div></div></div></div><p><span lang=EN-US> <o:p></o:p></span></p><p><span lang=EN-US> <o:p></o:p></span></p></div></div><table class=MsoNormalTable border=0 cellpadding=0><tr><td style='padding:.75pt .75pt .75pt .75pt'><p><span lang=EN-US><img border=0 width=520 height=144 id="_x0000_i1025" src="cid:image001.gif@01D09D6E.86EA74A0"><o:p></o:p></span></p></td></tr></table></div><p class=MsoNormal><span lang=EN-US><img border=0 id="_x0000_i1026" src="http://ext.samsung.net/mailcheck/SeenTimeChecker?do=2ca45776e672e14d572869ec7757a5c52acea990db9004c361cedcb6724b56210beae83852bfee8031ac65c790352a7bd5d78d49b87aef04f866eba98cb7300acf878f9a26ce15a0"><o:p></o:p></span></p></blockquote></div><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p></div></div><p class=MsoNormal style='margin-bottom:12.0pt'><span lang=EN-US><br>_______________________________________________<br>wayland-devel mailing list<br><a href="mailto:wayland-devel@lists.freedesktop.org">wayland-devel@lists.freedesktop.org</a><br><a href="http://lists.freedesktop.org/mailman/listinfo/wayland-devel" target="_blank">http://lists.freedesktop.org/mailman/listinfo/wayland-devel</a><o:p></o:p></span></p></div><p class=MsoNormal><span lang=EN-US><br><br clear=all><br>-- <o:p></o:p></span></p><div><p class=MsoNormal><span lang=EN-US>  Jasper<o:p></o:p></span></p></div></div></div></body></html>