<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Keyboard Modifiers flag on Windows?</title>
		<link>http://www.allegro.cc/forums/view/618620</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sun, 06 Mar 2022 20:12:51 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I have just managed to get an app I am working on to compile and run on Windows from Linux, and I&#39;ve noticed my code for handling shift/ctrl/alt+key presses has broken.</p><p>It appears that the <span class="source-code">ev.keyboard.modifiers</span> flag is always zero on Windows. Unless I am doing something wrong, which is always a possibility.</p><p>Line 69 is where I am testing the <span class="source-code">ev.keyboard.modifiers</span> flag.</p><p>This is my input logic:</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span><span class="p">#include "input.hpp"</span>
<span class="number">   2</span>
<span class="number">   3</span><span class="p">#include &lt;iostream&gt; // For std::cerr</span>
<span class="number">   4</span>
<span class="number">   5</span>InputHandler::InputHandler<span class="k2">(</span><span class="k2">)</span> <span class="k2">:</span> mods<span class="k2">(</span><span class="n">0</span><span class="k2">)</span>
<span class="number">   6</span><span class="k2">{</span>
<span class="number">   7</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_is_system_installed"><span class="a">al_is_system_installed</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">   8</span>  <span class="k2">{</span>
<span class="number">   9</span>    std::cerr <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"input - Allegro has not been installed!"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="number">  10</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_37.html" target="_blank">abort</a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  11</span>  <span class="k2">}</span>
<span class="number">  12</span>
<span class="number">  13</span>  <a href="http://www.allegro.cc/manual/al_install_keyboard"><span class="a">al_install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  14</span>  <a href="http://www.allegro.cc/manual/al_install_mouse"><span class="a">al_install_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  15</span>
<span class="number">  16</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_569.html" target="_blank">memset</a><span class="k2">(</span>keys_pressed, <span class="k1">false</span>, <span class="k1">sizeof</span><span class="k2">(</span><span class="k1">bool</span><span class="k2">)</span> <span class="k3">*</span> CUSTOM_ALLEGRO_KEY_MAX<span class="k2">)</span><span class="k2">;</span>
<span class="number">  17</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_569.html" target="_blank">memset</a><span class="k2">(</span>keys_held, <span class="k1">false</span>, <span class="k1">sizeof</span><span class="k2">(</span><span class="k1">bool</span><span class="k2">)</span> <span class="k3">*</span> CUSTOM_ALLEGRO_KEY_MAX<span class="k2">)</span><span class="k2">;</span>
<span class="number">  18</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_569.html" target="_blank">memset</a><span class="k2">(</span>keys_released, <span class="k1">false</span>, <span class="k1">sizeof</span><span class="k2">(</span><span class="k1">bool</span><span class="k2">)</span> <span class="k3">*</span> CUSTOM_ALLEGRO_KEY_MAX<span class="k2">)</span><span class="k2">;</span>
<span class="number">  19</span><span class="k2">}</span>
<span class="number">  20</span>
<span class="number">  21</span>InputHandler::~InputHandler<span class="k2">(</span><span class="k2">)</span>
<span class="number">  22</span><span class="k2">{</span>
<span class="number">  23</span>  <a href="http://www.allegro.cc/manual/al_uninstall_keyboard"><span class="a">al_uninstall_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  24</span>  <a href="http://www.allegro.cc/manual/al_uninstall_mouse"><span class="a">al_uninstall_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  25</span><span class="k2">}</span>
<span class="number">  26</span>
<span class="number">  27</span><span class="k1">void</span> InputHandler::getInput<span class="k2">(</span><span class="k1">const</span> <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> <span class="k3">&amp;</span>ev<span class="k2">)</span>
<span class="number">  28</span><span class="k2">{</span>
<span class="number">  29</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_569.html" target="_blank">memset</a><span class="k2">(</span>keys_pressed, <span class="k1">false</span>, <span class="k1">sizeof</span><span class="k2">(</span><span class="k1">bool</span><span class="k2">)</span> <span class="k3">*</span> CUSTOM_ALLEGRO_KEY_MAX<span class="k2">)</span><span class="k2">;</span>
<span class="number">  30</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_569.html" target="_blank">memset</a><span class="k2">(</span>keys_released, <span class="k1">false</span>, <span class="k1">sizeof</span><span class="k2">(</span><span class="k1">bool</span><span class="k2">)</span> <span class="k3">*</span> CUSTOM_ALLEGRO_KEY_MAX<span class="k2">)</span><span class="k2">;</span>
<span class="number">  31</span>
<span class="number">  32</span>  mouse_wheel_down <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  33</span>  mouse_wheel_up <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  34</span>
<span class="number">  35</span>  <span class="k1">switch</span> <span class="k2">(</span>ev.type<span class="k2">)</span>
<span class="number">  36</span>  <span class="k2">{</span>
<span class="number">  37</span>    <span class="k1">case</span> ALLEGRO_EVENT_MOUSE_AXES:
<span class="number">  38</span>      <span class="k1">if</span> <span class="k2">(</span>ev.mouse.dz <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number">  39</span>      <span class="k2">{</span>
<span class="number">  40</span>        callKeybind<span class="k2">(</span>MOUSE::WHEELUP, <span class="k1">true</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  41</span>        mouse_wheel_up <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  42</span>      <span class="k2">}</span>
<span class="number">  43</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.mouse.dz <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number">  44</span>      <span class="k2">{</span>
<span class="number">  45</span>        callKeybind<span class="k2">(</span>MOUSE::WHEELDOWN, <span class="k1">true</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  46</span>        mouse_wheel_down <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  47</span>      <span class="k2">}</span>
<span class="number">  48</span>
<span class="number">  49</span>      mouse_position <span class="k3">=</span> <span class="k2">{</span> ev.mouse.x, ev.mouse.y <span class="k2">}</span><span class="k2">;</span>
<span class="number">  50</span>    <span class="k1">break</span><span class="k2">;</span>
<span class="number">  51</span>
<span class="number">  52</span>    <span class="k1">case</span> ALLEGRO_EVENT_MOUSE_BUTTON_DOWN:
<span class="number">  53</span>      callKeybind<span class="k2">(</span>ALLEGRO_KEY_MAX <span class="k3">+</span> ev.mouse.button, <span class="k1">true</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  54</span>      keys_pressed<span class="k2">[</span>ALLEGRO_KEY_MAX <span class="k3">+</span> ev.mouse.button<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  55</span>      keys_held<span class="k2">[</span>ALLEGRO_KEY_MAX <span class="k3">+</span> ev.mouse.button<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  56</span>    <span class="k1">break</span><span class="k2">;</span>
<span class="number">  57</span>
<span class="number">  58</span>    <span class="k1">case</span> ALLEGRO_EVENT_MOUSE_BUTTON_UP:
<span class="number">  59</span>      callKeybind<span class="k2">(</span>ALLEGRO_KEY_MAX <span class="k3">+</span> ev.mouse.button, <span class="k1">false</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  60</span>      keys_released<span class="k2">[</span>ALLEGRO_KEY_MAX <span class="k3">+</span> ev.mouse.button<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  61</span>      keys_held<span class="k2">[</span>ALLEGRO_KEY_MAX <span class="k3">+</span> ev.mouse.button<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  62</span>    <span class="k1">break</span><span class="k2">;</span>
<span class="number">  63</span>
<span class="number">  64</span>    <span class="k1">case</span> ALLEGRO_EVENT_KEY_DOWN:
<span class="number">  65</span>      mods <span class="k3">=</span> ev.keyboard.modifiers<span class="k2">;</span>
<span class="number">  66</span>      callKeybind<span class="k2">(</span>ev.keyboard.keycode, <span class="k1">true</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  67</span>      keys_pressed<span class="k2">[</span>ev.keyboard.keycode<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  68</span>      keys_held<span class="k2">[</span>ev.keyboard.keycode<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  69</span>      std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Shift Pressed: "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="k2">(</span>ev.keyboard.modifiers <span class="k3">&amp;</span> ALLEGRO_KEYMOD_SHIFT ? <span class="s">"true"</span> <span class="k2">:</span> <span class="s">"false"</span><span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span>  <span class="s">"\n"</span>
<span class="number">  70</span>        <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"\tKeymods Bitfield "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::hex <span class="k3">&lt;</span><span class="k3">&lt;</span> ev.keyboard.modifiers <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"\n"</span><span class="k2">;</span>
<span class="number">  71</span>    <span class="k1">break</span><span class="k2">;</span>
<span class="number">  72</span>
<span class="number">  73</span>    <span class="k1">case</span> ALLEGRO_EVENT_KEY_UP:
<span class="number">  74</span>      mods <span class="k3">=</span> ev.keyboard.modifiers<span class="k2">;</span>
<span class="number">  75</span>      callKeybind<span class="k2">(</span>ev.keyboard.keycode, <span class="k1">false</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  76</span>      keys_released<span class="k2">[</span>ev.keyboard.keycode<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  77</span>      keys_held<span class="k2">[</span>ev.keyboard.keycode<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  78</span>    <span class="k1">break</span><span class="k2">;</span>
<span class="number">  79</span>
<span class="number">  80</span>    default:
<span class="number">  81</span>    <span class="k1">break</span><span class="k2">;</span>
<span class="number">  82</span>  <span class="k2">}</span><span class="k2">;</span>
<span class="number">  83</span><span class="k2">}</span>
<span class="number">  84</span>
<span class="number">  85</span><span class="k1">bool</span> InputHandler::isKeyPressed<span class="k2">(</span><span class="k1">const</span> <span class="k1">int</span> <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a>, <span class="k1">const</span> <span class="k1">int</span> mod<span class="k2">)</span> <span class="k1">const</span>
<span class="number">  86</span><span class="k2">{</span>
<span class="number">  87</span>  <span class="k1">return</span> keys_pressed<span class="k2">[</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span>mod <span class="k3">=</span><span class="k3">=</span> <span class="k3">-</span><span class="n">1</span> <span class="k3">|</span><span class="k3">|</span> mod <span class="k3">&amp;</span> mods<span class="k2">)</span><span class="k2">;</span>
<span class="number">  88</span><span class="k2">}</span>
<span class="number">  89</span><span class="k1">bool</span> InputHandler::isKeyReleased<span class="k2">(</span><span class="k1">const</span> <span class="k1">int</span> <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a>, <span class="k1">const</span> <span class="k1">int</span> mod<span class="k2">)</span> <span class="k1">const</span>
<span class="number">  90</span><span class="k2">{</span>
<span class="number">  91</span>  <span class="k1">return</span> keys_released<span class="k2">[</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span>mod <span class="k3">=</span><span class="k3">=</span> <span class="k3">-</span><span class="n">1</span> <span class="k3">|</span><span class="k3">|</span> mod <span class="k3">&amp;</span> mods<span class="k2">)</span><span class="k2">;</span>
<span class="number">  92</span><span class="k2">}</span>
<span class="number">  93</span><span class="k1">bool</span> InputHandler::isKeyDown<span class="k2">(</span><span class="k1">const</span> <span class="k1">int</span> <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a>, <span class="k1">const</span> <span class="k1">int</span> mod<span class="k2">)</span> <span class="k1">const</span>
<span class="number">  94</span><span class="k2">{</span>
<span class="number">  95</span>  <span class="k1">return</span> keys_held<span class="k2">[</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span>mod <span class="k3">=</span><span class="k3">=</span> <span class="k3">-</span><span class="n">1</span> <span class="k3">|</span><span class="k3">|</span> mod <span class="k3">&amp;</span> mods<span class="k2">)</span><span class="k2">;</span>
<span class="number">  96</span><span class="k2">}</span>
<span class="number">  97</span>
<span class="number">  98</span><span class="k1">bool</span> InputHandler::isMousePressed<span class="k2">(</span><span class="k1">int</span> button, <span class="k1">const</span> <span class="k1">int</span> mod<span class="k2">)</span> <span class="k1">const</span>
<span class="number">  99</span><span class="k2">{</span>
<span class="number"> 100</span>  <span class="k1">return</span> isKeyPressed<span class="k2">(</span>button, mod<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 101</span><span class="k2">}</span>
<span class="number"> 102</span><span class="k1">bool</span> InputHandler::isMouseReleased<span class="k2">(</span><span class="k1">int</span> button, <span class="k1">const</span> <span class="k1">int</span> mod<span class="k2">)</span> <span class="k1">const</span>
<span class="number"> 103</span><span class="k2">{</span>
<span class="number"> 104</span>  <span class="k1">return</span> isKeyReleased<span class="k2">(</span>button, mod<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 105</span><span class="k2">}</span>
<span class="number"> 106</span><span class="k1">bool</span> InputHandler::isMouseDown<span class="k2">(</span><span class="k1">int</span> button, <span class="k1">const</span> <span class="k1">int</span> mod<span class="k2">)</span> <span class="k1">const</span>
<span class="number"> 107</span><span class="k2">{</span>
<span class="number"> 108</span>  <span class="k1">return</span> isKeyDown<span class="k2">(</span>button, mod<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 109</span><span class="k2">}</span>
<span class="number"> 110</span>
<span class="number"> 111</span><span class="k1">bool</span> InputHandler::isMouseWheelDown<span class="k2">(</span><span class="k1">const</span> <span class="k1">int</span> mod<span class="k2">)</span> <span class="k1">const</span>
<span class="number"> 112</span><span class="k2">{</span>
<span class="number"> 113</span>  <span class="k1">return</span> mouse_wheel_down <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span>mod <span class="k3">=</span><span class="k3">=</span> <span class="k3">-</span><span class="n">1</span> <span class="k3">|</span><span class="k3">|</span> mod <span class="k3">&amp;</span> mods<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 114</span><span class="k2">}</span>
<span class="number"> 115</span><span class="k1">bool</span> InputHandler::isMouseWheelUp<span class="k2">(</span><span class="k1">const</span> <span class="k1">int</span> mod<span class="k2">)</span> <span class="k1">const</span>
<span class="number"> 116</span><span class="k2">{</span>
<span class="number"> 117</span>  <span class="k1">return</span> mouse_wheel_up <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span>mod <span class="k3">=</span><span class="k3">=</span> <span class="k3">-</span><span class="n">1</span> <span class="k3">|</span><span class="k3">|</span> mod <span class="k3">&amp;</span> mods<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 118</span><span class="k2">}</span>
<span class="number"> 119</span>
<span class="number"> 120</span>vec2i InputHandler::getMousePos<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span> <span class="k1">const</span>
<span class="number"> 121</span><span class="k2">{</span>
<span class="number"> 122</span>  <span class="k1">return</span> mouse_position<span class="k2">;</span>
<span class="number"> 123</span><span class="k2">}</span>
<span class="number"> 124</span>
<span class="number"> 125</span><span class="k1">bool</span> InputHandler::isModifierDown<span class="k2">(</span><span class="k1">const</span> <span class="k1">int</span> mod<span class="k2">)</span>
<span class="number"> 126</span><span class="k2">{</span>
<span class="number"> 127</span>  <span class="k1">return</span> mod <span class="k3">&amp;</span> mods<span class="k2">;</span>
<span class="number"> 128</span><span class="k2">}</span>
<span class="number"> 129</span>
<span class="number"> 130</span><span class="k1">void</span> InputHandler::setKeybind<span class="k2">(</span><span class="k1">int</span> <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a>, std::function<span class="k3">&lt;</span><span class="k1">void</span><span class="k2">(</span><span class="k1">void</span><span class="k2">)</span><span class="k3">&gt;</span> callback, <span class="k1">bool</span> pressed<span class="k2">)</span>
<span class="number"> 131</span><span class="k2">{</span>
<span class="number"> 132</span>  <span class="k1">if</span> <span class="k2">(</span>pressed<span class="k2">)</span> keybinds_p<span class="k2">[</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">]</span> <span class="k3">=</span> callback<span class="k2">;</span>
<span class="number"> 133</span>  <span class="k1">else</span> keybinds_r<span class="k2">[</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">]</span> <span class="k3">=</span> callback<span class="k2">;</span>
<span class="number"> 134</span><span class="k2">}</span>
<span class="number"> 135</span>
<span class="number"> 136</span><span class="k1">void</span> InputHandler::clearKeybind<span class="k2">(</span><span class="k1">int</span> <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">)</span>
<span class="number"> 137</span><span class="k2">{</span>
<span class="number"> 138</span>  <span class="c">//TODO Untested</span>
<span class="number"> 139</span>  <span class="k1">auto</span> it <span class="k3">=</span> keybinds_p.find<span class="k2">(</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 140</span>  <span class="k1">if</span> <span class="k2">(</span>it <span class="k3">!</span><span class="k3">=</span> keybinds_p.end<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 141</span>  <span class="k2">{</span>
<span class="number"> 142</span>    keybinds_p.erase<span class="k2">(</span>it<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 143</span>    <span class="k1">return</span><span class="k2">;</span>
<span class="number"> 144</span>  <span class="k2">}</span>
<span class="number"> 145</span>
<span class="number"> 146</span>  it <span class="k3">=</span> keybinds_r.find<span class="k2">(</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 147</span>
<span class="number"> 148</span>  <span class="k1">if</span> <span class="k2">(</span>it <span class="k3">!</span><span class="k3">=</span> keybinds_r.end<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> keybinds_r.erase<span class="k2">(</span>it<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 149</span><span class="k2">}</span>
<span class="number"> 150</span>
<span class="number"> 151</span><span class="k1">void</span> InputHandler::callKeybind<span class="k2">(</span><span class="k1">int</span> <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a>, <span class="k1">bool</span> pressed<span class="k2">)</span>
<span class="number"> 152</span><span class="k2">{</span>
<span class="number"> 153</span>  <span class="k1">if</span> <span class="k2">(</span>pressed <span class="k3">&amp;</span><span class="k3">&amp;</span> keybinds_p.find<span class="k2">(</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> keybinds_p.end<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 154</span>  <span class="k2">{</span>
<span class="number"> 155</span>    keybinds_p<span class="k2">[</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">]</span><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 156</span>    <span class="k1">return</span><span class="k2">;</span>
<span class="number"> 157</span>  <span class="k2">}</span>
<span class="number"> 158</span>
<span class="number"> 159</span>  <span class="k1">if</span> <span class="k2">(</span>keybinds_r.find<span class="k2">(</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> keybinds_r.end<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> keybinds_r<span class="k2">[</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">]</span><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 160</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Aksel Huff)</author>
		<pubDate>Fri, 04 Mar 2022 13:57:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The modifier field is only valid for KEY_CHAR events. It hasn&#39;t been added to key press and releases yet. I think I remember seeing something on the mailing list about adding them but I can&#39;t remember right.</p><p>You already know the state of the SHIFT, CTRL, and ALT keys anyway.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 04 Mar 2022 18:43:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This works for me on Mac and Windows.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#include &lt;iostream&gt;</span>
<span class="number">  2</span><span class="p">#include &lt;sstream&gt;</span>
<span class="number">  3</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">  4</span>
<span class="number">  5</span>std::string build_readable_keypress_string<span class="k2">(</span><span class="k1">int</span> keycode, <span class="k1">bool</span> shift, <span class="k1">bool</span> alt, <span class="k1">bool</span> ctrl, <span class="k1">bool</span> command<span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>
<span class="number">  7</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span> <span class="k3">*</span><span class="k3">*</span>argv<span class="k2">)</span>
<span class="number">  8</span><span class="k2">{</span>
<span class="number">  9</span>   <a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>   <a href="http://www.allegro.cc/manual/al_install_keyboard"><span class="a">al_install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>
<span class="number"> 12</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a> <span class="k3">*</span>event_queue <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_event_queue"><span class="a">al_create_event_queue</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>   <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>event_queue, <a href="http://www.allegro.cc/manual/al_get_keyboard_event_source"><span class="a">al_get_keyboard_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span><span class="n">1280</span>, <span class="n">720</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>
<span class="number"> 17</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event<span class="k2">;</span>
<span class="number"> 18</span>   <span class="k1">bool</span> shutdown_program <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 19</span>   <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>shutdown_program<span class="k2">)</span>
<span class="number"> 20</span>   <span class="k2">{</span>
<span class="number"> 21</span>      <a href="http://www.allegro.cc/manual/al_wait_for_event"><span class="a">al_wait_for_event</span></a><span class="k2">(</span>event_queue, <span class="k3">&amp;</span>event<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>      <span class="k1">switch</span><span class="k2">(</span>event.type<span class="k2">)</span>
<span class="number"> 23</span>      <span class="k2">{</span>
<span class="number"> 24</span>      <span class="k1">case</span> ALLEGRO_EVENT_KEY_DOWN:
<span class="number"> 25</span>         <span class="k2">{</span>
<span class="number"> 26</span>            <span class="k1">int</span> allegro_keycode <span class="k3">=</span> event.keyboard.keycode<span class="k2">;</span>
<span class="number"> 27</span>            <span class="k1">bool</span> shift <span class="k3">=</span> event.keyboard.modifiers <span class="k3">&amp;</span> ALLEGRO_KEYMOD_SHIFT<span class="k2">;</span>
<span class="number"> 28</span>            <span class="k1">bool</span> alt <span class="k3">=</span> event.keyboard.modifiers <span class="k3">&amp;</span> ALLEGRO_KEYMOD_ALT<span class="k2">;</span>
<span class="number"> 29</span>            <span class="k1">bool</span> ctrl <span class="k3">=</span> event.keyboard.modifiers <span class="k3">&amp;</span> ALLEGRO_KEYMOD_CTRL<span class="k2">;</span>
<span class="number"> 30</span>            <span class="k1">bool</span> command <span class="k3">=</span> event.keyboard.modifiers <span class="k3">&amp;</span> ALLEGRO_KEYMOD_COMMAND<span class="k2">;</span>
<span class="number"> 31</span>
<span class="number"> 32</span>            std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> build_readable_keypress_string<span class="k2">(</span>allegro_keycode, shift, alt, ctrl, command<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 33</span>            std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> std::flush<span class="k2">;</span>
<span class="number"> 34</span>         <span class="k2">}</span>
<span class="number"> 35</span>         <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 36</span>      <span class="k1">case</span> ALLEGRO_EVENT_KEY_CHAR:
<span class="number"> 37</span>         <span class="k1">if</span> <span class="k2">(</span>event.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_ESCAPE<span class="k2">)</span> shutdown_program <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 38</span>         <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 39</span>      <span class="k2">}</span>
<span class="number"> 40</span>   <span class="k2">}</span>
<span class="number"> 41</span>
<span class="number"> 42</span>   <a href="http://www.allegro.cc/manual/al_destroy_display"><span class="a">al_destroy_display</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 43</span>   <a href="http://www.allegro.cc/manual/al_destroy_event_queue"><span class="a">al_destroy_event_queue</span></a><span class="k2">(</span>event_queue<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 44</span>   <a href="http://www.allegro.cc/manual/al_uninstall_keyboard"><span class="a">al_uninstall_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 45</span>   <a href="http://www.allegro.cc/manual/al_uninstall_system"><span class="a">al_uninstall_system</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 46</span>
<span class="number"> 47</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 48</span><span class="k2">}</span>
<span class="number"> 49</span>
<span class="number"> 50</span>std::string build_readable_keypress_string<span class="k2">(</span><span class="k1">int</span> keycode, <span class="k1">bool</span> shift, <span class="k1">bool</span> alt, <span class="k1">bool</span> ctrl, <span class="k1">bool</span> command<span class="k2">)</span>
<span class="number"> 51</span><span class="k2">{</span>
<span class="number"> 52</span>   std::stringstream ss<span class="k2">;</span>
<span class="number"> 53</span>   ss <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"shift: "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> shift
<span class="number"> 54</span>      <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">", alt: "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> alt
<span class="number"> 55</span>      <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">", ctrl: "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> ctrl
<span class="number"> 56</span>      <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">", command: "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> command
<span class="number"> 57</span>      <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">", key: "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <a href="http://www.allegro.cc/manual/al_keycode_to_name"><span class="a">al_keycode_to_name</span></a><span class="k2">(</span>keycode<span class="k2">)</span>
<span class="number"> 58</span>      <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="number"> 59</span>   <span class="k1">return</span> ss.str<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 60</span><span class="k2">}</span>
</div></div><p>

Just skimming over your code I don&#39;t immediately see anything, but here are some thoughts:
</p><ul><li><p>Could you be re-initializing the keyboard a second time causing an issue?
</p></li><li><p>I recall reading there is some connection between the display and keyboard. Do you have a display created?
</p></li></ul></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Fri, 04 Mar 2022 20:36:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The <span class="source-code">ev.keyboard.modifiers</span> flag seems to be updated in the ALLEGRO_EVENT_KEY_DOWN event on Linux, at least. Looking through the Allegro source (and I&#39;m definitely not experienced enough to know for sure) it looks like the modifiers variable is being updated in the key press function. <a href="https://github.com/liballeg/allegro5/blob/f41f49d65c89fdb214b4dd49172b5adfbf16c4ec/src/win/wkeyboard.c#L358">https://github.com/liballeg/allegro5/blob/f41f49d65c89fdb214b4dd49172b5adfbf16c4ec/src/win/wkeyboard.c#L358</a></p><p>Thanks for the help all, I&#39;ll let you know how it goes.</p><p>UDPATE:</p><p>I have just compiled and ran the above code sample, and it does not work on my system. A snippet of the output:</p><div class="source-code snippet"><div class="inner"><pre>shift: <span class="n">0</span>, alt: <span class="n">0</span>, ctrl: <span class="n">0</span>, command: <span class="n">0</span>, key: S
shift: <span class="n">0</span>, alt: <span class="n">0</span>, ctrl: <span class="n">0</span>, command: <span class="n">0</span>, key: D
shift: <span class="n">0</span>, alt: <span class="n">0</span>, ctrl: <span class="n">0</span>, command: <span class="n">0</span>, key: C
shift: <span class="n">0</span>, alt: <span class="n">0</span>, ctrl: <span class="n">0</span>, command: <span class="n">0</span>, key: LSHIFT
shift: <span class="n">0</span>, alt: <span class="n">0</span>, ctrl: <span class="n">0</span>, command: <span class="n">0</span>, key: C
</pre></div></div><p>

The modifiers never change.</p><p>I may just do this manually and keep track of which modifier keys are held down myself.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Aksel Huff)</author>
		<pubDate>Sat, 05 Mar 2022 02:43:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Like I said, I think this was recently added. That may be why it works for Mark Oates and not for you.</p><p>The changes may be in the latest Git. If you want, you can try compiling allegro and see if the changes are there.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 05 Mar 2022 21:02:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Just looked at the changes from 5.2.6 to 7 and yes you are absolutely correct:</p><p><a href="https://liballeg.org/changes-5.2.html">https://liballeg.org/changes-5.2.html</a></p><p>I believe the Allegro5 libraries I got through pacman in msys were 5.2.6 so that makes sense for why it isn&#39;t working on Windows.</p><p>Thanks
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Aksel Huff)</author>
		<pubDate>Sun, 06 Mar 2022 05:11:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Sweet.</p><p>I like the way you indent your <span class="source-code"><span class="k1">case</span></span> blocks by the way:</p><p><span class="remote-thumbnail"><span class="json">{"name":"613137","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/9\/1\/9122597f3a589c446742c0ea32d0eca2.png","w":1214,"h":679,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/9\/1\/9122597f3a589c446742c0ea32d0eca2"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/9/1/9122597f3a589c446742c0ea32d0eca2-240.jpg" alt="613137" width="240" height="134" /></span></p><p>I&#39;ve never seen it like that, it&#39;s very easy to read.  I might actually adopt it. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Sun, 06 Mar 2022 05:38:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks Mark, I appreciate that.</p><p>Is there anyway to modify who I&#39;ve given credit to for helping out? I mistakenly only gave credit to you Mark, and not Edgar, if it even means anything to you guys, hah.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Aksel Huff)</author>
		<pubDate>Sun, 06 Mar 2022 07:59:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=";D" border="0" />, I don&#39;t need credit. It&#39;s just a way of saying thank you anyway. No real rewards for getting credit. <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 06 Mar 2022 20:12:51 +0000</pubDate>
	</item>
</rss>
