Welcome to mirror list, hosted at ThFree Co, Russian Federation.

rdp__event_8c_source.html « public - gitlab.com/Remmina/remminadoc.gitlab.io.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 89cde65ccf2a2ab498cde8a3d20e482dae13e47b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Remmina - The GTK+ Remote Desktop Client: rdp_event.c 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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</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" />
</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 style="height: 56px;">
  <td id="projectlogo"><img alt="Logo" src="org.remmina.Remmina.png"/></td>
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Remmina - The GTK+ Remote Desktop Client
   &#160;<span id="projectnumber">v1.4.33</span>
   </div>
   <div id="projectbrief">Remmina is a remote desktop client written in GTK+, aiming to be useful for system administrators and travellers, who need to work with lots of remote computers in front of either large monitors or tiny netbooks. Remmina supports multiple network protocols in an integrated and consistent user interface. Currently RDP, VNC, NX, XDMCP and SSH are supported.</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('rdp__event_8c_source.html','');});
</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">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="headertitle">
<div class="title">rdp_event.c</div>  </div>
</div><!--header-->
<div class="contents">
<a href="rdp__event_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Remmina - The GTK Remote Desktop Client</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * Copyright (C) 2010 Jay Sorg</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Copyright (C) 2010-2011 Vic Lee</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * Copyright (C) 2011 Marc-Andre Moreau &lt;marcandre.moreau@gmail.com&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * Copyright (C) 2014-2015 Antenore Gatta, Fabio Castelli, Giovanni Panozzo</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> * Copyright (C) 2016-2022 Antenore Gatta, Giovanni Panozzo</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> * Copyright (C) 2022-2023 Antenore Gatta, Giovanni Panozzo, Hiroyuki Tanaka</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * (at your option) any later version.</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> * This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> * GNU General Public License for more details.</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="comment"> * You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="comment"> * along with this program; if not, write to the Free Software</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="comment"> * Foundation, Inc., 51 Franklin Street, Fifth Floor,</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="comment"> * Boston, MA  02110-1301, USA.</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="comment"> *  In addition, as a special exception, the copyright holders give</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="comment"> *  permission to link the code of portions of this program with the</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="comment"> *  OpenSSL library under certain conditions as described in each</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="comment"> *  individual source file, and distribute linked combinations</span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="comment"> *  including the two.</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="comment"> *  You must obey the GNU General Public License in all respects</span></div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment"> *  for all of the code used other than OpenSSL. *  If you modify</span></div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment"> *  file(s) with this exception, you may extend this exception to your</span></div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment"> *  version of the file(s), but you are not obligated to do so. *  If you</span></div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment"> *  do not wish to do so, delete this exception statement from your</span></div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="comment"> *  version. *  If you delete this exception statement from all source</span></div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="comment"> *  files in the program, then also delete it here.</span></div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="rdp__cliprdr_8h.html">rdp_cliprdr.h</a>&quot;</span></div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="rdp__event_8h.html">rdp_event.h</a>&quot;</span></div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="rdp__monitor_8h.html">rdp_monitor.h</a>&quot;</span></div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="rdp__settings_8h.html">rdp_settings.h</a>&quot;</span></div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="preprocessor">#include &lt;gdk/gdkkeysyms.h&gt;</span></div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="preprocessor">#ifdef GDK_WINDOWING_X11</span></div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="preprocessor">#include &lt;cairo/cairo-xlib.h&gt;</span></div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="preprocessor">#include &lt;cairo/cairo.h&gt;</span></div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="preprocessor">#include &lt;freerdp/locale/keyboard.h&gt;</span></div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;</div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="rdp__event_8h.html#a09271b787fc086f05a8a6e7c3282d6aa">   52</a></span>&#160;gboolean <a class="code" href="rdp__event_8c.html#a09271b787fc086f05a8a6e7c3282d6aa">remmina_rdp_event_on_map</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;{</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;    <a class="code" href="structrf__context.html">rfContext</a> *rfi = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    rdpGdi *gdi;</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;    <span class="keywordflow">if</span> (rfi == NULL)</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;    <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile = <a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#a1409dcc143ddc35de86b792df095cfc4">protocol_plugin_get_file</a>(gp);</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;    <span class="keywordtype">int</span> do_suppress = !<a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#a0c7eab256e1b1fdf84be44e28cddc3de">file_get_int</a>(remminafile, <span class="stringliteral">&quot;no-suppress&quot;</span>, FALSE);</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;    <span class="keywordflow">if</span> (do_suppress) {</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;        gdi = ((rdpContext *)rfi)-&gt;gdi;</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;        REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;Map event received, disabling TS_SUPPRESS_OUTPUT_PDU &quot;</span>);</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;        gdi_send_suppress_output(gdi, FALSE);</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;    }</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;    <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;}</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;</div><div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="rdp__event_8h.html#a393d4ec6673f6a9c2b71849c109facef">   74</a></span>&#160;gboolean <a class="code" href="rdp__event_8c.html#a393d4ec6673f6a9c2b71849c109facef">remmina_rdp_event_on_unmap</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;{</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;    <a class="code" href="structrf__context.html">rfContext</a> *rfi = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;    rdpGdi *gdi;</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;    <span class="keywordflow">if</span> (rfi == NULL)</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    GtkWidget *toplevel = gtk_widget_get_toplevel(GTK_WIDGET(gp));</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;    GdkWindow *window = gtk_widget_get_window(toplevel);</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;    <span class="keywordflow">if</span> (gdk_window_get_fullscreen_mode(window) == GDK_FULLSCREEN_ON_ALL_MONITORS) {</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;        REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;Unmap event received, but cannot enable TS_SUPPRESS_OUTPUT_PDU when in fullscreen&quot;</span>);</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    }</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;    <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile = <a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#a1409dcc143ddc35de86b792df095cfc4">protocol_plugin_get_file</a>(gp);</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;    <span class="keywordtype">int</span> do_suppress = !<a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#a0c7eab256e1b1fdf84be44e28cddc3de">file_get_int</a>(remminafile, <span class="stringliteral">&quot;no-suppress&quot;</span>, FALSE);</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;    <span class="keywordflow">if</span> (do_suppress) {</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;        gdi = ((rdpContext *)rfi)-&gt;gdi;</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;        REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;Unmap event received, enabling TS_SUPPRESS_OUTPUT_PDU &quot;</span>);</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;        gdi_send_suppress_output(gdi, TRUE);</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;    }</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;}</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;</div><div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="rdp__event_8c.html#a6e3d726d9c6e27d25538c8ae665e8b58">  104</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="rdp__event_8c.html#a6e3d726d9c6e27d25538c8ae665e8b58">remmina_rdp_event_on_focus_in</a>(GtkWidget *widget, GdkEventKey *event, <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;{</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;    <a class="code" href="structrf__context.html">rfContext</a> *rfi = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;    rdpInput *input;</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;    GdkModifierType state;</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;<span class="preprocessor">#if GTK_CHECK_VERSION(3, 20, 0)</span></div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;    GdkSeat *seat;</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;    GdkDeviceManager *manager;</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;    GdkDevice *keyboard = NULL;</div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;    <span class="keyword">const</span> gchar *wname = gtk_widget_get_name(gtk_widget_get_toplevel(widget));</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;    REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;Top level name is: %s&quot;</span>, wname);</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;    <span class="keywordflow">if</span> (!rfi || !rfi-&gt;<a class="code" href="structrf__context.html#a3c2ffa55ba97bc70324d61b8cc838e73">connected</a> || rfi-&gt;<a class="code" href="structrf__context.html#af40c80ff8296b9bcc3ac437bf0be55f8">is_reconnecting</a>)</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;    input = rfi-&gt;<a class="code" href="structrf__context.html#a3a32bbd599b6684a3c41db9281863362">instance</a>-&gt;input;</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;    UINT32 toggle_keys_state = 0;</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;<span class="preprocessor">#if GTK_CHECK_VERSION(3, 20, 0)</span></div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;    seat = gdk_display_get_default_seat(gdk_display_get_default());</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;    keyboard = gdk_seat_get_pointer(seat);</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;    manager = gdk_display_get_device_manager(gdk_display_get_default());</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;    keyboard = gdk_device_manager_get_client_pointer(manager);</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;    gdk_window_get_device_position(gdk_get_default_root_window(), keyboard, NULL, NULL, &amp;state);</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;    <span class="keywordflow">if</span> (state &amp; GDK_LOCK_MASK)</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;        toggle_keys_state |= KBD_SYNC_CAPS_LOCK;</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;    <span class="keywordflow">if</span> (state &amp; GDK_MOD2_MASK)</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;        toggle_keys_state |= KBD_SYNC_NUM_LOCK;</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;    <span class="keywordflow">if</span> (state &amp; GDK_MOD5_MASK)</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;        toggle_keys_state |= KBD_SYNC_SCROLL_LOCK;</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;    input-&gt;SynchronizeEvent(input, toggle_keys_state);</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;    input-&gt;KeyboardEvent(input, KBD_FLAGS_RELEASE, 0x0F);</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;    <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;}</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;</div><div class="line"><a name="l00150"></a><span class="lineno"><a class="line" href="rdp__plugin_8h.html#ad446d6471bddba97f8bfcee8c51e4580">  150</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="rdp__event_8c.html#ad446d6471bddba97f8bfcee8c51e4580">remmina_rdp_event_event_push</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <span class="keyword">const</span> <a class="code" href="structremmina__plugin__rdp__event.html">RemminaPluginRdpEvent</a> *e)</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;{</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;    <a class="code" href="structrf__context.html">rfContext</a> *rfi = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;    <a class="code" href="structremmina__plugin__rdp__event.html">RemminaPluginRdpEvent</a> *event;</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;    <span class="comment">/* Called by the main GTK thread to send an event to the libfreerdp thread */</span></div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;    <span class="keywordflow">if</span> (!rfi || !rfi-&gt;<a class="code" href="structrf__context.html#a3c2ffa55ba97bc70324d61b8cc838e73">connected</a> || rfi-&gt;<a class="code" href="structrf__context.html#af40c80ff8296b9bcc3ac437bf0be55f8">is_reconnecting</a>)</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;    <span class="keywordflow">if</span> (rfi-&gt;<a class="code" href="structrf__context.html#a5d119b1f108fe84c74e6484d48c2a565">event_queue</a>) {</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;<span class="preprocessor">#if GLIB_CHECK_VERSION(2,67,3)</span></div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;        <span class="keyword">event</span> = g_memdup2(e, <span class="keyword">sizeof</span>(<a class="code" href="structremmina__plugin__rdp__event.html">RemminaPluginRdpEvent</a>));</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;        <span class="keyword">event</span> = g_memdup(e, <span class="keyword">sizeof</span>(<a class="code" href="structremmina__plugin__rdp__event.html">RemminaPluginRdpEvent</a>));</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;        g_async_queue_push(rfi-&gt;<a class="code" href="structrf__context.html#a5d119b1f108fe84c74e6484d48c2a565">event_queue</a>, event);</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;        <span class="keywordflow">if</span> (write(rfi-&gt;<a class="code" href="structrf__context.html#a539feef609228a91c5e54d5da837bb7a">event_pipe</a>[1], <span class="stringliteral">&quot;\0&quot;</span>, 1)) {</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;        }</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;    }</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;}</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;</div><div class="line"><a name="l00174"></a><span class="lineno"><a class="line" href="rdp__event_8c.html#a113ce593d4a96413b9330c471ee51554">  174</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="rdp__event_8c.html#a113ce593d4a96413b9330c471ee51554">remmina_rdp_event_release_all_keys</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;{</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;    <a class="code" href="structrf__context.html">rfContext</a> *rfi = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;    <a class="code" href="structremmina__plugin__rdp__event.html">RemminaPluginRdpEvent</a> rdp_event = { 0 };</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;    <span class="keywordtype">int</span> i;</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;    <span class="comment">/* Send all release key events for previously pressed keys */</span></div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;    <span class="keywordflow">for</span> (i = 0; i &lt; rfi-&gt;<a class="code" href="structrf__context.html#a335c40ccb90ae472525b203c832e7701">pressed_keys</a>-&gt;len; i++) {</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;        rdp_event = g_array_index(rfi-&gt;<a class="code" href="structrf__context.html#a335c40ccb90ae472525b203c832e7701">pressed_keys</a>, <a class="code" href="structremmina__plugin__rdp__event.html">RemminaPluginRdpEvent</a>, i);</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;        <span class="keywordflow">if</span> ((rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a84797e0cdf4484432740a8946325f126">type</a> == <a class="code" href="rdp__plugin_8h.html#adafbb901615d7fc9d8f31d5dbdae29d7ae248ff32977c650df357c079f9d8b6e2">REMMINA_RDP_EVENT_TYPE_SCANCODE</a> ||</div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;             rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a84797e0cdf4484432740a8946325f126">type</a> == <a class="code" href="rdp__plugin_8h.html#adafbb901615d7fc9d8f31d5dbdae29d7ab15f261f1918633711921198fea0029f">REMMINA_RDP_EVENT_TYPE_SCANCODE_UNICODE</a>) &amp;&amp;</div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;            rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.up == <span class="keyword">false</span>) {</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;            rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.up = <span class="keyword">true</span>;</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;            <a class="code" href="rdp__event_8c.html#ad446d6471bddba97f8bfcee8c51e4580">remmina_rdp_event_event_push</a>(gp, &amp;rdp_event);</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;        }</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;    }</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;    g_array_set_size(rfi-&gt;<a class="code" href="structrf__context.html#a335c40ccb90ae472525b203c832e7701">pressed_keys</a>, 0);</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;}</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno"><a class="line" href="rdp__event_8c.html#a062f6feb8f4b29ad0ad84717e6646e0c">  195</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="rdp__event_8c.html#a062f6feb8f4b29ad0ad84717e6646e0c">remmina_rdp_event_release_key</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="structremmina__plugin__rdp__event.html">RemminaPluginRdpEvent</a> rdp_event)</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;{</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;    gint i;</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;    <a class="code" href="structrf__context.html">rfContext</a> *rfi = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;    <a class="code" href="structremmina__plugin__rdp__event.html">RemminaPluginRdpEvent</a> rdp_event_2 = { 0 };</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;    rdp_event_2.<a class="code" href="structremmina__plugin__rdp__event.html#a84797e0cdf4484432740a8946325f126">type</a> = <a class="code" href="rdp__plugin_8h.html#adafbb901615d7fc9d8f31d5dbdae29d7ae248ff32977c650df357c079f9d8b6e2">REMMINA_RDP_EVENT_TYPE_SCANCODE</a>;</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;    <span class="keywordflow">if</span> ((rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a84797e0cdf4484432740a8946325f126">type</a> == <a class="code" href="rdp__plugin_8h.html#adafbb901615d7fc9d8f31d5dbdae29d7ae248ff32977c650df357c079f9d8b6e2">REMMINA_RDP_EVENT_TYPE_SCANCODE</a> ||</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;         rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a84797e0cdf4484432740a8946325f126">type</a> == <a class="code" href="rdp__plugin_8h.html#adafbb901615d7fc9d8f31d5dbdae29d7ab15f261f1918633711921198fea0029f">REMMINA_RDP_EVENT_TYPE_SCANCODE_UNICODE</a>) &amp;&amp;</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;        rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.up) {</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;        <span class="comment">/* Unregister the keycode only */</span></div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;        <span class="keywordflow">for</span> (i = 0; i &lt; rfi-&gt;<a class="code" href="structrf__context.html#a335c40ccb90ae472525b203c832e7701">pressed_keys</a>-&gt;len; i++) {</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;            rdp_event_2 = g_array_index(rfi-&gt;<a class="code" href="structrf__context.html#a335c40ccb90ae472525b203c832e7701">pressed_keys</a>, <a class="code" href="structremmina__plugin__rdp__event.html">RemminaPluginRdpEvent</a>, i);</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;            <span class="keywordflow">if</span> (rdp_event_2.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.key_code == rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.key_code &amp;&amp;</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;                rdp_event_2.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.unicode_code == rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.unicode_code &amp;&amp;</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;                rdp_event_2.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.extended == rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.extended &amp;&amp;</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;                rdp_event_2.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.extended1 == rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.extended1) {</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;                g_array_remove_index_fast(rfi-&gt;<a class="code" href="structrf__context.html#a335c40ccb90ae472525b203c832e7701">pressed_keys</a>, i);</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;            }</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;        }</div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;    }</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;}</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;</div><div class="line"><a name="l00222"></a><span class="lineno"><a class="line" href="rdp__event_8c.html#ab6e9a485532ccf8c22005dd7a7137fd2">  222</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="rdp__event_8c.html#ab6e9a485532ccf8c22005dd7a7137fd2">keypress_list_add</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="structremmina__plugin__rdp__event.html">RemminaPluginRdpEvent</a> rdp_event)</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;{</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;    <a class="code" href="structrf__context.html">rfContext</a> *rfi = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;    <span class="keywordflow">if</span> (!rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.key_code)</div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;    <span class="keywordflow">if</span> (rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.up)</div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;        <a class="code" href="rdp__event_8c.html#a062f6feb8f4b29ad0ad84717e6646e0c">remmina_rdp_event_release_key</a>(gp, rdp_event);</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;        g_array_append_val(rfi-&gt;<a class="code" href="structrf__context.html#a335c40ccb90ae472525b203c832e7701">pressed_keys</a>, rdp_event);</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;}</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;</div><div class="line"><a name="l00237"></a><span class="lineno"><a class="line" href="rdp__event_8c.html#a080ab4a0a8f592bb5484202175beaaa5">  237</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="rdp__event_8c.html#a080ab4a0a8f592bb5484202175beaaa5">remmina_rdp_event_scale_area</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, gint *x, gint *y, gint *w, gint *h)</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;{</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;    gint width, height;</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;    gint sx, sy, sw, sh;</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;    <a class="code" href="structrf__context.html">rfContext</a> *rfi = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;</div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;    <span class="keywordflow">if</span> (!rfi || !rfi-&gt;<a class="code" href="structrf__context.html#a3c2ffa55ba97bc70324d61b8cc838e73">connected</a> || rfi-&gt;<a class="code" href="structrf__context.html#af40c80ff8296b9bcc3ac437bf0be55f8">is_reconnecting</a> || !rfi-&gt;<a class="code" href="structrf__context.html#a3aead7f4d2c4580fcbd25e15679e19c6">surface</a>)</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;    width = <a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#adf255b7ceaec6a51fc9269cf824a02ce">protocol_plugin_get_width</a>(gp);</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;    height = <a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#aa159850f20499e5bc1067f533d2fa820">protocol_plugin_get_height</a>(gp);</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;    <span class="keywordflow">if</span> ((width == 0) || (height == 0))</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;    <span class="keywordflow">if</span> ((rfi-&gt;<a class="code" href="structrf__context.html#aedf6fcd090e6ba788956565ce312ab70">scale_width</a> == width) &amp;&amp; (rfi-&gt;<a class="code" href="structrf__context.html#a76ff7add3727e4a8b82f7b4615f09169">scale_height</a> == height)) {</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;        <span class="comment">/* Same size, just copy the pixels */</span></div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;        *x = MIN(MAX(0, *x), width - 1);</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;        *y = MIN(MAX(0, *y), height - 1);</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;        *w = MIN(width - *x, *w);</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;        *h = MIN(height - *y, *h);</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;    }</div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;</div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;    <span class="comment">/* We have to extend the scaled region one scaled pixel, to avoid gaps */</span></div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;</div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;    sx = MIN(MAX(0, (*x) * rfi-&gt;<a class="code" href="structrf__context.html#aedf6fcd090e6ba788956565ce312ab70">scale_width</a> / width</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;             - rfi-&gt;<a class="code" href="structrf__context.html#aedf6fcd090e6ba788956565ce312ab70">scale_width</a> / width - 2), rfi-&gt;<a class="code" href="structrf__context.html#aedf6fcd090e6ba788956565ce312ab70">scale_width</a> - 1);</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;    sy = MIN(MAX(0, (*y) * rfi-&gt;<a class="code" href="structrf__context.html#a76ff7add3727e4a8b82f7b4615f09169">scale_height</a> / height</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;             - rfi-&gt;<a class="code" href="structrf__context.html#a76ff7add3727e4a8b82f7b4615f09169">scale_height</a> / height - 2), rfi-&gt;<a class="code" href="structrf__context.html#a76ff7add3727e4a8b82f7b4615f09169">scale_height</a> - 1);</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;    sw = MIN(rfi-&gt;<a class="code" href="structrf__context.html#aedf6fcd090e6ba788956565ce312ab70">scale_width</a> - sx, (*w) * rfi-&gt;<a class="code" href="structrf__context.html#aedf6fcd090e6ba788956565ce312ab70">scale_width</a> / width</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;         + rfi-&gt;<a class="code" href="structrf__context.html#aedf6fcd090e6ba788956565ce312ab70">scale_width</a> / width + 4);</div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;</div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;    sh = MIN(rfi-&gt;<a class="code" href="structrf__context.html#a76ff7add3727e4a8b82f7b4615f09169">scale_height</a> - sy, (*h) * rfi-&gt;<a class="code" href="structrf__context.html#a76ff7add3727e4a8b82f7b4615f09169">scale_height</a> / height</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;         + rfi-&gt;<a class="code" href="structrf__context.html#a76ff7add3727e4a8b82f7b4615f09169">scale_height</a> / height + 4);</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;    *x = sx;</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;    *y = sy;</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;    *w = sw;</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;    *h = sh;</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;}</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;</div><div class="line"><a name="l00282"></a><span class="lineno"><a class="line" href="rdp__event_8c.html#a2ff2e46de1ad42c9aa8f792d629e0a89">  282</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="rdp__event_8c.html#a2ff2e46de1ad42c9aa8f792d629e0a89">remmina_rdp_event_update_regions</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="structremmina__plugin__rdp__ui__object.html">RemminaPluginRdpUiObject</a> *ui)</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;{</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;    <a class="code" href="structrf__context.html">rfContext</a> *rfi = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;    gint x, y, w, h, i;</div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;    <span class="keywordflow">for</span> (i = 0; i &lt; ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#acef425d73af8935a8bc784d56f7b125c">reg</a>.ninvalid; i++) {</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;        x = ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#acef425d73af8935a8bc784d56f7b125c">reg</a>.ureg[i].x;</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;        y = ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#acef425d73af8935a8bc784d56f7b125c">reg</a>.ureg[i].y;</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;        w = ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#acef425d73af8935a8bc784d56f7b125c">reg</a>.ureg[i].w;</div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;        h = ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#acef425d73af8935a8bc784d56f7b125c">reg</a>.ureg[i].h;</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;        <span class="keywordflow">if</span> (rfi-&gt;<a class="code" href="structrf__context.html#a96c4689f6bc062482536038cb3b24e78">scale</a> == <a class="code" href="types_8h.html#aeea5ee1e675368413b6f6ab09883e7deac7786e2cea7d9bf95026069ed774ea20">REMMINA_PROTOCOL_WIDGET_SCALE_MODE_SCALED</a>)</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;            <a class="code" href="rdp__event_8c.html#a080ab4a0a8f592bb5484202175beaaa5">remmina_rdp_event_scale_area</a>(gp, &amp;x, &amp;y, &amp;w, &amp;h);</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;        gtk_widget_queue_draw_area(rfi-&gt;<a class="code" href="structrf__context.html#acee2095e72fb2428c498f62e21800026">drawing_area</a>, x, y, w, h);</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;    }</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;    g_free(ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#acef425d73af8935a8bc784d56f7b125c">reg</a>.ureg);</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;}</div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;</div><div class="line"><a name="l00302"></a><span class="lineno"><a class="line" href="rdp__event_8h.html#a712a9b04decd8b928d71db44b9b14fc9">  302</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="rdp__event_8c.html#a712a9b04decd8b928d71db44b9b14fc9">remmina_rdp_event_update_rect</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, gint x, gint y, gint w, gint h)</div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;{</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;    <a class="code" href="structrf__context.html">rfContext</a> *rfi = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;    <span class="keywordflow">if</span> (rfi-&gt;<a class="code" href="structrf__context.html#a96c4689f6bc062482536038cb3b24e78">scale</a> == <a class="code" href="types_8h.html#aeea5ee1e675368413b6f6ab09883e7deac7786e2cea7d9bf95026069ed774ea20">REMMINA_PROTOCOL_WIDGET_SCALE_MODE_SCALED</a>)</div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;        <a class="code" href="rdp__event_8c.html#a080ab4a0a8f592bb5484202175beaaa5">remmina_rdp_event_scale_area</a>(gp, &amp;x, &amp;y, &amp;w, &amp;h);</div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;</div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;    gtk_widget_queue_draw_area(rfi-&gt;<a class="code" href="structrf__context.html#acee2095e72fb2428c498f62e21800026">drawing_area</a>, x, y, w, h);</div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;}</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;</div><div class="line"><a name="l00313"></a><span class="lineno"><a class="line" href="rdp__event_8c.html#a6076424eb759c91ca9c8da59432c66d6">  313</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="rdp__event_8c.html#a6076424eb759c91ca9c8da59432c66d6">remmina_rdp_event_update_scale_factor</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;{</div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;    GtkAllocation a;</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;    gint rdwidth, rdheight;</div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;    gint gpwidth, gpheight;</div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;    <a class="code" href="structrf__context.html">rfContext</a> *rfi = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;</div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;    gtk_widget_get_allocation(GTK_WIDGET(gp), &amp;a);</div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;    gpwidth = a.width;</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;    gpheight = a.height;</div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;    <span class="keywordflow">if</span> (rfi-&gt;<a class="code" href="structrf__context.html#a96c4689f6bc062482536038cb3b24e78">scale</a> == <a class="code" href="types_8h.html#aeea5ee1e675368413b6f6ab09883e7deac7786e2cea7d9bf95026069ed774ea20">REMMINA_PROTOCOL_WIDGET_SCALE_MODE_SCALED</a>) {</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;        <span class="keywordflow">if</span> ((gpwidth &gt; 1) &amp;&amp; (gpheight &gt; 1)) {</div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;            rdwidth = <a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#adf255b7ceaec6a51fc9269cf824a02ce">protocol_plugin_get_width</a>(gp);</div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;            rdheight = <a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#aa159850f20499e5bc1067f533d2fa820">protocol_plugin_get_height</a>(gp);</div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;</div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;            rfi-&gt;<a class="code" href="structrf__context.html#aedf6fcd090e6ba788956565ce312ab70">scale_width</a> = gpwidth;</div><div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;            rfi-&gt;<a class="code" href="structrf__context.html#a76ff7add3727e4a8b82f7b4615f09169">scale_height</a> = gpheight;</div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;</div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;            rfi-&gt;<a class="code" href="structrf__context.html#a584505347366c40e6efa710353d4264f">scale_x</a> = (gdouble)rfi-&gt;<a class="code" href="structrf__context.html#aedf6fcd090e6ba788956565ce312ab70">scale_width</a> / (gdouble)rdwidth;</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;            rfi-&gt;<a class="code" href="structrf__context.html#a8a310c8fad5daf6b9f4d8f854b04a764">scale_y</a> = (gdouble)rfi-&gt;<a class="code" href="structrf__context.html#a76ff7add3727e4a8b82f7b4615f09169">scale_height</a> / (gdouble)rdheight;</div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;        }</div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;        rfi-&gt;<a class="code" href="structrf__context.html#aedf6fcd090e6ba788956565ce312ab70">scale_width</a> = 0;</div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;        rfi-&gt;<a class="code" href="structrf__context.html#a76ff7add3727e4a8b82f7b4615f09169">scale_height</a> = 0;</div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;        rfi-&gt;<a class="code" href="structrf__context.html#a584505347366c40e6efa710353d4264f">scale_x</a> = 0;</div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;        rfi-&gt;<a class="code" href="structrf__context.html#a8a310c8fad5daf6b9f4d8f854b04a764">scale_y</a> = 0;</div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;    }</div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;}</div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;</div><div class="line"><a name="l00344"></a><span class="lineno"><a class="line" href="rdp__event_8c.html#acafb03695febd86fc16d64545d74ef9c">  344</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="rdp__event_8c.html#acafb03695febd86fc16d64545d74ef9c">remmina_rdp_event_on_draw</a>(GtkWidget *widget, cairo_t *context, <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;{</div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;    <a class="code" href="structrf__context.html">rfContext</a> *rfi = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;    guint width, height;</div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;    gchar *msg;</div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;    cairo_text_extents_t extents;</div><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;</div><div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;    <span class="keywordflow">if</span> (!rfi || !rfi-&gt;<a class="code" href="structrf__context.html#a3c2ffa55ba97bc70324d61b8cc838e73">connected</a>)</div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;</div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;</div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;    <span class="keywordflow">if</span> (rfi-&gt;<a class="code" href="structrf__context.html#af40c80ff8296b9bcc3ac437bf0be55f8">is_reconnecting</a>) {</div><div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;        <span class="comment">/* FreeRDP is reconnecting, just show a message to the user */</span></div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;</div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;        width = gtk_widget_get_allocated_width(widget);</div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;        height = gtk_widget_get_allocated_height(widget);</div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;</div><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;        <span class="comment">/* Draw text */</span></div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;        msg = g_strdup_printf(_(<span class="stringliteral">&quot;Reconnection attempt %d of %d…&quot;</span>),</div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;                      rfi-&gt;<a class="code" href="structrf__context.html#a4c35800dba8da687f7f56e3bb7a23413">reconnect_nattempt</a>, rfi-&gt;<a class="code" href="structrf__context.html#aa0b949ab1e2f06b7d5efeccc924efaee">reconnect_maxattempts</a>);</div><div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;</div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;        cairo_select_font_face(context, <span class="stringliteral">&quot;Sans&quot;</span>, CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);</div><div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;        cairo_set_font_size(context, 24);</div><div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;        cairo_set_source_rgb(context, 0.9, 0.9, 0.9);</div><div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;        cairo_text_extents(context, msg, &amp;extents);</div><div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;        cairo_move_to(context, (width - (extents.width + extents.x_bearing)) / 2, (height - (extents.height + extents.y_bearing)) / 2);</div><div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;        cairo_show_text(context, msg);</div><div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;        g_free(msg);</div><div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;        <span class="comment">/* Standard drawing: We copy the surface from RDP */</span></div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;</div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;        <span class="keywordflow">if</span> (!rfi-&gt;<a class="code" href="structrf__context.html#a3aead7f4d2c4580fcbd25e15679e19c6">surface</a>)</div><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;            <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;</div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;        <span class="keywordflow">if</span> (rfi-&gt;<a class="code" href="structrf__context.html#a96c4689f6bc062482536038cb3b24e78">scale</a> == <a class="code" href="types_8h.html#aeea5ee1e675368413b6f6ab09883e7deac7786e2cea7d9bf95026069ed774ea20">REMMINA_PROTOCOL_WIDGET_SCALE_MODE_SCALED</a>)</div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;            cairo_scale(context, rfi-&gt;<a class="code" href="structrf__context.html#a584505347366c40e6efa710353d4264f">scale_x</a>, rfi-&gt;<a class="code" href="structrf__context.html#a8a310c8fad5daf6b9f4d8f854b04a764">scale_y</a>);</div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;</div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;        cairo_surface_flush(rfi-&gt;<a class="code" href="structrf__context.html#a3aead7f4d2c4580fcbd25e15679e19c6">surface</a>);</div><div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;        cairo_set_source_surface(context, rfi-&gt;<a class="code" href="structrf__context.html#a3aead7f4d2c4580fcbd25e15679e19c6">surface</a>, 0, 0);</div><div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;        cairo_surface_mark_dirty(rfi-&gt;<a class="code" href="structrf__context.html#a3aead7f4d2c4580fcbd25e15679e19c6">surface</a>);</div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;</div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;        cairo_set_operator(context, CAIRO_OPERATOR_SOURCE);     <span class="comment">// Ignore alpha channel from FreeRDP</span></div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;        cairo_paint(context);</div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;    }</div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;</div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;    <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;}</div><div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;</div><div class="line"><a name="l00393"></a><span class="lineno"><a class="line" href="rdp__event_8c.html#a35376ff50915de1c14285e6326bc943e">  393</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="rdp__event_8c.html#a35376ff50915de1c14285e6326bc943e">remmina_rdp_event_delayed_monitor_layout</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;{</div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;    <a class="code" href="structrf__context.html">rfContext</a> *rfi = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;</div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;    <a class="code" href="structremmina__plugin__rdp__event.html">RemminaPluginRdpEvent</a> rdp_event = { 0 };</div><div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;    GtkAllocation a;</div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;    gint desktopOrientation, desktopScaleFactor, deviceScaleFactor;</div><div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;</div><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;    <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;</div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;    <span class="keywordflow">if</span> (!rfi || !rfi-&gt;<a class="code" href="structrf__context.html#a3c2ffa55ba97bc70324d61b8cc838e73">connected</a> || rfi-&gt;<a class="code" href="structrf__context.html#af40c80ff8296b9bcc3ac437bf0be55f8">is_reconnecting</a>)</div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;</div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;    remminafile = <a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#a1409dcc143ddc35de86b792df095cfc4">protocol_plugin_get_file</a>(gp);</div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;</div><div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;    <span class="keywordflow">if</span> (rfi-&gt;<a class="code" href="structrf__context.html#a96c4689f6bc062482536038cb3b24e78">scale</a> != <a class="code" href="types_8h.html#aeea5ee1e675368413b6f6ab09883e7dea4d22c6eed721b661d618098159a20946">REMMINA_PROTOCOL_WIDGET_SCALE_MODE_DYNRES</a>)</div><div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;</div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;    rfi-&gt;<a class="code" href="structrf__context.html#a957e6f6867170470689210d55770342e">delayed_monitor_layout_handler</a> = 0;</div><div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;    gint gpwidth, gpheight, prevwidth, prevheight;</div><div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;</div><div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;    gchar *monitorids = NULL;</div><div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;    guint32 maxwidth = 0;</div><div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;    guint32 maxheight = 0;</div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;</div><div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;    <a class="code" href="rdp__monitor_8c.html#aa5969439ce0342765baea33fcf396940">remmina_rdp_monitor_get</a>(rfi, &amp;monitorids, &amp;maxwidth, &amp;maxheight);</div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;</div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;    REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;Sending preconfigured monitor layout&quot;</span>);</div><div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;    <span class="keywordflow">if</span> (rfi-&gt;<a class="code" href="structrf__context.html#a660a5c5ea7256ab6a6486f3e831a9174">dispcontext</a> &amp;&amp; rfi-&gt;<a class="code" href="structrf__context.html#a660a5c5ea7256ab6a6486f3e831a9174">dispcontext</a>-&gt;SendMonitorLayout) {</div><div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;        <a class="code" href="rdp__settings_8c.html#a5f05047cf10611ffb7a23a248650cb4c">remmina_rdp_settings_get_orientation_scale_prefs</a>(&amp;desktopOrientation, &amp;desktopScaleFactor, &amp;deviceScaleFactor);</div><div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;        gtk_widget_get_allocation(GTK_WIDGET(gp), &amp;a);</div><div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;        gpwidth = a.width;</div><div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;        gpheight = a.height;</div><div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;        prevwidth = <a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#adf255b7ceaec6a51fc9269cf824a02ce">protocol_plugin_get_width</a>(gp);</div><div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;        prevheight = <a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#aa159850f20499e5bc1067f533d2fa820">protocol_plugin_get_height</a>(gp);</div><div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;</div><div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;        <span class="keywordflow">if</span> ((gpwidth != prevwidth || gpheight != prevheight) &amp;&amp; gpwidth &gt;= 200 &amp;&amp; gpheight &gt;= 200) {</div><div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;            <span class="keywordflow">if</span> (rfi-&gt;<a class="code" href="structrf__context.html#ab5ffc4d8ba9d3d8a298414dc8e4efd2a">rdpgfxchan</a>) {</div><div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;                <span class="comment">/* Workaround for FreeRDP issue #5417 */</span></div><div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;                <span class="keywordflow">if</span> (gpwidth &lt; AVC_MIN_DESKTOP_WIDTH)</div><div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;                    gpwidth = AVC_MIN_DESKTOP_WIDTH;</div><div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;                <span class="keywordflow">if</span> (gpheight &lt; AVC_MIN_DESKTOP_HEIGHT)</div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;                    gpheight = AVC_MIN_DESKTOP_HEIGHT;</div><div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;            }</div><div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;            rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a84797e0cdf4484432740a8946325f126">type</a> = <a class="code" href="rdp__plugin_8h.html#adafbb901615d7fc9d8f31d5dbdae29d7a1973a1fe40811ab9a21bc77c23c42a05">REMMINA_RDP_EVENT_TYPE_SEND_MONITOR_LAYOUT</a>;</div><div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;            <span class="keywordflow">if</span> (<a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#a0c7eab256e1b1fdf84be44e28cddc3de">file_get_int</a>(remminafile, <span class="stringliteral">&quot;multimon&quot;</span>, FALSE)) {</div><div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;                <span class="keyword">const</span> rdpMonitor *base = freerdp_settings_get_pointer(rfi-&gt;<a class="code" href="structrf__context.html#a28d215e4ddb5decc543c3c6578df5e3d">settings</a>, FreeRDP_MonitorDefArray);</div><div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;                <span class="keywordflow">for</span> (gint i = 0; i &lt; freerdp_settings_get_uint32(rfi-&gt;<a class="code" href="structrf__context.html#a28d215e4ddb5decc543c3c6578df5e3d">settings</a>, FreeRDP_MonitorCount); ++i) {</div><div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;                    <span class="keyword">const</span> rdpMonitor *current = &amp;base[i];</div><div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;                    REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;Sending display layout n° %d&quot;</span>, i);</div><div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;                    rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a699aeed24ff4a648e00aced7a1e3adf6">monitor_layout</a>.Flags = current-&gt;is_primary;</div><div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;                    REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;EVNT MON LAYOUT - Flags: %i&quot;</span>, rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a699aeed24ff4a648e00aced7a1e3adf6">monitor_layout</a>.Flags);</div><div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;                    rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a699aeed24ff4a648e00aced7a1e3adf6">monitor_layout</a>.Left = current-&gt;x;</div><div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;                    REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;EVNT MON LAYOUT - Left: %i&quot;</span>, rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a699aeed24ff4a648e00aced7a1e3adf6">monitor_layout</a>.Left);</div><div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;                    rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a699aeed24ff4a648e00aced7a1e3adf6">monitor_layout</a>.Top = current-&gt;y;</div><div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;                    REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;EVNT MON LAYOUT - Top: %i&quot;</span>, rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a699aeed24ff4a648e00aced7a1e3adf6">monitor_layout</a>.Top);</div><div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;                    rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a699aeed24ff4a648e00aced7a1e3adf6">monitor_layout</a>.width = current-&gt;width;</div><div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;                    REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;EVNT MON LAYOUT - width: %i&quot;</span>, rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a699aeed24ff4a648e00aced7a1e3adf6">monitor_layout</a>.width);</div><div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;                    rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a699aeed24ff4a648e00aced7a1e3adf6">monitor_layout</a>.height = current-&gt;height;</div><div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;                    REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;EVNT MON LAYOUT - height: %i&quot;</span>, rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a699aeed24ff4a648e00aced7a1e3adf6">monitor_layout</a>.height);</div><div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;                    rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a699aeed24ff4a648e00aced7a1e3adf6">monitor_layout</a>.physicalWidth = current-&gt;attributes.physicalWidth;</div><div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;                    REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;EVNT MON LAYOUT - physicalWidth: %i&quot;</span>, rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a699aeed24ff4a648e00aced7a1e3adf6">monitor_layout</a>.physicalWidth);</div><div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;                    rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a699aeed24ff4a648e00aced7a1e3adf6">monitor_layout</a>.physicalHeight = current-&gt;attributes.physicalHeight;</div><div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;                    REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;EVNT MON LAYOUT - PhysicalHeight: %i&quot;</span>, rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a699aeed24ff4a648e00aced7a1e3adf6">monitor_layout</a>.physicalHeight);</div><div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;                    <span class="keywordflow">if</span> (current-&gt;attributes.orientation)</div><div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;                        rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a699aeed24ff4a648e00aced7a1e3adf6">monitor_layout</a>.desktopOrientation = current-&gt;attributes.orientation;</div><div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;                    <span class="keywordflow">else</span></div><div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;                        rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a699aeed24ff4a648e00aced7a1e3adf6">monitor_layout</a>.desktopOrientation = rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a699aeed24ff4a648e00aced7a1e3adf6">monitor_layout</a>.desktopOrientation;</div><div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;                    REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;EVNT MON LAYOUT - desktopOrientation: %i&quot;</span>, rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a699aeed24ff4a648e00aced7a1e3adf6">monitor_layout</a>.desktopOrientation);</div><div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;                    rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a699aeed24ff4a648e00aced7a1e3adf6">monitor_layout</a>.desktopScaleFactor = rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a699aeed24ff4a648e00aced7a1e3adf6">monitor_layout</a>.desktopScaleFactor;</div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;                    REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;EVNT MON LAYOUT - ScaleFactorflag: %i&quot;</span>, rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a699aeed24ff4a648e00aced7a1e3adf6">monitor_layout</a>.desktopScaleFactor);</div><div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;                    rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a699aeed24ff4a648e00aced7a1e3adf6">monitor_layout</a>.deviceScaleFactor = rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a699aeed24ff4a648e00aced7a1e3adf6">monitor_layout</a>.deviceScaleFactor;</div><div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;                }</div><div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;                <a class="code" href="rdp__event_8c.html#ad446d6471bddba97f8bfcee8c51e4580">remmina_rdp_event_event_push</a>(gp, &amp;rdp_event);</div><div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;            } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;                rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a699aeed24ff4a648e00aced7a1e3adf6">monitor_layout</a>.width = gpwidth;</div><div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;                rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a699aeed24ff4a648e00aced7a1e3adf6">monitor_layout</a>.height = gpheight;</div><div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;                rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a699aeed24ff4a648e00aced7a1e3adf6">monitor_layout</a>.desktopOrientation = desktopOrientation;</div><div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;                rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a699aeed24ff4a648e00aced7a1e3adf6">monitor_layout</a>.desktopScaleFactor = desktopScaleFactor;</div><div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;                rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a699aeed24ff4a648e00aced7a1e3adf6">monitor_layout</a>.deviceScaleFactor = deviceScaleFactor;</div><div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;                <a class="code" href="rdp__event_8c.html#ad446d6471bddba97f8bfcee8c51e4580">remmina_rdp_event_event_push</a>(gp, &amp;rdp_event);</div><div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;            }</div><div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;        }</div><div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;    }</div><div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;</div><div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;    g_free(monitorids);</div><div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;</div><div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;    <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;}</div><div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;</div><div class="line"><a name="l00484"></a><span class="lineno"><a class="line" href="rdp__event_8h.html#ac7c8d626470553c1659312697811dbfe">  484</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="rdp__event_8c.html#ac7c8d626470553c1659312697811dbfe">remmina_rdp_event_send_delayed_monitor_layout</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;{</div><div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;    <a class="code" href="structrf__context.html">rfContext</a> *rfi = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;</div><div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;    <span class="keywordflow">if</span> (!rfi || !rfi-&gt;<a class="code" href="structrf__context.html#a3c2ffa55ba97bc70324d61b8cc838e73">connected</a> || rfi-&gt;<a class="code" href="structrf__context.html#af40c80ff8296b9bcc3ac437bf0be55f8">is_reconnecting</a>)</div><div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;    <span class="keywordflow">if</span> (rfi-&gt;<a class="code" href="structrf__context.html#a957e6f6867170470689210d55770342e">delayed_monitor_layout_handler</a>) {</div><div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;        g_source_remove(rfi-&gt;<a class="code" href="structrf__context.html#a957e6f6867170470689210d55770342e">delayed_monitor_layout_handler</a>);</div><div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;        rfi-&gt;<a class="code" href="structrf__context.html#a957e6f6867170470689210d55770342e">delayed_monitor_layout_handler</a> = 0;</div><div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;    }</div><div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;    <span class="keywordflow">if</span> (rfi-&gt;<a class="code" href="structrf__context.html#a96c4689f6bc062482536038cb3b24e78">scale</a> == <a class="code" href="types_8h.html#aeea5ee1e675368413b6f6ab09883e7dea4d22c6eed721b661d618098159a20946">REMMINA_PROTOCOL_WIDGET_SCALE_MODE_DYNRES</a>)</div><div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;        rfi-&gt;<a class="code" href="structrf__context.html#a957e6f6867170470689210d55770342e">delayed_monitor_layout_handler</a> = g_timeout_add(500, (GSourceFunc)<a class="code" href="rdp__event_8c.html#a35376ff50915de1c14285e6326bc943e">remmina_rdp_event_delayed_monitor_layout</a>, gp);</div><div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;}</div><div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;</div><div class="line"><a name="l00499"></a><span class="lineno"><a class="line" href="rdp__event_8c.html#a3a722112276948dbc5823a9adec2e225">  499</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="rdp__event_8c.html#a3a722112276948dbc5823a9adec2e225">remmina_rdp_event_on_configure</a>(GtkWidget *widget, GdkEventConfigure *event, <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;{</div><div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;    <span class="comment">/* Called when gp changes its size or position */</span></div><div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;</div><div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;    <a class="code" href="structrf__context.html">rfContext</a> *rfi = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;</div><div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;    <span class="keywordflow">if</span> (!rfi || !rfi-&gt;<a class="code" href="structrf__context.html#a3c2ffa55ba97bc70324d61b8cc838e73">connected</a> || rfi-&gt;<a class="code" href="structrf__context.html#af40c80ff8296b9bcc3ac437bf0be55f8">is_reconnecting</a>)</div><div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;</div><div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;    <a class="code" href="rdp__event_8c.html#a6076424eb759c91ca9c8da59432c66d6">remmina_rdp_event_update_scale_factor</a>(gp);</div><div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;</div><div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;    <span class="comment">/* If the scaler is not active, schedule a delayed remote resolution change */</span></div><div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;    <a class="code" href="rdp__event_8c.html#ac7c8d626470553c1659312697811dbfe">remmina_rdp_event_send_delayed_monitor_layout</a>(gp);</div><div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;</div><div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;</div><div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;    <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;}</div><div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;</div><div class="line"><a name="l00518"></a><span class="lineno"><a class="line" href="rdp__event_8c.html#afe3b6a9e7d9319bca7021ddd29d39332">  518</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="rdp__event_8c.html#afe3b6a9e7d9319bca7021ddd29d39332">remmina_rdp_event_translate_pos</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <span class="keywordtype">int</span> ix, <span class="keywordtype">int</span> iy, UINT16 *ox, UINT16 *oy)</div><div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;{</div><div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;    <a class="code" href="structrf__context.html">rfContext</a> *rfi = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;</div><div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;    <span class="comment">/*</span></div><div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;<span class="comment">     * Translate a position from local window coordinates (ix,iy) to</span></div><div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;<span class="comment">     * RDP coordinates and put result on (*ox,*uy)</span></div><div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;<span class="comment">     * */</span></div><div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;</div><div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;    <span class="keywordflow">if</span> (!rfi || !rfi-&gt;<a class="code" href="structrf__context.html#a3c2ffa55ba97bc70324d61b8cc838e73">connected</a> || rfi-&gt;<a class="code" href="structrf__context.html#af40c80ff8296b9bcc3ac437bf0be55f8">is_reconnecting</a>)</div><div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;</div><div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;    <span class="keywordflow">if</span> ((rfi-&gt;<a class="code" href="structrf__context.html#a96c4689f6bc062482536038cb3b24e78">scale</a> == <a class="code" href="types_8h.html#aeea5ee1e675368413b6f6ab09883e7deac7786e2cea7d9bf95026069ed774ea20">REMMINA_PROTOCOL_WIDGET_SCALE_MODE_SCALED</a>) &amp;&amp; (rfi-&gt;<a class="code" href="structrf__context.html#aedf6fcd090e6ba788956565ce312ab70">scale_width</a> &gt;= 1) &amp;&amp; (rfi-&gt;<a class="code" href="structrf__context.html#a76ff7add3727e4a8b82f7b4615f09169">scale_height</a> &gt;= 1)) {</div><div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;        *ox = (UINT16)(ix * <a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#adf255b7ceaec6a51fc9269cf824a02ce">protocol_plugin_get_width</a>(gp) / rfi-&gt;<a class="code" href="structrf__context.html#aedf6fcd090e6ba788956565ce312ab70">scale_width</a>);</div><div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;        *oy = (UINT16)(iy * <a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#aa159850f20499e5bc1067f533d2fa820">protocol_plugin_get_height</a>(gp) / rfi-&gt;<a class="code" href="structrf__context.html#a76ff7add3727e4a8b82f7b4615f09169">scale_height</a>);</div><div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;        *ox = (UINT16)ix;</div><div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;        *oy = (UINT16)iy;</div><div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;    }</div><div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;}</div><div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;</div><div class="line"><a name="l00540"></a><span class="lineno"><a class="line" href="rdp__event_8c.html#a20d5fac8955f4f813759ca5c32078b7c">  540</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="rdp__event_8c.html#a20d5fac8955f4f813759ca5c32078b7c">remmina_rdp_event_reverse_translate_pos_reverse</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <span class="keywordtype">int</span> ix, <span class="keywordtype">int</span> iy, <span class="keywordtype">int</span> *ox, <span class="keywordtype">int</span> *oy)</div><div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;{</div><div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;    <a class="code" href="structrf__context.html">rfContext</a> *rfi = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;</div><div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;    <span class="comment">/*</span></div><div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;<span class="comment">     * Translate a position from RDP coordinates (ix,iy) to</span></div><div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;<span class="comment">     * local window coordinates and put result on (*ox,*uy)</span></div><div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;<span class="comment">     * */</span></div><div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;</div><div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;    <span class="keywordflow">if</span> (!rfi || !rfi-&gt;<a class="code" href="structrf__context.html#a3c2ffa55ba97bc70324d61b8cc838e73">connected</a> || rfi-&gt;<a class="code" href="structrf__context.html#af40c80ff8296b9bcc3ac437bf0be55f8">is_reconnecting</a>)</div><div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;</div><div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;    <span class="keywordflow">if</span> ((rfi-&gt;<a class="code" href="structrf__context.html#a96c4689f6bc062482536038cb3b24e78">scale</a> == <a class="code" href="types_8h.html#aeea5ee1e675368413b6f6ab09883e7deac7786e2cea7d9bf95026069ed774ea20">REMMINA_PROTOCOL_WIDGET_SCALE_MODE_SCALED</a>) &amp;&amp; (rfi-&gt;<a class="code" href="structrf__context.html#aedf6fcd090e6ba788956565ce312ab70">scale_width</a> &gt;= 1) &amp;&amp; (rfi-&gt;<a class="code" href="structrf__context.html#a76ff7add3727e4a8b82f7b4615f09169">scale_height</a> &gt;= 1)) {</div><div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;        *ox = (ix * rfi-&gt;<a class="code" href="structrf__context.html#aedf6fcd090e6ba788956565ce312ab70">scale_width</a>) / <a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#adf255b7ceaec6a51fc9269cf824a02ce">protocol_plugin_get_width</a>(gp);</div><div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;        *oy = (iy * rfi-&gt;<a class="code" href="structrf__context.html#a76ff7add3727e4a8b82f7b4615f09169">scale_height</a>) / <a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#aa159850f20499e5bc1067f533d2fa820">protocol_plugin_get_height</a>(gp);</div><div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;        *ox = ix;</div><div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;        *oy = iy;</div><div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;    }</div><div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;}</div><div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;</div><div class="line"><a name="l00562"></a><span class="lineno"><a class="line" href="rdp__event_8h.html#af113a6f49730a1ec27d198ed3c2ccde6">  562</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="rdp__event_8c.html#af113a6f49730a1ec27d198ed3c2ccde6">remmina_rdp_mouse_jitter</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp){</div><div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;    <a class="code" href="structremmina__plugin__rdp__event.html">RemminaPluginRdpEvent</a> rdp_event = { 0 };</div><div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;    <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;    <a class="code" href="structrf__context.html">rfContext</a> *rfi = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;</div><div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;    remminafile = <a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#a1409dcc143ddc35de86b792df095cfc4">protocol_plugin_get_file</a>(gp);</div><div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#a0c7eab256e1b1fdf84be44e28cddc3de">file_get_int</a>(remminafile, <span class="stringliteral">&quot;viewonly&quot;</span>, FALSE))</div><div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;</div><div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;    rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a84797e0cdf4484432740a8946325f126">type</a> = <a class="code" href="rdp__plugin_8h.html#adafbb901615d7fc9d8f31d5dbdae29d7a8c8701fc5ef4ff1196c8d088dd146a5b">REMMINA_RDP_EVENT_TYPE_MOUSE</a>;</div><div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;    rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#ada88729499d8df4337a81d1cd5bcd7bf">mouse_event</a>.flags = PTR_FLAGS_MOVE;</div><div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;    rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#ada88729499d8df4337a81d1cd5bcd7bf">mouse_event</a>.extended = FALSE;</div><div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;    rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#ada88729499d8df4337a81d1cd5bcd7bf">mouse_event</a>.x = rfi-&gt;<a class="code" href="structrf__context.html#aa04b5624216d612d134b7439658f8b17">last_x</a>;</div><div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;    rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#ada88729499d8df4337a81d1cd5bcd7bf">mouse_event</a>.y = rfi-&gt;<a class="code" href="structrf__context.html#a17882b5983101e3053c7e0dc494d44a1">last_y</a>;</div><div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;    <a class="code" href="rdp__event_8c.html#ad446d6471bddba97f8bfcee8c51e4580">remmina_rdp_event_event_push</a>(gp, &amp;rdp_event);</div><div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;}</div><div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;</div><div class="line"><a name="l00580"></a><span class="lineno"><a class="line" href="rdp__event_8c.html#ac27328f2796bd021d174c0f4b172c024">  580</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="rdp__event_8c.html#ac27328f2796bd021d174c0f4b172c024">remmina_rdp_event_on_motion</a>(GtkWidget *widget, GdkEventMotion *event, <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;{</div><div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;    <a class="code" href="structremmina__plugin__rdp__event.html">RemminaPluginRdpEvent</a> rdp_event = { 0 };</div><div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;    <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;    <a class="code" href="structrf__context.html">rfContext</a> *rfi = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;</div><div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;    remminafile = <a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#a1409dcc143ddc35de86b792df095cfc4">protocol_plugin_get_file</a>(gp);</div><div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#a0c7eab256e1b1fdf84be44e28cddc3de">file_get_int</a>(remminafile, <span class="stringliteral">&quot;viewonly&quot;</span>, FALSE))</div><div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;</div><div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;    rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a84797e0cdf4484432740a8946325f126">type</a> = <a class="code" href="rdp__plugin_8h.html#adafbb901615d7fc9d8f31d5dbdae29d7a8c8701fc5ef4ff1196c8d088dd146a5b">REMMINA_RDP_EVENT_TYPE_MOUSE</a>;</div><div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;    rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#ada88729499d8df4337a81d1cd5bcd7bf">mouse_event</a>.flags = PTR_FLAGS_MOVE;</div><div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;    rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#ada88729499d8df4337a81d1cd5bcd7bf">mouse_event</a>.extended = FALSE;</div><div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;</div><div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;    <a class="code" href="rdp__event_8c.html#afe3b6a9e7d9319bca7021ddd29d39332">remmina_rdp_event_translate_pos</a>(gp, event-&gt;x, event-&gt;y, &amp;rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#ada88729499d8df4337a81d1cd5bcd7bf">mouse_event</a>.x, &amp;rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#ada88729499d8df4337a81d1cd5bcd7bf">mouse_event</a>.y);</div><div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;    <span class="keywordflow">if</span> (rfi != NULL){</div><div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;        rfi-&gt;<a class="code" href="structrf__context.html#aa04b5624216d612d134b7439658f8b17">last_x</a> = rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#ada88729499d8df4337a81d1cd5bcd7bf">mouse_event</a>.x;</div><div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;        rfi-&gt;<a class="code" href="structrf__context.html#a17882b5983101e3053c7e0dc494d44a1">last_y</a> = rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#ada88729499d8df4337a81d1cd5bcd7bf">mouse_event</a>.y;</div><div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;    }</div><div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;    </div><div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;    <a class="code" href="rdp__event_8c.html#ad446d6471bddba97f8bfcee8c51e4580">remmina_rdp_event_event_push</a>(gp, &amp;rdp_event);</div><div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;</div><div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;    <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;}</div><div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160;</div><div class="line"><a name="l00606"></a><span class="lineno"><a class="line" href="rdp__event_8c.html#a0caf4ffb4011d001301ea10f2c3f75e6">  606</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="rdp__event_8c.html#a0caf4ffb4011d001301ea10f2c3f75e6">remmina_rdp_event_on_button</a>(GtkWidget *widget, GdkEventButton *event, <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;{</div><div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;    gint flag;</div><div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;    gboolean extended = FALSE;</div><div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;    <a class="code" href="structremmina__plugin__rdp__event.html">RemminaPluginRdpEvent</a> rdp_event = { 0 };</div><div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;    gint primary, secondary;</div><div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;</div><div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;    <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;</div><div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;    remminafile = <a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#a1409dcc143ddc35de86b792df095cfc4">protocol_plugin_get_file</a>(gp);</div><div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#a0c7eab256e1b1fdf84be44e28cddc3de">file_get_int</a>(remminafile, <span class="stringliteral">&quot;viewonly&quot;</span>, FALSE))</div><div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;</div><div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;    <span class="comment">/* We bypass 2button-press and 3button-press events */</span></div><div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;    <span class="keywordflow">if</span> ((event-&gt;type != GDK_BUTTON_PRESS) &amp;&amp; (<span class="keyword">event</span>-&gt;type != GDK_BUTTON_RELEASE))</div><div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;        <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;</div><div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;    flag = 0;</div><div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;</div><div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#a0c7eab256e1b1fdf84be44e28cddc3de">file_get_int</a>(remminafile, <span class="stringliteral">&quot;left-handed&quot;</span>, FALSE)) {</div><div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;        primary = PTR_FLAGS_BUTTON2;</div><div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;        secondary = PTR_FLAGS_BUTTON1;</div><div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;        primary = PTR_FLAGS_BUTTON1;</div><div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;        secondary = PTR_FLAGS_BUTTON2;</div><div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;    }</div><div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;</div><div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;    <span class="keywordflow">switch</span> (event-&gt;button) {</div><div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;    <span class="keywordflow">case</span> 1:</div><div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;        flag |= primary;</div><div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;    <span class="keywordflow">case</span> 2:</div><div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;        flag |= PTR_FLAGS_BUTTON3;</div><div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;    <span class="keywordflow">case</span> 3:</div><div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;        flag |= secondary;</div><div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;    <span class="keywordflow">case</span> 8:                 <span class="comment">/* back */</span></div><div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;    <span class="keywordflow">case</span> 97:                <span class="comment">/* Xming */</span></div><div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;        extended = TRUE;</div><div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;        flag |= PTR_XFLAGS_BUTTON1;</div><div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;    <span class="keywordflow">case</span> 9:                 <span class="comment">/* forward */</span></div><div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;    <span class="keywordflow">case</span> 112:               <span class="comment">/* Xming */</span></div><div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;        extended = TRUE;</div><div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;        flag |= PTR_XFLAGS_BUTTON2;</div><div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;    <span class="keywordflow">default</span>:</div><div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;    }</div><div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;</div><div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;    <span class="keywordflow">if</span> (event-&gt;type == GDK_BUTTON_PRESS) {</div><div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;        <span class="keywordflow">if</span> (extended)</div><div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;            flag |= PTR_XFLAGS_DOWN;</div><div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;            flag |= PTR_FLAGS_DOWN;</div><div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;    }</div><div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;</div><div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160;    rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a84797e0cdf4484432740a8946325f126">type</a> = <a class="code" href="rdp__plugin_8h.html#adafbb901615d7fc9d8f31d5dbdae29d7a8c8701fc5ef4ff1196c8d088dd146a5b">REMMINA_RDP_EVENT_TYPE_MOUSE</a>;</div><div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;    <a class="code" href="rdp__event_8c.html#afe3b6a9e7d9319bca7021ddd29d39332">remmina_rdp_event_translate_pos</a>(gp, event-&gt;x, event-&gt;y, &amp;rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#ada88729499d8df4337a81d1cd5bcd7bf">mouse_event</a>.x, &amp;rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#ada88729499d8df4337a81d1cd5bcd7bf">mouse_event</a>.y);</div><div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;</div><div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;    <span class="keywordflow">if</span> (flag != 0) {</div><div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;        rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#ada88729499d8df4337a81d1cd5bcd7bf">mouse_event</a>.flags = flag;</div><div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;        rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#ada88729499d8df4337a81d1cd5bcd7bf">mouse_event</a>.extended = extended;</div><div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;        <a class="code" href="rdp__event_8c.html#ad446d6471bddba97f8bfcee8c51e4580">remmina_rdp_event_event_push</a>(gp, &amp;rdp_event);</div><div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;    }</div><div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;</div><div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;    <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;}</div><div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;</div><div class="line"><a name="l00677"></a><span class="lineno"><a class="line" href="rdp__event_8c.html#a9d63c3ac635001e62851ec4bc5fb7469">  677</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="rdp__event_8c.html#a9d63c3ac635001e62851ec4bc5fb7469">remmina_rdp_event_on_scroll</a>(GtkWidget *widget, GdkEventScroll *event, <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;{</div><div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;    gint flag;</div><div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;    <a class="code" href="structremmina__plugin__rdp__event.html">RemminaPluginRdpEvent</a> rdp_event = { 0 };</div><div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;    <span class="keywordtype">float</span> windows_delta;</div><div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160;    <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160;</div><div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160;    remminafile = <a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#a1409dcc143ddc35de86b792df095cfc4">protocol_plugin_get_file</a>(gp);</div><div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#a0c7eab256e1b1fdf84be44e28cddc3de">file_get_int</a>(remminafile, <span class="stringliteral">&quot;viewonly&quot;</span>, FALSE))</div><div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;</div><div class="line"><a name="l00689"></a><span class="lineno">  689</span>&#160;    flag = 0;</div><div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160;    rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a84797e0cdf4484432740a8946325f126">type</a> = <a class="code" href="rdp__plugin_8h.html#adafbb901615d7fc9d8f31d5dbdae29d7a8c8701fc5ef4ff1196c8d088dd146a5b">REMMINA_RDP_EVENT_TYPE_MOUSE</a>;</div><div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;</div><div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;    <span class="comment">/* See [MS-RDPBCGR] TS_POINTER_EVENT and WM_MOUSEWHEEL message */</span></div><div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160;</div><div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160;    <span class="keywordflow">switch</span> (event-&gt;direction) {</div><div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;    <span class="keywordflow">case</span> GDK_SCROLL_UP:</div><div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;        flag = PTR_FLAGS_WHEEL | 0x0078;  <span class="comment">// 120 is one scroll unit defined in WM_MOUSEWHEEL</span></div><div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;</div><div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160;    <span class="keywordflow">case</span> GDK_SCROLL_DOWN:</div><div class="line"><a name="l00700"></a><span class="lineno">  700</span>&#160;        flag = PTR_FLAGS_WHEEL | 0x0188;  <span class="comment">// -120 (one scroll unit) in 9 bits two&#39;s complement</span></div><div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;</div><div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;<span class="preprocessor">#if GTK_CHECK_VERSION(3, 4, 0)</span></div><div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;    <span class="keywordflow">case</span> GDK_SCROLL_SMOOTH:</div><div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;</div><div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160;        <span class="keywordflow">if</span> (event-&gt;delta_y == 0.0)</div><div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;            <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;</div><div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;        windows_delta = <span class="keyword">event</span>-&gt;delta_y * -120;</div><div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;</div><div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;        <span class="keywordflow">if</span> (windows_delta &gt; 255)</div><div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;            windows_delta = 255;</div><div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160;        <span class="keywordflow">if</span> (windows_delta &lt; -256)</div><div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;            windows_delta = -256;</div><div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;</div><div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;        flag = PTR_FLAGS_WHEEL | ((short)windows_delta &amp; WheelRotationMask);</div><div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;</div><div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;</div><div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;    <span class="keywordflow">default</span>:</div><div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;    }</div><div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160;</div><div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;    rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#ada88729499d8df4337a81d1cd5bcd7bf">mouse_event</a>.flags = flag;</div><div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;    rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#ada88729499d8df4337a81d1cd5bcd7bf">mouse_event</a>.extended = FALSE;</div><div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;    <a class="code" href="rdp__event_8c.html#afe3b6a9e7d9319bca7021ddd29d39332">remmina_rdp_event_translate_pos</a>(gp, event-&gt;x, event-&gt;y, &amp;rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#ada88729499d8df4337a81d1cd5bcd7bf">mouse_event</a>.x, &amp;rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#ada88729499d8df4337a81d1cd5bcd7bf">mouse_event</a>.y);</div><div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;    <a class="code" href="rdp__event_8c.html#ad446d6471bddba97f8bfcee8c51e4580">remmina_rdp_event_event_push</a>(gp, &amp;rdp_event);</div><div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;</div><div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;    <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;}</div><div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;</div><div class="line"><a name="l00733"></a><span class="lineno"><a class="line" href="rdp__event_8c.html#a4eeb2bd828f9fae2c549f3ef8a1e20c0">  733</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="rdp__event_8c.html#a4eeb2bd828f9fae2c549f3ef8a1e20c0">remmina_rdp_event_init_keymap</a>(<a class="code" href="structrf__context.html">rfContext</a> *rfi, <span class="keyword">const</span> gchar *strmap)</div><div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;{</div><div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;    <span class="keywordtype">long</span> <span class="keywordtype">int</span> v1, v2;</div><div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">char</span> *s;</div><div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;    <span class="keywordtype">char</span> *endptr;</div><div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;    <a class="code" href="structremmina__plugin__rdp__keymap__entry.html">RemminaPluginRdpKeymapEntry</a> ke;</div><div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;</div><div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;    <span class="keywordflow">if</span> (strmap == NULL || strmap[0] == 0) {</div><div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;        rfi-&gt;<a class="code" href="structrf__context.html#a3712f6b20462e62a6bb87038e5f10d9d">keymap</a> = NULL;</div><div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;    }</div><div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;    s = strmap;</div><div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;    rfi-&gt;<a class="code" href="structrf__context.html#a3712f6b20462e62a6bb87038e5f10d9d">keymap</a> = g_array_new(FALSE, TRUE, <span class="keyword">sizeof</span>(<a class="code" href="structremmina__plugin__rdp__keymap__entry.html">RemminaPluginRdpKeymapEntry</a>));</div><div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;    <span class="keywordflow">while</span> (1) {</div><div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;        v1 = strtol(s, &amp;endptr, 10);</div><div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;        <span class="keywordflow">if</span> (endptr == s) <span class="keywordflow">break</span>;</div><div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;        s = endptr;</div><div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;        <span class="keywordflow">if</span> (*s != <span class="charliteral">&#39;:&#39;</span>) <span class="keywordflow">break</span>;</div><div class="line"><a name="l00751"></a><span class="lineno">  751</span>&#160;        s++;</div><div class="line"><a name="l00752"></a><span class="lineno">  752</span>&#160;        v2 = strtol(s, &amp;endptr, 10);</div><div class="line"><a name="l00753"></a><span class="lineno">  753</span>&#160;        <span class="keywordflow">if</span> (endptr == s) <span class="keywordflow">break</span>;</div><div class="line"><a name="l00754"></a><span class="lineno">  754</span>&#160;        s = endptr;</div><div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;        ke.<a class="code" href="structremmina__plugin__rdp__keymap__entry.html#a20d8c7c462c3cb173e3baedbc19a8a88">orig_keycode</a> = v1 &amp; 0x7fffffff;</div><div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;        ke.<a class="code" href="structremmina__plugin__rdp__keymap__entry.html#aa63271d75f6dfda81584ddfb7c60b2a1">translated_keycode</a> = v2 &amp; 0x7fffffff;</div><div class="line"><a name="l00757"></a><span class="lineno">  757</span>&#160;        g_array_append_val(rfi-&gt;<a class="code" href="structrf__context.html#a3712f6b20462e62a6bb87038e5f10d9d">keymap</a>, ke);</div><div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;        <span class="keywordflow">if</span> (*s != <span class="charliteral">&#39;,&#39;</span>) <span class="keywordflow">break</span>;</div><div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;        s++;</div><div class="line"><a name="l00760"></a><span class="lineno">  760</span>&#160;    }</div><div class="line"><a name="l00761"></a><span class="lineno">  761</span>&#160;    <span class="keywordflow">if</span> (rfi-&gt;<a class="code" href="structrf__context.html#a3712f6b20462e62a6bb87038e5f10d9d">keymap</a>-&gt;len == 0) {</div><div class="line"><a name="l00762"></a><span class="lineno">  762</span>&#160;        g_array_unref(rfi-&gt;<a class="code" href="structrf__context.html#a3712f6b20462e62a6bb87038e5f10d9d">keymap</a>);</div><div class="line"><a name="l00763"></a><span class="lineno">  763</span>&#160;        rfi-&gt;<a class="code" href="structrf__context.html#a3712f6b20462e62a6bb87038e5f10d9d">keymap</a> = NULL;</div><div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160;    }</div><div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;}</div><div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;</div><div class="line"><a name="l00767"></a><span class="lineno"><a class="line" href="rdp__event_8c.html#ad8f0d0f1b1b75646523f3b241f124e56">  767</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="rdp__event_8c.html#ad8f0d0f1b1b75646523f3b241f124e56">remmina_rdp_event_on_key</a>(GtkWidget *widget, GdkEventKey *event, <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160;{</div><div class="line"><a name="l00769"></a><span class="lineno">  769</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;    guint32 unicode_keyval;</div><div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;    guint16 hardware_keycode;</div><div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;    <a class="code" href="structrf__context.html">rfContext</a> *rfi = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160;    <a class="code" href="structremmina__plugin__rdp__event.html">RemminaPluginRdpEvent</a> rdp_event;</div><div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160;    <a class="code" href="structremmina__plugin__rdp__keymap__entry.html">RemminaPluginRdpKeymapEntry</a> *kep;</div><div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;    <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l00776"></a><span class="lineno">  776</span>&#160;    DWORD scancode = 0;</div><div class="line"><a name="l00777"></a><span class="lineno">  777</span>&#160;    <span class="keywordtype">int</span> ik;</div><div class="line"><a name="l00778"></a><span class="lineno">  778</span>&#160;</div><div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160;    <span class="keywordflow">if</span> (!rfi || !rfi-&gt;<a class="code" href="structrf__context.html#a3c2ffa55ba97bc70324d61b8cc838e73">connected</a> || rfi-&gt;<a class="code" href="structrf__context.html#af40c80ff8296b9bcc3ac437bf0be55f8">is_reconnecting</a>)</div><div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160;</div><div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160;    remminafile = <a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#a1409dcc143ddc35de86b792df095cfc4">protocol_plugin_get_file</a>(gp);</div><div class="line"><a name="l00783"></a><span class="lineno">  783</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#a0c7eab256e1b1fdf84be44e28cddc3de">file_get_int</a>(remminafile, <span class="stringliteral">&quot;viewonly&quot;</span>, FALSE))</div><div class="line"><a name="l00784"></a><span class="lineno">  784</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00785"></a><span class="lineno">  785</span>&#160;</div><div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160;<span class="preprocessor">#ifdef ENABLE_GTK_INSPECTOR_KEY</span></div><div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;    <span class="comment">/* GTK inspector key is propagated up. Disabled by default.</span></div><div class="line"><a name="l00788"></a><span class="lineno">  788</span>&#160;<span class="comment">     * enable it by defining ENABLE_GTK_INSPECTOR_KEY */</span></div><div class="line"><a name="l00789"></a><span class="lineno">  789</span>&#160;    <span class="keywordflow">if</span> ((event-&gt;state &amp; GDK_CONTROL_MASK) != 0 &amp;&amp; (<span class="keyword">event</span>-&gt;keyval == GDK_KEY_I || <span class="keyword">event</span>-&gt;keyval == GDK_KEY_D))</div><div class="line"><a name="l00790"></a><span class="lineno">  790</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160;</div><div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00793"></a><span class="lineno">  793</span>&#160;</div><div class="line"><a name="l00794"></a><span class="lineno">  794</span>&#160;    rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a84797e0cdf4484432740a8946325f126">type</a> = <a class="code" href="rdp__plugin_8h.html#adafbb901615d7fc9d8f31d5dbdae29d7ae248ff32977c650df357c079f9d8b6e2">REMMINA_RDP_EVENT_TYPE_SCANCODE</a>;</div><div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160;    rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.up = (<span class="keyword">event</span>-&gt;type == GDK_KEY_PRESS ? false : <span class="keyword">true</span>);</div><div class="line"><a name="l00796"></a><span class="lineno">  796</span>&#160;    rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.extended = <span class="keyword">false</span>;</div><div class="line"><a name="l00797"></a><span class="lineno">  797</span>&#160;    rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.extended1 = <span class="keyword">false</span>;</div><div class="line"><a name="l00798"></a><span class="lineno">  798</span>&#160;</div><div class="line"><a name="l00799"></a><span class="lineno">  799</span>&#160;    <span class="keywordflow">switch</span> (event-&gt;keyval) {</div><div class="line"><a name="l00800"></a><span class="lineno">  800</span>&#160;    <span class="keywordflow">case</span> GDK_KEY_Pause:</div><div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;        <span class="comment">/*</span></div><div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;<span class="comment">         * See https://msdn.microsoft.com/en-us/library/cc240584.aspx</span></div><div class="line"><a name="l00803"></a><span class="lineno">  803</span>&#160;<span class="comment">         * 2.2.8.1.1.3.1.1.1 Keyboard Event (TS_KEYBOARD_EVENT)</span></div><div class="line"><a name="l00804"></a><span class="lineno">  804</span>&#160;<span class="comment">         * for pause key management</span></div><div class="line"><a name="l00805"></a><span class="lineno">  805</span>&#160;<span class="comment">         */</span></div><div class="line"><a name="l00806"></a><span class="lineno">  806</span>&#160;        rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.key_code = 0x1D;</div><div class="line"><a name="l00807"></a><span class="lineno">  807</span>&#160;        rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.up = <span class="keyword">false</span>;</div><div class="line"><a name="l00808"></a><span class="lineno">  808</span>&#160;        rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.extended1 = TRUE;</div><div class="line"><a name="l00809"></a><span class="lineno">  809</span>&#160;        <a class="code" href="rdp__event_8c.html#ad446d6471bddba97f8bfcee8c51e4580">remmina_rdp_event_event_push</a>(gp, &amp;rdp_event);</div><div class="line"><a name="l00810"></a><span class="lineno">  810</span>&#160;        rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.key_code = 0x45;</div><div class="line"><a name="l00811"></a><span class="lineno">  811</span>&#160;        rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.up = <span class="keyword">false</span>;</div><div class="line"><a name="l00812"></a><span class="lineno">  812</span>&#160;        rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.extended1 = FALSE;</div><div class="line"><a name="l00813"></a><span class="lineno">  813</span>&#160;        <a class="code" href="rdp__event_8c.html#ad446d6471bddba97f8bfcee8c51e4580">remmina_rdp_event_event_push</a>(gp, &amp;rdp_event);</div><div class="line"><a name="l00814"></a><span class="lineno">  814</span>&#160;        rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.key_code = 0x1D;</div><div class="line"><a name="l00815"></a><span class="lineno">  815</span>&#160;        rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.up = <span class="keyword">true</span>;</div><div class="line"><a name="l00816"></a><span class="lineno">  816</span>&#160;        rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.extended1 = TRUE;</div><div class="line"><a name="l00817"></a><span class="lineno">  817</span>&#160;        <a class="code" href="rdp__event_8c.html#ad446d6471bddba97f8bfcee8c51e4580">remmina_rdp_event_event_push</a>(gp, &amp;rdp_event);</div><div class="line"><a name="l00818"></a><span class="lineno">  818</span>&#160;        rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.key_code = 0x45;</div><div class="line"><a name="l00819"></a><span class="lineno">  819</span>&#160;        rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.up = <span class="keyword">true</span>;</div><div class="line"><a name="l00820"></a><span class="lineno">  820</span>&#160;        rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.extended1 = FALSE;</div><div class="line"><a name="l00821"></a><span class="lineno">  821</span>&#160;        <a class="code" href="rdp__event_8c.html#ad446d6471bddba97f8bfcee8c51e4580">remmina_rdp_event_event_push</a>(gp, &amp;rdp_event);</div><div class="line"><a name="l00822"></a><span class="lineno">  822</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00823"></a><span class="lineno">  823</span>&#160;</div><div class="line"><a name="l00824"></a><span class="lineno">  824</span>&#160;    <span class="keywordflow">default</span>:</div><div class="line"><a name="l00825"></a><span class="lineno">  825</span>&#160;        <span class="keywordflow">if</span> (!rfi-&gt;<a class="code" href="structrf__context.html#ac1f3330674d320c9d0ae408c551be6b8">use_client_keymap</a>) {</div><div class="line"><a name="l00826"></a><span class="lineno">  826</span>&#160;            hardware_keycode = <span class="keyword">event</span>-&gt;hardware_keycode;</div><div class="line"><a name="l00827"></a><span class="lineno">  827</span>&#160;            <span class="keywordflow">if</span> (rfi-&gt;<a class="code" href="structrf__context.html#a3712f6b20462e62a6bb87038e5f10d9d">keymap</a>) {</div><div class="line"><a name="l00828"></a><span class="lineno">  828</span>&#160;                <span class="keywordflow">for</span> (ik = 0; ik &lt; rfi-&gt;<a class="code" href="structrf__context.html#a3712f6b20462e62a6bb87038e5f10d9d">keymap</a>-&gt;len; ik++) {</div><div class="line"><a name="l00829"></a><span class="lineno">  829</span>&#160;                    kep = &amp;g_array_index(rfi-&gt;<a class="code" href="structrf__context.html#a3712f6b20462e62a6bb87038e5f10d9d">keymap</a>, <a class="code" href="structremmina__plugin__rdp__keymap__entry.html">RemminaPluginRdpKeymapEntry</a>, ik);</div><div class="line"><a name="l00830"></a><span class="lineno">  830</span>&#160;                    <span class="keywordflow">if</span> (hardware_keycode == kep-&gt;<a class="code" href="structremmina__plugin__rdp__keymap__entry.html#a20d8c7c462c3cb173e3baedbc19a8a88">orig_keycode</a>) {</div><div class="line"><a name="l00831"></a><span class="lineno">  831</span>&#160;                        hardware_keycode = kep-&gt;<a class="code" href="structremmina__plugin__rdp__keymap__entry.html#aa63271d75f6dfda81584ddfb7c60b2a1">translated_keycode</a>;</div><div class="line"><a name="l00832"></a><span class="lineno">  832</span>&#160;                        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00833"></a><span class="lineno">  833</span>&#160;                    }</div><div class="line"><a name="l00834"></a><span class="lineno">  834</span>&#160;                }</div><div class="line"><a name="l00835"></a><span class="lineno">  835</span>&#160;            }</div><div class="line"><a name="l00836"></a><span class="lineno">  836</span>&#160;            scancode = freerdp_keyboard_get_rdp_scancode_from_x11_keycode(hardware_keycode);</div><div class="line"><a name="l00837"></a><span class="lineno">  837</span>&#160;            <span class="keywordflow">if</span> (scancode) {</div><div class="line"><a name="l00838"></a><span class="lineno">  838</span>&#160;                rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.key_code = scancode &amp; 0xFF;</div><div class="line"><a name="l00839"></a><span class="lineno">  839</span>&#160;                rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.extended = scancode &amp; 0x100;</div><div class="line"><a name="l00840"></a><span class="lineno">  840</span>&#160;                rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.extended1 = FALSE;</div><div class="line"><a name="l00841"></a><span class="lineno">  841</span>&#160;                <a class="code" href="rdp__event_8c.html#ad446d6471bddba97f8bfcee8c51e4580">remmina_rdp_event_event_push</a>(gp, &amp;rdp_event);</div><div class="line"><a name="l00842"></a><span class="lineno">  842</span>&#160;                <a class="code" href="rdp__event_8c.html#ab6e9a485532ccf8c22005dd7a7137fd2">keypress_list_add</a>(gp, rdp_event);</div><div class="line"><a name="l00843"></a><span class="lineno">  843</span>&#160;            }</div><div class="line"><a name="l00844"></a><span class="lineno">  844</span>&#160;        } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00845"></a><span class="lineno">  845</span>&#160;            unicode_keyval = gdk_keyval_to_unicode(event-&gt;keyval);</div><div class="line"><a name="l00846"></a><span class="lineno">  846</span>&#160;            <span class="comment">/* Decide when whe should send a keycode or a Unicode character.</span></div><div class="line"><a name="l00847"></a><span class="lineno">  847</span>&#160;<span class="comment">             * - All non char keys (Shift, Alt, Super) should be sent as keycode</span></div><div class="line"><a name="l00848"></a><span class="lineno">  848</span>&#160;<span class="comment">             * - Space should be sent as keycode (see issue #1364)</span></div><div class="line"><a name="l00849"></a><span class="lineno">  849</span>&#160;<span class="comment">             * - All special keys (F1-F10, numeric pad, Home/End/Arrows/PgUp/PgDn/Insert/Delete) keycode</span></div><div class="line"><a name="l00850"></a><span class="lineno">  850</span>&#160;<span class="comment">             * - All key pressed while Ctrl or Alt or Super is down are not decoded by gdk_keyval_to_unicode(), so send it as keycode</span></div><div class="line"><a name="l00851"></a><span class="lineno">  851</span>&#160;<span class="comment">             * - All keycodes not translatable to unicode chars, as keycode</span></div><div class="line"><a name="l00852"></a><span class="lineno">  852</span>&#160;<span class="comment">             * - The rest as Unicode char</span></div><div class="line"><a name="l00853"></a><span class="lineno">  853</span>&#160;<span class="comment">             */</span></div><div class="line"><a name="l00854"></a><span class="lineno">  854</span>&#160;            <span class="keywordflow">if</span> (event-&gt;keyval &gt;= 0xfe00 ||                                                  <span class="comment">// Arrows, Shift, Alt, Fn, num keypad…</span></div><div class="line"><a name="l00855"></a><span class="lineno">  855</span>&#160;                event-&gt;hardware_keycode == 0x41 ||                                          <span class="comment">// Spacebar</span></div><div class="line"><a name="l00856"></a><span class="lineno">  856</span>&#160;                unicode_keyval == 0 ||                                                      <span class="comment">// Impossible to translate</span></div><div class="line"><a name="l00857"></a><span class="lineno">  857</span>&#160;                (event-&gt;state &amp; (GDK_MOD1_MASK | GDK_CONTROL_MASK | GDK_SUPER_MASK)) != 0   <span class="comment">// A modifier not recognized by gdk_keyval_to_unicode()</span></div><div class="line"><a name="l00858"></a><span class="lineno">  858</span>&#160;                ) {</div><div class="line"><a name="l00859"></a><span class="lineno">  859</span>&#160;                scancode = freerdp_keyboard_get_rdp_scancode_from_x11_keycode(event-&gt;hardware_keycode);</div><div class="line"><a name="l00860"></a><span class="lineno">  860</span>&#160;                rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.key_code = scancode &amp; 0xFF;</div><div class="line"><a name="l00861"></a><span class="lineno">  861</span>&#160;                rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.extended1 = FALSE;</div><div class="line"><a name="l00862"></a><span class="lineno">  862</span>&#160;                <span class="keywordflow">if</span> (rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.key_code) {</div><div class="line"><a name="l00863"></a><span class="lineno">  863</span>&#160;                    <a class="code" href="rdp__event_8c.html#ad446d6471bddba97f8bfcee8c51e4580">remmina_rdp_event_event_push</a>(gp, &amp;rdp_event);</div><div class="line"><a name="l00864"></a><span class="lineno">  864</span>&#160;                    <a class="code" href="rdp__event_8c.html#ab6e9a485532ccf8c22005dd7a7137fd2">keypress_list_add</a>(gp, rdp_event);</div><div class="line"><a name="l00865"></a><span class="lineno">  865</span>&#160;                }</div><div class="line"><a name="l00866"></a><span class="lineno">  866</span>&#160;            } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00867"></a><span class="lineno">  867</span>&#160;                rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a84797e0cdf4484432740a8946325f126">type</a> = <a class="code" href="rdp__plugin_8h.html#adafbb901615d7fc9d8f31d5dbdae29d7ab15f261f1918633711921198fea0029f">REMMINA_RDP_EVENT_TYPE_SCANCODE_UNICODE</a>;</div><div class="line"><a name="l00868"></a><span class="lineno">  868</span>&#160;                rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.unicode_code = unicode_keyval;</div><div class="line"><a name="l00869"></a><span class="lineno">  869</span>&#160;                rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.extended = <span class="keyword">false</span>;</div><div class="line"><a name="l00870"></a><span class="lineno">  870</span>&#160;                rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">key_event</a>.extended1 = FALSE;</div><div class="line"><a name="l00871"></a><span class="lineno">  871</span>&#160;                <a class="code" href="rdp__event_8c.html#ad446d6471bddba97f8bfcee8c51e4580">remmina_rdp_event_event_push</a>(gp, &amp;rdp_event);</div><div class="line"><a name="l00872"></a><span class="lineno">  872</span>&#160;                <a class="code" href="rdp__event_8c.html#ab6e9a485532ccf8c22005dd7a7137fd2">keypress_list_add</a>(gp, rdp_event);</div><div class="line"><a name="l00873"></a><span class="lineno">  873</span>&#160;            }</div><div class="line"><a name="l00874"></a><span class="lineno">  874</span>&#160;        }</div><div class="line"><a name="l00875"></a><span class="lineno">  875</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00876"></a><span class="lineno">  876</span>&#160;    }</div><div class="line"><a name="l00877"></a><span class="lineno">  877</span>&#160;</div><div class="line"><a name="l00878"></a><span class="lineno">  878</span>&#160;    <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00879"></a><span class="lineno">  879</span>&#160;}</div><div class="line"><a name="l00880"></a><span class="lineno">  880</span>&#160;</div><div class="line"><a name="l00881"></a><span class="lineno"><a class="line" href="rdp__event_8c.html#a2bd3d6559182ac1132927435ba9abc6a">  881</a></span>&#160;gboolean <a class="code" href="rdp__event_8c.html#a2bd3d6559182ac1132927435ba9abc6a">remmina_rdp_event_on_clipboard</a>(GtkClipboard *gtkClipboard, GdkEvent *event, <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00882"></a><span class="lineno">  882</span>&#160;{</div><div class="line"><a name="l00883"></a><span class="lineno">  883</span>&#160;    <span class="comment">/* Signal handler for GTK clipboard owner-change */</span></div><div class="line"><a name="l00884"></a><span class="lineno">  884</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00885"></a><span class="lineno">  885</span>&#160;    <a class="code" href="structremmina__plugin__rdp__event.html">RemminaPluginRdpEvent</a> rdp_event = { 0 };</div><div class="line"><a name="l00886"></a><span class="lineno">  886</span>&#160;    CLIPRDR_FORMAT_LIST *pFormatList;</div><div class="line"><a name="l00887"></a><span class="lineno">  887</span>&#160;    GObject *new_owner;</div><div class="line"><a name="l00888"></a><span class="lineno">  888</span>&#160;</div><div class="line"><a name="l00889"></a><span class="lineno">  889</span>&#160;    <span class="comment">/* Usually &quot;owner-change&quot; is fired when a user presses &quot;COPY&quot; on the client</span></div><div class="line"><a name="l00890"></a><span class="lineno">  890</span>&#160;<span class="comment">     * OR when this plugin calls gtk_clipboard_set_with_owner()</span></div><div class="line"><a name="l00891"></a><span class="lineno">  891</span>&#160;<span class="comment">     * after receiving a RDP server format list in remmina_rdp_cliprdr_server_format_list()</span></div><div class="line"><a name="l00892"></a><span class="lineno">  892</span>&#160;<span class="comment">     * In the latter case, we must ignore owner change */</span></div><div class="line"><a name="l00893"></a><span class="lineno">  893</span>&#160;</div><div class="line"><a name="l00894"></a><span class="lineno">  894</span>&#160;    REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;gp=%p: owner-change event received&quot;</span>, gp);</div><div class="line"><a name="l00895"></a><span class="lineno">  895</span>&#160;</div><div class="line"><a name="l00896"></a><span class="lineno">  896</span>&#160;    <a class="code" href="structrf__context.html">rfContext</a> *rfi = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00897"></a><span class="lineno">  897</span>&#160;</div><div class="line"><a name="l00898"></a><span class="lineno">  898</span>&#160;    <span class="keywordflow">if</span> (rfi)</div><div class="line"><a name="l00899"></a><span class="lineno">  899</span>&#160;        <a class="code" href="rdp__cliprdr_8c.html#a829aba669bedbb7cdcf9dcb4df8ca26b">remmina_rdp_clipboard_abort_client_format_data_request</a>(rfi);</div><div class="line"><a name="l00900"></a><span class="lineno">  900</span>&#160;</div><div class="line"><a name="l00901"></a><span class="lineno">  901</span>&#160;    new_owner = gtk_clipboard_get_owner(gtkClipboard);</div><div class="line"><a name="l00902"></a><span class="lineno">  902</span>&#160;    <span class="keywordflow">if</span> (new_owner != (GObject *)gp) {</div><div class="line"><a name="l00903"></a><span class="lineno">  903</span>&#160;        <span class="comment">/* To do: avoid this when the new owner is another remmina protocol widget of</span></div><div class="line"><a name="l00904"></a><span class="lineno">  904</span>&#160;<span class="comment">         * the same remmina application */</span></div><div class="line"><a name="l00905"></a><span class="lineno">  905</span>&#160;        REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;gp=%p owner-change: new owner is different than me: new=%p me=%p&quot;</span>,</div><div class="line"><a name="l00906"></a><span class="lineno">  906</span>&#160;                     gp, new_owner, gp);</div><div class="line"><a name="l00907"></a><span class="lineno">  907</span>&#160;</div><div class="line"><a name="l00908"></a><span class="lineno">  908</span>&#160;        REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;gp=%p owner-change: new owner is not me: Sending local clipboard format list to server.&quot;</span>,</div><div class="line"><a name="l00909"></a><span class="lineno">  909</span>&#160;            gp, new_owner, gp);</div><div class="line"><a name="l00910"></a><span class="lineno">  910</span>&#160;        pFormatList = <a class="code" href="rdp__cliprdr_8c.html#accb7cad54767b8f658b8ea438690ef4f">remmina_rdp_cliprdr_get_client_format_list</a>(gp);</div><div class="line"><a name="l00911"></a><span class="lineno">  911</span>&#160;        rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a84797e0cdf4484432740a8946325f126">type</a> = <a class="code" href="rdp__plugin_8h.html#adafbb901615d7fc9d8f31d5dbdae29d7aebb0df0651989a89f3f05e3c4894dd50">REMMINA_RDP_EVENT_TYPE_CLIPBOARD_SEND_CLIENT_FORMAT_LIST</a>;</div><div class="line"><a name="l00912"></a><span class="lineno">  912</span>&#160;        rdp_event.<a class="code" href="structremmina__plugin__rdp__event.html#a72cd3fa2cc46eb03de7f68d63b2646b2">clipboard_formatlist</a>.pFormatList = pFormatList;</div><div class="line"><a name="l00913"></a><span class="lineno">  913</span>&#160;        <a class="code" href="rdp__event_8c.html#ad446d6471bddba97f8bfcee8c51e4580">remmina_rdp_event_event_push</a>(gp, &amp;rdp_event);</div><div class="line"><a name="l00914"></a><span class="lineno">  914</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00915"></a><span class="lineno">  915</span>&#160;        REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;    ... but I&#39;m the owner!&quot;</span>);</div><div class="line"><a name="l00916"></a><span class="lineno">  916</span>&#160;    }</div><div class="line"><a name="l00917"></a><span class="lineno">  917</span>&#160;    <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00918"></a><span class="lineno">  918</span>&#160;}</div><div class="line"><a name="l00919"></a><span class="lineno">  919</span>&#160;</div><div class="line"><a name="l00920"></a><span class="lineno"><a class="line" href="rdp__event_8h.html#afba21c241e7abe9fe72f6e5aeeaa99cc">  920</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="rdp__event_8c.html#af3a991a02d35fb09c85f2e752a5393ca">remmina_rdp_event_init</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00921"></a><span class="lineno">  921</span>&#160;{</div><div class="line"><a name="l00922"></a><span class="lineno">  922</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00923"></a><span class="lineno">  923</span>&#160;    gchar *s;</div><div class="line"><a name="l00924"></a><span class="lineno">  924</span>&#160;    gint flags;</div><div class="line"><a name="l00925"></a><span class="lineno">  925</span>&#160;    <a class="code" href="structrf__context.html">rfContext</a> *rfi = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00926"></a><span class="lineno">  926</span>&#160;    GtkClipboard *clipboard;</div><div class="line"><a name="l00927"></a><span class="lineno">  927</span>&#160;    <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l00928"></a><span class="lineno">  928</span>&#160;</div><div class="line"><a name="l00929"></a><span class="lineno">  929</span>&#160;    gboolean disable_smooth_scrolling = FALSE;</div><div class="line"><a name="l00930"></a><span class="lineno">  930</span>&#160;</div><div class="line"><a name="l00931"></a><span class="lineno">  931</span>&#160;    <span class="keywordflow">if</span> (!rfi) <span class="keywordflow">return</span>;</div><div class="line"><a name="l00932"></a><span class="lineno">  932</span>&#160;    remminafile = <a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#a1409dcc143ddc35de86b792df095cfc4">protocol_plugin_get_file</a>(gp);</div><div class="line"><a name="l00933"></a><span class="lineno">  933</span>&#160;</div><div class="line"><a name="l00934"></a><span class="lineno">  934</span>&#160;    <span class="comment">/* we get first the global preferences */</span></div><div class="line"><a name="l00935"></a><span class="lineno">  935</span>&#160;    s = <a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#a860dc4e2fc1479ec1cbdcc53236df9e9">pref_get_value</a>(<span class="stringliteral">&quot;rdp_disable_smooth_scrolling&quot;</span>);</div><div class="line"><a name="l00936"></a><span class="lineno">  936</span>&#160;    disable_smooth_scrolling = (s &amp;&amp; s[0] == <span class="charliteral">&#39;1&#39;</span> ? TRUE : FALSE);</div><div class="line"><a name="l00937"></a><span class="lineno">  937</span>&#160;    g_free(s), s = NULL;</div><div class="line"><a name="l00938"></a><span class="lineno">  938</span>&#160;    <span class="comment">/* Otherwise we use the connection profile specific setting */</span></div><div class="line"><a name="l00939"></a><span class="lineno">  939</span>&#160;    disable_smooth_scrolling = <a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#a0c7eab256e1b1fdf84be44e28cddc3de">file_get_int</a>(remminafile, <span class="stringliteral">&quot;disable-smooth-scrolling&quot;</span>, disable_smooth_scrolling);</div><div class="line"><a name="l00940"></a><span class="lineno">  940</span>&#160;</div><div class="line"><a name="l00941"></a><span class="lineno">  941</span>&#160;    REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;Disable smooth scrolling is set to %d&quot;</span>, disable_smooth_scrolling);</div><div class="line"><a name="l00942"></a><span class="lineno">  942</span>&#160;</div><div class="line"><a name="l00943"></a><span class="lineno">  943</span>&#160;    rfi-&gt;<a class="code" href="structrf__context.html#acee2095e72fb2428c498f62e21800026">drawing_area</a> = gtk_drawing_area_new();</div><div class="line"><a name="l00944"></a><span class="lineno">  944</span>&#160;    gtk_widget_show(rfi-&gt;<a class="code" href="structrf__context.html#acee2095e72fb2428c498f62e21800026">drawing_area</a>);</div><div class="line"><a name="l00945"></a><span class="lineno">  945</span>&#160;    gtk_container_add(GTK_CONTAINER(gp), rfi-&gt;<a class="code" href="structrf__context.html#acee2095e72fb2428c498f62e21800026">drawing_area</a>);</div><div class="line"><a name="l00946"></a><span class="lineno">  946</span>&#160;</div><div class="line"><a name="l00947"></a><span class="lineno">  947</span>&#160;    gtk_widget_add_events(rfi-&gt;<a class="code" href="structrf__context.html#acee2095e72fb2428c498f62e21800026">drawing_area</a>, GDK_POINTER_MOTION_MASK</div><div class="line"><a name="l00948"></a><span class="lineno">  948</span>&#160;                  | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</div><div class="line"><a name="l00949"></a><span class="lineno">  949</span>&#160;                  | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK</div><div class="line"><a name="l00950"></a><span class="lineno">  950</span>&#160;                  | GDK_SCROLL_MASK | GDK_FOCUS_CHANGE_MASK);</div><div class="line"><a name="l00951"></a><span class="lineno">  951</span>&#160;</div><div class="line"><a name="l00952"></a><span class="lineno">  952</span>&#160;    <span class="keywordflow">if</span> (!disable_smooth_scrolling) {</div><div class="line"><a name="l00953"></a><span class="lineno">  953</span>&#160;        REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;Adding GDK_SMOOTH_SCROLL_MASK&quot;</span>);</div><div class="line"><a name="l00954"></a><span class="lineno">  954</span>&#160;        gtk_widget_add_events(rfi-&gt;<a class="code" href="structrf__context.html#acee2095e72fb2428c498f62e21800026">drawing_area</a>, GDK_SMOOTH_SCROLL_MASK);</div><div class="line"><a name="l00955"></a><span class="lineno">  955</span>&#160;    }</div><div class="line"><a name="l00956"></a><span class="lineno">  956</span>&#160;</div><div class="line"><a name="l00957"></a><span class="lineno">  957</span>&#160;    gtk_widget_set_can_focus(rfi-&gt;<a class="code" href="structrf__context.html#acee2095e72fb2428c498f62e21800026">drawing_area</a>, TRUE);</div><div class="line"><a name="l00958"></a><span class="lineno">  958</span>&#160;</div><div class="line"><a name="l00959"></a><span class="lineno">  959</span>&#160;    <a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#ac3fc04c8c7b20c35122e2786d9e8fc34">protocol_plugin_register_hostkey</a>(gp, rfi-&gt;<a class="code" href="structrf__context.html#acee2095e72fb2428c498f62e21800026">drawing_area</a>);</div><div class="line"><a name="l00960"></a><span class="lineno">  960</span>&#160;</div><div class="line"><a name="l00961"></a><span class="lineno">  961</span>&#160;    s = <a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#a860dc4e2fc1479ec1cbdcc53236df9e9">pref_get_value</a>(<span class="stringliteral">&quot;rdp_use_client_keymap&quot;</span>);</div><div class="line"><a name="l00962"></a><span class="lineno">  962</span>&#160;    rfi-&gt;<a class="code" href="structrf__context.html#ac1f3330674d320c9d0ae408c551be6b8">use_client_keymap</a> = (s &amp;&amp; s[0] == <span class="charliteral">&#39;1&#39;</span> ? TRUE : FALSE);</div><div class="line"><a name="l00963"></a><span class="lineno">  963</span>&#160;    g_free(s), s = NULL;</div><div class="line"><a name="l00964"></a><span class="lineno">  964</span>&#160;</div><div class="line"><a name="l00965"></a><span class="lineno">  965</span>&#160;    <span class="comment">/* Read special keymap from profile file, if exists */</span></div><div class="line"><a name="l00966"></a><span class="lineno">  966</span>&#160;    <a class="code" href="rdp__event_8c.html#a4eeb2bd828f9fae2c549f3ef8a1e20c0">remmina_rdp_event_init_keymap</a>(rfi, <a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#a860dc4e2fc1479ec1cbdcc53236df9e9">pref_get_value</a>(<span class="stringliteral">&quot;rdp_map_keycode&quot;</span>));</div><div class="line"><a name="l00967"></a><span class="lineno">  967</span>&#160;</div><div class="line"><a name="l00968"></a><span class="lineno">  968</span>&#160;    <span class="keywordflow">if</span> (rfi-&gt;<a class="code" href="structrf__context.html#ac1f3330674d320c9d0ae408c551be6b8">use_client_keymap</a> &amp;&amp; rfi-&gt;<a class="code" href="structrf__context.html#a3712f6b20462e62a6bb87038e5f10d9d">keymap</a>)</div><div class="line"><a name="l00969"></a><span class="lineno">  969</span>&#160;        fprintf(stderr, <span class="stringliteral">&quot;RDP profile error: you cannot define both rdp_map_hardware_keycode and have &#39;Use client keyboard mapping&#39; enabled\n&quot;</span>);</div><div class="line"><a name="l00970"></a><span class="lineno">  970</span>&#160;</div><div class="line"><a name="l00971"></a><span class="lineno">  971</span>&#160;    g_signal_connect(G_OBJECT(rfi-&gt;<a class="code" href="structrf__context.html#acee2095e72fb2428c498f62e21800026">drawing_area</a>), <span class="stringliteral">&quot;draw&quot;</span>,</div><div class="line"><a name="l00972"></a><span class="lineno">  972</span>&#160;             G_CALLBACK(<a class="code" href="rdp__event_8c.html#acafb03695febd86fc16d64545d74ef9c">remmina_rdp_event_on_draw</a>), gp);</div><div class="line"><a name="l00973"></a><span class="lineno">  973</span>&#160;    g_signal_connect(G_OBJECT(rfi-&gt;<a class="code" href="structrf__context.html#acee2095e72fb2428c498f62e21800026">drawing_area</a>), <span class="stringliteral">&quot;configure-event&quot;</span>,</div><div class="line"><a name="l00974"></a><span class="lineno">  974</span>&#160;             G_CALLBACK(<a class="code" href="rdp__event_8c.html#a3a722112276948dbc5823a9adec2e225">remmina_rdp_event_on_configure</a>), gp);</div><div class="line"><a name="l00975"></a><span class="lineno">  975</span>&#160;    g_signal_connect(G_OBJECT(rfi-&gt;<a class="code" href="structrf__context.html#acee2095e72fb2428c498f62e21800026">drawing_area</a>), <span class="stringliteral">&quot;motion-notify-event&quot;</span>,</div><div class="line"><a name="l00976"></a><span class="lineno">  976</span>&#160;             G_CALLBACK(<a class="code" href="rdp__event_8c.html#ac27328f2796bd021d174c0f4b172c024">remmina_rdp_event_on_motion</a>), gp);</div><div class="line"><a name="l00977"></a><span class="lineno">  977</span>&#160;    g_signal_connect(G_OBJECT(rfi-&gt;<a class="code" href="structrf__context.html#acee2095e72fb2428c498f62e21800026">drawing_area</a>), <span class="stringliteral">&quot;button-press-event&quot;</span>,</div><div class="line"><a name="l00978"></a><span class="lineno">  978</span>&#160;             G_CALLBACK(<a class="code" href="rdp__event_8c.html#a0caf4ffb4011d001301ea10f2c3f75e6">remmina_rdp_event_on_button</a>), gp);</div><div class="line"><a name="l00979"></a><span class="lineno">  979</span>&#160;    g_signal_connect(G_OBJECT(rfi-&gt;<a class="code" href="structrf__context.html#acee2095e72fb2428c498f62e21800026">drawing_area</a>), <span class="stringliteral">&quot;button-release-event&quot;</span>,</div><div class="line"><a name="l00980"></a><span class="lineno">  980</span>&#160;             G_CALLBACK(<a class="code" href="rdp__event_8c.html#a0caf4ffb4011d001301ea10f2c3f75e6">remmina_rdp_event_on_button</a>), gp);</div><div class="line"><a name="l00981"></a><span class="lineno">  981</span>&#160;    g_signal_connect(G_OBJECT(rfi-&gt;<a class="code" href="structrf__context.html#acee2095e72fb2428c498f62e21800026">drawing_area</a>), <span class="stringliteral">&quot;scroll-event&quot;</span>,</div><div class="line"><a name="l00982"></a><span class="lineno">  982</span>&#160;             G_CALLBACK(<a class="code" href="rdp__event_8c.html#a9d63c3ac635001e62851ec4bc5fb7469">remmina_rdp_event_on_scroll</a>), gp);</div><div class="line"><a name="l00983"></a><span class="lineno">  983</span>&#160;    g_signal_connect(G_OBJECT(rfi-&gt;<a class="code" href="structrf__context.html#acee2095e72fb2428c498f62e21800026">drawing_area</a>), <span class="stringliteral">&quot;key-press-event&quot;</span>,</div><div class="line"><a name="l00984"></a><span class="lineno">  984</span>&#160;             G_CALLBACK(<a class="code" href="rdp__event_8c.html#ad8f0d0f1b1b75646523f3b241f124e56">remmina_rdp_event_on_key</a>), gp);</div><div class="line"><a name="l00985"></a><span class="lineno">  985</span>&#160;    g_signal_connect(G_OBJECT(rfi-&gt;<a class="code" href="structrf__context.html#acee2095e72fb2428c498f62e21800026">drawing_area</a>), <span class="stringliteral">&quot;key-release-event&quot;</span>,</div><div class="line"><a name="l00986"></a><span class="lineno">  986</span>&#160;             G_CALLBACK(<a class="code" href="rdp__event_8c.html#ad8f0d0f1b1b75646523f3b241f124e56">remmina_rdp_event_on_key</a>), gp);</div><div class="line"><a name="l00987"></a><span class="lineno">  987</span>&#160;    g_signal_connect(G_OBJECT(rfi-&gt;<a class="code" href="structrf__context.html#acee2095e72fb2428c498f62e21800026">drawing_area</a>), <span class="stringliteral">&quot;focus-in-event&quot;</span>,</div><div class="line"><a name="l00988"></a><span class="lineno">  988</span>&#160;             G_CALLBACK(<a class="code" href="rdp__event_8c.html#a6e3d726d9c6e27d25538c8ae665e8b58">remmina_rdp_event_on_focus_in</a>), gp);</div><div class="line"><a name="l00995"></a><span class="lineno">  995</span>&#160;    <span class="comment">//g_signal_connect(G_OBJECT(gtk_widget_get_toplevel(rfi-&gt;drawing_area)), &quot;map-event&quot;,</span></div><div class="line"><a name="l00996"></a><span class="lineno">  996</span>&#160;    <span class="comment">// G_CALLBACK(remmina_rdp_event_on_map), gp);</span></div><div class="line"><a name="l00997"></a><span class="lineno">  997</span>&#160;    <span class="comment">//g_signal_connect(G_OBJECT(gtk_widget_get_toplevel(rfi-&gt;drawing_area)), &quot;unmap-event&quot;,</span></div><div class="line"><a name="l00998"></a><span class="lineno">  998</span>&#160;    <span class="comment">// G_CALLBACK(remmina_rdp_event_on_unmap), gp);</span></div><div class="line"><a name="l00999"></a><span class="lineno">  999</span>&#160;</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160;    <span class="keywordflow">if</span> (!<a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#a0c7eab256e1b1fdf84be44e28cddc3de">file_get_int</a>(remminafile, <span class="stringliteral">&quot;disableclipboard&quot;</span>, FALSE)) {</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160;        clipboard = gtk_widget_get_clipboard(rfi-&gt;<a class="code" href="structrf__context.html#acee2095e72fb2428c498f62e21800026">drawing_area</a>, GDK_SELECTION_CLIPBOARD);</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160;        rfi-&gt;<a class="code" href="structrf__context.html#a72d2a3d60347327237692947df93aea7">clipboard</a>.<a class="code" href="structrf__clipboard.html#a52ca364a1902d7f4095234923feed724">clipboard_handler</a> = g_signal_connect(clipboard, <span class="stringliteral">&quot;owner-change&quot;</span>, G_CALLBACK(<a class="code" href="rdp__event_8c.html#a2bd3d6559182ac1132927435ba9abc6a">remmina_rdp_event_on_clipboard</a>), gp);</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;    }</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160;    rfi-&gt;<a class="code" href="structrf__context.html#a335c40ccb90ae472525b203c832e7701">pressed_keys</a> = g_array_new(FALSE, TRUE, <span class="keyword">sizeof</span>(<a class="code" href="structremmina__plugin__rdp__event.html">RemminaPluginRdpEvent</a>));</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;    rfi-&gt;<a class="code" href="structrf__context.html#a5d119b1f108fe84c74e6484d48c2a565">event_queue</a> = g_async_queue_new_full(g_free);</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160;    rfi-&gt;<a class="code" href="structrf__context.html#ae6190d1c82045bcd08e22ff6e98148a3">ui_queue</a> = g_async_queue_new();</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160;    pthread_mutex_init(&amp;rfi-&gt;<a class="code" href="structrf__context.html#a3836f3c9bc575a05d5b35dbdb3186329">ui_queue_mutex</a>, NULL);</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160;    <span class="keywordflow">if</span> (pipe(rfi-&gt;<a class="code" href="structrf__context.html#a539feef609228a91c5e54d5da837bb7a">event_pipe</a>)) {</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;        g_print(<span class="stringliteral">&quot;Error creating pipes.\n&quot;</span>);</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160;        rfi-&gt;<a class="code" href="structrf__context.html#a539feef609228a91c5e54d5da837bb7a">event_pipe</a>[0] = -1;</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160;        rfi-&gt;<a class="code" href="structrf__context.html#a539feef609228a91c5e54d5da837bb7a">event_pipe</a>[1] = -1;</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;        rfi-&gt;<a class="code" href="structrf__context.html#a522c742a333cf0603dfa7d06a7376669">event_handle</a> = NULL;</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160;        flags = fcntl(rfi-&gt;<a class="code" href="structrf__context.html#a539feef609228a91c5e54d5da837bb7a">event_pipe</a>[0], F_GETFL, 0);</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160;        fcntl(rfi-&gt;<a class="code" href="structrf__context.html#a539feef609228a91c5e54d5da837bb7a">event_pipe</a>[0], F_SETFL, flags | O_NONBLOCK);</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160;        rfi-&gt;<a class="code" href="structrf__context.html#a522c742a333cf0603dfa7d06a7376669">event_handle</a> = CreateFileDescriptorEvent(NULL, FALSE, FALSE, rfi-&gt;<a class="code" href="structrf__context.html#a539feef609228a91c5e54d5da837bb7a">event_pipe</a>[0], WINPR_FD_READ);</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160;        <span class="keywordflow">if</span> (!rfi-&gt;<a class="code" href="structrf__context.html#a522c742a333cf0603dfa7d06a7376669">event_handle</a>)</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160;            g_print(<span class="stringliteral">&quot;CreateFileDescriptorEvent() failed\n&quot;</span>);</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;    }</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;    rfi-&gt;<a class="code" href="structrf__context.html#aafce196b029d2578151275acd07ccb82">object_table</a> = g_hash_table_new_full(NULL, NULL, NULL, g_free);</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160;</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160;    rfi-&gt;<a class="code" href="structrf__context.html#a7c4234646c4b584e41e36521b7eab889">display</a> = gdk_display_get_default();</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160;</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160;<span class="preprocessor">#if GTK_CHECK_VERSION(3, 22, 0)</span></div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160;    GdkVisual *visual = gdk_screen_get_system_visual(</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160;        gdk_display_get_default_screen(rfi-&gt;<a class="code" href="structrf__context.html#a7c4234646c4b584e41e36521b7eab889">display</a>));</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160;    rfi-&gt;<a class="code" href="structrf__context.html#a40e89e126e5dd96a3f67e6f945a8867b">bpp</a> = gdk_visual_get_depth(visual);</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;    rfi-&gt;<a class="code" href="structrf__context.html#a40e89e126e5dd96a3f67e6f945a8867b">bpp</a> = gdk_visual_get_best_depth();</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160;}</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160;</div><div class="line"><a name="l01036"></a><span class="lineno"><a class="line" href="rdp__event_8c.html#a40b4fd190055c10d5d2248a6eca5f50f"> 1036</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="rdp__event_8c.html#a40b4fd190055c10d5d2248a6eca5f50f">remmina_rdp_event_free_event</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="structremmina__plugin__rdp__ui__object.html">RemminaPluginRdpUiObject</a> *obj)</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160;{</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160;</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160;    <span class="keywordflow">switch</span> (obj-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a46d939889fba73c1360f924efaa09262">type</a>) {</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="rdp__plugin_8h.html#a1e2313a63a9cfd208ab722cc1e0ee072a96cf99f0ed1b7e1a798ebb358eff0d1b">REMMINA_RDP_UI_NOCODEC</a>:</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160;        free(obj-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a4712a1768972b9bf133a14ab8449e3d9">nocodec</a>.bitmap);</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160;    <span class="keywordflow">default</span>:</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160;    }</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160;</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160;    g_free(obj);</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160;}</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160;</div><div class="line"><a name="l01052"></a><span class="lineno"><a class="line" href="rdp__event_8h.html#a65eef99dc99f77be815a5da804ed94fc"> 1052</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="rdp__event_8c.html#a65eef99dc99f77be815a5da804ed94fc">remmina_rdp_event_uninit</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160;{</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160;    <a class="code" href="structrf__context.html">rfContext</a> *rfi = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160;    <a class="code" href="structremmina__plugin__rdp__ui__object.html">RemminaPluginRdpUiObject</a> *ui;</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160;</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;    <span class="keywordflow">if</span> (!rfi) <span class="keywordflow">return</span>;</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160;</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;    <span class="comment">/* unregister the clipboard monitor */</span></div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;    <span class="keywordflow">if</span> (rfi-&gt;<a class="code" href="structrf__context.html#a72d2a3d60347327237692947df93aea7">clipboard</a>.<a class="code" href="structrf__clipboard.html#a52ca364a1902d7f4095234923feed724">clipboard_handler</a>) {</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160;        g_signal_handler_disconnect(G_OBJECT(gtk_widget_get_clipboard(rfi-&gt;<a class="code" href="structrf__context.html#acee2095e72fb2428c498f62e21800026">drawing_area</a>, GDK_SELECTION_CLIPBOARD)), rfi-&gt;<a class="code" href="structrf__context.html#a72d2a3d60347327237692947df93aea7">clipboard</a>.<a class="code" href="structrf__clipboard.html#a52ca364a1902d7f4095234923feed724">clipboard_handler</a>);</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;        rfi-&gt;<a class="code" href="structrf__context.html#a72d2a3d60347327237692947df93aea7">clipboard</a>.<a class="code" href="structrf__clipboard.html#a52ca364a1902d7f4095234923feed724">clipboard_handler</a> = 0;</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;    }</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160;    <span class="keywordflow">if</span> (rfi-&gt;<a class="code" href="structrf__context.html#a957e6f6867170470689210d55770342e">delayed_monitor_layout_handler</a>) {</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160;        g_source_remove(rfi-&gt;<a class="code" href="structrf__context.html#a957e6f6867170470689210d55770342e">delayed_monitor_layout_handler</a>);</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;        rfi-&gt;<a class="code" href="structrf__context.html#a957e6f6867170470689210d55770342e">delayed_monitor_layout_handler</a> = 0;</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;    }</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;    <span class="keywordflow">if</span> (rfi-&gt;<a class="code" href="structrf__context.html#ae62cc5547984bf11865f93c7d63afdf0">ui_handler</a>) {</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;        g_source_remove(rfi-&gt;<a class="code" href="structrf__context.html#ae62cc5547984bf11865f93c7d63afdf0">ui_handler</a>);</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;        rfi-&gt;<a class="code" href="structrf__context.html#ae62cc5547984bf11865f93c7d63afdf0">ui_handler</a> = 0;</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;    }</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;    <span class="keywordflow">while</span> ((ui = (<a class="code" href="structremmina__plugin__rdp__ui__object.html">RemminaPluginRdpUiObject</a> *)g_async_queue_try_pop(rfi-&gt;<a class="code" href="structrf__context.html#ae6190d1c82045bcd08e22ff6e98148a3">ui_queue</a>)) != NULL)</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;        <a class="code" href="rdp__event_8c.html#a40b4fd190055c10d5d2248a6eca5f50f">remmina_rdp_event_free_event</a>(gp, ui);</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;    <span class="keywordflow">if</span> (rfi-&gt;<a class="code" href="structrf__context.html#a3aead7f4d2c4580fcbd25e15679e19c6">surface</a>) {</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160;        cairo_surface_mark_dirty(rfi-&gt;<a class="code" href="structrf__context.html#a3aead7f4d2c4580fcbd25e15679e19c6">surface</a>);</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;        cairo_surface_destroy(rfi-&gt;<a class="code" href="structrf__context.html#a3aead7f4d2c4580fcbd25e15679e19c6">surface</a>);</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160;        rfi-&gt;<a class="code" href="structrf__context.html#a3aead7f4d2c4580fcbd25e15679e19c6">surface</a> = NULL;</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;    }</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160;</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160;    g_hash_table_destroy(rfi-&gt;<a class="code" href="structrf__context.html#aafce196b029d2578151275acd07ccb82">object_table</a>);</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;    g_array_free(rfi-&gt;<a class="code" href="structrf__context.html#a335c40ccb90ae472525b203c832e7701">pressed_keys</a>, TRUE);</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160;    <span class="keywordflow">if</span> (rfi-&gt;<a class="code" href="structrf__context.html#a3712f6b20462e62a6bb87038e5f10d9d">keymap</a>) {</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160;        g_array_free(rfi-&gt;<a class="code" href="structrf__context.html#a3712f6b20462e62a6bb87038e5f10d9d">keymap</a>, TRUE);</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;        rfi-&gt;<a class="code" href="structrf__context.html#a3712f6b20462e62a6bb87038e5f10d9d">keymap</a> = NULL;</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160;    }</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160;    g_async_queue_unref(rfi-&gt;<a class="code" href="structrf__context.html#a5d119b1f108fe84c74e6484d48c2a565">event_queue</a>);</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;    rfi-&gt;<a class="code" href="structrf__context.html#a5d119b1f108fe84c74e6484d48c2a565">event_queue</a> = NULL;</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;    g_async_queue_unref(rfi-&gt;<a class="code" href="structrf__context.html#ae6190d1c82045bcd08e22ff6e98148a3">ui_queue</a>);</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160;    rfi-&gt;<a class="code" href="structrf__context.html#ae6190d1c82045bcd08e22ff6e98148a3">ui_queue</a> = NULL;</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160;    pthread_mutex_destroy(&amp;rfi-&gt;<a class="code" href="structrf__context.html#a3836f3c9bc575a05d5b35dbdb3186329">ui_queue_mutex</a>);</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160;</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160;    <span class="keywordflow">if</span> (rfi-&gt;<a class="code" href="structrf__context.html#a522c742a333cf0603dfa7d06a7376669">event_handle</a>) {</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160;        CloseHandle(rfi-&gt;<a class="code" href="structrf__context.html#a522c742a333cf0603dfa7d06a7376669">event_handle</a>);</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160;        rfi-&gt;<a class="code" href="structrf__context.html#a522c742a333cf0603dfa7d06a7376669">event_handle</a> = NULL;</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;    }</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160;    close(rfi-&gt;<a class="code" href="structrf__context.html#a539feef609228a91c5e54d5da837bb7a">event_pipe</a>[0]);</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160;    close(rfi-&gt;<a class="code" href="structrf__context.html#a539feef609228a91c5e54d5da837bb7a">event_pipe</a>[1]);</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160;}</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160;</div><div class="line"><a name="l01103"></a><span class="lineno"><a class="line" href="rdp__event_8c.html#a789ec99777755da7cae468216a74095a"> 1103</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="rdp__event_8c.html#a789ec99777755da7cae468216a74095a">remmina_rdp_event_create_cairo_surface</a>(<a class="code" href="structrf__context.html">rfContext</a> *rfi)</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160;{</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160;    <span class="keywordtype">int</span> stride;</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160;    rdpGdi *gdi;</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160;</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160;    <span class="keywordflow">if</span> (!rfi)</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160;</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160;    gdi = ((rdpContext *)rfi)-&gt;gdi;</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160;</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160;    <span class="keywordflow">if</span> (!gdi)</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160;</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160;    <span class="keywordflow">if</span> (rfi-&gt;<a class="code" href="structrf__context.html#a3aead7f4d2c4580fcbd25e15679e19c6">surface</a>) {</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160;        cairo_surface_mark_dirty(rfi-&gt;<a class="code" href="structrf__context.html#a3aead7f4d2c4580fcbd25e15679e19c6">surface</a>);</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160;        cairo_surface_destroy(rfi-&gt;<a class="code" href="structrf__context.html#a3aead7f4d2c4580fcbd25e15679e19c6">surface</a>);</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;        rfi-&gt;<a class="code" href="structrf__context.html#a3aead7f4d2c4580fcbd25e15679e19c6">surface</a> = NULL;</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160;    }</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160;    stride = cairo_format_stride_for_width(rfi-&gt;<a class="code" href="structrf__context.html#aa13bb4f72f3024d81e9051de4bd65ec0">cairo_format</a>, gdi-&gt;width);</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160;    rfi-&gt;<a class="code" href="structrf__context.html#a3aead7f4d2c4580fcbd25e15679e19c6">surface</a> = cairo_image_surface_create_for_data((<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *)gdi-&gt;primary_buffer, rfi-&gt;<a class="code" href="structrf__context.html#aa13bb4f72f3024d81e9051de4bd65ec0">cairo_format</a>, gdi-&gt;width, gdi-&gt;height, stride);</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160;    cairo_surface_flush(rfi-&gt;<a class="code" href="structrf__context.html#a3aead7f4d2c4580fcbd25e15679e19c6">surface</a>);</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;}</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160;</div><div class="line"><a name="l01126"></a><span class="lineno"><a class="line" href="rdp__event_8h.html#a64ce0c66bb4cb6ddaee263ce8563f497"> 1126</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="rdp__event_8c.html#a64ce0c66bb4cb6ddaee263ce8563f497">remmina_rdp_event_update_scale</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160;{</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160;    gint width, height;</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160;    rdpGdi *gdi;</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160;    <a class="code" href="structrf__context.html">rfContext</a> *rfi = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160;</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160;    width = <a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#adf255b7ceaec6a51fc9269cf824a02ce">protocol_plugin_get_width</a>(gp);</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160;    height = <a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#aa159850f20499e5bc1067f533d2fa820">protocol_plugin_get_height</a>(gp);</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160;</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160;    gdi = ((rdpContext *)rfi)-&gt;gdi;</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160;</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160;    rfi-&gt;<a class="code" href="structrf__context.html#a96c4689f6bc062482536038cb3b24e78">scale</a> = <a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#ae97f4052c4bbda628682ae071ada27ed">remmina_protocol_widget_get_current_scale_mode</a>(gp);</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160;</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160;    <span class="comment">/* See if we also must rellocate rfi-&gt;surface with different width and height,</span></div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160;<span class="comment">     * this usually happens after a DesktopResize RDP event*/</span></div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160;</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160;    <span class="keywordflow">if</span> (rfi-&gt;<a class="code" href="structrf__context.html#a3aead7f4d2c4580fcbd25e15679e19c6">surface</a> &amp;&amp; (cairo_image_surface_get_width(rfi-&gt;<a class="code" href="structrf__context.html#a3aead7f4d2c4580fcbd25e15679e19c6">surface</a>) != gdi-&gt;width ||</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160;                 cairo_image_surface_get_height(rfi-&gt;<a class="code" href="structrf__context.html#a3aead7f4d2c4580fcbd25e15679e19c6">surface</a>) != gdi-&gt;height)) {</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160;        <span class="comment">/* Destroys and recreate rfi-&gt;surface with new width and height */</span></div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160;        cairo_surface_mark_dirty(rfi-&gt;<a class="code" href="structrf__context.html#a3aead7f4d2c4580fcbd25e15679e19c6">surface</a>);</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160;        cairo_surface_destroy(rfi-&gt;<a class="code" href="structrf__context.html#a3aead7f4d2c4580fcbd25e15679e19c6">surface</a>);</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160;        rfi-&gt;<a class="code" href="structrf__context.html#a3aead7f4d2c4580fcbd25e15679e19c6">surface</a> = NULL;</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160;        <a class="code" href="rdp__event_8c.html#a789ec99777755da7cae468216a74095a">remmina_rdp_event_create_cairo_surface</a>(rfi);</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160;    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rfi-&gt;<a class="code" href="structrf__context.html#a3aead7f4d2c4580fcbd25e15679e19c6">surface</a> == NULL) {</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160;        <a class="code" href="rdp__event_8c.html#a789ec99777755da7cae468216a74095a">remmina_rdp_event_create_cairo_surface</a>(rfi);</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160;    }</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160;</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160;    <span class="comment">/* Send gdi-&gt;width and gdi-&gt;height obtained from remote server to gp plugin,</span></div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160;<span class="comment">     * so they will be saved when closing connection */</span></div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160;    <span class="keywordflow">if</span> (width != gdi-&gt;width)</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160;        <a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#abaf7f57e2336f6e5c257e9c30fedc047">protocol_plugin_set_width</a>(gp, gdi-&gt;width);</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160;    <span class="keywordflow">if</span> (height != gdi-&gt;height)</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160;        <a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#a258d391bcfff1409d27bee0743aec6c1">protocol_plugin_set_height</a>(gp, gdi-&gt;height);</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160;</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160;    <a class="code" href="rdp__event_8c.html#a6076424eb759c91ca9c8da59432c66d6">remmina_rdp_event_update_scale_factor</a>(gp);</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160;</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160;    <span class="keywordflow">if</span> (rfi-&gt;<a class="code" href="structrf__context.html#a96c4689f6bc062482536038cb3b24e78">scale</a> == <a class="code" href="types_8h.html#aeea5ee1e675368413b6f6ab09883e7deac7786e2cea7d9bf95026069ed774ea20">REMMINA_PROTOCOL_WIDGET_SCALE_MODE_SCALED</a> || rfi-&gt;<a class="code" href="structrf__context.html#a96c4689f6bc062482536038cb3b24e78">scale</a> == <a class="code" href="types_8h.html#aeea5ee1e675368413b6f6ab09883e7dea4d22c6eed721b661d618098159a20946">REMMINA_PROTOCOL_WIDGET_SCALE_MODE_DYNRES</a>)</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;        <span class="comment">/* In scaled mode and autores mode, drawing_area will get its dimensions from its parent */</span></div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;        gtk_widget_set_size_request(rfi-&gt;<a class="code" href="structrf__context.html#acee2095e72fb2428c498f62e21800026">drawing_area</a>, -1, -1);</div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160;        <span class="comment">/* In non scaled mode, the plugins forces dimensions of drawing area */</span></div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;        gtk_widget_set_size_request(rfi-&gt;<a class="code" href="structrf__context.html#acee2095e72fb2428c498f62e21800026">drawing_area</a>, width, height);</div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160;    <a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#aaadab3f5fde957f5faa7ee6347bb1c6d">protocol_plugin_update_align</a>(gp);</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160;}</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160;</div><div class="line"><a name="l01172"></a><span class="lineno"><a class="line" href="rdp__event_8c.html#abe98674433c473136ccd28aab85a7748"> 1172</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="rdp__event_8c.html#abe98674433c473136ccd28aab85a7748">remmina_rdp_event_connected</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="structremmina__plugin__rdp__ui__object.html">RemminaPluginRdpUiObject</a> *ui)</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160;{</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160;    <a class="code" href="structrf__context.html">rfContext</a> *rfi = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160;    rdpGdi *gdi;</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160;</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160;    gdi = ((rdpContext *)rfi)-&gt;gdi;</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160;</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160;    gtk_widget_realize(rfi-&gt;<a class="code" href="structrf__context.html#acee2095e72fb2428c498f62e21800026">drawing_area</a>);</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160;</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160;    <a class="code" href="rdp__event_8c.html#a789ec99777755da7cae468216a74095a">remmina_rdp_event_create_cairo_surface</a>(rfi);</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160;    gtk_widget_queue_draw_area(rfi-&gt;<a class="code" href="structrf__context.html#acee2095e72fb2428c498f62e21800026">drawing_area</a>, 0, 0, gdi-&gt;width, gdi-&gt;height);</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160;</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160;    <a class="code" href="rdp__event_8c.html#a64ce0c66bb4cb6ddaee263ce8563f497">remmina_rdp_event_update_scale</a>(gp);</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160;</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160;    <a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#ab212bed4baf8cba148fadb5773148ad6">protocol_plugin_signal_connection_opened</a>(gp);</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160;    <span class="keyword">const</span> gchar *host = freerdp_settings_get_string (rfi-&gt;<a class="code" href="structrf__context.html#a28d215e4ddb5decc543c3c6578df5e3d">settings</a>, FreeRDP_ServerHostname);</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160;    <span class="comment">// TRANSLATORS: the placeholder may be either an IP/FQDN or a server hostname</span></div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160;    REMMINA_PLUGIN_AUDIT(_(<span class="stringliteral">&quot;Connected to %s via RDP&quot;</span>), host);</div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160;}</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160;</div><div class="line"><a name="l01193"></a><span class="lineno"><a class="line" href="rdp__event_8c.html#ab7cbdc2f8cf829e2f09ecfa605a92d65"> 1193</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="rdp__event_8c.html#ab7cbdc2f8cf829e2f09ecfa605a92d65">remmina_rdp_event_reconnect_progress</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="structremmina__plugin__rdp__ui__object.html">RemminaPluginRdpUiObject</a> *ui)</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160;{</div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160;    <a class="code" href="structrf__context.html">rfContext</a> *rfi = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160;</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160;    gdk_window_invalidate_rect(gtk_widget_get_window(rfi-&gt;<a class="code" href="structrf__context.html#acee2095e72fb2428c498f62e21800026">drawing_area</a>), NULL, TRUE);</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160;}</div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160;</div><div class="line"><a name="l01201"></a><span class="lineno"><a class="line" href="rdp__event_8c.html#ae8ef8118379a8bb6a6f99a8bbc0cbcfc"> 1201</a></span>&#160;<span class="keyword">static</span> BOOL <a class="code" href="rdp__event_8c.html#ae8ef8118379a8bb6a6f99a8bbc0cbcfc">remmina_rdp_event_create_cursor</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="structremmina__plugin__rdp__ui__object.html">RemminaPluginRdpUiObject</a> *ui)</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160;{</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160;    GdkPixbuf *pixbuf;</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;    <a class="code" href="structrf__context.html">rfContext</a> *rfi = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;    rdpPointer *pointer = (rdpPointer *)ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a542b03a0ccf850b32a8a104d0aec5db0">cursor</a>.pointer;</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;    cairo_surface_t *surface;</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160;    UINT8 *data = malloc(pointer-&gt;width * pointer-&gt;height * 4);</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160;</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160;    <span class="keywordflow">if</span> (!freerdp_image_copy_from_pointer_data(</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160;            (BYTE *)data, PIXEL_FORMAT_BGRA32,</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160;            pointer-&gt;width * 4, 0, 0, pointer-&gt;width, pointer-&gt;height,</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160;            pointer-&gt;xorMaskData, pointer-&gt;lengthXorMask,</div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160;            pointer-&gt;andMaskData, pointer-&gt;lengthAndMask,</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160;            pointer-&gt;xorBpp, &amp;(ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a542b03a0ccf850b32a8a104d0aec5db0">cursor</a>.context-&gt;gdi-&gt;palette))) {</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160;        free(data);</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160;    }</div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160;</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160;    surface = cairo_image_surface_create_for_data(data, CAIRO_FORMAT_ARGB32, pointer-&gt;width, pointer-&gt;height, cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, pointer-&gt;width));</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160;    cairo_surface_flush(surface);</div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160;    pixbuf = gdk_pixbuf_get_from_surface(surface, 0, 0, pointer-&gt;width, pointer-&gt;height);</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160;    cairo_surface_mark_dirty(surface);</div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160;    cairo_surface_destroy(surface);</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160;    free(data);</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160;    ((<a class="code" href="structrf__pointer.html">rfPointer</a> *)ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a542b03a0ccf850b32a8a104d0aec5db0">cursor</a>.pointer)-&gt;cursor = gdk_cursor_new_from_pixbuf(rfi-&gt;<a class="code" href="structrf__context.html#a7c4234646c4b584e41e36521b7eab889">display</a>, pixbuf, pointer-&gt;xPos, pointer-&gt;yPos);</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160;    g_object_unref(pixbuf);</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160;</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160;    <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160;}</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160;</div><div class="line"><a name="l01232"></a><span class="lineno"><a class="line" href="rdp__event_8c.html#a740d33b9c229ada638eeeebe2ffca461"> 1232</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="rdp__event_8c.html#a740d33b9c229ada638eeeebe2ffca461">remmina_rdp_event_free_cursor</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="structremmina__plugin__rdp__ui__object.html">RemminaPluginRdpUiObject</a> *ui)</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160;{</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160;    g_object_unref(ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a542b03a0ccf850b32a8a104d0aec5db0">cursor</a>.pointer-&gt;cursor);</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160;    ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a542b03a0ccf850b32a8a104d0aec5db0">cursor</a>.pointer-&gt;cursor = NULL;</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160;}</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160;</div><div class="line"><a name="l01239"></a><span class="lineno"><a class="line" href="rdp__event_8c.html#a34c7d3a1bb411e84d3b4e30fcccc9cd8"> 1239</a></span>&#160;<span class="keyword">static</span> BOOL <a class="code" href="rdp__event_8c.html#a34c7d3a1bb411e84d3b4e30fcccc9cd8">remmina_rdp_event_set_pointer_position</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, gint x, gint y)</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160;{</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160;    GdkWindow *w, *nw;</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160;    gint nx, ny, wx, wy;</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160;</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160;<span class="preprocessor">#if GTK_CHECK_VERSION(3, 20, 0)</span></div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160;    GdkSeat *seat;</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160;    GdkDeviceManager *manager;</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160;    GdkDevice *dev;</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160;    <a class="code" href="structrf__context.html">rfContext</a> *rfi = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160;</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160;    <span class="keywordflow">if</span> (rfi == NULL)</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160;</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160;    w = gtk_widget_get_window(rfi-&gt;<a class="code" href="structrf__context.html#acee2095e72fb2428c498f62e21800026">drawing_area</a>);</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160;<span class="preprocessor">#if GTK_CHECK_VERSION(3, 20, 0)</span></div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160;    seat = gdk_display_get_default_seat(gdk_display_get_default());</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160;    dev = gdk_seat_get_pointer(seat);</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160;    manager = gdk_display_get_device_manager(gdk_display_get_default());</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160;    dev = gdk_device_manager_get_client_pointer(manager);</div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160;</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160;    nw = gdk_device_get_window_at_position(dev, NULL, NULL);</div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160;</div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160;    <span class="keywordflow">if</span> (nw == w) {</div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160;        nx = 0;</div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160;        ny = 0;</div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160;        <a class="code" href="rdp__event_8c.html#a20d5fac8955f4f813759ca5c32078b7c">remmina_rdp_event_reverse_translate_pos_reverse</a>(gp, x, y, &amp;nx, &amp;ny);</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160;        gdk_window_get_root_coords(w, nx, ny, &amp;wx, &amp;wy);</div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160;        gdk_device_warp(dev, gdk_window_get_screen(w), wx, wy);</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160;    }</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160;    <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160;}</div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160;</div><div class="line"><a name="l01277"></a><span class="lineno"><a class="line" href="rdp__event_8c.html#a064c56982a401aff33a8c723eb157016"> 1277</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="rdp__event_8c.html#a064c56982a401aff33a8c723eb157016">remmina_rdp_event_cursor</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="structremmina__plugin__rdp__ui__object.html">RemminaPluginRdpUiObject</a> *ui)</div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160;{</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160;    <a class="code" href="structrf__context.html">rfContext</a> *rfi = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160;</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160;    <span class="keywordflow">switch</span> (ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a542b03a0ccf850b32a8a104d0aec5db0">cursor</a>.type) {</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="rdp__plugin_8h.html#a4861d015f803612c279f463095cb97eda620780f23115c72eee301705786a3232">REMMINA_RDP_POINTER_NEW</a>:</div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160;        ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a9f6aba25030b6859fbd57bee840feeee">retval</a> = <a class="code" href="rdp__event_8c.html#ae8ef8118379a8bb6a6f99a8bbc0cbcfc">remmina_rdp_event_create_cursor</a>(gp, ui) ? 1 : 0;</div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160;</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="rdp__plugin_8h.html#a4861d015f803612c279f463095cb97edacd27e44eca0a13a0ca58321afccf3ac2">REMMINA_RDP_POINTER_FREE</a>:</div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160;        <a class="code" href="rdp__event_8c.html#a740d33b9c229ada638eeeebe2ffca461">remmina_rdp_event_free_cursor</a>(gp, ui);</div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160;</div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="rdp__plugin_8h.html#a4861d015f803612c279f463095cb97eda937325a09de583d50a601a8138a89068">REMMINA_RDP_POINTER_SET</a>:</div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160;        gdk_window_set_cursor(gtk_widget_get_window(rfi-&gt;<a class="code" href="structrf__context.html#acee2095e72fb2428c498f62e21800026">drawing_area</a>), ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a542b03a0ccf850b32a8a104d0aec5db0">cursor</a>.pointer-&gt;cursor);</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160;        ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a9f6aba25030b6859fbd57bee840feeee">retval</a> = 1;</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160;</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="rdp__plugin_8h.html#a4861d015f803612c279f463095cb97edafc19d281c822242576c7791bc5ef9522">REMMINA_RDP_POINTER_SETPOS</a>:</div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160;        ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a9f6aba25030b6859fbd57bee840feeee">retval</a> = <a class="code" href="rdp__event_8c.html#a34c7d3a1bb411e84d3b4e30fcccc9cd8">remmina_rdp_event_set_pointer_position</a>(gp, ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a600a961eb4d48146721b10581145c20c">pos</a>.x, ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a600a961eb4d48146721b10581145c20c">pos</a>.y) ? 1 : 0;</div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160;</div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="rdp__plugin_8h.html#a4861d015f803612c279f463095cb97edae5973cd5d50ab23b1d4c7f2cf6853a49">REMMINA_RDP_POINTER_NULL</a>:</div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160;        gdk_window_set_cursor(gtk_widget_get_window(rfi-&gt;<a class="code" href="structrf__context.html#acee2095e72fb2428c498f62e21800026">drawing_area</a>),</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160;                      gdk_cursor_new_for_display(gdk_display_get_default(),</div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160;                                 GDK_BLANK_CURSOR));</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160;        ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a9f6aba25030b6859fbd57bee840feeee">retval</a> = 1;</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160;</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="rdp__plugin_8h.html#a4861d015f803612c279f463095cb97edac1059fb9b7718e2b4b5a86f7b3f92d56">REMMINA_RDP_POINTER_DEFAULT</a>:</div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160;        gdk_window_set_cursor(gtk_widget_get_window(rfi-&gt;<a class="code" href="structrf__context.html#acee2095e72fb2428c498f62e21800026">drawing_area</a>), NULL);</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160;        ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a9f6aba25030b6859fbd57bee840feeee">retval</a> = 1;</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160;    }</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160;}</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160;</div><div class="line"><a name="l01314"></a><span class="lineno"><a class="line" href="rdp__event_8c.html#ae0e0d42524cb165cd6d26553c104dbde"> 1314</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="rdp__event_8c.html#ae0e0d42524cb165cd6d26553c104dbde">remmina_rdp_ui_event_update_scale</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="structremmina__plugin__rdp__ui__object.html">RemminaPluginRdpUiObject</a> *ui)</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160;{</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160;    <a class="code" href="rdp__event_8c.html#a64ce0c66bb4cb6ddaee263ce8563f497">remmina_rdp_event_update_scale</a>(gp);</div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160;}</div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160;</div><div class="line"><a name="l01320"></a><span class="lineno"><a class="line" href="rdp__event_8h.html#a4da10c12b28edc28403766994d6ef29c"> 1320</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="rdp__event_8c.html#a4da10c12b28edc28403766994d6ef29c">remmina_rdp_event_unfocus</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160;{</div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160;    <a class="code" href="structrf__context.html">rfContext</a> *rfi = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160;</div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160;    <span class="keywordflow">if</span> (!rfi || !rfi-&gt;<a class="code" href="structrf__context.html#a3c2ffa55ba97bc70324d61b8cc838e73">connected</a> || rfi-&gt;<a class="code" href="structrf__context.html#af40c80ff8296b9bcc3ac437bf0be55f8">is_reconnecting</a>)</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160;    <a class="code" href="rdp__event_8c.html#a113ce593d4a96413b9330c471ee51554">remmina_rdp_event_release_all_keys</a>(gp);</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160;}</div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160;</div><div class="line"><a name="l01330"></a><span class="lineno"><a class="line" href="rdp__event_8c.html#acd5f1bd57553006fdbc60d62af433e31"> 1330</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="rdp__event_8c.html#acd5f1bd57553006fdbc60d62af433e31">remmina_rdp_ui_event_destroy_cairo_surface</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="structremmina__plugin__rdp__ui__object.html">RemminaPluginRdpUiObject</a> *ui)</div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160;{</div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160;    <a class="code" href="structrf__context.html">rfContext</a> *rfi = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160;</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160;    cairo_surface_mark_dirty(rfi-&gt;<a class="code" href="structrf__context.html#a3aead7f4d2c4580fcbd25e15679e19c6">surface</a>);</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160;    cairo_surface_destroy(rfi-&gt;<a class="code" href="structrf__context.html#a3aead7f4d2c4580fcbd25e15679e19c6">surface</a>);</div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160;    rfi-&gt;<a class="code" href="structrf__context.html#a3aead7f4d2c4580fcbd25e15679e19c6">surface</a> = NULL;</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160;}</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160;</div><div class="line"><a name="l01340"></a><span class="lineno"><a class="line" href="rdp__event_8c.html#a5f5fcd2a5c81d0c8bec609e0428735c5"> 1340</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="rdp__event_8c.html#a5f5fcd2a5c81d0c8bec609e0428735c5">remmina_rdp_event_process_event</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="structremmina__plugin__rdp__ui__object.html">RemminaPluginRdpUiObject</a> *ui)</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160;{</div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160;    <span class="keywordflow">switch</span> (ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a87d27be6d29a42e284192bad1a6f1a32">event</a>.type) {</div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="rdp__plugin_8h.html#a70cc17b1d3603d036f962a0ae8496b35a5bec41fd19576fc5c3e397366461dfe4">REMMINA_RDP_UI_EVENT_UPDATE_SCALE</a>:</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160;        <a class="code" href="rdp__event_8c.html#ae0e0d42524cb165cd6d26553c104dbde">remmina_rdp_ui_event_update_scale</a>(gp, ui);</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="rdp__plugin_8h.html#a70cc17b1d3603d036f962a0ae8496b35ad2dd5f6251de0ac7afe2f962c829aa48">REMMINA_RDP_UI_EVENT_DESTROY_CAIRO_SURFACE</a>:</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160;        <a class="code" href="rdp__event_8c.html#acd5f1bd57553006fdbc60d62af433e31">remmina_rdp_ui_event_destroy_cairo_surface</a>(gp, ui);</div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160;    }</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160;}</div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160;</div><div class="line"><a name="l01353"></a><span class="lineno"><a class="line" href="rdp__event_8c.html#a6929ce2effcc3cf2be6d5ec8b19d5466"> 1353</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="rdp__event_8c.html#a6929ce2effcc3cf2be6d5ec8b19d5466">remmina_rdp_event_process_ui_event</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="structremmina__plugin__rdp__ui__object.html">RemminaPluginRdpUiObject</a> *ui)</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160;{</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160;    <span class="keywordflow">switch</span> (ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a46d939889fba73c1360f924efaa09262">type</a>) {</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="rdp__plugin_8h.html#a1e2313a63a9cfd208ab722cc1e0ee072acd86c5f1b34b0d7168c94892cfd2cb9e">REMMINA_RDP_UI_UPDATE_REGIONS</a>:</div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160;        <a class="code" href="rdp__event_8c.html#a2ff2e46de1ad42c9aa8f792d629e0a89">remmina_rdp_event_update_regions</a>(gp, ui);</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160;</div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="rdp__plugin_8h.html#a1e2313a63a9cfd208ab722cc1e0ee072ad3ced07ddeda0100b59ca9c8af47bbe9">REMMINA_RDP_UI_CONNECTED</a>:</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160;        <a class="code" href="rdp__event_8c.html#abe98674433c473136ccd28aab85a7748">remmina_rdp_event_connected</a>(gp, ui);</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160;</div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="rdp__plugin_8h.html#a1e2313a63a9cfd208ab722cc1e0ee072a5b2f8ce562cd1720b7a985f3a7c15ea7">REMMINA_RDP_UI_RECONNECT_PROGRESS</a>:</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160;        <a class="code" href="rdp__event_8c.html#ab7cbdc2f8cf829e2f09ecfa605a92d65">remmina_rdp_event_reconnect_progress</a>(gp, ui);</div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160;</div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="rdp__plugin_8h.html#a1e2313a63a9cfd208ab722cc1e0ee072ac32b00c17604d850f95b8117c419dcfe">REMMINA_RDP_UI_CURSOR</a>:</div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160;        <a class="code" href="rdp__event_8c.html#a064c56982a401aff33a8c723eb157016">remmina_rdp_event_cursor</a>(gp, ui);</div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160;</div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="rdp__plugin_8h.html#a1e2313a63a9cfd208ab722cc1e0ee072ae312d9684d8fed257ad0a06a80aa806f">REMMINA_RDP_UI_CLIPBOARD</a>:</div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160;        <a class="code" href="rdp__cliprdr_8c.html#ad4fad618198e7746ea1e4ebd01a9b173">remmina_rdp_event_process_clipboard</a>(gp, ui);</div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160;</div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="rdp__plugin_8h.html#a1e2313a63a9cfd208ab722cc1e0ee072aa5f6f338ffaa4bed53b225cf54b50000">REMMINA_RDP_UI_EVENT</a>:</div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160;        <a class="code" href="rdp__event_8c.html#a5f5fcd2a5c81d0c8bec609e0428735c5">remmina_rdp_event_process_event</a>(gp, ui);</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160;</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160;    <span class="keywordflow">default</span>:</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160;    }</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160;}</div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160;</div><div class="line"><a name="l01386"></a><span class="lineno"><a class="line" href="rdp__event_8c.html#abfa1d5d0b0494818fb5e1a549c0acd23"> 1386</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="rdp__event_8c.html#abfa1d5d0b0494818fb5e1a549c0acd23">remmina_rdp_event_process_ui_queue</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160;{</div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160;</div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160;    <a class="code" href="structrf__context.html">rfContext</a> *rfi = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160;    <a class="code" href="structremmina__plugin__rdp__ui__object.html">RemminaPluginRdpUiObject</a> *ui;</div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160;</div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160;    pthread_mutex_lock(&amp;rfi-&gt;<a class="code" href="structrf__context.html#a3836f3c9bc575a05d5b35dbdb3186329">ui_queue_mutex</a>);</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160;    ui = (<a class="code" href="structremmina__plugin__rdp__ui__object.html">RemminaPluginRdpUiObject</a> *)g_async_queue_try_pop(rfi-&gt;<a class="code" href="structrf__context.html#ae6190d1c82045bcd08e22ff6e98148a3">ui_queue</a>);</div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160;    <span class="keywordflow">if</span> (ui) {</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160;        pthread_mutex_lock(&amp;ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a5375267e5c5285fbaf47ed22566e68c6">sync_wait_mutex</a>);</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160;        <span class="keywordflow">if</span> (!rfi-&gt;<a class="code" href="structrf__context.html#aa574515edb4966117f539d26e26f0a62">thread_cancelled</a>)</div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160;            <a class="code" href="rdp__event_8c.html#a6929ce2effcc3cf2be6d5ec8b19d5466">remmina_rdp_event_process_ui_event</a>(gp, ui);</div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160;        <span class="comment">// Should we signal the caller thread to unlock ?</span></div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160;        <span class="keywordflow">if</span> (ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a66cdf13076e9a6b0c8d4e73a2e565c60">sync</a>) {</div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160;            ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a64657b5e71205d98805ca66b01bfae3c">complete</a> = TRUE;</div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160;            pthread_cond_signal(&amp;ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#aca09eff5589ea5440e4ecff99879a509">sync_wait_cond</a>);</div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160;            pthread_mutex_unlock(&amp;ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a5375267e5c5285fbaf47ed22566e68c6">sync_wait_mutex</a>);</div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160;        } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160;            <a class="code" href="rdp__event_8c.html#a40b4fd190055c10d5d2248a6eca5f50f">remmina_rdp_event_free_event</a>(gp, ui);</div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160;        }</div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160;</div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160;        pthread_mutex_unlock(&amp;rfi-&gt;<a class="code" href="structrf__context.html#a3836f3c9bc575a05d5b35dbdb3186329">ui_queue_mutex</a>);</div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160;        <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160;        rfi-&gt;<a class="code" href="structrf__context.html#ae62cc5547984bf11865f93c7d63afdf0">ui_handler</a> = 0;</div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160;        pthread_mutex_unlock(&amp;rfi-&gt;<a class="code" href="structrf__context.html#a3836f3c9bc575a05d5b35dbdb3186329">ui_queue_mutex</a>);</div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160;    }</div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160;}</div><div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160;</div><div class="line"><a name="l01417"></a><span class="lineno"><a class="line" href="rdp__event_8c.html#a2b91746b782b7782432bd1d23c6a9945"> 1417</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="rdp__event_8c.html#a2b91746b782b7782432bd1d23c6a9945">remmina_rdp_event_queue_ui</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="structremmina__plugin__rdp__ui__object.html">RemminaPluginRdpUiObject</a> *ui)</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160;{</div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160;    <a class="code" href="structrf__context.html">rfContext</a> *rfi = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160;    gboolean ui_sync_save;</div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160;    <span class="keywordtype">int</span> oldcanceltype;</div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160;</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160;    <span class="keywordflow">if</span> (!rfi || rfi-&gt;<a class="code" href="structrf__context.html#aa574515edb4966117f539d26e26f0a62">thread_cancelled</a>)</div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160;</div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a>-&gt;<a class="code" href="struct___remmina_plugin_service.html#a997a36825f2338b8e06bcd59becef61b">is_main_thread</a>()) {</div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160;        <a class="code" href="rdp__event_8c.html#a6929ce2effcc3cf2be6d5ec8b19d5466">remmina_rdp_event_process_ui_event</a>(gp, ui);</div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160;    }</div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160;</div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160;    pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &amp;oldcanceltype);</div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160;</div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160;    pthread_mutex_lock(&amp;rfi-&gt;<a class="code" href="structrf__context.html#a3836f3c9bc575a05d5b35dbdb3186329">ui_queue_mutex</a>);</div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160;</div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160;    ui_sync_save = ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a66cdf13076e9a6b0c8d4e73a2e565c60">sync</a>;</div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160;    ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a64657b5e71205d98805ca66b01bfae3c">complete</a> = FALSE;</div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160;</div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160;    <span class="keywordflow">if</span> (ui_sync_save) {</div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160;        pthread_mutex_init(&amp;ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a5375267e5c5285fbaf47ed22566e68c6">sync_wait_mutex</a>, NULL);</div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160;        pthread_cond_init(&amp;ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#aca09eff5589ea5440e4ecff99879a509">sync_wait_cond</a>, NULL);</div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160;    }</div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160;</div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160;    ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a64657b5e71205d98805ca66b01bfae3c">complete</a> = FALSE;</div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160;</div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160;    g_async_queue_push(rfi-&gt;<a class="code" href="structrf__context.html#ae6190d1c82045bcd08e22ff6e98148a3">ui_queue</a>, ui);</div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160;</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160;    <span class="keywordflow">if</span> (!rfi-&gt;<a class="code" href="structrf__context.html#ae62cc5547984bf11865f93c7d63afdf0">ui_handler</a>)</div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160;        rfi-&gt;<a class="code" href="structrf__context.html#ae62cc5547984bf11865f93c7d63afdf0">ui_handler</a> = IDLE_ADD((GSourceFunc)<a class="code" href="rdp__event_8c.html#abfa1d5d0b0494818fb5e1a549c0acd23">remmina_rdp_event_process_ui_queue</a>, gp);</div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160;</div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160;    <span class="keywordflow">if</span> (ui_sync_save) {</div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160;        <span class="comment">/* Wait for main thread function completion before returning */</span></div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160;        pthread_mutex_lock(&amp;ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a5375267e5c5285fbaf47ed22566e68c6">sync_wait_mutex</a>);</div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160;        pthread_mutex_unlock(&amp;rfi-&gt;<a class="code" href="structrf__context.html#a3836f3c9bc575a05d5b35dbdb3186329">ui_queue_mutex</a>);</div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160;        <span class="keywordflow">while</span> (!ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a64657b5e71205d98805ca66b01bfae3c">complete</a>)</div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160;            pthread_cond_wait(&amp;ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#aca09eff5589ea5440e4ecff99879a509">sync_wait_cond</a>, &amp;ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a5375267e5c5285fbaf47ed22566e68c6">sync_wait_mutex</a>);</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160;        pthread_cond_destroy(&amp;ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#aca09eff5589ea5440e4ecff99879a509">sync_wait_cond</a>);</div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160;        pthread_mutex_destroy(&amp;ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a5375267e5c5285fbaf47ed22566e68c6">sync_wait_mutex</a>);</div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160;        pthread_mutex_unlock(&amp;rfi-&gt;<a class="code" href="structrf__context.html#a3836f3c9bc575a05d5b35dbdb3186329">ui_queue_mutex</a>);</div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160;    }</div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160;    pthread_setcanceltype(oldcanceltype, NULL);</div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160;}</div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160;</div><div class="line"><a name="l01465"></a><span class="lineno"><a class="line" href="rdp__event_8h.html#ae445fd0a84c7c9414a177a69c86cf325"> 1465</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="rdp__event_8c.html#ae445fd0a84c7c9414a177a69c86cf325">remmina_rdp_event_queue_ui_async</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="structremmina__plugin__rdp__ui__object.html">RemminaPluginRdpUiObject</a> *ui)</div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160;{</div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160;    ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a66cdf13076e9a6b0c8d4e73a2e565c60">sync</a> = FALSE;</div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160;    <a class="code" href="rdp__event_8c.html#a2b91746b782b7782432bd1d23c6a9945">remmina_rdp_event_queue_ui</a>(gp, ui);</div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160;}</div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160;</div><div class="line"><a name="l01471"></a><span class="lineno"><a class="line" href="rdp__event_8h.html#ab5fe43c1b1b77c39f118d2581942eb81"> 1471</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="rdp__event_8c.html#ab5fe43c1b1b77c39f118d2581942eb81">remmina_rdp_event_queue_ui_sync_retint</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="structremmina__plugin__rdp__ui__object.html">RemminaPluginRdpUiObject</a> *ui)</div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160;{</div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160;    <span class="keywordtype">int</span> retval;</div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160;</div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160;    ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a66cdf13076e9a6b0c8d4e73a2e565c60">sync</a> = TRUE;</div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160;    <a class="code" href="rdp__event_8c.html#a2b91746b782b7782432bd1d23c6a9945">remmina_rdp_event_queue_ui</a>(gp, ui);</div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160;    retval = ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a9f6aba25030b6859fbd57bee840feeee">retval</a>;</div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160;    <a class="code" href="rdp__event_8c.html#a40b4fd190055c10d5d2248a6eca5f50f">remmina_rdp_event_free_event</a>(gp, ui);</div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160;    <span class="keywordflow">return</span> retval;</div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160;}</div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160;</div><div class="line"><a name="l01483"></a><span class="lineno"><a class="line" href="rdp__event_8h.html#adaaf3de8342309cc52668f318a473350"> 1483</a></span>&#160;<span class="keywordtype">void</span> *<a class="code" href="rdp__event_8c.html#adaaf3de8342309cc52668f318a473350">remmina_rdp_event_queue_ui_sync_retptr</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="structremmina__plugin__rdp__ui__object.html">RemminaPluginRdpUiObject</a> *ui)</div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160;{</div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160;    <span class="keywordtype">void</span> *rp;</div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160;</div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160;    ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a66cdf13076e9a6b0c8d4e73a2e565c60">sync</a> = TRUE;</div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160;    <a class="code" href="rdp__event_8c.html#a2b91746b782b7782432bd1d23c6a9945">remmina_rdp_event_queue_ui</a>(gp, ui);</div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160;    rp = ui-&gt;<a class="code" href="structremmina__plugin__rdp__ui__object.html#a6cdd472797d227d7ce79a312c0fa2a24">retptr</a>;</div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160;    <a class="code" href="rdp__event_8c.html#a40b4fd190055c10d5d2248a6eca5f50f">remmina_rdp_event_free_event</a>(gp, ui);</div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160;    <span class="keywordflow">return</span> rp;</div><div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160;}</div><div class="ttc" id="rdp__plugin_8h_html_a4861d015f803612c279f463095cb97eda937325a09de583d50a601a8138a89068"><div class="ttname"><a href="rdp__plugin_8h.html#a4861d015f803612c279f463095cb97eda937325a09de583d50a601a8138a89068">REMMINA_RDP_POINTER_SET</a></div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00251">rdp_plugin.h:251</a></div></div>
<div class="ttc" id="structremmina__plugin__rdp__event_html_ada88729499d8df4337a81d1cd5bcd7bf"><div class="ttname"><a href="structremmina__plugin__rdp__event.html#ada88729499d8df4337a81d1cd5bcd7bf">remmina_plugin_rdp_event::mouse_event</a></div><div class="ttdeci">struct remmina_plugin_rdp_event::@42::@45 mouse_event</div></div>
<div class="ttc" id="rdp__plugin_8h_html_a1e2313a63a9cfd208ab722cc1e0ee072a96cf99f0ed1b7e1a798ebb358eff0d1b"><div class="ttname"><a href="rdp__plugin_8h.html#a1e2313a63a9cfd208ab722cc1e0ee072a96cf99f0ed1b7e1a798ebb358eff0d1b">REMMINA_RDP_UI_NOCODEC</a></div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00237">rdp_plugin.h:237</a></div></div>
<div class="ttc" id="rdp__plugin_8h_html_a4861d015f803612c279f463095cb97edae5973cd5d50ab23b1d4c7f2cf6853a49"><div class="ttname"><a href="rdp__plugin_8h.html#a4861d015f803612c279f463095cb97edae5973cd5d50ab23b1d4c7f2cf6853a49">REMMINA_RDP_POINTER_NULL</a></div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00252">rdp_plugin.h:252</a></div></div>
<div class="ttc" id="structrf__context_html_aa574515edb4966117f539d26e26f0a62"><div class="ttname"><a href="structrf__context.html#aa574515edb4966117f539d26e26f0a62">rf_context::thread_cancelled</a></div><div class="ttdeci">gboolean thread_cancelled</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00333">rdp_plugin.h:333</a></div></div>
<div class="ttc" id="structremmina__plugin__rdp__ui__object_html_a6cdd472797d227d7ce79a312c0fa2a24"><div class="ttname"><a href="structremmina__plugin__rdp__ui__object.html#a6cdd472797d227d7ce79a312c0fa2a24">remmina_plugin_rdp_ui_object::retptr</a></div><div class="ttdeci">void * retptr</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00312">rdp_plugin.h:312</a></div></div>
<div class="ttc" id="rdp__event_8c_html_a740d33b9c229ada638eeeebe2ffca461"><div class="ttname"><a href="rdp__event_8c.html#a740d33b9c229ada638eeeebe2ffca461">remmina_rdp_event_free_cursor</a></div><div class="ttdeci">static void remmina_rdp_event_free_cursor(RemminaProtocolWidget *gp, RemminaPluginRdpUiObject *ui)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l01232">rdp_event.c:1232</a></div></div>
<div class="ttc" id="structrf__context_html_af40c80ff8296b9bcc3ac437bf0be55f8"><div class="ttname"><a href="structrf__context.html#af40c80ff8296b9bcc3ac437bf0be55f8">rf_context::is_reconnecting</a></div><div class="ttdeci">gboolean is_reconnecting</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00345">rdp_plugin.h:345</a></div></div>
<div class="ttc" id="structrf__clipboard_html_a52ca364a1902d7f4095234923feed724"><div class="ttname"><a href="structrf__clipboard.html#a52ca364a1902d7f4095234923feed724">rf_clipboard::clipboard_handler</a></div><div class="ttdeci">gulong clipboard_handler</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00140">rdp_plugin.h:140</a></div></div>
<div class="ttc" id="rdp__event_8c_html_a789ec99777755da7cae468216a74095a"><div class="ttname"><a href="rdp__event_8c.html#a789ec99777755da7cae468216a74095a">remmina_rdp_event_create_cairo_surface</a></div><div class="ttdeci">static void remmina_rdp_event_create_cairo_surface(rfContext *rfi)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l01103">rdp_event.c:1103</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_ae97f4052c4bbda628682ae071ada27ed"><div class="ttname"><a href="struct___remmina_plugin_service.html#ae97f4052c4bbda628682ae071ada27ed">_RemminaPluginService::remmina_protocol_widget_get_current_scale_mode</a></div><div class="ttdeci">RemminaScaleMode(* remmina_protocol_widget_get_current_scale_mode)(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00172">plugin.h:172</a></div></div>
<div class="ttc" id="rdp__event_8c_html_a5f5fcd2a5c81d0c8bec609e0428735c5"><div class="ttname"><a href="rdp__event_8c.html#a5f5fcd2a5c81d0c8bec609e0428735c5">remmina_rdp_event_process_event</a></div><div class="ttdeci">static void remmina_rdp_event_process_event(RemminaProtocolWidget *gp, RemminaPluginRdpUiObject *ui)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l01340">rdp_event.c:1340</a></div></div>
<div class="ttc" id="structrf__context_html_a957e6f6867170470689210d55770342e"><div class="ttname"><a href="structrf__context.html#a957e6f6867170470689210d55770342e">rf_context::delayed_monitor_layout_handler</a></div><div class="ttdeci">guint delayed_monitor_layout_handler</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00361">rdp_plugin.h:361</a></div></div>
<div class="ttc" id="structremmina__plugin__rdp__ui__object_html_a542b03a0ccf850b32a8a104d0aec5db0"><div class="ttname"><a href="structremmina__plugin__rdp__ui__object.html#a542b03a0ccf850b32a8a104d0aec5db0">remmina_plugin_rdp_ui_object::cursor</a></div><div class="ttdeci">struct remmina_plugin_rdp_ui_object::@50::@53 cursor</div></div>
<div class="ttc" id="rdp__event_8c_html_a6076424eb759c91ca9c8da59432c66d6"><div class="ttname"><a href="rdp__event_8c.html#a6076424eb759c91ca9c8da59432c66d6">remmina_rdp_event_update_scale_factor</a></div><div class="ttdeci">static void remmina_rdp_event_update_scale_factor(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l00313">rdp_event.c:313</a></div></div>
<div class="ttc" id="structremmina__plugin__rdp__ui__object_html_a64657b5e71205d98805ca66b01bfae3c"><div class="ttname"><a href="structremmina__plugin__rdp__ui__object.html#a64657b5e71205d98805ca66b01bfae3c">remmina_plugin_rdp_ui_object::complete</a></div><div class="ttdeci">gboolean complete</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00269">rdp_plugin.h:269</a></div></div>
<div class="ttc" id="structrf__context_html_a40e89e126e5dd96a3f67e6f945a8867b"><div class="ttname"><a href="structrf__context.html#a40e89e126e5dd96a3f67e6f945a8867b">rf_context::bpp</a></div><div class="ttdeci">gint bpp</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00369">rdp_plugin.h:369</a></div></div>
<div class="ttc" id="structrf__context_html_a539feef609228a91c5e54d5da837bb7a"><div class="ttname"><a href="structrf__context.html#a539feef609228a91c5e54d5da837bb7a">rf_context::event_pipe</a></div><div class="ttdeci">gint event_pipe[2]</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00382">rdp_plugin.h:382</a></div></div>
<div class="ttc" id="structrf__context_html_a8a310c8fad5daf6b9f4d8f854b04a764"><div class="ttname"><a href="structrf__context.html#a8a310c8fad5daf6b9f4d8f854b04a764">rf_context::scale_y</a></div><div class="ttdeci">gdouble scale_y</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00360">rdp_plugin.h:360</a></div></div>
<div class="ttc" id="structrf__context_html"><div class="ttname"><a href="structrf__context.html">rf_context</a></div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00320">rdp_plugin.h:320</a></div></div>
<div class="ttc" id="types_8h_html_aeea5ee1e675368413b6f6ab09883e7dea4d22c6eed721b661d618098159a20946"><div class="ttname"><a href="types_8h.html#aeea5ee1e675368413b6f6ab09883e7dea4d22c6eed721b661d618098159a20946">REMMINA_PROTOCOL_WIDGET_SCALE_MODE_DYNRES</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00145">types.h:145</a></div></div>
<div class="ttc" id="rdp__event_8c_html_a393d4ec6673f6a9c2b71849c109facef"><div class="ttname"><a href="rdp__event_8c.html#a393d4ec6673f6a9c2b71849c109facef">remmina_rdp_event_on_unmap</a></div><div class="ttdeci">gboolean remmina_rdp_event_on_unmap(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l00074">rdp_event.c:74</a></div></div>
<div class="ttc" id="structremmina__plugin__rdp__event_html"><div class="ttname"><a href="structremmina__plugin__rdp__event.html">remmina_plugin_rdp_event</a></div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00190">rdp_plugin.h:190</a></div></div>
<div class="ttc" id="types_8h_html_a112d7cc6c755209cabb68cf2a62ad515"><div class="ttname"><a href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a></div><div class="ttdeci">typedefG_BEGIN_DECLS struct _RemminaFile RemminaFile</div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00044">types.h:44</a></div></div>
<div class="ttc" id="structrf__context_html_a3aead7f4d2c4580fcbd25e15679e19c6"><div class="ttname"><a href="structrf__context.html#a3aead7f4d2c4580fcbd25e15679e19c6">rf_context::surface</a></div><div class="ttdeci">cairo_surface_t * surface</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00367">rdp_plugin.h:367</a></div></div>
<div class="ttc" id="structrf__context_html_ab5ffc4d8ba9d3d8a298414dc8e4efd2a"><div class="ttname"><a href="structrf__context.html#ab5ffc4d8ba9d3d8a298414dc8e4efd2a">rf_context::rdpgfxchan</a></div><div class="ttdeci">gboolean rdpgfxchan</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00342">rdp_plugin.h:342</a></div></div>
<div class="ttc" id="structremmina__plugin__rdp__ui__object_html_acef425d73af8935a8bc784d56f7b125c"><div class="ttname"><a href="structremmina__plugin__rdp__ui__object.html#acef425d73af8935a8bc784d56f7b125c">remmina_plugin_rdp_ui_object::reg</a></div><div class="ttdeci">struct remmina_plugin_rdp_ui_object::@50::@52 reg</div></div>
<div class="ttc" id="rdp__plugin_8h_html_adafbb901615d7fc9d8f31d5dbdae29d7aebb0df0651989a89f3f05e3c4894dd50"><div class="ttname"><a href="rdp__plugin_8h.html#adafbb901615d7fc9d8f31d5dbdae29d7aebb0df0651989a89f3f05e3c4894dd50">REMMINA_RDP_EVENT_TYPE_CLIPBOARD_SEND_CLIENT_FORMAT_LIST</a></div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00183">rdp_plugin.h:183</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_abaf7f57e2336f6e5c257e9c30fedc047"><div class="ttname"><a href="struct___remmina_plugin_service.html#abaf7f57e2336f6e5c257e9c30fedc047">_RemminaPluginService::protocol_plugin_set_width</a></div><div class="ttdeci">void(* protocol_plugin_set_width)(RemminaProtocolWidget *gp, gint width)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00169">plugin.h:169</a></div></div>
<div class="ttc" id="structremmina__plugin__rdp__ui__object_html"><div class="ttname"><a href="structremmina__plugin__rdp__ui__object.html">remmina_plugin_rdp_ui_object</a></div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00266">rdp_plugin.h:266</a></div></div>
<div class="ttc" id="structrf__context_html_ae62cc5547984bf11865f93c7d63afdf0"><div class="ttname"><a href="structrf__context.html#ae62cc5547984bf11865f93c7d63afdf0">rf_context::ui_handler</a></div><div class="ttdeci">guint ui_handler</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00378">rdp_plugin.h:378</a></div></div>
<div class="ttc" id="rdp__settings_8c_html_a5f05047cf10611ffb7a23a248650cb4c"><div class="ttname"><a href="rdp__settings_8c.html#a5f05047cf10611ffb7a23a248650cb4c">remmina_rdp_settings_get_orientation_scale_prefs</a></div><div class="ttdeci">void remmina_rdp_settings_get_orientation_scale_prefs(int *desktopOrientation, int *desktopScaleFactor, int *deviceScaleFactor)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__settings_8c_source.html#l00707">rdp_settings.c:707</a></div></div>
<div class="ttc" id="rdp__plugin_8h_html_a1e2313a63a9cfd208ab722cc1e0ee072aa5f6f338ffaa4bed53b225cf54b50000"><div class="ttname"><a href="rdp__plugin_8h.html#a1e2313a63a9cfd208ab722cc1e0ee072aa5f6f338ffaa4bed53b225cf54b50000">REMMINA_RDP_UI_EVENT</a></div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00239">rdp_plugin.h:239</a></div></div>
<div class="ttc" id="rdp__cliprdr_8c_html_a829aba669bedbb7cdcf9dcb4df8ca26b"><div class="ttname"><a href="rdp__cliprdr_8c.html#a829aba669bedbb7cdcf9dcb4df8ca26b">remmina_rdp_clipboard_abort_client_format_data_request</a></div><div class="ttdeci">void remmina_rdp_clipboard_abort_client_format_data_request(rfContext *rfi)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__cliprdr_8c_source.html#l00947">rdp_cliprdr.c:947</a></div></div>
<div class="ttc" id="rdp__plugin_8h_html_a70cc17b1d3603d036f962a0ae8496b35ad2dd5f6251de0ac7afe2f962c829aa48"><div class="ttname"><a href="rdp__plugin_8h.html#a70cc17b1d3603d036f962a0ae8496b35ad2dd5f6251de0ac7afe2f962c829aa48">REMMINA_RDP_UI_EVENT_DESTROY_CAIRO_SURFACE</a></div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00259">rdp_plugin.h:259</a></div></div>
<div class="ttc" id="structrf__context_html_a7c4234646c4b584e41e36521b7eab889"><div class="ttname"><a href="structrf__context.html#a7c4234646c4b584e41e36521b7eab889">rf_context::display</a></div><div class="ttdeci">GdkDisplay * display</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00365">rdp_plugin.h:365</a></div></div>
<div class="ttc" id="rdp__event_8c_html_adaaf3de8342309cc52668f318a473350"><div class="ttname"><a href="rdp__event_8c.html#adaaf3de8342309cc52668f318a473350">remmina_rdp_event_queue_ui_sync_retptr</a></div><div class="ttdeci">void * remmina_rdp_event_queue_ui_sync_retptr(RemminaProtocolWidget *gp, RemminaPluginRdpUiObject *ui)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l01483">rdp_event.c:1483</a></div></div>
<div class="ttc" id="structremmina__plugin__rdp__event_html_a699aeed24ff4a648e00aced7a1e3adf6"><div class="ttname"><a href="structremmina__plugin__rdp__event.html#a699aeed24ff4a648e00aced7a1e3adf6">remmina_plugin_rdp_event::monitor_layout</a></div><div class="ttdeci">struct remmina_plugin_rdp_event::@42::@49 monitor_layout</div></div>
<div class="ttc" id="structrf__context_html_ae6190d1c82045bcd08e22ff6e98148a3"><div class="ttname"><a href="structrf__context.html#ae6190d1c82045bcd08e22ff6e98148a3">rf_context::ui_queue</a></div><div class="ttdeci">GAsyncQueue * ui_queue</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00376">rdp_plugin.h:376</a></div></div>
<div class="ttc" id="rdp__event_8c_html_a712a9b04decd8b928d71db44b9b14fc9"><div class="ttname"><a href="rdp__event_8c.html#a712a9b04decd8b928d71db44b9b14fc9">remmina_rdp_event_update_rect</a></div><div class="ttdeci">void remmina_rdp_event_update_rect(RemminaProtocolWidget *gp, gint x, gint y, gint w, gint h)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l00302">rdp_event.c:302</a></div></div>
<div class="ttc" id="structremmina__plugin__rdp__ui__object_html_a5375267e5c5285fbaf47ed22566e68c6"><div class="ttname"><a href="structremmina__plugin__rdp__ui__object.html#a5375267e5c5285fbaf47ed22566e68c6">remmina_plugin_rdp_ui_object::sync_wait_mutex</a></div><div class="ttdeci">pthread_mutex_t sync_wait_mutex</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00270">rdp_plugin.h:270</a></div></div>
<div class="ttc" id="rdp__plugin_8h_html_a1e2313a63a9cfd208ab722cc1e0ee072ac32b00c17604d850f95b8117c419dcfe"><div class="ttname"><a href="rdp__plugin_8h.html#a1e2313a63a9cfd208ab722cc1e0ee072ac32b00c17604d850f95b8117c419dcfe">REMMINA_RDP_UI_CURSOR</a></div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00236">rdp_plugin.h:236</a></div></div>
<div class="ttc" id="structrf__context_html_a4c35800dba8da687f7f56e3bb7a23413"><div class="ttname"><a href="structrf__context.html#a4c35800dba8da687f7f56e3bb7a23413">rf_context::reconnect_nattempt</a></div><div class="ttdeci">int reconnect_nattempt</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00353">rdp_plugin.h:353</a></div></div>
<div class="ttc" id="rdp__event_8c_html_abfa1d5d0b0494818fb5e1a549c0acd23"><div class="ttname"><a href="rdp__event_8c.html#abfa1d5d0b0494818fb5e1a549c0acd23">remmina_rdp_event_process_ui_queue</a></div><div class="ttdeci">static gboolean remmina_rdp_event_process_ui_queue(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l01386">rdp_event.c:1386</a></div></div>
<div class="ttc" id="rdp__event_8c_html_ae8ef8118379a8bb6a6f99a8bbc0cbcfc"><div class="ttname"><a href="rdp__event_8c.html#ae8ef8118379a8bb6a6f99a8bbc0cbcfc">remmina_rdp_event_create_cursor</a></div><div class="ttdeci">static BOOL remmina_rdp_event_create_cursor(RemminaProtocolWidget *gp, RemminaPluginRdpUiObject *ui)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l01201">rdp_event.c:1201</a></div></div>
<div class="ttc" id="rdp__event_8c_html_a062f6feb8f4b29ad0ad84717e6646e0c"><div class="ttname"><a href="rdp__event_8c.html#a062f6feb8f4b29ad0ad84717e6646e0c">remmina_rdp_event_release_key</a></div><div class="ttdeci">static void remmina_rdp_event_release_key(RemminaProtocolWidget *gp, RemminaPluginRdpEvent rdp_event)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l00195">rdp_event.c:195</a></div></div>
<div class="ttc" id="rdp__event_8c_html_a2b91746b782b7782432bd1d23c6a9945"><div class="ttname"><a href="rdp__event_8c.html#a2b91746b782b7782432bd1d23c6a9945">remmina_rdp_event_queue_ui</a></div><div class="ttdeci">static void remmina_rdp_event_queue_ui(RemminaProtocolWidget *gp, RemminaPluginRdpUiObject *ui)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l01417">rdp_event.c:1417</a></div></div>
<div class="ttc" id="rdp__plugin_8h_html_a4861d015f803612c279f463095cb97edafc19d281c822242576c7791bc5ef9522"><div class="ttname"><a href="rdp__plugin_8h.html#a4861d015f803612c279f463095cb97edafc19d281c822242576c7791bc5ef9522">REMMINA_RDP_POINTER_SETPOS</a></div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00254">rdp_plugin.h:254</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_adf255b7ceaec6a51fc9269cf824a02ce"><div class="ttname"><a href="struct___remmina_plugin_service.html#adf255b7ceaec6a51fc9269cf824a02ce">_RemminaPluginService::protocol_plugin_get_width</a></div><div class="ttdeci">gint(* protocol_plugin_get_width)(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00168">plugin.h:168</a></div></div>
<div class="ttc" id="rdp__plugin_8h_html_a4861d015f803612c279f463095cb97edacd27e44eca0a13a0ca58321afccf3ac2"><div class="ttname"><a href="rdp__plugin_8h.html#a4861d015f803612c279f463095cb97edacd27e44eca0a13a0ca58321afccf3ac2">REMMINA_RDP_POINTER_FREE</a></div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00250">rdp_plugin.h:250</a></div></div>
<div class="ttc" id="structrf__context_html_a584505347366c40e6efa710353d4264f"><div class="ttname"><a href="structrf__context.html#a584505347366c40e6efa710353d4264f">rf_context::scale_x</a></div><div class="ttdeci">gdouble scale_x</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00359">rdp_plugin.h:359</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_a0c7eab256e1b1fdf84be44e28cddc3de"><div class="ttname"><a href="struct___remmina_plugin_service.html#a0c7eab256e1b1fdf84be44e28cddc3de">_RemminaPluginService::file_get_int</a></div><div class="ttdeci">gint(* file_get_int)(RemminaFile *remminafile, const gchar *setting, gint default_value)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00222">plugin.h:222</a></div></div>
<div class="ttc" id="rdp__event_8c_html_ad8f0d0f1b1b75646523f3b241f124e56"><div class="ttname"><a href="rdp__event_8c.html#ad8f0d0f1b1b75646523f3b241f124e56">remmina_rdp_event_on_key</a></div><div class="ttdeci">static gboolean remmina_rdp_event_on_key(GtkWidget *widget, GdkEventKey *event, RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l00767">rdp_event.c:767</a></div></div>
<div class="ttc" id="rdp__event_8c_html_a40b4fd190055c10d5d2248a6eca5f50f"><div class="ttname"><a href="rdp__event_8c.html#a40b4fd190055c10d5d2248a6eca5f50f">remmina_rdp_event_free_event</a></div><div class="ttdeci">void remmina_rdp_event_free_event(RemminaProtocolWidget *gp, RemminaPluginRdpUiObject *obj)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l01036">rdp_event.c:1036</a></div></div>
<div class="ttc" id="rdp__event_8c_html_ac27328f2796bd021d174c0f4b172c024"><div class="ttname"><a href="rdp__event_8c.html#ac27328f2796bd021d174c0f4b172c024">remmina_rdp_event_on_motion</a></div><div class="ttdeci">static gboolean remmina_rdp_event_on_motion(GtkWidget *widget, GdkEventMotion *event, RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l00580">rdp_event.c:580</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_aaadab3f5fde957f5faa7ee6347bb1c6d"><div class="ttname"><a href="struct___remmina_plugin_service.html#aaadab3f5fde957f5faa7ee6347bb1c6d">_RemminaPluginService::protocol_plugin_update_align</a></div><div class="ttdeci">void(* protocol_plugin_update_align)(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00187">plugin.h:187</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_ab212bed4baf8cba148fadb5773148ad6"><div class="ttname"><a href="struct___remmina_plugin_service.html#ab212bed4baf8cba148fadb5773148ad6">_RemminaPluginService::protocol_plugin_signal_connection_opened</a></div><div class="ttdeci">void(* protocol_plugin_signal_connection_opened)(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00186">plugin.h:186</a></div></div>
<div class="ttc" id="rdp__cliprdr_8c_html_ad4fad618198e7746ea1e4ebd01a9b173"><div class="ttname"><a href="rdp__cliprdr_8c.html#ad4fad618198e7746ea1e4ebd01a9b173">remmina_rdp_event_process_clipboard</a></div><div class="ttdeci">void remmina_rdp_event_process_clipboard(RemminaProtocolWidget *gp, RemminaPluginRdpUiObject *ui)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__cliprdr_8c_source.html#l00914">rdp_cliprdr.c:914</a></div></div>
<div class="ttc" id="structrf__context_html_aa0b949ab1e2f06b7d5efeccc924efaee"><div class="ttname"><a href="structrf__context.html#aa0b949ab1e2f06b7d5efeccc924efaee">rf_context::reconnect_maxattempts</a></div><div class="ttdeci">int reconnect_maxattempts</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00352">rdp_plugin.h:352</a></div></div>
<div class="ttc" id="rdp__event_8c_html_ae0e0d42524cb165cd6d26553c104dbde"><div class="ttname"><a href="rdp__event_8c.html#ae0e0d42524cb165cd6d26553c104dbde">remmina_rdp_ui_event_update_scale</a></div><div class="ttdeci">static void remmina_rdp_ui_event_update_scale(RemminaProtocolWidget *gp, RemminaPluginRdpUiObject *ui)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l01314">rdp_event.c:1314</a></div></div>
<div class="ttc" id="rdp__event_8c_html_a6e3d726d9c6e27d25538c8ae665e8b58"><div class="ttname"><a href="rdp__event_8c.html#a6e3d726d9c6e27d25538c8ae665e8b58">remmina_rdp_event_on_focus_in</a></div><div class="ttdeci">static gboolean remmina_rdp_event_on_focus_in(GtkWidget *widget, GdkEventKey *event, RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l00104">rdp_event.c:104</a></div></div>
<div class="ttc" id="structremmina__plugin__rdp__event_html_a84797e0cdf4484432740a8946325f126"><div class="ttname"><a href="structremmina__plugin__rdp__event.html#a84797e0cdf4484432740a8946325f126">remmina_plugin_rdp_event::type</a></div><div class="ttdeci">RemminaPluginRdpEventType type</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00191">rdp_plugin.h:191</a></div></div>
<div class="ttc" id="structrf__context_html_aa04b5624216d612d134b7439658f8b17"><div class="ttname"><a href="structrf__context.html#aa04b5624216d612d134b7439658f8b17">rf_context::last_x</a></div><div class="ttdeci">UINT16 last_x</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00384">rdp_plugin.h:384</a></div></div>
<div class="ttc" id="rdp__plugin_8h_html_adafbb901615d7fc9d8f31d5dbdae29d7a8c8701fc5ef4ff1196c8d088dd146a5b"><div class="ttname"><a href="rdp__plugin_8h.html#adafbb901615d7fc9d8f31d5dbdae29d7a8c8701fc5ef4ff1196c8d088dd146a5b">REMMINA_RDP_EVENT_TYPE_MOUSE</a></div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00182">rdp_plugin.h:182</a></div></div>
<div class="ttc" id="types_8h_html_aeea5ee1e675368413b6f6ab09883e7deac7786e2cea7d9bf95026069ed774ea20"><div class="ttname"><a href="types_8h.html#aeea5ee1e675368413b6f6ab09883e7deac7786e2cea7d9bf95026069ed774ea20">REMMINA_PROTOCOL_WIDGET_SCALE_MODE_SCALED</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00144">types.h:144</a></div></div>
<div class="ttc" id="rdp__event_8c_html_a2ff2e46de1ad42c9aa8f792d629e0a89"><div class="ttname"><a href="rdp__event_8c.html#a2ff2e46de1ad42c9aa8f792d629e0a89">remmina_rdp_event_update_regions</a></div><div class="ttdeci">void remmina_rdp_event_update_regions(RemminaProtocolWidget *gp, RemminaPluginRdpUiObject *ui)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l00282">rdp_event.c:282</a></div></div>
<div class="ttc" id="rdp__event_8c_html_a35376ff50915de1c14285e6326bc943e"><div class="ttname"><a href="rdp__event_8c.html#a35376ff50915de1c14285e6326bc943e">remmina_rdp_event_delayed_monitor_layout</a></div><div class="ttdeci">static gboolean remmina_rdp_event_delayed_monitor_layout(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l00393">rdp_event.c:393</a></div></div>
<div class="ttc" id="rdp__plugin_8h_html_a1e2313a63a9cfd208ab722cc1e0ee072a5b2f8ce562cd1720b7a985f3a7c15ea7"><div class="ttname"><a href="rdp__plugin_8h.html#a1e2313a63a9cfd208ab722cc1e0ee072a5b2f8ce562cd1720b7a985f3a7c15ea7">REMMINA_RDP_UI_RECONNECT_PROGRESS</a></div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00235">rdp_plugin.h:235</a></div></div>
<div class="ttc" id="rdp__plugin_8h_html_a1e2313a63a9cfd208ab722cc1e0ee072ae312d9684d8fed257ad0a06a80aa806f"><div class="ttname"><a href="rdp__plugin_8h.html#a1e2313a63a9cfd208ab722cc1e0ee072ae312d9684d8fed257ad0a06a80aa806f">REMMINA_RDP_UI_CLIPBOARD</a></div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00238">rdp_plugin.h:238</a></div></div>
<div class="ttc" id="rdp__monitor_8h_html"><div class="ttname"><a href="rdp__monitor_8h.html">rdp_monitor.h</a></div></div>
<div class="ttc" id="remmina__sftp__plugin_8c_html_a9493664f6bdafe3f5b593c3e5e1eacc7"><div class="ttname"><a href="remmina__sftp__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a></div><div class="ttdeci">static RemminaPluginService * remmina_plugin_service</div><div class="ttdef"><b>Definition:</b> <a href="remmina__sftp__plugin_8c_source.html#l00065">remmina_sftp_plugin.c:65</a></div></div>
<div class="ttc" id="structremmina__plugin__rdp__keymap__entry_html_aa63271d75f6dfda81584ddfb7c60b2a1"><div class="ttname"><a href="structremmina__plugin__rdp__keymap__entry.html#aa63271d75f6dfda81584ddfb7c60b2a1">remmina_plugin_rdp_keymap_entry::translated_keycode</a></div><div class="ttdeci">unsigned translated_keycode</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00317">rdp_plugin.h:317</a></div></div>
<div class="ttc" id="structrf__context_html_acee2095e72fb2428c498f62e21800026"><div class="ttname"><a href="structrf__context.html#acee2095e72fb2428c498f62e21800026">rf_context::drawing_area</a></div><div class="ttdeci">GtkWidget * drawing_area</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00356">rdp_plugin.h:356</a></div></div>
<div class="ttc" id="structrf__context_html_aa13bb4f72f3024d81e9051de4bd65ec0"><div class="ttname"><a href="structrf__context.html#aa13bb4f72f3024d81e9051de4bd65ec0">rf_context::cairo_format</a></div><div class="ttdeci">cairo_format_t cairo_format</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00368">rdp_plugin.h:368</a></div></div>
<div class="ttc" id="rdp__event_8c_html_a3a722112276948dbc5823a9adec2e225"><div class="ttname"><a href="rdp__event_8c.html#a3a722112276948dbc5823a9adec2e225">remmina_rdp_event_on_configure</a></div><div class="ttdeci">static gboolean remmina_rdp_event_on_configure(GtkWidget *widget, GdkEventConfigure *event, RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l00499">rdp_event.c:499</a></div></div>
<div class="ttc" id="rdp__event_8c_html_ab5fe43c1b1b77c39f118d2581942eb81"><div class="ttname"><a href="rdp__event_8c.html#ab5fe43c1b1b77c39f118d2581942eb81">remmina_rdp_event_queue_ui_sync_retint</a></div><div class="ttdeci">int remmina_rdp_event_queue_ui_sync_retint(RemminaProtocolWidget *gp, RemminaPluginRdpUiObject *ui)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l01471">rdp_event.c:1471</a></div></div>
<div class="ttc" id="rdp__event_8c_html_af3a991a02d35fb09c85f2e752a5393ca"><div class="ttname"><a href="rdp__event_8c.html#af3a991a02d35fb09c85f2e752a5393ca">remmina_rdp_event_init</a></div><div class="ttdeci">void remmina_rdp_event_init(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l00920">rdp_event.c:920</a></div></div>
<div class="ttc" id="structrf__context_html_ac1f3330674d320c9d0ae408c551be6b8"><div class="ttname"><a href="structrf__context.html#ac1f3330674d320c9d0ae408c551be6b8">rf_context::use_client_keymap</a></div><div class="ttdeci">gboolean use_client_keymap</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00362">rdp_plugin.h:362</a></div></div>
<div class="ttc" id="rdp__event_8c_html_a9d63c3ac635001e62851ec4bc5fb7469"><div class="ttname"><a href="rdp__event_8c.html#a9d63c3ac635001e62851ec4bc5fb7469">remmina_rdp_event_on_scroll</a></div><div class="ttdeci">static gboolean remmina_rdp_event_on_scroll(GtkWidget *widget, GdkEventScroll *event, RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l00677">rdp_event.c:677</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_a860dc4e2fc1479ec1cbdcc53236df9e9"><div class="ttname"><a href="struct___remmina_plugin_service.html#a860dc4e2fc1479ec1cbdcc53236df9e9">_RemminaPluginService::pref_get_value</a></div><div class="ttdeci">gchar *(* pref_get_value)(const gchar *key)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00227">plugin.h:227</a></div></div>
<div class="ttc" id="rdp__event_8c_html_ab7cbdc2f8cf829e2f09ecfa605a92d65"><div class="ttname"><a href="rdp__event_8c.html#ab7cbdc2f8cf829e2f09ecfa605a92d65">remmina_rdp_event_reconnect_progress</a></div><div class="ttdeci">static void remmina_rdp_event_reconnect_progress(RemminaProtocolWidget *gp, RemminaPluginRdpUiObject *ui)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l01193">rdp_event.c:1193</a></div></div>
<div class="ttc" id="struct___remmina_protocol_widget_html"><div class="ttname"><a href="struct___remmina_protocol_widget.html">_RemminaProtocolWidget</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8h_source.html#l00058">remmina_protocol_widget.h:58</a></div></div>
<div class="ttc" id="structrf__context_html_a3712f6b20462e62a6bb87038e5f10d9d"><div class="ttname"><a href="structrf__context.html#a3712f6b20462e62a6bb87038e5f10d9d">rf_context::keymap</a></div><div class="ttdeci">GArray * keymap</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00389">rdp_plugin.h:389</a></div></div>
<div class="ttc" id="structrf__context_html_a17882b5983101e3053c7e0dc494d44a1"><div class="ttname"><a href="structrf__context.html#a17882b5983101e3053c7e0dc494d44a1">rf_context::last_y</a></div><div class="ttdeci">UINT16 last_y</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00385">rdp_plugin.h:385</a></div></div>
<div class="ttc" id="structremmina__plugin__rdp__keymap__entry_html_a20d8c7c462c3cb173e3baedbc19a8a88"><div class="ttname"><a href="structremmina__plugin__rdp__keymap__entry.html#a20d8c7c462c3cb173e3baedbc19a8a88">remmina_plugin_rdp_keymap_entry::orig_keycode</a></div><div class="ttdeci">unsigned orig_keycode</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00316">rdp_plugin.h:316</a></div></div>
<div class="ttc" id="rdp__event_8c_html_a080ab4a0a8f592bb5484202175beaaa5"><div class="ttname"><a href="rdp__event_8c.html#a080ab4a0a8f592bb5484202175beaaa5">remmina_rdp_event_scale_area</a></div><div class="ttdeci">static void remmina_rdp_event_scale_area(RemminaProtocolWidget *gp, gint *x, gint *y, gint *w, gint *h)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l00237">rdp_event.c:237</a></div></div>
<div class="ttc" id="structrf__pointer_html"><div class="ttname"><a href="structrf__pointer.html">rf_pointer</a></div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00156">rdp_plugin.h:156</a></div></div>
<div class="ttc" id="rdp__event_8c_html_ae445fd0a84c7c9414a177a69c86cf325"><div class="ttname"><a href="rdp__event_8c.html#ae445fd0a84c7c9414a177a69c86cf325">remmina_rdp_event_queue_ui_async</a></div><div class="ttdeci">void remmina_rdp_event_queue_ui_async(RemminaProtocolWidget *gp, RemminaPluginRdpUiObject *ui)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l01465">rdp_event.c:1465</a></div></div>
<div class="ttc" id="rdp__event_8c_html_a0caf4ffb4011d001301ea10f2c3f75e6"><div class="ttname"><a href="rdp__event_8c.html#a0caf4ffb4011d001301ea10f2c3f75e6">remmina_rdp_event_on_button</a></div><div class="ttdeci">static gboolean remmina_rdp_event_on_button(GtkWidget *widget, GdkEventButton *event, RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l00606">rdp_event.c:606</a></div></div>
<div class="ttc" id="structremmina__plugin__rdp__event_html_a18cb50afaa8b9df1759f87899892fdb6"><div class="ttname"><a href="structremmina__plugin__rdp__event.html#a18cb50afaa8b9df1759f87899892fdb6">remmina_plugin_rdp_event::key_event</a></div><div class="ttdeci">struct remmina_plugin_rdp_event::@42::@44 key_event</div></div>
<div class="ttc" id="rdp__plugin_8h_html_a4861d015f803612c279f463095cb97eda620780f23115c72eee301705786a3232"><div class="ttname"><a href="rdp__plugin_8h.html#a4861d015f803612c279f463095cb97eda620780f23115c72eee301705786a3232">REMMINA_RDP_POINTER_NEW</a></div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00249">rdp_plugin.h:249</a></div></div>
<div class="ttc" id="structremmina__plugin__rdp__event_html_a72cd3fa2cc46eb03de7f68d63b2646b2"><div class="ttname"><a href="structremmina__plugin__rdp__event.html#a72cd3fa2cc46eb03de7f68d63b2646b2">remmina_plugin_rdp_event::clipboard_formatlist</a></div><div class="ttdeci">struct remmina_plugin_rdp_event::@42::@46 clipboard_formatlist</div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_aa159850f20499e5bc1067f533d2fa820"><div class="ttname"><a href="struct___remmina_plugin_service.html#aa159850f20499e5bc1067f533d2fa820">_RemminaPluginService::protocol_plugin_get_height</a></div><div class="ttdeci">gint(* protocol_plugin_get_height)(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00170">plugin.h:170</a></div></div>
<div class="ttc" id="rdp__event_8c_html_ac7c8d626470553c1659312697811dbfe"><div class="ttname"><a href="rdp__event_8c.html#ac7c8d626470553c1659312697811dbfe">remmina_rdp_event_send_delayed_monitor_layout</a></div><div class="ttdeci">void remmina_rdp_event_send_delayed_monitor_layout(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l00484">rdp_event.c:484</a></div></div>
<div class="ttc" id="structrf__context_html_a5d119b1f108fe84c74e6484d48c2a565"><div class="ttname"><a href="structrf__context.html#a5d119b1f108fe84c74e6484d48c2a565">rf_context::event_queue</a></div><div class="ttdeci">GAsyncQueue * event_queue</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00381">rdp_plugin.h:381</a></div></div>
<div class="ttc" id="rdp__event_8c_html_a113ce593d4a96413b9330c471ee51554"><div class="ttname"><a href="rdp__event_8c.html#a113ce593d4a96413b9330c471ee51554">remmina_rdp_event_release_all_keys</a></div><div class="ttdeci">static void remmina_rdp_event_release_all_keys(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l00174">rdp_event.c:174</a></div></div>
<div class="ttc" id="rdp__cliprdr_8c_html_accb7cad54767b8f658b8ea438690ef4f"><div class="ttname"><a href="rdp__cliprdr_8c.html#accb7cad54767b8f658b8ea438690ef4f">remmina_rdp_cliprdr_get_client_format_list</a></div><div class="ttdeci">CLIPRDR_FORMAT_LIST * remmina_rdp_cliprdr_get_client_format_list(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__cliprdr_8c_source.html#l00709">rdp_cliprdr.c:709</a></div></div>
<div class="ttc" id="structremmina__plugin__rdp__ui__object_html_aca09eff5589ea5440e4ecff99879a509"><div class="ttname"><a href="structremmina__plugin__rdp__ui__object.html#aca09eff5589ea5440e4ecff99879a509">remmina_plugin_rdp_ui_object::sync_wait_cond</a></div><div class="ttdeci">pthread_cond_t sync_wait_cond</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00271">rdp_plugin.h:271</a></div></div>
<div class="ttc" id="structrf__context_html_a72d2a3d60347327237692947df93aea7"><div class="ttname"><a href="structrf__context.html#a72d2a3d60347327237692947df93aea7">rf_context::clipboard</a></div><div class="ttdeci">rfClipboard clipboard</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00387">rdp_plugin.h:387</a></div></div>
<div class="ttc" id="rdp__event_8c_html_a4eeb2bd828f9fae2c549f3ef8a1e20c0"><div class="ttname"><a href="rdp__event_8c.html#a4eeb2bd828f9fae2c549f3ef8a1e20c0">remmina_rdp_event_init_keymap</a></div><div class="ttdeci">static void remmina_rdp_event_init_keymap(rfContext *rfi, const gchar *strmap)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l00733">rdp_event.c:733</a></div></div>
<div class="ttc" id="structrf__context_html_a522c742a333cf0603dfa7d06a7376669"><div class="ttname"><a href="structrf__context.html#a522c742a333cf0603dfa7d06a7376669">rf_context::event_handle</a></div><div class="ttdeci">HANDLE event_handle</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00383">rdp_plugin.h:383</a></div></div>
<div class="ttc" id="rdp__event_8c_html_afe3b6a9e7d9319bca7021ddd29d39332"><div class="ttname"><a href="rdp__event_8c.html#afe3b6a9e7d9319bca7021ddd29d39332">remmina_rdp_event_translate_pos</a></div><div class="ttdeci">static void remmina_rdp_event_translate_pos(RemminaProtocolWidget *gp, int ix, int iy, UINT16 *ox, UINT16 *oy)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l00518">rdp_event.c:518</a></div></div>
<div class="ttc" id="rdp__event_8c_html_acd5f1bd57553006fdbc60d62af433e31"><div class="ttname"><a href="rdp__event_8c.html#acd5f1bd57553006fdbc60d62af433e31">remmina_rdp_ui_event_destroy_cairo_surface</a></div><div class="ttdeci">static void remmina_rdp_ui_event_destroy_cairo_surface(RemminaProtocolWidget *gp, RemminaPluginRdpUiObject *ui)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l01330">rdp_event.c:1330</a></div></div>
<div class="ttc" id="rdp__event_8c_html_a65eef99dc99f77be815a5da804ed94fc"><div class="ttname"><a href="rdp__event_8c.html#a65eef99dc99f77be815a5da804ed94fc">remmina_rdp_event_uninit</a></div><div class="ttdeci">void remmina_rdp_event_uninit(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l01052">rdp_event.c:1052</a></div></div>
<div class="ttc" id="rdp__plugin_8h_html_adafbb901615d7fc9d8f31d5dbdae29d7a1973a1fe40811ab9a21bc77c23c42a05"><div class="ttname"><a href="rdp__plugin_8h.html#adafbb901615d7fc9d8f31d5dbdae29d7a1973a1fe40811ab9a21bc77c23c42a05">REMMINA_RDP_EVENT_TYPE_SEND_MONITOR_LAYOUT</a></div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00186">rdp_plugin.h:186</a></div></div>
<div class="ttc" id="rdp__plugin_8h_html_adafbb901615d7fc9d8f31d5dbdae29d7ab15f261f1918633711921198fea0029f"><div class="ttname"><a href="rdp__plugin_8h.html#adafbb901615d7fc9d8f31d5dbdae29d7ab15f261f1918633711921198fea0029f">REMMINA_RDP_EVENT_TYPE_SCANCODE_UNICODE</a></div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00181">rdp_plugin.h:181</a></div></div>
<div class="ttc" id="rdp__event_8c_html_af113a6f49730a1ec27d198ed3c2ccde6"><div class="ttname"><a href="rdp__event_8c.html#af113a6f49730a1ec27d198ed3c2ccde6">remmina_rdp_mouse_jitter</a></div><div class="ttdeci">void remmina_rdp_mouse_jitter(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l00562">rdp_event.c:562</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_a1409dcc143ddc35de86b792df095cfc4"><div class="ttname"><a href="struct___remmina_plugin_service.html#a1409dcc143ddc35de86b792df095cfc4">_RemminaPluginService::protocol_plugin_get_file</a></div><div class="ttdeci">RemminaFile *(* protocol_plugin_get_file)(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00178">plugin.h:178</a></div></div>
<div class="ttc" id="structremmina__plugin__rdp__ui__object_html_a66cdf13076e9a6b0c8d4e73a2e565c60"><div class="ttname"><a href="structremmina__plugin__rdp__ui__object.html#a66cdf13076e9a6b0c8d4e73a2e565c60">remmina_plugin_rdp_ui_object::sync</a></div><div class="ttdeci">gboolean sync</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00268">rdp_plugin.h:268</a></div></div>
<div class="ttc" id="structrf__context_html_aafce196b029d2578151275acd07ccb82"><div class="ttname"><a href="structrf__context.html#aafce196b029d2578151275acd07ccb82">rf_context::object_table</a></div><div class="ttdeci">GHashTable * object_table</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00374">rdp_plugin.h:374</a></div></div>
<div class="ttc" id="rdp__event_8c_html_a2bd3d6559182ac1132927435ba9abc6a"><div class="ttname"><a href="rdp__event_8c.html#a2bd3d6559182ac1132927435ba9abc6a">remmina_rdp_event_on_clipboard</a></div><div class="ttdeci">gboolean remmina_rdp_event_on_clipboard(GtkClipboard *gtkClipboard, GdkEvent *event, RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l00881">rdp_event.c:881</a></div></div>
<div class="ttc" id="rdp__event_8c_html_a20d5fac8955f4f813759ca5c32078b7c"><div class="ttname"><a href="rdp__event_8c.html#a20d5fac8955f4f813759ca5c32078b7c">remmina_rdp_event_reverse_translate_pos_reverse</a></div><div class="ttdeci">static void remmina_rdp_event_reverse_translate_pos_reverse(RemminaProtocolWidget *gp, int ix, int iy, int *ox, int *oy)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l00540">rdp_event.c:540</a></div></div>
<div class="ttc" id="rdp__plugin_8h_html_a1e2313a63a9cfd208ab722cc1e0ee072ad3ced07ddeda0100b59ca9c8af47bbe9"><div class="ttname"><a href="rdp__plugin_8h.html#a1e2313a63a9cfd208ab722cc1e0ee072ad3ced07ddeda0100b59ca9c8af47bbe9">REMMINA_RDP_UI_CONNECTED</a></div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00234">rdp_plugin.h:234</a></div></div>
<div class="ttc" id="rdp__event_8c_html_a6929ce2effcc3cf2be6d5ec8b19d5466"><div class="ttname"><a href="rdp__event_8c.html#a6929ce2effcc3cf2be6d5ec8b19d5466">remmina_rdp_event_process_ui_event</a></div><div class="ttdeci">static void remmina_rdp_event_process_ui_event(RemminaProtocolWidget *gp, RemminaPluginRdpUiObject *ui)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l01353">rdp_event.c:1353</a></div></div>
<div class="ttc" id="rdp__event_8c_html_ab6e9a485532ccf8c22005dd7a7137fd2"><div class="ttname"><a href="rdp__event_8c.html#ab6e9a485532ccf8c22005dd7a7137fd2">keypress_list_add</a></div><div class="ttdeci">static void keypress_list_add(RemminaProtocolWidget *gp, RemminaPluginRdpEvent rdp_event)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l00222">rdp_event.c:222</a></div></div>
<div class="ttc" id="structrf__context_html_a3c2ffa55ba97bc70324d61b8cc838e73"><div class="ttname"><a href="structrf__context.html#a3c2ffa55ba97bc70324d61b8cc838e73">rf_context::connected</a></div><div class="ttdeci">gboolean connected</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00344">rdp_plugin.h:344</a></div></div>
<div class="ttc" id="structremmina__plugin__rdp__ui__object_html_a9f6aba25030b6859fbd57bee840feeee"><div class="ttname"><a href="structremmina__plugin__rdp__ui__object.html#a9f6aba25030b6859fbd57bee840feeee">remmina_plugin_rdp_ui_object::retval</a></div><div class="ttdeci">int retval</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00310">rdp_plugin.h:310</a></div></div>
<div class="ttc" id="structrf__context_html_a96c4689f6bc062482536038cb3b24e78"><div class="ttname"><a href="structrf__context.html#a96c4689f6bc062482536038cb3b24e78">rf_context::scale</a></div><div class="ttdeci">RemminaScaleMode scale</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00331">rdp_plugin.h:331</a></div></div>
<div class="ttc" id="structrf__context_html_a3a32bbd599b6684a3c41db9281863362"><div class="ttname"><a href="structrf__context.html#a3a32bbd599b6684a3c41db9281863362">rf_context::instance</a></div><div class="ttdeci">freerdp * instance</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00328">rdp_plugin.h:328</a></div></div>
<div class="ttc" id="rdp__settings_8h_html"><div class="ttname"><a href="rdp__settings_8h.html">rdp_settings.h</a></div></div>
<div class="ttc" id="structrf__context_html_a660a5c5ea7256ab6a6486f3e831a9174"><div class="ttname"><a href="structrf__context.html#a660a5c5ea7256ab6a6486f3e831a9174">rf_context::dispcontext</a></div><div class="ttdeci">DispClientContext * dispcontext</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00336">rdp_plugin.h:336</a></div></div>
<div class="ttc" id="rdp__event_8c_html_a34c7d3a1bb411e84d3b4e30fcccc9cd8"><div class="ttname"><a href="rdp__event_8c.html#a34c7d3a1bb411e84d3b4e30fcccc9cd8">remmina_rdp_event_set_pointer_position</a></div><div class="ttdeci">static BOOL remmina_rdp_event_set_pointer_position(RemminaProtocolWidget *gp, gint x, gint y)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l01239">rdp_event.c:1239</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_ac3fc04c8c7b20c35122e2786d9e8fc34"><div class="ttname"><a href="struct___remmina_plugin_service.html#ac3fc04c8c7b20c35122e2786d9e8fc34">_RemminaPluginService::protocol_plugin_register_hostkey</a></div><div class="ttdeci">void(* protocol_plugin_register_hostkey)(RemminaProtocolWidget *gp, GtkWidget *widget)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00180">plugin.h:180</a></div></div>
<div class="ttc" id="rdp__event_8c_html_abe98674433c473136ccd28aab85a7748"><div class="ttname"><a href="rdp__event_8c.html#abe98674433c473136ccd28aab85a7748">remmina_rdp_event_connected</a></div><div class="ttdeci">static void remmina_rdp_event_connected(RemminaProtocolWidget *gp, RemminaPluginRdpUiObject *ui)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l01172">rdp_event.c:1172</a></div></div>
<div class="ttc" id="structrf__context_html_a335c40ccb90ae472525b203c832e7701"><div class="ttname"><a href="structrf__context.html#a335c40ccb90ae472525b203c832e7701">rf_context::pressed_keys</a></div><div class="ttdeci">GArray * pressed_keys</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00380">rdp_plugin.h:380</a></div></div>
<div class="ttc" id="rdp__event_8c_html_a64ce0c66bb4cb6ddaee263ce8563f497"><div class="ttname"><a href="rdp__event_8c.html#a64ce0c66bb4cb6ddaee263ce8563f497">remmina_rdp_event_update_scale</a></div><div class="ttdeci">void remmina_rdp_event_update_scale(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l01126">rdp_event.c:1126</a></div></div>
<div class="ttc" id="structrf__context_html_a28d215e4ddb5decc543c3c6578df5e3d"><div class="ttname"><a href="structrf__context.html#a28d215e4ddb5decc543c3c6578df5e3d">rf_context::settings</a></div><div class="ttdeci">rdpSettings * settings</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00327">rdp_plugin.h:327</a></div></div>
<div class="ttc" id="structrf__context_html_a76ff7add3727e4a8b82f7b4615f09169"><div class="ttname"><a href="structrf__context.html#a76ff7add3727e4a8b82f7b4615f09169">rf_context::scale_height</a></div><div class="ttdeci">gint scale_height</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00358">rdp_plugin.h:358</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_a258d391bcfff1409d27bee0743aec6c1"><div class="ttname"><a href="struct___remmina_plugin_service.html#a258d391bcfff1409d27bee0743aec6c1">_RemminaPluginService::protocol_plugin_set_height</a></div><div class="ttdeci">void(* protocol_plugin_set_height)(RemminaProtocolWidget *gp, gint height)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00171">plugin.h:171</a></div></div>
<div class="ttc" id="structremmina__plugin__rdp__keymap__entry_html"><div class="ttname"><a href="structremmina__plugin__rdp__keymap__entry.html">remmina_plugin_rdp_keymap_entry</a></div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00315">rdp_plugin.h:315</a></div></div>
<div class="ttc" id="rdp__event_8c_html_a4da10c12b28edc28403766994d6ef29c"><div class="ttname"><a href="rdp__event_8c.html#a4da10c12b28edc28403766994d6ef29c">remmina_rdp_event_unfocus</a></div><div class="ttdeci">void remmina_rdp_event_unfocus(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l01320">rdp_event.c:1320</a></div></div>
<div class="ttc" id="rdp__cliprdr_8h_html"><div class="ttname"><a href="rdp__cliprdr_8h.html">rdp_cliprdr.h</a></div></div>
<div class="ttc" id="structremmina__plugin__rdp__ui__object_html_a4712a1768972b9bf133a14ab8449e3d9"><div class="ttname"><a href="structremmina__plugin__rdp__ui__object.html#a4712a1768972b9bf133a14ab8449e3d9">remmina_plugin_rdp_ui_object::nocodec</a></div><div class="ttdeci">struct remmina_plugin_rdp_ui_object::@50::@55 nocodec</div></div>
<div class="ttc" id="rdp__plugin_8h_html_adafbb901615d7fc9d8f31d5dbdae29d7ae248ff32977c650df357c079f9d8b6e2"><div class="ttname"><a href="rdp__plugin_8h.html#adafbb901615d7fc9d8f31d5dbdae29d7ae248ff32977c650df357c079f9d8b6e2">REMMINA_RDP_EVENT_TYPE_SCANCODE</a></div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00180">rdp_plugin.h:180</a></div></div>
<div class="ttc" id="structremmina__plugin__rdp__ui__object_html_a87d27be6d29a42e284192bad1a6f1a32"><div class="ttname"><a href="structremmina__plugin__rdp__ui__object.html#a87d27be6d29a42e284192bad1a6f1a32">remmina_plugin_rdp_ui_object::event</a></div><div class="ttdeci">struct remmina_plugin_rdp_ui_object::@50::@57 event</div></div>
<div class="ttc" id="rdp__monitor_8c_html_aa5969439ce0342765baea33fcf396940"><div class="ttname"><a href="rdp__monitor_8c.html#aa5969439ce0342765baea33fcf396940">remmina_rdp_monitor_get</a></div><div class="ttdeci">void remmina_rdp_monitor_get(rfContext *rfi, gchar **monitorids, guint32 *maxwidth, guint32 *maxheight)</div><div class="ttdoc">Set the MonitorIDs, the maxwidth and maxheight. </div><div class="ttdef"><b>Definition:</b> <a href="rdp__monitor_8c_source.html#l00068">rdp_monitor.c:68</a></div></div>
<div class="ttc" id="rdp__event_8c_html_ad446d6471bddba97f8bfcee8c51e4580"><div class="ttname"><a href="rdp__event_8c.html#ad446d6471bddba97f8bfcee8c51e4580">remmina_rdp_event_event_push</a></div><div class="ttdeci">void remmina_rdp_event_event_push(RemminaProtocolWidget *gp, const RemminaPluginRdpEvent *e)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l00150">rdp_event.c:150</a></div></div>
<div class="ttc" id="rdp__event_8h_html"><div class="ttname"><a href="rdp__event_8h.html">rdp_event.h</a></div></div>
<div class="ttc" id="rdp__plugin_8h_html_a4861d015f803612c279f463095cb97edac1059fb9b7718e2b4b5a86f7b3f92d56"><div class="ttname"><a href="rdp__plugin_8h.html#a4861d015f803612c279f463095cb97edac1059fb9b7718e2b4b5a86f7b3f92d56">REMMINA_RDP_POINTER_DEFAULT</a></div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00253">rdp_plugin.h:253</a></div></div>
<div class="ttc" id="rdp__event_8c_html_a064c56982a401aff33a8c723eb157016"><div class="ttname"><a href="rdp__event_8c.html#a064c56982a401aff33a8c723eb157016">remmina_rdp_event_cursor</a></div><div class="ttdeci">static void remmina_rdp_event_cursor(RemminaProtocolWidget *gp, RemminaPluginRdpUiObject *ui)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l01277">rdp_event.c:1277</a></div></div>
<div class="ttc" id="rdp__event_8c_html_a09271b787fc086f05a8a6e7c3282d6aa"><div class="ttname"><a href="rdp__event_8c.html#a09271b787fc086f05a8a6e7c3282d6aa">remmina_rdp_event_on_map</a></div><div class="ttdeci">gboolean remmina_rdp_event_on_map(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l00052">rdp_event.c:52</a></div></div>
<div class="ttc" id="structremmina__plugin__rdp__ui__object_html_a600a961eb4d48146721b10581145c20c"><div class="ttname"><a href="structremmina__plugin__rdp__ui__object.html#a600a961eb4d48146721b10581145c20c">remmina_plugin_rdp_ui_object::pos</a></div><div class="ttdeci">struct remmina_plugin_rdp_ui_object::@50::@58 pos</div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_a997a36825f2338b8e06bcd59becef61b"><div class="ttname"><a href="struct___remmina_plugin_service.html#a997a36825f2338b8e06bcd59becef61b">_RemminaPluginService::is_main_thread</a></div><div class="ttdeci">gboolean(* is_main_thread)(void)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00250">plugin.h:250</a></div></div>
<div class="ttc" id="rdp__event_8c_html_acafb03695febd86fc16d64545d74ef9c"><div class="ttname"><a href="rdp__event_8c.html#acafb03695febd86fc16d64545d74ef9c">remmina_rdp_event_on_draw</a></div><div class="ttdeci">static gboolean remmina_rdp_event_on_draw(GtkWidget *widget, cairo_t *context, RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="rdp__event_8c_source.html#l00344">rdp_event.c:344</a></div></div>
<div class="ttc" id="structrf__context_html_aedf6fcd090e6ba788956565ce312ab70"><div class="ttname"><a href="structrf__context.html#aedf6fcd090e6ba788956565ce312ab70">rf_context::scale_width</a></div><div class="ttdeci">gint scale_width</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00357">rdp_plugin.h:357</a></div></div>
<div class="ttc" id="structrf__context_html_a3836f3c9bc575a05d5b35dbdb3186329"><div class="ttname"><a href="structrf__context.html#a3836f3c9bc575a05d5b35dbdb3186329">rf_context::ui_queue_mutex</a></div><div class="ttdeci">pthread_mutex_t ui_queue_mutex</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00377">rdp_plugin.h:377</a></div></div>
<div class="ttc" id="structremmina__plugin__rdp__ui__object_html_a46d939889fba73c1360f924efaa09262"><div class="ttname"><a href="structremmina__plugin__rdp__ui__object.html#a46d939889fba73c1360f924efaa09262">remmina_plugin_rdp_ui_object::type</a></div><div class="ttdeci">RemminaPluginRdpUiType type</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00267">rdp_plugin.h:267</a></div></div>
<div class="ttc" id="rdp__plugin_8h_html_a70cc17b1d3603d036f962a0ae8496b35a5bec41fd19576fc5c3e397366461dfe4"><div class="ttname"><a href="rdp__plugin_8h.html#a70cc17b1d3603d036f962a0ae8496b35a5bec41fd19576fc5c3e397366461dfe4">REMMINA_RDP_UI_EVENT_UPDATE_SCALE</a></div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00258">rdp_plugin.h:258</a></div></div>
<div class="ttc" id="rdp__plugin_8h_html_a1e2313a63a9cfd208ab722cc1e0ee072acd86c5f1b34b0d7168c94892cfd2cb9e"><div class="ttname"><a href="rdp__plugin_8h.html#a1e2313a63a9cfd208ab722cc1e0ee072acd86c5f1b34b0d7168c94892cfd2cb9e">REMMINA_RDP_UI_UPDATE_REGIONS</a></div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00233">rdp_plugin.h:233</a></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_38c8d24aef3972a7f87b834274e76e31.html">plugins</a></li><li class="navelem"><a class="el" href="dir_059c6fae417c75ea7479b164feca3607.html">rdp</a></li><li class="navelem"><a class="el" href="rdp__event_8c.html">rdp_event.c</a></li>
    <li class="footer">Generated by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
  </ul>
</div>
</body>
</html>