<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>[Allegro5] Popup menu fails to display</title>
		<link>http://www.allegro.cc/forums/view/617010</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Thu, 17 Aug 2017 00:26:46 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi, it&#39;s me again with another native dialogs problem. This time, it&#39;s al_popup_menu() giving me trouble.</p><p>The example below should display a simple popup menu on left mouse click.  al_popup_menu() returns true indicating it was successful, but no popup menu is actually displayed, except in some rare circumstances. It tends to work on the very first run after compiling for the first time, but not afterwards. Occasionally the menu also shows up if I do a short drag to the lower left before releasing the mouse button.</p><p>Unlike with the other issue, registering mouse events and using that to detect the button press will not help here. So I&#39;m pretty sure I&#39;m doing something wrong.</p><p>For reference, my setup is Debian/GTK 3.22/Allegro 5.2.2.</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;allegro5/allegro.h&gt;</span>
<span class="number">   3</span><span class="p">#include &lt;allegro5/allegro_native_dialog.h&gt;</span>
<span class="number">   4</span>
<span class="number">   5</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="k2">{</span>
<span class="number">   6</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_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">   8</span>        std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Allegro initialization failed.\n"</span><span class="k2">;</span>
<span class="number">   9</span>        <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  10</span>    <span class="k2">}</span>
<span class="number">  11</span>    
<span class="number">  12</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display<span class="k2">;</span>
<span class="number">  13</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a> <span class="k3">*</span>timer<span class="k2">;</span>
<span class="number">  14</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a> <span class="k3">*</span>queue<span class="k2">;</span>
<span class="number">  15</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_MOUSE_STATE"><span class="a">ALLEGRO_MOUSE_STATE</span></a> mouse<span class="k2">;</span>
<span class="number">  16</span>    ALLEGRO_MENU <span class="k3">*</span>menu<span class="k2">;</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="number">  19</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>al_init_native_dialog_addon<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  20</span>        std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Failed to initialize native dialogs.\n"</span><span class="k2">;</span>
<span class="number">  21</span>        <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  22</span>    <span class="k2">}</span>
<span class="number">  23</span>    
<span class="number">  24</span><span class="p">#ifdef ALLEGRO_GTK_TOPLEVEL</span>
<span class="number">  25</span>    <a href="http://www.allegro.cc/manual/al_set_new_display_flags"><span class="a">al_set_new_display_flags</span></a><span class="k2">(</span>ALLEGRO_GTK_TOPLEVEL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  26</span><span class="p">#endif</span>
<span class="number">  27</span>    
<span class="number">  28</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">640</span>, <span class="n">480</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  29</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>display<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  30</span>        std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Failed to initialize display.\n"</span><span class="k2">;</span>
<span class="number">  31</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">  32</span>        <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  33</span>    <span class="k2">}</span>
<span class="number">  34</span>    
<span class="number">  35</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</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="k2">{</span>
<span class="number">  36</span>        std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Failed to initialize keyboard.\n"</span><span class="k2">;</span>
<span class="number">  37</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">  38</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">  39</span>        <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  40</span>    <span class="k2">}</span>
<span class="number">  41</span>    
<span class="number">  42</span>    timer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_timer"><span class="a">al_create_timer</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0f</span><span class="k3">/</span><span class="n">25</span>.<span class="n">0f</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  43</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>timer<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  44</span>        std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Failed to initialize timer.\n"</span><span class="k2">;</span>
<span class="number">  45</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">  46</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">  47</span>        <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  48</span>    <span class="k2">}</span>
<span class="number">  49</span>    
<span class="number">  50</span>    menu <span class="k3">=</span> al_create_popup_menu<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  51</span>    al_append_menu_item<span class="k2">(</span>menu, <span class="s">"Option"</span>, <span class="n">1</span>, <span class="n">0</span>, nullptr, nullptr<span class="k2">)</span><span class="k2">;</span>
<span class="number">  52</span>    <span class="k1">bool</span> menuDisplayed <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  53</span>    
<span class="number">  54</span>    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">  55</span>
<span class="number">  56</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>queue<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  57</span>        std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Failed to initialize event queue.\n"</span><span class="k2">;</span>
<span class="number">  58</span>        <a href="http://www.allegro.cc/manual/al_destroy_timer"><span class="a">al_destroy_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number">  59</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">  60</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">  61</span>        <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  62</span>    <span class="k2">}</span>
<span class="number">  63</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>queue, <a href="http://www.allegro.cc/manual/al_get_display_event_source"><span class="a">al_get_display_event_source</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  64</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>queue, <a href="http://www.allegro.cc/manual/al_get_timer_event_source"><span class="a">al_get_timer_event_source</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  65</span><span class="c">//    al_register_event_source(queue, al_get_mouse_event_source());</span>
<span class="number">  66</span>    <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number">  67</span>    
<span class="number">  68</span>    <span class="k1">while</span> <span class="k2">(</span><span class="k1">true</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  69</span>    
<span class="number">  70</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>queue, <span class="k3">&amp;</span>event<span class="k2">)</span><span class="k2">;</span>
<span class="number">  71</span>
<span class="number">  72</span>       <span class="c">//neither this nor the timed version work    </span>
<span class="number">  73</span><span class="c">//     if (event.type == ALLEGRO_EVENT_MOUSE_BUTTON_DOWN) {</span>
<span class="number">  74</span><span class="c">//     </span>
<span class="number">  75</span><span class="c">//         if (event.mouse.button == 1 &amp;&amp; !menuDisplayed) {</span>
<span class="number">  76</span><span class="c">//             </span>
<span class="number">  77</span><span class="c">//             if (al_popup_menu(menu, display)) std::cout &lt;&lt; "Displaying menu... or not\n";</span>
<span class="number">  78</span><span class="c">//             else std::cout &lt;&lt; "Displaying menu failed";</span>
<span class="number">  79</span><span class="c">//             menuDisplayed = true;</span>
<span class="number">  80</span><span class="c">//         }</span>
<span class="number">  81</span><span class="c">//         else menuDisplayed = false;</span>
<span class="number">  82</span><span class="c">//     } </span>
<span class="number">  83</span>            
<span class="number">  84</span>        <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  85</span>           
<span class="number">  86</span>            <a href="http://www.allegro.cc/manual/al_get_mouse_state"><span class="a">al_get_mouse_state</span></a><span class="k2">(</span><span class="k3">&amp;</span>mouse<span class="k2">)</span><span class="k2">;</span>
<span class="number">  87</span>        
<span class="number">  88</span>            <span class="k1">if</span> <span class="k2">(</span>mouse.buttons <span class="k3">&amp;</span> <span class="n">1</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span>menuDisplayed<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  89</span>            
<span class="number">  90</span>         <span class="k1">if</span> <span class="k2">(</span>al_popup_menu<span class="k2">(</span>menu, display<span class="k2">)</span><span class="k2">)</span> std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Displaying menu... or not\n"</span><span class="k2">;</span>
<span class="number">  91</span>               <span class="k1">else</span> std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Displaying menu failed"</span><span class="k2">;</span>
<span class="number">  92</span>               menuDisplayed <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  93</span>            <span class="k2">}</span>
<span class="number">  94</span>            <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>mouse.buttons <span class="k3">&amp;</span> <span class="n">2</span><span class="k2">)</span> menuDisplayed <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  95</span>        <span class="k2">}</span>
<span class="number">  96</span>    
<span class="number">  97</span>        <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_CLOSE<span class="k2">)</span> <span class="k1">break</span><span class="k2">;</span>
<span class="number">  98</span>    <span class="k2">}</span>
<span class="number">  99</span>
<span class="number"> 100</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>queue<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 101</span>    <a href="http://www.allegro.cc/manual/al_destroy_timer"><span class="a">al_destroy_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 102</span>    al_destroy_menu<span class="k2">(</span>menu<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 103</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"> 104</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"> 105</span>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 106</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (utz000)</author>
		<pubDate>Wed, 16 Aug 2017 00:29:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Take a look at ex_menu.c for a working example of creating context menus. It is located in the examples directory of wherever you built Allegro 5.</p><p><b>ex_menu.c</b>
</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 "allegro5/allegro.h"</span>
<span class="number">   2</span><span class="p">#include "allegro5/allegro_native_dialog.h"</span>
<span class="number">   3</span><span class="p">#include "allegro5/allegro_image.h"</span>
<span class="number">   4</span><span class="p">#include &lt;stdio.h&gt;</span>
<span class="number">   5</span><span class="p">#include &lt;math.h&gt;</span>
<span class="number">   6</span>
<span class="number">   7</span><span class="p">#include "common.c"</span>
<span class="number">   8</span>
<span class="number">   9</span><span class="c">/* The following is a list of menu item ids. They can be any non-zero, positive</span>
<span class="number">  10</span><span class="c"> * integer. A menu item must have an id in order for it to generate an event.</span>
<span class="number">  11</span><span class="c"> * Also, each menu item's id should be unique to get well defined results. </span>
<span class="number">  12</span><span class="c"> */</span>
<span class="number">  13</span><span class="k1">enum</span> <span class="k2">{</span>
<span class="number">  14</span>   FILE_ID <span class="k3">=</span> <span class="n">1</span>,
<span class="number">  15</span>   FILE_OPEN_ID,
<span class="number">  16</span>   FILE_RESIZE_ID,
<span class="number">  17</span>   FILE_FULLSCREEN_ID,
<span class="number">  18</span>   FILE_CLOSE_ID,
<span class="number">  19</span>   FILE_EXIT_ID,
<span class="number">  20</span>   DYNAMIC_ID,
<span class="number">  21</span>   DYNAMIC_CHECKBOX_ID,
<span class="number">  22</span>   DYNAMIC_DISABLED_ID,
<span class="number">  23</span>   DYNAMIC_DELETE_ID,
<span class="number">  24</span>   DYNAMIC_CREATE_ID,
<span class="number">  25</span>   HELP_ABOUT_ID
<span class="number">  26</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  27</span>
<span class="number">  28</span><span class="c">/* This is one way to define a menu. The entire system, nested menus and all,</span>
<span class="number">  29</span><span class="c"> * can be defined by this single array. </span>
<span class="number">  30</span><span class="c"> */</span>
<span class="number">  31</span>ALLEGRO_MENU_INFO main_menu_info<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span>
<span class="number">  32</span>   ALLEGRO_START_OF_MENU<span class="k2">(</span><span class="s">"&amp;File"</span>, FILE_ID<span class="k2">)</span>,
<span class="number">  33</span>      <span class="k2">{</span> <span class="s">"&amp;Open"</span>, FILE_OPEN_ID, <span class="n">0</span>, NULL <span class="k2">}</span>,
<span class="number">  34</span>      ALLEGRO_MENU_SEPARATOR,
<span class="number">  35</span>      <span class="k2">{</span> <span class="s">"E&amp;xit"</span>, FILE_EXIT_ID, <span class="n">0</span>, NULL <span class="k2">}</span>,
<span class="number">  36</span>      ALLEGRO_END_OF_MENU,
<span class="number">  37</span>   
<span class="number">  38</span>   ALLEGRO_START_OF_MENU<span class="k2">(</span><span class="s">"&amp;Dynamic Options"</span>, DYNAMIC_ID<span class="k2">)</span>,
<span class="number">  39</span>      <span class="k2">{</span> <span class="s">"&amp;Checkbox"</span>, DYNAMIC_CHECKBOX_ID, ALLEGRO_MENU_ITEM_CHECKED, NULL <span class="k2">}</span>,
<span class="number">  40</span>      <span class="k2">{</span> <span class="s">"&amp;Disabled"</span>, DYNAMIC_DISABLED_ID, ALLEGRO_MENU_ITEM_DISABLED, NULL <span class="k2">}</span>,
<span class="number">  41</span>      <span class="k2">{</span> <span class="s">"DELETE ME!"</span>, DYNAMIC_DELETE_ID, <span class="n">0</span>, NULL <span class="k2">}</span>,
<span class="number">  42</span>      <span class="k2">{</span> <span class="s">"Click Me"</span>, DYNAMIC_CREATE_ID, <span class="n">0</span>, NULL <span class="k2">}</span>,
<span class="number">  43</span>      ALLEGRO_END_OF_MENU,
<span class="number">  44</span>
<span class="number">  45</span>   ALLEGRO_START_OF_MENU<span class="k2">(</span><span class="s">"&amp;Help"</span>, <span class="n">0</span><span class="k2">)</span>,
<span class="number">  46</span>      <span class="k2">{</span> <span class="s">"&amp;About"</span>, HELP_ABOUT_ID, <span class="n">0</span>, NULL <span class="k2">}</span>,
<span class="number">  47</span>      ALLEGRO_END_OF_MENU,
<span class="number">  48</span> 
<span class="number">  49</span>   ALLEGRO_END_OF_MENU
<span class="number">  50</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  51</span>
<span class="number">  52</span><span class="c">/* This is the menu on the secondary windows. */</span>
<span class="number">  53</span>ALLEGRO_MENU_INFO child_menu_info<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span>
<span class="number">  54</span>   ALLEGRO_START_OF_MENU<span class="k2">(</span><span class="s">"&amp;File"</span>, <span class="n">0</span><span class="k2">)</span>,
<span class="number">  55</span>      <span class="k2">{</span> <span class="s">"&amp;Close"</span>, FILE_CLOSE_ID, <span class="n">0</span>, NULL <span class="k2">}</span>,
<span class="number">  56</span>      ALLEGRO_END_OF_MENU,
<span class="number">  57</span>   ALLEGRO_END_OF_MENU
<span class="number">  58</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  59</span>
<span class="number">  60</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">  61</span><span class="k2">{</span>
<span class="number">  62</span>   <span class="k1">const</span> <span class="k1">int</span> initial_width <span class="k3">=</span> <span class="n">320</span><span class="k2">;</span>
<span class="number">  63</span>   <span class="k1">const</span> <span class="k1">int</span> initial_height <span class="k3">=</span> <span class="n">200</span><span class="k2">;</span>
<span class="number">  64</span>   <span class="k1">int</span> windows_menu_height <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  65</span>   <span class="k1">int</span> dcount <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  66</span>
<span class="number">  67</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display<span class="k2">;</span>
<span class="number">  68</span>   ALLEGRO_MENU <span class="k3">*</span>menu<span class="k2">;</span>
<span class="number">  69</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a> <span class="k3">*</span>queue<span class="k2">;</span>
<span class="number">  70</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a> <span class="k3">*</span>timer<span class="k2">;</span>
<span class="number">  71</span>   <span class="k1">bool</span> redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  72</span>   <span class="k1">bool</span> menu_visible <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  73</span>   ALLEGRO_MENU <span class="k3">*</span>pmenu<span class="k2">;</span>
<span class="number">  74</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>bg<span class="k2">;</span>
<span class="number">  75</span>
<span class="number">  76</span>   <span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>argc<span class="k2">;</span>
<span class="number">  77</span>   <span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>argv<span class="k2">;</span>
<span class="number">  78</span>
<span class="number">  79</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</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="k2">{</span>
<span class="number">  80</span>      abort_example<span class="k2">(</span><span class="s">"Could not init Allegro.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  81</span>   <span class="k2">}</span>
<span class="number">  82</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>al_init_native_dialog_addon<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  83</span>      abort_example<span class="k2">(</span><span class="s">"Could not init the native dialog addon.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  84</span>   <span class="k2">}</span>
<span class="number">  85</span>   <a href="http://www.allegro.cc/manual/al_init_image_addon"><span class="a">al_init_image_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  86</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">  87</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">  88</span>
<span class="number">  89</span>   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">  90</span>
<span class="number">  91</span><span class="p">#ifdef ALLEGRO_GTK_TOPLEVEL</span>
<span class="number">  92</span>   <span class="c">/* ALLEGRO_GTK_TOPLEVEL is necessary for menus with GTK. */</span>
<span class="number">  93</span>   <a href="http://www.allegro.cc/manual/al_set_new_display_flags"><span class="a">al_set_new_display_flags</span></a><span class="k2">(</span>ALLEGRO_RESIZABLE <span class="k3">|</span> ALLEGRO_GTK_TOPLEVEL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  94</span><span class="p">#else</span>
<span class="number">  95</span>   <a href="http://www.allegro.cc/manual/al_set_new_display_flags"><span class="a">al_set_new_display_flags</span></a><span class="k2">(</span>ALLEGRO_RESIZABLE<span class="k2">)</span><span class="k2">;</span>
<span class="number">  96</span><span class="p">#endif</span>
<span class="number">  97</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>initial_width, initial_height<span class="k2">)</span><span class="k2">;</span>
<span class="number">  98</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>display<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  99</span>      abort_example<span class="k2">(</span><span class="s">"Error creating display\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 100</span>   <span class="k2">}</span>
<span class="number"> 101</span>   <a href="http://www.allegro.cc/manual/al_set_window_title"><span class="a">al_set_window_title</span></a><span class="k2">(</span>display, <span class="s">"ex_menu - Main Window"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 102</span>   
<span class="number"> 103</span>   menu <span class="k3">=</span> al_build_menu<span class="k2">(</span>main_menu_info<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 104</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>menu<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 105</span>      abort_example<span class="k2">(</span><span class="s">"Error creating menu\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 106</span>   <span class="k2">}</span>
<span class="number"> 107</span>   
<span class="number"> 108</span>   <span class="c">/* Add an icon to the Help/About item. Note that Allegro assumes ownership</span>
<span class="number"> 109</span><span class="c">    * of the bitmap. */</span>
<span class="number"> 110</span>   al_set_menu_item_icon<span class="k2">(</span>menu, HELP_ABOUT_ID, <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"data/icon.tga"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 111</span>   
<span class="number"> 112</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>al_set_display_menu<span class="k2">(</span>display, menu<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 113</span>      <span class="c">/* Since the menu could not be attached to the window, then treat it as</span>
<span class="number"> 114</span><span class="c">       * a popup menu instead. */</span>
<span class="number"> 115</span>      pmenu <span class="k3">=</span> al_clone_menu_for_popup<span class="k2">(</span>menu<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 116</span>      al_destroy_menu<span class="k2">(</span>menu<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 117</span>      menu <span class="k3">=</span> pmenu<span class="k2">;</span>
<span class="number"> 118</span>   <span class="k2">}</span>
<span class="number"> 119</span>   <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 120</span>      <span class="c">/* Create a simple popup menu used when right clicking. */</span>
<span class="number"> 121</span>      pmenu <span class="k3">=</span> al_create_popup_menu<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 122</span>      <span class="k1">if</span> <span class="k2">(</span>pmenu<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 123</span>         al_append_menu_item<span class="k2">(</span>pmenu, <span class="s">"&amp;Open"</span>, FILE_OPEN_ID, <span class="n">0</span>, NULL, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 124</span>         al_append_menu_item<span class="k2">(</span>pmenu, <span class="s">"&amp;Resize"</span>, FILE_RESIZE_ID, <span class="n">0</span>, NULL, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 125</span>         al_append_menu_item<span class="k2">(</span>pmenu, <span class="s">"&amp;Fullscreen window"</span>, FILE_FULLSCREEN_ID, <span class="n">0</span>, NULL, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 126</span>         al_append_menu_item<span class="k2">(</span>pmenu, <span class="s">"E&amp;xit"</span>, FILE_EXIT_ID, <span class="n">0</span>, NULL, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 127</span>      <span class="k2">}</span>
<span class="number"> 128</span>   <span class="k2">}</span>
<span class="number"> 129</span>   
<span class="number"> 130</span>   timer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_timer"><span class="a">al_create_timer</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span> <span class="k3">/</span> <span class="n">60</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 131</span>
<span class="number"> 132</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>queue, <a href="http://www.allegro.cc/manual/al_get_display_event_source"><span class="a">al_get_display_event_source</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 133</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>queue, al_get_default_menu_event_source<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 134</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>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"> 135</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>queue, <a href="http://www.allegro.cc/manual/al_get_mouse_event_source"><span class="a">al_get_mouse_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 136</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>queue, <a href="http://www.allegro.cc/manual/al_get_timer_event_source"><span class="a">al_get_timer_event_source</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 137</span>
<span class="number"> 138</span>   bg <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"data/mysha.pcx"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 139</span>
<span class="number"> 140</span>   <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 141</span>
<span class="number"> 142</span>   <span class="k1">while</span> <span class="k2">(</span><span class="k1">true</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 143</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"> 144</span>
<span class="number"> 145</span>      <span class="k1">if</span> <span class="k2">(</span>redraw <span class="k3">&amp;</span><span class="k3">&amp;</span> <a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>queue<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 146</span>         redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 147</span>         <span class="k1">if</span> <span class="k2">(</span>bg<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 148</span>            <span class="k1">float</span> t <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_timer_count"><span class="a">al_get_timer_count</span></a><span class="k2">(</span>timer<span class="k2">)</span> <span class="k3">*</span> <span class="n">0</span>.<span class="n">1</span><span class="k2">;</span>
<span class="number"> 149</span>            <span class="k1">float</span> sw <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>bg<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 150</span>            <span class="k1">float</span> sh <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>bg<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 151</span>            <span class="k1">float</span> dw <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_width"><span class="a">al_get_display_width</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 152</span>            <span class="k1">float</span> dh <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_height"><span class="a">al_get_display_height</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 153</span>            <span class="k1">float</span> cx <span class="k3">=</span> dw<span class="k3">/</span><span class="n">2</span><span class="k2">;</span>
<span class="number"> 154</span>            <span class="k1">float</span> cy <span class="k3">=</span> dh<span class="k3">/</span><span class="n">2</span><span class="k2">;</span>
<span class="number"> 155</span>            dw <span class="k3">*</span><span class="k3">=</span> <span class="n">1</span>.<span class="n">2</span> <span class="k3">+</span> <span class="n">0</span>.<span class="n">2</span> <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>t<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 156</span>            dh <span class="k3">*</span><span class="k3">=</span> <span class="n">1</span>.<span class="n">2</span> <span class="k3">+</span> <span class="n">0</span>.<span class="n">2</span> <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span><span class="n">1</span>.<span class="n">1</span> <span class="k3">*</span> t<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 157</span>            <a href="http://www.allegro.cc/manual/al_draw_scaled_bitmap"><span class="a">al_draw_scaled_bitmap</span></a><span class="k2">(</span>bg, <span class="n">0</span>, <span class="n">0</span>, sw, sh,
<span class="number"> 158</span>               cx <span class="k3">-</span> dw<span class="k3">/</span><span class="n">2</span>, cy <span class="k3">-</span> dh<span class="k3">/</span><span class="n">2</span>, dw, dh, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 159</span>   <span class="k2">}</span>
<span class="number"> 160</span>         <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 161</span>      <span class="k2">}</span>
<span class="number"> 162</span>
<span class="number"> 163</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>queue, <span class="k3">&amp;</span>event<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 164</span>
<span class="number"> 165</span>      <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_CLOSE<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 166</span>         <span class="k1">if</span> <span class="k2">(</span>event.display.source <span class="k3">=</span><span class="k3">=</span> display<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 167</span>            <span class="c">/* Closing the primary display */</span>
<span class="number"> 168</span>            <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 169</span>         <span class="k2">}</span>
<span class="number"> 170</span>         <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 171</span>            <span class="c">/* Closing a secondary display */</span>
<span class="number"> 172</span>            al_set_display_menu<span class="k2">(</span>event.display.source, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 173</span>            <a href="http://www.allegro.cc/manual/al_destroy_display"><span class="a">al_destroy_display</span></a><span class="k2">(</span>event.display.source<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 174</span>         <span class="k2">}</span>
<span class="number"> 175</span>      <span class="k2">}</span>
<span class="number"> 176</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MENU_CLICK<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 177</span>         <span class="c">/* data1: id</span>
<span class="number"> 178</span><span class="c">          * data2: display (could be null)</span>
<span class="number"> 179</span><span class="c">          * data3: menu    (could be null)</span>
<span class="number"> 180</span><span class="c">          */</span>
<span class="number"> 181</span>         <span class="k1">if</span> <span class="k2">(</span>event.user.data2 <span class="k3">=</span><span class="k3">=</span> <span class="k2">(</span>intptr_t<span class="k2">)</span> display<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 182</span>            <span class="c">/* The main window. */</span>
<span class="number"> 183</span>            <span class="k1">if</span> <span class="k2">(</span>event.user.data1 <span class="k3">=</span><span class="k3">=</span> FILE_OPEN_ID<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 184</span>               <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>d <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">320</span>, <span class="n">240</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 185</span>               <span class="k1">if</span> <span class="k2">(</span>d<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 186</span>                  ALLEGRO_MENU <span class="k3">*</span>menu <span class="k3">=</span> al_build_menu<span class="k2">(</span>child_menu_info<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 187</span>                  al_set_display_menu<span class="k2">(</span>d, menu<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 188</span>                  <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 189</span>                  <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>                  
<span class="number"> 190</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>queue, <a href="http://www.allegro.cc/manual/al_get_display_event_source"><span class="a">al_get_display_event_source</span></a><span class="k2">(</span>d<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 191</span>                  <a href="http://www.allegro.cc/manual/al_set_target_backbuffer"><span class="a">al_set_target_backbuffer</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 192</span>                  <a href="http://www.allegro.cc/manual/al_set_window_title"><span class="a">al_set_window_title</span></a><span class="k2">(</span>d, <span class="s">"ex_menu - Child Window"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 193</span>               <span class="k2">}</span>
<span class="number"> 194</span>            <span class="k2">}</span>
<span class="number"> 195</span>            <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.user.data1 <span class="k3">=</span><span class="k3">=</span> DYNAMIC_CHECKBOX_ID<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 196</span>               al_set_menu_item_flags<span class="k2">(</span>menu, DYNAMIC_DISABLED_ID, al_get_menu_item_flags<span class="k2">(</span>menu, DYNAMIC_DISABLED_ID<span class="k2">)</span> ^ ALLEGRO_MENU_ITEM_DISABLED<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 197</span>               al_set_menu_item_caption<span class="k2">(</span>menu, DYNAMIC_DISABLED_ID, 
<span class="number"> 198</span>                  <span class="k2">(</span>al_get_menu_item_flags<span class="k2">(</span>menu, DYNAMIC_DISABLED_ID<span class="k2">)</span> <span class="k3">&amp;</span> ALLEGRO_MENU_ITEM_DISABLED<span class="k2">)</span> ?
<span class="number"> 199</span>                  <span class="s">"&amp;Disabled"</span> <span class="k2">:</span> <span class="s">"&amp;Enabled"</span><span class="k2">)</span><span class="k2">;</span>               
<span class="number"> 200</span>            <span class="k2">}</span>
<span class="number"> 201</span>            <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.user.data1 <span class="k3">=</span><span class="k3">=</span> DYNAMIC_DELETE_ID<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 202</span>               al_remove_menu_item<span class="k2">(</span>menu, DYNAMIC_DELETE_ID<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 203</span>            <span class="k2">}</span>
<span class="number"> 204</span>            <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.user.data1 <span class="k3">=</span><span class="k3">=</span> DYNAMIC_CREATE_ID<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 205</span>               <span class="k1">if</span> <span class="k2">(</span>dcount <span class="k3">&lt;</span> <span class="n">5</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 206</span>                  <span class="k1">char</span> new_name<span class="k2">[</span><span class="n">10</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 207</span>                  
<span class="number"> 208</span>                  <span class="k3">+</span><span class="k3">+</span>dcount<span class="k2">;</span>
<span class="number"> 209</span>                  <span class="k1">if</span> <span class="k2">(</span>dcount <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 210</span>                     <span class="c">/* append a separator */</span>
<span class="number"> 211</span>                     al_append_menu_item<span class="k2">(</span>al_find_menu<span class="k2">(</span>menu, DYNAMIC_ID<span class="k2">)</span>, NULL, <span class="n">0</span>, <span class="n">0</span>, NULL, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 212</span>                  <span class="k2">}</span>
<span class="number"> 213</span>                  
<span class="number"> 214</span>                  <a href="http://www.delorie.com/djgpp/doc/libc/libc_737.html" target="_blank">sprintf</a><span class="k2">(</span>new_name, <span class="s">"New #%d"</span>, dcount<span class="k2">)</span><span class="k2">;</span>                  
<span class="number"> 215</span>                  al_append_menu_item<span class="k2">(</span>al_find_menu<span class="k2">(</span>menu, DYNAMIC_ID<span class="k2">)</span>, new_name, <span class="n">0</span>, <span class="n">0</span>, NULL, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 216</span>                  
<span class="number"> 217</span>                  <span class="k1">if</span> <span class="k2">(</span>dcount <span class="k3">=</span><span class="k3">=</span> <span class="n">5</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 218</span>                     <span class="c">/* disable the option */</span>
<span class="number"> 219</span>                     al_set_menu_item_flags<span class="k2">(</span>menu, DYNAMIC_CREATE_ID, ALLEGRO_MENU_ITEM_DISABLED<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 220</span>                  <span class="k2">}</span>
<span class="number"> 221</span>               <span class="k2">}</span>
<span class="number"> 222</span>            <span class="k2">}</span>
<span class="number"> 223</span>            <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.user.data1 <span class="k3">=</span><span class="k3">=</span> HELP_ABOUT_ID<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 224</span>               <a href="http://www.allegro.cc/manual/al_show_native_message_box"><span class="a">al_show_native_message_box</span></a><span class="k2">(</span>display, <span class="s">"About"</span>, <span class="s">"ex_menu"</span>,
<span class="number"> 225</span>                  <span class="s">"This is a sample program that shows how to use menus"</span>,
<span class="number"> 226</span>                  <span class="s">"OK"</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 227</span>            <span class="k2">}</span>
<span class="number"> 228</span>            <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.user.data1 <span class="k3">=</span><span class="k3">=</span> FILE_EXIT_ID<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 229</span>               <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 230</span>            <span class="k2">}</span>
<span class="number"> 231</span>            <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.user.data1 <span class="k3">=</span><span class="k3">=</span> FILE_RESIZE_ID<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 232</span>               <span class="k1">int</span> w <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_width"><span class="a">al_get_display_width</span></a><span class="k2">(</span>display<span class="k2">)</span> <span class="k3">*</span> <span class="n">2</span><span class="k2">;</span>
<span class="number"> 233</span>               <span class="k1">int</span> h <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_height"><span class="a">al_get_display_height</span></a><span class="k2">(</span>display<span class="k2">)</span> <span class="k3">*</span> <span class="n">2</span><span class="k2">;</span>
<span class="number"> 234</span>               <span class="k1">if</span> <span class="k2">(</span>w <span class="k3">&gt;</span> <span class="n">960</span><span class="k2">)</span>
<span class="number"> 235</span>                  w <span class="k3">=</span> <span class="n">960</span><span class="k2">;</span>
<span class="number"> 236</span>               <span class="k1">if</span> <span class="k2">(</span>h <span class="k3">&gt;</span> <span class="n">600</span><span class="k2">)</span>
<span class="number"> 237</span>                  h <span class="k3">=</span> <span class="n">600</span><span class="k2">;</span>
<span class="number"> 238</span>               <span class="k1">if</span> <span class="k2">(</span>menu_visible<span class="k2">)</span>
<span class="number"> 239</span>                  <a href="http://www.allegro.cc/manual/al_resize_display"><span class="a">al_resize_display</span></a><span class="k2">(</span>display, w, h <span class="k3">+</span> windows_menu_height<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 240</span>               <span class="k1">else</span>
<span class="number"> 241</span>                  <a href="http://www.allegro.cc/manual/al_resize_display"><span class="a">al_resize_display</span></a><span class="k2">(</span>display, w, h<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 242</span>            <span class="k2">}</span>
<span class="number"> 243</span>            <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.user.data1 <span class="k3">=</span><span class="k3">=</span> FILE_FULLSCREEN_ID<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 244</span>               <span class="k1">int</span> flags <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_flags"><span class="a">al_get_display_flags</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 245</span>               <span class="k1">bool</span> value <span class="k3">=</span> <span class="k2">(</span>flags <span class="k3">&amp;</span> ALLEGRO_FULLSCREEN_WINDOW<span class="k2">)</span> ? <span class="k1">true</span> <span class="k2">:</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 246</span>               al_set_display_flag<span class="k2">(</span>display, ALLEGRO_FULLSCREEN_WINDOW, <span class="k3">!</span>value<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 247</span>            <span class="k2">}</span>
<span class="number"> 248</span>         <span class="k2">}</span>
<span class="number"> 249</span>         <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 250</span>            <span class="c">/* The child window  */</span>
<span class="number"> 251</span>            <span class="k1">if</span> <span class="k2">(</span>event.user.data1 <span class="k3">=</span><span class="k3">=</span> FILE_CLOSE_ID<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 252</span>               <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>d <span class="k3">=</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span><span class="k2">)</span> event.user.data2<span class="k2">;</span>
<span class="number"> 253</span>               <span class="k1">if</span> <span class="k2">(</span>d<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 254</span>                  al_set_display_menu<span class="k2">(</span>d, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 255</span>                  <a href="http://www.allegro.cc/manual/al_destroy_display"><span class="a">al_destroy_display</span></a><span class="k2">(</span>d<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 256</span>               <span class="k2">}</span>
<span class="number"> 257</span>            <span class="k2">}</span>
<span class="number"> 258</span>         <span class="k2">}</span>
<span class="number"> 259</span>      <span class="k2">}</span>
<span class="number"> 260</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_BUTTON_UP<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 261</span>         <span class="c">/* Popup a context menu on a right click. */</span>
<span class="number"> 262</span>         <span class="k1">if</span> <span class="k2">(</span>event.mouse.display <span class="k3">=</span><span class="k3">=</span> display <span class="k3">&amp;</span><span class="k3">&amp;</span> event.mouse.button <span class="k3">=</span><span class="k3">=</span> <span class="n">2</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 263</span>            <span class="k1">if</span> <span class="k2">(</span>pmenu<span class="k2">)</span>
<span class="number"> 264</span>               al_popup_menu<span class="k2">(</span>pmenu, display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 265</span>         <span class="k2">}</span>
<span class="number"> 266</span>      <span class="k2">}</span>
<span class="number"> 267</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_CHAR<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 268</span>         <span class="c">/* Toggle the menu if the spacebar is pressed */</span>
<span class="number"> 269</span>         <span class="k1">if</span> <span class="k2">(</span>event.keyboard.display <span class="k3">=</span><span class="k3">=</span> display<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 270</span>            <span class="k1">if</span> <span class="k2">(</span>event.keyboard.unichar <span class="k3">=</span><span class="k3">=</span> <span class="s">' '</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 271</span>               <span class="k1">if</span> <span class="k2">(</span>menu_visible<span class="k2">)</span>
<span class="number"> 272</span>                  al_remove_display_menu<span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 273</span>               <span class="k1">else</span>
<span class="number"> 274</span>                  al_set_display_menu<span class="k2">(</span>display, menu<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 275</span>
<span class="number"> 276</span>               menu_visible <span class="k3">=</span> <span class="k3">!</span>menu_visible<span class="k2">;</span>
<span class="number"> 277</span>            <span class="k2">}</span>
<span class="number"> 278</span>         <span class="k2">}</span>
<span class="number"> 279</span>      <span class="k2">}</span>
<span class="number"> 280</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_RESIZE<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 281</span>         <a href="http://www.allegro.cc/manual/al_acknowledge_resize"><span class="a">al_acknowledge_resize</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 282</span>         redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 283</span>
<span class="number"> 284</span><span class="p">#ifdef ALLEGRO_WINDOWS</span>
<span class="number"> 285</span>         <span class="c">/* XXX The Windows implementation currently uses part of the client's</span>
<span class="number"> 286</span><span class="c">          * height to render the window. This triggers a resize event, which</span>
<span class="number"> 287</span><span class="c">          * can be trapped and used to compute the menu height, and then</span>
<span class="number"> 288</span><span class="c">          * resize the display again to what we expect it to be.</span>
<span class="number"> 289</span><span class="c">          */</span>
<span class="number"> 290</span>         <span class="k1">if</span> <span class="k2">(</span>event.display.source <span class="k3">=</span><span class="k3">=</span> display <span class="k3">&amp;</span><span class="k3">&amp;</span> windows_menu_height <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 291</span>            windows_menu_height <span class="k3">=</span> initial_height <span class="k3">-</span> <a href="http://www.allegro.cc/manual/al_get_display_height"><span class="a">al_get_display_height</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 292</span>            <a href="http://www.allegro.cc/manual/al_resize_display"><span class="a">al_resize_display</span></a><span class="k2">(</span>display, initial_width, initial_height <span class="k3">+</span> windows_menu_height<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 293</span>         <span class="k2">}</span>
<span class="number"> 294</span><span class="p">#endif</span>
<span class="number"> 295</span>      <span class="k2">}</span>
<span class="number"> 296</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 297</span>         redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 298</span>      <span class="k2">}</span>
<span class="number"> 299</span>   <span class="k2">}</span>
<span class="number"> 300</span>   
<span class="number"> 301</span>   <span class="c">/* You must remove the menu before destroying the display to free resources */</span>
<span class="number"> 302</span>   al_set_display_menu<span class="k2">(</span>display, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 303</span>   
<span class="number"> 304</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 305</span><span class="k2">}</span>
</div></div><p>

<b>common.c</b>
</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;stdio.h&gt;</span>
<span class="number">   2</span><span class="p">#include &lt;stdarg.h&gt;</span>
<span class="number">   3</span>
<span class="number">   4</span><span class="p">#ifdef ALLEGRO_ANDROID</span>
<span class="number">   5</span>   <span class="p">#include "allegro5/allegro_android.h"</span>
<span class="number">   6</span><span class="p">#endif</span>
<span class="number">   7</span>
<span class="number">   8</span><span class="k1">void</span> init_platform_specific<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">   9</span><span class="k1">void</span> abort_example<span class="k2">(</span><span class="k1">char</span> <span class="k1">const</span> <span class="k3">*</span>format, ...<span class="k2">)</span><span class="k2">;</span>
<span class="number">  10</span><span class="k1">void</span> open_log<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  11</span><span class="k1">void</span> open_log_monospace<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  12</span><span class="k1">void</span> close_log<span class="k2">(</span><span class="k1">bool</span> wait_for_user<span class="k2">)</span><span class="k2">;</span>
<span class="number">  13</span><span class="k1">void</span> log_printf<span class="k2">(</span><span class="k1">char</span> <span class="k1">const</span> <span class="k3">*</span>format, ...<span class="k2">)</span><span class="k2">;</span>
<span class="number">  14</span>
<span class="number">  15</span><span class="k1">void</span> init_platform_specific<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>
<span class="number">  16</span><span class="k2">{</span>
<span class="number">  17</span><span class="p">#ifdef ALLEGRO_ANDROID</span>
<span class="number">  18</span>   al_install_touch_input<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  19</span>   al_android_set_apk_file_interface<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  20</span><span class="p">#endif</span>
<span class="number">  21</span><span class="k2">}</span>
<span class="number">  22</span>
<span class="number">  23</span><span class="p">#ifdef ALLEGRO_POPUP_EXAMPLES</span>
<span class="number">  24</span>
<span class="number">  25</span><span class="p">#include "allegro5/allegro_native_dialog.h"</span>
<span class="number">  26</span>
<span class="number">  27</span><a href="http://www.allegro.cc/manual/ALLEGRO_TEXTLOG"><span class="a">ALLEGRO_TEXTLOG</span></a> <span class="k3">*</span>textlog <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  28</span>
<span class="number">  29</span><span class="k1">void</span> abort_example<span class="k2">(</span><span class="k1">char</span> <span class="k1">const</span> <span class="k3">*</span>format, ...<span class="k2">)</span>
<span class="number">  30</span><span class="k2">{</span>
<span class="number">  31</span>   <span class="k1">char</span> str<span class="k2">[</span><span class="n">1024</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  32</span>   va_list args<span class="k2">;</span>
<span class="number">  33</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display<span class="k2">;</span>
<span class="number">  34</span>
<span class="number">  35</span>   va_start<span class="k2">(</span>args, format<span class="k2">)</span><span class="k2">;</span>
<span class="number">  36</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_855.html" target="_blank">vsnprintf</a><span class="k2">(</span>str, <span class="k1">sizeof</span> str, format, args<span class="k2">)</span><span class="k2">;</span>
<span class="number">  37</span>   va_end<span class="k2">(</span>args<span class="k2">)</span><span class="k2">;</span>
<span class="number">  38</span>
<span class="number">  39</span>   <span class="k1">if</span> <span class="k2">(</span>al_init_native_dialog_addon<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  40</span>      display <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> ? <a href="http://www.allegro.cc/manual/al_get_current_display"><span class="a">al_get_current_display</span></a><span class="k2">(</span><span class="k2">)</span> <span class="k2">:</span> NULL<span class="k2">;</span>
<span class="number">  41</span>      <a href="http://www.allegro.cc/manual/al_show_native_message_box"><span class="a">al_show_native_message_box</span></a><span class="k2">(</span>display, <span class="s">"Error"</span>, <span class="s">"Cannot run example"</span>, str, NULL, <span class="n">0</span><span class="k2">)</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="k2">{</span>
<span class="number">  44</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"%s"</span>, str<span class="k2">)</span><span class="k2">;</span>
<span class="number">  45</span>   <span class="k2">}</span>
<span class="number">  46</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  47</span><span class="k2">}</span>
<span class="number">  48</span>
<span class="number">  49</span><span class="k1">void</span> open_log<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>
<span class="number">  50</span><span class="k2">{</span>
<span class="number">  51</span>   <span class="k1">if</span> <span class="k2">(</span>al_init_native_dialog_addon<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  52</span>      textlog <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_open_native_text_log"><span class="a">al_open_native_text_log</span></a><span class="k2">(</span><span class="s">"Log"</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  53</span>   <span class="k2">}</span>
<span class="number">  54</span><span class="k2">}</span>
<span class="number">  55</span>
<span class="number">  56</span><span class="k1">void</span> open_log_monospace<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>
<span class="number">  57</span><span class="k2">{</span>
<span class="number">  58</span>   <span class="k1">if</span> <span class="k2">(</span>al_init_native_dialog_addon<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  59</span>      textlog <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_open_native_text_log"><span class="a">al_open_native_text_log</span></a><span class="k2">(</span><span class="s">"Log"</span>, ALLEGRO_TEXTLOG_MONOSPACE<span class="k2">)</span><span class="k2">;</span>
<span class="number">  60</span>   <span class="k2">}</span>
<span class="number">  61</span><span class="k2">}</span>
<span class="number">  62</span>
<span class="number">  63</span><span class="k1">void</span> close_log<span class="k2">(</span><span class="k1">bool</span> wait_for_user<span class="k2">)</span>
<span class="number">  64</span><span class="k2">{</span>
<span class="number">  65</span>   <span class="k1">if</span> <span class="k2">(</span>textlog <span class="k3">&amp;</span><span class="k3">&amp;</span> wait_for_user<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  66</span>      <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a> <span class="k3">*</span>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">  67</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>queue, <a href="http://www.allegro.cc/manual/al_get_native_text_log_event_source"><span class="a">al_get_native_text_log_event_source</span></a><span class="k2">(</span>
<span class="number">  68</span>         textlog<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  69</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>queue, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  70</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>queue<span class="k2">)</span><span class="k2">;</span>
<span class="number">  71</span>   <span class="k2">}</span>
<span class="number">  72</span>
<span class="number">  73</span>   <a href="http://www.allegro.cc/manual/al_close_native_text_log"><span class="a">al_close_native_text_log</span></a><span class="k2">(</span>textlog<span class="k2">)</span><span class="k2">;</span>
<span class="number">  74</span>   textlog <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  75</span><span class="k2">}</span>
<span class="number">  76</span>
<span class="number">  77</span><span class="k1">void</span> log_printf<span class="k2">(</span><span class="k1">char</span> <span class="k1">const</span> <span class="k3">*</span>format, ...<span class="k2">)</span>
<span class="number">  78</span><span class="k2">{</span>
<span class="number">  79</span>   <span class="k1">char</span> str<span class="k2">[</span><span class="n">1024</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  80</span>   va_list args<span class="k2">;</span>
<span class="number">  81</span>   va_start<span class="k2">(</span>args, format<span class="k2">)</span><span class="k2">;</span>
<span class="number">  82</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_855.html" target="_blank">vsnprintf</a><span class="k2">(</span>str, <span class="k1">sizeof</span> str, format, args<span class="k2">)</span><span class="k2">;</span>
<span class="number">  83</span>   va_end<span class="k2">(</span>args<span class="k2">)</span><span class="k2">;</span>
<span class="number">  84</span>   <a href="http://www.allegro.cc/manual/al_append_native_text_log"><span class="a">al_append_native_text_log</span></a><span class="k2">(</span>textlog, <span class="s">"%s"</span>, str<span class="k2">)</span><span class="k2">;</span>
<span class="number">  85</span><span class="k2">}</span>
<span class="number">  86</span>
<span class="number">  87</span><span class="p">#else</span>
<span class="number">  88</span>
<span class="number">  89</span><span class="k1">void</span> abort_example<span class="k2">(</span><span class="k1">char</span> <span class="k1">const</span> <span class="k3">*</span>format, ...<span class="k2">)</span>
<span class="number">  90</span><span class="k2">{</span>
<span class="number">  91</span>   va_list args<span class="k2">;</span>
<span class="number">  92</span>   va_start<span class="k2">(</span>args, format<span class="k2">)</span><span class="k2">;</span>
<span class="number">  93</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_851.html" target="_blank">vfprintf</a><span class="k2">(</span>stderr, format, args<span class="k2">)</span><span class="k2">;</span>
<span class="number">  94</span>   va_end<span class="k2">(</span>args<span class="k2">)</span><span class="k2">;</span>
<span class="number">  95</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">1</span><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">void</span> open_log<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>
<span class="number">  99</span><span class="k2">{</span>
<span class="number"> 100</span><span class="k2">}</span>
<span class="number"> 101</span>
<span class="number"> 102</span><span class="k1">void</span> open_log_monospace<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>
<span class="number"> 103</span><span class="k2">{</span>
<span class="number"> 104</span><span class="k2">}</span>
<span class="number"> 105</span>
<span class="number"> 106</span><span class="k1">void</span> close_log<span class="k2">(</span><span class="k1">bool</span> wait_for_user<span class="k2">)</span>
<span class="number"> 107</span><span class="k2">{</span>
<span class="number"> 108</span>   <span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>wait_for_user<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">void</span> log_printf<span class="k2">(</span><span class="k1">char</span> <span class="k1">const</span> <span class="k3">*</span>format, ...<span class="k2">)</span>
<span class="number"> 112</span><span class="k2">{</span>
<span class="number"> 113</span>   va_list args<span class="k2">;</span>
<span class="number"> 114</span>   va_start<span class="k2">(</span>args, format<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 115</span>   <span class="p">#ifdef ALLEGRO_ANDROID</span>
<span class="number"> 116</span>   <span class="k1">char</span> x<span class="k2">[</span><span class="n">1024</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 117</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_855.html" target="_blank">vsnprintf</a><span class="k2">(</span>x, <span class="k1">sizeof</span> x, format, args<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 118</span>   ALLEGRO_TRACE_CHANNEL_LEVEL<span class="k2">(</span><span class="s">"log"</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">(</span>x<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 119</span>   <span class="p">#else</span>
<span class="number"> 120</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_853.html" target="_blank">vprintf</a><span class="k2">(</span>format, args<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 121</span>   <span class="p">#endif</span>
<span class="number"> 122</span>   va_end<span class="k2">(</span>args<span class="k2">)</span><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="p">#endif</span>
<span class="number"> 126</span>
<span class="number"> 127</span><span class="c">/* vim: set sts=3 sw=3 et: */</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Eric Johnson)</author>
		<pubDate>Wed, 16 Aug 2017 02:13:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I already looked at the example, of course, but I can&#39;t wrap my head around it.</p><p>The only major difference I can spot is that the example code listens for a MOUSE_BUTTON_UP event, rather than a MOUSE_BUTTON_DOWN event. Sure enough, if I register mouse events and listen for a MOUSE_BUTTON_UP event, it works...</p><div class="source-code snippet"><div class="inner"><pre>        <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_BUTTON_UP<span class="k2">)</span> <span class="k2">{</span>
    
            <span class="k1">if</span> <span class="k2">(</span>event.mouse.button <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span>menuDisplayed<span class="k2">)</span> <span class="k2">{</span>
            
                <span class="k1">if</span> <span class="k2">(</span>al_popup_menu<span class="k2">(</span>menu, display<span class="k2">)</span><span class="k2">)</span> std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Displaying menu... or not\n"</span><span class="k2">;</span>
                <span class="k1">else</span> std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Displaying menu failed"</span><span class="k2">;</span>
                menuDisplayed <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
            <span class="k2">}</span>
            <span class="k1">else</span> menuDisplayed <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
        <span class="k2">}</span>
</pre></div></div><p>

... but only in this minimal example, not in my actual code. Still, I don&#39;t get why it won&#39;t work with MOUSE_BUTTON_DOWN or the the timed version. As mentioned, al_popup_menu() does return true, it just doesn&#39;t show the menu. Also, no MENU_CLICK events are generated, in any case.</p><p>Anyway, I&#39;m trying to break the minimal example with MOUSE_BUTTON_UP at the moment, will report back later if I find something.</p><p><b>Update:</b><br />Found a work-around that works by manually polling the mouse state with al_get_mouse_state(), then creating a <i>new</i> event queue and listening for MOUSE_BUTTON_UP on that one. Yuk!<br />I still don&#39;t know what exactly is breaking the popup menu display. I&#39;ll look into it if I can find some free time.</p><p><s><b>Update 2:</b>
The work-around will fail after the menu is closed before a MENU_CLICK is generated. Tried destroying and recreating the menu in case this happens... which destroys my main (non-popup) menu instead. So the statement in the docs that &quot;It is safe to call this on a menu that is currently being displayed.&quot; is sort of incorrect.</s></p><p><b>Update 3:</b><br />The error reported in Update 2 was due to trying to read the event type field before it was initialized. My bad.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (utz000)</author>
		<pubDate>Wed, 16 Aug 2017 14:26:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m not too familiar with the native dialog addon nor its functions, so I&#39;m not sure why it&#39;s giving you so much trouble. I&#39;m glad you found a workaround though. Hopefully someone more knowledgeable can help you further.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Eric Johnson)</author>
		<pubDate>Wed, 16 Aug 2017 23:02:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well, for now all my Allegro problems are solved <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /> Aside from these, working with the library has been a breeze so far. The interface is very well design imo, and the documentation is great, too.</p><p>Concerning the problems, I guess they&#39;re partially due to the fact that I&#39;m still a programming novice. On the other hand I guess that the native_dialog add-on simply doesn&#39;t get used that much, especially not with GTK - most game designers will probably design their own menus. So some corner cases might simply have slipped under the radar.</p><p>Anyway, I&#39;ll look a bit more into these issues and try to find out what exactly is going on before opening some issues on github. I guess a bunch of Allegro devs might be on holiday at the moment anyway <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (utz000)</author>
		<pubDate>Thu, 17 Aug 2017 00:26:46 +0000</pubDate>
	</item>
</rss>
