SpaghettiKart/portable-file-dialogs_8h_so...

2132 lines
378 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!-- HTML header for doxygen 1.10.0-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Mario Kart 64: include/portable-file-dialogs.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
<link href="doxygen-awesome-sidebar-only.css" rel="stylesheet" type="text/css"/>
<link href="doxygen-awesome-sidebar-only-darkmode-toggle.css" rel="stylesheet" type="text/css"/>
<link href="docs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="doxygen-awesome-darkmode-toggle.js"></script>
<script type="text/javascript">
DoxygenAwesomeDarkModeToggle.init()
</script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">Mario Kart 64
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('portable-file-dialogs_8h_source.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">portable-file-dialogs.h</div></div>
</div><!--header-->
<div class="contents">
<a href="portable-file-dialogs_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">//</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// Portable File Dialogs</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">//</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// Copyright © 20182022 Sam Hocevar &lt;sam@hocevar.net&gt;</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">//</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// This library is free software. It comes without any warranty, to</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// the extent permitted by applicable law. You can redistribute it</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment">// and/or modify it under the terms of the Do What the Fuck You Want</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">// to Public License, Version 2, as published by the WTFPL Task Force.</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment">// See http://www.wtfpl.net/ for more details.</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment">//</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> </div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor">#pragma once</span></div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> </div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor">#if _WIN32</span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#ifndef WIN32_LEAN_AND_MEAN</span></div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#define WIN32_LEAN_AND_MEAN 1</span></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include &lt;windows.h&gt;</span></div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#include &lt;commdlg.h&gt;</span></div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#include &lt;shlobj.h&gt;</span></div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#include &lt;shobjidl.h&gt;</span> <span class="comment">// IFileDialog</span></div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include &lt;shellapi.h&gt;</span></div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#include &lt;strsafe.h&gt;</span></div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#include &lt;future&gt;</span> <span class="comment">// std::async</span></div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#include &lt;userenv.h&gt;</span> <span class="comment">// GetUserProfileDirectory()</span></div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="preprocessor">#elif __EMSCRIPTEN__</span></div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="preprocessor">#include &lt;emscripten.h&gt;</span></div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="preprocessor">#ifndef _POSIX_C_SOURCE</span></div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"><a class="line" href="portable-file-dialogs_8h.html#a3024ccd4a9af5109d24e6c57565d74a1"> 33</a></span><span class="preprocessor">#define _POSIX_C_SOURCE 2 </span><span class="comment">// for popen()</span></div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="preprocessor">#ifdef __APPLE__</span></div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="preprocessor">#ifndef _DARWIN_C_SOURCE</span></div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="preprocessor">#define _DARWIN_C_SOURCE</span></div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="preprocessor">#include &lt;cstdio&gt;</span> <span class="comment">// popen()</span></div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="preprocessor">#include &lt;cstdlib&gt;</span> <span class="comment">// std::getenv()</span></div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="preprocessor">#include &lt;fcntl.h&gt;</span> <span class="comment">// fcntl()</span></div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span><span class="preprocessor">#include &lt;unistd.h&gt;</span> <span class="comment">// read(), pipe(), dup2(), getuid()</span></div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="preprocessor">#include &lt;csignal&gt;</span> <span class="comment">// ::kill, std::signal</span></div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="preprocessor">#include &lt;sys/stat.h&gt;</span> <span class="comment">// stat()</span></div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="preprocessor">#include &lt;sys/wait.h&gt;</span> <span class="comment">// waitpid()</span></div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="preprocessor">#include &lt;pwd.h&gt;</span> <span class="comment">// getpwnam()</span></div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> </div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="preprocessor">#include &lt;string&gt;</span> <span class="comment">// std::string</span></div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span><span class="preprocessor">#include &lt;memory&gt;</span> <span class="comment">// std::shared_ptr</span></div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="preprocessor">#include &lt;iostream&gt;</span> <span class="comment">// std::ostream</span></div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="preprocessor">#include &lt;map&gt;</span> <span class="comment">// std::map</span></div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="preprocessor">#include &lt;set&gt;</span> <span class="comment">// std::set</span></div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="preprocessor">#include &lt;regex&gt;</span> <span class="comment">// std::regex</span></div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span><span class="preprocessor">#include &lt;thread&gt;</span> <span class="comment">// std::mutex, std::this_thread</span></div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="preprocessor">#include &lt;chrono&gt;</span> <span class="comment">// std::chrono</span></div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="comment">// Versions of mingw64 g++ up to 9.3.0 do not have a complete IFileDialog</span></div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="preprocessor">#ifndef PFD_HAS_IFILEDIALOG</span></div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"><a class="line" href="portable-file-dialogs_8h.html#a0587bca8521b18c156a3fecc3190068e"> 61</a></span><span class="preprocessor">#define PFD_HAS_IFILEDIALOG 1</span></div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="preprocessor">#if (defined __MINGW64__ || defined __MINGW32__) &amp;&amp; defined __GXX_ABI_VERSION</span></div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="preprocessor">#if __GXX_ABI_VERSION &lt;= 1013</span></div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="preprocessor">#undef PFD_HAS_IFILEDIALOG</span></div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="preprocessor">#define PFD_HAS_IFILEDIALOG 0</span></div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> </div>
<div class="foldopen" id="foldopen00070" data-start="{" data-end="}">
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"><a class="line" href="namespacepfd.html"> 70</a></span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacepfd.html">pfd</a> {</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> </div>
<div class="foldopen" id="foldopen00072" data-start="{" data-end="};">
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"><a class="line" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679"> 72</a></span><span class="keyword">enum class</span> <a class="code hl_enumeration" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679">button</a> {</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"><a class="line" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a10aec35353f9c4096a71c38654c3d402"> 73</a></span> <a class="code hl_enumvalue" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a10aec35353f9c4096a71c38654c3d402">cancel</a> = -1,</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"><a class="line" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a444bcb3a3fcf8389296c49467f27e1d6"> 74</a></span> <a class="code hl_enumvalue" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a444bcb3a3fcf8389296c49467f27e1d6">ok</a>,</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"><a class="line" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679aa6105c0a611b41b08f1209506350279e"> 75</a></span> <a class="code hl_enumvalue" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679aa6105c0a611b41b08f1209506350279e">yes</a>,</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"><a class="line" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a7fa3b767c460b54a2be4d49030b349c7"> 76</a></span> <a class="code hl_enumvalue" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a7fa3b767c460b54a2be4d49030b349c7">no</a>,</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"><a class="line" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a5bb94a1c12413a2e5d14deabab29f2aa"> 77</a></span> <a class="code hl_enumvalue" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a5bb94a1c12413a2e5d14deabab29f2aa">abort</a>,</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"><a class="line" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a165e6d21e0a2cc9ebb32ca05f90e0fa7"> 78</a></span> <a class="code hl_enumvalue" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a165e6d21e0a2cc9ebb32ca05f90e0fa7">retry</a>,</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"><a class="line" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a567bc1d268f135496de3d5b946b691f3"> 79</a></span> <a class="code hl_enumvalue" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a567bc1d268f135496de3d5b946b691f3">ignore</a>,</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span>};</div>
</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> </div>
<div class="foldopen" id="foldopen00082" data-start="{" data-end="};">
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"><a class="line" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8"> 82</a></span><span class="keyword">enum class</span> <a class="code hl_enumeration" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8">choice</a> {</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"><a class="line" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a444bcb3a3fcf8389296c49467f27e1d6"> 83</a></span> <a class="code hl_enumvalue" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a444bcb3a3fcf8389296c49467f27e1d6">ok</a> = 0,</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"><a class="line" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a809da5df9c86c6426c8d8db2934d3f51"> 84</a></span> <a class="code hl_enumvalue" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a809da5df9c86c6426c8d8db2934d3f51">ok_cancel</a>,</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"><a class="line" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a20f0596c21ad67a7fda598ffc7d038d1"> 85</a></span> <a class="code hl_enumvalue" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a20f0596c21ad67a7fda598ffc7d038d1">yes_no</a>,</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"><a class="line" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a5c5cb337bb234e240912dc139048038c"> 86</a></span> <a class="code hl_enumvalue" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a5c5cb337bb234e240912dc139048038c">yes_no_cancel</a>,</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"><a class="line" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a7928e609b1665227bcb71b20d431fd6a"> 87</a></span> <a class="code hl_enumvalue" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a7928e609b1665227bcb71b20d431fd6a">retry_cancel</a>,</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"><a class="line" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a9df771aa8f010c4b928e42a8979d5609"> 88</a></span> <a class="code hl_enumvalue" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a9df771aa8f010c4b928e42a8979d5609">abort_retry_ignore</a>,</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span>};</div>
</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> </div>
<div class="foldopen" id="foldopen00091" data-start="{" data-end="};">
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"><a class="line" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85"> 91</a></span><span class="keyword">enum class</span> <a class="code hl_enumeration" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85">icon</a> {</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"><a class="line" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85acaf9b6b99962bf5c2264824231d7a40c"> 92</a></span> <a class="code hl_enumvalue" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85acaf9b6b99962bf5c2264824231d7a40c">info</a> = 0,</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"><a class="line" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85a7b83d3f08fa392b79e3f553b585971cd"> 93</a></span> <a class="code hl_enumvalue" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85a7b83d3f08fa392b79e3f553b585971cd">warning</a>,</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"><a class="line" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85acb5e100e5a9a3e7f6d1fd97512215282"> 94</a></span> <a class="code hl_enumvalue" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85acb5e100e5a9a3e7f6d1fd97512215282">error</a>,</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"><a class="line" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85a5494af1f14a8c19939968c3e9e2d4f79"> 95</a></span> <a class="code hl_enumvalue" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85a5494af1f14a8c19939968c3e9e2d4f79">question</a>,</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span>};</div>
</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> </div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span><span class="comment">// Additional option flags for various dialog constructors</span></div>
<div class="foldopen" id="foldopen00099" data-start="{" data-end="};">
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"><a class="line" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997"> 99</a></span><span class="keyword">enum class</span> <a class="code hl_enumeration" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997">opt</a> : uint8_t {</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"><a class="line" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997a334c4a4c42fdb79d7ebc3e73b517e6f8"> 100</a></span> <a class="code hl_enumvalue" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997a334c4a4c42fdb79d7ebc3e73b517e6f8">none</a> = 0,</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <span class="comment">// For file open, allow multiselect.</span></div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"><a class="line" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997ab66abfe0e0c2ef7c545895c12a0a8837"> 102</a></span> <a class="code hl_enumvalue" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997ab66abfe0e0c2ef7c545895c12a0a8837">multiselect</a> = 0x1,</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <span class="comment">// For file save, force overwrite and disable the confirmation dialog.</span></div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"><a class="line" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997a8fc52a8161c68fcaeebdfdb500a36d4b"> 104</a></span> <a class="code hl_enumvalue" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997a8fc52a8161c68fcaeebdfdb500a36d4b">force_overwrite</a> = 0x2,</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="comment">// For folder select, force path to be the provided argument instead</span></div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="comment">// of the last opened directory, which is the Microsoft-recommended,</span></div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="comment">// user-friendly behaviour.</span></div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"><a class="line" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997a51106d57377a72da5f9a0415f4f6142b"> 108</a></span> <a class="code hl_enumvalue" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997a51106d57377a72da5f9a0415f4f6142b">force_path</a> = 0x4,</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span>};</div>
</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> </div>
<div class="foldopen" id="foldopen00111" data-start="{" data-end="}">
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"><a class="line" href="namespacepfd.html#aae00cd25e23dcc7e3a3c1f7678d1762c"> 111</a></span><span class="keyword">inline</span> <a class="code hl_enumeration" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997">opt</a> <a class="code hl_function" href="namespacepfd.html#aae00cd25e23dcc7e3a3c1f7678d1762c">operator|</a>(<a class="code hl_enumeration" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997">opt</a> a, <a class="code hl_enumeration" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997">opt</a> b) {</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <span class="keywordflow">return</span> <a class="code hl_enumeration" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997">opt</a>(uint8_t(a) | uint8_t(b));</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span>}</div>
</div>
<div class="foldopen" id="foldopen00114" data-start="{" data-end="}">
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"><a class="line" href="namespacepfd.html#ab888b234398a273a027aebdeb7d5269f"> 114</a></span><span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="namespacepfd.html#ab888b234398a273a027aebdeb7d5269f">operator&amp;</a>(<a class="code hl_enumeration" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997">opt</a> a, <a class="code hl_enumeration" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997">opt</a> b) {</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">return</span> bool(uint8_t(a) &amp; uint8_t(b));</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span>}</div>
</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> </div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span><span class="comment">// The settings class, only exposing to the user a way to set verbose mode</span></div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span><span class="comment">// and to force a rescan of installed desktop helpers (zenity, kdialog…).</span></div>
<div class="foldopen" id="foldopen00120" data-start="{" data-end="};">
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"><a class="line" href="classpfd_1_1settings.html"> 120</a></span><span class="keyword">class </span><a class="code hl_function" href="classpfd_1_1settings.html#a7190e52d512b1321acb78731a8cddf42">settings</a> {</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classpfd_1_1settings.html#a54fb5598e7501ac38d17e3629190b2fe">available</a>();</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> </div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classpfd_1_1settings.html#a0ed32e8ed039106028474eb9f0a0a7bc">verbose</a>(<span class="keywordtype">bool</span> value);</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classpfd_1_1settings.html#a60023ab0ac98008d2c52a568e9ee540f">rescan</a>();</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> </div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="keyword">protected</span>:</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <span class="keyword">explicit</span> <a class="code hl_function" href="classpfd_1_1settings.html#a7190e52d512b1321acb78731a8cddf42">settings</a>(<span class="keywordtype">bool</span> resync = <span class="keyword">false</span>);</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> </div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classpfd_1_1settings.html#af1c2f6e88ffafd59a2f7609631a9eade">check_program</a>(std::string <span class="keyword">const</span>&amp; program);</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> </div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classpfd_1_1settings.html#a4e22d6fb43d387ddc980bf6e2a6aad24">is_osascript</a>() <span class="keyword">const</span>;</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classpfd_1_1settings.html#a08e4a5b150186d77158a974cc8c2d4a2">is_zenity</a>() <span class="keyword">const</span>;</div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classpfd_1_1settings.html#aa79fb10eee785f1acd8d1ff34e226c89">is_kdialog</a>() <span class="keyword">const</span>;</div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> </div>
<div class="foldopen" id="foldopen00136" data-start="{" data-end="};">
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"><a class="line" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aad"> 136</a></span> <span class="keyword">enum class</span> <a class="code hl_enumeration" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aad">flag</a> {</div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"><a class="line" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aada11dd6b78f267a47638211f4c7e23d434"> 137</a></span> <a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aada11dd6b78f267a47638211f4c7e23d434">is_scanned</a> = 0,</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"><a class="line" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aadad9da28952c27749f53c23675db49d560"> 138</a></span> <a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aadad9da28952c27749f53c23675db49d560">is_verbose</a>,</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> </div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"><a class="line" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aadaee57842698a0690e4b89730b469edc31"> 140</a></span> <a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aadaee57842698a0690e4b89730b469edc31">has_zenity</a>,</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"><a class="line" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aada1267dfaf66b51761e04b042bb2c4dd7a"> 141</a></span> <a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aada1267dfaf66b51761e04b042bb2c4dd7a">has_matedialog</a>,</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"><a class="line" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aada1a652e3d6a785053942b6cffc2c4669d"> 142</a></span> <a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aada1a652e3d6a785053942b6cffc2c4669d">has_qarma</a>,</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"><a class="line" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aada1f1a19f0bf1fe1a63ed3e73e40466b4b"> 143</a></span> <a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aada1f1a19f0bf1fe1a63ed3e73e40466b4b">has_kdialog</a>,</div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"><a class="line" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aadaea0bbb642237ecdaa68a14a0d7212448"> 144</a></span> <a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aadaea0bbb642237ecdaa68a14a0d7212448">is_vista</a>,</div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> </div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"><a class="line" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aada73b7af539db867cb9edf24a3cb7b8a36"> 146</a></span> <a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aada73b7af539db867cb9edf24a3cb7b8a36">max_flag</a>,</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> };</div>
</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> </div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="comment">// Static array of flags for internal state</span></div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> <span class="keywordtype">bool</span> <span class="keyword">const</span>&amp; <a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">flags</a>(<a class="code hl_enumeration" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aad">flag</a> in_flag) <span class="keyword">const</span>;</div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> </div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="comment">// Non-const getter for the static array of flags</span></div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <span class="keywordtype">bool</span>&amp; <a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">flags</a>(<a class="code hl_enumeration" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aad">flag</a> in_flag);</div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span>};</div>
</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> </div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span><span class="comment">// Internal classes, not to be used by client applications</span></div>
<div class="foldopen" id="foldopen00157" data-start="{" data-end="}">
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"><a class="line" href="namespacepfd_1_1internal.html"> 157</a></span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacepfd_1_1internal.html">internal</a> {</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> </div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span><span class="comment">// Process wait timeout, in milliseconds</span></div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"><a class="line" href="namespacepfd_1_1internal.html#af2acf3e674700e55039cc00c38818b2b"> 160</a></span><span class="keyword">static</span> <span class="keywordtype">int</span> <span class="keyword">const</span> <a class="code hl_variable" href="namespacepfd_1_1internal.html#af2acf3e674700e55039cc00c38818b2b">default_wait_timeout</a> = 20;</div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> </div>
<div class="foldopen" id="foldopen00162" data-start="{" data-end="};">
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"><a class="line" href="classpfd_1_1internal_1_1executor.html"> 162</a></span><span class="keyword">class </span><a class="code hl_class" href="classpfd_1_1internal_1_1executor.html">executor</a> {</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"><a class="line" href="classpfd_1_1internal_1_1executor.html#aa8dc7e75bd1ac2cf825fa04ed657c0aa"> 163</a></span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_friend" href="classpfd_1_1internal_1_1executor.html#aa8dc7e75bd1ac2cf825fa04ed657c0aa">dialog</a>;</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> </div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <span class="comment">// High level function to get the result of a command</span></div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> std::string <a class="code hl_function" href="classpfd_1_1internal_1_1executor.html#a07116b98b28332c42946e956f7edd2ae">result</a>(<span class="keywordtype">int</span>* exit_code = <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> </div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="comment">// High level function to abort</span></div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classpfd_1_1internal_1_1executor.html#ab7766273bae572779a404c5543268406">kill</a>();</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> </div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span><span class="preprocessor">#if _WIN32</span></div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="keywordtype">void</span> start_func(std::function&lt;std::string(<span class="keywordtype">int</span>*)&gt; <span class="keyword">const</span>&amp; fun);</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <span class="keyword">static</span> BOOL CALLBACK enum_windows_callback(HWND hwnd, LPARAM lParam);</div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span><span class="preprocessor">#elif __EMSCRIPTEN__</span></div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <span class="keywordtype">void</span> start(<span class="keywordtype">int</span> exit_code);</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classpfd_1_1internal_1_1executor.html#adcb1fcd88381030ada3d8f6d07dd8d6e">start_process</a>(std::vector&lt;std::string&gt; <span class="keyword">const</span>&amp; command);</div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> </div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <a class="code hl_function" href="classpfd_1_1internal_1_1executor.html#a2d46b9964c60985ea8406c4092393be3">~executor</a>();</div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> </div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="keyword">protected</span>:</div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classpfd_1_1internal_1_1executor.html#a7eb363f3dc9d6dc21f1a8b6ce6a33679">ready</a>(<span class="keywordtype">int</span> timeout = <a class="code hl_variable" href="namespacepfd_1_1internal.html#af2acf3e674700e55039cc00c38818b2b">default_wait_timeout</a>);</div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classpfd_1_1internal_1_1executor.html#a2e65a18556b3de93dafd6fabe3786277">stop</a>();</div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> </div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"><a class="line" href="classpfd_1_1internal_1_1executor.html#a70760965e1179f84aee59abd92c7129e"> 188</a></span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="classpfd_1_1internal_1_1executor.html#a70760965e1179f84aee59abd92c7129e">m_running</a> = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"><a class="line" href="classpfd_1_1internal_1_1executor.html#a062c9dc73980cd66d334c945c9617d9d"> 189</a></span> std::string <a class="code hl_variable" href="classpfd_1_1internal_1_1executor.html#a062c9dc73980cd66d334c945c9617d9d">m_stdout</a>;</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"><a class="line" href="classpfd_1_1internal_1_1executor.html#ae93cd2a96d031923e697d5f85cc5dfe7"> 190</a></span> <span class="keywordtype">int</span> <a class="code hl_variable" href="classpfd_1_1internal_1_1executor.html#ae93cd2a96d031923e697d5f85cc5dfe7">m_exit_code</a> = -1;</div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span><span class="preprocessor">#if _WIN32</span></div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> std::future&lt;std::string&gt; m_future;</div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> std::set&lt;HWND&gt; m_windows;</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> std::condition_variable m_cond;</div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> std::mutex m_mutex;</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> DWORD m_tid;</div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span><span class="preprocessor">#elif __EMSCRIPTEN__ || __NX__</span></div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> <span class="comment">// FIXME: do something</span></div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"><a class="line" href="classpfd_1_1internal_1_1executor.html#a7a164503ced150f7ad6c3e6084d4ff9b"> 200</a></span> pid_t <a class="code hl_variable" href="classpfd_1_1internal_1_1executor.html#a7a164503ced150f7ad6c3e6084d4ff9b">m_pid</a> = 0;</div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"><a class="line" href="classpfd_1_1internal_1_1executor.html#a2730c595c2994a227d46aa6b74b95987"> 201</a></span> <span class="keywordtype">int</span> <a class="code hl_variable" href="classpfd_1_1internal_1_1executor.html#a2730c595c2994a227d46aa6b74b95987">m_fd</a> = -1;</div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span>};</div>
</div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> </div>
<div class="foldopen" id="foldopen00205" data-start="{" data-end="};">
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"><a class="line" href="classpfd_1_1internal_1_1platform.html"> 205</a></span><span class="keyword">class </span><a class="code hl_class" href="classpfd_1_1internal_1_1platform.html">platform</a> {</div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="keyword">protected</span>:</div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span><span class="preprocessor">#if _WIN32</span></div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> <span class="comment">// Helper class around LoadLibraryA() and GetProcAddress() with some safety</span></div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> <span class="keyword">class </span>dll {</div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> dll(std::string <span class="keyword">const</span>&amp; name);</div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> ~dll();</div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> </div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">class </span>proc {</div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> proc(dll <span class="keyword">const</span>&amp; lib, std::string <span class="keyword">const</span>&amp; sym)</div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> : m_proc(<span class="keyword">reinterpret_cast&lt;</span>T*<span class="keyword">&gt;</span>((<span class="keywordtype">void</span>*)::GetProcAddress(lib.handle, sym.c_str()))) {</div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> }</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> </div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> <span class="keyword">operator</span> bool()<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> <span class="keywordflow">return</span> m_proc != <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> }</div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <span class="keyword">operator</span> T*() <span class="keyword">const</span> {</div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> <span class="keywordflow">return</span> m_proc;</div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> }</div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> </div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> T* m_proc;</div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> };</div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> </div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> HMODULE handle;</div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> };</div>
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> </div>
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> <span class="comment">// Helper class around CoInitialize() and CoUnInitialize()</span></div>
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> <span class="keyword">class </span>ole32_dll : <span class="keyword">public</span> dll {</div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> ole32_dll();</div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> ~ole32_dll();</div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> <span class="keywordtype">bool</span> is_initialized();</div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> </div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> HRESULT m_state;</div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> };</div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> </div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> <span class="comment">// Helper class around CreateActCtx() and ActivateActCtx()</span></div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> <span class="keyword">class </span>new_style_context {</div>
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> new_style_context();</div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> ~new_style_context();</div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> </div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> HANDLE create();</div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> ULONG_PTR m_cookie = 0;</div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> };</div>
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span>};</div>
</div>
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> </div>
<div class="foldopen" id="foldopen00259" data-start="{" data-end="};">
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"><a class="line" href="classpfd_1_1internal_1_1dialog.html"> 259</a></span><span class="keyword">class </span><a class="code hl_function" href="classpfd_1_1internal_1_1dialog.html#a05f9a4fcba8f8a9411d7dfaf18ee11ad">dialog</a> : <span class="keyword">protected</span> <a class="code hl_function" href="classpfd_1_1settings.html#a7190e52d512b1321acb78731a8cddf42">settings</a>, <span class="keyword">protected</span> <a class="code hl_class" href="classpfd_1_1internal_1_1platform.html">platform</a> {</div>
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classpfd_1_1internal_1_1dialog.html#a77f20e6063f83e601ce23ed4899907c6">ready</a>(<span class="keywordtype">int</span> timeout = <a class="code hl_variable" href="namespacepfd_1_1internal.html#af2acf3e674700e55039cc00c38818b2b">default_wait_timeout</a>) <span class="keyword">const</span>;</div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classpfd_1_1internal_1_1dialog.html#a226b1502acd1d2cb86e34dd3df36772a">kill</a>() <span class="keyword">const</span>;</div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> </div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> <span class="keyword">protected</span>:</div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> <span class="keyword">explicit</span> <a class="code hl_function" href="classpfd_1_1internal_1_1dialog.html#a05f9a4fcba8f8a9411d7dfaf18ee11ad">dialog</a>();</div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> </div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> std::vector&lt;std::string&gt; <a class="code hl_function" href="classpfd_1_1internal_1_1dialog.html#aadaf6cb30620c85f4b97993e3c819188">desktop_helper</a>() <span class="keyword">const</span>;</div>
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> <span class="keyword">static</span> std::string <a class="code hl_function" href="classpfd_1_1internal_1_1dialog.html#ac906c01d0365c13c9066cea857fd258a">buttons_to_name</a>(<a class="code hl_enumeration" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8">choice</a> _choice);</div>
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> <span class="keyword">static</span> std::string <a class="code hl_function" href="classpfd_1_1internal_1_1dialog.html#ae94362bed052ab6050e38852712cb97a">get_icon_name</a>(<a class="code hl_enumeration" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85">icon</a> _icon);</div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> </div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> std::string <a class="code hl_function" href="classpfd_1_1internal_1_1dialog.html#aae2255eceb0b3b18b55d1618fd7e1635">powershell_quote</a>(std::string <span class="keyword">const</span>&amp; str) <span class="keyword">const</span>;</div>
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> std::string <a class="code hl_function" href="classpfd_1_1internal_1_1dialog.html#adc0ec6f5c8137cbdb0ea6669b5263a73">osascript_quote</a>(std::string <span class="keyword">const</span>&amp; str) <span class="keyword">const</span>;</div>
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> std::string <a class="code hl_function" href="classpfd_1_1internal_1_1dialog.html#a1a4f28c3c2bbd1629f2f882314fff63e">shell_quote</a>(std::string <span class="keyword">const</span>&amp; str) <span class="keyword">const</span>;</div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> </div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> <span class="comment">// Keep handle to executing command</span></div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"><a class="line" href="classpfd_1_1internal_1_1dialog.html#a91f4b2666fb920a7859df9cdc079502d"> 276</a></span> std::shared_ptr&lt;executor&gt; <a class="code hl_variable" href="classpfd_1_1internal_1_1dialog.html#a91f4b2666fb920a7859df9cdc079502d">m_async</a>;</div>
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span>};</div>
</div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> </div>
<div class="foldopen" id="foldopen00279" data-start="{" data-end="};">
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"><a class="line" href="classpfd_1_1internal_1_1file__dialog.html"> 279</a></span><span class="keyword">class </span><a class="code hl_function" href="classpfd_1_1internal_1_1file__dialog.html#a16f53945e61d23aa9b7fc373701dd13f">file_dialog</a> : <span class="keyword">public</span> <a class="code hl_function" href="classpfd_1_1internal_1_1dialog.html#a05f9a4fcba8f8a9411d7dfaf18ee11ad">dialog</a> {</div>
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> <span class="keyword">protected</span>:</div>
<div class="foldopen" id="foldopen00281" data-start="{" data-end="};">
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"><a class="line" href="classpfd_1_1internal_1_1file__dialog.html#a758847a3fab54bb12a67abbf9ea683fc"> 281</a></span> <span class="keyword">enum</span> <a class="code hl_enumeration" href="classpfd_1_1internal_1_1file__dialog.html#a758847a3fab54bb12a67abbf9ea683fc">type</a> {</div>
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"><a class="line" href="classpfd_1_1internal_1_1file__dialog.html#a758847a3fab54bb12a67abbf9ea683fca4fd9423739ee4c950107a4eef324c559"> 282</a></span> <a class="code hl_enumvalue" href="classpfd_1_1internal_1_1file__dialog.html#a758847a3fab54bb12a67abbf9ea683fca4fd9423739ee4c950107a4eef324c559">open</a>,</div>
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"><a class="line" href="classpfd_1_1internal_1_1file__dialog.html#a758847a3fab54bb12a67abbf9ea683fca3b913d5d81b101f1f2b5cc544ef81f90"> 283</a></span> <a class="code hl_enumvalue" href="classpfd_1_1internal_1_1file__dialog.html#a758847a3fab54bb12a67abbf9ea683fca3b913d5d81b101f1f2b5cc544ef81f90">save</a>,</div>
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"><a class="line" href="classpfd_1_1internal_1_1file__dialog.html#a758847a3fab54bb12a67abbf9ea683fca568b2ec66ef45be030a47ddc19bc7bba"> 284</a></span> <a class="code hl_enumvalue" href="classpfd_1_1internal_1_1file__dialog.html#a758847a3fab54bb12a67abbf9ea683fca568b2ec66ef45be030a47ddc19bc7bba">folder</a>,</div>
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> };</div>
</div>
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> </div>
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> <a class="code hl_function" href="classpfd_1_1internal_1_1file__dialog.html#a16f53945e61d23aa9b7fc373701dd13f">file_dialog</a>(<a class="code hl_enumeration" href="classpfd_1_1internal_1_1file__dialog.html#a758847a3fab54bb12a67abbf9ea683fc">type</a> in_type, std::string <span class="keyword">const</span>&amp; title, std::string <span class="keyword">const</span>&amp; default_path = <span class="stringliteral">&quot;&quot;</span>,</div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> std::vector&lt;std::string&gt; <span class="keyword">const</span>&amp; <a class="code hl_variable" href="ImguiUI_8cpp.html#a5fdd69bc3222fb4c44d3252f0b4641e3">filters</a> = {}, <a class="code hl_enumeration" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997">opt</a> options = <a class="code hl_enumvalue" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997a334c4a4c42fdb79d7ebc3e73b517e6f8">opt::none</a>);</div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> </div>
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> <span class="keyword">protected</span>:</div>
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> std::string <a class="code hl_function" href="classpfd_1_1internal_1_1file__dialog.html#ac916440e9dcefba5cbd4f0e5bb8acbff">string_result</a>();</div>
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> std::vector&lt;std::string&gt; <a class="code hl_function" href="classpfd_1_1internal_1_1file__dialog.html#ae28b6dd37ab4e47885ce7ca25652212b">vector_result</a>();</div>
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> </div>
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span><span class="preprocessor">#if _WIN32</span></div>
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> <span class="keyword">static</span> <span class="keywordtype">int</span> CALLBACK bffcallback(HWND hwnd, UINT uMsg, LPARAM, LPARAM pData);</div>
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span><span class="preprocessor">#if PFD_HAS_IFILEDIALOG</span></div>
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> std::string select_folder_vista(IFileDialog* ifd, <span class="keywordtype">bool</span> <a class="code hl_enumvalue" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997a51106d57377a72da5f9a0415f4f6142b">force_path</a>);</div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> </div>
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> std::wstring m_wtitle;</div>
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> std::wstring m_wdefault_path;</div>
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> </div>
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> std::vector&lt;std::string&gt; m_vector_result;</div>
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span>};</div>
</div>
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> </div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span>} <span class="comment">// namespace internal</span></div>
</div>
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> </div>
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span><span class="comment">//</span></div>
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span><span class="comment">// The path class provides some platform-specific path constants</span></div>
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span><span class="comment">//</span></div>
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> </div>
<div class="foldopen" id="foldopen00313" data-start="{" data-end="};">
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"><a class="line" href="classpfd_1_1path.html"> 313</a></span><span class="keyword">class </span><a class="code hl_class" href="classpfd_1_1path.html">path</a> : <span class="keyword">protected</span> <a class="code hl_class" href="classpfd_1_1internal_1_1platform.html">internal::platform</a> {</div>
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> <span class="keyword">static</span> std::string <a class="code hl_function" href="classpfd_1_1path.html#a1205ad5165c748f91ffe939687e095a2">home</a>();</div>
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> <span class="keyword">static</span> std::string <a class="code hl_function" href="classpfd_1_1path.html#a73bb289af48853c52fb1569c2d00a40c">separator</a>();</div>
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span>};</div>
</div>
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> </div>
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span><span class="comment">//</span></div>
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span><span class="comment">// The notify widget</span></div>
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span><span class="comment">//</span></div>
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> </div>
<div class="foldopen" id="foldopen00323" data-start="{" data-end="};">
<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"><a class="line" href="classpfd_1_1notify.html"> 323</a></span><span class="keyword">class </span><a class="code hl_function" href="classpfd_1_1notify.html#a64f87055f567ed5720a357b6844eccb7">notify</a> : <span class="keyword">public</span> <a class="code hl_class" href="classpfd_1_1internal_1_1dialog.html">internal::dialog</a> {</div>
<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> <a class="code hl_function" href="classpfd_1_1notify.html#a64f87055f567ed5720a357b6844eccb7">notify</a>(std::string <span class="keyword">const</span>&amp; title, std::string <span class="keyword">const</span>&amp; <a class="code hl_class" href="classpfd_1_1message.html">message</a>, <a class="code hl_enumeration" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85">icon</a> _icon = <a class="code hl_enumvalue" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85acaf9b6b99962bf5c2264824231d7a40c">icon::info</a>);</div>
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span>};</div>
</div>
<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> </div>
<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span><span class="comment">//</span></div>
<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span><span class="comment">// The message widget</span></div>
<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span><span class="comment">//</span></div>
<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> </div>
<div class="foldopen" id="foldopen00332" data-start="{" data-end="};">
<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"><a class="line" href="classpfd_1_1message.html"> 332</a></span><span class="keyword">class </span><a class="code hl_function" href="classpfd_1_1message.html#a38e0ce9a58c006011708a4968be17833">message</a> : <span class="keyword">public</span> <a class="code hl_class" href="classpfd_1_1internal_1_1dialog.html">internal::dialog</a> {</div>
<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> <a class="code hl_function" href="classpfd_1_1message.html#a38e0ce9a58c006011708a4968be17833">message</a>(std::string <span class="keyword">const</span>&amp; title, std::string <span class="keyword">const</span>&amp; text, <a class="code hl_enumeration" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8">choice</a> _choice = <a class="code hl_enumvalue" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a809da5df9c86c6426c8d8db2934d3f51">choice::ok_cancel</a>,</div>
<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> <a class="code hl_enumeration" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85">icon</a> _icon = <a class="code hl_enumvalue" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85acaf9b6b99962bf5c2264824231d7a40c">icon::info</a>);</div>
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> </div>
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> <a class="code hl_enumeration" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679">button</a> <a class="code hl_function" href="classpfd_1_1message.html#aeee673bf19f45328a7eb8ec2c1e01fc9">result</a>();</div>
<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> </div>
<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> <span class="comment">// Some extra logic to map the exit code to button number</span></div>
<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"><a class="line" href="classpfd_1_1message.html#abd55bdeb662938db1c8e6747d3acb7b4"> 341</a></span> std::map&lt;int, button&gt; <a class="code hl_variable" href="classpfd_1_1message.html#abd55bdeb662938db1c8e6747d3acb7b4">m_mappings</a>;</div>
<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span>};</div>
</div>
<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> </div>
<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span><span class="comment">//</span></div>
<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span><span class="comment">// The open_file, save_file, and open_folder widgets</span></div>
<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span><span class="comment">//</span></div>
<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> </div>
<div class="foldopen" id="foldopen00348" data-start="{" data-end="};">
<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"><a class="line" href="classpfd_1_1open__file.html"> 348</a></span><span class="keyword">class </span><a class="code hl_function" href="classpfd_1_1open__file.html#a6bb56d3681f50dee4294ddaf69e6ec82">open_file</a> : <span class="keyword">public</span> <a class="code hl_class" href="classpfd_1_1internal_1_1file__dialog.html">internal::file_dialog</a> {</div>
<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> <a class="code hl_function" href="classpfd_1_1open__file.html#a6bb56d3681f50dee4294ddaf69e6ec82">open_file</a>(std::string <span class="keyword">const</span>&amp; title, std::string <span class="keyword">const</span>&amp; default_path = <span class="stringliteral">&quot;&quot;</span>,</div>
<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> std::vector&lt;std::string&gt; <span class="keyword">const</span>&amp; <a class="code hl_variable" href="ImguiUI_8cpp.html#a5fdd69bc3222fb4c44d3252f0b4641e3">filters</a> = { <span class="stringliteral">&quot;All Files&quot;</span>, <span class="stringliteral">&quot;*&quot;</span> }, <a class="code hl_enumeration" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997">opt</a> options = <a class="code hl_enumvalue" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997a334c4a4c42fdb79d7ebc3e73b517e6f8">opt::none</a>);</div>
<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> </div>
<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span><span class="preprocessor">#if defined(__has_cpp_attribute)</span></div>
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span><span class="preprocessor">#if __has_cpp_attribute(deprecated)</span></div>
<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> <span class="comment">// Backwards compatibility</span></div>
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> [[deprecated(<span class="stringliteral">&quot;Use pfd::opt::multiselect instead of allow_multiselect&quot;</span>)]]</div>
<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> <a class="code hl_function" href="classpfd_1_1open__file.html#a6bb56d3681f50dee4294ddaf69e6ec82">open_file</a>(std::string <span class="keyword">const</span>&amp; title, std::string <span class="keyword">const</span>&amp; default_path, std::vector&lt;std::string&gt; <span class="keyword">const</span>&amp; <a class="code hl_variable" href="ImguiUI_8cpp.html#a5fdd69bc3222fb4c44d3252f0b4641e3">filters</a>,</div>
<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> <span class="keywordtype">bool</span> allow_multiselect);</div>
<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> </div>
<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> std::vector&lt;std::string&gt; <a class="code hl_function" href="classpfd_1_1open__file.html#ad0f01c7de1fbb94343053c671ced8b0b">result</a>();</div>
<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span>};</div>
</div>
<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> </div>
<div class="foldopen" id="foldopen00365" data-start="{" data-end="};">
<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"><a class="line" href="classpfd_1_1save__file.html"> 365</a></span><span class="keyword">class </span><a class="code hl_function" href="classpfd_1_1save__file.html#a5405ec39e88121a9ebeae60ba26b4af1">save_file</a> : <span class="keyword">public</span> <a class="code hl_class" href="classpfd_1_1internal_1_1file__dialog.html">internal::file_dialog</a> {</div>
<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> <a class="code hl_function" href="classpfd_1_1save__file.html#a5405ec39e88121a9ebeae60ba26b4af1">save_file</a>(std::string <span class="keyword">const</span>&amp; title, std::string <span class="keyword">const</span>&amp; default_path = <span class="stringliteral">&quot;&quot;</span>,</div>
<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> std::vector&lt;std::string&gt; <span class="keyword">const</span>&amp; <a class="code hl_variable" href="ImguiUI_8cpp.html#a5fdd69bc3222fb4c44d3252f0b4641e3">filters</a> = { <span class="stringliteral">&quot;All Files&quot;</span>, <span class="stringliteral">&quot;*&quot;</span> }, <a class="code hl_enumeration" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997">opt</a> options = <a class="code hl_enumvalue" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997a334c4a4c42fdb79d7ebc3e73b517e6f8">opt::none</a>);</div>
<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span> </div>
<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span><span class="preprocessor">#if defined(__has_cpp_attribute)</span></div>
<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span><span class="preprocessor">#if __has_cpp_attribute(deprecated)</span></div>
<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span> <span class="comment">// Backwards compatibility</span></div>
<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span> [[deprecated(<span class="stringliteral">&quot;Use pfd::opt::force_overwrite instead of confirm_overwrite&quot;</span>)]]</div>
<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> <a class="code hl_function" href="classpfd_1_1save__file.html#a5405ec39e88121a9ebeae60ba26b4af1">save_file</a>(std::string <span class="keyword">const</span>&amp; title, std::string <span class="keyword">const</span>&amp; default_path, std::vector&lt;std::string&gt; <span class="keyword">const</span>&amp; <a class="code hl_variable" href="ImguiUI_8cpp.html#a5fdd69bc3222fb4c44d3252f0b4641e3">filters</a>,</div>
<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span> <span class="keywordtype">bool</span> confirm_overwrite);</div>
<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span> </div>
<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span> std::string <a class="code hl_function" href="classpfd_1_1save__file.html#aefa58bfca841a51edb6a7ef2fa640904">result</a>();</div>
<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span>};</div>
</div>
<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> </div>
<div class="foldopen" id="foldopen00382" data-start="{" data-end="};">
<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"><a class="line" href="classpfd_1_1select__folder.html"> 382</a></span><span class="keyword">class </span><a class="code hl_function" href="classpfd_1_1select__folder.html#ac6611de7b07e4366ffd2442d22ae1924">select_folder</a> : <span class="keyword">public</span> <a class="code hl_class" href="classpfd_1_1internal_1_1file__dialog.html">internal::file_dialog</a> {</div>
<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span> <a class="code hl_function" href="classpfd_1_1select__folder.html#ac6611de7b07e4366ffd2442d22ae1924">select_folder</a>(std::string <span class="keyword">const</span>&amp; title, std::string <span class="keyword">const</span>&amp; default_path = <span class="stringliteral">&quot;&quot;</span>, <a class="code hl_enumeration" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997">opt</a> options = <a class="code hl_enumvalue" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997a334c4a4c42fdb79d7ebc3e73b517e6f8">opt::none</a>);</div>
<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span> </div>
<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span> std::string <a class="code hl_function" href="classpfd_1_1select__folder.html#aa0f0d69af6be6b2627bf02440a921765">result</a>();</div>
<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span>};</div>
</div>
<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span> </div>
<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span><span class="comment">//</span></div>
<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span><span class="comment">// Below this are all the method implementations. You may choose to define the</span></div>
<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span><span class="comment">// macro PFD_SKIP_IMPLEMENTATION everywhere before including this header except</span></div>
<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span><span class="comment">// in one place. This may reduce compilation times.</span></div>
<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span><span class="comment">//</span></div>
<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span> </div>
<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span><span class="preprocessor">#if !defined PFD_SKIP_IMPLEMENTATION</span></div>
<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span> </div>
<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span><span class="comment">// internal free functions implementations</span></div>
<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> </div>
<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacepfd_1_1internal.html">internal</a> {</div>
<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> </div>
<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span><span class="preprocessor">#if _WIN32</span></div>
<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span><span class="keyword">static</span> <span class="keyword">inline</span> std::wstring str2wstr(std::string <span class="keyword">const</span>&amp; str) {</div>
<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span> <span class="keywordtype">int</span> len = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), (<span class="keywordtype">int</span>)str.size(), <span class="keyword">nullptr</span>, 0);</div>
<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span> std::wstring ret(len, <span class="charliteral">&#39;\0&#39;</span>);</div>
<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> MultiByteToWideChar(CP_UTF8, 0, str.c_str(), (<span class="keywordtype">int</span>)str.size(), (LPWSTR)ret.data(), (<span class="keywordtype">int</span>)ret.size());</div>
<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span> <span class="keywordflow">return</span> ret;</div>
<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span>}</div>
<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span> </div>
<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span><span class="keyword">static</span> <span class="keyword">inline</span> std::string wstr2str(std::wstring <span class="keyword">const</span>&amp; str) {</div>
<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> <span class="keywordtype">int</span> len = WideCharToMultiByte(CP_UTF8, 0, str.c_str(), (<span class="keywordtype">int</span>)str.size(), <span class="keyword">nullptr</span>, 0, <span class="keyword">nullptr</span>, <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span> std::string ret(len, <span class="charliteral">&#39;\0&#39;</span>);</div>
<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span> WideCharToMultiByte(CP_UTF8, 0, str.c_str(), (<span class="keywordtype">int</span>)str.size(), (LPSTR)ret.data(), (<span class="keywordtype">int</span>)ret.size(), <span class="keyword">nullptr</span>, <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span> <span class="keywordflow">return</span> ret;</div>
<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span>}</div>
<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span> </div>
<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span><span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> is_vista() {</div>
<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> OSVERSIONINFOEXW osvi;</div>
<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span> memset(&amp;osvi, 0, <span class="keyword">sizeof</span>(osvi));</div>
<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> DWORDLONG <span class="keyword">const</span> mask =</div>
<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL),</div>
<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span> VER_MINORVERSION, VER_GREATER_EQUAL),</div>
<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span> VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL);</div>
<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> osvi.dwOSVersionInfoSize = <span class="keyword">sizeof</span>(osvi);</div>
<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span> osvi.dwMajorVersion = HIBYTE(_WIN32_WINNT_VISTA);</div>
<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> osvi.dwMinorVersion = LOBYTE(_WIN32_WINNT_VISTA);</div>
<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span> osvi.wServicePackMajor = 0;</div>
<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span> </div>
<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"> 428</span> <span class="keywordflow">return</span> VerifyVersionInfoW(&amp;osvi, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR, mask) != FALSE;</div>
<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span>}</div>
<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span> </div>
<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span><span class="comment">// This is necessary until C++20 which will have std::string::ends_with() etc.</span></div>
<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"> 433</span> </div>
<div class="foldopen" id="foldopen00434" data-start="{" data-end="}">
<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"><a class="line" href="namespacepfd_1_1internal.html#aaf263cbe957efd58a37827691b430371"> 434</a></span><span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="namespacepfd_1_1internal.html#aaf263cbe957efd58a37827691b430371">ends_with</a>(std::string <span class="keyword">const</span>&amp; str, std::string <span class="keyword">const</span>&amp; suffix) {</div>
<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span> <span class="keywordflow">return</span> suffix.size() &lt;= str.size() &amp;&amp; str.compare(str.size() - suffix.size(), suffix.size(), suffix) == 0;</div>
<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span>}</div>
</div>
<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span> </div>
<div class="foldopen" id="foldopen00438" data-start="{" data-end="}">
<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"><a class="line" href="namespacepfd_1_1internal.html#a405a4127479d770e2b2fd48504c85f42"> 438</a></span><span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="namespacepfd_1_1internal.html#a405a4127479d770e2b2fd48504c85f42">starts_with</a>(std::string <span class="keyword">const</span>&amp; str, std::string <span class="keyword">const</span>&amp; prefix) {</div>
<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span> <span class="keywordflow">return</span> prefix.size() &lt;= str.size() &amp;&amp; str.compare(0, prefix.size(), prefix) == 0;</div>
<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span>}</div>
</div>
<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span> </div>
<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span><span class="comment">// This is necessary until C++17 which will have std::filesystem::is_directory</span></div>
<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span> </div>
<div class="foldopen" id="foldopen00444" data-start="{" data-end="}">
<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"><a class="line" href="namespacepfd_1_1internal.html#a48cc31ab291a956a29b0a23fb46a7d26"> 444</a></span><span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="namespacepfd_1_1internal.html#a48cc31ab291a956a29b0a23fb46a7d26">is_directory</a>(std::string <span class="keyword">const</span>&amp; <a class="code hl_class" href="classpfd_1_1path.html">path</a>) {</div>
<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span><span class="preprocessor">#if _WIN32</span></div>
<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span> <span class="keyword">auto</span> attr = GetFileAttributesA(<a class="code hl_class" href="classpfd_1_1path.html">path</a>.c_str());</div>
<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</span> <span class="keywordflow">return</span> attr != INVALID_FILE_ATTRIBUTES &amp;&amp; (attr &amp; FILE_ATTRIBUTE_DIRECTORY);</div>
<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"> 448</span><span class="preprocessor">#elif __EMSCRIPTEN__</span></div>
<div class="line"><a id="l00449" name="l00449"></a><span class="lineno"> 449</span> <span class="comment">// TODO</span></div>
<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"> 450</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"> 451</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"> 452</span> <span class="keyword">struct </span>stat s;</div>
<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"> 453</span> <span class="keywordflow">return</span> stat(<a class="code hl_class" href="classpfd_1_1path.html">path</a>.c_str(), &amp;s) == 0 &amp;&amp; S_ISDIR(s.st_mode);</div>
<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</span>}</div>
</div>
<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"> 456</span> </div>
<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span><span class="comment">// This is necessary because getenv is not thread-safe</span></div>
<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span> </div>
<div class="foldopen" id="foldopen00459" data-start="{" data-end="}">
<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"><a class="line" href="namespacepfd_1_1internal.html#a491d4afd9c76bafd6011502082444461"> 459</a></span><span class="keyword">static</span> <span class="keyword">inline</span> std::string <a class="code hl_function" href="namespacepfd_1_1internal.html#a491d4afd9c76bafd6011502082444461">getenv</a>(std::string <span class="keyword">const</span>&amp; str) {</div>
<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span><span class="preprocessor">#if _MSC_VER</span></div>
<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span> <span class="keywordtype">char</span>* <a class="code hl_variable" href="mixer_8c.html#a9b37ed65df7c33390f588701de90ae1b">buf</a> = <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</span> <span class="keywordtype">size_t</span> size = 0;</div>
<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</span> <span class="keywordflow">if</span> (_dupenv_s(&amp;<a class="code hl_variable" href="mixer_8c.html#a9b37ed65df7c33390f588701de90ae1b">buf</a>, &amp;size, str.c_str()) == 0 &amp;&amp; <a class="code hl_variable" href="mixer_8c.html#a9b37ed65df7c33390f588701de90ae1b">buf</a>) {</div>
<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span> std::string ret(<a class="code hl_variable" href="mixer_8c.html#a9b37ed65df7c33390f588701de90ae1b">buf</a>);</div>
<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span> free(<a class="code hl_variable" href="mixer_8c.html#a9b37ed65df7c33390f588701de90ae1b">buf</a>);</div>
<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span> <span class="keywordflow">return</span> ret;</div>
<div class="line"><a id="l00467" name="l00467"></a><span class="lineno"> 467</span> }</div>
<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span> <span class="keywordflow">return</span> <span class="stringliteral">&quot;&quot;</span>;</div>
<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00470" name="l00470"></a><span class="lineno"> 470</span> <span class="keyword">auto</span> <a class="code hl_variable" href="mixer_8c.html#a9b37ed65df7c33390f588701de90ae1b">buf</a> = std::getenv(str.c_str());</div>
<div class="line"><a id="l00471" name="l00471"></a><span class="lineno"> 471</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="mixer_8c.html#a9b37ed65df7c33390f588701de90ae1b">buf</a> ? <a class="code hl_variable" href="mixer_8c.html#a9b37ed65df7c33390f588701de90ae1b">buf</a> : <span class="stringliteral">&quot;&quot;</span>;</div>
<div class="line"><a id="l00472" name="l00472"></a><span class="lineno"> 472</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00473" name="l00473"></a><span class="lineno"> 473</span>}</div>
</div>
<div class="line"><a id="l00474" name="l00474"></a><span class="lineno"> 474</span> </div>
<div class="line"><a id="l00475" name="l00475"></a><span class="lineno"> 475</span>} <span class="comment">// namespace internal</span></div>
<div class="line"><a id="l00476" name="l00476"></a><span class="lineno"> 476</span> </div>
<div class="line"><a id="l00477" name="l00477"></a><span class="lineno"> 477</span><span class="comment">// settings implementation</span></div>
<div class="line"><a id="l00478" name="l00478"></a><span class="lineno"> 478</span> </div>
<div class="foldopen" id="foldopen00479" data-start="{" data-end="}">
<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"><a class="line" href="classpfd_1_1settings.html#a7190e52d512b1321acb78731a8cddf42"> 479</a></span><span class="keyword">inline</span> <a class="code hl_function" href="classpfd_1_1settings.html#a7190e52d512b1321acb78731a8cddf42">settings::settings</a>(<span class="keywordtype">bool</span> resync) {</div>
<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span> <a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">flags</a>(<a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aada11dd6b78f267a47638211f4c7e23d434">flag::is_scanned</a>) &amp;= !resync;</div>
<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span> </div>
<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">flags</a>(<a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aada11dd6b78f267a47638211f4c7e23d434">flag::is_scanned</a>))</div>
<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span> </div>
<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span> <span class="keyword">auto</span> pfd_verbose = <a class="code hl_function" href="namespacepfd_1_1internal.html#a491d4afd9c76bafd6011502082444461">internal::getenv</a>(<span class="stringliteral">&quot;PFD_VERBOSE&quot;</span>);</div>
<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span> <span class="keyword">auto</span> match_no = std::regex(<span class="stringliteral">&quot;(|0|no|false)&quot;</span>, std::regex_constants::icase);</div>
<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span> <span class="keywordflow">if</span> (!std::regex_match(pfd_verbose, match_no))</div>
<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"> 488</span> <a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">flags</a>(<a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aadad9da28952c27749f53c23675db49d560">flag::is_verbose</a>) = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</span> </div>
<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</span><span class="preprocessor">#if _WIN32</span></div>
<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"> 491</span> <a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">flags</a>(<a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aadaea0bbb642237ecdaa68a14a0d7212448">flag::is_vista</a>) = internal::is_vista();</div>
<div class="line"><a id="l00492" name="l00492"></a><span class="lineno"> 492</span><span class="preprocessor">#elif !__APPLE__</span></div>
<div class="line"><a id="l00493" name="l00493"></a><span class="lineno"> 493</span> <a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">flags</a>(<a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aadaee57842698a0690e4b89730b469edc31">flag::has_zenity</a>) = <a class="code hl_function" href="classpfd_1_1settings.html#af1c2f6e88ffafd59a2f7609631a9eade">check_program</a>(<span class="stringliteral">&quot;zenity&quot;</span>);</div>
<div class="line"><a id="l00494" name="l00494"></a><span class="lineno"> 494</span> <a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">flags</a>(<a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aada1267dfaf66b51761e04b042bb2c4dd7a">flag::has_matedialog</a>) = <a class="code hl_function" href="classpfd_1_1settings.html#af1c2f6e88ffafd59a2f7609631a9eade">check_program</a>(<span class="stringliteral">&quot;matedialog&quot;</span>);</div>
<div class="line"><a id="l00495" name="l00495"></a><span class="lineno"> 495</span> <a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">flags</a>(<a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aada1a652e3d6a785053942b6cffc2c4669d">flag::has_qarma</a>) = <a class="code hl_function" href="classpfd_1_1settings.html#af1c2f6e88ffafd59a2f7609631a9eade">check_program</a>(<span class="stringliteral">&quot;qarma&quot;</span>);</div>
<div class="line"><a id="l00496" name="l00496"></a><span class="lineno"> 496</span> <a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">flags</a>(<a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aada1f1a19f0bf1fe1a63ed3e73e40466b4b">flag::has_kdialog</a>) = <a class="code hl_function" href="classpfd_1_1settings.html#af1c2f6e88ffafd59a2f7609631a9eade">check_program</a>(<span class="stringliteral">&quot;kdialog&quot;</span>);</div>
<div class="line"><a id="l00497" name="l00497"></a><span class="lineno"> 497</span> </div>
<div class="line"><a id="l00498" name="l00498"></a><span class="lineno"> 498</span> <span class="comment">// If multiple helpers are available, try to default to the best one</span></div>
<div class="line"><a id="l00499" name="l00499"></a><span class="lineno"> 499</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">flags</a>(<a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aadaee57842698a0690e4b89730b469edc31">flag::has_zenity</a>) &amp;&amp; <a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">flags</a>(<a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aada1f1a19f0bf1fe1a63ed3e73e40466b4b">flag::has_kdialog</a>)) {</div>
<div class="line"><a id="l00500" name="l00500"></a><span class="lineno"> 500</span> <span class="keyword">auto</span> desktop_name = <a class="code hl_function" href="namespacepfd_1_1internal.html#a491d4afd9c76bafd6011502082444461">internal::getenv</a>(<span class="stringliteral">&quot;XDG_SESSION_DESKTOP&quot;</span>);</div>
<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"> 501</span> <span class="keywordflow">if</span> (desktop_name == std::string(<span class="stringliteral">&quot;gnome&quot;</span>))</div>
<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"> 502</span> <a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">flags</a>(<a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aada1f1a19f0bf1fe1a63ed3e73e40466b4b">flag::has_kdialog</a>) = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (desktop_name == std::string(<span class="stringliteral">&quot;KDE&quot;</span>))</div>
<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span> <a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">flags</a>(<a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aadaee57842698a0690e4b89730b469edc31">flag::has_zenity</a>) = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span> }</div>
<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"> 506</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"> 507</span> </div>
<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span> <a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">flags</a>(<a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aada11dd6b78f267a47638211f4c7e23d434">flag::is_scanned</a>) = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"> 509</span>}</div>
</div>
<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"> 510</span> </div>
<div class="foldopen" id="foldopen00511" data-start="{" data-end="}">
<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"><a class="line" href="classpfd_1_1settings.html#a54fb5598e7501ac38d17e3629190b2fe"> 511</a></span><span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classpfd_1_1settings.html#a54fb5598e7501ac38d17e3629190b2fe">settings::available</a>() {</div>
<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span><span class="preprocessor">#if _WIN32</span></div>
<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span><span class="preprocessor">#elif __APPLE__</span></div>
<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span><span class="preprocessor">#elif __EMSCRIPTEN__</span></div>
<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span> <span class="comment">// FIXME: Return true after implementation is complete.</span></div>
<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00519" name="l00519"></a><span class="lineno"> 519</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</span> <a class="code hl_function" href="classpfd_1_1settings.html#a7190e52d512b1321acb78731a8cddf42">settings</a> tmp;</div>
<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span> <span class="keywordflow">return</span> tmp.<a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">flags</a>(<a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aadaee57842698a0690e4b89730b469edc31">flag::has_zenity</a>) || tmp.<a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">flags</a>(<a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aada1267dfaf66b51761e04b042bb2c4dd7a">flag::has_matedialog</a>) || tmp.<a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">flags</a>(<a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aada1a652e3d6a785053942b6cffc2c4669d">flag::has_qarma</a>) ||</div>
<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span> tmp.<a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">flags</a>(<a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aada1f1a19f0bf1fe1a63ed3e73e40466b4b">flag::has_kdialog</a>);</div>
<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"> 523</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span>}</div>
</div>
<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span> </div>
<div class="foldopen" id="foldopen00526" data-start="{" data-end="}">
<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"><a class="line" href="classpfd_1_1settings.html#a0ed32e8ed039106028474eb9f0a0a7bc"> 526</a></span><span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classpfd_1_1settings.html#a0ed32e8ed039106028474eb9f0a0a7bc">settings::verbose</a>(<span class="keywordtype">bool</span> value) {</div>
<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"> 527</span> <a class="code hl_function" href="classpfd_1_1settings.html#a7190e52d512b1321acb78731a8cddf42">settings</a>().flags(<a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aadad9da28952c27749f53c23675db49d560">flag::is_verbose</a>) = value;</div>
<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span>}</div>
</div>
<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span> </div>
<div class="foldopen" id="foldopen00530" data-start="{" data-end="}">
<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"><a class="line" href="classpfd_1_1settings.html#a60023ab0ac98008d2c52a568e9ee540f"> 530</a></span><span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classpfd_1_1settings.html#a60023ab0ac98008d2c52a568e9ee540f">settings::rescan</a>() {</div>
<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span> <a class="code hl_function" href="classpfd_1_1settings.html#a7190e52d512b1321acb78731a8cddf42">settings</a>(<span class="comment">/* resync = */</span> <span class="keyword">true</span>);</div>
<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span>}</div>
</div>
<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span> </div>
<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span><span class="comment">// Check whether a program is present using “which”.</span></div>
<div class="foldopen" id="foldopen00535" data-start="{" data-end="}">
<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"><a class="line" href="classpfd_1_1settings.html#af1c2f6e88ffafd59a2f7609631a9eade"> 535</a></span><span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classpfd_1_1settings.html#af1c2f6e88ffafd59a2f7609631a9eade">settings::check_program</a>(std::string <span class="keyword">const</span>&amp; program) {</div>
<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span><span class="preprocessor">#if _WIN32</span></div>
<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span> (void)program;</div>
<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"> 539</span><span class="preprocessor">#elif __EMSCRIPTEN__</span></div>
<div class="line"><a id="l00540" name="l00540"></a><span class="lineno"> 540</span> (void)program;</div>
<div class="line"><a id="l00541" name="l00541"></a><span class="lineno"> 541</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span> <span class="keywordtype">int</span> exit_code = -1;</div>
<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span> <a class="code hl_class" href="classpfd_1_1internal_1_1executor.html">internal::executor</a> async;</div>
<div class="line"><a id="l00545" name="l00545"></a><span class="lineno"> 545</span> async.<a class="code hl_function" href="classpfd_1_1internal_1_1executor.html#adcb1fcd88381030ada3d8f6d07dd8d6e">start_process</a>({ <span class="stringliteral">&quot;/bin/sh&quot;</span>, <span class="stringliteral">&quot;-c&quot;</span>, <span class="stringliteral">&quot;which &quot;</span> + program });</div>
<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span> async.<a class="code hl_function" href="classpfd_1_1internal_1_1executor.html#a07116b98b28332c42946e956f7edd2ae">result</a>(&amp;exit_code);</div>
<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span> <span class="keywordflow">return</span> exit_code == 0;</div>
<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00549" name="l00549"></a><span class="lineno"> 549</span>}</div>
</div>
<div class="line"><a id="l00550" name="l00550"></a><span class="lineno"> 550</span> </div>
<div class="foldopen" id="foldopen00551" data-start="{" data-end="}">
<div class="line"><a id="l00551" name="l00551"></a><span class="lineno"><a class="line" href="classpfd_1_1settings.html#a4e22d6fb43d387ddc980bf6e2a6aad24"> 551</a></span><span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classpfd_1_1settings.html#a4e22d6fb43d387ddc980bf6e2a6aad24">settings::is_osascript</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00552" name="l00552"></a><span class="lineno"> 552</span><span class="preprocessor">#if __APPLE__</span></div>
<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"> 553</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"> 554</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"> 555</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00556" name="l00556"></a><span class="lineno"> 556</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"> 557</span>}</div>
</div>
<div class="line"><a id="l00558" name="l00558"></a><span class="lineno"> 558</span> </div>
<div class="foldopen" id="foldopen00559" data-start="{" data-end="}">
<div class="line"><a id="l00559" name="l00559"></a><span class="lineno"><a class="line" href="classpfd_1_1settings.html#a08e4a5b150186d77158a974cc8c2d4a2"> 559</a></span><span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classpfd_1_1settings.html#a08e4a5b150186d77158a974cc8c2d4a2">settings::is_zenity</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00560" name="l00560"></a><span class="lineno"> 560</span> <span class="keywordflow">return</span> <a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">flags</a>(<a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aadaee57842698a0690e4b89730b469edc31">flag::has_zenity</a>) || <a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">flags</a>(<a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aada1267dfaf66b51761e04b042bb2c4dd7a">flag::has_matedialog</a>) || <a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">flags</a>(<a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aada1a652e3d6a785053942b6cffc2c4669d">flag::has_qarma</a>);</div>
<div class="line"><a id="l00561" name="l00561"></a><span class="lineno"> 561</span>}</div>
</div>
<div class="line"><a id="l00562" name="l00562"></a><span class="lineno"> 562</span> </div>
<div class="foldopen" id="foldopen00563" data-start="{" data-end="}">
<div class="line"><a id="l00563" name="l00563"></a><span class="lineno"><a class="line" href="classpfd_1_1settings.html#aa79fb10eee785f1acd8d1ff34e226c89"> 563</a></span><span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classpfd_1_1settings.html#aa79fb10eee785f1acd8d1ff34e226c89">settings::is_kdialog</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00564" name="l00564"></a><span class="lineno"> 564</span> <span class="keywordflow">return</span> <a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">flags</a>(<a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aada1f1a19f0bf1fe1a63ed3e73e40466b4b">flag::has_kdialog</a>);</div>
<div class="line"><a id="l00565" name="l00565"></a><span class="lineno"> 565</span>}</div>
</div>
<div class="line"><a id="l00566" name="l00566"></a><span class="lineno"> 566</span> </div>
<div class="foldopen" id="foldopen00567" data-start="{" data-end="}">
<div class="line"><a id="l00567" name="l00567"></a><span class="lineno"><a class="line" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8"> 567</a></span><span class="keyword">inline</span> <span class="keywordtype">bool</span> <span class="keyword">const</span>&amp; <a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">settings::flags</a>(<a class="code hl_enumeration" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aad">flag</a> in_flag)<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00568" name="l00568"></a><span class="lineno"> 568</span> <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">flags</a>[size_t(<a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aada73b7af539db867cb9edf24a3cb7b8a36">flag::max_flag</a>)];</div>
<div class="line"><a id="l00569" name="l00569"></a><span class="lineno"> 569</span> <span class="keywordflow">return</span> <a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">flags</a>[size_t(in_flag)];</div>
<div class="line"><a id="l00570" name="l00570"></a><span class="lineno"> 570</span>}</div>
</div>
<div class="line"><a id="l00571" name="l00571"></a><span class="lineno"> 571</span> </div>
<div class="foldopen" id="foldopen00572" data-start="{" data-end="}">
<div class="line"><a id="l00572" name="l00572"></a><span class="lineno"><a class="line" href="classpfd_1_1settings.html#a9b611d06856910f0d8c358dd0eadfcee"> 572</a></span><span class="keyword">inline</span> <span class="keywordtype">bool</span>&amp; <a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">settings::flags</a>(<a class="code hl_enumeration" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aad">flag</a> in_flag) {</div>
<div class="line"><a id="l00573" name="l00573"></a><span class="lineno"> 573</span> <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span><span class="keywordtype">bool</span>&amp;<span class="keyword">&gt;</span>(<span class="keyword">static_cast&lt;</span><a class="code hl_function" href="classpfd_1_1settings.html#a7190e52d512b1321acb78731a8cddf42">settings</a> const*<span class="keyword">&gt;</span>(<span class="keyword">this</span>)-&gt;flags(in_flag));</div>
<div class="line"><a id="l00574" name="l00574"></a><span class="lineno"> 574</span>}</div>
</div>
<div class="line"><a id="l00575" name="l00575"></a><span class="lineno"> 575</span> </div>
<div class="line"><a id="l00576" name="l00576"></a><span class="lineno"> 576</span><span class="comment">// path implementation</span></div>
<div class="foldopen" id="foldopen00577" data-start="{" data-end="}">
<div class="line"><a id="l00577" name="l00577"></a><span class="lineno"><a class="line" href="classpfd_1_1path.html#a1205ad5165c748f91ffe939687e095a2"> 577</a></span><span class="keyword">inline</span> std::string <a class="code hl_function" href="classpfd_1_1path.html#a1205ad5165c748f91ffe939687e095a2">path::home</a>() {</div>
<div class="line"><a id="l00578" name="l00578"></a><span class="lineno"> 578</span><span class="preprocessor">#if _WIN32</span></div>
<div class="line"><a id="l00579" name="l00579"></a><span class="lineno"> 579</span> <span class="comment">// First try the USERPROFILE environment variable</span></div>
<div class="line"><a id="l00580" name="l00580"></a><span class="lineno"> 580</span> <span class="keyword">auto</span> user_profile = <a class="code hl_function" href="namespacepfd_1_1internal.html#a491d4afd9c76bafd6011502082444461">internal::getenv</a>(<span class="stringliteral">&quot;USERPROFILE&quot;</span>);</div>
<div class="line"><a id="l00581" name="l00581"></a><span class="lineno"> 581</span> <span class="keywordflow">if</span> (user_profile.size() &gt; 0)</div>
<div class="line"><a id="l00582" name="l00582"></a><span class="lineno"> 582</span> <span class="keywordflow">return</span> user_profile;</div>
<div class="line"><a id="l00583" name="l00583"></a><span class="lineno"> 583</span> <span class="comment">// Otherwise, try GetUserProfileDirectory()</span></div>
<div class="line"><a id="l00584" name="l00584"></a><span class="lineno"> 584</span> HANDLE token = <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00585" name="l00585"></a><span class="lineno"> 585</span> DWORD len = MAX_PATH;</div>
<div class="line"><a id="l00586" name="l00586"></a><span class="lineno"> 586</span> <span class="keywordtype">char</span> <a class="code hl_variable" href="mixer_8c.html#a9b37ed65df7c33390f588701de90ae1b">buf</a>[MAX_PATH] = { <span class="charliteral">&#39;\0&#39;</span> };</div>
<div class="line"><a id="l00587" name="l00587"></a><span class="lineno"> 587</span> <span class="keywordflow">if</span> (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &amp;token)) {</div>
<div class="line"><a id="l00588" name="l00588"></a><span class="lineno"> 588</span> dll userenv(<span class="stringliteral">&quot;userenv.dll&quot;</span>);</div>
<div class="line"><a id="l00589" name="l00589"></a><span class="lineno"> 589</span> dll::proc&lt;BOOL WINAPI(HANDLE, LPSTR, LPDWORD)&gt; get_user_profile_directory(userenv, <span class="stringliteral">&quot;GetUserProfileDirectoryA&quot;</span>);</div>
<div class="line"><a id="l00590" name="l00590"></a><span class="lineno"> 590</span> get_user_profile_directory(token, <a class="code hl_variable" href="mixer_8c.html#a9b37ed65df7c33390f588701de90ae1b">buf</a>, &amp;len);</div>
<div class="line"><a id="l00591" name="l00591"></a><span class="lineno"> 591</span> CloseHandle(token);</div>
<div class="line"><a id="l00592" name="l00592"></a><span class="lineno"> 592</span> <span class="keywordflow">if</span> (*<a class="code hl_variable" href="mixer_8c.html#a9b37ed65df7c33390f588701de90ae1b">buf</a>)</div>
<div class="line"><a id="l00593" name="l00593"></a><span class="lineno"> 593</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="mixer_8c.html#a9b37ed65df7c33390f588701de90ae1b">buf</a>;</div>
<div class="line"><a id="l00594" name="l00594"></a><span class="lineno"> 594</span> }</div>
<div class="line"><a id="l00595" name="l00595"></a><span class="lineno"> 595</span><span class="preprocessor">#elif __EMSCRIPTEN__</span></div>
<div class="line"><a id="l00596" name="l00596"></a><span class="lineno"> 596</span> <span class="keywordflow">return</span> <span class="stringliteral">&quot;/&quot;</span>;</div>
<div class="line"><a id="l00597" name="l00597"></a><span class="lineno"> 597</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00598" name="l00598"></a><span class="lineno"> 598</span> <span class="comment">// First try the HOME environment variable</span></div>
<div class="line"><a id="l00599" name="l00599"></a><span class="lineno"> 599</span> <span class="keyword">auto</span> <a class="code hl_function" href="classpfd_1_1path.html#a1205ad5165c748f91ffe939687e095a2">home</a> = <a class="code hl_function" href="namespacepfd_1_1internal.html#a491d4afd9c76bafd6011502082444461">internal::getenv</a>(<span class="stringliteral">&quot;HOME&quot;</span>);</div>
<div class="line"><a id="l00600" name="l00600"></a><span class="lineno"> 600</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classpfd_1_1path.html#a1205ad5165c748f91ffe939687e095a2">home</a>.size() &gt; 0)</div>
<div class="line"><a id="l00601" name="l00601"></a><span class="lineno"> 601</span> <span class="keywordflow">return</span> <a class="code hl_function" href="classpfd_1_1path.html#a1205ad5165c748f91ffe939687e095a2">home</a>;</div>
<div class="line"><a id="l00602" name="l00602"></a><span class="lineno"> 602</span> <span class="comment">// Otherwise, try getpwuid_r()</span></div>
<div class="line"><a id="l00603" name="l00603"></a><span class="lineno"> 603</span> <span class="keywordtype">size_t</span> len = 4096;</div>
<div class="line"><a id="l00604" name="l00604"></a><span class="lineno"> 604</span><span class="preprocessor">#if defined(_SC_GETPW_R_SIZE_MAX)</span></div>
<div class="line"><a id="l00605" name="l00605"></a><span class="lineno"> 605</span> <span class="keyword">auto</span> size_max = sysconf(_SC_GETPW_R_SIZE_MAX);</div>
<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"> 606</span> <span class="keywordflow">if</span> (size_max != -1)</div>
<div class="line"><a id="l00607" name="l00607"></a><span class="lineno"> 607</span> len = size_t(size_max);</div>
<div class="line"><a id="l00608" name="l00608"></a><span class="lineno"> 608</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span> std::vector&lt;char&gt; <a class="code hl_variable" href="mixer_8c.html#a9b37ed65df7c33390f588701de90ae1b">buf</a>(len);</div>
<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"> 610</span> <span class="keyword">struct </span>passwd pwd, *result;</div>
<div class="line"><a id="l00611" name="l00611"></a><span class="lineno"> 611</span> <span class="keywordflow">if</span> (getpwuid_r(getuid(), &amp;pwd, <a class="code hl_variable" href="mixer_8c.html#a9b37ed65df7c33390f588701de90ae1b">buf</a>.data(), <a class="code hl_variable" href="mixer_8c.html#a9b37ed65df7c33390f588701de90ae1b">buf</a>.size(), &amp;result) == 0)</div>
<div class="line"><a id="l00612" name="l00612"></a><span class="lineno"> 612</span> <span class="keywordflow">return</span> result-&gt;pw_dir;</div>
<div class="line"><a id="l00613" name="l00613"></a><span class="lineno"> 613</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00614" name="l00614"></a><span class="lineno"> 614</span> <span class="keywordflow">return</span> <span class="stringliteral">&quot;/&quot;</span>;</div>
<div class="line"><a id="l00615" name="l00615"></a><span class="lineno"> 615</span>}</div>
</div>
<div class="line"><a id="l00616" name="l00616"></a><span class="lineno"> 616</span> </div>
<div class="foldopen" id="foldopen00617" data-start="{" data-end="}">
<div class="line"><a id="l00617" name="l00617"></a><span class="lineno"><a class="line" href="classpfd_1_1path.html#a73bb289af48853c52fb1569c2d00a40c"> 617</a></span><span class="keyword">inline</span> std::string <a class="code hl_function" href="classpfd_1_1path.html#a73bb289af48853c52fb1569c2d00a40c">path::separator</a>() {</div>
<div class="line"><a id="l00618" name="l00618"></a><span class="lineno"> 618</span><span class="preprocessor">#if _WIN32</span></div>
<div class="line"><a id="l00619" name="l00619"></a><span class="lineno"> 619</span> <span class="keywordflow">return</span> <span class="stringliteral">&quot;\\&quot;</span>;</div>
<div class="line"><a id="l00620" name="l00620"></a><span class="lineno"> 620</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00621" name="l00621"></a><span class="lineno"> 621</span> <span class="keywordflow">return</span> <span class="stringliteral">&quot;/&quot;</span>;</div>
<div class="line"><a id="l00622" name="l00622"></a><span class="lineno"> 622</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00623" name="l00623"></a><span class="lineno"> 623</span>}</div>
</div>
<div class="line"><a id="l00624" name="l00624"></a><span class="lineno"> 624</span> </div>
<div class="line"><a id="l00625" name="l00625"></a><span class="lineno"> 625</span><span class="comment">// executor implementation</span></div>
<div class="line"><a id="l00626" name="l00626"></a><span class="lineno"> 626</span> </div>
<div class="foldopen" id="foldopen00627" data-start="{" data-end="}">
<div class="line"><a id="l00627" name="l00627"></a><span class="lineno"><a class="line" href="classpfd_1_1internal_1_1executor.html#a07116b98b28332c42946e956f7edd2ae"> 627</a></span><span class="keyword">inline</span> std::string <a class="code hl_function" href="classpfd_1_1internal_1_1executor.html#a07116b98b28332c42946e956f7edd2ae">internal::executor::result</a>(<span class="keywordtype">int</span>* exit_code <span class="comment">/* = nullptr */</span>) {</div>
<div class="line"><a id="l00628" name="l00628"></a><span class="lineno"> 628</span> <a class="code hl_function" href="classpfd_1_1internal_1_1executor.html#a2e65a18556b3de93dafd6fabe3786277">stop</a>();</div>
<div class="line"><a id="l00629" name="l00629"></a><span class="lineno"> 629</span> <span class="keywordflow">if</span> (exit_code)</div>
<div class="line"><a id="l00630" name="l00630"></a><span class="lineno"> 630</span> *exit_code = <a class="code hl_variable" href="classpfd_1_1internal_1_1executor.html#ae93cd2a96d031923e697d5f85cc5dfe7">m_exit_code</a>;</div>
<div class="line"><a id="l00631" name="l00631"></a><span class="lineno"> 631</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="classpfd_1_1internal_1_1executor.html#a062c9dc73980cd66d334c945c9617d9d">m_stdout</a>;</div>
<div class="line"><a id="l00632" name="l00632"></a><span class="lineno"> 632</span>}</div>
</div>
<div class="line"><a id="l00633" name="l00633"></a><span class="lineno"> 633</span> </div>
<div class="foldopen" id="foldopen00634" data-start="{" data-end="}">
<div class="line"><a id="l00634" name="l00634"></a><span class="lineno"><a class="line" href="classpfd_1_1internal_1_1executor.html#ab7766273bae572779a404c5543268406"> 634</a></span><span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classpfd_1_1internal_1_1executor.html#ab7766273bae572779a404c5543268406">internal::executor::kill</a>() {</div>
<div class="line"><a id="l00635" name="l00635"></a><span class="lineno"> 635</span><span class="preprocessor">#if _WIN32</span></div>
<div class="line"><a id="l00636" name="l00636"></a><span class="lineno"> 636</span> <span class="keywordflow">if</span> (m_future.valid()) {</div>
<div class="line"><a id="l00637" name="l00637"></a><span class="lineno"> 637</span> <span class="comment">// Close all windows that werent open when we started the future</span></div>
<div class="line"><a id="l00638" name="l00638"></a><span class="lineno"> 638</span> <span class="keyword">auto</span> previous_windows = m_windows;</div>
<div class="line"><a id="l00639" name="l00639"></a><span class="lineno"> 639</span> EnumWindows(&amp;enum_windows_callback, (LPARAM)<span class="keyword">this</span>);</div>
<div class="line"><a id="l00640" name="l00640"></a><span class="lineno"> 640</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> hwnd : m_windows)</div>
<div class="line"><a id="l00641" name="l00641"></a><span class="lineno"> 641</span> <span class="keywordflow">if</span> (previous_windows.find(hwnd) == previous_windows.end()) {</div>
<div class="line"><a id="l00642" name="l00642"></a><span class="lineno"> 642</span> SendMessage(hwnd, WM_CLOSE, 0, 0);</div>
<div class="line"><a id="l00643" name="l00643"></a><span class="lineno"> 643</span> <span class="comment">// Also send IDNO in case of a Yes/No or Abort/Retry/Ignore messagebox</span></div>
<div class="line"><a id="l00644" name="l00644"></a><span class="lineno"> 644</span> SendMessage(hwnd, WM_COMMAND, IDNO, 0);</div>
<div class="line"><a id="l00645" name="l00645"></a><span class="lineno"> 645</span> }</div>
<div class="line"><a id="l00646" name="l00646"></a><span class="lineno"> 646</span> }</div>
<div class="line"><a id="l00647" name="l00647"></a><span class="lineno"> 647</span><span class="preprocessor">#elif __EMSCRIPTEN__ || __NX__</span></div>
<div class="line"><a id="l00648" name="l00648"></a><span class="lineno"> 648</span> <span class="comment">// FIXME: do something</span></div>
<div class="line"><a id="l00649" name="l00649"></a><span class="lineno"> 649</span> <span class="keywordflow">return</span> <span class="keyword">false</span>; <span class="comment">// cannot kill</span></div>
<div class="line"><a id="l00650" name="l00650"></a><span class="lineno"> 650</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00651" name="l00651"></a><span class="lineno"> 651</span> <a class="code hl_function" href="classpfd_1_1internal_1_1executor.html#ab7766273bae572779a404c5543268406">::kill</a>(<a class="code hl_variable" href="classpfd_1_1internal_1_1executor.html#a7a164503ced150f7ad6c3e6084d4ff9b">m_pid</a>, SIGKILL);</div>
<div class="line"><a id="l00652" name="l00652"></a><span class="lineno"> 652</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00653" name="l00653"></a><span class="lineno"> 653</span> <a class="code hl_function" href="classpfd_1_1internal_1_1executor.html#a2e65a18556b3de93dafd6fabe3786277">stop</a>();</div>
<div class="line"><a id="l00654" name="l00654"></a><span class="lineno"> 654</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00655" name="l00655"></a><span class="lineno"> 655</span>}</div>
</div>
<div class="line"><a id="l00656" name="l00656"></a><span class="lineno"> 656</span> </div>
<div class="line"><a id="l00657" name="l00657"></a><span class="lineno"> 657</span><span class="preprocessor">#if _WIN32</span></div>
<div class="line"><a id="l00658" name="l00658"></a><span class="lineno"> 658</span><span class="keyword">inline</span> BOOL CALLBACK internal::executor::enum_windows_callback(HWND hwnd, LPARAM lParam) {</div>
<div class="line"><a id="l00659" name="l00659"></a><span class="lineno"> 659</span> <span class="keyword">auto</span> that = (<a class="code hl_class" href="classpfd_1_1internal_1_1executor.html">executor</a>*)lParam;</div>
<div class="line"><a id="l00660" name="l00660"></a><span class="lineno"> 660</span> </div>
<div class="line"><a id="l00661" name="l00661"></a><span class="lineno"> 661</span> DWORD pid;</div>
<div class="line"><a id="l00662" name="l00662"></a><span class="lineno"> 662</span> <span class="keyword">auto</span> tid = GetWindowThreadProcessId(hwnd, &amp;pid);</div>
<div class="line"><a id="l00663" name="l00663"></a><span class="lineno"> 663</span> <span class="keywordflow">if</span> (tid == that-&gt;m_tid)</div>
<div class="line"><a id="l00664" name="l00664"></a><span class="lineno"> 664</span> that-&gt;m_windows.insert(hwnd);</div>
<div class="line"><a id="l00665" name="l00665"></a><span class="lineno"> 665</span> <span class="keywordflow">return</span> TRUE;</div>
<div class="line"><a id="l00666" name="l00666"></a><span class="lineno"> 666</span>}</div>
<div class="line"><a id="l00667" name="l00667"></a><span class="lineno"> 667</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00668" name="l00668"></a><span class="lineno"> 668</span> </div>
<div class="line"><a id="l00669" name="l00669"></a><span class="lineno"> 669</span><span class="preprocessor">#if _WIN32</span></div>
<div class="line"><a id="l00670" name="l00670"></a><span class="lineno"> 670</span><span class="keyword">inline</span> <span class="keywordtype">void</span> internal::executor::start_func(std::function&lt;std::string(<span class="keywordtype">int</span>*)&gt; <span class="keyword">const</span>&amp; fun) {</div>
<div class="line"><a id="l00671" name="l00671"></a><span class="lineno"> 671</span> stop();</div>
<div class="line"><a id="l00672" name="l00672"></a><span class="lineno"> 672</span> </div>
<div class="line"><a id="l00673" name="l00673"></a><span class="lineno"> 673</span> <span class="keyword">auto</span> trampoline = [fun, <span class="keyword">this</span>]() {</div>
<div class="line"><a id="l00674" name="l00674"></a><span class="lineno"> 674</span> <span class="comment">// Save our thread id so that the caller can cancel us</span></div>
<div class="line"><a id="l00675" name="l00675"></a><span class="lineno"> 675</span> m_tid = GetCurrentThreadId();</div>
<div class="line"><a id="l00676" name="l00676"></a><span class="lineno"> 676</span> EnumWindows(&amp;enum_windows_callback, (LPARAM)<span class="keyword">this</span>);</div>
<div class="line"><a id="l00677" name="l00677"></a><span class="lineno"> 677</span> m_cond.notify_all();</div>
<div class="line"><a id="l00678" name="l00678"></a><span class="lineno"> 678</span> <span class="keywordflow">return</span> fun(&amp;m_exit_code);</div>
<div class="line"><a id="l00679" name="l00679"></a><span class="lineno"> 679</span> };</div>
<div class="line"><a id="l00680" name="l00680"></a><span class="lineno"> 680</span> </div>
<div class="line"><a id="l00681" name="l00681"></a><span class="lineno"> 681</span> std::unique_lock&lt;std::mutex&gt; lock(m_mutex);</div>
<div class="line"><a id="l00682" name="l00682"></a><span class="lineno"> 682</span> m_future = std::async(std::launch::async, trampoline);</div>
<div class="line"><a id="l00683" name="l00683"></a><span class="lineno"> 683</span> m_cond.wait(lock);</div>
<div class="line"><a id="l00684" name="l00684"></a><span class="lineno"> 684</span> m_running = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00685" name="l00685"></a><span class="lineno"> 685</span>}</div>
<div class="line"><a id="l00686" name="l00686"></a><span class="lineno"> 686</span> </div>
<div class="line"><a id="l00687" name="l00687"></a><span class="lineno"> 687</span><span class="preprocessor">#elif __EMSCRIPTEN__</span></div>
<div class="line"><a id="l00688" name="l00688"></a><span class="lineno"> 688</span><span class="keyword">inline</span> <span class="keywordtype">void</span> internal::executor::start(<span class="keywordtype">int</span> exit_code) {</div>
<div class="line"><a id="l00689" name="l00689"></a><span class="lineno"> 689</span> m_exit_code = exit_code;</div>
<div class="line"><a id="l00690" name="l00690"></a><span class="lineno"> 690</span>}</div>
<div class="line"><a id="l00691" name="l00691"></a><span class="lineno"> 691</span> </div>
<div class="line"><a id="l00692" name="l00692"></a><span class="lineno"> 692</span><span class="preprocessor">#else</span></div>
<div class="foldopen" id="foldopen00693" data-start="{" data-end="}">
<div class="line"><a id="l00693" name="l00693"></a><span class="lineno"><a class="line" href="classpfd_1_1internal_1_1executor.html#adcb1fcd88381030ada3d8f6d07dd8d6e"> 693</a></span><span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classpfd_1_1internal_1_1executor.html#adcb1fcd88381030ada3d8f6d07dd8d6e">internal::executor::start_process</a>(std::vector&lt;std::string&gt; <span class="keyword">const</span>&amp; command) {</div>
<div class="line"><a id="l00694" name="l00694"></a><span class="lineno"> 694</span> <a class="code hl_function" href="classpfd_1_1internal_1_1executor.html#a2e65a18556b3de93dafd6fabe3786277">stop</a>();</div>
<div class="line"><a id="l00695" name="l00695"></a><span class="lineno"> 695</span> <a class="code hl_variable" href="classpfd_1_1internal_1_1executor.html#a062c9dc73980cd66d334c945c9617d9d">m_stdout</a>.clear();</div>
<div class="line"><a id="l00696" name="l00696"></a><span class="lineno"> 696</span> <a class="code hl_variable" href="classpfd_1_1internal_1_1executor.html#ae93cd2a96d031923e697d5f85cc5dfe7">m_exit_code</a> = -1;</div>
<div class="line"><a id="l00697" name="l00697"></a><span class="lineno"> 697</span> </div>
<div class="line"><a id="l00698" name="l00698"></a><span class="lineno"> 698</span> <span class="keywordtype">int</span> <a class="code hl_variable" href="mixer_8c.html#a0a613175360865a14ac624eb0853773b">in</a>[2], <a class="code hl_variable" href="mixer_8c.html#a887e8bcff88c452ca816b051d2dfbf01">out</a>[2];</div>
<div class="line"><a id="l00699" name="l00699"></a><span class="lineno"> 699</span> <span class="keywordflow">if</span> (pipe(<a class="code hl_variable" href="mixer_8c.html#a0a613175360865a14ac624eb0853773b">in</a>) != 0 || pipe(<a class="code hl_variable" href="mixer_8c.html#a887e8bcff88c452ca816b051d2dfbf01">out</a>) != 0)</div>
<div class="line"><a id="l00700" name="l00700"></a><span class="lineno"> 700</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00701" name="l00701"></a><span class="lineno"> 701</span> </div>
<div class="line"><a id="l00702" name="l00702"></a><span class="lineno"> 702</span> <a class="code hl_variable" href="classpfd_1_1internal_1_1executor.html#a7a164503ced150f7ad6c3e6084d4ff9b">m_pid</a> = fork();</div>
<div class="line"><a id="l00703" name="l00703"></a><span class="lineno"> 703</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classpfd_1_1internal_1_1executor.html#a7a164503ced150f7ad6c3e6084d4ff9b">m_pid</a> &lt; 0)</div>
<div class="line"><a id="l00704" name="l00704"></a><span class="lineno"> 704</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00705" name="l00705"></a><span class="lineno"> 705</span> </div>
<div class="line"><a id="l00706" name="l00706"></a><span class="lineno"> 706</span> close(<a class="code hl_variable" href="mixer_8c.html#a0a613175360865a14ac624eb0853773b">in</a>[<a class="code hl_variable" href="classpfd_1_1internal_1_1executor.html#a7a164503ced150f7ad6c3e6084d4ff9b">m_pid</a> ? 0 : 1]);</div>
<div class="line"><a id="l00707" name="l00707"></a><span class="lineno"> 707</span> close(<a class="code hl_variable" href="mixer_8c.html#a887e8bcff88c452ca816b051d2dfbf01">out</a>[<a class="code hl_variable" href="classpfd_1_1internal_1_1executor.html#a7a164503ced150f7ad6c3e6084d4ff9b">m_pid</a> ? 1 : 0]);</div>
<div class="line"><a id="l00708" name="l00708"></a><span class="lineno"> 708</span> </div>
<div class="line"><a id="l00709" name="l00709"></a><span class="lineno"> 709</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classpfd_1_1internal_1_1executor.html#a7a164503ced150f7ad6c3e6084d4ff9b">m_pid</a> == 0) {</div>
<div class="line"><a id="l00710" name="l00710"></a><span class="lineno"> 710</span> dup2(<a class="code hl_variable" href="mixer_8c.html#a0a613175360865a14ac624eb0853773b">in</a>[0], STDIN_FILENO);</div>
<div class="line"><a id="l00711" name="l00711"></a><span class="lineno"> 711</span> dup2(<a class="code hl_variable" href="mixer_8c.html#a887e8bcff88c452ca816b051d2dfbf01">out</a>[1], STDOUT_FILENO);</div>
<div class="line"><a id="l00712" name="l00712"></a><span class="lineno"> 712</span> </div>
<div class="line"><a id="l00713" name="l00713"></a><span class="lineno"> 713</span> <span class="comment">// Ignore stderr so that it doesnt pollute the console (e.g. GTK+ errors from zenity)</span></div>
<div class="line"><a id="l00714" name="l00714"></a><span class="lineno"> 714</span> <span class="keywordtype">int</span> fd = open(<span class="stringliteral">&quot;/dev/null&quot;</span>, O_WRONLY);</div>
<div class="line"><a id="l00715" name="l00715"></a><span class="lineno"> 715</span> dup2(fd, STDERR_FILENO);</div>
<div class="line"><a id="l00716" name="l00716"></a><span class="lineno"> 716</span> close(fd);</div>
<div class="line"><a id="l00717" name="l00717"></a><span class="lineno"> 717</span> </div>
<div class="line"><a id="l00718" name="l00718"></a><span class="lineno"> 718</span> std::vector&lt;char*&gt; args;</div>
<div class="line"><a id="l00719" name="l00719"></a><span class="lineno"> 719</span> std::transform(command.cbegin(), command.cend(), std::back_inserter(args),</div>
<div class="line"><a id="l00720" name="l00720"></a><span class="lineno"> 720</span> [](std::string <span class="keyword">const</span>&amp; s) { return const_cast&lt;char*&gt;(s.c_str()); });</div>
<div class="line"><a id="l00721" name="l00721"></a><span class="lineno"> 721</span> args.push_back(<span class="keyword">nullptr</span>); <span class="comment">// null-terminate argv[]</span></div>
<div class="line"><a id="l00722" name="l00722"></a><span class="lineno"> 722</span> </div>
<div class="line"><a id="l00723" name="l00723"></a><span class="lineno"> 723</span> execvp(args[0], args.data());</div>
<div class="line"><a id="l00724" name="l00724"></a><span class="lineno"> 724</span> exit(1);</div>
<div class="line"><a id="l00725" name="l00725"></a><span class="lineno"> 725</span> }</div>
<div class="line"><a id="l00726" name="l00726"></a><span class="lineno"> 726</span> </div>
<div class="line"><a id="l00727" name="l00727"></a><span class="lineno"> 727</span> close(<a class="code hl_variable" href="mixer_8c.html#a0a613175360865a14ac624eb0853773b">in</a>[1]);</div>
<div class="line"><a id="l00728" name="l00728"></a><span class="lineno"> 728</span> <a class="code hl_variable" href="classpfd_1_1internal_1_1executor.html#a2730c595c2994a227d46aa6b74b95987">m_fd</a> = <a class="code hl_variable" href="mixer_8c.html#a887e8bcff88c452ca816b051d2dfbf01">out</a>[0];</div>
<div class="line"><a id="l00729" name="l00729"></a><span class="lineno"> 729</span> <span class="keyword">auto</span> flags = fcntl(<a class="code hl_variable" href="classpfd_1_1internal_1_1executor.html#a2730c595c2994a227d46aa6b74b95987">m_fd</a>, F_GETFL);</div>
<div class="line"><a id="l00730" name="l00730"></a><span class="lineno"> 730</span> fcntl(<a class="code hl_variable" href="classpfd_1_1internal_1_1executor.html#a2730c595c2994a227d46aa6b74b95987">m_fd</a>, F_SETFL, flags | O_NONBLOCK);</div>
<div class="line"><a id="l00731" name="l00731"></a><span class="lineno"> 731</span> </div>
<div class="line"><a id="l00732" name="l00732"></a><span class="lineno"> 732</span> <a class="code hl_variable" href="classpfd_1_1internal_1_1executor.html#a70760965e1179f84aee59abd92c7129e">m_running</a> = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00733" name="l00733"></a><span class="lineno"> 733</span>}</div>
</div>
<div class="line"><a id="l00734" name="l00734"></a><span class="lineno"> 734</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00735" name="l00735"></a><span class="lineno"> 735</span> </div>
<div class="foldopen" id="foldopen00736" data-start="{" data-end="}">
<div class="line"><a id="l00736" name="l00736"></a><span class="lineno"><a class="line" href="classpfd_1_1internal_1_1executor.html#a2d46b9964c60985ea8406c4092393be3"> 736</a></span><span class="keyword">inline</span> <a class="code hl_function" href="classpfd_1_1internal_1_1executor.html#a2d46b9964c60985ea8406c4092393be3">internal::executor::~executor</a>() {</div>
<div class="line"><a id="l00737" name="l00737"></a><span class="lineno"> 737</span> <a class="code hl_function" href="classpfd_1_1internal_1_1executor.html#a2e65a18556b3de93dafd6fabe3786277">stop</a>();</div>
<div class="line"><a id="l00738" name="l00738"></a><span class="lineno"> 738</span>}</div>
</div>
<div class="line"><a id="l00739" name="l00739"></a><span class="lineno"> 739</span> </div>
<div class="foldopen" id="foldopen00740" data-start="{" data-end="}">
<div class="line"><a id="l00740" name="l00740"></a><span class="lineno"><a class="line" href="classpfd_1_1internal_1_1executor.html#a7eb363f3dc9d6dc21f1a8b6ce6a33679"> 740</a></span><span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classpfd_1_1internal_1_1executor.html#a7eb363f3dc9d6dc21f1a8b6ce6a33679">internal::executor::ready</a>(<span class="keywordtype">int</span> timeout <span class="comment">/* = default_wait_timeout */</span>) {</div>
<div class="line"><a id="l00741" name="l00741"></a><span class="lineno"> 741</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="classpfd_1_1internal_1_1executor.html#a70760965e1179f84aee59abd92c7129e">m_running</a>)</div>
<div class="line"><a id="l00742" name="l00742"></a><span class="lineno"> 742</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00743" name="l00743"></a><span class="lineno"> 743</span> </div>
<div class="line"><a id="l00744" name="l00744"></a><span class="lineno"> 744</span><span class="preprocessor">#if _WIN32</span></div>
<div class="line"><a id="l00745" name="l00745"></a><span class="lineno"> 745</span> <span class="keywordflow">if</span> (m_future.valid()) {</div>
<div class="line"><a id="l00746" name="l00746"></a><span class="lineno"> 746</span> <span class="keyword">auto</span> status = m_future.wait_for(std::chrono::milliseconds(timeout));</div>
<div class="line"><a id="l00747" name="l00747"></a><span class="lineno"> 747</span> <span class="keywordflow">if</span> (status != std::future_status::ready) {</div>
<div class="line"><a id="l00748" name="l00748"></a><span class="lineno"> 748</span> <span class="comment">// On Windows, we need to run the message pump. If the async</span></div>
<div class="line"><a id="l00749" name="l00749"></a><span class="lineno"> 749</span> <span class="comment">// thread uses a Windows API dialog, it may be attached to the</span></div>
<div class="line"><a id="l00750" name="l00750"></a><span class="lineno"> 750</span> <span class="comment">// main thread and waiting for messages that only we can dispatch.</span></div>
<div class="line"><a id="l00751" name="l00751"></a><span class="lineno"> 751</span> MSG msg;</div>
<div class="line"><a id="l00752" name="l00752"></a><span class="lineno"> 752</span> <span class="keywordflow">while</span> (PeekMessage(&amp;msg, <span class="keyword">nullptr</span>, 0, 0, PM_REMOVE)) {</div>
<div class="line"><a id="l00753" name="l00753"></a><span class="lineno"> 753</span> TranslateMessage(&amp;msg);</div>
<div class="line"><a id="l00754" name="l00754"></a><span class="lineno"> 754</span> DispatchMessage(&amp;msg);</div>
<div class="line"><a id="l00755" name="l00755"></a><span class="lineno"> 755</span> }</div>
<div class="line"><a id="l00756" name="l00756"></a><span class="lineno"> 756</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00757" name="l00757"></a><span class="lineno"> 757</span> }</div>
<div class="line"><a id="l00758" name="l00758"></a><span class="lineno"> 758</span> </div>
<div class="line"><a id="l00759" name="l00759"></a><span class="lineno"> 759</span> <a class="code hl_variable" href="classpfd_1_1internal_1_1executor.html#a062c9dc73980cd66d334c945c9617d9d">m_stdout</a> = m_future.get();</div>
<div class="line"><a id="l00760" name="l00760"></a><span class="lineno"> 760</span> }</div>
<div class="line"><a id="l00761" name="l00761"></a><span class="lineno"> 761</span><span class="preprocessor">#elif __EMSCRIPTEN__ || __NX__</span></div>
<div class="line"><a id="l00762" name="l00762"></a><span class="lineno"> 762</span> <span class="comment">// FIXME: do something</span></div>
<div class="line"><a id="l00763" name="l00763"></a><span class="lineno"> 763</span> (void)timeout;</div>
<div class="line"><a id="l00764" name="l00764"></a><span class="lineno"> 764</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00765" name="l00765"></a><span class="lineno"> 765</span> <span class="keywordtype">char</span> <a class="code hl_variable" href="mixer_8c.html#a9b37ed65df7c33390f588701de90ae1b">buf</a>[BUFSIZ];</div>
<div class="line"><a id="l00766" name="l00766"></a><span class="lineno"> 766</span> ssize_t received = read(<a class="code hl_variable" href="classpfd_1_1internal_1_1executor.html#a2730c595c2994a227d46aa6b74b95987">m_fd</a>, <a class="code hl_variable" href="mixer_8c.html#a9b37ed65df7c33390f588701de90ae1b">buf</a>, BUFSIZ); <span class="comment">// Flawfinder: ignore</span></div>
<div class="line"><a id="l00767" name="l00767"></a><span class="lineno"> 767</span> <span class="keywordflow">if</span> (received &gt; 0) {</div>
<div class="line"><a id="l00768" name="l00768"></a><span class="lineno"> 768</span> <a class="code hl_variable" href="classpfd_1_1internal_1_1executor.html#a062c9dc73980cd66d334c945c9617d9d">m_stdout</a> += std::string(<a class="code hl_variable" href="mixer_8c.html#a9b37ed65df7c33390f588701de90ae1b">buf</a>, received);</div>
<div class="line"><a id="l00769" name="l00769"></a><span class="lineno"> 769</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00770" name="l00770"></a><span class="lineno"> 770</span> }</div>
<div class="line"><a id="l00771" name="l00771"></a><span class="lineno"> 771</span> </div>
<div class="line"><a id="l00772" name="l00772"></a><span class="lineno"> 772</span> <span class="comment">// Reap child process if it is dead. It is possible that the system has already reaped it</span></div>
<div class="line"><a id="l00773" name="l00773"></a><span class="lineno"> 773</span> <span class="comment">// (this happens when the calling application handles or ignores SIG_CHLD) and results in</span></div>
<div class="line"><a id="l00774" name="l00774"></a><span class="lineno"> 774</span> <span class="comment">// waitpid() failing with ECHILD. Otherwise we assume the child is running and we sleep for</span></div>
<div class="line"><a id="l00775" name="l00775"></a><span class="lineno"> 775</span> <span class="comment">// a little while.</span></div>
<div class="line"><a id="l00776" name="l00776"></a><span class="lineno"> 776</span> <span class="keywordtype">int</span> status;</div>
<div class="line"><a id="l00777" name="l00777"></a><span class="lineno"> 777</span> pid_t child = waitpid(<a class="code hl_variable" href="classpfd_1_1internal_1_1executor.html#a7a164503ced150f7ad6c3e6084d4ff9b">m_pid</a>, &amp;status, WNOHANG);</div>
<div class="line"><a id="l00778" name="l00778"></a><span class="lineno"> 778</span> <span class="keywordflow">if</span> (child != <a class="code hl_variable" href="classpfd_1_1internal_1_1executor.html#a7a164503ced150f7ad6c3e6084d4ff9b">m_pid</a> &amp;&amp; (child &gt;= 0 || errno != ECHILD)) {</div>
<div class="line"><a id="l00779" name="l00779"></a><span class="lineno"> 779</span> <span class="comment">// FIXME: this happens almost always at first iteration</span></div>
<div class="line"><a id="l00780" name="l00780"></a><span class="lineno"> 780</span> std::this_thread::sleep_for(std::chrono::milliseconds(timeout));</div>
<div class="line"><a id="l00781" name="l00781"></a><span class="lineno"> 781</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00782" name="l00782"></a><span class="lineno"> 782</span> }</div>
<div class="line"><a id="l00783" name="l00783"></a><span class="lineno"> 783</span> </div>
<div class="line"><a id="l00784" name="l00784"></a><span class="lineno"> 784</span> close(<a class="code hl_variable" href="classpfd_1_1internal_1_1executor.html#a2730c595c2994a227d46aa6b74b95987">m_fd</a>);</div>
<div class="line"><a id="l00785" name="l00785"></a><span class="lineno"> 785</span> <a class="code hl_variable" href="classpfd_1_1internal_1_1executor.html#ae93cd2a96d031923e697d5f85cc5dfe7">m_exit_code</a> = WEXITSTATUS(status);</div>
<div class="line"><a id="l00786" name="l00786"></a><span class="lineno"> 786</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00787" name="l00787"></a><span class="lineno"> 787</span> </div>
<div class="line"><a id="l00788" name="l00788"></a><span class="lineno"> 788</span> <a class="code hl_variable" href="classpfd_1_1internal_1_1executor.html#a70760965e1179f84aee59abd92c7129e">m_running</a> = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00789" name="l00789"></a><span class="lineno"> 789</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00790" name="l00790"></a><span class="lineno"> 790</span>}</div>
</div>
<div class="line"><a id="l00791" name="l00791"></a><span class="lineno"> 791</span> </div>
<div class="foldopen" id="foldopen00792" data-start="{" data-end="}">
<div class="line"><a id="l00792" name="l00792"></a><span class="lineno"><a class="line" href="classpfd_1_1internal_1_1executor.html#a2e65a18556b3de93dafd6fabe3786277"> 792</a></span><span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classpfd_1_1internal_1_1executor.html#a2e65a18556b3de93dafd6fabe3786277">internal::executor::stop</a>() {</div>
<div class="line"><a id="l00793" name="l00793"></a><span class="lineno"> 793</span> <span class="comment">// Loop until the user closes the dialog</span></div>
<div class="line"><a id="l00794" name="l00794"></a><span class="lineno"> 794</span> <span class="keywordflow">while</span> (!<a class="code hl_function" href="classpfd_1_1internal_1_1executor.html#a7eb363f3dc9d6dc21f1a8b6ce6a33679">ready</a>())</div>
<div class="line"><a id="l00795" name="l00795"></a><span class="lineno"> 795</span> ;</div>
<div class="line"><a id="l00796" name="l00796"></a><span class="lineno"> 796</span>}</div>
</div>
<div class="line"><a id="l00797" name="l00797"></a><span class="lineno"> 797</span> </div>
<div class="line"><a id="l00798" name="l00798"></a><span class="lineno"> 798</span><span class="comment">// dll implementation</span></div>
<div class="line"><a id="l00799" name="l00799"></a><span class="lineno"> 799</span> </div>
<div class="line"><a id="l00800" name="l00800"></a><span class="lineno"> 800</span><span class="preprocessor">#if _WIN32</span></div>
<div class="line"><a id="l00801" name="l00801"></a><span class="lineno"> 801</span><span class="keyword">inline</span> internal::platform::dll::dll(std::string <span class="keyword">const</span>&amp; name) : handle(::LoadLibraryA(name.c_str())) {</div>
<div class="line"><a id="l00802" name="l00802"></a><span class="lineno"> 802</span>}</div>
<div class="line"><a id="l00803" name="l00803"></a><span class="lineno"> 803</span> </div>
<div class="line"><a id="l00804" name="l00804"></a><span class="lineno"> 804</span><span class="keyword">inline</span> internal::platform::dll::~dll() {</div>
<div class="line"><a id="l00805" name="l00805"></a><span class="lineno"> 805</span> <span class="keywordflow">if</span> (handle)</div>
<div class="line"><a id="l00806" name="l00806"></a><span class="lineno"> 806</span> ::FreeLibrary(handle);</div>
<div class="line"><a id="l00807" name="l00807"></a><span class="lineno"> 807</span>}</div>
<div class="line"><a id="l00808" name="l00808"></a><span class="lineno"> 808</span><span class="preprocessor">#endif </span><span class="comment">// _WIN32</span></div>
<div class="line"><a id="l00809" name="l00809"></a><span class="lineno"> 809</span> </div>
<div class="line"><a id="l00810" name="l00810"></a><span class="lineno"> 810</span><span class="comment">// ole32_dll implementation</span></div>
<div class="line"><a id="l00811" name="l00811"></a><span class="lineno"> 811</span> </div>
<div class="line"><a id="l00812" name="l00812"></a><span class="lineno"> 812</span><span class="preprocessor">#if _WIN32</span></div>
<div class="line"><a id="l00813" name="l00813"></a><span class="lineno"> 813</span><span class="keyword">inline</span> internal::platform::ole32_dll::ole32_dll() : dll(<span class="stringliteral">&quot;ole32.dll&quot;</span>) {</div>
<div class="line"><a id="l00814" name="l00814"></a><span class="lineno"> 814</span> <span class="comment">// Use COINIT_MULTITHREADED because COINIT_APARTMENTTHREADED causes crashes.</span></div>
<div class="line"><a id="l00815" name="l00815"></a><span class="lineno"> 815</span> <span class="comment">// See https://github.com/samhocevar/portable-file-dialogs/issues/51</span></div>
<div class="line"><a id="l00816" name="l00816"></a><span class="lineno"> 816</span> <span class="keyword">auto</span> coinit = proc&lt;HRESULT WINAPI(LPVOID, DWORD)&gt;(*<span class="keyword">this</span>, <span class="stringliteral">&quot;CoInitializeEx&quot;</span>);</div>
<div class="line"><a id="l00817" name="l00817"></a><span class="lineno"> 817</span> m_state = coinit(<span class="keyword">nullptr</span>, COINIT_MULTITHREADED);</div>
<div class="line"><a id="l00818" name="l00818"></a><span class="lineno"> 818</span>}</div>
<div class="line"><a id="l00819" name="l00819"></a><span class="lineno"> 819</span> </div>
<div class="line"><a id="l00820" name="l00820"></a><span class="lineno"> 820</span><span class="keyword">inline</span> internal::platform::ole32_dll::~ole32_dll() {</div>
<div class="line"><a id="l00821" name="l00821"></a><span class="lineno"> 821</span> <span class="keywordflow">if</span> (is_initialized())</div>
<div class="line"><a id="l00822" name="l00822"></a><span class="lineno"> 822</span> proc&lt;void WINAPI()&gt;(*<span class="keyword">this</span>, <span class="stringliteral">&quot;CoUninitialize&quot;</span>)();</div>
<div class="line"><a id="l00823" name="l00823"></a><span class="lineno"> 823</span>}</div>
<div class="line"><a id="l00824" name="l00824"></a><span class="lineno"> 824</span> </div>
<div class="line"><a id="l00825" name="l00825"></a><span class="lineno"> 825</span><span class="keyword">inline</span> <span class="keywordtype">bool</span> internal::platform::ole32_dll::is_initialized() {</div>
<div class="line"><a id="l00826" name="l00826"></a><span class="lineno"> 826</span> <span class="keywordflow">return</span> m_state == S_OK || m_state == S_FALSE;</div>
<div class="line"><a id="l00827" name="l00827"></a><span class="lineno"> 827</span>}</div>
<div class="line"><a id="l00828" name="l00828"></a><span class="lineno"> 828</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00829" name="l00829"></a><span class="lineno"> 829</span> </div>
<div class="line"><a id="l00830" name="l00830"></a><span class="lineno"> 830</span><span class="comment">// new_style_context implementation</span></div>
<div class="line"><a id="l00831" name="l00831"></a><span class="lineno"> 831</span> </div>
<div class="line"><a id="l00832" name="l00832"></a><span class="lineno"> 832</span><span class="preprocessor">#if _WIN32</span></div>
<div class="line"><a id="l00833" name="l00833"></a><span class="lineno"> 833</span><span class="keyword">inline</span> internal::platform::new_style_context::new_style_context() {</div>
<div class="line"><a id="l00834" name="l00834"></a><span class="lineno"> 834</span> <span class="comment">// Only create one activation context for the whole app lifetime.</span></div>
<div class="line"><a id="l00835" name="l00835"></a><span class="lineno"> 835</span> <span class="keyword">static</span> HANDLE hctx = create();</div>
<div class="line"><a id="l00836" name="l00836"></a><span class="lineno"> 836</span> </div>
<div class="line"><a id="l00837" name="l00837"></a><span class="lineno"> 837</span> <span class="keywordflow">if</span> (hctx != INVALID_HANDLE_VALUE)</div>
<div class="line"><a id="l00838" name="l00838"></a><span class="lineno"> 838</span> ActivateActCtx(hctx, &amp;m_cookie);</div>
<div class="line"><a id="l00839" name="l00839"></a><span class="lineno"> 839</span>}</div>
<div class="line"><a id="l00840" name="l00840"></a><span class="lineno"> 840</span> </div>
<div class="line"><a id="l00841" name="l00841"></a><span class="lineno"> 841</span><span class="keyword">inline</span> internal::platform::new_style_context::~new_style_context() {</div>
<div class="line"><a id="l00842" name="l00842"></a><span class="lineno"> 842</span> DeactivateActCtx(0, m_cookie);</div>
<div class="line"><a id="l00843" name="l00843"></a><span class="lineno"> 843</span>}</div>
<div class="line"><a id="l00844" name="l00844"></a><span class="lineno"> 844</span> </div>
<div class="line"><a id="l00845" name="l00845"></a><span class="lineno"> 845</span><span class="keyword">inline</span> HANDLE internal::platform::new_style_context::create() {</div>
<div class="line"><a id="l00846" name="l00846"></a><span class="lineno"> 846</span> <span class="comment">// This “hack” seems to be necessary for this code to work on windows XP.</span></div>
<div class="line"><a id="l00847" name="l00847"></a><span class="lineno"> 847</span> <span class="comment">// Without it, dialogs do not show and close immediately. GetError()</span></div>
<div class="line"><a id="l00848" name="l00848"></a><span class="lineno"> 848</span> <span class="comment">// returns 0 so I dont know what causes this. I was not able to reproduce</span></div>
<div class="line"><a id="l00849" name="l00849"></a><span class="lineno"> 849</span> <span class="comment">// this behavior on Windows 7 and 10 but just in case, let it be here for</span></div>
<div class="line"><a id="l00850" name="l00850"></a><span class="lineno"> 850</span> <span class="comment">// those versions too.</span></div>
<div class="line"><a id="l00851" name="l00851"></a><span class="lineno"> 851</span> <span class="comment">// This hack is not required if other dialogs are used (they load comdlg32</span></div>
<div class="line"><a id="l00852" name="l00852"></a><span class="lineno"> 852</span> <span class="comment">// automatically), only if message boxes are used.</span></div>
<div class="line"><a id="l00853" name="l00853"></a><span class="lineno"> 853</span> dll comdlg32(<span class="stringliteral">&quot;comdlg32.dll&quot;</span>);</div>
<div class="line"><a id="l00854" name="l00854"></a><span class="lineno"> 854</span> </div>
<div class="line"><a id="l00855" name="l00855"></a><span class="lineno"> 855</span> <span class="comment">// Using approach as shown here: https://stackoverflow.com/a/10444161</span></div>
<div class="line"><a id="l00856" name="l00856"></a><span class="lineno"> 856</span> UINT len = ::GetSystemDirectoryA(<span class="keyword">nullptr</span>, 0);</div>
<div class="line"><a id="l00857" name="l00857"></a><span class="lineno"> 857</span> std::string sys_dir(len, <span class="charliteral">&#39;\0&#39;</span>);</div>
<div class="line"><a id="l00858" name="l00858"></a><span class="lineno"> 858</span> ::GetSystemDirectoryA(&amp;sys_dir[0], len);</div>
<div class="line"><a id="l00859" name="l00859"></a><span class="lineno"> 859</span> </div>
<div class="line"><a id="l00860" name="l00860"></a><span class="lineno"> 860</span> ACTCTXA act_ctx = {</div>
<div class="line"><a id="l00861" name="l00861"></a><span class="lineno"> 861</span> <span class="comment">// Do not set flag ACTCTX_FLAG_SET_PROCESS_DEFAULT, since it causes a</span></div>
<div class="line"><a id="l00862" name="l00862"></a><span class="lineno"> 862</span> <span class="comment">// crash with error “default context is already set”.</span></div>
<div class="line"><a id="l00863" name="l00863"></a><span class="lineno"> 863</span> <span class="keyword">sizeof</span>(act_ctx),</div>
<div class="line"><a id="l00864" name="l00864"></a><span class="lineno"> 864</span> ACTCTX_FLAG_RESOURCE_NAME_VALID | ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID,</div>
<div class="line"><a id="l00865" name="l00865"></a><span class="lineno"> 865</span> <span class="stringliteral">&quot;shell32.dll&quot;</span>,</div>
<div class="line"><a id="l00866" name="l00866"></a><span class="lineno"> 866</span> 0,</div>
<div class="line"><a id="l00867" name="l00867"></a><span class="lineno"> 867</span> 0,</div>
<div class="line"><a id="l00868" name="l00868"></a><span class="lineno"> 868</span> sys_dir.c_str(),</div>
<div class="line"><a id="l00869" name="l00869"></a><span class="lineno"> 869</span> (LPCSTR)124,</div>
<div class="line"><a id="l00870" name="l00870"></a><span class="lineno"> 870</span> <span class="keyword">nullptr</span>,</div>
<div class="line"><a id="l00871" name="l00871"></a><span class="lineno"> 871</span> 0,</div>
<div class="line"><a id="l00872" name="l00872"></a><span class="lineno"> 872</span> };</div>
<div class="line"><a id="l00873" name="l00873"></a><span class="lineno"> 873</span> </div>
<div class="line"><a id="l00874" name="l00874"></a><span class="lineno"> 874</span> return ::CreateActCtxA(&amp;act_ctx);</div>
<div class="line"><a id="l00875" name="l00875"></a><span class="lineno"> 875</span>}</div>
<div class="line"><a id="l00876" name="l00876"></a><span class="lineno"> 876</span><span class="preprocessor">#endif </span><span class="comment">// _WIN32</span></div>
<div class="line"><a id="l00877" name="l00877"></a><span class="lineno"> 877</span> </div>
<div class="line"><a id="l00878" name="l00878"></a><span class="lineno"> 878</span><span class="comment">// dialog implementation</span></div>
<div class="line"><a id="l00879" name="l00879"></a><span class="lineno"> 879</span> </div>
<div class="foldopen" id="foldopen00880" data-start="{" data-end="}">
<div class="line"><a id="l00880" name="l00880"></a><span class="lineno"><a class="line" href="classpfd_1_1internal_1_1dialog.html#a77f20e6063f83e601ce23ed4899907c6"> 880</a></span><span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classpfd_1_1internal_1_1dialog.html#a77f20e6063f83e601ce23ed4899907c6">internal::dialog::ready</a>(<span class="keywordtype">int</span> timeout <span class="comment">/* = default_wait_timeout */</span>)<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00881" name="l00881"></a><span class="lineno"> 881</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="classpfd_1_1internal_1_1dialog.html#a91f4b2666fb920a7859df9cdc079502d">m_async</a>-&gt;ready(timeout);</div>
<div class="line"><a id="l00882" name="l00882"></a><span class="lineno"> 882</span>}</div>
</div>
<div class="line"><a id="l00883" name="l00883"></a><span class="lineno"> 883</span> </div>
<div class="foldopen" id="foldopen00884" data-start="{" data-end="}">
<div class="line"><a id="l00884" name="l00884"></a><span class="lineno"><a class="line" href="classpfd_1_1internal_1_1dialog.html#a226b1502acd1d2cb86e34dd3df36772a"> 884</a></span><span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classpfd_1_1internal_1_1dialog.html#a226b1502acd1d2cb86e34dd3df36772a">internal::dialog::kill</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00885" name="l00885"></a><span class="lineno"> 885</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="classpfd_1_1internal_1_1dialog.html#a91f4b2666fb920a7859df9cdc079502d">m_async</a>-&gt;kill();</div>
<div class="line"><a id="l00886" name="l00886"></a><span class="lineno"> 886</span>}</div>
</div>
<div class="line"><a id="l00887" name="l00887"></a><span class="lineno"> 887</span> </div>
<div class="foldopen" id="foldopen00888" data-start="{" data-end="}">
<div class="line"><a id="l00888" name="l00888"></a><span class="lineno"><a class="line" href="classpfd_1_1internal_1_1dialog.html#a05f9a4fcba8f8a9411d7dfaf18ee11ad"> 888</a></span><span class="keyword">inline</span> <a class="code hl_function" href="classpfd_1_1internal_1_1dialog.html#a05f9a4fcba8f8a9411d7dfaf18ee11ad">internal::dialog::dialog</a>() : <a class="code hl_variable" href="classpfd_1_1internal_1_1dialog.html#a91f4b2666fb920a7859df9cdc079502d">m_async</a>(std::make_shared&lt;<a class="code hl_class" href="classpfd_1_1internal_1_1executor.html">executor</a>&gt;()) {</div>
<div class="line"><a id="l00889" name="l00889"></a><span class="lineno"> 889</span>}</div>
</div>
<div class="line"><a id="l00890" name="l00890"></a><span class="lineno"> 890</span> </div>
<div class="foldopen" id="foldopen00891" data-start="{" data-end="}">
<div class="line"><a id="l00891" name="l00891"></a><span class="lineno"><a class="line" href="classpfd_1_1internal_1_1dialog.html#aadaf6cb30620c85f4b97993e3c819188"> 891</a></span><span class="keyword">inline</span> std::vector&lt;std::string&gt; <a class="code hl_function" href="classpfd_1_1internal_1_1dialog.html#aadaf6cb30620c85f4b97993e3c819188">internal::dialog::desktop_helper</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00892" name="l00892"></a><span class="lineno"> 892</span><span class="preprocessor">#if __APPLE__</span></div>
<div class="line"><a id="l00893" name="l00893"></a><span class="lineno"> 893</span> <span class="keywordflow">return</span> { <span class="stringliteral">&quot;osascript&quot;</span> };</div>
<div class="line"><a id="l00894" name="l00894"></a><span class="lineno"> 894</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00895" name="l00895"></a><span class="lineno"> 895</span> <span class="keywordflow">return</span> { <a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">flags</a>(<a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aadaee57842698a0690e4b89730b469edc31">flag::has_zenity</a>) ? <span class="stringliteral">&quot;zenity&quot;</span></div>
<div class="line"><a id="l00896" name="l00896"></a><span class="lineno"> 896</span> : <a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">flags</a>(<a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aada1267dfaf66b51761e04b042bb2c4dd7a">flag::has_matedialog</a>) ? <span class="stringliteral">&quot;matedialog&quot;</span></div>
<div class="line"><a id="l00897" name="l00897"></a><span class="lineno"> 897</span> : <a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">flags</a>(<a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aada1a652e3d6a785053942b6cffc2c4669d">flag::has_qarma</a>) ? <span class="stringliteral">&quot;qarma&quot;</span></div>
<div class="line"><a id="l00898" name="l00898"></a><span class="lineno"> 898</span> : <a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">flags</a>(<a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aada1f1a19f0bf1fe1a63ed3e73e40466b4b">flag::has_kdialog</a>) ? <span class="stringliteral">&quot;kdialog&quot;</span></div>
<div class="line"><a id="l00899" name="l00899"></a><span class="lineno"> 899</span> : <span class="stringliteral">&quot;echo&quot;</span> };</div>
<div class="line"><a id="l00900" name="l00900"></a><span class="lineno"> 900</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00901" name="l00901"></a><span class="lineno"> 901</span>}</div>
</div>
<div class="line"><a id="l00902" name="l00902"></a><span class="lineno"> 902</span> </div>
<div class="foldopen" id="foldopen00903" data-start="{" data-end="}">
<div class="line"><a id="l00903" name="l00903"></a><span class="lineno"><a class="line" href="classpfd_1_1internal_1_1dialog.html#ac906c01d0365c13c9066cea857fd258a"> 903</a></span><span class="keyword">inline</span> std::string <a class="code hl_function" href="classpfd_1_1internal_1_1dialog.html#ac906c01d0365c13c9066cea857fd258a">internal::dialog::buttons_to_name</a>(<a class="code hl_enumeration" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8">choice</a> _choice) {</div>
<div class="line"><a id="l00904" name="l00904"></a><span class="lineno"> 904</span> <span class="keywordflow">switch</span> (_choice) {</div>
<div class="line"><a id="l00905" name="l00905"></a><span class="lineno"> 905</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a809da5df9c86c6426c8d8db2934d3f51">choice::ok_cancel</a>:</div>
<div class="line"><a id="l00906" name="l00906"></a><span class="lineno"> 906</span> <span class="keywordflow">return</span> <span class="stringliteral">&quot;okcancel&quot;</span>;</div>
<div class="line"><a id="l00907" name="l00907"></a><span class="lineno"> 907</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a20f0596c21ad67a7fda598ffc7d038d1">choice::yes_no</a>:</div>
<div class="line"><a id="l00908" name="l00908"></a><span class="lineno"> 908</span> <span class="keywordflow">return</span> <span class="stringliteral">&quot;yesno&quot;</span>;</div>
<div class="line"><a id="l00909" name="l00909"></a><span class="lineno"> 909</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a5c5cb337bb234e240912dc139048038c">choice::yes_no_cancel</a>:</div>
<div class="line"><a id="l00910" name="l00910"></a><span class="lineno"> 910</span> <span class="keywordflow">return</span> <span class="stringliteral">&quot;yesnocancel&quot;</span>;</div>
<div class="line"><a id="l00911" name="l00911"></a><span class="lineno"> 911</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a7928e609b1665227bcb71b20d431fd6a">choice::retry_cancel</a>:</div>
<div class="line"><a id="l00912" name="l00912"></a><span class="lineno"> 912</span> <span class="keywordflow">return</span> <span class="stringliteral">&quot;retrycancel&quot;</span>;</div>
<div class="line"><a id="l00913" name="l00913"></a><span class="lineno"> 913</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a9df771aa8f010c4b928e42a8979d5609">choice::abort_retry_ignore</a>:</div>
<div class="line"><a id="l00914" name="l00914"></a><span class="lineno"> 914</span> <span class="keywordflow">return</span> <span class="stringliteral">&quot;abortretryignore&quot;</span>;</div>
<div class="line"><a id="l00915" name="l00915"></a><span class="lineno"> 915</span> <span class="comment">/* case choice::ok: */</span> <span class="keywordflow">default</span>:</div>
<div class="line"><a id="l00916" name="l00916"></a><span class="lineno"> 916</span> <span class="keywordflow">return</span> <span class="stringliteral">&quot;ok&quot;</span>;</div>
<div class="line"><a id="l00917" name="l00917"></a><span class="lineno"> 917</span> }</div>
<div class="line"><a id="l00918" name="l00918"></a><span class="lineno"> 918</span>}</div>
</div>
<div class="line"><a id="l00919" name="l00919"></a><span class="lineno"> 919</span> </div>
<div class="foldopen" id="foldopen00920" data-start="{" data-end="}">
<div class="line"><a id="l00920" name="l00920"></a><span class="lineno"><a class="line" href="classpfd_1_1internal_1_1dialog.html#ae94362bed052ab6050e38852712cb97a"> 920</a></span><span class="keyword">inline</span> std::string <a class="code hl_function" href="classpfd_1_1internal_1_1dialog.html#ae94362bed052ab6050e38852712cb97a">internal::dialog::get_icon_name</a>(<a class="code hl_enumeration" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85">icon</a> _icon) {</div>
<div class="line"><a id="l00921" name="l00921"></a><span class="lineno"> 921</span> <span class="keywordflow">switch</span> (_icon) {</div>
<div class="line"><a id="l00922" name="l00922"></a><span class="lineno"> 922</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85a7b83d3f08fa392b79e3f553b585971cd">icon::warning</a>:</div>
<div class="line"><a id="l00923" name="l00923"></a><span class="lineno"> 923</span> <span class="keywordflow">return</span> <span class="stringliteral">&quot;warning&quot;</span>;</div>
<div class="line"><a id="l00924" name="l00924"></a><span class="lineno"> 924</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85acb5e100e5a9a3e7f6d1fd97512215282">icon::error</a>:</div>
<div class="line"><a id="l00925" name="l00925"></a><span class="lineno"> 925</span> <span class="keywordflow">return</span> <span class="stringliteral">&quot;error&quot;</span>;</div>
<div class="line"><a id="l00926" name="l00926"></a><span class="lineno"> 926</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85a5494af1f14a8c19939968c3e9e2d4f79">icon::question</a>:</div>
<div class="line"><a id="l00927" name="l00927"></a><span class="lineno"> 927</span> <span class="keywordflow">return</span> <span class="stringliteral">&quot;question&quot;</span>;</div>
<div class="line"><a id="l00928" name="l00928"></a><span class="lineno"> 928</span> <span class="comment">// Zenity wants &quot;information&quot; but WinForms wants &quot;info&quot;</span></div>
<div class="line"><a id="l00929" name="l00929"></a><span class="lineno"> 929</span> <span class="comment">/* case icon::info: */</span> <span class="keywordflow">default</span>:</div>
<div class="line"><a id="l00930" name="l00930"></a><span class="lineno"> 930</span><span class="preprocessor">#if _WIN32</span></div>
<div class="line"><a id="l00931" name="l00931"></a><span class="lineno"> 931</span> <span class="keywordflow">return</span> <span class="stringliteral">&quot;info&quot;</span>;</div>
<div class="line"><a id="l00932" name="l00932"></a><span class="lineno"> 932</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00933" name="l00933"></a><span class="lineno"> 933</span> <span class="keywordflow">return</span> <span class="stringliteral">&quot;information&quot;</span>;</div>
<div class="line"><a id="l00934" name="l00934"></a><span class="lineno"> 934</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00935" name="l00935"></a><span class="lineno"> 935</span> }</div>
<div class="line"><a id="l00936" name="l00936"></a><span class="lineno"> 936</span>}</div>
</div>
<div class="line"><a id="l00937" name="l00937"></a><span class="lineno"> 937</span> </div>
<div class="line"><a id="l00938" name="l00938"></a><span class="lineno"> 938</span><span class="comment">// This is only used for debugging purposes</span></div>
<div class="foldopen" id="foldopen00939" data-start="{" data-end="}">
<div class="line"><a id="l00939" name="l00939"></a><span class="lineno"><a class="line" href="namespacepfd.html#acce315b273b2edaaeac0d8731f308ea9"> 939</a></span><span class="keyword">inline</span> std::ostream&amp; <a class="code hl_function" href="namespacepfd.html#acce315b273b2edaaeac0d8731f308ea9">operator&lt;&lt;</a>(std::ostream&amp; s, std::vector&lt;std::string&gt; <span class="keyword">const</span>&amp; v) {</div>
<div class="line"><a id="l00940" name="l00940"></a><span class="lineno"> 940</span> <span class="keywordtype">int</span> not_first = 0;</div>
<div class="line"><a id="l00941" name="l00941"></a><span class="lineno"> 941</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; e : v)</div>
<div class="line"><a id="l00942" name="l00942"></a><span class="lineno"> 942</span> s &lt;&lt; (not_first++ ? <span class="stringliteral">&quot; &quot;</span> : <span class="stringliteral">&quot;&quot;</span>) &lt;&lt; e;</div>
<div class="line"><a id="l00943" name="l00943"></a><span class="lineno"> 943</span> <span class="keywordflow">return</span> s;</div>
<div class="line"><a id="l00944" name="l00944"></a><span class="lineno"> 944</span>}</div>
</div>
<div class="line"><a id="l00945" name="l00945"></a><span class="lineno"> 945</span> </div>
<div class="line"><a id="l00946" name="l00946"></a><span class="lineno"> 946</span><span class="comment">// Properly quote a string for Powershell: replace &#39; or &quot; with &#39;&#39; or &quot;&quot;</span></div>
<div class="line"><a id="l00947" name="l00947"></a><span class="lineno"> 947</span><span class="comment">// FIXME: we should probably get rid of newlines!</span></div>
<div class="line"><a id="l00948" name="l00948"></a><span class="lineno"> 948</span><span class="comment">// FIXME: the \&quot; sequence seems unsafe, too!</span></div>
<div class="line"><a id="l00949" name="l00949"></a><span class="lineno"> 949</span><span class="comment">// XXX: this is no longer used but I would like to keep it around just in case</span></div>
<div class="foldopen" id="foldopen00950" data-start="{" data-end="}">
<div class="line"><a id="l00950" name="l00950"></a><span class="lineno"><a class="line" href="classpfd_1_1internal_1_1dialog.html#aae2255eceb0b3b18b55d1618fd7e1635"> 950</a></span><span class="keyword">inline</span> std::string <a class="code hl_function" href="classpfd_1_1internal_1_1dialog.html#aae2255eceb0b3b18b55d1618fd7e1635">internal::dialog::powershell_quote</a>(std::string <span class="keyword">const</span>&amp; str)<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00951" name="l00951"></a><span class="lineno"> 951</span> <span class="keywordflow">return</span> <span class="stringliteral">&quot;&#39;&quot;</span> + std::regex_replace(str, std::regex(<span class="stringliteral">&quot;[&#39;\&quot;]&quot;</span>), <span class="stringliteral">&quot;$&amp;$&amp;&quot;</span>) + <span class="stringliteral">&quot;&#39;&quot;</span>;</div>
<div class="line"><a id="l00952" name="l00952"></a><span class="lineno"> 952</span>}</div>
</div>
<div class="line"><a id="l00953" name="l00953"></a><span class="lineno"> 953</span> </div>
<div class="line"><a id="l00954" name="l00954"></a><span class="lineno"> 954</span><span class="comment">// Properly quote a string for osascript: replace \ or &quot; with \\ or \&quot;</span></div>
<div class="line"><a id="l00955" name="l00955"></a><span class="lineno"> 955</span><span class="comment">// XXX: this also used to replace &#39; with \&#39; when popen was used, but it would be</span></div>
<div class="line"><a id="l00956" name="l00956"></a><span class="lineno"> 956</span><span class="comment">// smarter to do shell_quote(osascript_quote(...)) if this is needed again.</span></div>
<div class="foldopen" id="foldopen00957" data-start="{" data-end="}">
<div class="line"><a id="l00957" name="l00957"></a><span class="lineno"><a class="line" href="classpfd_1_1internal_1_1dialog.html#adc0ec6f5c8137cbdb0ea6669b5263a73"> 957</a></span><span class="keyword">inline</span> std::string <a class="code hl_function" href="classpfd_1_1internal_1_1dialog.html#adc0ec6f5c8137cbdb0ea6669b5263a73">internal::dialog::osascript_quote</a>(std::string <span class="keyword">const</span>&amp; str)<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00958" name="l00958"></a><span class="lineno"> 958</span> <span class="keywordflow">return</span> <span class="stringliteral">&quot;\&quot;&quot;</span> + std::regex_replace(str, std::regex(<span class="stringliteral">&quot;[\\\\\&quot;]&quot;</span>), <span class="stringliteral">&quot;\\$&amp;&quot;</span>) + <span class="stringliteral">&quot;\&quot;&quot;</span>;</div>
<div class="line"><a id="l00959" name="l00959"></a><span class="lineno"> 959</span>}</div>
</div>
<div class="line"><a id="l00960" name="l00960"></a><span class="lineno"> 960</span> </div>
<div class="line"><a id="l00961" name="l00961"></a><span class="lineno"> 961</span><span class="comment">// Properly quote a string for the shell: just replace &#39; with &#39;\&#39;&#39;</span></div>
<div class="line"><a id="l00962" name="l00962"></a><span class="lineno"> 962</span><span class="comment">// XXX: this is no longer used but I would like to keep it around just in case</span></div>
<div class="foldopen" id="foldopen00963" data-start="{" data-end="}">
<div class="line"><a id="l00963" name="l00963"></a><span class="lineno"><a class="line" href="classpfd_1_1internal_1_1dialog.html#a1a4f28c3c2bbd1629f2f882314fff63e"> 963</a></span><span class="keyword">inline</span> std::string <a class="code hl_function" href="classpfd_1_1internal_1_1dialog.html#a1a4f28c3c2bbd1629f2f882314fff63e">internal::dialog::shell_quote</a>(std::string <span class="keyword">const</span>&amp; str)<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00964" name="l00964"></a><span class="lineno"> 964</span> <span class="keywordflow">return</span> <span class="stringliteral">&quot;&#39;&quot;</span> + std::regex_replace(str, std::regex(<span class="stringliteral">&quot;&#39;&quot;</span>), <span class="stringliteral">&quot;&#39;\\&#39;&#39;&quot;</span>) + <span class="stringliteral">&quot;&#39;&quot;</span>;</div>
<div class="line"><a id="l00965" name="l00965"></a><span class="lineno"> 965</span>}</div>
</div>
<div class="line"><a id="l00966" name="l00966"></a><span class="lineno"> 966</span> </div>
<div class="line"><a id="l00967" name="l00967"></a><span class="lineno"> 967</span><span class="comment">// file_dialog implementation</span></div>
<div class="line"><a id="l00968" name="l00968"></a><span class="lineno"> 968</span> </div>
<div class="foldopen" id="foldopen00969" data-start="{" data-end="}">
<div class="line"><a id="l00969" name="l00969"></a><span class="lineno"><a class="line" href="classpfd_1_1internal_1_1file__dialog.html#a16f53945e61d23aa9b7fc373701dd13f"> 969</a></span><span class="keyword">inline</span> <a class="code hl_function" href="classpfd_1_1internal_1_1file__dialog.html#a16f53945e61d23aa9b7fc373701dd13f">internal::file_dialog::file_dialog</a>(<a class="code hl_enumeration" href="classpfd_1_1internal_1_1file__dialog.html#a758847a3fab54bb12a67abbf9ea683fc">type</a> in_type, std::string <span class="keyword">const</span>&amp; title,</div>
<div class="line"><a id="l00970" name="l00970"></a><span class="lineno"> 970</span> std::string <span class="keyword">const</span>&amp; default_path <span class="comment">/* = &quot;&quot; */</span>,</div>
<div class="line"><a id="l00971" name="l00971"></a><span class="lineno"> 971</span> std::vector&lt;std::string&gt; <span class="keyword">const</span>&amp; <a class="code hl_variable" href="ImguiUI_8cpp.html#a5fdd69bc3222fb4c44d3252f0b4641e3">filters</a> <span class="comment">/* = {} */</span>,</div>
<div class="line"><a id="l00972" name="l00972"></a><span class="lineno"> 972</span> <a class="code hl_enumeration" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997">opt</a> options <span class="comment">/* = opt::none */</span>) {</div>
<div class="line"><a id="l00973" name="l00973"></a><span class="lineno"> 973</span><span class="preprocessor">#if _WIN32</span></div>
<div class="line"><a id="l00974" name="l00974"></a><span class="lineno"> 974</span> std::string filter_list;</div>
<div class="line"><a id="l00975" name="l00975"></a><span class="lineno"> 975</span> std::regex whitespace(<span class="stringliteral">&quot; *&quot;</span>);</div>
<div class="line"><a id="l00976" name="l00976"></a><span class="lineno"> 976</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i + 1 &lt; <a class="code hl_variable" href="ImguiUI_8cpp.html#a5fdd69bc3222fb4c44d3252f0b4641e3">filters</a>.size(); i += 2) {</div>
<div class="line"><a id="l00977" name="l00977"></a><span class="lineno"> 977</span> filter_list += <a class="code hl_variable" href="ImguiUI_8cpp.html#a5fdd69bc3222fb4c44d3252f0b4641e3">filters</a>[i] + <span class="charliteral">&#39;\0&#39;</span>;</div>
<div class="line"><a id="l00978" name="l00978"></a><span class="lineno"> 978</span> filter_list += std::regex_replace(<a class="code hl_variable" href="ImguiUI_8cpp.html#a5fdd69bc3222fb4c44d3252f0b4641e3">filters</a>[i + 1], whitespace, <span class="stringliteral">&quot;;&quot;</span>) + <span class="charliteral">&#39;\0&#39;</span>;</div>
<div class="line"><a id="l00979" name="l00979"></a><span class="lineno"> 979</span> }</div>
<div class="line"><a id="l00980" name="l00980"></a><span class="lineno"> 980</span> filter_list += <span class="charliteral">&#39;\0&#39;</span>;</div>
<div class="line"><a id="l00981" name="l00981"></a><span class="lineno"> 981</span> </div>
<div class="line"><a id="l00982" name="l00982"></a><span class="lineno"> 982</span> <a class="code hl_variable" href="classpfd_1_1internal_1_1dialog.html#a91f4b2666fb920a7859df9cdc079502d">m_async</a>-&gt;start_func([<span class="keyword">this</span>, in_type, title, default_path, filter_list, options](<span class="keywordtype">int</span>* exit_code) -&gt; std::string {</div>
<div class="line"><a id="l00983" name="l00983"></a><span class="lineno"> 983</span> (void)exit_code;</div>
<div class="line"><a id="l00984" name="l00984"></a><span class="lineno"> 984</span> m_wtitle = internal::str2wstr(title);</div>
<div class="line"><a id="l00985" name="l00985"></a><span class="lineno"> 985</span> m_wdefault_path = internal::str2wstr(default_path);</div>
<div class="line"><a id="l00986" name="l00986"></a><span class="lineno"> 986</span> <span class="keyword">auto</span> wfilter_list = internal::str2wstr(filter_list);</div>
<div class="line"><a id="l00987" name="l00987"></a><span class="lineno"> 987</span> </div>
<div class="line"><a id="l00988" name="l00988"></a><span class="lineno"> 988</span> <span class="comment">// Initialise COM. This is required for the new folder selection window,</span></div>
<div class="line"><a id="l00989" name="l00989"></a><span class="lineno"> 989</span> <span class="comment">// (see https://github.com/samhocevar/portable-file-dialogs/pull/21)</span></div>
<div class="line"><a id="l00990" name="l00990"></a><span class="lineno"> 990</span> <span class="comment">// and to avoid random crashes with GetOpenFileNameW() (see</span></div>
<div class="line"><a id="l00991" name="l00991"></a><span class="lineno"> 991</span> <span class="comment">// https://github.com/samhocevar/portable-file-dialogs/issues/51)</span></div>
<div class="line"><a id="l00992" name="l00992"></a><span class="lineno"> 992</span> ole32_dll ole32;</div>
<div class="line"><a id="l00993" name="l00993"></a><span class="lineno"> 993</span> </div>
<div class="line"><a id="l00994" name="l00994"></a><span class="lineno"> 994</span> <span class="comment">// Folder selection uses a different method</span></div>
<div class="line"><a id="l00995" name="l00995"></a><span class="lineno"> 995</span> <span class="keywordflow">if</span> (in_type == <a class="code hl_enumvalue" href="classpfd_1_1internal_1_1file__dialog.html#a758847a3fab54bb12a67abbf9ea683fca568b2ec66ef45be030a47ddc19bc7bba">type::folder</a>) {</div>
<div class="line"><a id="l00996" name="l00996"></a><span class="lineno"> 996</span><span class="preprocessor">#if PFD_HAS_IFILEDIALOG</span></div>
<div class="line"><a id="l00997" name="l00997"></a><span class="lineno"> 997</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">flags</a>(<a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aadaea0bbb642237ecdaa68a14a0d7212448">flag::is_vista</a>)) {</div>
<div class="line"><a id="l00998" name="l00998"></a><span class="lineno"> 998</span> <span class="comment">// On Vista and higher we should be able to use IFileDialog for folder selection</span></div>
<div class="line"><a id="l00999" name="l00999"></a><span class="lineno"> 999</span> IFileDialog* ifd;</div>
<div class="line"><a id="l01000" name="l01000"></a><span class="lineno"> 1000</span> HRESULT hr = dll::proc&lt;HRESULT WINAPI(REFCLSID, LPUNKNOWN, DWORD, REFIID, LPVOID*)&gt;(</div>
<div class="line"><a id="l01001" name="l01001"></a><span class="lineno"> 1001</span> ole32, <span class="stringliteral">&quot;CoCreateInstance&quot;</span>)(CLSID_FileOpenDialog, <span class="keyword">nullptr</span>, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&amp;ifd));</div>
<div class="line"><a id="l01002" name="l01002"></a><span class="lineno"> 1002</span> </div>
<div class="line"><a id="l01003" name="l01003"></a><span class="lineno"> 1003</span> <span class="comment">// In case CoCreateInstance fails (which it should not), try legacy approach</span></div>
<div class="line"><a id="l01004" name="l01004"></a><span class="lineno"> 1004</span> <span class="keywordflow">if</span> (SUCCEEDED(hr))</div>
<div class="line"><a id="l01005" name="l01005"></a><span class="lineno"> 1005</span> <span class="keywordflow">return</span> select_folder_vista(ifd, options &amp; <a class="code hl_enumvalue" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997a51106d57377a72da5f9a0415f4f6142b">opt::force_path</a>);</div>
<div class="line"><a id="l01006" name="l01006"></a><span class="lineno"> 1006</span> }</div>
<div class="line"><a id="l01007" name="l01007"></a><span class="lineno"> 1007</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l01008" name="l01008"></a><span class="lineno"> 1008</span> </div>
<div class="line"><a id="l01009" name="l01009"></a><span class="lineno"> 1009</span> BROWSEINFOW bi;</div>
<div class="line"><a id="l01010" name="l01010"></a><span class="lineno"> 1010</span> memset(&amp;bi, 0, <span class="keyword">sizeof</span>(bi));</div>
<div class="line"><a id="l01011" name="l01011"></a><span class="lineno"> 1011</span> </div>
<div class="line"><a id="l01012" name="l01012"></a><span class="lineno"> 1012</span> bi.lpfn = &amp;bffcallback;</div>
<div class="line"><a id="l01013" name="l01013"></a><span class="lineno"> 1013</span> bi.lParam = (LPARAM)<span class="keyword">this</span>;</div>
<div class="line"><a id="l01014" name="l01014"></a><span class="lineno"> 1014</span> </div>
<div class="line"><a id="l01015" name="l01015"></a><span class="lineno"> 1015</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">flags</a>(<a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aadaea0bbb642237ecdaa68a14a0d7212448">flag::is_vista</a>)) {</div>
<div class="line"><a id="l01016" name="l01016"></a><span class="lineno"> 1016</span> <span class="keywordflow">if</span> (ole32.is_initialized())</div>
<div class="line"><a id="l01017" name="l01017"></a><span class="lineno"> 1017</span> bi.ulFlags |= BIF_NEWDIALOGSTYLE;</div>
<div class="line"><a id="l01018" name="l01018"></a><span class="lineno"> 1018</span> bi.ulFlags |= BIF_EDITBOX;</div>
<div class="line"><a id="l01019" name="l01019"></a><span class="lineno"> 1019</span> bi.ulFlags |= BIF_STATUSTEXT;</div>
<div class="line"><a id="l01020" name="l01020"></a><span class="lineno"> 1020</span> }</div>
<div class="line"><a id="l01021" name="l01021"></a><span class="lineno"> 1021</span> </div>
<div class="line"><a id="l01022" name="l01022"></a><span class="lineno"> 1022</span> <span class="keyword">auto</span>* list = SHBrowseForFolderW(&amp;bi);</div>
<div class="line"><a id="l01023" name="l01023"></a><span class="lineno"> 1023</span> std::string ret;</div>
<div class="line"><a id="l01024" name="l01024"></a><span class="lineno"> 1024</span> <span class="keywordflow">if</span> (list) {</div>
<div class="line"><a id="l01025" name="l01025"></a><span class="lineno"> 1025</span> <span class="keyword">auto</span> buffer = <span class="keyword">new</span> <span class="keywordtype">wchar_t</span>[MAX_PATH];</div>
<div class="line"><a id="l01026" name="l01026"></a><span class="lineno"> 1026</span> SHGetPathFromIDListW(list, buffer);</div>
<div class="line"><a id="l01027" name="l01027"></a><span class="lineno"> 1027</span> dll::proc&lt;void WINAPI(LPVOID)&gt;(ole32, <span class="stringliteral">&quot;CoTaskMemFree&quot;</span>)(list);</div>
<div class="line"><a id="l01028" name="l01028"></a><span class="lineno"> 1028</span> ret = internal::wstr2str(buffer);</div>
<div class="line"><a id="l01029" name="l01029"></a><span class="lineno"> 1029</span> <span class="keyword">delete</span>[] buffer;</div>
<div class="line"><a id="l01030" name="l01030"></a><span class="lineno"> 1030</span> }</div>
<div class="line"><a id="l01031" name="l01031"></a><span class="lineno"> 1031</span> <span class="keywordflow">return</span> ret;</div>
<div class="line"><a id="l01032" name="l01032"></a><span class="lineno"> 1032</span> }</div>
<div class="line"><a id="l01033" name="l01033"></a><span class="lineno"> 1033</span> </div>
<div class="line"><a id="l01034" name="l01034"></a><span class="lineno"> 1034</span> OPENFILENAMEW ofn;</div>
<div class="line"><a id="l01035" name="l01035"></a><span class="lineno"> 1035</span> memset(&amp;ofn, 0, <span class="keyword">sizeof</span>(ofn));</div>
<div class="line"><a id="l01036" name="l01036"></a><span class="lineno"> 1036</span> ofn.lStructSize = <span class="keyword">sizeof</span>(OPENFILENAMEW);</div>
<div class="line"><a id="l01037" name="l01037"></a><span class="lineno"> 1037</span> ofn.hwndOwner = GetActiveWindow();</div>
<div class="line"><a id="l01038" name="l01038"></a><span class="lineno"> 1038</span> </div>
<div class="line"><a id="l01039" name="l01039"></a><span class="lineno"> 1039</span> ofn.lpstrFilter = wfilter_list.c_str();</div>
<div class="line"><a id="l01040" name="l01040"></a><span class="lineno"> 1040</span> </div>
<div class="line"><a id="l01041" name="l01041"></a><span class="lineno"> 1041</span> <span class="keyword">auto</span> woutput = std::wstring(MAX_PATH * 256, L<span class="charliteral">&#39;\0&#39;</span>);</div>
<div class="line"><a id="l01042" name="l01042"></a><span class="lineno"> 1042</span> ofn.lpstrFile = (LPWSTR)woutput.data();</div>
<div class="line"><a id="l01043" name="l01043"></a><span class="lineno"> 1043</span> ofn.nMaxFile = (DWORD)woutput.size();</div>
<div class="line"><a id="l01044" name="l01044"></a><span class="lineno"> 1044</span> <span class="keywordflow">if</span> (!m_wdefault_path.empty()) {</div>
<div class="line"><a id="l01045" name="l01045"></a><span class="lineno"> 1045</span> <span class="comment">// If a directory was provided, use it as the initial directory. If</span></div>
<div class="line"><a id="l01046" name="l01046"></a><span class="lineno"> 1046</span> <span class="comment">// a valid path was provided, use it as the initial file. Otherwise,</span></div>
<div class="line"><a id="l01047" name="l01047"></a><span class="lineno"> 1047</span> <span class="comment">// let the Windows API decide.</span></div>
<div class="line"><a id="l01048" name="l01048"></a><span class="lineno"> 1048</span> <span class="keyword">auto</span> path_attr = GetFileAttributesW(m_wdefault_path.c_str());</div>
<div class="line"><a id="l01049" name="l01049"></a><span class="lineno"> 1049</span> <span class="keywordflow">if</span> (path_attr != INVALID_FILE_ATTRIBUTES &amp;&amp; (path_attr &amp; FILE_ATTRIBUTE_DIRECTORY))</div>
<div class="line"><a id="l01050" name="l01050"></a><span class="lineno"> 1050</span> ofn.lpstrInitialDir = m_wdefault_path.c_str();</div>
<div class="line"><a id="l01051" name="l01051"></a><span class="lineno"> 1051</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (m_wdefault_path.size() &lt;= woutput.size())</div>
<div class="line"><a id="l01052" name="l01052"></a><span class="lineno"> 1052</span> <span class="comment">// second argument is size of buffer, not length of string</span></div>
<div class="line"><a id="l01053" name="l01053"></a><span class="lineno"> 1053</span> StringCchCopyW(ofn.lpstrFile, MAX_PATH * 256 + 1, m_wdefault_path.c_str());</div>
<div class="line"><a id="l01054" name="l01054"></a><span class="lineno"> 1054</span> <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l01055" name="l01055"></a><span class="lineno"> 1055</span> ofn.lpstrFileTitle = (LPWSTR)m_wdefault_path.data();</div>
<div class="line"><a id="l01056" name="l01056"></a><span class="lineno"> 1056</span> ofn.nMaxFileTitle = (DWORD)m_wdefault_path.size();</div>
<div class="line"><a id="l01057" name="l01057"></a><span class="lineno"> 1057</span> }</div>
<div class="line"><a id="l01058" name="l01058"></a><span class="lineno"> 1058</span> }</div>
<div class="line"><a id="l01059" name="l01059"></a><span class="lineno"> 1059</span> ofn.lpstrTitle = m_wtitle.c_str();</div>
<div class="line"><a id="l01060" name="l01060"></a><span class="lineno"> 1060</span> ofn.Flags = OFN_NOCHANGEDIR | OFN_EXPLORER;</div>
<div class="line"><a id="l01061" name="l01061"></a><span class="lineno"> 1061</span> </div>
<div class="line"><a id="l01062" name="l01062"></a><span class="lineno"> 1062</span> dll comdlg32(<span class="stringliteral">&quot;comdlg32.dll&quot;</span>);</div>
<div class="line"><a id="l01063" name="l01063"></a><span class="lineno"> 1063</span> </div>
<div class="line"><a id="l01064" name="l01064"></a><span class="lineno"> 1064</span> <span class="comment">// Apply new visual style (required for windows XP)</span></div>
<div class="line"><a id="l01065" name="l01065"></a><span class="lineno"> 1065</span> new_style_context ctx;</div>
<div class="line"><a id="l01066" name="l01066"></a><span class="lineno"> 1066</span> </div>
<div class="line"><a id="l01067" name="l01067"></a><span class="lineno"> 1067</span> <span class="keywordflow">if</span> (in_type == <a class="code hl_enumvalue" href="classpfd_1_1internal_1_1file__dialog.html#a758847a3fab54bb12a67abbf9ea683fca3b913d5d81b101f1f2b5cc544ef81f90">type::save</a>) {</div>
<div class="line"><a id="l01068" name="l01068"></a><span class="lineno"> 1068</span> <span class="keywordflow">if</span> (!(options &amp; <a class="code hl_enumvalue" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997a8fc52a8161c68fcaeebdfdb500a36d4b">opt::force_overwrite</a>))</div>
<div class="line"><a id="l01069" name="l01069"></a><span class="lineno"> 1069</span> ofn.Flags |= OFN_OVERWRITEPROMPT;</div>
<div class="line"><a id="l01070" name="l01070"></a><span class="lineno"> 1070</span> </div>
<div class="line"><a id="l01071" name="l01071"></a><span class="lineno"> 1071</span> dll::proc&lt;BOOL WINAPI(LPOPENFILENAMEW)&gt; get_save_file_name(comdlg32, <span class="stringliteral">&quot;GetSaveFileNameW&quot;</span>);</div>
<div class="line"><a id="l01072" name="l01072"></a><span class="lineno"> 1072</span> <span class="keywordflow">if</span> (get_save_file_name(&amp;ofn) == 0)</div>
<div class="line"><a id="l01073" name="l01073"></a><span class="lineno"> 1073</span> <span class="keywordflow">return</span> <span class="stringliteral">&quot;&quot;</span>;</div>
<div class="line"><a id="l01074" name="l01074"></a><span class="lineno"> 1074</span> <span class="keywordflow">return</span> internal::wstr2str(woutput.c_str());</div>
<div class="line"><a id="l01075" name="l01075"></a><span class="lineno"> 1075</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l01076" name="l01076"></a><span class="lineno"> 1076</span> <span class="keywordflow">if</span> (options &amp; <a class="code hl_enumvalue" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997ab66abfe0e0c2ef7c545895c12a0a8837">opt::multiselect</a>)</div>
<div class="line"><a id="l01077" name="l01077"></a><span class="lineno"> 1077</span> ofn.Flags |= OFN_ALLOWMULTISELECT;</div>
<div class="line"><a id="l01078" name="l01078"></a><span class="lineno"> 1078</span> ofn.Flags |= OFN_PATHMUSTEXIST;</div>
<div class="line"><a id="l01079" name="l01079"></a><span class="lineno"> 1079</span> </div>
<div class="line"><a id="l01080" name="l01080"></a><span class="lineno"> 1080</span> dll::proc&lt;BOOL WINAPI(LPOPENFILENAMEW)&gt; get_open_file_name(comdlg32, <span class="stringliteral">&quot;GetOpenFileNameW&quot;</span>);</div>
<div class="line"><a id="l01081" name="l01081"></a><span class="lineno"> 1081</span> <span class="keywordflow">if</span> (get_open_file_name(&amp;ofn) == 0)</div>
<div class="line"><a id="l01082" name="l01082"></a><span class="lineno"> 1082</span> <span class="keywordflow">return</span> <span class="stringliteral">&quot;&quot;</span>;</div>
<div class="line"><a id="l01083" name="l01083"></a><span class="lineno"> 1083</span> }</div>
<div class="line"><a id="l01084" name="l01084"></a><span class="lineno"> 1084</span> </div>
<div class="line"><a id="l01085" name="l01085"></a><span class="lineno"> 1085</span> std::string prefix;</div>
<div class="line"><a id="l01086" name="l01086"></a><span class="lineno"> 1086</span> <span class="keywordflow">for</span> (<span class="keywordtype">wchar_t</span> <span class="keyword">const</span>* p = woutput.c_str(); *p;) {</div>
<div class="line"><a id="l01087" name="l01087"></a><span class="lineno"> 1087</span> <span class="keyword">auto</span> filename = internal::wstr2str(p);</div>
<div class="line"><a id="l01088" name="l01088"></a><span class="lineno"> 1088</span> p += wcslen(p);</div>
<div class="line"><a id="l01089" name="l01089"></a><span class="lineno"> 1089</span> <span class="comment">// In multiselect mode, we advance p one wchar further and</span></div>
<div class="line"><a id="l01090" name="l01090"></a><span class="lineno"> 1090</span> <span class="comment">// check for another filename. If there is one and the</span></div>
<div class="line"><a id="l01091" name="l01091"></a><span class="lineno"> 1091</span> <span class="comment">// prefix is empty, it means we just read the prefix.</span></div>
<div class="line"><a id="l01092" name="l01092"></a><span class="lineno"> 1092</span> <span class="keywordflow">if</span> ((options &amp; <a class="code hl_enumvalue" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997ab66abfe0e0c2ef7c545895c12a0a8837">opt::multiselect</a>) &amp;&amp; *++p &amp;&amp; prefix.empty()) {</div>
<div class="line"><a id="l01093" name="l01093"></a><span class="lineno"> 1093</span> prefix = filename + <span class="stringliteral">&quot;/&quot;</span>;</div>
<div class="line"><a id="l01094" name="l01094"></a><span class="lineno"> 1094</span> <span class="keywordflow">continue</span>;</div>
<div class="line"><a id="l01095" name="l01095"></a><span class="lineno"> 1095</span> }</div>
<div class="line"><a id="l01096" name="l01096"></a><span class="lineno"> 1096</span> </div>
<div class="line"><a id="l01097" name="l01097"></a><span class="lineno"> 1097</span> m_vector_result.push_back(prefix + filename);</div>
<div class="line"><a id="l01098" name="l01098"></a><span class="lineno"> 1098</span> }</div>
<div class="line"><a id="l01099" name="l01099"></a><span class="lineno"> 1099</span> </div>
<div class="line"><a id="l01100" name="l01100"></a><span class="lineno"> 1100</span> <span class="keywordflow">return</span> <span class="stringliteral">&quot;&quot;</span>;</div>
<div class="line"><a id="l01101" name="l01101"></a><span class="lineno"> 1101</span> });</div>
<div class="line"><a id="l01102" name="l01102"></a><span class="lineno"> 1102</span><span class="preprocessor">#elif __EMSCRIPTEN__</span></div>
<div class="line"><a id="l01103" name="l01103"></a><span class="lineno"> 1103</span> <span class="comment">// FIXME: do something</span></div>
<div class="line"><a id="l01104" name="l01104"></a><span class="lineno"> 1104</span> (void)in_type;</div>
<div class="line"><a id="l01105" name="l01105"></a><span class="lineno"> 1105</span> (void)title;</div>
<div class="line"><a id="l01106" name="l01106"></a><span class="lineno"> 1106</span> (void)default_path;</div>
<div class="line"><a id="l01107" name="l01107"></a><span class="lineno"> 1107</span> (void)<a class="code hl_variable" href="ImguiUI_8cpp.html#a5fdd69bc3222fb4c44d3252f0b4641e3">filters</a>;</div>
<div class="line"><a id="l01108" name="l01108"></a><span class="lineno"> 1108</span> (void)options;</div>
<div class="line"><a id="l01109" name="l01109"></a><span class="lineno"> 1109</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l01110" name="l01110"></a><span class="lineno"> 1110</span> <span class="keyword">auto</span> command = <a class="code hl_function" href="classpfd_1_1internal_1_1dialog.html#aadaf6cb30620c85f4b97993e3c819188">desktop_helper</a>();</div>
<div class="line"><a id="l01111" name="l01111"></a><span class="lineno"> 1111</span> </div>
<div class="line"><a id="l01112" name="l01112"></a><span class="lineno"> 1112</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classpfd_1_1settings.html#a4e22d6fb43d387ddc980bf6e2a6aad24">is_osascript</a>()) {</div>
<div class="line"><a id="l01113" name="l01113"></a><span class="lineno"> 1113</span> std::string script = <span class="stringliteral">&quot;set ret to choose&quot;</span>;</div>
<div class="line"><a id="l01114" name="l01114"></a><span class="lineno"> 1114</span> <span class="keywordflow">switch</span> (in_type) {</div>
<div class="line"><a id="l01115" name="l01115"></a><span class="lineno"> 1115</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="classpfd_1_1internal_1_1file__dialog.html#a758847a3fab54bb12a67abbf9ea683fca3b913d5d81b101f1f2b5cc544ef81f90">type::save</a>:</div>
<div class="line"><a id="l01116" name="l01116"></a><span class="lineno"> 1116</span> script += <span class="stringliteral">&quot; file name&quot;</span>;</div>
<div class="line"><a id="l01117" name="l01117"></a><span class="lineno"> 1117</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01118" name="l01118"></a><span class="lineno"> 1118</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="classpfd_1_1internal_1_1file__dialog.html#a758847a3fab54bb12a67abbf9ea683fca4fd9423739ee4c950107a4eef324c559">type::open</a>:</div>
<div class="line"><a id="l01119" name="l01119"></a><span class="lineno"> 1119</span> <span class="keywordflow">default</span>:</div>
<div class="line"><a id="l01120" name="l01120"></a><span class="lineno"> 1120</span> script += <span class="stringliteral">&quot; file&quot;</span>;</div>
<div class="line"><a id="l01121" name="l01121"></a><span class="lineno"> 1121</span> <span class="keywordflow">if</span> (options &amp; <a class="code hl_enumvalue" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997ab66abfe0e0c2ef7c545895c12a0a8837">opt::multiselect</a>)</div>
<div class="line"><a id="l01122" name="l01122"></a><span class="lineno"> 1122</span> script += <span class="stringliteral">&quot; with multiple selections allowed&quot;</span>;</div>
<div class="line"><a id="l01123" name="l01123"></a><span class="lineno"> 1123</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01124" name="l01124"></a><span class="lineno"> 1124</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="classpfd_1_1internal_1_1file__dialog.html#a758847a3fab54bb12a67abbf9ea683fca568b2ec66ef45be030a47ddc19bc7bba">type::folder</a>:</div>
<div class="line"><a id="l01125" name="l01125"></a><span class="lineno"> 1125</span> script += <span class="stringliteral">&quot; folder&quot;</span>;</div>
<div class="line"><a id="l01126" name="l01126"></a><span class="lineno"> 1126</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01127" name="l01127"></a><span class="lineno"> 1127</span> }</div>
<div class="line"><a id="l01128" name="l01128"></a><span class="lineno"> 1128</span> </div>
<div class="line"><a id="l01129" name="l01129"></a><span class="lineno"> 1129</span> <span class="keywordflow">if</span> (default_path.size()) {</div>
<div class="line"><a id="l01130" name="l01130"></a><span class="lineno"> 1130</span> <span class="keywordflow">if</span> (in_type == <a class="code hl_enumvalue" href="classpfd_1_1internal_1_1file__dialog.html#a758847a3fab54bb12a67abbf9ea683fca568b2ec66ef45be030a47ddc19bc7bba">type::folder</a> || <a class="code hl_function" href="namespacepfd_1_1internal.html#a48cc31ab291a956a29b0a23fb46a7d26">is_directory</a>(default_path))</div>
<div class="line"><a id="l01131" name="l01131"></a><span class="lineno"> 1131</span> script += <span class="stringliteral">&quot; default location &quot;</span>;</div>
<div class="line"><a id="l01132" name="l01132"></a><span class="lineno"> 1132</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l01133" name="l01133"></a><span class="lineno"> 1133</span> script += <span class="stringliteral">&quot; default name &quot;</span>;</div>
<div class="line"><a id="l01134" name="l01134"></a><span class="lineno"> 1134</span> script += <a class="code hl_function" href="classpfd_1_1internal_1_1dialog.html#adc0ec6f5c8137cbdb0ea6669b5263a73">osascript_quote</a>(default_path);</div>
<div class="line"><a id="l01135" name="l01135"></a><span class="lineno"> 1135</span> }</div>
<div class="line"><a id="l01136" name="l01136"></a><span class="lineno"> 1136</span> </div>
<div class="line"><a id="l01137" name="l01137"></a><span class="lineno"> 1137</span> script += <span class="stringliteral">&quot; with prompt &quot;</span> + <a class="code hl_function" href="classpfd_1_1internal_1_1dialog.html#adc0ec6f5c8137cbdb0ea6669b5263a73">osascript_quote</a>(title);</div>
<div class="line"><a id="l01138" name="l01138"></a><span class="lineno"> 1138</span> </div>
<div class="line"><a id="l01139" name="l01139"></a><span class="lineno"> 1139</span> <span class="keywordflow">if</span> (in_type == <a class="code hl_enumvalue" href="classpfd_1_1internal_1_1file__dialog.html#a758847a3fab54bb12a67abbf9ea683fca4fd9423739ee4c950107a4eef324c559">type::open</a>) {</div>
<div class="line"><a id="l01140" name="l01140"></a><span class="lineno"> 1140</span> <span class="comment">// Concatenate all user-provided filter patterns</span></div>
<div class="line"><a id="l01141" name="l01141"></a><span class="lineno"> 1141</span> std::string patterns;</div>
<div class="line"><a id="l01142" name="l01142"></a><span class="lineno"> 1142</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; <a class="code hl_variable" href="ImguiUI_8cpp.html#a5fdd69bc3222fb4c44d3252f0b4641e3">filters</a>.size() / 2; ++i)</div>
<div class="line"><a id="l01143" name="l01143"></a><span class="lineno"> 1143</span> patterns += <span class="stringliteral">&quot; &quot;</span> + <a class="code hl_variable" href="ImguiUI_8cpp.html#a5fdd69bc3222fb4c44d3252f0b4641e3">filters</a>[2 * i + 1];</div>
<div class="line"><a id="l01144" name="l01144"></a><span class="lineno"> 1144</span> </div>
<div class="line"><a id="l01145" name="l01145"></a><span class="lineno"> 1145</span> <span class="comment">// Split the pattern list to check whether &quot;*&quot; is in there; if it</span></div>
<div class="line"><a id="l01146" name="l01146"></a><span class="lineno"> 1146</span> <span class="comment">// is, we have to disable filters because there is no mechanism in</span></div>
<div class="line"><a id="l01147" name="l01147"></a><span class="lineno"> 1147</span> <span class="comment">// OS X for the user to override the filter.</span></div>
<div class="line"><a id="l01148" name="l01148"></a><span class="lineno"> 1148</span> std::regex sep(<span class="stringliteral">&quot;\\s+&quot;</span>);</div>
<div class="line"><a id="l01149" name="l01149"></a><span class="lineno"> 1149</span> std::string filter_list;</div>
<div class="line"><a id="l01150" name="l01150"></a><span class="lineno"> 1150</span> <span class="keywordtype">bool</span> has_filter = <span class="keyword">true</span>;</div>
<div class="line"><a id="l01151" name="l01151"></a><span class="lineno"> 1151</span> std::sregex_token_iterator iter(patterns.begin(), patterns.end(), sep, -1);</div>
<div class="line"><a id="l01152" name="l01152"></a><span class="lineno"> 1152</span> std::sregex_token_iterator end;</div>
<div class="line"><a id="l01153" name="l01153"></a><span class="lineno"> 1153</span> <span class="keywordflow">for</span> (; iter != end; ++iter) {</div>
<div class="line"><a id="l01154" name="l01154"></a><span class="lineno"> 1154</span> <span class="keyword">auto</span> pat = iter-&gt;str();</div>
<div class="line"><a id="l01155" name="l01155"></a><span class="lineno"> 1155</span> <span class="keywordflow">if</span> (pat == <span class="stringliteral">&quot;*&quot;</span> || pat == <span class="stringliteral">&quot;*.*&quot;</span>)</div>
<div class="line"><a id="l01156" name="l01156"></a><span class="lineno"> 1156</span> has_filter = <span class="keyword">false</span>;</div>
<div class="line"><a id="l01157" name="l01157"></a><span class="lineno"> 1157</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespacepfd_1_1internal.html#a405a4127479d770e2b2fd48504c85f42">internal::starts_with</a>(pat, <span class="stringliteral">&quot;*.&quot;</span>))</div>
<div class="line"><a id="l01158" name="l01158"></a><span class="lineno"> 1158</span> filter_list += <span class="stringliteral">&quot;,&quot;</span> + <a class="code hl_function" href="classpfd_1_1internal_1_1dialog.html#adc0ec6f5c8137cbdb0ea6669b5263a73">osascript_quote</a>(pat.substr(2, pat.size() - 2));</div>
<div class="line"><a id="l01159" name="l01159"></a><span class="lineno"> 1159</span> }</div>
<div class="line"><a id="l01160" name="l01160"></a><span class="lineno"> 1160</span> </div>
<div class="line"><a id="l01161" name="l01161"></a><span class="lineno"> 1161</span> <span class="keywordflow">if</span> (has_filter &amp;&amp; filter_list.size() &gt; 0) {</div>
<div class="line"><a id="l01162" name="l01162"></a><span class="lineno"> 1162</span> <span class="comment">// There is a weird AppleScript bug where file extensions of length != 3 are</span></div>
<div class="line"><a id="l01163" name="l01163"></a><span class="lineno"> 1163</span> <span class="comment">// ignored, e.g. type{&quot;txt&quot;} works, but type{&quot;json&quot;} does not. Fortunately if</span></div>
<div class="line"><a id="l01164" name="l01164"></a><span class="lineno"> 1164</span> <span class="comment">// the whole list starts with a 3-character extension, everything works again.</span></div>
<div class="line"><a id="l01165" name="l01165"></a><span class="lineno"> 1165</span> <span class="comment">// We use &quot;///&quot; for such an extension because we are sure it cannot appear in</span></div>
<div class="line"><a id="l01166" name="l01166"></a><span class="lineno"> 1166</span> <span class="comment">// an actual filename.</span></div>
<div class="line"><a id="l01167" name="l01167"></a><span class="lineno"> 1167</span> script += <span class="stringliteral">&quot; of type {\&quot;///\&quot;&quot;</span> + filter_list + <span class="stringliteral">&quot;}&quot;</span>;</div>
<div class="line"><a id="l01168" name="l01168"></a><span class="lineno"> 1168</span> }</div>
<div class="line"><a id="l01169" name="l01169"></a><span class="lineno"> 1169</span> }</div>
<div class="line"><a id="l01170" name="l01170"></a><span class="lineno"> 1170</span> </div>
<div class="line"><a id="l01171" name="l01171"></a><span class="lineno"> 1171</span> <span class="keywordflow">if</span> (in_type == <a class="code hl_enumvalue" href="classpfd_1_1internal_1_1file__dialog.html#a758847a3fab54bb12a67abbf9ea683fca4fd9423739ee4c950107a4eef324c559">type::open</a> &amp;&amp; (options &amp; <a class="code hl_enumvalue" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997ab66abfe0e0c2ef7c545895c12a0a8837">opt::multiselect</a>)) {</div>
<div class="line"><a id="l01172" name="l01172"></a><span class="lineno"> 1172</span> script += <span class="stringliteral">&quot;\nset s to \&quot;\&quot;&quot;</span>;</div>
<div class="line"><a id="l01173" name="l01173"></a><span class="lineno"> 1173</span> script += <span class="stringliteral">&quot;\nrepeat with i in ret&quot;</span>;</div>
<div class="line"><a id="l01174" name="l01174"></a><span class="lineno"> 1174</span> script += <span class="stringliteral">&quot;\n set s to s &amp; (POSIX path of i) &amp; \&quot;\\n\&quot;&quot;</span>;</div>
<div class="line"><a id="l01175" name="l01175"></a><span class="lineno"> 1175</span> script += <span class="stringliteral">&quot;\nend repeat&quot;</span>;</div>
<div class="line"><a id="l01176" name="l01176"></a><span class="lineno"> 1176</span> script += <span class="stringliteral">&quot;\ncopy s to stdout&quot;</span>;</div>
<div class="line"><a id="l01177" name="l01177"></a><span class="lineno"> 1177</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l01178" name="l01178"></a><span class="lineno"> 1178</span> script += <span class="stringliteral">&quot;\nPOSIX path of ret&quot;</span>;</div>
<div class="line"><a id="l01179" name="l01179"></a><span class="lineno"> 1179</span> }</div>
<div class="line"><a id="l01180" name="l01180"></a><span class="lineno"> 1180</span> </div>
<div class="line"><a id="l01181" name="l01181"></a><span class="lineno"> 1181</span> command.push_back(<span class="stringliteral">&quot;-e&quot;</span>);</div>
<div class="line"><a id="l01182" name="l01182"></a><span class="lineno"> 1182</span> command.push_back(script);</div>
<div class="line"><a id="l01183" name="l01183"></a><span class="lineno"> 1183</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classpfd_1_1settings.html#a08e4a5b150186d77158a974cc8c2d4a2">is_zenity</a>()) {</div>
<div class="line"><a id="l01184" name="l01184"></a><span class="lineno"> 1184</span> command.push_back(<span class="stringliteral">&quot;--file-selection&quot;</span>);</div>
<div class="line"><a id="l01185" name="l01185"></a><span class="lineno"> 1185</span> </div>
<div class="line"><a id="l01186" name="l01186"></a><span class="lineno"> 1186</span> <span class="comment">// If the default path is a directory, make sure it ends with &quot;/&quot; otherwise zenity will</span></div>
<div class="line"><a id="l01187" name="l01187"></a><span class="lineno"> 1187</span> <span class="comment">// open the file dialog in the parent directory.</span></div>
<div class="line"><a id="l01188" name="l01188"></a><span class="lineno"> 1188</span> <span class="keyword">auto</span> filename_arg = <span class="stringliteral">&quot;--filename=&quot;</span> + default_path;</div>
<div class="line"><a id="l01189" name="l01189"></a><span class="lineno"> 1189</span> <span class="keywordflow">if</span> (in_type != <a class="code hl_enumvalue" href="classpfd_1_1internal_1_1file__dialog.html#a758847a3fab54bb12a67abbf9ea683fca568b2ec66ef45be030a47ddc19bc7bba">type::folder</a> &amp;&amp; !<a class="code hl_function" href="namespacepfd_1_1internal.html#aaf263cbe957efd58a37827691b430371">ends_with</a>(default_path, <span class="stringliteral">&quot;/&quot;</span>) &amp;&amp; <a class="code hl_function" href="namespacepfd_1_1internal.html#a48cc31ab291a956a29b0a23fb46a7d26">internal::is_directory</a>(default_path))</div>
<div class="line"><a id="l01190" name="l01190"></a><span class="lineno"> 1190</span> filename_arg += <span class="stringliteral">&quot;/&quot;</span>;</div>
<div class="line"><a id="l01191" name="l01191"></a><span class="lineno"> 1191</span> command.push_back(filename_arg);</div>
<div class="line"><a id="l01192" name="l01192"></a><span class="lineno"> 1192</span> </div>
<div class="line"><a id="l01193" name="l01193"></a><span class="lineno"> 1193</span> command.push_back(<span class="stringliteral">&quot;--title&quot;</span>);</div>
<div class="line"><a id="l01194" name="l01194"></a><span class="lineno"> 1194</span> command.push_back(title);</div>
<div class="line"><a id="l01195" name="l01195"></a><span class="lineno"> 1195</span> command.push_back(<span class="stringliteral">&quot;--separator=\n&quot;</span>);</div>
<div class="line"><a id="l01196" name="l01196"></a><span class="lineno"> 1196</span> </div>
<div class="line"><a id="l01197" name="l01197"></a><span class="lineno"> 1197</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; <a class="code hl_variable" href="ImguiUI_8cpp.html#a5fdd69bc3222fb4c44d3252f0b4641e3">filters</a>.size() / 2; ++i) {</div>
<div class="line"><a id="l01198" name="l01198"></a><span class="lineno"> 1198</span> command.push_back(<span class="stringliteral">&quot;--file-filter&quot;</span>);</div>
<div class="line"><a id="l01199" name="l01199"></a><span class="lineno"> 1199</span> command.push_back(<a class="code hl_variable" href="ImguiUI_8cpp.html#a5fdd69bc3222fb4c44d3252f0b4641e3">filters</a>[2 * i] + <span class="stringliteral">&quot;|&quot;</span> + <a class="code hl_variable" href="ImguiUI_8cpp.html#a5fdd69bc3222fb4c44d3252f0b4641e3">filters</a>[2 * i + 1]);</div>
<div class="line"><a id="l01200" name="l01200"></a><span class="lineno"> 1200</span> }</div>
<div class="line"><a id="l01201" name="l01201"></a><span class="lineno"> 1201</span> </div>
<div class="line"><a id="l01202" name="l01202"></a><span class="lineno"> 1202</span> <span class="keywordflow">if</span> (in_type == <a class="code hl_enumvalue" href="classpfd_1_1internal_1_1file__dialog.html#a758847a3fab54bb12a67abbf9ea683fca3b913d5d81b101f1f2b5cc544ef81f90">type::save</a>)</div>
<div class="line"><a id="l01203" name="l01203"></a><span class="lineno"> 1203</span> command.push_back(<span class="stringliteral">&quot;--save&quot;</span>);</div>
<div class="line"><a id="l01204" name="l01204"></a><span class="lineno"> 1204</span> <span class="keywordflow">if</span> (in_type == <a class="code hl_enumvalue" href="classpfd_1_1internal_1_1file__dialog.html#a758847a3fab54bb12a67abbf9ea683fca568b2ec66ef45be030a47ddc19bc7bba">type::folder</a>)</div>
<div class="line"><a id="l01205" name="l01205"></a><span class="lineno"> 1205</span> command.push_back(<span class="stringliteral">&quot;--directory&quot;</span>);</div>
<div class="line"><a id="l01206" name="l01206"></a><span class="lineno"> 1206</span> <span class="keywordflow">if</span> (!(options &amp; <a class="code hl_enumvalue" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997a8fc52a8161c68fcaeebdfdb500a36d4b">opt::force_overwrite</a>))</div>
<div class="line"><a id="l01207" name="l01207"></a><span class="lineno"> 1207</span> command.push_back(<span class="stringliteral">&quot;--confirm-overwrite&quot;</span>);</div>
<div class="line"><a id="l01208" name="l01208"></a><span class="lineno"> 1208</span> <span class="keywordflow">if</span> (options &amp; <a class="code hl_enumvalue" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997ab66abfe0e0c2ef7c545895c12a0a8837">opt::multiselect</a>)</div>
<div class="line"><a id="l01209" name="l01209"></a><span class="lineno"> 1209</span> command.push_back(<span class="stringliteral">&quot;--multiple&quot;</span>);</div>
<div class="line"><a id="l01210" name="l01210"></a><span class="lineno"> 1210</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classpfd_1_1settings.html#aa79fb10eee785f1acd8d1ff34e226c89">is_kdialog</a>()) {</div>
<div class="line"><a id="l01211" name="l01211"></a><span class="lineno"> 1211</span> <span class="keywordflow">switch</span> (in_type) {</div>
<div class="line"><a id="l01212" name="l01212"></a><span class="lineno"> 1212</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="classpfd_1_1internal_1_1file__dialog.html#a758847a3fab54bb12a67abbf9ea683fca3b913d5d81b101f1f2b5cc544ef81f90">type::save</a>:</div>
<div class="line"><a id="l01213" name="l01213"></a><span class="lineno"> 1213</span> command.push_back(<span class="stringliteral">&quot;--getsavefilename&quot;</span>);</div>
<div class="line"><a id="l01214" name="l01214"></a><span class="lineno"> 1214</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01215" name="l01215"></a><span class="lineno"> 1215</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="classpfd_1_1internal_1_1file__dialog.html#a758847a3fab54bb12a67abbf9ea683fca4fd9423739ee4c950107a4eef324c559">type::open</a>:</div>
<div class="line"><a id="l01216" name="l01216"></a><span class="lineno"> 1216</span> command.push_back(<span class="stringliteral">&quot;--getopenfilename&quot;</span>);</div>
<div class="line"><a id="l01217" name="l01217"></a><span class="lineno"> 1217</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01218" name="l01218"></a><span class="lineno"> 1218</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="classpfd_1_1internal_1_1file__dialog.html#a758847a3fab54bb12a67abbf9ea683fca568b2ec66ef45be030a47ddc19bc7bba">type::folder</a>:</div>
<div class="line"><a id="l01219" name="l01219"></a><span class="lineno"> 1219</span> command.push_back(<span class="stringliteral">&quot;--getexistingdirectory&quot;</span>);</div>
<div class="line"><a id="l01220" name="l01220"></a><span class="lineno"> 1220</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01221" name="l01221"></a><span class="lineno"> 1221</span> }</div>
<div class="line"><a id="l01222" name="l01222"></a><span class="lineno"> 1222</span> <span class="keywordflow">if</span> (options &amp; <a class="code hl_enumvalue" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997ab66abfe0e0c2ef7c545895c12a0a8837">opt::multiselect</a>) {</div>
<div class="line"><a id="l01223" name="l01223"></a><span class="lineno"> 1223</span> command.push_back(<span class="stringliteral">&quot;--multiple&quot;</span>);</div>
<div class="line"><a id="l01224" name="l01224"></a><span class="lineno"> 1224</span> command.push_back(<span class="stringliteral">&quot;--separate-output&quot;</span>);</div>
<div class="line"><a id="l01225" name="l01225"></a><span class="lineno"> 1225</span> }</div>
<div class="line"><a id="l01226" name="l01226"></a><span class="lineno"> 1226</span> </div>
<div class="line"><a id="l01227" name="l01227"></a><span class="lineno"> 1227</span> command.push_back(default_path);</div>
<div class="line"><a id="l01228" name="l01228"></a><span class="lineno"> 1228</span> </div>
<div class="line"><a id="l01229" name="l01229"></a><span class="lineno"> 1229</span> std::string <a class="code hl_variable" href="mixer_8c.html#a736b27ffc221941516149102ad8e7e2d">filter</a>;</div>
<div class="line"><a id="l01230" name="l01230"></a><span class="lineno"> 1230</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; <a class="code hl_variable" href="ImguiUI_8cpp.html#a5fdd69bc3222fb4c44d3252f0b4641e3">filters</a>.size() / 2; ++i)</div>
<div class="line"><a id="l01231" name="l01231"></a><span class="lineno"> 1231</span> <a class="code hl_variable" href="mixer_8c.html#a736b27ffc221941516149102ad8e7e2d">filter</a> += (i == 0 ? <span class="stringliteral">&quot;&quot;</span> : <span class="stringliteral">&quot; | &quot;</span>) + <a class="code hl_variable" href="ImguiUI_8cpp.html#a5fdd69bc3222fb4c44d3252f0b4641e3">filters</a>[2 * i] + <span class="stringliteral">&quot;(&quot;</span> + <a class="code hl_variable" href="ImguiUI_8cpp.html#a5fdd69bc3222fb4c44d3252f0b4641e3">filters</a>[2 * i + 1] + <span class="stringliteral">&quot;)&quot;</span>;</div>
<div class="line"><a id="l01232" name="l01232"></a><span class="lineno"> 1232</span> command.push_back(<a class="code hl_variable" href="mixer_8c.html#a736b27ffc221941516149102ad8e7e2d">filter</a>);</div>
<div class="line"><a id="l01233" name="l01233"></a><span class="lineno"> 1233</span> </div>
<div class="line"><a id="l01234" name="l01234"></a><span class="lineno"> 1234</span> command.push_back(<span class="stringliteral">&quot;--title&quot;</span>);</div>
<div class="line"><a id="l01235" name="l01235"></a><span class="lineno"> 1235</span> command.push_back(title);</div>
<div class="line"><a id="l01236" name="l01236"></a><span class="lineno"> 1236</span> }</div>
<div class="line"><a id="l01237" name="l01237"></a><span class="lineno"> 1237</span> </div>
<div class="line"><a id="l01238" name="l01238"></a><span class="lineno"> 1238</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">flags</a>(<a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aadad9da28952c27749f53c23675db49d560">flag::is_verbose</a>))</div>
<div class="line"><a id="l01239" name="l01239"></a><span class="lineno"> 1239</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;pfd: &quot;</span> &lt;&lt; command &lt;&lt; std::endl;</div>
<div class="line"><a id="l01240" name="l01240"></a><span class="lineno"> 1240</span> </div>
<div class="line"><a id="l01241" name="l01241"></a><span class="lineno"> 1241</span> <a class="code hl_variable" href="classpfd_1_1internal_1_1dialog.html#a91f4b2666fb920a7859df9cdc079502d">m_async</a>-&gt;start_process(command);</div>
<div class="line"><a id="l01242" name="l01242"></a><span class="lineno"> 1242</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l01243" name="l01243"></a><span class="lineno"> 1243</span>}</div>
</div>
<div class="line"><a id="l01244" name="l01244"></a><span class="lineno"> 1244</span> </div>
<div class="foldopen" id="foldopen01245" data-start="{" data-end="}">
<div class="line"><a id="l01245" name="l01245"></a><span class="lineno"><a class="line" href="classpfd_1_1internal_1_1file__dialog.html#ac916440e9dcefba5cbd4f0e5bb8acbff"> 1245</a></span><span class="keyword">inline</span> std::string <a class="code hl_function" href="classpfd_1_1internal_1_1file__dialog.html#ac916440e9dcefba5cbd4f0e5bb8acbff">internal::file_dialog::string_result</a>() {</div>
<div class="line"><a id="l01246" name="l01246"></a><span class="lineno"> 1246</span><span class="preprocessor">#if _WIN32</span></div>
<div class="line"><a id="l01247" name="l01247"></a><span class="lineno"> 1247</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="classpfd_1_1internal_1_1dialog.html#a91f4b2666fb920a7859df9cdc079502d">m_async</a>-&gt;result();</div>
<div class="line"><a id="l01248" name="l01248"></a><span class="lineno"> 1248</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l01249" name="l01249"></a><span class="lineno"> 1249</span> <span class="keyword">auto</span> ret = <a class="code hl_variable" href="classpfd_1_1internal_1_1dialog.html#a91f4b2666fb920a7859df9cdc079502d">m_async</a>-&gt;result();</div>
<div class="line"><a id="l01250" name="l01250"></a><span class="lineno"> 1250</span> <span class="comment">// Strip potential trailing newline (zenity). Also strip trailing slash</span></div>
<div class="line"><a id="l01251" name="l01251"></a><span class="lineno"> 1251</span> <span class="comment">// added by osascript for consistency with other backends.</span></div>
<div class="line"><a id="l01252" name="l01252"></a><span class="lineno"> 1252</span> <span class="keywordflow">while</span> (!ret.empty() &amp;&amp; (ret.back() == <span class="charliteral">&#39;\n&#39;</span> || ret.back() == <span class="charliteral">&#39;/&#39;</span>))</div>
<div class="line"><a id="l01253" name="l01253"></a><span class="lineno"> 1253</span> ret.pop_back();</div>
<div class="line"><a id="l01254" name="l01254"></a><span class="lineno"> 1254</span> <span class="keywordflow">return</span> ret;</div>
<div class="line"><a id="l01255" name="l01255"></a><span class="lineno"> 1255</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l01256" name="l01256"></a><span class="lineno"> 1256</span>}</div>
</div>
<div class="line"><a id="l01257" name="l01257"></a><span class="lineno"> 1257</span> </div>
<div class="foldopen" id="foldopen01258" data-start="{" data-end="}">
<div class="line"><a id="l01258" name="l01258"></a><span class="lineno"><a class="line" href="classpfd_1_1internal_1_1file__dialog.html#ae28b6dd37ab4e47885ce7ca25652212b"> 1258</a></span><span class="keyword">inline</span> std::vector&lt;std::string&gt; <a class="code hl_function" href="classpfd_1_1internal_1_1file__dialog.html#ae28b6dd37ab4e47885ce7ca25652212b">internal::file_dialog::vector_result</a>() {</div>
<div class="line"><a id="l01259" name="l01259"></a><span class="lineno"> 1259</span><span class="preprocessor">#if _WIN32</span></div>
<div class="line"><a id="l01260" name="l01260"></a><span class="lineno"> 1260</span> <a class="code hl_variable" href="classpfd_1_1internal_1_1dialog.html#a91f4b2666fb920a7859df9cdc079502d">m_async</a>-&gt;result();</div>
<div class="line"><a id="l01261" name="l01261"></a><span class="lineno"> 1261</span> <span class="keywordflow">return</span> m_vector_result;</div>
<div class="line"><a id="l01262" name="l01262"></a><span class="lineno"> 1262</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l01263" name="l01263"></a><span class="lineno"> 1263</span> std::vector&lt;std::string&gt; ret;</div>
<div class="line"><a id="l01264" name="l01264"></a><span class="lineno"> 1264</span> <span class="keyword">auto</span> result = <a class="code hl_variable" href="classpfd_1_1internal_1_1dialog.html#a91f4b2666fb920a7859df9cdc079502d">m_async</a>-&gt;result();</div>
<div class="line"><a id="l01265" name="l01265"></a><span class="lineno"> 1265</span> <span class="keywordflow">for</span> (;;) {</div>
<div class="line"><a id="l01266" name="l01266"></a><span class="lineno"> 1266</span> <span class="comment">// Split result along newline characters</span></div>
<div class="line"><a id="l01267" name="l01267"></a><span class="lineno"> 1267</span> <span class="keyword">auto</span> i = result.find(<span class="charliteral">&#39;\n&#39;</span>);</div>
<div class="line"><a id="l01268" name="l01268"></a><span class="lineno"> 1268</span> <span class="keywordflow">if</span> (i == 0 || i == std::string::npos)</div>
<div class="line"><a id="l01269" name="l01269"></a><span class="lineno"> 1269</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01270" name="l01270"></a><span class="lineno"> 1270</span> ret.push_back(result.substr(0, i));</div>
<div class="line"><a id="l01271" name="l01271"></a><span class="lineno"> 1271</span> result = result.substr(i + 1, result.size());</div>
<div class="line"><a id="l01272" name="l01272"></a><span class="lineno"> 1272</span> }</div>
<div class="line"><a id="l01273" name="l01273"></a><span class="lineno"> 1273</span> <span class="keywordflow">return</span> ret;</div>
<div class="line"><a id="l01274" name="l01274"></a><span class="lineno"> 1274</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l01275" name="l01275"></a><span class="lineno"> 1275</span>}</div>
</div>
<div class="line"><a id="l01276" name="l01276"></a><span class="lineno"> 1276</span> </div>
<div class="line"><a id="l01277" name="l01277"></a><span class="lineno"> 1277</span><span class="preprocessor">#if _WIN32</span></div>
<div class="line"><a id="l01278" name="l01278"></a><span class="lineno"> 1278</span><span class="comment">// Use a static function to pass as BFFCALLBACK for legacy folder select</span></div>
<div class="line"><a id="l01279" name="l01279"></a><span class="lineno"> 1279</span><span class="keyword">inline</span> <span class="keywordtype">int</span> CALLBACK internal::file_dialog::bffcallback(HWND hwnd, UINT uMsg, LPARAM, LPARAM pData) {</div>
<div class="line"><a id="l01280" name="l01280"></a><span class="lineno"> 1280</span> <span class="keyword">auto</span> inst = (<a class="code hl_class" href="classpfd_1_1internal_1_1file__dialog.html">file_dialog</a>*)pData;</div>
<div class="line"><a id="l01281" name="l01281"></a><span class="lineno"> 1281</span> <span class="keywordflow">switch</span> (uMsg) {</div>
<div class="line"><a id="l01282" name="l01282"></a><span class="lineno"> 1282</span> <span class="keywordflow">case</span> BFFM_INITIALIZED:</div>
<div class="line"><a id="l01283" name="l01283"></a><span class="lineno"> 1283</span> SendMessage(hwnd, BFFM_SETSELECTIONW, TRUE, (LPARAM)inst-&gt;m_wdefault_path.c_str());</div>
<div class="line"><a id="l01284" name="l01284"></a><span class="lineno"> 1284</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01285" name="l01285"></a><span class="lineno"> 1285</span> }</div>
<div class="line"><a id="l01286" name="l01286"></a><span class="lineno"> 1286</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l01287" name="l01287"></a><span class="lineno"> 1287</span>}</div>
<div class="line"><a id="l01288" name="l01288"></a><span class="lineno"> 1288</span> </div>
<div class="line"><a id="l01289" name="l01289"></a><span class="lineno"> 1289</span><span class="preprocessor">#if PFD_HAS_IFILEDIALOG</span></div>
<div class="line"><a id="l01290" name="l01290"></a><span class="lineno"> 1290</span><span class="keyword">inline</span> std::string internal::file_dialog::select_folder_vista(IFileDialog* ifd, <span class="keywordtype">bool</span> <a class="code hl_enumvalue" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997a51106d57377a72da5f9a0415f4f6142b">force_path</a>) {</div>
<div class="line"><a id="l01291" name="l01291"></a><span class="lineno"> 1291</span> std::string result;</div>
<div class="line"><a id="l01292" name="l01292"></a><span class="lineno"> 1292</span> </div>
<div class="line"><a id="l01293" name="l01293"></a><span class="lineno"> 1293</span> IShellItem* folder;</div>
<div class="line"><a id="l01294" name="l01294"></a><span class="lineno"> 1294</span> </div>
<div class="line"><a id="l01295" name="l01295"></a><span class="lineno"> 1295</span> <span class="comment">// Load library at runtime so app doesn&#39;t link it at load time (which will fail on windows XP)</span></div>
<div class="line"><a id="l01296" name="l01296"></a><span class="lineno"> 1296</span> dll shell32(<span class="stringliteral">&quot;shell32.dll&quot;</span>);</div>
<div class="line"><a id="l01297" name="l01297"></a><span class="lineno"> 1297</span> dll::proc&lt;HRESULT WINAPI(PCWSTR, IBindCtx*, REFIID, <span class="keywordtype">void</span>**)&gt; create_item(shell32, <span class="stringliteral">&quot;SHCreateItemFromParsingName&quot;</span>);</div>
<div class="line"><a id="l01298" name="l01298"></a><span class="lineno"> 1298</span> </div>
<div class="line"><a id="l01299" name="l01299"></a><span class="lineno"> 1299</span> <span class="keywordflow">if</span> (!create_item)</div>
<div class="line"><a id="l01300" name="l01300"></a><span class="lineno"> 1300</span> <span class="keywordflow">return</span> <span class="stringliteral">&quot;&quot;</span>;</div>
<div class="line"><a id="l01301" name="l01301"></a><span class="lineno"> 1301</span> </div>
<div class="line"><a id="l01302" name="l01302"></a><span class="lineno"> 1302</span> <span class="keyword">auto</span> hr = create_item(m_wdefault_path.c_str(), <span class="keyword">nullptr</span>, IID_PPV_ARGS(&amp;folder));</div>
<div class="line"><a id="l01303" name="l01303"></a><span class="lineno"> 1303</span> </div>
<div class="line"><a id="l01304" name="l01304"></a><span class="lineno"> 1304</span> <span class="comment">// Set default folder if found. This only sets the default folder. If</span></div>
<div class="line"><a id="l01305" name="l01305"></a><span class="lineno"> 1305</span> <span class="comment">// Windows has any info about the most recently selected folder, it</span></div>
<div class="line"><a id="l01306" name="l01306"></a><span class="lineno"> 1306</span> <span class="comment">// will display it instead. Generally, calling SetFolder() to set the</span></div>
<div class="line"><a id="l01307" name="l01307"></a><span class="lineno"> 1307</span> <span class="comment">// current directory “is not a good or expected user experience and</span></div>
<div class="line"><a id="l01308" name="l01308"></a><span class="lineno"> 1308</span> <span class="comment">// should therefore be avoided”:</span></div>
<div class="line"><a id="l01309" name="l01309"></a><span class="lineno"> 1309</span> <span class="comment">// https://docs.microsoft.com/windows/win32/api/shobjidl_core/nf-shobjidl_core-ifiledialog-setfolder</span></div>
<div class="line"><a id="l01310" name="l01310"></a><span class="lineno"> 1310</span> <span class="keywordflow">if</span> (SUCCEEDED(hr)) {</div>
<div class="line"><a id="l01311" name="l01311"></a><span class="lineno"> 1311</span> <span class="keywordflow">if</span> (<a class="code hl_enumvalue" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997a51106d57377a72da5f9a0415f4f6142b">force_path</a>)</div>
<div class="line"><a id="l01312" name="l01312"></a><span class="lineno"> 1312</span> ifd-&gt;SetFolder(folder);</div>
<div class="line"><a id="l01313" name="l01313"></a><span class="lineno"> 1313</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l01314" name="l01314"></a><span class="lineno"> 1314</span> ifd-&gt;SetDefaultFolder(folder);</div>
<div class="line"><a id="l01315" name="l01315"></a><span class="lineno"> 1315</span> folder-&gt;Release();</div>
<div class="line"><a id="l01316" name="l01316"></a><span class="lineno"> 1316</span> }</div>
<div class="line"><a id="l01317" name="l01317"></a><span class="lineno"> 1317</span> </div>
<div class="line"><a id="l01318" name="l01318"></a><span class="lineno"> 1318</span> <span class="comment">// Set the dialog title and option to select folders</span></div>
<div class="line"><a id="l01319" name="l01319"></a><span class="lineno"> 1319</span> ifd-&gt;SetOptions(FOS_PICKFOLDERS | FOS_FORCEFILESYSTEM);</div>
<div class="line"><a id="l01320" name="l01320"></a><span class="lineno"> 1320</span> ifd-&gt;SetTitle(m_wtitle.c_str());</div>
<div class="line"><a id="l01321" name="l01321"></a><span class="lineno"> 1321</span> </div>
<div class="line"><a id="l01322" name="l01322"></a><span class="lineno"> 1322</span> hr = ifd-&gt;Show(GetActiveWindow());</div>
<div class="line"><a id="l01323" name="l01323"></a><span class="lineno"> 1323</span> <span class="keywordflow">if</span> (SUCCEEDED(hr)) {</div>
<div class="line"><a id="l01324" name="l01324"></a><span class="lineno"> 1324</span> IShellItem* item;</div>
<div class="line"><a id="l01325" name="l01325"></a><span class="lineno"> 1325</span> hr = ifd-&gt;GetResult(&amp;item);</div>
<div class="line"><a id="l01326" name="l01326"></a><span class="lineno"> 1326</span> <span class="keywordflow">if</span> (SUCCEEDED(hr)) {</div>
<div class="line"><a id="l01327" name="l01327"></a><span class="lineno"> 1327</span> <span class="keywordtype">wchar_t</span>* wname = <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l01328" name="l01328"></a><span class="lineno"> 1328</span> <span class="comment">// This is unlikely to fail because we use FOS_FORCEFILESYSTEM, but try</span></div>
<div class="line"><a id="l01329" name="l01329"></a><span class="lineno"> 1329</span> <span class="comment">// to output a debug message just in case.</span></div>
<div class="line"><a id="l01330" name="l01330"></a><span class="lineno"> 1330</span> <span class="keywordflow">if</span> (SUCCEEDED(item-&gt;GetDisplayName(SIGDN_FILESYSPATH, &amp;wname))) {</div>
<div class="line"><a id="l01331" name="l01331"></a><span class="lineno"> 1331</span> result = internal::wstr2str(std::wstring(wname));</div>
<div class="line"><a id="l01332" name="l01332"></a><span class="lineno"> 1332</span> dll::proc&lt;void WINAPI(LPVOID)&gt;(ole32_dll(), <span class="stringliteral">&quot;CoTaskMemFree&quot;</span>)(wname);</div>
<div class="line"><a id="l01333" name="l01333"></a><span class="lineno"> 1333</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l01334" name="l01334"></a><span class="lineno"> 1334</span> <span class="keywordflow">if</span> (SUCCEEDED(item-&gt;GetDisplayName(SIGDN_NORMALDISPLAY, &amp;wname))) {</div>
<div class="line"><a id="l01335" name="l01335"></a><span class="lineno"> 1335</span> <span class="keyword">auto</span> name = internal::wstr2str(std::wstring(wname));</div>
<div class="line"><a id="l01336" name="l01336"></a><span class="lineno"> 1336</span> dll::proc&lt;void WINAPI(LPVOID)&gt;(ole32_dll(), <span class="stringliteral">&quot;CoTaskMemFree&quot;</span>)(wname);</div>
<div class="line"><a id="l01337" name="l01337"></a><span class="lineno"> 1337</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;pfd: failed to get path for &quot;</span> &lt;&lt; name &lt;&lt; std::endl;</div>
<div class="line"><a id="l01338" name="l01338"></a><span class="lineno"> 1338</span> } <span class="keywordflow">else</span></div>
<div class="line"><a id="l01339" name="l01339"></a><span class="lineno"> 1339</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;pfd: item of unknown type selected&quot;</span> &lt;&lt; std::endl;</div>
<div class="line"><a id="l01340" name="l01340"></a><span class="lineno"> 1340</span> }</div>
<div class="line"><a id="l01341" name="l01341"></a><span class="lineno"> 1341</span> </div>
<div class="line"><a id="l01342" name="l01342"></a><span class="lineno"> 1342</span> item-&gt;Release();</div>
<div class="line"><a id="l01343" name="l01343"></a><span class="lineno"> 1343</span> }</div>
<div class="line"><a id="l01344" name="l01344"></a><span class="lineno"> 1344</span> }</div>
<div class="line"><a id="l01345" name="l01345"></a><span class="lineno"> 1345</span> </div>
<div class="line"><a id="l01346" name="l01346"></a><span class="lineno"> 1346</span> ifd-&gt;Release();</div>
<div class="line"><a id="l01347" name="l01347"></a><span class="lineno"> 1347</span> </div>
<div class="line"><a id="l01348" name="l01348"></a><span class="lineno"> 1348</span> <span class="keywordflow">return</span> result;</div>
<div class="line"><a id="l01349" name="l01349"></a><span class="lineno"> 1349</span>}</div>
<div class="line"><a id="l01350" name="l01350"></a><span class="lineno"> 1350</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l01351" name="l01351"></a><span class="lineno"> 1351</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l01352" name="l01352"></a><span class="lineno"> 1352</span> </div>
<div class="line"><a id="l01353" name="l01353"></a><span class="lineno"> 1353</span><span class="comment">// notify implementation</span></div>
<div class="line"><a id="l01354" name="l01354"></a><span class="lineno"> 1354</span> </div>
<div class="foldopen" id="foldopen01355" data-start="{" data-end="}">
<div class="line"><a id="l01355" name="l01355"></a><span class="lineno"><a class="line" href="classpfd_1_1notify.html#a64f87055f567ed5720a357b6844eccb7"> 1355</a></span><span class="keyword">inline</span> <a class="code hl_function" href="classpfd_1_1notify.html#a64f87055f567ed5720a357b6844eccb7">notify::notify</a>(std::string <span class="keyword">const</span>&amp; title, std::string <span class="keyword">const</span>&amp; <a class="code hl_class" href="classpfd_1_1message.html">message</a>, <a class="code hl_enumeration" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85">icon</a> _icon <span class="comment">/* = icon::info */</span>) {</div>
<div class="line"><a id="l01356" name="l01356"></a><span class="lineno"> 1356</span> <span class="keywordflow">if</span> (_icon == <a class="code hl_enumvalue" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85a5494af1f14a8c19939968c3e9e2d4f79">icon::question</a>) <span class="comment">// Not supported by notifications</span></div>
<div class="line"><a id="l01357" name="l01357"></a><span class="lineno"> 1357</span> _icon = <a class="code hl_enumvalue" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85acaf9b6b99962bf5c2264824231d7a40c">icon::info</a>;</div>
<div class="line"><a id="l01358" name="l01358"></a><span class="lineno"> 1358</span> </div>
<div class="line"><a id="l01359" name="l01359"></a><span class="lineno"> 1359</span><span class="preprocessor">#if _WIN32</span></div>
<div class="line"><a id="l01360" name="l01360"></a><span class="lineno"> 1360</span> <span class="comment">// Use a static shared pointer for notify_icon so that we can delete</span></div>
<div class="line"><a id="l01361" name="l01361"></a><span class="lineno"> 1361</span> <span class="comment">// it whenever we need to display a new one, and we can also wait</span></div>
<div class="line"><a id="l01362" name="l01362"></a><span class="lineno"> 1362</span> <span class="comment">// until the program has finished running.</span></div>
<div class="line"><a id="l01363" name="l01363"></a><span class="lineno"> 1363</span> <span class="keyword">struct </span>notify_icon_data : <span class="keyword">public</span> NOTIFYICONDATAW {</div>
<div class="line"><a id="l01364" name="l01364"></a><span class="lineno"> 1364</span> ~notify_icon_data() {</div>
<div class="line"><a id="l01365" name="l01365"></a><span class="lineno"> 1365</span> Shell_NotifyIconW(NIM_DELETE, <span class="keyword">this</span>);</div>
<div class="line"><a id="l01366" name="l01366"></a><span class="lineno"> 1366</span> }</div>
<div class="line"><a id="l01367" name="l01367"></a><span class="lineno"> 1367</span> };</div>
<div class="line"><a id="l01368" name="l01368"></a><span class="lineno"> 1368</span> </div>
<div class="line"><a id="l01369" name="l01369"></a><span class="lineno"> 1369</span> <span class="keyword">static</span> std::shared_ptr&lt;notify_icon_data&gt; nid;</div>
<div class="line"><a id="l01370" name="l01370"></a><span class="lineno"> 1370</span> </div>
<div class="line"><a id="l01371" name="l01371"></a><span class="lineno"> 1371</span> <span class="comment">// Release the previous notification icon, if any, and allocate a new</span></div>
<div class="line"><a id="l01372" name="l01372"></a><span class="lineno"> 1372</span> <span class="comment">// one. Note that std::make_shared() does value initialization, so there</span></div>
<div class="line"><a id="l01373" name="l01373"></a><span class="lineno"> 1373</span> <span class="comment">// is no need to memset the structure.</span></div>
<div class="line"><a id="l01374" name="l01374"></a><span class="lineno"> 1374</span> nid = <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l01375" name="l01375"></a><span class="lineno"> 1375</span> nid = std::make_shared&lt;notify_icon_data&gt;();</div>
<div class="line"><a id="l01376" name="l01376"></a><span class="lineno"> 1376</span> </div>
<div class="line"><a id="l01377" name="l01377"></a><span class="lineno"> 1377</span> <span class="comment">// For XP support</span></div>
<div class="line"><a id="l01378" name="l01378"></a><span class="lineno"> 1378</span> nid-&gt;cbSize = NOTIFYICONDATAW_V2_SIZE;</div>
<div class="line"><a id="l01379" name="l01379"></a><span class="lineno"> 1379</span> nid-&gt;hWnd = <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l01380" name="l01380"></a><span class="lineno"> 1380</span> nid-&gt;uID = 0;</div>
<div class="line"><a id="l01381" name="l01381"></a><span class="lineno"> 1381</span> </div>
<div class="line"><a id="l01382" name="l01382"></a><span class="lineno"> 1382</span> <span class="comment">// Flag Description:</span></div>
<div class="line"><a id="l01383" name="l01383"></a><span class="lineno"> 1383</span> <span class="comment">// - NIF_ICON The hIcon member is valid.</span></div>
<div class="line"><a id="l01384" name="l01384"></a><span class="lineno"> 1384</span> <span class="comment">// - NIF_MESSAGE The uCallbackMessage member is valid.</span></div>
<div class="line"><a id="l01385" name="l01385"></a><span class="lineno"> 1385</span> <span class="comment">// - NIF_TIP The szTip member is valid.</span></div>
<div class="line"><a id="l01386" name="l01386"></a><span class="lineno"> 1386</span> <span class="comment">// - NIF_STATE The dwState and dwStateMask members are valid.</span></div>
<div class="line"><a id="l01387" name="l01387"></a><span class="lineno"> 1387</span> <span class="comment">// - NIF_INFO Use a balloon ToolTip instead of a standard ToolTip. The szInfo, uTimeout, szInfoTitle, and</span></div>
<div class="line"><a id="l01388" name="l01388"></a><span class="lineno"> 1388</span> <span class="comment">// dwInfoFlags members are valid.</span></div>
<div class="line"><a id="l01389" name="l01389"></a><span class="lineno"> 1389</span> <span class="comment">// - NIF_GUID Reserved.</span></div>
<div class="line"><a id="l01390" name="l01390"></a><span class="lineno"> 1390</span> nid-&gt;uFlags = NIF_MESSAGE | NIF_ICON | NIF_INFO;</div>
<div class="line"><a id="l01391" name="l01391"></a><span class="lineno"> 1391</span> </div>
<div class="line"><a id="l01392" name="l01392"></a><span class="lineno"> 1392</span> <span class="comment">// Flag Description</span></div>
<div class="line"><a id="l01393" name="l01393"></a><span class="lineno"> 1393</span> <span class="comment">// - NIIF_ERROR An error icon.</span></div>
<div class="line"><a id="l01394" name="l01394"></a><span class="lineno"> 1394</span> <span class="comment">// - NIIF_INFO An information icon.</span></div>
<div class="line"><a id="l01395" name="l01395"></a><span class="lineno"> 1395</span> <span class="comment">// - NIIF_NONE No icon.</span></div>
<div class="line"><a id="l01396" name="l01396"></a><span class="lineno"> 1396</span> <span class="comment">// - NIIF_WARNING A warning icon.</span></div>
<div class="line"><a id="l01397" name="l01397"></a><span class="lineno"> 1397</span> <span class="comment">// - NIIF_ICON_MASK Version 6.0. Reserved.</span></div>
<div class="line"><a id="l01398" name="l01398"></a><span class="lineno"> 1398</span> <span class="comment">// - NIIF_NOSOUND Version 6.0. Do not play the associated sound. Applies only to balloon ToolTips</span></div>
<div class="line"><a id="l01399" name="l01399"></a><span class="lineno"> 1399</span> <span class="keywordflow">switch</span> (_icon) {</div>
<div class="line"><a id="l01400" name="l01400"></a><span class="lineno"> 1400</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85a7b83d3f08fa392b79e3f553b585971cd">icon::warning</a>:</div>
<div class="line"><a id="l01401" name="l01401"></a><span class="lineno"> 1401</span> nid-&gt;dwInfoFlags = NIIF_WARNING;</div>
<div class="line"><a id="l01402" name="l01402"></a><span class="lineno"> 1402</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01403" name="l01403"></a><span class="lineno"> 1403</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85acb5e100e5a9a3e7f6d1fd97512215282">icon::error</a>:</div>
<div class="line"><a id="l01404" name="l01404"></a><span class="lineno"> 1404</span> nid-&gt;dwInfoFlags = NIIF_ERROR;</div>
<div class="line"><a id="l01405" name="l01405"></a><span class="lineno"> 1405</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01406" name="l01406"></a><span class="lineno"> 1406</span> <span class="comment">/* case icon::info: */</span> <span class="keywordflow">default</span>:</div>
<div class="line"><a id="l01407" name="l01407"></a><span class="lineno"> 1407</span> nid-&gt;dwInfoFlags = NIIF_INFO;</div>
<div class="line"><a id="l01408" name="l01408"></a><span class="lineno"> 1408</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01409" name="l01409"></a><span class="lineno"> 1409</span> }</div>
<div class="line"><a id="l01410" name="l01410"></a><span class="lineno"> 1410</span> </div>
<div class="line"><a id="l01411" name="l01411"></a><span class="lineno"> 1411</span> ENUMRESNAMEPROC icon_enum_callback = [](HMODULE, LPCTSTR, LPTSTR lpName, LONG_PTR lParam) -&gt; BOOL {</div>
<div class="line"><a id="l01412" name="l01412"></a><span class="lineno"> 1412</span> ((NOTIFYICONDATAW*)lParam)-&gt;hIcon = ::LoadIcon(GetModuleHandle(<span class="keyword">nullptr</span>), lpName);</div>
<div class="line"><a id="l01413" name="l01413"></a><span class="lineno"> 1413</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l01414" name="l01414"></a><span class="lineno"> 1414</span> };</div>
<div class="line"><a id="l01415" name="l01415"></a><span class="lineno"> 1415</span> </div>
<div class="line"><a id="l01416" name="l01416"></a><span class="lineno"> 1416</span> nid-&gt;hIcon = ::LoadIcon(<span class="keyword">nullptr</span>, IDI_APPLICATION);</div>
<div class="line"><a id="l01417" name="l01417"></a><span class="lineno"> 1417</span> ::EnumResourceNames(<span class="keyword">nullptr</span>, RT_GROUP_ICON, icon_enum_callback, (LONG_PTR)nid.get());</div>
<div class="line"><a id="l01418" name="l01418"></a><span class="lineno"> 1418</span> </div>
<div class="line"><a id="l01419" name="l01419"></a><span class="lineno"> 1419</span> nid-&gt;uTimeout = 5000;</div>
<div class="line"><a id="l01420" name="l01420"></a><span class="lineno"> 1420</span> </div>
<div class="line"><a id="l01421" name="l01421"></a><span class="lineno"> 1421</span> StringCchCopyW(nid-&gt;szInfoTitle, ARRAYSIZE(nid-&gt;szInfoTitle), internal::str2wstr(title).c_str());</div>
<div class="line"><a id="l01422" name="l01422"></a><span class="lineno"> 1422</span> StringCchCopyW(nid-&gt;szInfo, ARRAYSIZE(nid-&gt;szInfo), internal::str2wstr(<a class="code hl_class" href="classpfd_1_1message.html">message</a>).c_str());</div>
<div class="line"><a id="l01423" name="l01423"></a><span class="lineno"> 1423</span> </div>
<div class="line"><a id="l01424" name="l01424"></a><span class="lineno"> 1424</span> <span class="comment">// Display the new icon</span></div>
<div class="line"><a id="l01425" name="l01425"></a><span class="lineno"> 1425</span> Shell_NotifyIconW(NIM_ADD, nid.get());</div>
<div class="line"><a id="l01426" name="l01426"></a><span class="lineno"> 1426</span><span class="preprocessor">#elif __EMSCRIPTEN__</span></div>
<div class="line"><a id="l01427" name="l01427"></a><span class="lineno"> 1427</span> <span class="comment">// FIXME: do something</span></div>
<div class="line"><a id="l01428" name="l01428"></a><span class="lineno"> 1428</span> (void)title;</div>
<div class="line"><a id="l01429" name="l01429"></a><span class="lineno"> 1429</span> (void)<a class="code hl_class" href="classpfd_1_1message.html">message</a>;</div>
<div class="line"><a id="l01430" name="l01430"></a><span class="lineno"> 1430</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l01431" name="l01431"></a><span class="lineno"> 1431</span> <span class="keyword">auto</span> command = <a class="code hl_function" href="classpfd_1_1internal_1_1dialog.html#aadaf6cb30620c85f4b97993e3c819188">desktop_helper</a>();</div>
<div class="line"><a id="l01432" name="l01432"></a><span class="lineno"> 1432</span> </div>
<div class="line"><a id="l01433" name="l01433"></a><span class="lineno"> 1433</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classpfd_1_1settings.html#a4e22d6fb43d387ddc980bf6e2a6aad24">is_osascript</a>()) {</div>
<div class="line"><a id="l01434" name="l01434"></a><span class="lineno"> 1434</span> command.push_back(<span class="stringliteral">&quot;-e&quot;</span>);</div>
<div class="line"><a id="l01435" name="l01435"></a><span class="lineno"> 1435</span> command.push_back(<span class="stringliteral">&quot;display notification &quot;</span> + <a class="code hl_function" href="classpfd_1_1internal_1_1dialog.html#adc0ec6f5c8137cbdb0ea6669b5263a73">osascript_quote</a>(<a class="code hl_class" href="classpfd_1_1message.html">message</a>) + <span class="stringliteral">&quot; with title &quot;</span> + <a class="code hl_function" href="classpfd_1_1internal_1_1dialog.html#adc0ec6f5c8137cbdb0ea6669b5263a73">osascript_quote</a>(title));</div>
<div class="line"><a id="l01436" name="l01436"></a><span class="lineno"> 1436</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classpfd_1_1settings.html#a08e4a5b150186d77158a974cc8c2d4a2">is_zenity</a>()) {</div>
<div class="line"><a id="l01437" name="l01437"></a><span class="lineno"> 1437</span> command.push_back(<span class="stringliteral">&quot;--notification&quot;</span>);</div>
<div class="line"><a id="l01438" name="l01438"></a><span class="lineno"> 1438</span> command.push_back(<span class="stringliteral">&quot;--window-icon&quot;</span>);</div>
<div class="line"><a id="l01439" name="l01439"></a><span class="lineno"> 1439</span> command.push_back(<a class="code hl_function" href="classpfd_1_1internal_1_1dialog.html#ae94362bed052ab6050e38852712cb97a">get_icon_name</a>(_icon));</div>
<div class="line"><a id="l01440" name="l01440"></a><span class="lineno"> 1440</span> command.push_back(<span class="stringliteral">&quot;--text&quot;</span>);</div>
<div class="line"><a id="l01441" name="l01441"></a><span class="lineno"> 1441</span> command.push_back(title + <span class="stringliteral">&quot;\n&quot;</span> + <a class="code hl_class" href="classpfd_1_1message.html">message</a>);</div>
<div class="line"><a id="l01442" name="l01442"></a><span class="lineno"> 1442</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classpfd_1_1settings.html#aa79fb10eee785f1acd8d1ff34e226c89">is_kdialog</a>()) {</div>
<div class="line"><a id="l01443" name="l01443"></a><span class="lineno"> 1443</span> command.push_back(<span class="stringliteral">&quot;--icon&quot;</span>);</div>
<div class="line"><a id="l01444" name="l01444"></a><span class="lineno"> 1444</span> command.push_back(<a class="code hl_function" href="classpfd_1_1internal_1_1dialog.html#ae94362bed052ab6050e38852712cb97a">get_icon_name</a>(_icon));</div>
<div class="line"><a id="l01445" name="l01445"></a><span class="lineno"> 1445</span> command.push_back(<span class="stringliteral">&quot;--title&quot;</span>);</div>
<div class="line"><a id="l01446" name="l01446"></a><span class="lineno"> 1446</span> command.push_back(title);</div>
<div class="line"><a id="l01447" name="l01447"></a><span class="lineno"> 1447</span> command.push_back(<span class="stringliteral">&quot;--passivepopup&quot;</span>);</div>
<div class="line"><a id="l01448" name="l01448"></a><span class="lineno"> 1448</span> command.push_back(<a class="code hl_class" href="classpfd_1_1message.html">message</a>);</div>
<div class="line"><a id="l01449" name="l01449"></a><span class="lineno"> 1449</span> command.push_back(<span class="stringliteral">&quot;5&quot;</span>);</div>
<div class="line"><a id="l01450" name="l01450"></a><span class="lineno"> 1450</span> }</div>
<div class="line"><a id="l01451" name="l01451"></a><span class="lineno"> 1451</span> </div>
<div class="line"><a id="l01452" name="l01452"></a><span class="lineno"> 1452</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">flags</a>(<a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aadad9da28952c27749f53c23675db49d560">flag::is_verbose</a>))</div>
<div class="line"><a id="l01453" name="l01453"></a><span class="lineno"> 1453</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;pfd: &quot;</span> &lt;&lt; command &lt;&lt; std::endl;</div>
<div class="line"><a id="l01454" name="l01454"></a><span class="lineno"> 1454</span> </div>
<div class="line"><a id="l01455" name="l01455"></a><span class="lineno"> 1455</span> <a class="code hl_variable" href="classpfd_1_1internal_1_1dialog.html#a91f4b2666fb920a7859df9cdc079502d">m_async</a>-&gt;start_process(command);</div>
<div class="line"><a id="l01456" name="l01456"></a><span class="lineno"> 1456</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l01457" name="l01457"></a><span class="lineno"> 1457</span>}</div>
</div>
<div class="line"><a id="l01458" name="l01458"></a><span class="lineno"> 1458</span> </div>
<div class="line"><a id="l01459" name="l01459"></a><span class="lineno"> 1459</span><span class="comment">// message implementation</span></div>
<div class="line"><a id="l01460" name="l01460"></a><span class="lineno"> 1460</span> </div>
<div class="foldopen" id="foldopen01461" data-start="{" data-end="}">
<div class="line"><a id="l01461" name="l01461"></a><span class="lineno"><a class="line" href="classpfd_1_1message.html#a38e0ce9a58c006011708a4968be17833"> 1461</a></span><span class="keyword">inline</span> <a class="code hl_function" href="classpfd_1_1message.html#a38e0ce9a58c006011708a4968be17833">message::message</a>(std::string <span class="keyword">const</span>&amp; title, std::string <span class="keyword">const</span>&amp; text, <a class="code hl_enumeration" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8">choice</a> _choice <span class="comment">/* = choice::ok_cancel */</span>,</div>
<div class="line"><a id="l01462" name="l01462"></a><span class="lineno"> 1462</span> <a class="code hl_enumeration" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85">icon</a> _icon <span class="comment">/* = icon::info */</span>) {</div>
<div class="line"><a id="l01463" name="l01463"></a><span class="lineno"> 1463</span><span class="preprocessor">#if _WIN32</span></div>
<div class="line"><a id="l01464" name="l01464"></a><span class="lineno"> 1464</span> <span class="comment">// Use MB_SYSTEMMODAL rather than MB_TOPMOST to ensure the message window is brought</span></div>
<div class="line"><a id="l01465" name="l01465"></a><span class="lineno"> 1465</span> <span class="comment">// to front. See https://github.com/samhocevar/portable-file-dialogs/issues/52</span></div>
<div class="line"><a id="l01466" name="l01466"></a><span class="lineno"> 1466</span> UINT style = MB_SYSTEMMODAL;</div>
<div class="line"><a id="l01467" name="l01467"></a><span class="lineno"> 1467</span> <span class="keywordflow">switch</span> (_icon) {</div>
<div class="line"><a id="l01468" name="l01468"></a><span class="lineno"> 1468</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85a7b83d3f08fa392b79e3f553b585971cd">icon::warning</a>:</div>
<div class="line"><a id="l01469" name="l01469"></a><span class="lineno"> 1469</span> style |= MB_ICONWARNING;</div>
<div class="line"><a id="l01470" name="l01470"></a><span class="lineno"> 1470</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01471" name="l01471"></a><span class="lineno"> 1471</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85acb5e100e5a9a3e7f6d1fd97512215282">icon::error</a>:</div>
<div class="line"><a id="l01472" name="l01472"></a><span class="lineno"> 1472</span> style |= MB_ICONERROR;</div>
<div class="line"><a id="l01473" name="l01473"></a><span class="lineno"> 1473</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01474" name="l01474"></a><span class="lineno"> 1474</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85a5494af1f14a8c19939968c3e9e2d4f79">icon::question</a>:</div>
<div class="line"><a id="l01475" name="l01475"></a><span class="lineno"> 1475</span> style |= MB_ICONQUESTION;</div>
<div class="line"><a id="l01476" name="l01476"></a><span class="lineno"> 1476</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01477" name="l01477"></a><span class="lineno"> 1477</span> <span class="comment">/* case icon::info: */</span> <span class="keywordflow">default</span>:</div>
<div class="line"><a id="l01478" name="l01478"></a><span class="lineno"> 1478</span> style |= MB_ICONINFORMATION;</div>
<div class="line"><a id="l01479" name="l01479"></a><span class="lineno"> 1479</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01480" name="l01480"></a><span class="lineno"> 1480</span> }</div>
<div class="line"><a id="l01481" name="l01481"></a><span class="lineno"> 1481</span> </div>
<div class="line"><a id="l01482" name="l01482"></a><span class="lineno"> 1482</span> <span class="keywordflow">switch</span> (_choice) {</div>
<div class="line"><a id="l01483" name="l01483"></a><span class="lineno"> 1483</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a809da5df9c86c6426c8d8db2934d3f51">choice::ok_cancel</a>:</div>
<div class="line"><a id="l01484" name="l01484"></a><span class="lineno"> 1484</span> style |= MB_OKCANCEL;</div>
<div class="line"><a id="l01485" name="l01485"></a><span class="lineno"> 1485</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01486" name="l01486"></a><span class="lineno"> 1486</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a20f0596c21ad67a7fda598ffc7d038d1">choice::yes_no</a>:</div>
<div class="line"><a id="l01487" name="l01487"></a><span class="lineno"> 1487</span> style |= MB_YESNO;</div>
<div class="line"><a id="l01488" name="l01488"></a><span class="lineno"> 1488</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01489" name="l01489"></a><span class="lineno"> 1489</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a5c5cb337bb234e240912dc139048038c">choice::yes_no_cancel</a>:</div>
<div class="line"><a id="l01490" name="l01490"></a><span class="lineno"> 1490</span> style |= MB_YESNOCANCEL;</div>
<div class="line"><a id="l01491" name="l01491"></a><span class="lineno"> 1491</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01492" name="l01492"></a><span class="lineno"> 1492</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a7928e609b1665227bcb71b20d431fd6a">choice::retry_cancel</a>:</div>
<div class="line"><a id="l01493" name="l01493"></a><span class="lineno"> 1493</span> style |= MB_RETRYCANCEL;</div>
<div class="line"><a id="l01494" name="l01494"></a><span class="lineno"> 1494</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01495" name="l01495"></a><span class="lineno"> 1495</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a9df771aa8f010c4b928e42a8979d5609">choice::abort_retry_ignore</a>:</div>
<div class="line"><a id="l01496" name="l01496"></a><span class="lineno"> 1496</span> style |= MB_ABORTRETRYIGNORE;</div>
<div class="line"><a id="l01497" name="l01497"></a><span class="lineno"> 1497</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01498" name="l01498"></a><span class="lineno"> 1498</span> <span class="comment">/* case choice::ok: */</span> <span class="keywordflow">default</span>:</div>
<div class="line"><a id="l01499" name="l01499"></a><span class="lineno"> 1499</span> style |= MB_OK;</div>
<div class="line"><a id="l01500" name="l01500"></a><span class="lineno"> 1500</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01501" name="l01501"></a><span class="lineno"> 1501</span> }</div>
<div class="line"><a id="l01502" name="l01502"></a><span class="lineno"> 1502</span> </div>
<div class="line"><a id="l01503" name="l01503"></a><span class="lineno"> 1503</span> <a class="code hl_variable" href="classpfd_1_1message.html#abd55bdeb662938db1c8e6747d3acb7b4">m_mappings</a>[IDCANCEL] = <a class="code hl_enumvalue" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a10aec35353f9c4096a71c38654c3d402">button::cancel</a>;</div>
<div class="line"><a id="l01504" name="l01504"></a><span class="lineno"> 1504</span> <a class="code hl_variable" href="classpfd_1_1message.html#abd55bdeb662938db1c8e6747d3acb7b4">m_mappings</a>[IDOK] = <a class="code hl_enumvalue" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a444bcb3a3fcf8389296c49467f27e1d6">button::ok</a>;</div>
<div class="line"><a id="l01505" name="l01505"></a><span class="lineno"> 1505</span> <a class="code hl_variable" href="classpfd_1_1message.html#abd55bdeb662938db1c8e6747d3acb7b4">m_mappings</a>[IDYES] = <a class="code hl_enumvalue" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679aa6105c0a611b41b08f1209506350279e">button::yes</a>;</div>
<div class="line"><a id="l01506" name="l01506"></a><span class="lineno"> 1506</span> <a class="code hl_variable" href="classpfd_1_1message.html#abd55bdeb662938db1c8e6747d3acb7b4">m_mappings</a>[IDNO] = <a class="code hl_enumvalue" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a7fa3b767c460b54a2be4d49030b349c7">button::no</a>;</div>
<div class="line"><a id="l01507" name="l01507"></a><span class="lineno"> 1507</span> <a class="code hl_variable" href="classpfd_1_1message.html#abd55bdeb662938db1c8e6747d3acb7b4">m_mappings</a>[IDABORT] = <a class="code hl_enumvalue" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a5bb94a1c12413a2e5d14deabab29f2aa">button::abort</a>;</div>
<div class="line"><a id="l01508" name="l01508"></a><span class="lineno"> 1508</span> <a class="code hl_variable" href="classpfd_1_1message.html#abd55bdeb662938db1c8e6747d3acb7b4">m_mappings</a>[IDRETRY] = <a class="code hl_enumvalue" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a165e6d21e0a2cc9ebb32ca05f90e0fa7">button::retry</a>;</div>
<div class="line"><a id="l01509" name="l01509"></a><span class="lineno"> 1509</span> <a class="code hl_variable" href="classpfd_1_1message.html#abd55bdeb662938db1c8e6747d3acb7b4">m_mappings</a>[IDIGNORE] = <a class="code hl_enumvalue" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a567bc1d268f135496de3d5b946b691f3">button::ignore</a>;</div>
<div class="line"><a id="l01510" name="l01510"></a><span class="lineno"> 1510</span> </div>
<div class="line"><a id="l01511" name="l01511"></a><span class="lineno"> 1511</span> <a class="code hl_variable" href="classpfd_1_1internal_1_1dialog.html#a91f4b2666fb920a7859df9cdc079502d">m_async</a>-&gt;start_func([text, title, style](<span class="keywordtype">int</span>* exit_code) -&gt; std::string {</div>
<div class="line"><a id="l01512" name="l01512"></a><span class="lineno"> 1512</span> <span class="keyword">auto</span> wtext = internal::str2wstr(text);</div>
<div class="line"><a id="l01513" name="l01513"></a><span class="lineno"> 1513</span> <span class="keyword">auto</span> wtitle = internal::str2wstr(title);</div>
<div class="line"><a id="l01514" name="l01514"></a><span class="lineno"> 1514</span> <span class="comment">// Apply new visual style (required for all Windows versions)</span></div>
<div class="line"><a id="l01515" name="l01515"></a><span class="lineno"> 1515</span> new_style_context ctx;</div>
<div class="line"><a id="l01516" name="l01516"></a><span class="lineno"> 1516</span> *exit_code = MessageBoxW(GetActiveWindow(), wtext.c_str(), wtitle.c_str(), style);</div>
<div class="line"><a id="l01517" name="l01517"></a><span class="lineno"> 1517</span> <span class="keywordflow">return</span> <span class="stringliteral">&quot;&quot;</span>;</div>
<div class="line"><a id="l01518" name="l01518"></a><span class="lineno"> 1518</span> });</div>
<div class="line"><a id="l01519" name="l01519"></a><span class="lineno"> 1519</span> </div>
<div class="line"><a id="l01520" name="l01520"></a><span class="lineno"> 1520</span><span class="preprocessor">#elif __EMSCRIPTEN__</span></div>
<div class="line"><a id="l01521" name="l01521"></a><span class="lineno"> 1521</span> std::string full_message;</div>
<div class="line"><a id="l01522" name="l01522"></a><span class="lineno"> 1522</span> <span class="keywordflow">switch</span> (_icon) {</div>
<div class="line"><a id="l01523" name="l01523"></a><span class="lineno"> 1523</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85a7b83d3f08fa392b79e3f553b585971cd">icon::warning</a>:</div>
<div class="line"><a id="l01524" name="l01524"></a><span class="lineno"> 1524</span> full_message = <span class="stringliteral">&quot;⚠️&quot;</span>;</div>
<div class="line"><a id="l01525" name="l01525"></a><span class="lineno"> 1525</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01526" name="l01526"></a><span class="lineno"> 1526</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85acb5e100e5a9a3e7f6d1fd97512215282">icon::error</a>:</div>
<div class="line"><a id="l01527" name="l01527"></a><span class="lineno"> 1527</span> full_message = <span class="stringliteral">&quot;&quot;</span>;</div>
<div class="line"><a id="l01528" name="l01528"></a><span class="lineno"> 1528</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01529" name="l01529"></a><span class="lineno"> 1529</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85a5494af1f14a8c19939968c3e9e2d4f79">icon::question</a>:</div>
<div class="line"><a id="l01530" name="l01530"></a><span class="lineno"> 1530</span> full_message = <span class="stringliteral">&quot;&quot;</span>;</div>
<div class="line"><a id="l01531" name="l01531"></a><span class="lineno"> 1531</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01532" name="l01532"></a><span class="lineno"> 1532</span> <span class="comment">/* case icon::info: */</span> <span class="keywordflow">default</span>:</div>
<div class="line"><a id="l01533" name="l01533"></a><span class="lineno"> 1533</span> full_message = <span class="stringliteral">&quot;&quot;</span>;</div>
<div class="line"><a id="l01534" name="l01534"></a><span class="lineno"> 1534</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01535" name="l01535"></a><span class="lineno"> 1535</span> }</div>
<div class="line"><a id="l01536" name="l01536"></a><span class="lineno"> 1536</span> </div>
<div class="line"><a id="l01537" name="l01537"></a><span class="lineno"> 1537</span> full_message += <span class="charliteral">&#39; &#39;</span> + title + <span class="stringliteral">&quot;\n\n&quot;</span> + text;</div>
<div class="line"><a id="l01538" name="l01538"></a><span class="lineno"> 1538</span> </div>
<div class="line"><a id="l01539" name="l01539"></a><span class="lineno"> 1539</span> <span class="comment">// This does not really start an async task; it just passes the</span></div>
<div class="line"><a id="l01540" name="l01540"></a><span class="lineno"> 1540</span> <span class="comment">// EM_ASM_INT return value to a fake start() function.</span></div>
<div class="line"><a id="l01541" name="l01541"></a><span class="lineno"> 1541</span> <a class="code hl_variable" href="classpfd_1_1internal_1_1dialog.html#a91f4b2666fb920a7859df9cdc079502d">m_async</a>-&gt;start(EM_ASM_INT(</div>
<div class="line"><a id="l01542" name="l01542"></a><span class="lineno"> 1542</span> {</div>
<div class="line"><a id="l01543" name="l01543"></a><span class="lineno"> 1543</span> <span class="keywordflow">if</span> ($1)</div>
<div class="line"><a id="l01544" name="l01544"></a><span class="lineno"> 1544</span> <span class="keywordflow">return</span> window.confirm(UTF8ToString($0)) ? 0 : -1;</div>
<div class="line"><a id="l01545" name="l01545"></a><span class="lineno"> 1545</span> alert(UTF8ToString($0));</div>
<div class="line"><a id="l01546" name="l01546"></a><span class="lineno"> 1546</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l01547" name="l01547"></a><span class="lineno"> 1547</span> },</div>
<div class="line"><a id="l01548" name="l01548"></a><span class="lineno"> 1548</span> full_message.c_str(), _choice == <a class="code hl_enumvalue" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a809da5df9c86c6426c8d8db2934d3f51">choice::ok_cancel</a>));</div>
<div class="line"><a id="l01549" name="l01549"></a><span class="lineno"> 1549</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l01550" name="l01550"></a><span class="lineno"> 1550</span> <span class="keyword">auto</span> command = <a class="code hl_function" href="classpfd_1_1internal_1_1dialog.html#aadaf6cb30620c85f4b97993e3c819188">desktop_helper</a>();</div>
<div class="line"><a id="l01551" name="l01551"></a><span class="lineno"> 1551</span> </div>
<div class="line"><a id="l01552" name="l01552"></a><span class="lineno"> 1552</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classpfd_1_1settings.html#a4e22d6fb43d387ddc980bf6e2a6aad24">is_osascript</a>()) {</div>
<div class="line"><a id="l01553" name="l01553"></a><span class="lineno"> 1553</span> std::string script = <span class="stringliteral">&quot;display dialog &quot;</span> + <a class="code hl_function" href="classpfd_1_1internal_1_1dialog.html#adc0ec6f5c8137cbdb0ea6669b5263a73">osascript_quote</a>(text) + <span class="stringliteral">&quot; with title &quot;</span> + <a class="code hl_function" href="classpfd_1_1internal_1_1dialog.html#adc0ec6f5c8137cbdb0ea6669b5263a73">osascript_quote</a>(title);</div>
<div class="line"><a id="l01554" name="l01554"></a><span class="lineno"> 1554</span> <span class="keyword">auto</span> if_cancel = <a class="code hl_enumvalue" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a10aec35353f9c4096a71c38654c3d402">button::cancel</a>;</div>
<div class="line"><a id="l01555" name="l01555"></a><span class="lineno"> 1555</span> <span class="keywordflow">switch</span> (_choice) {</div>
<div class="line"><a id="l01556" name="l01556"></a><span class="lineno"> 1556</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a809da5df9c86c6426c8d8db2934d3f51">choice::ok_cancel</a>:</div>
<div class="line"><a id="l01557" name="l01557"></a><span class="lineno"> 1557</span> script += <span class="stringliteral">&quot;buttons {\&quot;OK\&quot;, \&quot;Cancel\&quot;}&quot;</span></div>
<div class="line"><a id="l01558" name="l01558"></a><span class="lineno"> 1558</span> <span class="stringliteral">&quot; default button \&quot;OK\&quot;&quot;</span></div>
<div class="line"><a id="l01559" name="l01559"></a><span class="lineno"> 1559</span> <span class="stringliteral">&quot; cancel button \&quot;Cancel\&quot;&quot;</span>;</div>
<div class="line"><a id="l01560" name="l01560"></a><span class="lineno"> 1560</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01561" name="l01561"></a><span class="lineno"> 1561</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a20f0596c21ad67a7fda598ffc7d038d1">choice::yes_no</a>:</div>
<div class="line"><a id="l01562" name="l01562"></a><span class="lineno"> 1562</span> script += <span class="stringliteral">&quot;buttons {\&quot;Yes\&quot;, \&quot;No\&quot;}&quot;</span></div>
<div class="line"><a id="l01563" name="l01563"></a><span class="lineno"> 1563</span> <span class="stringliteral">&quot; default button \&quot;Yes\&quot;&quot;</span></div>
<div class="line"><a id="l01564" name="l01564"></a><span class="lineno"> 1564</span> <span class="stringliteral">&quot; cancel button \&quot;No\&quot;&quot;</span>;</div>
<div class="line"><a id="l01565" name="l01565"></a><span class="lineno"> 1565</span> if_cancel = <a class="code hl_enumvalue" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a7fa3b767c460b54a2be4d49030b349c7">button::no</a>;</div>
<div class="line"><a id="l01566" name="l01566"></a><span class="lineno"> 1566</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01567" name="l01567"></a><span class="lineno"> 1567</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a5c5cb337bb234e240912dc139048038c">choice::yes_no_cancel</a>:</div>
<div class="line"><a id="l01568" name="l01568"></a><span class="lineno"> 1568</span> script += <span class="stringliteral">&quot;buttons {\&quot;Yes\&quot;, \&quot;No\&quot;, \&quot;Cancel\&quot;}&quot;</span></div>
<div class="line"><a id="l01569" name="l01569"></a><span class="lineno"> 1569</span> <span class="stringliteral">&quot; default button \&quot;Yes\&quot;&quot;</span></div>
<div class="line"><a id="l01570" name="l01570"></a><span class="lineno"> 1570</span> <span class="stringliteral">&quot; cancel button \&quot;Cancel\&quot;&quot;</span>;</div>
<div class="line"><a id="l01571" name="l01571"></a><span class="lineno"> 1571</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01572" name="l01572"></a><span class="lineno"> 1572</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a7928e609b1665227bcb71b20d431fd6a">choice::retry_cancel</a>:</div>
<div class="line"><a id="l01573" name="l01573"></a><span class="lineno"> 1573</span> script += <span class="stringliteral">&quot;buttons {\&quot;Retry\&quot;, \&quot;Cancel\&quot;}&quot;</span></div>
<div class="line"><a id="l01574" name="l01574"></a><span class="lineno"> 1574</span> <span class="stringliteral">&quot; default button \&quot;Retry\&quot;&quot;</span></div>
<div class="line"><a id="l01575" name="l01575"></a><span class="lineno"> 1575</span> <span class="stringliteral">&quot; cancel button \&quot;Cancel\&quot;&quot;</span>;</div>
<div class="line"><a id="l01576" name="l01576"></a><span class="lineno"> 1576</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01577" name="l01577"></a><span class="lineno"> 1577</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a9df771aa8f010c4b928e42a8979d5609">choice::abort_retry_ignore</a>:</div>
<div class="line"><a id="l01578" name="l01578"></a><span class="lineno"> 1578</span> script += <span class="stringliteral">&quot;buttons {\&quot;Abort\&quot;, \&quot;Retry\&quot;, \&quot;Ignore\&quot;}&quot;</span></div>
<div class="line"><a id="l01579" name="l01579"></a><span class="lineno"> 1579</span> <span class="stringliteral">&quot; default button \&quot;Abort\&quot;&quot;</span></div>
<div class="line"><a id="l01580" name="l01580"></a><span class="lineno"> 1580</span> <span class="stringliteral">&quot; cancel button \&quot;Retry\&quot;&quot;</span>;</div>
<div class="line"><a id="l01581" name="l01581"></a><span class="lineno"> 1581</span> if_cancel = <a class="code hl_enumvalue" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a165e6d21e0a2cc9ebb32ca05f90e0fa7">button::retry</a>;</div>
<div class="line"><a id="l01582" name="l01582"></a><span class="lineno"> 1582</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01583" name="l01583"></a><span class="lineno"> 1583</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a444bcb3a3fcf8389296c49467f27e1d6">choice::ok</a>:</div>
<div class="line"><a id="l01584" name="l01584"></a><span class="lineno"> 1584</span> <span class="keywordflow">default</span>:</div>
<div class="line"><a id="l01585" name="l01585"></a><span class="lineno"> 1585</span> script += <span class="stringliteral">&quot;buttons {\&quot;OK\&quot;}&quot;</span></div>
<div class="line"><a id="l01586" name="l01586"></a><span class="lineno"> 1586</span> <span class="stringliteral">&quot; default button \&quot;OK\&quot;&quot;</span></div>
<div class="line"><a id="l01587" name="l01587"></a><span class="lineno"> 1587</span> <span class="stringliteral">&quot; cancel button \&quot;OK\&quot;&quot;</span>;</div>
<div class="line"><a id="l01588" name="l01588"></a><span class="lineno"> 1588</span> if_cancel = <a class="code hl_enumvalue" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a444bcb3a3fcf8389296c49467f27e1d6">button::ok</a>;</div>
<div class="line"><a id="l01589" name="l01589"></a><span class="lineno"> 1589</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01590" name="l01590"></a><span class="lineno"> 1590</span> }</div>
<div class="line"><a id="l01591" name="l01591"></a><span class="lineno"> 1591</span> <a class="code hl_variable" href="classpfd_1_1message.html#abd55bdeb662938db1c8e6747d3acb7b4">m_mappings</a>[1] = if_cancel;</div>
<div class="line"><a id="l01592" name="l01592"></a><span class="lineno"> 1592</span> <a class="code hl_variable" href="classpfd_1_1message.html#abd55bdeb662938db1c8e6747d3acb7b4">m_mappings</a>[256] = if_cancel; <span class="comment">// XXX: I think this was never correct</span></div>
<div class="line"><a id="l01593" name="l01593"></a><span class="lineno"> 1593</span> script += <span class="stringliteral">&quot; with icon &quot;</span>;</div>
<div class="line"><a id="l01594" name="l01594"></a><span class="lineno"> 1594</span> <span class="keywordflow">switch</span> (_icon) {</div>
<div class="line"><a id="l01595" name="l01595"></a><span class="lineno"> 1595</span><span class="preprocessor">#define PFD_OSX_ICON(n) \</span></div>
<div class="line"><a id="l01596" name="l01596"></a><span class="lineno"> 1596</span><span class="preprocessor"> &quot;alias ((path to library folder from system domain) as text &quot; \</span></div>
<div class="line"><a id="l01597" name="l01597"></a><span class="lineno"> 1597</span><span class="preprocessor"> &quot;&amp; \&quot;CoreServices:CoreTypes.bundle:Contents:Resources:&quot; n &quot;.icns\&quot;)&quot;</span></div>
<div class="line"><a id="l01598" name="l01598"></a><span class="lineno"> 1598</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85acaf9b6b99962bf5c2264824231d7a40c">icon::info</a>:</div>
<div class="line"><a id="l01599" name="l01599"></a><span class="lineno"> 1599</span> <span class="keywordflow">default</span>:</div>
<div class="line"><a id="l01600" name="l01600"></a><span class="lineno"> 1600</span> script += <a class="code hl_define" href="portable-file-dialogs_8h.html#a0851d0adb9dc3b40d5c9961d6325ca33">PFD_OSX_ICON</a>(<span class="stringliteral">&quot;ToolBarInfo&quot;</span>);</div>
<div class="line"><a id="l01601" name="l01601"></a><span class="lineno"> 1601</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01602" name="l01602"></a><span class="lineno"> 1602</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85a7b83d3f08fa392b79e3f553b585971cd">icon::warning</a>:</div>
<div class="line"><a id="l01603" name="l01603"></a><span class="lineno"> 1603</span> script += <span class="stringliteral">&quot;caution&quot;</span>;</div>
<div class="line"><a id="l01604" name="l01604"></a><span class="lineno"> 1604</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01605" name="l01605"></a><span class="lineno"> 1605</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85acb5e100e5a9a3e7f6d1fd97512215282">icon::error</a>:</div>
<div class="line"><a id="l01606" name="l01606"></a><span class="lineno"> 1606</span> script += <span class="stringliteral">&quot;stop&quot;</span>;</div>
<div class="line"><a id="l01607" name="l01607"></a><span class="lineno"> 1607</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01608" name="l01608"></a><span class="lineno"> 1608</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85a5494af1f14a8c19939968c3e9e2d4f79">icon::question</a>:</div>
<div class="line"><a id="l01609" name="l01609"></a><span class="lineno"> 1609</span> script += <a class="code hl_define" href="portable-file-dialogs_8h.html#a0851d0adb9dc3b40d5c9961d6325ca33">PFD_OSX_ICON</a>(<span class="stringliteral">&quot;GenericQuestionMarkIcon&quot;</span>);</div>
<div class="line"><a id="l01610" name="l01610"></a><span class="lineno"> 1610</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01611" name="l01611"></a><span class="lineno"> 1611</span><span class="preprocessor">#undef PFD_OSX_ICON</span></div>
<div class="line"><a id="l01612" name="l01612"></a><span class="lineno"> 1612</span> }</div>
<div class="line"><a id="l01613" name="l01613"></a><span class="lineno"> 1613</span> </div>
<div class="line"><a id="l01614" name="l01614"></a><span class="lineno"> 1614</span> command.push_back(<span class="stringliteral">&quot;-e&quot;</span>);</div>
<div class="line"><a id="l01615" name="l01615"></a><span class="lineno"> 1615</span> command.push_back(script);</div>
<div class="line"><a id="l01616" name="l01616"></a><span class="lineno"> 1616</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classpfd_1_1settings.html#a08e4a5b150186d77158a974cc8c2d4a2">is_zenity</a>()) {</div>
<div class="line"><a id="l01617" name="l01617"></a><span class="lineno"> 1617</span> <span class="keywordflow">switch</span> (_choice) {</div>
<div class="line"><a id="l01618" name="l01618"></a><span class="lineno"> 1618</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a809da5df9c86c6426c8d8db2934d3f51">choice::ok_cancel</a>:</div>
<div class="line"><a id="l01619" name="l01619"></a><span class="lineno"> 1619</span> command.insert(command.end(), { <span class="stringliteral">&quot;--question&quot;</span>, <span class="stringliteral">&quot;--cancel-label=Cancel&quot;</span>, <span class="stringliteral">&quot;--ok-label=OK&quot;</span> });</div>
<div class="line"><a id="l01620" name="l01620"></a><span class="lineno"> 1620</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01621" name="l01621"></a><span class="lineno"> 1621</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a20f0596c21ad67a7fda598ffc7d038d1">choice::yes_no</a>:</div>
<div class="line"><a id="l01622" name="l01622"></a><span class="lineno"> 1622</span> <span class="comment">// Do not use standard --question because it causes “No” to return -1,</span></div>
<div class="line"><a id="l01623" name="l01623"></a><span class="lineno"> 1623</span> <span class="comment">// which is inconsistent with the “Yes/No/Cancel” mode below.</span></div>
<div class="line"><a id="l01624" name="l01624"></a><span class="lineno"> 1624</span> command.insert(command.end(), { <span class="stringliteral">&quot;--question&quot;</span>, <span class="stringliteral">&quot;--switch&quot;</span>, <span class="stringliteral">&quot;--extra-button=No&quot;</span>, <span class="stringliteral">&quot;--extra-button=Yes&quot;</span> });</div>
<div class="line"><a id="l01625" name="l01625"></a><span class="lineno"> 1625</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01626" name="l01626"></a><span class="lineno"> 1626</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a5c5cb337bb234e240912dc139048038c">choice::yes_no_cancel</a>:</div>
<div class="line"><a id="l01627" name="l01627"></a><span class="lineno"> 1627</span> command.insert(command.end(), { <span class="stringliteral">&quot;--question&quot;</span>, <span class="stringliteral">&quot;--switch&quot;</span>, <span class="stringliteral">&quot;--extra-button=Cancel&quot;</span>, <span class="stringliteral">&quot;--extra-button=No&quot;</span>,</div>
<div class="line"><a id="l01628" name="l01628"></a><span class="lineno"> 1628</span> <span class="stringliteral">&quot;--extra-button=Yes&quot;</span> });</div>
<div class="line"><a id="l01629" name="l01629"></a><span class="lineno"> 1629</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01630" name="l01630"></a><span class="lineno"> 1630</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a7928e609b1665227bcb71b20d431fd6a">choice::retry_cancel</a>:</div>
<div class="line"><a id="l01631" name="l01631"></a><span class="lineno"> 1631</span> command.insert(command.end(),</div>
<div class="line"><a id="l01632" name="l01632"></a><span class="lineno"> 1632</span> { <span class="stringliteral">&quot;--question&quot;</span>, <span class="stringliteral">&quot;--switch&quot;</span>, <span class="stringliteral">&quot;--extra-button=Cancel&quot;</span>, <span class="stringliteral">&quot;--extra-button=Retry&quot;</span> });</div>
<div class="line"><a id="l01633" name="l01633"></a><span class="lineno"> 1633</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01634" name="l01634"></a><span class="lineno"> 1634</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a9df771aa8f010c4b928e42a8979d5609">choice::abort_retry_ignore</a>:</div>
<div class="line"><a id="l01635" name="l01635"></a><span class="lineno"> 1635</span> command.insert(command.end(), { <span class="stringliteral">&quot;--question&quot;</span>, <span class="stringliteral">&quot;--switch&quot;</span>, <span class="stringliteral">&quot;--extra-button=Ignore&quot;</span>,</div>
<div class="line"><a id="l01636" name="l01636"></a><span class="lineno"> 1636</span> <span class="stringliteral">&quot;--extra-button=Abort&quot;</span>, <span class="stringliteral">&quot;--extra-button=Retry&quot;</span> });</div>
<div class="line"><a id="l01637" name="l01637"></a><span class="lineno"> 1637</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01638" name="l01638"></a><span class="lineno"> 1638</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a444bcb3a3fcf8389296c49467f27e1d6">choice::ok</a>:</div>
<div class="line"><a id="l01639" name="l01639"></a><span class="lineno"> 1639</span> <span class="keywordflow">default</span>:</div>
<div class="line"><a id="l01640" name="l01640"></a><span class="lineno"> 1640</span> <span class="keywordflow">switch</span> (_icon) {</div>
<div class="line"><a id="l01641" name="l01641"></a><span class="lineno"> 1641</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85acb5e100e5a9a3e7f6d1fd97512215282">icon::error</a>:</div>
<div class="line"><a id="l01642" name="l01642"></a><span class="lineno"> 1642</span> command.push_back(<span class="stringliteral">&quot;--error&quot;</span>);</div>
<div class="line"><a id="l01643" name="l01643"></a><span class="lineno"> 1643</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01644" name="l01644"></a><span class="lineno"> 1644</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85a7b83d3f08fa392b79e3f553b585971cd">icon::warning</a>:</div>
<div class="line"><a id="l01645" name="l01645"></a><span class="lineno"> 1645</span> command.push_back(<span class="stringliteral">&quot;--warning&quot;</span>);</div>
<div class="line"><a id="l01646" name="l01646"></a><span class="lineno"> 1646</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01647" name="l01647"></a><span class="lineno"> 1647</span> <span class="keywordflow">default</span>:</div>
<div class="line"><a id="l01648" name="l01648"></a><span class="lineno"> 1648</span> command.push_back(<span class="stringliteral">&quot;--info&quot;</span>);</div>
<div class="line"><a id="l01649" name="l01649"></a><span class="lineno"> 1649</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01650" name="l01650"></a><span class="lineno"> 1650</span> }</div>
<div class="line"><a id="l01651" name="l01651"></a><span class="lineno"> 1651</span> }</div>
<div class="line"><a id="l01652" name="l01652"></a><span class="lineno"> 1652</span> </div>
<div class="line"><a id="l01653" name="l01653"></a><span class="lineno"> 1653</span> command.insert(command.end(), { <span class="stringliteral">&quot;--title&quot;</span>, title, <span class="stringliteral">&quot;--width=300&quot;</span>, <span class="stringliteral">&quot;--height=0&quot;</span>, <span class="comment">// sensible defaults</span></div>
<div class="line"><a id="l01654" name="l01654"></a><span class="lineno"> 1654</span> <span class="stringliteral">&quot;--no-markup&quot;</span>, <span class="comment">// do not interpret text as Pango markup</span></div>
<div class="line"><a id="l01655" name="l01655"></a><span class="lineno"> 1655</span> <span class="stringliteral">&quot;--text&quot;</span>, text, <span class="stringliteral">&quot;--icon-name=dialog-&quot;</span> + get_icon_name(_icon) });</div>
<div class="line"><a id="l01656" name="l01656"></a><span class="lineno"> 1656</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classpfd_1_1settings.html#aa79fb10eee785f1acd8d1ff34e226c89">is_kdialog</a>()) {</div>
<div class="line"><a id="l01657" name="l01657"></a><span class="lineno"> 1657</span> <span class="keywordflow">if</span> (_choice == <a class="code hl_enumvalue" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a444bcb3a3fcf8389296c49467f27e1d6">choice::ok</a>) {</div>
<div class="line"><a id="l01658" name="l01658"></a><span class="lineno"> 1658</span> <span class="keywordflow">switch</span> (_icon) {</div>
<div class="line"><a id="l01659" name="l01659"></a><span class="lineno"> 1659</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85acb5e100e5a9a3e7f6d1fd97512215282">icon::error</a>:</div>
<div class="line"><a id="l01660" name="l01660"></a><span class="lineno"> 1660</span> command.push_back(<span class="stringliteral">&quot;--error&quot;</span>);</div>
<div class="line"><a id="l01661" name="l01661"></a><span class="lineno"> 1661</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01662" name="l01662"></a><span class="lineno"> 1662</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85a7b83d3f08fa392b79e3f553b585971cd">icon::warning</a>:</div>
<div class="line"><a id="l01663" name="l01663"></a><span class="lineno"> 1663</span> command.push_back(<span class="stringliteral">&quot;--sorry&quot;</span>);</div>
<div class="line"><a id="l01664" name="l01664"></a><span class="lineno"> 1664</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01665" name="l01665"></a><span class="lineno"> 1665</span> <span class="keywordflow">default</span>:</div>
<div class="line"><a id="l01666" name="l01666"></a><span class="lineno"> 1666</span> command.push_back(<span class="stringliteral">&quot;--msgbox&quot;</span>);</div>
<div class="line"><a id="l01667" name="l01667"></a><span class="lineno"> 1667</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01668" name="l01668"></a><span class="lineno"> 1668</span> }</div>
<div class="line"><a id="l01669" name="l01669"></a><span class="lineno"> 1669</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l01670" name="l01670"></a><span class="lineno"> 1670</span> std::string <a class="code hl_enumeration" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aad">flag</a> = <span class="stringliteral">&quot;--&quot;</span>;</div>
<div class="line"><a id="l01671" name="l01671"></a><span class="lineno"> 1671</span> <span class="keywordflow">if</span> (_icon == <a class="code hl_enumvalue" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85a7b83d3f08fa392b79e3f553b585971cd">icon::warning</a> || _icon == <a class="code hl_enumvalue" href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85acb5e100e5a9a3e7f6d1fd97512215282">icon::error</a>)</div>
<div class="line"><a id="l01672" name="l01672"></a><span class="lineno"> 1672</span> <a class="code hl_enumeration" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aad">flag</a> += <span class="stringliteral">&quot;warning&quot;</span>;</div>
<div class="line"><a id="l01673" name="l01673"></a><span class="lineno"> 1673</span> <a class="code hl_enumeration" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aad">flag</a> += <span class="stringliteral">&quot;yesno&quot;</span>;</div>
<div class="line"><a id="l01674" name="l01674"></a><span class="lineno"> 1674</span> <span class="keywordflow">if</span> (_choice == <a class="code hl_enumvalue" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a5c5cb337bb234e240912dc139048038c">choice::yes_no_cancel</a>)</div>
<div class="line"><a id="l01675" name="l01675"></a><span class="lineno"> 1675</span> <a class="code hl_enumeration" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aad">flag</a> += <span class="stringliteral">&quot;cancel&quot;</span>;</div>
<div class="line"><a id="l01676" name="l01676"></a><span class="lineno"> 1676</span> command.push_back(<a class="code hl_enumeration" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aad">flag</a>);</div>
<div class="line"><a id="l01677" name="l01677"></a><span class="lineno"> 1677</span> <span class="keywordflow">if</span> (_choice == <a class="code hl_enumvalue" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a20f0596c21ad67a7fda598ffc7d038d1">choice::yes_no</a> || _choice == <a class="code hl_enumvalue" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a5c5cb337bb234e240912dc139048038c">choice::yes_no_cancel</a>) {</div>
<div class="line"><a id="l01678" name="l01678"></a><span class="lineno"> 1678</span> <a class="code hl_variable" href="classpfd_1_1message.html#abd55bdeb662938db1c8e6747d3acb7b4">m_mappings</a>[0] = <a class="code hl_enumvalue" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679aa6105c0a611b41b08f1209506350279e">button::yes</a>;</div>
<div class="line"><a id="l01679" name="l01679"></a><span class="lineno"> 1679</span> <a class="code hl_variable" href="classpfd_1_1message.html#abd55bdeb662938db1c8e6747d3acb7b4">m_mappings</a>[256] = <a class="code hl_enumvalue" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a7fa3b767c460b54a2be4d49030b349c7">button::no</a>;</div>
<div class="line"><a id="l01680" name="l01680"></a><span class="lineno"> 1680</span> }</div>
<div class="line"><a id="l01681" name="l01681"></a><span class="lineno"> 1681</span> }</div>
<div class="line"><a id="l01682" name="l01682"></a><span class="lineno"> 1682</span> </div>
<div class="line"><a id="l01683" name="l01683"></a><span class="lineno"> 1683</span> command.push_back(text);</div>
<div class="line"><a id="l01684" name="l01684"></a><span class="lineno"> 1684</span> command.push_back(<span class="stringliteral">&quot;--title&quot;</span>);</div>
<div class="line"><a id="l01685" name="l01685"></a><span class="lineno"> 1685</span> command.push_back(title);</div>
<div class="line"><a id="l01686" name="l01686"></a><span class="lineno"> 1686</span> </div>
<div class="line"><a id="l01687" name="l01687"></a><span class="lineno"> 1687</span> <span class="comment">// Must be after the above part</span></div>
<div class="line"><a id="l01688" name="l01688"></a><span class="lineno"> 1688</span> <span class="keywordflow">if</span> (_choice == <a class="code hl_enumvalue" href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a809da5df9c86c6426c8d8db2934d3f51">choice::ok_cancel</a>)</div>
<div class="line"><a id="l01689" name="l01689"></a><span class="lineno"> 1689</span> command.insert(command.end(), { <span class="stringliteral">&quot;--yes-label&quot;</span>, <span class="stringliteral">&quot;OK&quot;</span>, <span class="stringliteral">&quot;--no-label&quot;</span>, <span class="stringliteral">&quot;Cancel&quot;</span> });</div>
<div class="line"><a id="l01690" name="l01690"></a><span class="lineno"> 1690</span> }</div>
<div class="line"><a id="l01691" name="l01691"></a><span class="lineno"> 1691</span> </div>
<div class="line"><a id="l01692" name="l01692"></a><span class="lineno"> 1692</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">flags</a>(<a class="code hl_enumvalue" href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aadad9da28952c27749f53c23675db49d560">flag::is_verbose</a>))</div>
<div class="line"><a id="l01693" name="l01693"></a><span class="lineno"> 1693</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;pfd: &quot;</span> &lt;&lt; command &lt;&lt; std::endl;</div>
<div class="line"><a id="l01694" name="l01694"></a><span class="lineno"> 1694</span> </div>
<div class="line"><a id="l01695" name="l01695"></a><span class="lineno"> 1695</span> <a class="code hl_variable" href="classpfd_1_1internal_1_1dialog.html#a91f4b2666fb920a7859df9cdc079502d">m_async</a>-&gt;start_process(command);</div>
<div class="line"><a id="l01696" name="l01696"></a><span class="lineno"> 1696</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l01697" name="l01697"></a><span class="lineno"> 1697</span>}</div>
</div>
<div class="line"><a id="l01698" name="l01698"></a><span class="lineno"> 1698</span> </div>
<div class="foldopen" id="foldopen01699" data-start="{" data-end="}">
<div class="line"><a id="l01699" name="l01699"></a><span class="lineno"><a class="line" href="classpfd_1_1message.html#aeee673bf19f45328a7eb8ec2c1e01fc9"> 1699</a></span><span class="keyword">inline</span> <a class="code hl_enumeration" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679">button</a> <a class="code hl_function" href="classpfd_1_1message.html#aeee673bf19f45328a7eb8ec2c1e01fc9">message::result</a>() {</div>
<div class="line"><a id="l01700" name="l01700"></a><span class="lineno"> 1700</span> <span class="keywordtype">int</span> exit_code;</div>
<div class="line"><a id="l01701" name="l01701"></a><span class="lineno"> 1701</span> <span class="keyword">auto</span> ret = <a class="code hl_variable" href="classpfd_1_1internal_1_1dialog.html#a91f4b2666fb920a7859df9cdc079502d">m_async</a>-&gt;result(&amp;exit_code);</div>
<div class="line"><a id="l01702" name="l01702"></a><span class="lineno"> 1702</span> <span class="comment">// osascript will say &quot;button returned:Cancel\n&quot;</span></div>
<div class="line"><a id="l01703" name="l01703"></a><span class="lineno"> 1703</span> <span class="comment">// and others will just say &quot;Cancel\n&quot;</span></div>
<div class="line"><a id="l01704" name="l01704"></a><span class="lineno"> 1704</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespacepfd_1_1internal.html#aaf263cbe957efd58a37827691b430371">internal::ends_with</a>(ret, <span class="stringliteral">&quot;Cancel\n&quot;</span>))</div>
<div class="line"><a id="l01705" name="l01705"></a><span class="lineno"> 1705</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a10aec35353f9c4096a71c38654c3d402">button::cancel</a>;</div>
<div class="line"><a id="l01706" name="l01706"></a><span class="lineno"> 1706</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespacepfd_1_1internal.html#aaf263cbe957efd58a37827691b430371">internal::ends_with</a>(ret, <span class="stringliteral">&quot;OK\n&quot;</span>))</div>
<div class="line"><a id="l01707" name="l01707"></a><span class="lineno"> 1707</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a444bcb3a3fcf8389296c49467f27e1d6">button::ok</a>;</div>
<div class="line"><a id="l01708" name="l01708"></a><span class="lineno"> 1708</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespacepfd_1_1internal.html#aaf263cbe957efd58a37827691b430371">internal::ends_with</a>(ret, <span class="stringliteral">&quot;Yes\n&quot;</span>))</div>
<div class="line"><a id="l01709" name="l01709"></a><span class="lineno"> 1709</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679aa6105c0a611b41b08f1209506350279e">button::yes</a>;</div>
<div class="line"><a id="l01710" name="l01710"></a><span class="lineno"> 1710</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespacepfd_1_1internal.html#aaf263cbe957efd58a37827691b430371">internal::ends_with</a>(ret, <span class="stringliteral">&quot;No\n&quot;</span>))</div>
<div class="line"><a id="l01711" name="l01711"></a><span class="lineno"> 1711</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a7fa3b767c460b54a2be4d49030b349c7">button::no</a>;</div>
<div class="line"><a id="l01712" name="l01712"></a><span class="lineno"> 1712</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespacepfd_1_1internal.html#aaf263cbe957efd58a37827691b430371">internal::ends_with</a>(ret, <span class="stringliteral">&quot;Abort\n&quot;</span>))</div>
<div class="line"><a id="l01713" name="l01713"></a><span class="lineno"> 1713</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a5bb94a1c12413a2e5d14deabab29f2aa">button::abort</a>;</div>
<div class="line"><a id="l01714" name="l01714"></a><span class="lineno"> 1714</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespacepfd_1_1internal.html#aaf263cbe957efd58a37827691b430371">internal::ends_with</a>(ret, <span class="stringliteral">&quot;Retry\n&quot;</span>))</div>
<div class="line"><a id="l01715" name="l01715"></a><span class="lineno"> 1715</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a165e6d21e0a2cc9ebb32ca05f90e0fa7">button::retry</a>;</div>
<div class="line"><a id="l01716" name="l01716"></a><span class="lineno"> 1716</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespacepfd_1_1internal.html#aaf263cbe957efd58a37827691b430371">internal::ends_with</a>(ret, <span class="stringliteral">&quot;Ignore\n&quot;</span>))</div>
<div class="line"><a id="l01717" name="l01717"></a><span class="lineno"> 1717</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a567bc1d268f135496de3d5b946b691f3">button::ignore</a>;</div>
<div class="line"><a id="l01718" name="l01718"></a><span class="lineno"> 1718</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classpfd_1_1message.html#abd55bdeb662938db1c8e6747d3acb7b4">m_mappings</a>.count(exit_code) != 0)</div>
<div class="line"><a id="l01719" name="l01719"></a><span class="lineno"> 1719</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="classpfd_1_1message.html#abd55bdeb662938db1c8e6747d3acb7b4">m_mappings</a>[exit_code];</div>
<div class="line"><a id="l01720" name="l01720"></a><span class="lineno"> 1720</span> <span class="keywordflow">return</span> exit_code == 0 ? <a class="code hl_enumvalue" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a444bcb3a3fcf8389296c49467f27e1d6">button::ok</a> : <a class="code hl_enumvalue" href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a10aec35353f9c4096a71c38654c3d402">button::cancel</a>;</div>
<div class="line"><a id="l01721" name="l01721"></a><span class="lineno"> 1721</span>}</div>
</div>
<div class="line"><a id="l01722" name="l01722"></a><span class="lineno"> 1722</span> </div>
<div class="line"><a id="l01723" name="l01723"></a><span class="lineno"> 1723</span><span class="comment">// open_file implementation</span></div>
<div class="line"><a id="l01724" name="l01724"></a><span class="lineno"> 1724</span> </div>
<div class="foldopen" id="foldopen01725" data-start="{" data-end="}">
<div class="line"><a id="l01725" name="l01725"></a><span class="lineno"><a class="line" href="classpfd_1_1open__file.html#a6bb56d3681f50dee4294ddaf69e6ec82"> 1725</a></span><span class="keyword">inline</span> <a class="code hl_function" href="classpfd_1_1open__file.html#a6bb56d3681f50dee4294ddaf69e6ec82">open_file::open_file</a>(std::string <span class="keyword">const</span>&amp; title, std::string <span class="keyword">const</span>&amp; default_path <span class="comment">/* = &quot;&quot; */</span>,</div>
<div class="line"><a id="l01726" name="l01726"></a><span class="lineno"> 1726</span> std::vector&lt;std::string&gt; <span class="keyword">const</span>&amp; <a class="code hl_variable" href="ImguiUI_8cpp.html#a5fdd69bc3222fb4c44d3252f0b4641e3">filters</a> <span class="comment">/* = { &quot;All Files&quot;, &quot;*&quot; } */</span>,</div>
<div class="line"><a id="l01727" name="l01727"></a><span class="lineno"> 1727</span> <a class="code hl_enumeration" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997">opt</a> options <span class="comment">/* = opt::none */</span>)</div>
<div class="line"><a id="l01728" name="l01728"></a><span class="lineno"> 1728</span> : <a class="code hl_function" href="classpfd_1_1internal_1_1file__dialog.html#a16f53945e61d23aa9b7fc373701dd13f">file_dialog</a>(<a class="code hl_enumeration" href="classpfd_1_1internal_1_1file__dialog.html#a758847a3fab54bb12a67abbf9ea683fc">type</a>::<a class="code hl_enumvalue" href="classpfd_1_1internal_1_1file__dialog.html#a758847a3fab54bb12a67abbf9ea683fca4fd9423739ee4c950107a4eef324c559">open</a>, title, default_path, <a class="code hl_variable" href="ImguiUI_8cpp.html#a5fdd69bc3222fb4c44d3252f0b4641e3">filters</a>, options) {</div>
<div class="line"><a id="l01729" name="l01729"></a><span class="lineno"> 1729</span>}</div>
</div>
<div class="line"><a id="l01730" name="l01730"></a><span class="lineno"> 1730</span> </div>
<div class="foldopen" id="foldopen01731" data-start="{" data-end="}">
<div class="line"><a id="l01731" name="l01731"></a><span class="lineno"><a class="line" href="classpfd_1_1open__file.html#a47ceb23b5ed1e875318fd3d4ab6aff71"> 1731</a></span><span class="keyword">inline</span> <a class="code hl_function" href="classpfd_1_1open__file.html#a6bb56d3681f50dee4294ddaf69e6ec82">open_file::open_file</a>(std::string <span class="keyword">const</span>&amp; title, std::string <span class="keyword">const</span>&amp; default_path,</div>
<div class="line"><a id="l01732" name="l01732"></a><span class="lineno"> 1732</span> std::vector&lt;std::string&gt; <span class="keyword">const</span>&amp; <a class="code hl_variable" href="ImguiUI_8cpp.html#a5fdd69bc3222fb4c44d3252f0b4641e3">filters</a>, <span class="keywordtype">bool</span> allow_multiselect)</div>
<div class="line"><a id="l01733" name="l01733"></a><span class="lineno"> 1733</span> : <a class="code hl_function" href="classpfd_1_1open__file.html#a6bb56d3681f50dee4294ddaf69e6ec82">open_file</a>(title, default_path, <a class="code hl_variable" href="ImguiUI_8cpp.html#a5fdd69bc3222fb4c44d3252f0b4641e3">filters</a>, (allow_multiselect ? <a class="code hl_enumeration" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997">opt</a>::<a class="code hl_enumvalue" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997ab66abfe0e0c2ef7c545895c12a0a8837">multiselect</a> : <a class="code hl_enumeration" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997">opt</a>::<a class="code hl_enumvalue" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997a334c4a4c42fdb79d7ebc3e73b517e6f8">none</a>)) {</div>
<div class="line"><a id="l01734" name="l01734"></a><span class="lineno"> 1734</span>}</div>
</div>
<div class="line"><a id="l01735" name="l01735"></a><span class="lineno"> 1735</span> </div>
<div class="foldopen" id="foldopen01736" data-start="{" data-end="}">
<div class="line"><a id="l01736" name="l01736"></a><span class="lineno"><a class="line" href="classpfd_1_1open__file.html#ad0f01c7de1fbb94343053c671ced8b0b"> 1736</a></span><span class="keyword">inline</span> std::vector&lt;std::string&gt; <a class="code hl_function" href="classpfd_1_1open__file.html#ad0f01c7de1fbb94343053c671ced8b0b">open_file::result</a>() {</div>
<div class="line"><a id="l01737" name="l01737"></a><span class="lineno"> 1737</span> <span class="keywordflow">return</span> <a class="code hl_function" href="classpfd_1_1internal_1_1file__dialog.html#ae28b6dd37ab4e47885ce7ca25652212b">vector_result</a>();</div>
<div class="line"><a id="l01738" name="l01738"></a><span class="lineno"> 1738</span>}</div>
</div>
<div class="line"><a id="l01739" name="l01739"></a><span class="lineno"> 1739</span> </div>
<div class="line"><a id="l01740" name="l01740"></a><span class="lineno"> 1740</span><span class="comment">// save_file implementation</span></div>
<div class="line"><a id="l01741" name="l01741"></a><span class="lineno"> 1741</span> </div>
<div class="foldopen" id="foldopen01742" data-start="{" data-end="}">
<div class="line"><a id="l01742" name="l01742"></a><span class="lineno"><a class="line" href="classpfd_1_1save__file.html#a5405ec39e88121a9ebeae60ba26b4af1"> 1742</a></span><span class="keyword">inline</span> <a class="code hl_function" href="classpfd_1_1save__file.html#a5405ec39e88121a9ebeae60ba26b4af1">save_file::save_file</a>(std::string <span class="keyword">const</span>&amp; title, std::string <span class="keyword">const</span>&amp; default_path <span class="comment">/* = &quot;&quot; */</span>,</div>
<div class="line"><a id="l01743" name="l01743"></a><span class="lineno"> 1743</span> std::vector&lt;std::string&gt; <span class="keyword">const</span>&amp; <a class="code hl_variable" href="ImguiUI_8cpp.html#a5fdd69bc3222fb4c44d3252f0b4641e3">filters</a> <span class="comment">/* = { &quot;All Files&quot;, &quot;*&quot; } */</span>,</div>
<div class="line"><a id="l01744" name="l01744"></a><span class="lineno"> 1744</span> <a class="code hl_enumeration" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997">opt</a> options <span class="comment">/* = opt::none */</span>)</div>
<div class="line"><a id="l01745" name="l01745"></a><span class="lineno"> 1745</span> : <a class="code hl_function" href="classpfd_1_1internal_1_1file__dialog.html#a16f53945e61d23aa9b7fc373701dd13f">file_dialog</a>(<a class="code hl_enumeration" href="classpfd_1_1internal_1_1file__dialog.html#a758847a3fab54bb12a67abbf9ea683fc">type</a>::<a class="code hl_enumvalue" href="classpfd_1_1internal_1_1file__dialog.html#a758847a3fab54bb12a67abbf9ea683fca3b913d5d81b101f1f2b5cc544ef81f90">save</a>, title, default_path, <a class="code hl_variable" href="ImguiUI_8cpp.html#a5fdd69bc3222fb4c44d3252f0b4641e3">filters</a>, options) {</div>
<div class="line"><a id="l01746" name="l01746"></a><span class="lineno"> 1746</span>}</div>
</div>
<div class="line"><a id="l01747" name="l01747"></a><span class="lineno"> 1747</span> </div>
<div class="foldopen" id="foldopen01748" data-start="{" data-end="}">
<div class="line"><a id="l01748" name="l01748"></a><span class="lineno"><a class="line" href="classpfd_1_1save__file.html#a3e75a83822e14ddcf7cd95e397db400f"> 1748</a></span><span class="keyword">inline</span> <a class="code hl_function" href="classpfd_1_1save__file.html#a5405ec39e88121a9ebeae60ba26b4af1">save_file::save_file</a>(std::string <span class="keyword">const</span>&amp; title, std::string <span class="keyword">const</span>&amp; default_path,</div>
<div class="line"><a id="l01749" name="l01749"></a><span class="lineno"> 1749</span> std::vector&lt;std::string&gt; <span class="keyword">const</span>&amp; <a class="code hl_variable" href="ImguiUI_8cpp.html#a5fdd69bc3222fb4c44d3252f0b4641e3">filters</a>, <span class="keywordtype">bool</span> confirm_overwrite)</div>
<div class="line"><a id="l01750" name="l01750"></a><span class="lineno"> 1750</span> : <a class="code hl_function" href="classpfd_1_1save__file.html#a5405ec39e88121a9ebeae60ba26b4af1">save_file</a>(title, default_path, <a class="code hl_variable" href="ImguiUI_8cpp.html#a5fdd69bc3222fb4c44d3252f0b4641e3">filters</a>, (confirm_overwrite ? <a class="code hl_enumeration" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997">opt</a>::<a class="code hl_enumvalue" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997a334c4a4c42fdb79d7ebc3e73b517e6f8">none</a> : <a class="code hl_enumeration" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997">opt</a>::<a class="code hl_enumvalue" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997a8fc52a8161c68fcaeebdfdb500a36d4b">force_overwrite</a>)) {</div>
<div class="line"><a id="l01751" name="l01751"></a><span class="lineno"> 1751</span>}</div>
</div>
<div class="line"><a id="l01752" name="l01752"></a><span class="lineno"> 1752</span> </div>
<div class="foldopen" id="foldopen01753" data-start="{" data-end="}">
<div class="line"><a id="l01753" name="l01753"></a><span class="lineno"><a class="line" href="classpfd_1_1save__file.html#aefa58bfca841a51edb6a7ef2fa640904"> 1753</a></span><span class="keyword">inline</span> std::string <a class="code hl_function" href="classpfd_1_1save__file.html#aefa58bfca841a51edb6a7ef2fa640904">save_file::result</a>() {</div>
<div class="line"><a id="l01754" name="l01754"></a><span class="lineno"> 1754</span> <span class="keywordflow">return</span> <a class="code hl_function" href="classpfd_1_1internal_1_1file__dialog.html#ac916440e9dcefba5cbd4f0e5bb8acbff">string_result</a>();</div>
<div class="line"><a id="l01755" name="l01755"></a><span class="lineno"> 1755</span>}</div>
</div>
<div class="line"><a id="l01756" name="l01756"></a><span class="lineno"> 1756</span> </div>
<div class="line"><a id="l01757" name="l01757"></a><span class="lineno"> 1757</span><span class="comment">// select_folder implementation</span></div>
<div class="line"><a id="l01758" name="l01758"></a><span class="lineno"> 1758</span> </div>
<div class="foldopen" id="foldopen01759" data-start="{" data-end="}">
<div class="line"><a id="l01759" name="l01759"></a><span class="lineno"><a class="line" href="classpfd_1_1select__folder.html#ac6611de7b07e4366ffd2442d22ae1924"> 1759</a></span><span class="keyword">inline</span> <a class="code hl_function" href="classpfd_1_1select__folder.html#ac6611de7b07e4366ffd2442d22ae1924">select_folder::select_folder</a>(std::string <span class="keyword">const</span>&amp; title, std::string <span class="keyword">const</span>&amp; default_path <span class="comment">/* = &quot;&quot; */</span>,</div>
<div class="line"><a id="l01760" name="l01760"></a><span class="lineno"> 1760</span> <a class="code hl_enumeration" href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997">opt</a> options <span class="comment">/* = opt::none */</span>)</div>
<div class="line"><a id="l01761" name="l01761"></a><span class="lineno"> 1761</span> : <a class="code hl_function" href="classpfd_1_1internal_1_1file__dialog.html#a16f53945e61d23aa9b7fc373701dd13f">file_dialog</a>(<a class="code hl_enumeration" href="classpfd_1_1internal_1_1file__dialog.html#a758847a3fab54bb12a67abbf9ea683fc">type</a>::<a class="code hl_enumvalue" href="classpfd_1_1internal_1_1file__dialog.html#a758847a3fab54bb12a67abbf9ea683fca568b2ec66ef45be030a47ddc19bc7bba">folder</a>, title, default_path, {}, options) {</div>
<div class="line"><a id="l01762" name="l01762"></a><span class="lineno"> 1762</span>}</div>
</div>
<div class="line"><a id="l01763" name="l01763"></a><span class="lineno"> 1763</span> </div>
<div class="foldopen" id="foldopen01764" data-start="{" data-end="}">
<div class="line"><a id="l01764" name="l01764"></a><span class="lineno"><a class="line" href="classpfd_1_1select__folder.html#aa0f0d69af6be6b2627bf02440a921765"> 1764</a></span><span class="keyword">inline</span> std::string <a class="code hl_function" href="classpfd_1_1select__folder.html#aa0f0d69af6be6b2627bf02440a921765">select_folder::result</a>() {</div>
<div class="line"><a id="l01765" name="l01765"></a><span class="lineno"> 1765</span> <span class="keywordflow">return</span> <a class="code hl_function" href="classpfd_1_1internal_1_1file__dialog.html#ac916440e9dcefba5cbd4f0e5bb8acbff">string_result</a>();</div>
<div class="line"><a id="l01766" name="l01766"></a><span class="lineno"> 1766</span>}</div>
</div>
<div class="line"><a id="l01767" name="l01767"></a><span class="lineno"> 1767</span> </div>
<div class="line"><a id="l01768" name="l01768"></a><span class="lineno"> 1768</span><span class="preprocessor">#endif </span><span class="comment">// PFD_SKIP_IMPLEMENTATION</span></div>
<div class="line"><a id="l01769" name="l01769"></a><span class="lineno"> 1769</span> </div>
<div class="line"><a id="l01770" name="l01770"></a><span class="lineno"> 1770</span>} <span class="comment">// namespace pfd</span></div>
</div>
<div class="ttc" id="aImguiUI_8cpp_html_a5fdd69bc3222fb4c44d3252f0b4641e3"><div class="ttname"><a href="ImguiUI_8cpp.html#a5fdd69bc3222fb4c44d3252f0b4641e3">filters</a></div><div class="ttdeci">static const char * filters[3]</div><div class="ttdef"><b>Definition</b> ImguiUI.cpp:114</div></div>
<div class="ttc" id="aclasspfd_1_1internal_1_1dialog_html"><div class="ttname"><a href="classpfd_1_1internal_1_1dialog.html">pfd::internal::dialog</a></div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:259</div></div>
<div class="ttc" id="aclasspfd_1_1internal_1_1dialog_html_a05f9a4fcba8f8a9411d7dfaf18ee11ad"><div class="ttname"><a href="classpfd_1_1internal_1_1dialog.html#a05f9a4fcba8f8a9411d7dfaf18ee11ad">pfd::internal::dialog::dialog</a></div><div class="ttdeci">dialog()</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:888</div></div>
<div class="ttc" id="aclasspfd_1_1internal_1_1dialog_html_a1a4f28c3c2bbd1629f2f882314fff63e"><div class="ttname"><a href="classpfd_1_1internal_1_1dialog.html#a1a4f28c3c2bbd1629f2f882314fff63e">pfd::internal::dialog::shell_quote</a></div><div class="ttdeci">std::string shell_quote(std::string const &amp;str) const</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:963</div></div>
<div class="ttc" id="aclasspfd_1_1internal_1_1dialog_html_a226b1502acd1d2cb86e34dd3df36772a"><div class="ttname"><a href="classpfd_1_1internal_1_1dialog.html#a226b1502acd1d2cb86e34dd3df36772a">pfd::internal::dialog::kill</a></div><div class="ttdeci">bool kill() const</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:884</div></div>
<div class="ttc" id="aclasspfd_1_1internal_1_1dialog_html_a77f20e6063f83e601ce23ed4899907c6"><div class="ttname"><a href="classpfd_1_1internal_1_1dialog.html#a77f20e6063f83e601ce23ed4899907c6">pfd::internal::dialog::ready</a></div><div class="ttdeci">bool ready(int timeout=default_wait_timeout) const</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:880</div></div>
<div class="ttc" id="aclasspfd_1_1internal_1_1dialog_html_a91f4b2666fb920a7859df9cdc079502d"><div class="ttname"><a href="classpfd_1_1internal_1_1dialog.html#a91f4b2666fb920a7859df9cdc079502d">pfd::internal::dialog::m_async</a></div><div class="ttdeci">std::shared_ptr&lt; executor &gt; m_async</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:276</div></div>
<div class="ttc" id="aclasspfd_1_1internal_1_1dialog_html_aadaf6cb30620c85f4b97993e3c819188"><div class="ttname"><a href="classpfd_1_1internal_1_1dialog.html#aadaf6cb30620c85f4b97993e3c819188">pfd::internal::dialog::desktop_helper</a></div><div class="ttdeci">std::vector&lt; std::string &gt; desktop_helper() const</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:891</div></div>
<div class="ttc" id="aclasspfd_1_1internal_1_1dialog_html_aae2255eceb0b3b18b55d1618fd7e1635"><div class="ttname"><a href="classpfd_1_1internal_1_1dialog.html#aae2255eceb0b3b18b55d1618fd7e1635">pfd::internal::dialog::powershell_quote</a></div><div class="ttdeci">std::string powershell_quote(std::string const &amp;str) const</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:950</div></div>
<div class="ttc" id="aclasspfd_1_1internal_1_1dialog_html_ac906c01d0365c13c9066cea857fd258a"><div class="ttname"><a href="classpfd_1_1internal_1_1dialog.html#ac906c01d0365c13c9066cea857fd258a">pfd::internal::dialog::buttons_to_name</a></div><div class="ttdeci">static std::string buttons_to_name(choice _choice)</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:903</div></div>
<div class="ttc" id="aclasspfd_1_1internal_1_1dialog_html_adc0ec6f5c8137cbdb0ea6669b5263a73"><div class="ttname"><a href="classpfd_1_1internal_1_1dialog.html#adc0ec6f5c8137cbdb0ea6669b5263a73">pfd::internal::dialog::osascript_quote</a></div><div class="ttdeci">std::string osascript_quote(std::string const &amp;str) const</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:957</div></div>
<div class="ttc" id="aclasspfd_1_1internal_1_1dialog_html_ae94362bed052ab6050e38852712cb97a"><div class="ttname"><a href="classpfd_1_1internal_1_1dialog.html#ae94362bed052ab6050e38852712cb97a">pfd::internal::dialog::get_icon_name</a></div><div class="ttdeci">static std::string get_icon_name(icon _icon)</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:920</div></div>
<div class="ttc" id="aclasspfd_1_1internal_1_1executor_html"><div class="ttname"><a href="classpfd_1_1internal_1_1executor.html">pfd::internal::executor</a></div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:162</div></div>
<div class="ttc" id="aclasspfd_1_1internal_1_1executor_html_a062c9dc73980cd66d334c945c9617d9d"><div class="ttname"><a href="classpfd_1_1internal_1_1executor.html#a062c9dc73980cd66d334c945c9617d9d">pfd::internal::executor::m_stdout</a></div><div class="ttdeci">std::string m_stdout</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:189</div></div>
<div class="ttc" id="aclasspfd_1_1internal_1_1executor_html_a07116b98b28332c42946e956f7edd2ae"><div class="ttname"><a href="classpfd_1_1internal_1_1executor.html#a07116b98b28332c42946e956f7edd2ae">pfd::internal::executor::result</a></div><div class="ttdeci">std::string result(int *exit_code=nullptr)</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:627</div></div>
<div class="ttc" id="aclasspfd_1_1internal_1_1executor_html_a2730c595c2994a227d46aa6b74b95987"><div class="ttname"><a href="classpfd_1_1internal_1_1executor.html#a2730c595c2994a227d46aa6b74b95987">pfd::internal::executor::m_fd</a></div><div class="ttdeci">int m_fd</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:201</div></div>
<div class="ttc" id="aclasspfd_1_1internal_1_1executor_html_a2d46b9964c60985ea8406c4092393be3"><div class="ttname"><a href="classpfd_1_1internal_1_1executor.html#a2d46b9964c60985ea8406c4092393be3">pfd::internal::executor::~executor</a></div><div class="ttdeci">~executor()</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:736</div></div>
<div class="ttc" id="aclasspfd_1_1internal_1_1executor_html_a2e65a18556b3de93dafd6fabe3786277"><div class="ttname"><a href="classpfd_1_1internal_1_1executor.html#a2e65a18556b3de93dafd6fabe3786277">pfd::internal::executor::stop</a></div><div class="ttdeci">void stop()</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:792</div></div>
<div class="ttc" id="aclasspfd_1_1internal_1_1executor_html_a70760965e1179f84aee59abd92c7129e"><div class="ttname"><a href="classpfd_1_1internal_1_1executor.html#a70760965e1179f84aee59abd92c7129e">pfd::internal::executor::m_running</a></div><div class="ttdeci">bool m_running</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:188</div></div>
<div class="ttc" id="aclasspfd_1_1internal_1_1executor_html_a7a164503ced150f7ad6c3e6084d4ff9b"><div class="ttname"><a href="classpfd_1_1internal_1_1executor.html#a7a164503ced150f7ad6c3e6084d4ff9b">pfd::internal::executor::m_pid</a></div><div class="ttdeci">pid_t m_pid</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:200</div></div>
<div class="ttc" id="aclasspfd_1_1internal_1_1executor_html_a7eb363f3dc9d6dc21f1a8b6ce6a33679"><div class="ttname"><a href="classpfd_1_1internal_1_1executor.html#a7eb363f3dc9d6dc21f1a8b6ce6a33679">pfd::internal::executor::ready</a></div><div class="ttdeci">bool ready(int timeout=default_wait_timeout)</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:740</div></div>
<div class="ttc" id="aclasspfd_1_1internal_1_1executor_html_aa8dc7e75bd1ac2cf825fa04ed657c0aa"><div class="ttname"><a href="classpfd_1_1internal_1_1executor.html#aa8dc7e75bd1ac2cf825fa04ed657c0aa">pfd::internal::executor::dialog</a></div><div class="ttdeci">friend class dialog</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:163</div></div>
<div class="ttc" id="aclasspfd_1_1internal_1_1executor_html_ab7766273bae572779a404c5543268406"><div class="ttname"><a href="classpfd_1_1internal_1_1executor.html#ab7766273bae572779a404c5543268406">pfd::internal::executor::kill</a></div><div class="ttdeci">bool kill()</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:634</div></div>
<div class="ttc" id="aclasspfd_1_1internal_1_1executor_html_adcb1fcd88381030ada3d8f6d07dd8d6e"><div class="ttname"><a href="classpfd_1_1internal_1_1executor.html#adcb1fcd88381030ada3d8f6d07dd8d6e">pfd::internal::executor::start_process</a></div><div class="ttdeci">void start_process(std::vector&lt; std::string &gt; const &amp;command)</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:693</div></div>
<div class="ttc" id="aclasspfd_1_1internal_1_1executor_html_ae93cd2a96d031923e697d5f85cc5dfe7"><div class="ttname"><a href="classpfd_1_1internal_1_1executor.html#ae93cd2a96d031923e697d5f85cc5dfe7">pfd::internal::executor::m_exit_code</a></div><div class="ttdeci">int m_exit_code</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:190</div></div>
<div class="ttc" id="aclasspfd_1_1internal_1_1file__dialog_html"><div class="ttname"><a href="classpfd_1_1internal_1_1file__dialog.html">pfd::internal::file_dialog</a></div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:279</div></div>
<div class="ttc" id="aclasspfd_1_1internal_1_1file__dialog_html_a16f53945e61d23aa9b7fc373701dd13f"><div class="ttname"><a href="classpfd_1_1internal_1_1file__dialog.html#a16f53945e61d23aa9b7fc373701dd13f">pfd::internal::file_dialog::file_dialog</a></div><div class="ttdeci">file_dialog(type in_type, std::string const &amp;title, std::string const &amp;default_path=&quot;&quot;, std::vector&lt; std::string &gt; const &amp;filters={}, opt options=opt::none)</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:969</div></div>
<div class="ttc" id="aclasspfd_1_1internal_1_1file__dialog_html_a758847a3fab54bb12a67abbf9ea683fc"><div class="ttname"><a href="classpfd_1_1internal_1_1file__dialog.html#a758847a3fab54bb12a67abbf9ea683fc">pfd::internal::file_dialog::type</a></div><div class="ttdeci">type</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:281</div></div>
<div class="ttc" id="aclasspfd_1_1internal_1_1file__dialog_html_a758847a3fab54bb12a67abbf9ea683fca3b913d5d81b101f1f2b5cc544ef81f90"><div class="ttname"><a href="classpfd_1_1internal_1_1file__dialog.html#a758847a3fab54bb12a67abbf9ea683fca3b913d5d81b101f1f2b5cc544ef81f90">pfd::internal::file_dialog::save</a></div><div class="ttdeci">@ save</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:283</div></div>
<div class="ttc" id="aclasspfd_1_1internal_1_1file__dialog_html_a758847a3fab54bb12a67abbf9ea683fca4fd9423739ee4c950107a4eef324c559"><div class="ttname"><a href="classpfd_1_1internal_1_1file__dialog.html#a758847a3fab54bb12a67abbf9ea683fca4fd9423739ee4c950107a4eef324c559">pfd::internal::file_dialog::open</a></div><div class="ttdeci">@ open</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:282</div></div>
<div class="ttc" id="aclasspfd_1_1internal_1_1file__dialog_html_a758847a3fab54bb12a67abbf9ea683fca568b2ec66ef45be030a47ddc19bc7bba"><div class="ttname"><a href="classpfd_1_1internal_1_1file__dialog.html#a758847a3fab54bb12a67abbf9ea683fca568b2ec66ef45be030a47ddc19bc7bba">pfd::internal::file_dialog::folder</a></div><div class="ttdeci">@ folder</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:284</div></div>
<div class="ttc" id="aclasspfd_1_1internal_1_1file__dialog_html_ac916440e9dcefba5cbd4f0e5bb8acbff"><div class="ttname"><a href="classpfd_1_1internal_1_1file__dialog.html#ac916440e9dcefba5cbd4f0e5bb8acbff">pfd::internal::file_dialog::string_result</a></div><div class="ttdeci">std::string string_result()</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:1245</div></div>
<div class="ttc" id="aclasspfd_1_1internal_1_1file__dialog_html_ae28b6dd37ab4e47885ce7ca25652212b"><div class="ttname"><a href="classpfd_1_1internal_1_1file__dialog.html#ae28b6dd37ab4e47885ce7ca25652212b">pfd::internal::file_dialog::vector_result</a></div><div class="ttdeci">std::vector&lt; std::string &gt; vector_result()</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:1258</div></div>
<div class="ttc" id="aclasspfd_1_1internal_1_1platform_html"><div class="ttname"><a href="classpfd_1_1internal_1_1platform.html">pfd::internal::platform</a></div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:205</div></div>
<div class="ttc" id="aclasspfd_1_1message_html"><div class="ttname"><a href="classpfd_1_1message.html">pfd::message</a></div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:332</div></div>
<div class="ttc" id="aclasspfd_1_1message_html_a38e0ce9a58c006011708a4968be17833"><div class="ttname"><a href="classpfd_1_1message.html#a38e0ce9a58c006011708a4968be17833">pfd::message::message</a></div><div class="ttdeci">message(std::string const &amp;title, std::string const &amp;text, choice _choice=choice::ok_cancel, icon _icon=icon::info)</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:1461</div></div>
<div class="ttc" id="aclasspfd_1_1message_html_abd55bdeb662938db1c8e6747d3acb7b4"><div class="ttname"><a href="classpfd_1_1message.html#abd55bdeb662938db1c8e6747d3acb7b4">pfd::message::m_mappings</a></div><div class="ttdeci">std::map&lt; int, button &gt; m_mappings</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:341</div></div>
<div class="ttc" id="aclasspfd_1_1message_html_aeee673bf19f45328a7eb8ec2c1e01fc9"><div class="ttname"><a href="classpfd_1_1message.html#aeee673bf19f45328a7eb8ec2c1e01fc9">pfd::message::result</a></div><div class="ttdeci">button result()</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:1699</div></div>
<div class="ttc" id="aclasspfd_1_1notify_html_a64f87055f567ed5720a357b6844eccb7"><div class="ttname"><a href="classpfd_1_1notify.html#a64f87055f567ed5720a357b6844eccb7">pfd::notify::notify</a></div><div class="ttdeci">notify(std::string const &amp;title, std::string const &amp;message, icon _icon=icon::info)</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:1355</div></div>
<div class="ttc" id="aclasspfd_1_1open__file_html_a6bb56d3681f50dee4294ddaf69e6ec82"><div class="ttname"><a href="classpfd_1_1open__file.html#a6bb56d3681f50dee4294ddaf69e6ec82">pfd::open_file::open_file</a></div><div class="ttdeci">open_file(std::string const &amp;title, std::string const &amp;default_path=&quot;&quot;, std::vector&lt; std::string &gt; const &amp;filters={ &quot;All Files&quot;, &quot;*&quot; }, opt options=opt::none)</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:1725</div></div>
<div class="ttc" id="aclasspfd_1_1open__file_html_ad0f01c7de1fbb94343053c671ced8b0b"><div class="ttname"><a href="classpfd_1_1open__file.html#ad0f01c7de1fbb94343053c671ced8b0b">pfd::open_file::result</a></div><div class="ttdeci">std::vector&lt; std::string &gt; result()</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:1736</div></div>
<div class="ttc" id="aclasspfd_1_1path_html"><div class="ttname"><a href="classpfd_1_1path.html">pfd::path</a></div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:313</div></div>
<div class="ttc" id="aclasspfd_1_1path_html_a1205ad5165c748f91ffe939687e095a2"><div class="ttname"><a href="classpfd_1_1path.html#a1205ad5165c748f91ffe939687e095a2">pfd::path::home</a></div><div class="ttdeci">static std::string home()</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:577</div></div>
<div class="ttc" id="aclasspfd_1_1path_html_a73bb289af48853c52fb1569c2d00a40c"><div class="ttname"><a href="classpfd_1_1path.html#a73bb289af48853c52fb1569c2d00a40c">pfd::path::separator</a></div><div class="ttdeci">static std::string separator()</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:617</div></div>
<div class="ttc" id="aclasspfd_1_1save__file_html_a5405ec39e88121a9ebeae60ba26b4af1"><div class="ttname"><a href="classpfd_1_1save__file.html#a5405ec39e88121a9ebeae60ba26b4af1">pfd::save_file::save_file</a></div><div class="ttdeci">save_file(std::string const &amp;title, std::string const &amp;default_path=&quot;&quot;, std::vector&lt; std::string &gt; const &amp;filters={ &quot;All Files&quot;, &quot;*&quot; }, opt options=opt::none)</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:1742</div></div>
<div class="ttc" id="aclasspfd_1_1save__file_html_aefa58bfca841a51edb6a7ef2fa640904"><div class="ttname"><a href="classpfd_1_1save__file.html#aefa58bfca841a51edb6a7ef2fa640904">pfd::save_file::result</a></div><div class="ttdeci">std::string result()</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:1753</div></div>
<div class="ttc" id="aclasspfd_1_1select__folder_html_aa0f0d69af6be6b2627bf02440a921765"><div class="ttname"><a href="classpfd_1_1select__folder.html#aa0f0d69af6be6b2627bf02440a921765">pfd::select_folder::result</a></div><div class="ttdeci">std::string result()</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:1764</div></div>
<div class="ttc" id="aclasspfd_1_1select__folder_html_ac6611de7b07e4366ffd2442d22ae1924"><div class="ttname"><a href="classpfd_1_1select__folder.html#ac6611de7b07e4366ffd2442d22ae1924">pfd::select_folder::select_folder</a></div><div class="ttdeci">select_folder(std::string const &amp;title, std::string const &amp;default_path=&quot;&quot;, opt options=opt::none)</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:1759</div></div>
<div class="ttc" id="aclasspfd_1_1settings_html_a08e4a5b150186d77158a974cc8c2d4a2"><div class="ttname"><a href="classpfd_1_1settings.html#a08e4a5b150186d77158a974cc8c2d4a2">pfd::settings::is_zenity</a></div><div class="ttdeci">bool is_zenity() const</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:559</div></div>
<div class="ttc" id="aclasspfd_1_1settings_html_a0ed32e8ed039106028474eb9f0a0a7bc"><div class="ttname"><a href="classpfd_1_1settings.html#a0ed32e8ed039106028474eb9f0a0a7bc">pfd::settings::verbose</a></div><div class="ttdeci">static void verbose(bool value)</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:526</div></div>
<div class="ttc" id="aclasspfd_1_1settings_html_a1445f3cf0311b15182d401f244b012d8"><div class="ttname"><a href="classpfd_1_1settings.html#a1445f3cf0311b15182d401f244b012d8">pfd::settings::flags</a></div><div class="ttdeci">bool const &amp; flags(flag in_flag) const</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:567</div></div>
<div class="ttc" id="aclasspfd_1_1settings_html_a4e22d6fb43d387ddc980bf6e2a6aad24"><div class="ttname"><a href="classpfd_1_1settings.html#a4e22d6fb43d387ddc980bf6e2a6aad24">pfd::settings::is_osascript</a></div><div class="ttdeci">bool is_osascript() const</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:551</div></div>
<div class="ttc" id="aclasspfd_1_1settings_html_a54fb5598e7501ac38d17e3629190b2fe"><div class="ttname"><a href="classpfd_1_1settings.html#a54fb5598e7501ac38d17e3629190b2fe">pfd::settings::available</a></div><div class="ttdeci">static bool available()</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:511</div></div>
<div class="ttc" id="aclasspfd_1_1settings_html_a60023ab0ac98008d2c52a568e9ee540f"><div class="ttname"><a href="classpfd_1_1settings.html#a60023ab0ac98008d2c52a568e9ee540f">pfd::settings::rescan</a></div><div class="ttdeci">static void rescan()</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:530</div></div>
<div class="ttc" id="aclasspfd_1_1settings_html_a61077e0fd48da6de7bb0f5dd9d9d1aad"><div class="ttname"><a href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aad">pfd::settings::flag</a></div><div class="ttdeci">flag</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:136</div></div>
<div class="ttc" id="aclasspfd_1_1settings_html_a61077e0fd48da6de7bb0f5dd9d9d1aada11dd6b78f267a47638211f4c7e23d434"><div class="ttname"><a href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aada11dd6b78f267a47638211f4c7e23d434">pfd::settings::flag::is_scanned</a></div><div class="ttdeci">@ is_scanned</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:137</div></div>
<div class="ttc" id="aclasspfd_1_1settings_html_a61077e0fd48da6de7bb0f5dd9d9d1aada1267dfaf66b51761e04b042bb2c4dd7a"><div class="ttname"><a href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aada1267dfaf66b51761e04b042bb2c4dd7a">pfd::settings::flag::has_matedialog</a></div><div class="ttdeci">@ has_matedialog</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:141</div></div>
<div class="ttc" id="aclasspfd_1_1settings_html_a61077e0fd48da6de7bb0f5dd9d9d1aada1a652e3d6a785053942b6cffc2c4669d"><div class="ttname"><a href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aada1a652e3d6a785053942b6cffc2c4669d">pfd::settings::flag::has_qarma</a></div><div class="ttdeci">@ has_qarma</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:142</div></div>
<div class="ttc" id="aclasspfd_1_1settings_html_a61077e0fd48da6de7bb0f5dd9d9d1aada1f1a19f0bf1fe1a63ed3e73e40466b4b"><div class="ttname"><a href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aada1f1a19f0bf1fe1a63ed3e73e40466b4b">pfd::settings::flag::has_kdialog</a></div><div class="ttdeci">@ has_kdialog</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:143</div></div>
<div class="ttc" id="aclasspfd_1_1settings_html_a61077e0fd48da6de7bb0f5dd9d9d1aada73b7af539db867cb9edf24a3cb7b8a36"><div class="ttname"><a href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aada73b7af539db867cb9edf24a3cb7b8a36">pfd::settings::flag::max_flag</a></div><div class="ttdeci">@ max_flag</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:146</div></div>
<div class="ttc" id="aclasspfd_1_1settings_html_a61077e0fd48da6de7bb0f5dd9d9d1aadad9da28952c27749f53c23675db49d560"><div class="ttname"><a href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aadad9da28952c27749f53c23675db49d560">pfd::settings::flag::is_verbose</a></div><div class="ttdeci">@ is_verbose</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:138</div></div>
<div class="ttc" id="aclasspfd_1_1settings_html_a61077e0fd48da6de7bb0f5dd9d9d1aadaea0bbb642237ecdaa68a14a0d7212448"><div class="ttname"><a href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aadaea0bbb642237ecdaa68a14a0d7212448">pfd::settings::flag::is_vista</a></div><div class="ttdeci">@ is_vista</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:144</div></div>
<div class="ttc" id="aclasspfd_1_1settings_html_a61077e0fd48da6de7bb0f5dd9d9d1aadaee57842698a0690e4b89730b469edc31"><div class="ttname"><a href="classpfd_1_1settings.html#a61077e0fd48da6de7bb0f5dd9d9d1aadaee57842698a0690e4b89730b469edc31">pfd::settings::flag::has_zenity</a></div><div class="ttdeci">@ has_zenity</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:140</div></div>
<div class="ttc" id="aclasspfd_1_1settings_html_a7190e52d512b1321acb78731a8cddf42"><div class="ttname"><a href="classpfd_1_1settings.html#a7190e52d512b1321acb78731a8cddf42">pfd::settings::settings</a></div><div class="ttdeci">settings(bool resync=false)</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:479</div></div>
<div class="ttc" id="aclasspfd_1_1settings_html_aa79fb10eee785f1acd8d1ff34e226c89"><div class="ttname"><a href="classpfd_1_1settings.html#aa79fb10eee785f1acd8d1ff34e226c89">pfd::settings::is_kdialog</a></div><div class="ttdeci">bool is_kdialog() const</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:563</div></div>
<div class="ttc" id="aclasspfd_1_1settings_html_af1c2f6e88ffafd59a2f7609631a9eade"><div class="ttname"><a href="classpfd_1_1settings.html#af1c2f6e88ffafd59a2f7609631a9eade">pfd::settings::check_program</a></div><div class="ttdeci">bool check_program(std::string const &amp;program)</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:535</div></div>
<div class="ttc" id="amixer_8c_html_a0a613175360865a14ac624eb0853773b"><div class="ttname"><a href="mixer_8c.html#a0a613175360865a14ac624eb0853773b">in</a></div><div class="ttdeci">uint16_t in</div><div class="ttdef"><b>Definition</b> mixer.c:80</div></div>
<div class="ttc" id="amixer_8c_html_a736b27ffc221941516149102ad8e7e2d"><div class="ttname"><a href="mixer_8c.html#a736b27ffc221941516149102ad8e7e2d">filter</a></div><div class="ttdeci">int16_t filter[8]</div><div class="ttdef"><b>Definition</b> mixer.c:94</div></div>
<div class="ttc" id="amixer_8c_html_a887e8bcff88c452ca816b051d2dfbf01"><div class="ttname"><a href="mixer_8c.html#a887e8bcff88c452ca816b051d2dfbf01">out</a></div><div class="ttdeci">uint16_t out</div><div class="ttdef"><b>Definition</b> mixer.c:81</div></div>
<div class="ttc" id="amixer_8c_html_a9b37ed65df7c33390f588701de90ae1b"><div class="ttname"><a href="mixer_8c.html#a9b37ed65df7c33390f588701de90ae1b">buf</a></div><div class="ttdeci">union @111115220225173102313045065244126153342261214353::@304166376113356371145235255022050055005326174300 buf</div></div>
<div class="ttc" id="anamespacepfd_1_1internal_html"><div class="ttname"><a href="namespacepfd_1_1internal.html">pfd::internal</a></div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:157</div></div>
<div class="ttc" id="anamespacepfd_1_1internal_html_a405a4127479d770e2b2fd48504c85f42"><div class="ttname"><a href="namespacepfd_1_1internal.html#a405a4127479d770e2b2fd48504c85f42">pfd::internal::starts_with</a></div><div class="ttdeci">static bool starts_with(std::string const &amp;str, std::string const &amp;prefix)</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:438</div></div>
<div class="ttc" id="anamespacepfd_1_1internal_html_a48cc31ab291a956a29b0a23fb46a7d26"><div class="ttname"><a href="namespacepfd_1_1internal.html#a48cc31ab291a956a29b0a23fb46a7d26">pfd::internal::is_directory</a></div><div class="ttdeci">static bool is_directory(std::string const &amp;path)</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:444</div></div>
<div class="ttc" id="anamespacepfd_1_1internal_html_a491d4afd9c76bafd6011502082444461"><div class="ttname"><a href="namespacepfd_1_1internal.html#a491d4afd9c76bafd6011502082444461">pfd::internal::getenv</a></div><div class="ttdeci">static std::string getenv(std::string const &amp;str)</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:459</div></div>
<div class="ttc" id="anamespacepfd_1_1internal_html_aaf263cbe957efd58a37827691b430371"><div class="ttname"><a href="namespacepfd_1_1internal.html#aaf263cbe957efd58a37827691b430371">pfd::internal::ends_with</a></div><div class="ttdeci">static bool ends_with(std::string const &amp;str, std::string const &amp;suffix)</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:434</div></div>
<div class="ttc" id="anamespacepfd_1_1internal_html_af2acf3e674700e55039cc00c38818b2b"><div class="ttname"><a href="namespacepfd_1_1internal.html#af2acf3e674700e55039cc00c38818b2b">pfd::internal::default_wait_timeout</a></div><div class="ttdeci">static int const default_wait_timeout</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:160</div></div>
<div class="ttc" id="anamespacepfd_html"><div class="ttname"><a href="namespacepfd.html">pfd</a></div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:70</div></div>
<div class="ttc" id="anamespacepfd_html_a1a482ccd57bb939dcbf7d9caacd3f997"><div class="ttname"><a href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997">pfd::opt</a></div><div class="ttdeci">opt</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:99</div></div>
<div class="ttc" id="anamespacepfd_html_a1a482ccd57bb939dcbf7d9caacd3f997a334c4a4c42fdb79d7ebc3e73b517e6f8"><div class="ttname"><a href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997a334c4a4c42fdb79d7ebc3e73b517e6f8">pfd::opt::none</a></div><div class="ttdeci">@ none</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:100</div></div>
<div class="ttc" id="anamespacepfd_html_a1a482ccd57bb939dcbf7d9caacd3f997a51106d57377a72da5f9a0415f4f6142b"><div class="ttname"><a href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997a51106d57377a72da5f9a0415f4f6142b">pfd::opt::force_path</a></div><div class="ttdeci">@ force_path</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:108</div></div>
<div class="ttc" id="anamespacepfd_html_a1a482ccd57bb939dcbf7d9caacd3f997a8fc52a8161c68fcaeebdfdb500a36d4b"><div class="ttname"><a href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997a8fc52a8161c68fcaeebdfdb500a36d4b">pfd::opt::force_overwrite</a></div><div class="ttdeci">@ force_overwrite</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:104</div></div>
<div class="ttc" id="anamespacepfd_html_a1a482ccd57bb939dcbf7d9caacd3f997ab66abfe0e0c2ef7c545895c12a0a8837"><div class="ttname"><a href="namespacepfd.html#a1a482ccd57bb939dcbf7d9caacd3f997ab66abfe0e0c2ef7c545895c12a0a8837">pfd::opt::multiselect</a></div><div class="ttdeci">@ multiselect</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:102</div></div>
<div class="ttc" id="anamespacepfd_html_a70b4c2a87aca3443a4de387bedae49e8"><div class="ttname"><a href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8">pfd::choice</a></div><div class="ttdeci">choice</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:82</div></div>
<div class="ttc" id="anamespacepfd_html_a70b4c2a87aca3443a4de387bedae49e8a20f0596c21ad67a7fda598ffc7d038d1"><div class="ttname"><a href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a20f0596c21ad67a7fda598ffc7d038d1">pfd::choice::yes_no</a></div><div class="ttdeci">@ yes_no</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:85</div></div>
<div class="ttc" id="anamespacepfd_html_a70b4c2a87aca3443a4de387bedae49e8a444bcb3a3fcf8389296c49467f27e1d6"><div class="ttname"><a href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a444bcb3a3fcf8389296c49467f27e1d6">pfd::choice::ok</a></div><div class="ttdeci">@ ok</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:83</div></div>
<div class="ttc" id="anamespacepfd_html_a70b4c2a87aca3443a4de387bedae49e8a5c5cb337bb234e240912dc139048038c"><div class="ttname"><a href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a5c5cb337bb234e240912dc139048038c">pfd::choice::yes_no_cancel</a></div><div class="ttdeci">@ yes_no_cancel</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:86</div></div>
<div class="ttc" id="anamespacepfd_html_a70b4c2a87aca3443a4de387bedae49e8a7928e609b1665227bcb71b20d431fd6a"><div class="ttname"><a href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a7928e609b1665227bcb71b20d431fd6a">pfd::choice::retry_cancel</a></div><div class="ttdeci">@ retry_cancel</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:87</div></div>
<div class="ttc" id="anamespacepfd_html_a70b4c2a87aca3443a4de387bedae49e8a809da5df9c86c6426c8d8db2934d3f51"><div class="ttname"><a href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a809da5df9c86c6426c8d8db2934d3f51">pfd::choice::ok_cancel</a></div><div class="ttdeci">@ ok_cancel</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:84</div></div>
<div class="ttc" id="anamespacepfd_html_a70b4c2a87aca3443a4de387bedae49e8a9df771aa8f010c4b928e42a8979d5609"><div class="ttname"><a href="namespacepfd.html#a70b4c2a87aca3443a4de387bedae49e8a9df771aa8f010c4b928e42a8979d5609">pfd::choice::abort_retry_ignore</a></div><div class="ttdeci">@ abort_retry_ignore</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:88</div></div>
<div class="ttc" id="anamespacepfd_html_a96ff6709abe317ae8eff98d92bc8db85"><div class="ttname"><a href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85">pfd::icon</a></div><div class="ttdeci">icon</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:91</div></div>
<div class="ttc" id="anamespacepfd_html_a96ff6709abe317ae8eff98d92bc8db85a5494af1f14a8c19939968c3e9e2d4f79"><div class="ttname"><a href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85a5494af1f14a8c19939968c3e9e2d4f79">pfd::icon::question</a></div><div class="ttdeci">@ question</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:95</div></div>
<div class="ttc" id="anamespacepfd_html_a96ff6709abe317ae8eff98d92bc8db85a7b83d3f08fa392b79e3f553b585971cd"><div class="ttname"><a href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85a7b83d3f08fa392b79e3f553b585971cd">pfd::icon::warning</a></div><div class="ttdeci">@ warning</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:93</div></div>
<div class="ttc" id="anamespacepfd_html_a96ff6709abe317ae8eff98d92bc8db85acaf9b6b99962bf5c2264824231d7a40c"><div class="ttname"><a href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85acaf9b6b99962bf5c2264824231d7a40c">pfd::icon::info</a></div><div class="ttdeci">@ info</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:92</div></div>
<div class="ttc" id="anamespacepfd_html_a96ff6709abe317ae8eff98d92bc8db85acb5e100e5a9a3e7f6d1fd97512215282"><div class="ttname"><a href="namespacepfd.html#a96ff6709abe317ae8eff98d92bc8db85acb5e100e5a9a3e7f6d1fd97512215282">pfd::icon::error</a></div><div class="ttdeci">@ error</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:94</div></div>
<div class="ttc" id="anamespacepfd_html_aad4fba5e0884b6d814006a7e92ade679"><div class="ttname"><a href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679">pfd::button</a></div><div class="ttdeci">button</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:72</div></div>
<div class="ttc" id="anamespacepfd_html_aad4fba5e0884b6d814006a7e92ade679a10aec35353f9c4096a71c38654c3d402"><div class="ttname"><a href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a10aec35353f9c4096a71c38654c3d402">pfd::button::cancel</a></div><div class="ttdeci">@ cancel</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:73</div></div>
<div class="ttc" id="anamespacepfd_html_aad4fba5e0884b6d814006a7e92ade679a165e6d21e0a2cc9ebb32ca05f90e0fa7"><div class="ttname"><a href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a165e6d21e0a2cc9ebb32ca05f90e0fa7">pfd::button::retry</a></div><div class="ttdeci">@ retry</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:78</div></div>
<div class="ttc" id="anamespacepfd_html_aad4fba5e0884b6d814006a7e92ade679a444bcb3a3fcf8389296c49467f27e1d6"><div class="ttname"><a href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a444bcb3a3fcf8389296c49467f27e1d6">pfd::button::ok</a></div><div class="ttdeci">@ ok</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:74</div></div>
<div class="ttc" id="anamespacepfd_html_aad4fba5e0884b6d814006a7e92ade679a567bc1d268f135496de3d5b946b691f3"><div class="ttname"><a href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a567bc1d268f135496de3d5b946b691f3">pfd::button::ignore</a></div><div class="ttdeci">@ ignore</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:79</div></div>
<div class="ttc" id="anamespacepfd_html_aad4fba5e0884b6d814006a7e92ade679a5bb94a1c12413a2e5d14deabab29f2aa"><div class="ttname"><a href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a5bb94a1c12413a2e5d14deabab29f2aa">pfd::button::abort</a></div><div class="ttdeci">@ abort</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:77</div></div>
<div class="ttc" id="anamespacepfd_html_aad4fba5e0884b6d814006a7e92ade679a7fa3b767c460b54a2be4d49030b349c7"><div class="ttname"><a href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679a7fa3b767c460b54a2be4d49030b349c7">pfd::button::no</a></div><div class="ttdeci">@ no</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:76</div></div>
<div class="ttc" id="anamespacepfd_html_aad4fba5e0884b6d814006a7e92ade679aa6105c0a611b41b08f1209506350279e"><div class="ttname"><a href="namespacepfd.html#aad4fba5e0884b6d814006a7e92ade679aa6105c0a611b41b08f1209506350279e">pfd::button::yes</a></div><div class="ttdeci">@ yes</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:75</div></div>
<div class="ttc" id="anamespacepfd_html_aae00cd25e23dcc7e3a3c1f7678d1762c"><div class="ttname"><a href="namespacepfd.html#aae00cd25e23dcc7e3a3c1f7678d1762c">pfd::operator|</a></div><div class="ttdeci">opt operator|(opt a, opt b)</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:111</div></div>
<div class="ttc" id="anamespacepfd_html_ab888b234398a273a027aebdeb7d5269f"><div class="ttname"><a href="namespacepfd.html#ab888b234398a273a027aebdeb7d5269f">pfd::operator&amp;</a></div><div class="ttdeci">bool operator&amp;(opt a, opt b)</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:114</div></div>
<div class="ttc" id="anamespacepfd_html_acce315b273b2edaaeac0d8731f308ea9"><div class="ttname"><a href="namespacepfd.html#acce315b273b2edaaeac0d8731f308ea9">pfd::operator&lt;&lt;</a></div><div class="ttdeci">std::ostream &amp; operator&lt;&lt;(std::ostream &amp;s, std::vector&lt; std::string &gt; const &amp;v)</div><div class="ttdef"><b>Definition</b> portable-file-dialogs.h:939</div></div>
<div class="ttc" id="aportable-file-dialogs_8h_html_a0851d0adb9dc3b40d5c9961d6325ca33"><div class="ttname"><a href="portable-file-dialogs_8h.html#a0851d0adb9dc3b40d5c9961d6325ca33">PFD_OSX_ICON</a></div><div class="ttdeci">#define PFD_OSX_ICON(n)</div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="portable-file-dialogs_8h.html">portable-file-dialogs.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>