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

vnc__plugin_8c_source.html « public - gitlab.com/Remmina/remminadoc.gitlab.io.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: b98701d48e1b64a49471b8084039ae16b6354f7e (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
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
<!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: vnc_plugin.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('vnc__plugin_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">vnc_plugin.c</div>  </div>
</div><!--header-->
<div class="contents">
<a href="vnc__plugin_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-2011 Vic Lee</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Copyright (C) 2014-2015 Antenore Gatta, Fabio Castelli, Giovanni Panozzo</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * Copyright (C) 2016-2022 Antenore Gatta, Giovanni Panozzo</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * Copyright (C) 2022-2023 Antenore Gatta, Giovanni Panozzo, Hiroyuki Tanaka</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</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="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> * GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> * You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="comment"> * along with this program; if not, write to the Free Software</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="comment"> * Foundation, Inc., 51 Franklin Street, Fifth Floor,</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="comment"> * Boston, MA  02110-1301, USA.</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="comment"> *  In addition, as a special exception, the copyright holders give</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="comment"> *  permission to link the code of portions of this program with the</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="comment"> *  OpenSSL library under certain conditions as described in each</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="comment"> *  individual source file, and distribute linked combinations</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="comment"> *  including the two.</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="comment"> *  You must obey the GNU General Public License in all respects</span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="comment"> *  for all of the code used other than OpenSSL. *  If you modify</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="comment"> *  file(s) with this exception, you may extend this exception to your</span></div><div class="line"><a name="l00031"></a><span class="lineno">   31</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="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment"> *  do not wish to do so, delete this exception statement from your</span></div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment"> *  version. *  If you delete this exception statement from all source</span></div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment"> *  files in the program, then also delete it here.</span></div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="preprocessor">#include &lt;gmodule.h&gt;</span></div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="vnc__plugin_8h.html">vnc_plugin.h</a>&quot;</span></div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="preprocessor">#include &lt;rfb/rfbclient.h&gt;</span></div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="preprocessor">#define REMMINA_PLUGIN_VNC_FEATURE_PREF_QUALITY            1</span></div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="preprocessor">#define REMMINA_PLUGIN_VNC_FEATURE_PREF_VIEWONLY           2</span></div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="preprocessor">#define REMMINA_PLUGIN_VNC_FEATURE_PREF_DISABLESERVERINPUT 3</span></div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="preprocessor">#define REMMINA_PLUGIN_VNC_FEATURE_TOOL_REFRESH            4</span></div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="preprocessor">#define REMMINA_PLUGIN_VNC_FEATURE_TOOL_CHAT               5</span></div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="preprocessor">#define REMMINA_PLUGIN_VNC_FEATURE_SCALE                   6</span></div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="preprocessor">#define REMMINA_PLUGIN_VNC_FEATURE_UNFOCUS                 7</span></div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="preprocessor">#define REMMINA_PLUGIN_VNC_FEATURE_TOOL_SENDCTRLALTDEL     8</span></div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="preprocessor">#define REMMINA_PLUGIN_VNC_FEATURE_PREF_COLOR              9</span></div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="preprocessor">#define REMMINA_PLUGIN_VNC_FEATURE_DYNRESUPDATE            10</span></div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="preprocessor">#define VNC_DEFAULT_PORT 5900</span></div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="preprocessor">#define GET_PLUGIN_DATA(gp) (RemminaPluginVncData *)g_object_get_data(G_OBJECT(gp), &quot;plugin-data&quot;)</span></div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;</div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">   57</a></span>&#160;<span class="keyword">static</span> <a class="code" href="struct___remmina_plugin_service.html">RemminaPluginService</a> *<a class="code" href="vnc__plugin_8c.html#a9493664f6bdafe3f5b593c3e5e1eacc7">remmina_plugin_service</a> = NULL;</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#aeeb18a588e3d003bf3adcaa6eb1697ff">   59</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="vnc__plugin_8c.html#aeeb18a588e3d003bf3adcaa6eb1697ff">dot_cursor_x_hot</a> = 2;</div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a01923764292c3ab42dbcb43a9bb438a5">   60</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="vnc__plugin_8c.html#a01923764292c3ab42dbcb43a9bb438a5">dot_cursor_y_hot</a> = 2;</div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#ade7041eba0e97ab146e2bc418982f100">   61</a></span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> gchar *<a class="code" href="vnc__plugin_8c.html#ade7041eba0e97ab146e2bc418982f100">dot_cursor_xpm</a>[] =</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;{ <span class="stringliteral">&quot;5 5 3 1&quot;</span>, <span class="stringliteral">&quot;  c None&quot;</span>, <span class="stringliteral">&quot;. c #000000&quot;</span>, <span class="stringliteral">&quot;+  c #FFFFFF&quot;</span>, <span class="stringliteral">&quot; ... &quot;</span>, <span class="stringliteral">&quot;.+++.&quot;</span>, <span class="stringliteral">&quot;.+ +.&quot;</span>, <span class="stringliteral">&quot;.+++.&quot;</span>, <span class="stringliteral">&quot; ... &quot;</span> };</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;</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="preprocessor">#define LOCK_BUFFER(t)      if (t) { CANCEL_DEFER } pthread_mutex_lock(&amp;gpdata-&gt;buffer_mutex);</span></div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;<span class="preprocessor">#define UNLOCK_BUFFER(t)    pthread_mutex_unlock(&amp;gpdata-&gt;buffer_mutex); if (t) { CANCEL_ASYNC }</span></div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;</div><div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="structon_main_thread__cb__data.html">   68</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structon_main_thread__cb__data.html">onMainThread_cb_data</a> {</div><div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="structon_main_thread__cb__data.html#a2990bfbbb713d7d300b121327dc179bdaf505d0b00d46515c4ab37b643567af41">   69</a></span>&#160;    <span class="keyword">enum</span> { <a class="code" href="structon_main_thread__cb__data.html#a2990bfbbb713d7d300b121327dc179bdaf505d0b00d46515c4ab37b643567af41">FUNC_UPDATE_SCALE</a> } <a class="code" href="structon_main_thread__cb__data.html#ab5a747d3d76631e059d736ef286a6c38">func</a>;</div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="structon_main_thread__cb__data.html#af0d50114cec8cfdd7692a39c1fdba783">   70</a></span>&#160;    GtkWidget *     <a class="code" href="structon_main_thread__cb__data.html#af0d50114cec8cfdd7692a39c1fdba783">widget</a>;</div><div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="structon_main_thread__cb__data.html#aec2ab8de1fa3f948ada7bd70ce2b353f">   71</a></span>&#160;    gint            <a class="code" href="structon_main_thread__cb__data.html#a92fd0bfc7715dcb8237a002850701222">x</a>, <a class="code" href="structon_main_thread__cb__data.html#aec2ab8de1fa3f948ada7bd70ce2b353f">y</a>, <a class="code" href="structon_main_thread__cb__data.html#a8bf0f89b3c961ac28ccae9a9e1060db4">width</a>, <a class="code" href="structon_main_thread__cb__data.html#aa01cccfd573952ec0cd5df823e2d8f74">height</a>;</div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">   72</a></span>&#160;    <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> * <a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>;</div><div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="structon_main_thread__cb__data.html#af55aa025154991f8c762e93074eec242">   73</a></span>&#160;    gboolean        <a class="code" href="structon_main_thread__cb__data.html#af55aa025154991f8c762e93074eec242">scale</a>;</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;    <span class="comment">/* Mutex for thread synchronization */</span></div><div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="structon_main_thread__cb__data.html#acd2e5f24279a00e0d426d67604dc8fbc">   76</a></span>&#160;    pthread_mutex_t     <a class="code" href="structon_main_thread__cb__data.html#acd2e5f24279a00e0d426d67604dc8fbc">mu</a>;</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;    <span class="comment">/* Flag to catch cancellations */</span></div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="structon_main_thread__cb__data.html#a75eab61445fbabacaa34f95e2437ea75">   78</a></span>&#160;    gboolean        <a class="code" href="structon_main_thread__cb__data.html#a75eab61445fbabacaa34f95e2437ea75">cancelled</a>;</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;</div><div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a9ba8e968998b64b3832e484a2ca7dfc1">   81</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="vnc__plugin_8c.html#a9ba8e968998b64b3832e484a2ca7dfc1">onMainThread_cb</a>(<span class="keyword">struct</span> <a class="code" href="structon_main_thread__cb__data.html">onMainThread_cb_data</a> *d)</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;    TRACE_CALL(__func__);</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;    <span class="keywordflow">if</span> (!d-&gt;<a class="code" href="structon_main_thread__cb__data.html#a75eab61445fbabacaa34f95e2437ea75">cancelled</a>) {</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;        <span class="keywordflow">switch</span> (d-&gt;<a class="code" href="structon_main_thread__cb__data.html#ab5a747d3d76631e059d736ef286a6c38">func</a>) {</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="structon_main_thread__cb__data.html#a2990bfbbb713d7d300b121327dc179bdaf505d0b00d46515c4ab37b643567af41">FUNC_UPDATE_SCALE</a>:</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;            <a class="code" href="vnc__plugin_8c.html#a1f57bda271e77f086885101650e8d82c">remmina_plugin_vnc_update_scale</a>(d-&gt;<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>, d-&gt;<a class="code" href="structon_main_thread__cb__data.html#af55aa025154991f8c762e93074eec242">scale</a>);</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;            <span class="keywordflow">break</span>;</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;        pthread_mutex_unlock(&amp;d-&gt;<a class="code" href="structon_main_thread__cb__data.html#acd2e5f24279a00e0d426d67604dc8fbc">mu</a>);</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;        <span class="comment">/* thread has been cancelled, so we must free d memory here */</span></div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;        g_free(d);</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;    }</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;    <span class="keywordflow">return</span> G_SOURCE_REMOVE;</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;</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a5dea604d34a804e23a5cd8a6683d9e49">   99</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="vnc__plugin_8c.html#a5dea604d34a804e23a5cd8a6683d9e49">onMainThread_cleanup_handler</a>(gpointer data)</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;    TRACE_CALL(__func__);</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;    <span class="keyword">struct </span><a class="code" href="structon_main_thread__cb__data.html">onMainThread_cb_data</a> *d = data;</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">  104</span>&#160;    d-&gt;<a class="code" href="structon_main_thread__cb__data.html#a75eab61445fbabacaa34f95e2437ea75">cancelled</a> = TRUE;</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;</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"><a class="line" href="vnc__plugin_8c.html#a390e3b371156197feb518b737a31cc53">  108</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="vnc__plugin_8c.html#a390e3b371156197feb518b737a31cc53">onMainThread_schedule_callback_and_wait</a>(<span class="keyword">struct</span> <a class="code" href="structon_main_thread__cb__data.html">onMainThread_cb_data</a> *d)</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;{</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;    d-&gt;<a class="code" href="structon_main_thread__cb__data.html#a75eab61445fbabacaa34f95e2437ea75">cancelled</a> = FALSE;</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;    pthread_cleanup_push(<a class="code" href="vnc__plugin_8c.html#a5dea604d34a804e23a5cd8a6683d9e49">onMainThread_cleanup_handler</a>, d);</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;    pthread_mutex_init(&amp;d-&gt;<a class="code" href="structon_main_thread__cb__data.html#acd2e5f24279a00e0d426d67604dc8fbc">mu</a>, NULL);</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;    pthread_mutex_lock(&amp;d-&gt;<a class="code" href="structon_main_thread__cb__data.html#acd2e5f24279a00e0d426d67604dc8fbc">mu</a>);</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;    gdk_threads_add_idle((GSourceFunc)<a class="code" href="vnc__plugin_8c.html#a9ba8e968998b64b3832e484a2ca7dfc1">onMainThread_cb</a>, (gpointer)d);</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;    pthread_mutex_lock(&amp;d-&gt;mu);</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;    pthread_cleanup_pop(0);</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;    pthread_mutex_unlock(&amp;d-&gt;mu);</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;    pthread_mutex_destroy(&amp;d-&gt;mu);</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;}</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a781dfc8cb5371260bbf358fa7d9e3751">  128</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="vnc__plugin_8c.html#a781dfc8cb5371260bbf358fa7d9e3751">check_for_endianness</a>()</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;{</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structon_main_thread__cb__data.html#a92fd0bfc7715dcb8237a002850701222">x</a> = 1;</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    <span class="keywordtype">char</span> *c = (<span class="keywordtype">char</span> *)&amp;x;</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;    <span class="keywordflow">return</span> (<span class="keywordtype">int</span>)*c;</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;}</div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;</div><div class="line"><a name="l00136"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a885240d470f95a89ac67051da38fa01d">  136</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="vnc__plugin_8c.html#a885240d470f95a89ac67051da38fa01d">remmina_plugin_vnc_event_push</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>, gint event_type, gpointer p1, gpointer p2, gpointer p3)</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;{</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_event.html">RemminaPluginVncEvent</a> *event;</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;    <span class="keyword">event</span> = g_new(<a class="code" href="struct___remmina_plugin_vnc_event.html">RemminaPluginVncEvent</a>, 1);</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;    <span class="keyword">event</span>-&gt;event_type = event_type;</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;    <span class="keywordflow">switch</span> (event_type) {</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="vnc__plugin_8h.html#a2f80701c36e79c0640d91c788feee0b3a98fec12a2047bf22ce4d44b9e0905540">REMMINA_PLUGIN_VNC_EVENT_KEY</a>:</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;        <span class="keyword">event</span>-&gt;event_data.key.keyval = GPOINTER_TO_UINT(p1);</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;        <span class="keyword">event</span>-&gt;event_data.key.pressed = GPOINTER_TO_INT(p2);</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="vnc__plugin_8h.html#a2f80701c36e79c0640d91c788feee0b3a1897cf83244e2e2e25c7f32e50a4964f">REMMINA_PLUGIN_VNC_EVENT_POINTER</a>:</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;        <span class="keyword">event</span>-&gt;event_data.pointer.x = GPOINTER_TO_INT(p1);</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;        <span class="keyword">event</span>-&gt;event_data.pointer.y = GPOINTER_TO_INT(p2);</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;        <span class="keyword">event</span>-&gt;event_data.pointer.button_mask = GPOINTER_TO_INT(p3);</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="vnc__plugin_8h.html#a2f80701c36e79c0640d91c788feee0b3a0662a5bd411f37922da376de06e8fbfd">REMMINA_PLUGIN_VNC_EVENT_CUTTEXT</a>:</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="vnc__plugin_8h.html#a2f80701c36e79c0640d91c788feee0b3a0723d566806911ca2ed79d03214fe4ee">REMMINA_PLUGIN_VNC_EVENT_CHAT_SEND</a>:</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;        <span class="keyword">event</span>-&gt;event_data.text.text = g_strdup((<span class="keywordtype">char</span> *)p1);</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;    <span class="keywordflow">default</span>:</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;        <span class="keywordflow">break</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;</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;    pthread_mutex_lock(&amp;gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5f8bcbfe873d4949852e9624e1c43063">vnc_event_queue_mutex</a>);</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;    g_queue_push_tail(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a0e175ab5a31b720d9d7dfc6923ce3c6a">vnc_event_queue</a>, event);</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;    pthread_mutex_unlock(&amp;gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5f8bcbfe873d4949852e9624e1c43063">vnc_event_queue_mutex</a>);</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;    <span class="keywordflow">if</span> (write(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a625ea21fb2d92cb8489d3c9e5a2477ea">vnc_event_pipe</a>[1], <span class="stringliteral">&quot;\0&quot;</span>, 1)) {</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;        <span class="comment">/* Ignore */</span></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;}</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"><a class="line" href="vnc__plugin_8c.html#aeba06240e996cdffb95cf9ca4c461449">  171</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="vnc__plugin_8c.html#aeba06240e996cdffb95cf9ca4c461449">remmina_plugin_vnc_event_free</a>(<a class="code" href="struct___remmina_plugin_vnc_event.html">RemminaPluginVncEvent</a> *event)</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;    TRACE_CALL(__func__);</div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;    <span class="keywordflow">switch</span> (event-&gt;<a class="code" href="struct___remmina_plugin_vnc_event.html#a0ffbaa26908fd25e653dfaf5ad8ccff0">event_type</a>) {</div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="vnc__plugin_8h.html#a2f80701c36e79c0640d91c788feee0b3a0662a5bd411f37922da376de06e8fbfd">REMMINA_PLUGIN_VNC_EVENT_CUTTEXT</a>:</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="vnc__plugin_8h.html#a2f80701c36e79c0640d91c788feee0b3a0723d566806911ca2ed79d03214fe4ee">REMMINA_PLUGIN_VNC_EVENT_CHAT_SEND</a>:</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;        g_free(event-&gt;<a class="code" href="struct___remmina_plugin_vnc_event.html#af3990101571bcf27e9f69fd5835c5115">event_data</a>.<a class="code" href="struct___remmina_plugin_vnc_event.html#a79891d24c0e6257efceeefb3c10d8c65">text</a>.text);</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;    <span class="keywordflow">default</span>:</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;    }</div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;    g_free(event);</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;}</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;</div><div class="line"><a name="l00185"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a2b47331cd4f72ee2c69573ffb3142c10">  185</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="vnc__plugin_8c.html#a2b47331cd4f72ee2c69573ffb3142c10">remmina_plugin_vnc_event_free_all</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>)</div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;{</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_event.html">RemminaPluginVncEvent</a> *event;</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;    <span class="comment">/* This is called from main thread after plugin thread has</span></div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;<span class="comment">     * been closed, so no queue locking is necessary here */</span></div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;    <span class="keywordflow">while</span> ((event = g_queue_pop_head(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a0e175ab5a31b720d9d7dfc6923ce3c6a">vnc_event_queue</a>)) != NULL)</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;        <a class="code" href="vnc__plugin_8c.html#aeba06240e996cdffb95cf9ca4c461449">remmina_plugin_vnc_event_free</a>(event);</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;}</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"><a class="line" href="vnc__plugin_8c.html#ac0d402aa12eeef76a267a3b27e85fbb0">  197</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="vnc__plugin_8c.html#ac0d402aa12eeef76a267a3b27e85fbb0">remmina_plugin_vnc_scale_area</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>, gint *<a class="code" href="structon_main_thread__cb__data.html#a92fd0bfc7715dcb8237a002850701222">x</a>, gint *<a class="code" href="structon_main_thread__cb__data.html#aec2ab8de1fa3f948ada7bd70ce2b353f">y</a>, gint *<a class="code" href="structon_main_thread__cb__data.html#a2819729ddf9ffa92927a4ef7d3a6e0f8">w</a>, gint *h)</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;{</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;    GtkAllocation widget_allocation;</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;    gint <a class="code" href="structon_main_thread__cb__data.html#a8bf0f89b3c961ac28ccae9a9e1060db4">width</a>, <a class="code" href="structon_main_thread__cb__data.html#aa01cccfd573952ec0cd5df823e2d8f74">height</a>;</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;    gint sx, sy, sw, sh;</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;    <span class="keywordflow">if</span> (gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5412ada4c656d0053f0656bed890c030">rgb_buffer</a> == NULL)</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;    width = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#adf255b7ceaec6a51fc9269cf824a02ce">protocol_plugin_get_width</a>(gp);</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;    height = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#aa159850f20499e5bc1067f533d2fa820">protocol_plugin_get_height</a>(gp);</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;    gtk_widget_get_allocation(GTK_WIDGET(gp), &amp;widget_allocation);</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;    <span class="keywordflow">if</span> (widget_allocation.width == width &amp;&amp; widget_allocation.height == height)</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;        <span class="keywordflow">return</span>; <span class="comment">/* Same size, no scaling */</span></div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;    <span class="comment">/* We have to extend the scaled region 2 scaled pixels, to avoid gaps */</span></div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;    sx = MIN(MAX(0, (*x) * widget_allocation.width / width - widget_allocation.width / width - 2), widget_allocation.width - 1);</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;    sy = MIN(MAX(0, (*y) * widget_allocation.height / height - widget_allocation.height / height - 2), widget_allocation.height - 1);</div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;    sw = MIN(widget_allocation.width - sx, (*w) * widget_allocation.width / width + widget_allocation.width / width + 4);</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;    sh = MIN(widget_allocation.height - sy, (*h) * widget_allocation.height / height + widget_allocation.height / height + 4);</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">  222</span>&#160;    *x = sx;</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;    *y = sy;</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;    *w = sw;</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;    *h = sh;</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;</div><div class="line"><a name="l00228"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a1f57bda271e77f086885101650e8d82c">  228</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="vnc__plugin_8c.html#a1f57bda271e77f086885101650e8d82c">remmina_plugin_vnc_update_scale</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>, gboolean <a class="code" href="structon_main_thread__cb__data.html#af55aa025154991f8c762e93074eec242">scale</a>)</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;    TRACE_CALL(__func__);</div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;    <span class="comment">/* This function can be called from a non main thread */</span></div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata;</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;    gint <a class="code" href="structon_main_thread__cb__data.html#a8bf0f89b3c961ac28ccae9a9e1060db4">width</a>, <a class="code" href="structon_main_thread__cb__data.html#aa01cccfd573952ec0cd5df823e2d8f74">height</a>;</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;    <span class="keywordflow">if</span> (!remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a997a36825f2338b8e06bcd59becef61b">is_main_thread</a>()) {</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;        <span class="keyword">struct </span><a class="code" href="structon_main_thread__cb__data.html">onMainThread_cb_data</a> *d;</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;        d = (<span class="keyword">struct </span><a class="code" href="structon_main_thread__cb__data.html">onMainThread_cb_data</a> *)g_malloc(<span class="keyword">sizeof</span>(<span class="keyword">struct</span> <a class="code" href="structon_main_thread__cb__data.html">onMainThread_cb_data</a>));</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;        d-&gt;<a class="code" href="structon_main_thread__cb__data.html#ab5a747d3d76631e059d736ef286a6c38">func</a> = <a class="code" href="structon_main_thread__cb__data.html#a2990bfbbb713d7d300b121327dc179bdaf505d0b00d46515c4ab37b643567af41">FUNC_UPDATE_SCALE</a>;</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;        d-&gt;<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a> = <a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>;</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;        d-&gt;<a class="code" href="structon_main_thread__cb__data.html#af55aa025154991f8c762e93074eec242">scale</a> = <a class="code" href="structon_main_thread__cb__data.html#af55aa025154991f8c762e93074eec242">scale</a>;</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;        <a class="code" href="vnc__plugin_8c.html#a390e3b371156197feb518b737a31cc53">onMainThread_schedule_callback_and_wait</a>(d);</div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;        g_free(d);</div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;    }</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;    gpdata = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;    width = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#adf255b7ceaec6a51fc9269cf824a02ce">protocol_plugin_get_width</a>(gp);</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;    height = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#aa159850f20499e5bc1067f533d2fa820">protocol_plugin_get_height</a>(gp);</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;    <span class="keywordflow">if</span> (scale)</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;        <span class="comment">/* In scaled mode, drawing_area will get its dimensions from its parent */</span></div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;        gtk_widget_set_size_request(GTK_WIDGET(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#acf12d2c89046160dddcae35af84e5e57">drawing_area</a>), -1, -1);</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;        <span class="comment">/* In non scaled mode, the plugins forces dimensions of drawing area */</span></div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;        gtk_widget_set_size_request(GTK_WIDGET(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#acf12d2c89046160dddcae35af84e5e57">drawing_area</a>), width, height);</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;    remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#aaadab3f5fde957f5faa7ee6347bb1c6d">protocol_plugin_update_align</a>(gp);</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;}</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"><a class="line" href="vnc__plugin_8c.html#aca3ee6dd15dd0da8017a1560e0dc7e0d">  261</a></span>&#160;gboolean <a class="code" href="vnc__plugin_8c.html#aca3ee6dd15dd0da8017a1560e0dc7e0d">remmina_plugin_vnc_setcursor</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>)</div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;{</div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;    GdkCursor *cur;</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;    LOCK_BUFFER(FALSE);</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;    gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#af7838da89b30d194de8d5571e2130364">queuecursor_handler</a> = 0;</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;    <span class="keywordflow">if</span> (gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5d655f538f7a29657c664bdd0117dcfb">queuecursor_surface</a>) {</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;        cur = gdk_cursor_new_from_surface(gdk_display_get_default(), gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5d655f538f7a29657c664bdd0117dcfb">queuecursor_surface</a>, gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a673281e9b313ad358b1a426dcf6238c2">queuecursor_x</a>,</div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;                          gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#aeae081d32acaa79294cba7adaf6c57dd">queuecursor_y</a>);</div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;        gdk_window_set_cursor(gtk_widget_get_window(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#acf12d2c89046160dddcae35af84e5e57">drawing_area</a>), cur);</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;        g_object_unref(cur);</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;        cairo_surface_destroy(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5d655f538f7a29657c664bdd0117dcfb">queuecursor_surface</a>);</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5d655f538f7a29657c664bdd0117dcfb">queuecursor_surface</a> = NULL;</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;        gdk_window_set_cursor(gtk_widget_get_window(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#acf12d2c89046160dddcae35af84e5e57">drawing_area</a>), NULL);</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;    }</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;    UNLOCK_BUFFER(FALSE);</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">  282</span>&#160;    <span class="keywordflow">return</span> FALSE;</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;</div><div class="line"><a name="l00285"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a80cd2a03f3f695edbb1ac9ee8c680a5c">  285</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="vnc__plugin_8c.html#a80cd2a03f3f695edbb1ac9ee8c680a5c">remmina_plugin_vnc_queuecursor</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>, cairo_surface_t *surface, gint <a class="code" href="structon_main_thread__cb__data.html#a92fd0bfc7715dcb8237a002850701222">x</a>, gint <a class="code" href="structon_main_thread__cb__data.html#aec2ab8de1fa3f948ada7bd70ce2b353f">y</a>)</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;{</div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;    <span class="keywordflow">if</span> (gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5d655f538f7a29657c664bdd0117dcfb">queuecursor_surface</a>)</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;        cairo_surface_destroy(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5d655f538f7a29657c664bdd0117dcfb">queuecursor_surface</a>);</div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;    gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5d655f538f7a29657c664bdd0117dcfb">queuecursor_surface</a> = surface;</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;    gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a673281e9b313ad358b1a426dcf6238c2">queuecursor_x</a> = <a class="code" href="structon_main_thread__cb__data.html#a92fd0bfc7715dcb8237a002850701222">x</a>;</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;    gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#aeae081d32acaa79294cba7adaf6c57dd">queuecursor_y</a> = <a class="code" href="structon_main_thread__cb__data.html#aec2ab8de1fa3f948ada7bd70ce2b353f">y</a>;</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;    <span class="keywordflow">if</span> (!gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#af7838da89b30d194de8d5571e2130364">queuecursor_handler</a>)</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#af7838da89b30d194de8d5571e2130364">queuecursor_handler</a> = IDLE_ADD((GSourceFunc)<a class="code" href="vnc__plugin_8c.html#aca3ee6dd15dd0da8017a1560e0dc7e0d">remmina_plugin_vnc_setcursor</a>, gp);</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;}</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"><a class="line" href="struct___remmina_key_val.html">  299</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct___remmina_key_val.html">_RemminaKeyVal</a> {</div><div class="line"><a name="l00300"></a><span class="lineno"><a class="line" href="struct___remmina_key_val.html#a682fb6be0c09c0dd457b279796eec712">  300</a></span>&#160;    guint   <a class="code" href="struct___remmina_key_val.html#a682fb6be0c09c0dd457b279796eec712">keyval</a>;</div><div class="line"><a name="l00301"></a><span class="lineno"><a class="line" href="struct___remmina_key_val.html#a9d3b8298be454a8f6d9a678e2a14e2e8">  301</a></span>&#160;    guint16 <a class="code" href="struct___remmina_key_val.html#a9d3b8298be454a8f6d9a678e2a14e2e8">keycode</a>;</div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;} <a class="code" href="vnc__plugin_8c.html#a2ec48a513b23088125e7363a1832437e">RemminaKeyVal</a>;</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;<span class="comment">/***************************** LibVNCClient related codes *********************************/</span></div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;</div><div class="line"><a name="l00306"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#aa6380a77d4119e8ce70c2d46fd60aece">  306</a></span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> uint32_t <a class="code" href="vnc__plugin_8c.html#aa6380a77d4119e8ce70c2d46fd60aece">remmina_plugin_vnc_no_encrypt_auth_types</a>[] =</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;{ rfbNoAuth, rfbVncAuth, rfbMSLogon, 0 };</div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;</div><div class="line"><a name="l00309"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#ae185dbf1d0a8f2f2d225b7f7a2d1deb8">  309</a></span>&#160;<span class="keyword">static</span> <a class="code" href="struct___remmina_plugin_vnc_event.html">RemminaPluginVncEvent</a> *<a class="code" href="vnc__plugin_8c.html#ae185dbf1d0a8f2f2d225b7f7a2d1deb8">remmina_plugin_vnc_event_queue_pop_head</a>(<a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata)</div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;{</div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_event.html">RemminaPluginVncEvent</a> *event;</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">  313</span>&#160;    CANCEL_DEFER;</div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;    pthread_mutex_lock(&amp;gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5f8bcbfe873d4949852e9624e1c43063">vnc_event_queue_mutex</a>);</div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;    <span class="keyword">event</span> = g_queue_pop_head(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a0e175ab5a31b720d9d7dfc6923ce3c6a">vnc_event_queue</a>);</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;</div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;    pthread_mutex_unlock(&amp;gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5f8bcbfe873d4949852e9624e1c43063">vnc_event_queue_mutex</a>);</div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;    CANCEL_ASYNC;</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;    <span class="keywordflow">return</span> event;</div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;}</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;</div><div class="line"><a name="l00324"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#aee8a8cf42ad03be152f4f5a751798383">  324</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="vnc__plugin_8c.html#aee8a8cf42ad03be152f4f5a751798383">remmina_plugin_vnc_process_vnc_event</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>)</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;{</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_event.html">RemminaPluginVncEvent</a> *event;</div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;    rfbClient *cl;</div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;    gchar buf[100];</div><div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;</div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;    cl = (rfbClient *)gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a33bc751b1d5728b624bfa57814504f90">client</a>;</div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;    while ((event = <a class="code" href="vnc__plugin_8c.html#ae185dbf1d0a8f2f2d225b7f7a2d1deb8">remmina_plugin_vnc_event_queue_pop_head</a>(gpdata)) != NULL) {</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;        <span class="keywordflow">if</span> (cl) {</div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;            <span class="keywordflow">switch</span> (event-&gt;<a class="code" href="struct___remmina_plugin_vnc_event.html#a0ffbaa26908fd25e653dfaf5ad8ccff0">event_type</a>) {</div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;            <span class="keywordflow">case</span> <a class="code" href="vnc__plugin_8h.html#a2f80701c36e79c0640d91c788feee0b3a98fec12a2047bf22ce4d44b9e0905540">REMMINA_PLUGIN_VNC_EVENT_KEY</a>:</div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;                SendKeyEvent(cl, event-&gt;<a class="code" href="struct___remmina_plugin_vnc_event.html#af3990101571bcf27e9f69fd5835c5115">event_data</a>.<a class="code" href="struct___remmina_plugin_vnc_event.html#a54d7d71d502dae3182d2dfd96855f4d8">key</a>.keyval, event-&gt;<a class="code" href="struct___remmina_plugin_vnc_event.html#af3990101571bcf27e9f69fd5835c5115">event_data</a>.<a class="code" href="struct___remmina_plugin_vnc_event.html#a54d7d71d502dae3182d2dfd96855f4d8">key</a>.pressed);</div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;            <span class="keywordflow">case</span> <a class="code" href="vnc__plugin_8h.html#a2f80701c36e79c0640d91c788feee0b3a1897cf83244e2e2e25c7f32e50a4964f">REMMINA_PLUGIN_VNC_EVENT_POINTER</a>:</div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;                SendPointerEvent(cl, event-&gt;<a class="code" href="struct___remmina_plugin_vnc_event.html#af3990101571bcf27e9f69fd5835c5115">event_data</a>.<a class="code" href="struct___remmina_plugin_vnc_event.html#a9160c64481a1f56984c2f33785b2bf07">pointer</a>.x, event-&gt;<a class="code" href="struct___remmina_plugin_vnc_event.html#af3990101571bcf27e9f69fd5835c5115">event_data</a>.<a class="code" href="struct___remmina_plugin_vnc_event.html#a9160c64481a1f56984c2f33785b2bf07">pointer</a>.y,</div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;                         event-&gt;<a class="code" href="struct___remmina_plugin_vnc_event.html#af3990101571bcf27e9f69fd5835c5115">event_data</a>.<a class="code" href="struct___remmina_plugin_vnc_event.html#a9160c64481a1f56984c2f33785b2bf07">pointer</a>.button_mask);</div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;            <span class="keywordflow">case</span> <a class="code" href="vnc__plugin_8h.html#a2f80701c36e79c0640d91c788feee0b3a0662a5bd411f37922da376de06e8fbfd">REMMINA_PLUGIN_VNC_EVENT_CUTTEXT</a>:</div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;                <span class="keywordflow">if</span> (event-&gt;<a class="code" href="struct___remmina_plugin_vnc_event.html#af3990101571bcf27e9f69fd5835c5115">event_data</a>.<a class="code" href="struct___remmina_plugin_vnc_event.html#a79891d24c0e6257efceeefb3c10d8c65">text</a>.text) {</div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;                    rfbClientLog(<span class="stringliteral">&quot;sending clipboard text &#39;%s&#39;\n&quot;</span>, event-&gt;<a class="code" href="struct___remmina_plugin_vnc_event.html#af3990101571bcf27e9f69fd5835c5115">event_data</a>.<a class="code" href="struct___remmina_plugin_vnc_event.html#a79891d24c0e6257efceeefb3c10d8c65">text</a>.text);</div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;                    SendClientCutText(cl, event-&gt;<a class="code" href="struct___remmina_plugin_vnc_event.html#af3990101571bcf27e9f69fd5835c5115">event_data</a>.<a class="code" href="struct___remmina_plugin_vnc_event.html#a79891d24c0e6257efceeefb3c10d8c65">text</a>.text, strlen(event-&gt;<a class="code" href="struct___remmina_plugin_vnc_event.html#af3990101571bcf27e9f69fd5835c5115">event_data</a>.<a class="code" href="struct___remmina_plugin_vnc_event.html#a79891d24c0e6257efceeefb3c10d8c65">text</a>.text));</div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;                }</div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;            <span class="keywordflow">case</span> <a class="code" href="vnc__plugin_8h.html#a2f80701c36e79c0640d91c788feee0b3aa818c3e00b67a01cdee20db2136a7718">REMMINA_PLUGIN_VNC_EVENT_CHAT_OPEN</a>:</div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;                TextChatOpen(cl);</div><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;            <span class="keywordflow">case</span> <a class="code" href="vnc__plugin_8h.html#a2f80701c36e79c0640d91c788feee0b3a0723d566806911ca2ed79d03214fe4ee">REMMINA_PLUGIN_VNC_EVENT_CHAT_SEND</a>:</div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;                TextChatSend(cl, event-&gt;<a class="code" href="struct___remmina_plugin_vnc_event.html#af3990101571bcf27e9f69fd5835c5115">event_data</a>.<a class="code" href="struct___remmina_plugin_vnc_event.html#a79891d24c0e6257efceeefb3c10d8c65">text</a>.text);</div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;            <span class="keywordflow">case</span> <a class="code" href="vnc__plugin_8h.html#a2f80701c36e79c0640d91c788feee0b3a4588937e7ecca9c67f043eabff7de4df">REMMINA_PLUGIN_VNC_EVENT_CHAT_CLOSE</a>:</div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;                TextChatClose(cl);</div><div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;                TextChatFinish(cl);</div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;            <span class="keywordflow">default</span>:</div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;                rfbClientLog(<span class="stringliteral">&quot;Ignoring VNC event: 0x%x\n&quot;</span>, event-&gt;<a class="code" href="struct___remmina_plugin_vnc_event.html#a0ffbaa26908fd25e653dfaf5ad8ccff0">event_type</a>);</div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;            }</div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;        }</div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;        <a class="code" href="vnc__plugin_8c.html#aeba06240e996cdffb95cf9ca4c461449">remmina_plugin_vnc_event_free</a>(event);</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;    <span class="keywordflow">if</span> (read(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a625ea21fb2d92cb8489d3c9e5a2477ea">vnc_event_pipe</a>[0], buf, <span class="keyword">sizeof</span>(buf))) {</div><div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;        <span class="comment">/* Ignore */</span></div><div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;    }</div><div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;}</div><div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;</div><div class="line"><a name="l00371"></a><span class="lineno"><a class="line" href="struct___remmina_plugin_vnc_cuttext_param.html">  371</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct___remmina_plugin_vnc_cuttext_param.html">_RemminaPluginVncCuttextParam</a> {</div><div class="line"><a name="l00372"></a><span class="lineno"><a class="line" href="struct___remmina_plugin_vnc_cuttext_param.html#a3acb975cf5fb33970f68bed221978a09">  372</a></span>&#160;    <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> * <a class="code" href="struct___remmina_plugin_vnc_cuttext_param.html#a3acb975cf5fb33970f68bed221978a09">gp</a>;</div><div class="line"><a name="l00373"></a><span class="lineno"><a class="line" href="struct___remmina_plugin_vnc_cuttext_param.html#a435d7b845e1d90c3bfbe5e5a7be19b30">  373</a></span>&#160;    gchar *         <a class="code" href="struct___remmina_plugin_vnc_cuttext_param.html#a435d7b845e1d90c3bfbe5e5a7be19b30">text</a>;</div><div class="line"><a name="l00374"></a><span class="lineno"><a class="line" href="struct___remmina_plugin_vnc_cuttext_param.html#a3623cf203470ce741397e972fb12ab76">  374</a></span>&#160;    gint            <a class="code" href="struct___remmina_plugin_vnc_cuttext_param.html#a3623cf203470ce741397e972fb12ab76">textlen</a>;</div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;} <a class="code" href="vnc__plugin_8c.html#a058e64c8178484c3c76da43b9b80d307">RemminaPluginVncCuttextParam</a>;</div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;</div><div class="line"><a name="l00377"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#aa09286b99e12ea23e6a6ea14c5488469">  377</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="vnc__plugin_8c.html#aa09286b99e12ea23e6a6ea14c5488469">remmina_plugin_vnc_update_quality</a>(rfbClient *cl, gint quality)</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;    TRACE_CALL(__func__);</div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;    <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a> = rfbClientGetClientData(cl, NULL);</div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;    <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;    gchar *enc = NULL;</div><div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;</div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;    <span class="keywordflow">switch</span> (quality) {</div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;    <span class="keywordflow">case</span> 9:</div><div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;        cl-&gt;appData.useBGR233 = 0;</div><div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;        cl-&gt;appData.encodingsString = <span class="stringliteral">&quot;copyrect zlib hextile raw&quot;</span>;</div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;        cl-&gt;appData.compressLevel = 1;</div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;        cl-&gt;appData.qualityLevel = 9;</div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;    <span class="keywordflow">case</span> 2:</div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;        cl-&gt;appData.useBGR233 = 0;</div><div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;        cl-&gt;appData.encodingsString = <span class="stringliteral">&quot;tight zrle ultra copyrect hextile zlib corre rre raw&quot;</span>;</div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;        cl-&gt;appData.compressLevel = 2;</div><div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;        cl-&gt;appData.qualityLevel = 7;</div><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;    <span class="keywordflow">case</span> 1:</div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;        cl-&gt;appData.useBGR233 = 0;</div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;        cl-&gt;appData.encodingsString = <span class="stringliteral">&quot;tight zrle ultra copyrect hextile zlib corre rre raw&quot;</span>;</div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;        cl-&gt;appData.compressLevel = 3;</div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;        cl-&gt;appData.qualityLevel = 5;</div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;    <span class="keywordflow">case</span> 0:</div><div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;    <span class="keywordflow">default</span>:</div><div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;        <span class="comment">// bpp8 and tight encoding is not supported in libvnc</span></div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;        cl-&gt;appData.useBGR233 = 1;</div><div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;        cl-&gt;appData.encodingsString = <span class="stringliteral">&quot;copyrect zrle ultra zlib hextile corre rre raw&quot;</span>;</div><div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;        cl-&gt;appData.qualityLevel = 1;</div><div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;    }</div><div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;    remminafile = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a1409dcc143ddc35de86b792df095cfc4">protocol_plugin_get_file</a>(gp);</div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;    enc = g_strdup(remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a673ff4320377c3b440dfd24a796c69fc">file_get_string</a>(remminafile, <span class="stringliteral">&quot;encodings&quot;</span>));</div><div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;    <span class="keywordflow">if</span> (enc) {</div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;        cl-&gt;appData.encodingsString = g_strdup(enc);</div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;        g_free (enc), enc = NULL;</div><div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;    }</div><div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;    gboolean tight = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a0c7eab256e1b1fdf84be44e28cddc3de">file_get_int</a> (remminafile, <span class="stringliteral">&quot;tightencoding&quot;</span>, FALSE);</div><div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;    <span class="keywordflow">if</span> (tight) {</div><div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;        <span class="keywordflow">if</span> (!g_strrstr ( g_strdup(cl-&gt;appData.encodingsString), <span class="stringliteral">&quot;tight\0&quot;</span>)) {</div><div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;            cl-&gt;appData.encodingsString = g_strdup_printf(<span class="stringliteral">&quot;%s %s&quot;</span>, <span class="stringliteral">&quot;tight&quot;</span>, g_strdup(cl-&gt;appData.encodingsString));</div><div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;        }</div><div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;    }</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;    REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;Quality: %d&quot;</span>, quality);</div><div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;    REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;Encodings: %s&quot;</span>, cl-&gt;appData.encodingsString);</div><div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;}</div><div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;</div><div class="line"><a name="l00434"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a7149c702b5beec6fccbf5d4207e0ff55">  434</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="vnc__plugin_8c.html#a7149c702b5beec6fccbf5d4207e0ff55">remmina_plugin_vnc_update_colordepth</a>(rfbClient *cl, gint colordepth)</div><div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;{</div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;    TRACE_CALL(__func__);</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;    cl-&gt;format.depth = colordepth;</div><div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;    cl-&gt;appData.requestedDepth = colordepth;</div><div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;</div><div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;    cl-&gt;format.trueColour = 1;</div><div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;    cl-&gt;format.bigEndian = <a class="code" href="vnc__plugin_8c.html#a781dfc8cb5371260bbf358fa7d9e3751">check_for_endianness</a>()?FALSE:TRUE;</div><div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;</div><div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;    <span class="keywordflow">switch</span> (colordepth) {</div><div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;    <span class="keywordflow">case</span> 8:</div><div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;        cl-&gt;format.depth = 8;</div><div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;        cl-&gt;format.bitsPerPixel = 8;</div><div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;        cl-&gt;format.blueMax = 3;</div><div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;        cl-&gt;format.blueShift = 6;</div><div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;        cl-&gt;format.greenMax = 7;</div><div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;        cl-&gt;format.greenShift = 3;</div><div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;        cl-&gt;format.redMax = 7;</div><div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;        cl-&gt;format.redShift = 0;</div><div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;    <span class="keywordflow">case</span> 16:</div><div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;        cl-&gt;format.depth = 15;</div><div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;        cl-&gt;format.bitsPerPixel = 16;</div><div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;        cl-&gt;format.redShift = 11;</div><div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;        cl-&gt;format.greenShift = 6;</div><div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;        cl-&gt;format.blueShift = 1;</div><div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;        cl-&gt;format.redMax = 31;</div><div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;        cl-&gt;format.greenMax = 31;</div><div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;        cl-&gt;format.blueMax = 31;</div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;    <span class="keywordflow">case</span> 32:</div><div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;    <span class="keywordflow">default</span>:</div><div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;        cl-&gt;format.depth = 24;</div><div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;        cl-&gt;format.bitsPerPixel = 32;</div><div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;        cl-&gt;format.blueShift = 0;</div><div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;        cl-&gt;format.redShift = 16;</div><div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;        cl-&gt;format.greenShift = 8;</div><div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;        cl-&gt;format.blueMax = 0xff;</div><div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;        cl-&gt;format.redMax = 0xff;</div><div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;        cl-&gt;format.greenMax = 0xff;</div><div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;        <span class="keywordflow">break</span>;</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;    rfbClientLog(<span class="stringliteral">&quot;colordepth          = %d\n&quot;</span>, colordepth);</div><div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;    rfbClientLog(<span class="stringliteral">&quot;format.depth        = %d\n&quot;</span>, cl-&gt;format.depth);</div><div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;    rfbClientLog(<span class="stringliteral">&quot;format.bitsPerPixel = %d\n&quot;</span>, cl-&gt;format.bitsPerPixel);</div><div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;    rfbClientLog(<span class="stringliteral">&quot;format.blueShift    = %d\n&quot;</span>, cl-&gt;format.blueShift);</div><div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;    rfbClientLog(<span class="stringliteral">&quot;format.redShift     = %d\n&quot;</span>, cl-&gt;format.redShift);</div><div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;    rfbClientLog(<span class="stringliteral">&quot;format.trueColour   = %d\n&quot;</span>, cl-&gt;format.trueColour);</div><div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;    rfbClientLog(<span class="stringliteral">&quot;format.greenShift   = %d\n&quot;</span>, cl-&gt;format.greenShift);</div><div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;    rfbClientLog(<span class="stringliteral">&quot;format.blueMax      = %d\n&quot;</span>, cl-&gt;format.blueMax);</div><div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;    rfbClientLog(<span class="stringliteral">&quot;format.redMax       = %d\n&quot;</span>, cl-&gt;format.redMax);</div><div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;    rfbClientLog(<span class="stringliteral">&quot;format.greenMax     = %d\n&quot;</span>, cl-&gt;format.greenMax);</div><div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;    rfbClientLog(<span class="stringliteral">&quot;format.bigEndian    = %d\n&quot;</span>, cl-&gt;format.bigEndian);</div><div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;}</div><div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;</div><div class="line"><a name="l00491"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a91cf510208363f5678c65f420d2d0586">  491</a></span>&#160;<span class="keyword">static</span> rfbBool <a class="code" href="vnc__plugin_8c.html#a91cf510208363f5678c65f420d2d0586">remmina_plugin_vnc_rfb_allocfb</a>(rfbClient *cl)</div><div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;{</div><div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;    <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a> = rfbClientGetClientData(cl, NULL);</div><div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;    gint <a class="code" href="structon_main_thread__cb__data.html#a8bf0f89b3c961ac28ccae9a9e1060db4">width</a>, <a class="code" href="structon_main_thread__cb__data.html#aa01cccfd573952ec0cd5df823e2d8f74">height</a>, depth, size;</div><div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;    gboolean <a class="code" href="structon_main_thread__cb__data.html#af55aa025154991f8c762e93074eec242">scale</a>;</div><div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;    cairo_surface_t *new_surface, *old_surface;</div><div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;</div><div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;    width = cl-&gt;width;</div><div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;    height = cl-&gt;height;</div><div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;    depth = cl-&gt;format.bitsPerPixel;</div><div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;    size = width * height * (depth / 8);</div><div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;</div><div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;    new_surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);</div><div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;    <span class="keywordflow">if</span> (cairo_surface_status(new_surface) != CAIRO_STATUS_SUCCESS)</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;    old_surface = gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5412ada4c656d0053f0656bed890c030">rgb_buffer</a>;</div><div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;</div><div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;    LOCK_BUFFER(TRUE);</div><div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;</div><div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;    remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#abaf7f57e2336f6e5c257e9c30fedc047">protocol_plugin_set_width</a>(gp, width);</div><div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;    remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a258d391bcfff1409d27bee0743aec6c1">protocol_plugin_set_height</a>(gp, height);</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;    gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5412ada4c656d0053f0656bed890c030">rgb_buffer</a> = new_surface;</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;    <span class="keywordflow">if</span> (gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5b85e81358d36bc4772b95cb9856e2ca">vnc_buffer</a>)</div><div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;        g_free(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5b85e81358d36bc4772b95cb9856e2ca">vnc_buffer</a>);</div><div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;    gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5b85e81358d36bc4772b95cb9856e2ca">vnc_buffer</a> = (guchar *)g_malloc(size);</div><div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;    cl-&gt;frameBuffer = gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5b85e81358d36bc4772b95cb9856e2ca">vnc_buffer</a>;</div><div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;</div><div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;    UNLOCK_BUFFER(TRUE);</div><div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;</div><div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;    <span class="keywordflow">if</span> (old_surface)</div><div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;        cairo_surface_destroy(old_surface);</div><div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;</div><div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;    scale = (remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#ae97f4052c4bbda628682ae071ada27ed">remmina_protocol_widget_get_current_scale_mode</a>(gp) != <a class="code" href="types_8h.html#aeea5ee1e675368413b6f6ab09883e7dead50ff64ad1e14caf78956850f03871bd">REMMINA_PROTOCOL_WIDGET_SCALE_MODE_NONE</a>);</div><div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;    <a class="code" href="vnc__plugin_8c.html#a1f57bda271e77f086885101650e8d82c">remmina_plugin_vnc_update_scale</a>(gp, scale);</div><div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;</div><div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;    <span class="comment">/* Notify window of change so that scroll border can be hidden or shown if needed */</span></div><div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;    remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a734f491f20072acdcbebb41e36bafe2f">protocol_plugin_desktop_resize</a>(gp);</div><div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;</div><div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;    <span class="comment">/* Refresh the client’s updateRect - bug in xvncclient */</span></div><div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;    cl-&gt;updateRect.w = <a class="code" href="structon_main_thread__cb__data.html#a8bf0f89b3c961ac28ccae9a9e1060db4">width</a>;</div><div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;    cl-&gt;updateRect.h = <a class="code" href="structon_main_thread__cb__data.html#aa01cccfd573952ec0cd5df823e2d8f74">height</a>;</div><div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;</div><div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;    <span class="keywordflow">return</span> TRUE;</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="vnc__plugin_8c.html#af1a91949fa5f1c5ff978046e8186a5f8">  540</a></span>&#160;<span class="keyword">static</span> gint <a class="code" href="vnc__plugin_8c.html#af1a91949fa5f1c5ff978046e8186a5f8">remmina_plugin_vnc_bits</a>(gint n)</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;    gint b = 0;</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="keywordflow">while</span> (n) {</div><div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;        b++;</div><div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;        n &gt;&gt;= 1;</div><div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;    }</div><div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;    <span class="keywordflow">return</span> b ? b : 1;</div><div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;}</div><div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;</div><div class="line"><a name="l00552"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a8908f48e85693e75dc871ed7e2eb1ddc">  552</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="vnc__plugin_8c.html#a8908f48e85693e75dc871ed7e2eb1ddc">remmina_plugin_vnc_queue_draw_area_real</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>)</div><div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;{</div><div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;    gint <a class="code" href="structon_main_thread__cb__data.html#a92fd0bfc7715dcb8237a002850701222">x</a>, <a class="code" href="structon_main_thread__cb__data.html#aec2ab8de1fa3f948ada7bd70ce2b353f">y</a>, <a class="code" href="structon_main_thread__cb__data.html#a2819729ddf9ffa92927a4ef7d3a6e0f8">w</a>, h;</div><div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;</div><div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;    <span class="keywordflow">if</span> (GTK_IS_WIDGET(gp) &amp;&amp; gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#ab105fe07330946ed3687ad2d06fabe95">connected</a>) {</div><div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;        LOCK_BUFFER(FALSE);</div><div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;        x = gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a3c4413fdc098cf2dd9a1ff336c20356e">queuedraw_x</a>;</div><div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;        y = gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a09a73e5d8e44a505154432e91cc8af4e">queuedraw_y</a>;</div><div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;        w = gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a14aaefd3fdb0038689972d672a87f6d2">queuedraw_w</a>;</div><div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;        h = gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a4de43e091ed0b511921b87f2d456e990">queuedraw_h</a>;</div><div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a8c3e9e03bc8b3ed04ee93a2c0281b5c6">queuedraw_handler</a> = 0;</div><div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;        UNLOCK_BUFFER(FALSE);</div><div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;</div><div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;        gtk_widget_queue_draw_area(GTK_WIDGET(gp), x, y, w, h);</div><div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;    }</div><div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;    <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;}</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"><a class="line" href="vnc__plugin_8c.html#adf7b4c8b2fa3722af25cc40dc66a83b9">  572</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="vnc__plugin_8c.html#adf7b4c8b2fa3722af25cc40dc66a83b9">remmina_plugin_vnc_queue_draw_area</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>, gint <a class="code" href="structon_main_thread__cb__data.html#a92fd0bfc7715dcb8237a002850701222">x</a>, gint <a class="code" href="structon_main_thread__cb__data.html#aec2ab8de1fa3f948ada7bd70ce2b353f">y</a>, gint <a class="code" href="structon_main_thread__cb__data.html#a2819729ddf9ffa92927a4ef7d3a6e0f8">w</a>, gint h)</div><div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;{</div><div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;    gint nx2, ny2, ox2, oy2;</div><div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;</div><div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;    LOCK_BUFFER(TRUE);</div><div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;    <span class="keywordflow">if</span> (gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a8c3e9e03bc8b3ed04ee93a2c0281b5c6">queuedraw_handler</a>) {</div><div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;        nx2 = x + <a class="code" href="structon_main_thread__cb__data.html#a2819729ddf9ffa92927a4ef7d3a6e0f8">w</a>;</div><div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;        ny2 = y + h;</div><div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;        ox2 = gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a3c4413fdc098cf2dd9a1ff336c20356e">queuedraw_x</a> + gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a14aaefd3fdb0038689972d672a87f6d2">queuedraw_w</a>;</div><div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;        oy2 = gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a09a73e5d8e44a505154432e91cc8af4e">queuedraw_y</a> + gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a4de43e091ed0b511921b87f2d456e990">queuedraw_h</a>;</div><div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a3c4413fdc098cf2dd9a1ff336c20356e">queuedraw_x</a> = MIN(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a3c4413fdc098cf2dd9a1ff336c20356e">queuedraw_x</a>, x);</div><div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a09a73e5d8e44a505154432e91cc8af4e">queuedraw_y</a> = MIN(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a09a73e5d8e44a505154432e91cc8af4e">queuedraw_y</a>, y);</div><div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a14aaefd3fdb0038689972d672a87f6d2">queuedraw_w</a> = MAX(ox2, nx2) - gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a3c4413fdc098cf2dd9a1ff336c20356e">queuedraw_x</a>;</div><div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a4de43e091ed0b511921b87f2d456e990">queuedraw_h</a> = MAX(oy2, ny2) - gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a09a73e5d8e44a505154432e91cc8af4e">queuedraw_y</a>;</div><div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a3c4413fdc098cf2dd9a1ff336c20356e">queuedraw_x</a> = <a class="code" href="structon_main_thread__cb__data.html#a92fd0bfc7715dcb8237a002850701222">x</a>;</div><div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a09a73e5d8e44a505154432e91cc8af4e">queuedraw_y</a> = <a class="code" href="structon_main_thread__cb__data.html#aec2ab8de1fa3f948ada7bd70ce2b353f">y</a>;</div><div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a14aaefd3fdb0038689972d672a87f6d2">queuedraw_w</a> = <a class="code" href="structon_main_thread__cb__data.html#a2819729ddf9ffa92927a4ef7d3a6e0f8">w</a>;</div><div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a4de43e091ed0b511921b87f2d456e990">queuedraw_h</a> = h;</div><div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a8c3e9e03bc8b3ed04ee93a2c0281b5c6">queuedraw_handler</a> = IDLE_ADD((GSourceFunc)<a class="code" href="vnc__plugin_8c.html#a8908f48e85693e75dc871ed7e2eb1ddc">remmina_plugin_vnc_queue_draw_area_real</a>, gp);</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;    UNLOCK_BUFFER(TRUE);</div><div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;}</div><div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;</div><div class="line"><a name="l00598"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a1266cacd4af9e75fb043669f88fbd108">  598</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="vnc__plugin_8c.html#a1266cacd4af9e75fb043669f88fbd108">remmina_plugin_vnc_rfb_fill_buffer</a>(rfbClient *cl, guchar *dest, gint dest_rowstride, guchar *src,</div><div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;                           gint src_rowstride, guchar *mask, gint <a class="code" href="structon_main_thread__cb__data.html#a2819729ddf9ffa92927a4ef7d3a6e0f8">w</a>, gint h)</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;    TRACE_CALL(__func__);</div><div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;    guchar *srcptr;</div><div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;    gint bytesPerPixel;</div><div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;    guint32 src_pixel;</div><div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160;    gint ix, iy;</div><div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;    gint i;</div><div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;    guchar c;</div><div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;    gint rs, gs, bs, rm, gm, bm, rl, gl, bl, rr, gr, br;</div><div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;    gint r;</div><div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;    guint32 *destptr;</div><div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;</div><div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;    <span class="keyword">union </span>{</div><div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;        <span class="keyword">struct </span>{</div><div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;            guchar a, r, g, b;</div><div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;        } colors;</div><div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;        guint32 argb;</div><div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;    } dst_pixel;</div><div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;</div><div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;    bytesPerPixel = cl-&gt;format.bitsPerPixel / 8;</div><div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;    <span class="keywordflow">switch</span> (cl-&gt;format.bitsPerPixel) {</div><div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;    <span class="keywordflow">case</span> 32:</div><div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;        <span class="comment">/* The following codes fill in the Alpha channel swap red/green value */</span></div><div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;        <span class="keywordflow">for</span> (iy = 0; iy &lt; h; iy++) {</div><div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;            destptr = (guint32 *)(dest + iy * dest_rowstride);</div><div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;            srcptr = src + iy * src_rowstride;</div><div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;            <span class="keywordflow">for</span> (ix = 0; ix &lt; <a class="code" href="structon_main_thread__cb__data.html#a2819729ddf9ffa92927a4ef7d3a6e0f8">w</a>; ix++) {</div><div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;                <span class="keywordflow">if</span> (!mask || *mask++) {</div><div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;                    dst_pixel.colors.a = 0xff;</div><div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;                    dst_pixel.colors.r = *(srcptr + 2);</div><div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;                    dst_pixel.colors.g = *(srcptr + 1);</div><div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;                    dst_pixel.colors.b = *srcptr;</div><div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;                    *destptr++ = ntohl(dst_pixel.argb);</div><div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;                } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;                    *destptr++ = 0;</div><div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;                }</div><div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;                srcptr += 4;</div><div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;            }</div><div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;        }</div><div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;    <span class="keywordflow">default</span>:</div><div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;        rm = cl-&gt;format.redMax;</div><div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;        gm = cl-&gt;format.greenMax;</div><div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;        bm = cl-&gt;format.blueMax;</div><div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;        rr = <a class="code" href="vnc__plugin_8c.html#af1a91949fa5f1c5ff978046e8186a5f8">remmina_plugin_vnc_bits</a>(rm);</div><div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;        gr = <a class="code" href="vnc__plugin_8c.html#af1a91949fa5f1c5ff978046e8186a5f8">remmina_plugin_vnc_bits</a>(gm);</div><div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;        br = <a class="code" href="vnc__plugin_8c.html#af1a91949fa5f1c5ff978046e8186a5f8">remmina_plugin_vnc_bits</a>(bm);</div><div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;        rl = 8 - rr;</div><div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;        gl = 8 - gr;</div><div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;        bl = 8 - br;</div><div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;        rs = cl-&gt;format.redShift;</div><div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;        gs = cl-&gt;format.greenShift;</div><div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;        bs = cl-&gt;format.blueShift;</div><div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;        <span class="keywordflow">for</span> (iy = 0; iy &lt; h; iy++) {</div><div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;            destptr = (guint32 *)(dest + iy * dest_rowstride);</div><div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;            srcptr = src + iy * src_rowstride;</div><div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;            <span class="keywordflow">for</span> (ix = 0; ix &lt; <a class="code" href="structon_main_thread__cb__data.html#a2819729ddf9ffa92927a4ef7d3a6e0f8">w</a>; ix++) {</div><div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;                src_pixel = 0;</div><div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;                <span class="keywordflow">for</span> (i = 0; i &lt; bytesPerPixel; i++)</div><div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;                    src_pixel += (*srcptr++) &lt;&lt; (8 * i);</div><div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;</div><div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;                <span class="keywordflow">if</span> (!mask || *mask++) {</div><div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;                    dst_pixel.colors.a = 0xff;</div><div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;                    c = (guchar)((src_pixel &gt;&gt; rs) &amp; rm) &lt;&lt; rl;</div><div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;                    <span class="keywordflow">for</span> (r = rr; r &lt; 8; r *= 2)</div><div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160;                        c |= c &gt;&gt; r;</div><div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;                    dst_pixel.colors.r = c;</div><div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;                    c = (guchar)((src_pixel &gt;&gt; gs) &amp; gm) &lt;&lt; gl;</div><div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;                    <span class="keywordflow">for</span> (r = gr; r &lt; 8; r *= 2)</div><div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;                        c |= c &gt;&gt; r;</div><div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;                    dst_pixel.colors.g = c;</div><div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;                    c = (guchar)((src_pixel &gt;&gt; bs) &amp; bm) &lt;&lt; bl;</div><div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;                    <span class="keywordflow">for</span> (r = br; r &lt; 8; r *= 2)</div><div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;                        c |= c &gt;&gt; r;</div><div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;                    dst_pixel.colors.b = c;</div><div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;                    *destptr++ = ntohl(dst_pixel.argb);</div><div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;                } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;                    *destptr++ = 0;</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;            }</div><div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;        }</div><div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;    }</div><div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160;}</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"><a class="line" href="vnc__plugin_8c.html#af77b4e3099a5d382aa4b840e4aecaadc">  685</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="vnc__plugin_8c.html#af77b4e3099a5d382aa4b840e4aecaadc">remmina_plugin_vnc_rfb_updatefb</a>(rfbClient *cl, <span class="keywordtype">int</span> <a class="code" href="structon_main_thread__cb__data.html#a92fd0bfc7715dcb8237a002850701222">x</a>, <span class="keywordtype">int</span> <a class="code" href="structon_main_thread__cb__data.html#aec2ab8de1fa3f948ada7bd70ce2b353f">y</a>, <span class="keywordtype">int</span> <a class="code" href="structon_main_thread__cb__data.html#a2819729ddf9ffa92927a4ef7d3a6e0f8">w</a>, <span class="keywordtype">int</span> h)</div><div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;{</div><div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;    <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a> = rfbClientGetClientData(cl, NULL);</div><div class="line"><a name="l00689"></a><span class="lineno">  689</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160;    gint bytesPerPixel;</div><div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;    gint rowstride;</div><div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;    gint <a class="code" href="structon_main_thread__cb__data.html#a8bf0f89b3c961ac28ccae9a9e1060db4">width</a>;</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;    LOCK_BUFFER(TRUE);</div><div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;</div><div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;    <span class="keywordflow">if</span> (w &gt;= 1 || h &gt;= 1) {</div><div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160;        width = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#adf255b7ceaec6a51fc9269cf824a02ce">protocol_plugin_get_width</a>(gp);</div><div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;        bytesPerPixel = cl-&gt;format.bitsPerPixel / 8;</div><div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160;        rowstride = cairo_image_surface_get_stride(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5412ada4c656d0053f0656bed890c030">rgb_buffer</a>);</div><div class="line"><a name="l00700"></a><span class="lineno">  700</span>&#160;        cairo_surface_flush(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5412ada4c656d0053f0656bed890c030">rgb_buffer</a>);</div><div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160;        <a class="code" href="vnc__plugin_8c.html#a1266cacd4af9e75fb043669f88fbd108">remmina_plugin_vnc_rfb_fill_buffer</a>(cl, cairo_image_surface_get_data(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5412ada4c656d0053f0656bed890c030">rgb_buffer</a>) + y * rowstride + x * 4,</div><div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;                           rowstride, gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5b85e81358d36bc4772b95cb9856e2ca">vnc_buffer</a> + ((y * width + x) * bytesPerPixel), width * bytesPerPixel, NULL,</div><div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;                           w, h);</div><div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;        cairo_surface_mark_dirty(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5412ada4c656d0053f0656bed890c030">rgb_buffer</a>);</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;</div><div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;    <span class="keywordflow">if</span> ((remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#ae97f4052c4bbda628682ae071ada27ed">remmina_protocol_widget_get_current_scale_mode</a>(gp) != <a class="code" href="types_8h.html#aeea5ee1e675368413b6f6ab09883e7dead50ff64ad1e14caf78956850f03871bd">REMMINA_PROTOCOL_WIDGET_SCALE_MODE_NONE</a>))</div><div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;        <a class="code" href="vnc__plugin_8c.html#ac0d402aa12eeef76a267a3b27e85fbb0">remmina_plugin_vnc_scale_area</a>(gp, &amp;x, &amp;y, &amp;w, &amp;h);</div><div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;</div><div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;    UNLOCK_BUFFER(TRUE);</div><div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;</div><div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;    <a class="code" href="vnc__plugin_8c.html#adf7b4c8b2fa3722af25cc40dc66a83b9">remmina_plugin_vnc_queue_draw_area</a>(gp, x, y, w, h);</div><div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160;}</div><div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;</div><div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="vnc__plugin_8c.html#aae5060f94c26073c776213a0ddb0f2a2">remmina_plugin_vnc_rfb_finished</a>(rfbClient *cl) __attribute__ ((unused));</div><div class="line"><a name="l00716"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#aae5060f94c26073c776213a0ddb0f2a2">  716</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="vnc__plugin_8c.html#aae5060f94c26073c776213a0ddb0f2a2">remmina_plugin_vnc_rfb_finished</a>(rfbClient *cl)</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;    TRACE_CALL(__func__);</div><div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;    REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;FinishedFrameBufferUpdate&quot;</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;</div><div class="line"><a name="l00722"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a3d316a2257bd539a6d5d0e0247810fe5">  722</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="vnc__plugin_8c.html#a3d316a2257bd539a6d5d0e0247810fe5">remmina_plugin_vnc_rfb_led_state</a>(rfbClient *cl, <span class="keywordtype">int</span> value, <span class="keywordtype">int</span> pad)</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;    TRACE_CALL(__func__);</div><div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;    REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;Led state - value: %d, pad: %d&quot;</span>, value, pad);</div><div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;}</div><div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;</div><div class="line"><a name="l00728"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#aa0b52e3e065b5042bed7cd9eb0561c5d">  728</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="vnc__plugin_8c.html#aa0b52e3e065b5042bed7cd9eb0561c5d">remmina_plugin_vnc_queue_cuttext</a>(<a class="code" href="struct___remmina_plugin_vnc_cuttext_param.html">RemminaPluginVncCuttextParam</a> *param)</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;    TRACE_CALL(__func__);</div><div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;    <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a> = param-&gt;<a class="code" href="struct___remmina_plugin_vnc_cuttext_param.html#a3acb975cf5fb33970f68bed221978a09">gp</a>;</div><div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;    GDateTime *t;</div><div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;    glong diff;</div><div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">char</span> *cur_charset;</div><div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;    gchar *text;</div><div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;    gsize br, bw;</div><div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;</div><div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;    <span class="keywordflow">if</span> (GTK_IS_WIDGET(gp) &amp;&amp; gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#ab105fe07330946ed3687ad2d06fabe95">connected</a>) {</div><div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;        t = g_date_time_new_now_utc();</div><div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;        diff = g_date_time_difference(t, gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#aaee126db00e50ad613a6c8ae032ba3b2">clipboard_timer</a>) / 100000; <span class="comment">// tenth of second</span></div><div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;        <span class="keywordflow">if</span> (diff &gt;= 10) {</div><div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;            g_date_time_unref(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#aaee126db00e50ad613a6c8ae032ba3b2">clipboard_timer</a>);</div><div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;            gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#aaee126db00e50ad613a6c8ae032ba3b2">clipboard_timer</a> = t;</div><div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;            <span class="comment">/* Convert text from VNC latin-1 to current GTK charset (usually UTF-8) */</span></div><div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;            g_get_charset(&amp;cur_charset);</div><div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;            text = g_convert_with_fallback(param-&gt;<a class="code" href="struct___remmina_plugin_vnc_cuttext_param.html#a435d7b845e1d90c3bfbe5e5a7be19b30">text</a>, param-&gt;<a class="code" href="struct___remmina_plugin_vnc_cuttext_param.html#a3623cf203470ce741397e972fb12ab76">textlen</a>, cur_charset, <span class="stringliteral">&quot;ISO-8859-1&quot;</span>, <span class="stringliteral">&quot;?&quot;</span>, &amp;br, &amp;bw, NULL);</div><div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;            gtk_clipboard_set_text(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD), text, bw);</div><div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;            g_free(text);</div><div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;        } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00751"></a><span class="lineno">  751</span>&#160;            g_date_time_unref(t);</div><div class="line"><a name="l00752"></a><span class="lineno">  752</span>&#160;        }</div><div class="line"><a name="l00753"></a><span class="lineno">  753</span>&#160;    }</div><div class="line"><a name="l00754"></a><span class="lineno">  754</span>&#160;    g_free(param-&gt;<a class="code" href="struct___remmina_plugin_vnc_cuttext_param.html#a435d7b845e1d90c3bfbe5e5a7be19b30">text</a>);</div><div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;    g_free(param);</div><div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;    <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00757"></a><span class="lineno">  757</span>&#160;}</div><div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;</div><div class="line"><a name="l00759"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#ad67a66a0788c440bd755e300645155c1">  759</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="vnc__plugin_8c.html#ad67a66a0788c440bd755e300645155c1">remmina_plugin_vnc_rfb_cuttext</a>(rfbClient *cl, <span class="keyword">const</span> <span class="keywordtype">char</span> *text, <span class="keywordtype">int</span> textlen)</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;    TRACE_CALL(__func__);</div><div class="line"><a name="l00762"></a><span class="lineno">  762</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_cuttext_param.html">RemminaPluginVncCuttextParam</a> *param;</div><div class="line"><a name="l00763"></a><span class="lineno">  763</span>&#160;</div><div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160;    param = g_new(<a class="code" href="struct___remmina_plugin_vnc_cuttext_param.html">RemminaPluginVncCuttextParam</a>, 1);</div><div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;    param-&gt;<a class="code" href="struct___remmina_plugin_vnc_cuttext_param.html#a3acb975cf5fb33970f68bed221978a09">gp</a> = (<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *)rfbClientGetClientData(cl, NULL);</div><div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;    param-&gt;<a class="code" href="struct___remmina_plugin_vnc_cuttext_param.html#a435d7b845e1d90c3bfbe5e5a7be19b30">text</a> = g_malloc(textlen);</div><div class="line"><a name="l00767"></a><span class="lineno">  767</span>&#160;    memcpy(param-&gt;<a class="code" href="struct___remmina_plugin_vnc_cuttext_param.html#a435d7b845e1d90c3bfbe5e5a7be19b30">text</a>, text, textlen);</div><div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160;    param-&gt;<a class="code" href="struct___remmina_plugin_vnc_cuttext_param.html#a3623cf203470ce741397e972fb12ab76">textlen</a> = textlen;</div><div class="line"><a name="l00769"></a><span class="lineno">  769</span>&#160;    IDLE_ADD((GSourceFunc)<a class="code" href="vnc__plugin_8c.html#aa0b52e3e065b5042bed7cd9eb0561c5d">remmina_plugin_vnc_queue_cuttext</a>, param);</div><div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;}</div><div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;</div><div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;<span class="keyword">static</span> <span class="keywordtype">char</span> *</div><div class="line"><a name="l00773"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#ab553977a035eea4d913b2cfaaf49a003">  773</a></span>&#160;<a class="code" href="vnc__plugin_8c.html#ab553977a035eea4d913b2cfaaf49a003">remmina_plugin_vnc_rfb_password</a>(rfbClient *cl)</div><div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160;{</div><div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00776"></a><span class="lineno">  776</span>&#160;    <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a> = rfbClientGetClientData(cl, NULL);</div><div class="line"><a name="l00777"></a><span class="lineno">  777</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00778"></a><span class="lineno">  778</span>&#160;    <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160;    gchar *pwd = NULL;</div><div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;</div><div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160;    gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a782a902d036e12eb08bfcd1006c12b97">auth_called</a> = TRUE;</div><div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160;    remminafile = remmina_plugin_service-&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;</div><div class="line"><a name="l00784"></a><span class="lineno">  784</span>&#160;    <span class="keywordflow">if</span> (gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5b17067fb2b9437f1fdf607334dfade3">auth_first</a>)</div><div class="line"><a name="l00785"></a><span class="lineno">  785</span>&#160;        pwd = g_strdup(remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a673ff4320377c3b440dfd24a796c69fc">file_get_string</a>(remminafile, <span class="stringliteral">&quot;password&quot;</span>));</div><div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160;    <span class="keywordflow">if</span> (!pwd) {</div><div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;        gboolean save;</div><div class="line"><a name="l00788"></a><span class="lineno">  788</span>&#160;        gint ret;</div><div class="line"><a name="l00789"></a><span class="lineno">  789</span>&#160;        gboolean disablepasswordstoring = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a0c7eab256e1b1fdf84be44e28cddc3de">file_get_int</a>(remminafile, <span class="stringliteral">&quot;disablepasswordstoring&quot;</span>, FALSE);</div><div class="line"><a name="l00790"></a><span class="lineno">  790</span>&#160;        ret = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a9b4cfe0a97a34260e58784feef693704">protocol_plugin_init_auth</a>(gp,</div><div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160;                                    (disablepasswordstoring ? 0 : <a class="code" href="types_8h.html#a341a0a8b6509633809d99348cc3ba486a9b734c324722cf2982768feaeeb15c7c">REMMINA_MESSAGE_PANEL_FLAG_SAVEPASSWORD</a>),</div><div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160;                                    _(<span class="stringliteral">&quot;Enter VNC password&quot;</span>),</div><div class="line"><a name="l00793"></a><span class="lineno">  793</span>&#160;                                    NULL,</div><div class="line"><a name="l00794"></a><span class="lineno">  794</span>&#160;                                    remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a673ff4320377c3b440dfd24a796c69fc">file_get_string</a>(remminafile, <span class="stringliteral">&quot;password&quot;</span>),</div><div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160;                                    NULL,</div><div class="line"><a name="l00796"></a><span class="lineno">  796</span>&#160;                                    NULL);</div><div class="line"><a name="l00797"></a><span class="lineno">  797</span>&#160;        <span class="keywordflow">if</span> (ret != GTK_RESPONSE_OK) {</div><div class="line"><a name="l00798"></a><span class="lineno">  798</span>&#160;            gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#ab105fe07330946ed3687ad2d06fabe95">connected</a> = FALSE;</div><div class="line"><a name="l00799"></a><span class="lineno">  799</span>&#160;            <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00800"></a><span class="lineno">  800</span>&#160;        }</div><div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;        pwd = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#ad98eaa3efc0214bc701dc66b5730e174">protocol_plugin_init_get_password</a>(gp);</div><div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;        save = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#af2b857b2de1af3621f543b810f68b17b">protocol_plugin_init_get_savepassword</a>(gp);</div><div class="line"><a name="l00803"></a><span class="lineno">  803</span>&#160;        <span class="keywordflow">if</span> (save)</div><div class="line"><a name="l00804"></a><span class="lineno">  804</span>&#160;            remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a4880fb57479708bc1cb47bf6b4dcabc3">file_set_string</a>(remminafile, <span class="stringliteral">&quot;password&quot;</span>, pwd);</div><div class="line"><a name="l00805"></a><span class="lineno">  805</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00806"></a><span class="lineno">  806</span>&#160;            remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a4880fb57479708bc1cb47bf6b4dcabc3">file_set_string</a>(remminafile, <span class="stringliteral">&quot;password&quot;</span>, NULL);</div><div class="line"><a name="l00807"></a><span class="lineno">  807</span>&#160;    }</div><div class="line"><a name="l00808"></a><span class="lineno">  808</span>&#160;    <span class="keywordflow">return</span> pwd;</div><div class="line"><a name="l00809"></a><span class="lineno">  809</span>&#160;}</div><div class="line"><a name="l00810"></a><span class="lineno">  810</span>&#160;</div><div class="line"><a name="l00811"></a><span class="lineno">  811</span>&#160;<span class="keyword">static</span> rfbCredential *</div><div class="line"><a name="l00812"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#ab3bb0ef97fadc9782e47cf1dd011a19d">  812</a></span>&#160;<a class="code" href="vnc__plugin_8c.html#ab3bb0ef97fadc9782e47cf1dd011a19d">remmina_plugin_vnc_rfb_credential</a>(rfbClient *cl, <span class="keywordtype">int</span> credentialType)</div><div class="line"><a name="l00813"></a><span class="lineno">  813</span>&#160;{</div><div class="line"><a name="l00814"></a><span class="lineno">  814</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00815"></a><span class="lineno">  815</span>&#160;    rfbCredential *cred;</div><div class="line"><a name="l00816"></a><span class="lineno">  816</span>&#160;    <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a> = rfbClientGetClientData(cl, NULL);</div><div class="line"><a name="l00817"></a><span class="lineno">  817</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00818"></a><span class="lineno">  818</span>&#160;    <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l00819"></a><span class="lineno">  819</span>&#160;    gint ret;</div><div class="line"><a name="l00820"></a><span class="lineno">  820</span>&#160;    gchar *s1, *s2;</div><div class="line"><a name="l00821"></a><span class="lineno">  821</span>&#160;    gboolean disablepasswordstoring;</div><div class="line"><a name="l00822"></a><span class="lineno">  822</span>&#160;</div><div class="line"><a name="l00823"></a><span class="lineno">  823</span>&#160;    gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a782a902d036e12eb08bfcd1006c12b97">auth_called</a> = TRUE;</div><div class="line"><a name="l00824"></a><span class="lineno">  824</span>&#160;    remminafile = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a1409dcc143ddc35de86b792df095cfc4">protocol_plugin_get_file</a>(gp);</div><div class="line"><a name="l00825"></a><span class="lineno">  825</span>&#160;</div><div class="line"><a name="l00826"></a><span class="lineno">  826</span>&#160;    cred = g_new0(rfbCredential, 1);</div><div class="line"><a name="l00827"></a><span class="lineno">  827</span>&#160;</div><div class="line"><a name="l00828"></a><span class="lineno">  828</span>&#160;    <span class="keywordflow">switch</span> (credentialType) {</div><div class="line"><a name="l00829"></a><span class="lineno">  829</span>&#160;    <span class="keywordflow">case</span> rfbCredentialTypeUser:</div><div class="line"><a name="l00830"></a><span class="lineno">  830</span>&#160;</div><div class="line"><a name="l00831"></a><span class="lineno">  831</span>&#160;        s1 = g_strdup(remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a673ff4320377c3b440dfd24a796c69fc">file_get_string</a>(remminafile, <span class="stringliteral">&quot;username&quot;</span>));</div><div class="line"><a name="l00832"></a><span class="lineno">  832</span>&#160;</div><div class="line"><a name="l00833"></a><span class="lineno">  833</span>&#160;        s2 = g_strdup(remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a673ff4320377c3b440dfd24a796c69fc">file_get_string</a>(remminafile, <span class="stringliteral">&quot;password&quot;</span>));</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;        <span class="keywordflow">if</span> (gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5b17067fb2b9437f1fdf607334dfade3">auth_first</a> &amp;&amp; s1 &amp;&amp; s2) {</div><div class="line"><a name="l00836"></a><span class="lineno">  836</span>&#160;            cred-&gt;userCredential.username = s1;</div><div class="line"><a name="l00837"></a><span class="lineno">  837</span>&#160;            cred-&gt;userCredential.password = s2;</div><div class="line"><a name="l00838"></a><span class="lineno">  838</span>&#160;        } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00839"></a><span class="lineno">  839</span>&#160;            g_free(s1);</div><div class="line"><a name="l00840"></a><span class="lineno">  840</span>&#160;            g_free(s2);</div><div class="line"><a name="l00841"></a><span class="lineno">  841</span>&#160;</div><div class="line"><a name="l00842"></a><span class="lineno">  842</span>&#160;            disablepasswordstoring = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a0c7eab256e1b1fdf84be44e28cddc3de">file_get_int</a>(remminafile, <span class="stringliteral">&quot;disablepasswordstoring&quot;</span>, FALSE);</div><div class="line"><a name="l00843"></a><span class="lineno">  843</span>&#160;            ret = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a9b4cfe0a97a34260e58784feef693704">protocol_plugin_init_auth</a>(gp,</div><div class="line"><a name="l00844"></a><span class="lineno">  844</span>&#160;                                        (disablepasswordstoring ? 0 : <a class="code" href="types_8h.html#a341a0a8b6509633809d99348cc3ba486a9b734c324722cf2982768feaeeb15c7c">REMMINA_MESSAGE_PANEL_FLAG_SAVEPASSWORD</a>) | <a class="code" href="types_8h.html#a341a0a8b6509633809d99348cc3ba486a10be0730fc3ea326856019ae139a922a">REMMINA_MESSAGE_PANEL_FLAG_USERNAME</a>,</div><div class="line"><a name="l00845"></a><span class="lineno">  845</span>&#160;                                        _(<span class="stringliteral">&quot;Enter VNC authentication credentials&quot;</span>),</div><div class="line"><a name="l00846"></a><span class="lineno">  846</span>&#160;                                        remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a673ff4320377c3b440dfd24a796c69fc">file_get_string</a>(remminafile, <span class="stringliteral">&quot;username&quot;</span>),</div><div class="line"><a name="l00847"></a><span class="lineno">  847</span>&#160;                                        remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a673ff4320377c3b440dfd24a796c69fc">file_get_string</a>(remminafile, <span class="stringliteral">&quot;password&quot;</span>),</div><div class="line"><a name="l00848"></a><span class="lineno">  848</span>&#160;                                        NULL,</div><div class="line"><a name="l00849"></a><span class="lineno">  849</span>&#160;                                        NULL);</div><div class="line"><a name="l00850"></a><span class="lineno">  850</span>&#160;            <span class="keywordflow">if</span> (ret == GTK_RESPONSE_OK) {</div><div class="line"><a name="l00851"></a><span class="lineno">  851</span>&#160;                gboolean save = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#af2b857b2de1af3621f543b810f68b17b">protocol_plugin_init_get_savepassword</a>(gp);</div><div class="line"><a name="l00852"></a><span class="lineno">  852</span>&#160;                cred-&gt;userCredential.username = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#ac892dd297fae87868752a1f86e07937d">protocol_plugin_init_get_username</a>(gp);</div><div class="line"><a name="l00853"></a><span class="lineno">  853</span>&#160;                cred-&gt;userCredential.password = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#ad98eaa3efc0214bc701dc66b5730e174">protocol_plugin_init_get_password</a>(gp);</div><div class="line"><a name="l00854"></a><span class="lineno">  854</span>&#160;                <span class="keywordflow">if</span> (save) {</div><div class="line"><a name="l00855"></a><span class="lineno">  855</span>&#160;                    remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a4880fb57479708bc1cb47bf6b4dcabc3">file_set_string</a>(remminafile, <span class="stringliteral">&quot;username&quot;</span>, cred-&gt;userCredential.username);</div><div class="line"><a name="l00856"></a><span class="lineno">  856</span>&#160;                    remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a4880fb57479708bc1cb47bf6b4dcabc3">file_set_string</a>(remminafile, <span class="stringliteral">&quot;password&quot;</span>, cred-&gt;userCredential.password);</div><div class="line"><a name="l00857"></a><span class="lineno">  857</span>&#160;                } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00858"></a><span class="lineno">  858</span>&#160;                    remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a4880fb57479708bc1cb47bf6b4dcabc3">file_set_string</a>(remminafile, <span class="stringliteral">&quot;username&quot;</span>, NULL);</div><div class="line"><a name="l00859"></a><span class="lineno">  859</span>&#160;                    remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a4880fb57479708bc1cb47bf6b4dcabc3">file_set_string</a>(remminafile, <span class="stringliteral">&quot;password&quot;</span>, NULL);</div><div class="line"><a name="l00860"></a><span class="lineno">  860</span>&#160;                }</div><div class="line"><a name="l00861"></a><span class="lineno">  861</span>&#160;            } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00862"></a><span class="lineno">  862</span>&#160;                g_free(cred);</div><div class="line"><a name="l00863"></a><span class="lineno">  863</span>&#160;                cred = NULL;</div><div class="line"><a name="l00864"></a><span class="lineno">  864</span>&#160;                gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#ab105fe07330946ed3687ad2d06fabe95">connected</a> = FALSE;</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;        }</div><div class="line"><a name="l00867"></a><span class="lineno">  867</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00868"></a><span class="lineno">  868</span>&#160;</div><div class="line"><a name="l00869"></a><span class="lineno">  869</span>&#160;    <span class="keywordflow">case</span> rfbCredentialTypeX509:</div><div class="line"><a name="l00870"></a><span class="lineno">  870</span>&#160;        <span class="keywordflow">if</span> (gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5b17067fb2b9437f1fdf607334dfade3">auth_first</a> &amp;&amp;</div><div class="line"><a name="l00871"></a><span class="lineno">  871</span>&#160;            remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a673ff4320377c3b440dfd24a796c69fc">file_get_string</a>(remminafile, <span class="stringliteral">&quot;cacert&quot;</span>)) {</div><div class="line"><a name="l00872"></a><span class="lineno">  872</span>&#160;            cred-&gt;x509Credential.x509CACertFile = g_strdup(remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a673ff4320377c3b440dfd24a796c69fc">file_get_string</a>(remminafile, <span class="stringliteral">&quot;cacert&quot;</span>));</div><div class="line"><a name="l00873"></a><span class="lineno">  873</span>&#160;            cred-&gt;x509Credential.x509CACrlFile = g_strdup(remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a673ff4320377c3b440dfd24a796c69fc">file_get_string</a>(remminafile, <span class="stringliteral">&quot;cacrl&quot;</span>));</div><div class="line"><a name="l00874"></a><span class="lineno">  874</span>&#160;            cred-&gt;x509Credential.x509ClientCertFile = g_strdup(remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a673ff4320377c3b440dfd24a796c69fc">file_get_string</a>(remminafile, <span class="stringliteral">&quot;clientcert&quot;</span>));</div><div class="line"><a name="l00875"></a><span class="lineno">  875</span>&#160;            cred-&gt;x509Credential.x509ClientKeyFile = g_strdup(remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a673ff4320377c3b440dfd24a796c69fc">file_get_string</a>(remminafile, <span class="stringliteral">&quot;clientkey&quot;</span>));</div><div class="line"><a name="l00876"></a><span class="lineno">  876</span>&#160;        } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00877"></a><span class="lineno">  877</span>&#160;            ret = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a54c773d5581087b272a9377893b92999">protocol_plugin_init_authx509</a>(gp);</div><div class="line"><a name="l00878"></a><span class="lineno">  878</span>&#160;</div><div class="line"><a name="l00879"></a><span class="lineno">  879</span>&#160;            <span class="keywordflow">if</span> (ret == GTK_RESPONSE_OK) {</div><div class="line"><a name="l00880"></a><span class="lineno">  880</span>&#160;                cred-&gt;x509Credential.x509CACertFile = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a9e481e56c9970b741a109c0af04c650d">protocol_plugin_init_get_cacert</a>(gp);</div><div class="line"><a name="l00881"></a><span class="lineno">  881</span>&#160;                cred-&gt;x509Credential.x509CACrlFile = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a8d1c34496a6def21e5ad7d871cd581b5">protocol_plugin_init_get_cacrl</a>(gp);</div><div class="line"><a name="l00882"></a><span class="lineno">  882</span>&#160;                cred-&gt;x509Credential.x509ClientCertFile = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a83e35d80f04cb3d6a8cc883f6a089a24">protocol_plugin_init_get_clientcert</a>(gp);</div><div class="line"><a name="l00883"></a><span class="lineno">  883</span>&#160;                cred-&gt;x509Credential.x509ClientKeyFile = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a7c5de526e0adaee6df2654987d92a834">protocol_plugin_init_get_clientkey</a>(gp);</div><div class="line"><a name="l00884"></a><span class="lineno">  884</span>&#160;            } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00885"></a><span class="lineno">  885</span>&#160;                g_free(cred);</div><div class="line"><a name="l00886"></a><span class="lineno">  886</span>&#160;                cred = NULL;</div><div class="line"><a name="l00887"></a><span class="lineno">  887</span>&#160;                gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#ab105fe07330946ed3687ad2d06fabe95">connected</a> = FALSE;</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;        }</div><div class="line"><a name="l00890"></a><span class="lineno">  890</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00891"></a><span class="lineno">  891</span>&#160;</div><div class="line"><a name="l00892"></a><span class="lineno">  892</span>&#160;    <span class="keywordflow">default</span>:</div><div class="line"><a name="l00893"></a><span class="lineno">  893</span>&#160;        g_free(cred);</div><div class="line"><a name="l00894"></a><span class="lineno">  894</span>&#160;        cred = NULL;</div><div class="line"><a name="l00895"></a><span class="lineno">  895</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00896"></a><span class="lineno">  896</span>&#160;    }</div><div class="line"><a name="l00897"></a><span class="lineno">  897</span>&#160;    <span class="keywordflow">return</span> cred;</div><div class="line"><a name="l00898"></a><span class="lineno">  898</span>&#160;}</div><div class="line"><a name="l00899"></a><span class="lineno">  899</span>&#160;</div><div class="line"><a name="l00900"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a7f128e63501e5f28aaf50c6d77111b14">  900</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="vnc__plugin_8c.html#a7f128e63501e5f28aaf50c6d77111b14">remmina_plugin_vnc_rfb_cursor_shape</a>(rfbClient *cl, <span class="keywordtype">int</span> xhot, <span class="keywordtype">int</span> yhot, <span class="keywordtype">int</span> <a class="code" href="structon_main_thread__cb__data.html#a8bf0f89b3c961ac28ccae9a9e1060db4">width</a>, <span class="keywordtype">int</span> <a class="code" href="structon_main_thread__cb__data.html#aa01cccfd573952ec0cd5df823e2d8f74">height</a>, <span class="keywordtype">int</span> bytesPerPixel)</div><div class="line"><a name="l00901"></a><span class="lineno">  901</span>&#160;{</div><div class="line"><a name="l00902"></a><span class="lineno">  902</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00903"></a><span class="lineno">  903</span>&#160;    <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a> = rfbClientGetClientData(cl, NULL);</div><div class="line"><a name="l00904"></a><span class="lineno">  904</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l00905"></a><span class="lineno">  905</span>&#160;</div><div class="line"><a name="l00906"></a><span class="lineno">  906</span>&#160;    <span class="keywordflow">if</span> (!gtk_widget_get_window(GTK_WIDGET(gp)))</div><div class="line"><a name="l00907"></a><span class="lineno">  907</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00908"></a><span class="lineno">  908</span>&#160;</div><div class="line"><a name="l00909"></a><span class="lineno">  909</span>&#160;    <span class="keywordflow">if</span> (width &amp;&amp; height) {</div><div class="line"><a name="l00910"></a><span class="lineno">  910</span>&#160;        gint stride = cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, width);</div><div class="line"><a name="l00911"></a><span class="lineno">  911</span>&#160;        guchar *data = g_malloc(stride * height);</div><div class="line"><a name="l00912"></a><span class="lineno">  912</span>&#160;        <a class="code" href="vnc__plugin_8c.html#a1266cacd4af9e75fb043669f88fbd108">remmina_plugin_vnc_rfb_fill_buffer</a>(cl, data, stride, cl-&gt;rcSource,</div><div class="line"><a name="l00913"></a><span class="lineno">  913</span>&#160;                           width * cl-&gt;format.bitsPerPixel / 8, cl-&gt;rcMask, width, height);</div><div class="line"><a name="l00914"></a><span class="lineno">  914</span>&#160;        cairo_surface_t *surface = cairo_image_surface_create_for_data(data, CAIRO_FORMAT_ARGB32, width, height, stride);</div><div class="line"><a name="l00915"></a><span class="lineno">  915</span>&#160;        <span class="keywordflow">if</span> (cairo_surface_status(surface) != CAIRO_STATUS_SUCCESS) {</div><div class="line"><a name="l00916"></a><span class="lineno">  916</span>&#160;            g_free(data);</div><div class="line"><a name="l00917"></a><span class="lineno">  917</span>&#160;            <span class="keywordflow">return</span>;</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;        <span class="keywordflow">if</span> (cairo_surface_set_user_data(surface, NULL, NULL, g_free) != CAIRO_STATUS_SUCCESS) {</div><div class="line"><a name="l00920"></a><span class="lineno">  920</span>&#160;            g_free(data);</div><div class="line"><a name="l00921"></a><span class="lineno">  921</span>&#160;            <span class="keywordflow">return</span>;</div><div class="line"><a name="l00922"></a><span class="lineno">  922</span>&#160;        }</div><div class="line"><a name="l00923"></a><span class="lineno">  923</span>&#160;</div><div class="line"><a name="l00924"></a><span class="lineno">  924</span>&#160;        LOCK_BUFFER(TRUE);</div><div class="line"><a name="l00925"></a><span class="lineno">  925</span>&#160;        <a class="code" href="vnc__plugin_8c.html#a80cd2a03f3f695edbb1ac9ee8c680a5c">remmina_plugin_vnc_queuecursor</a>(gp, surface, xhot, yhot);</div><div class="line"><a name="l00926"></a><span class="lineno">  926</span>&#160;        UNLOCK_BUFFER(TRUE);</div><div class="line"><a name="l00927"></a><span class="lineno">  927</span>&#160;    }</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;</div><div class="line"><a name="l00930"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#aea5839c1087d585275c487093112f2ac">  930</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="vnc__plugin_8c.html#aea5839c1087d585275c487093112f2ac">remmina_plugin_vnc_rfb_bell</a>(rfbClient *cl)</div><div class="line"><a name="l00931"></a><span class="lineno">  931</span>&#160;{</div><div class="line"><a name="l00932"></a><span class="lineno">  932</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00933"></a><span class="lineno">  933</span>&#160;    REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;Bell message received&quot;</span>);</div><div class="line"><a name="l00934"></a><span class="lineno">  934</span>&#160;    <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>;</div><div class="line"><a name="l00935"></a><span class="lineno">  935</span>&#160;    <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l00936"></a><span class="lineno">  936</span>&#160;    GdkWindow *window;</div><div class="line"><a name="l00937"></a><span class="lineno">  937</span>&#160;</div><div class="line"><a name="l00938"></a><span class="lineno">  938</span>&#160;    gp = (<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *)(rfbClientGetClientData(cl, NULL));</div><div class="line"><a name="l00939"></a><span class="lineno">  939</span>&#160;    remminafile = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a1409dcc143ddc35de86b792df095cfc4">protocol_plugin_get_file</a>(gp);</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;    <span class="keywordflow">if</span> (remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a0c7eab256e1b1fdf84be44e28cddc3de">file_get_int</a>(remminafile, <span class="stringliteral">&quot;disableserverbell&quot;</span>, FALSE))</div><div class="line"><a name="l00942"></a><span class="lineno">  942</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00943"></a><span class="lineno">  943</span>&#160;</div><div class="line"><a name="l00944"></a><span class="lineno">  944</span>&#160;    window = gtk_widget_get_window(GTK_WIDGET(gp));</div><div class="line"><a name="l00945"></a><span class="lineno">  945</span>&#160;</div><div class="line"><a name="l00946"></a><span class="lineno">  946</span>&#160;    <span class="keywordflow">if</span> (window)</div><div class="line"><a name="l00947"></a><span class="lineno">  947</span>&#160;        gdk_window_beep(window);</div><div class="line"><a name="l00948"></a><span class="lineno">  948</span>&#160;    REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;Beep emitted&quot;</span>);</div><div class="line"><a name="l00949"></a><span class="lineno">  949</span>&#160;}</div><div class="line"><a name="l00950"></a><span class="lineno">  950</span>&#160;</div><div class="line"><a name="l00951"></a><span class="lineno">  951</span>&#160;<span class="comment">/* Translate known VNC messages. It’s for intltool only, not for gcc */</span></div><div class="line"><a name="l00952"></a><span class="lineno">  952</span>&#160;<span class="preprocessor">#ifdef __DO_NOT_COMPILE_ME__</span></div><div class="line"><a name="l00953"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">  953</a></span>&#160;<a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Unable to connect to VNC server&quot;</span>)</div><div class="line"><a name="l00954"></a><span class="lineno">  954</span>&#160;<a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(&quot;Couldn’t convert &#39;%s&#39; to host address&quot;)</div><div class="line"><a name="l00955"></a><span class="lineno">  955</span>&#160;<a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(&quot;VNC connection failed: %s&quot;)</div><div class="line"><a name="l00956"></a><span class="lineno">  956</span>&#160;<a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(&quot;Your connection has been rejected.&quot;)</div><div class="line"><a name="l00957"></a><span class="lineno">  957</span>&#160;<span class="preprocessor">#endif</span></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;<span class="preprocessor">#define MAX_ERROR_LENGTH 1000</span></div><div class="line"><a name="l00960"></a><span class="lineno">  960</span>&#160;<span class="keyword">static</span> gchar vnc_error[MAX_ERROR_LENGTH + 1];</div><div class="line"><a name="l00961"></a><span class="lineno">  961</span>&#160;<span class="keyword">static</span> gboolean vnc_encryption_disable_requested;</div><div class="line"><a name="l00962"></a><span class="lineno">  962</span>&#160;</div><div class="line"><a name="l00963"></a><span class="lineno">  963</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> remmina_plugin_vnc_rfb_output(<span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...)</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;    TRACE_CALL(__func__);</div><div class="line"><a name="l00966"></a><span class="lineno">  966</span>&#160;    gchar *f, *p, *ff;</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> (!rfbEnableClientLogging)</div><div class="line"><a name="l00969"></a><span class="lineno">  969</span>&#160;        <span class="keywordflow">return</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;    va_list args;</div><div class="line"><a name="l00972"></a><span class="lineno">  972</span>&#160;    va_start(args, format);</div><div class="line"><a name="l00973"></a><span class="lineno">  973</span>&#160;    <span class="comment">/* eliminate the last \n */</span></div><div class="line"><a name="l00974"></a><span class="lineno">  974</span>&#160;    f = g_strdup(format);</div><div class="line"><a name="l00975"></a><span class="lineno">  975</span>&#160;    <span class="keywordflow">if</span> (f[strlen(f) - 1] == <span class="charliteral">&#39;\n&#39;</span>) f[strlen(f) - 1] = <span class="charliteral">&#39;\0&#39;</span>;</div><div class="line"><a name="l00976"></a><span class="lineno">  976</span>&#160;</div><div class="line"><a name="l00977"></a><span class="lineno">  977</span>&#160;    <span class="keywordflow">if</span> (g_strcmp0(f, <span class="stringliteral">&quot;VNC connection failed: %s&quot;</span>) == 0) {</div><div class="line"><a name="l00978"></a><span class="lineno">  978</span>&#160;        p = va_arg(args, gchar *);</div><div class="line"><a name="l00979"></a><span class="lineno">  979</span>&#160;        g_snprintf(vnc_error, MAX_ERROR_LENGTH, _(f), _(p));</div><div class="line"><a name="l00980"></a><span class="lineno">  980</span>&#160;    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (g_strcmp0(f, <span class="stringliteral">&quot;The VNC server requested an unknown authentication method. %s&quot;</span>) == 0) {</div><div class="line"><a name="l00981"></a><span class="lineno">  981</span>&#160;        p = va_arg(args, gchar *);</div><div class="line"><a name="l00982"></a><span class="lineno">  982</span>&#160;        <span class="keywordflow">if</span> (vnc_encryption_disable_requested) {</div><div class="line"><a name="l00983"></a><span class="lineno">  983</span>&#160;            ff = g_strconcat(_(<span class="stringliteral">&quot;The VNC server requested an unknown authentication method. %s&quot;</span>),</div><div class="line"><a name="l00984"></a><span class="lineno">  984</span>&#160;                     <span class="stringliteral">&quot;. &quot;</span>,</div><div class="line"><a name="l00985"></a><span class="lineno">  985</span>&#160;                     _(<span class="stringliteral">&quot;Please retry after turning on encryption for this profile.&quot;</span>),</div><div class="line"><a name="l00986"></a><span class="lineno">  986</span>&#160;                     NULL);</div><div class="line"><a name="l00987"></a><span class="lineno">  987</span>&#160;            g_snprintf(vnc_error, MAX_ERROR_LENGTH, ff, p);</div><div class="line"><a name="l00988"></a><span class="lineno">  988</span>&#160;            g_free(ff);</div><div class="line"><a name="l00989"></a><span class="lineno">  989</span>&#160;        } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00990"></a><span class="lineno">  990</span>&#160;            g_snprintf(vnc_error, MAX_ERROR_LENGTH, _(f), p);</div><div class="line"><a name="l00991"></a><span class="lineno">  991</span>&#160;        }</div><div class="line"><a name="l00992"></a><span class="lineno">  992</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00993"></a><span class="lineno">  993</span>&#160;        g_vsnprintf(vnc_error, MAX_ERROR_LENGTH, _(f), args);</div><div class="line"><a name="l00994"></a><span class="lineno">  994</span>&#160;    }</div><div class="line"><a name="l00995"></a><span class="lineno">  995</span>&#160;    g_free(f);</div><div class="line"><a name="l00996"></a><span class="lineno">  996</span>&#160;    va_end(args);</div><div class="line"><a name="l00997"></a><span class="lineno">  997</span>&#160;</div><div class="line"><a name="l00998"></a><span class="lineno">  998</span>&#160;    REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;VNC returned: %s&quot;</span>, vnc_error);</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;</div><div class="line"><a name="l01001"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#aae9ff42cb268892f94cf7ed3070d4b5a"> 1001</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="vnc__plugin_8c.html#aae9ff42cb268892f94cf7ed3070d4b5a">remmina_plugin_vnc_chat_on_send</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>, <span class="keyword">const</span> gchar *text)</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160;{</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;    gchar *ptr;</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160;</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;    <span class="comment">/* Need to add a line-feed for UltraVNC */</span></div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160;    ptr = g_strdup_printf(<span class="stringliteral">&quot;%s\n&quot;</span>, text);</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160;    <a class="code" href="vnc__plugin_8c.html#a885240d470f95a89ac67051da38fa01d">remmina_plugin_vnc_event_push</a>(gp, <a class="code" href="vnc__plugin_8h.html#a2f80701c36e79c0640d91c788feee0b3a0723d566806911ca2ed79d03214fe4ee">REMMINA_PLUGIN_VNC_EVENT_CHAT_SEND</a>, ptr, NULL, NULL);</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;    g_free(ptr);</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160;}</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;</div><div class="line"><a name="l01012"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#ad43b46448de165f501529d6b203ca8ca"> 1012</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="vnc__plugin_8c.html#ad43b46448de165f501529d6b203ca8ca">remmina_plugin_vnc_chat_on_destroy</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>)</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160;{</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160;    <a class="code" href="vnc__plugin_8c.html#a885240d470f95a89ac67051da38fa01d">remmina_plugin_vnc_event_push</a>(gp, <a class="code" href="vnc__plugin_8h.html#a2f80701c36e79c0640d91c788feee0b3a4588937e7ecca9c67f043eabff7de4df">REMMINA_PLUGIN_VNC_EVENT_CHAT_CLOSE</a>, NULL, NULL, NULL);</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160;}</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160;</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160;<span class="comment">/* Send CTRL+ALT+DEL keys keystrokes to the plugin drawing_area widget */</span></div><div class="line"><a name="l01019"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#acb2067d0a9a7a7e6d9f26b0357fbf0e1"> 1019</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="vnc__plugin_8c.html#acb2067d0a9a7a7e6d9f26b0357fbf0e1">remmina_plugin_vnc_send_ctrlaltdel</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>)</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160;{</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;    guint keys[] = { GDK_KEY_Control_L, GDK_KEY_Alt_L, GDK_KEY_Delete };</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata = GET_PLUGIN_DATA(gp);</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;    remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a2d6704aa58ecc18ecc178ea418addd87">protocol_plugin_send_keys_signals</a>(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#acf12d2c89046160dddcae35af84e5e57">drawing_area</a>,</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160;                                  keys, G_N_ELEMENTS(keys), GDK_KEY_PRESS | GDK_KEY_RELEASE);</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160;}</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160;</div><div class="line"><a name="l01029"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a5e82957848c696045b21f365827e11c7"> 1029</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="vnc__plugin_8c.html#a5e82957848c696045b21f365827e11c7">remmina_plugin_vnc_close_chat</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>)</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160;{</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;    remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a83f3c05d16949a06cdddb5c7432b5053">protocol_plugin_chat_close</a>(gp);</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160;    <span class="keywordflow">return</span> FALSE;</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="vnc__plugin_8c.html#a4d672e305030849447b5b8b522d82242"> 1036</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="vnc__plugin_8c.html#a4d672e305030849447b5b8b522d82242">remmina_plugin_vnc_open_chat</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>)</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;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160;    rfbClient *cl;</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160;    cl = (rfbClient *)gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a33bc751b1d5728b624bfa57814504f90">client</a>;</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160;</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;    remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#ab8bbe7ce317cb9e97da8bf0e34459030">protocol_plugin_chat_open</a>(gp, cl-&gt;desktopName, <a class="code" href="vnc__plugin_8c.html#aae9ff42cb268892f94cf7ed3070d4b5a">remmina_plugin_vnc_chat_on_send</a>,</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160;                              <a class="code" href="vnc__plugin_8c.html#ad43b46448de165f501529d6b203ca8ca">remmina_plugin_vnc_chat_on_destroy</a>);</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160;    <a class="code" href="vnc__plugin_8c.html#a885240d470f95a89ac67051da38fa01d">remmina_plugin_vnc_event_push</a>(gp, <a class="code" href="vnc__plugin_8h.html#a2f80701c36e79c0640d91c788feee0b3aa818c3e00b67a01cdee20db2136a7718">REMMINA_PLUGIN_VNC_EVENT_CHAT_OPEN</a>, NULL, NULL, NULL);</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160;    <span class="keywordflow">return</span> FALSE;</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;</div><div class="line"><a name="l01050"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a1aaa1353346af3f9e18347768d5dc5b1"> 1050</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="vnc__plugin_8c.html#a1aaa1353346af3f9e18347768d5dc5b1">remmina_plugin_vnc_rfb_chat</a>(rfbClient *cl, <span class="keywordtype">int</span> value, <span class="keywordtype">char</span> *text)</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"> 1052</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160;    <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>;</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160;</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160;    gp = (<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *)(rfbClientGetClientData(cl, NULL));</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160;    <span class="keywordflow">switch</span> (value) {</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160;    <span class="keywordflow">case</span> rfbTextChatOpen:</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;        IDLE_ADD((GSourceFunc)<a class="code" href="vnc__plugin_8c.html#a4d672e305030849447b5b8b522d82242">remmina_plugin_vnc_open_chat</a>, gp);</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;    <span class="keywordflow">case</span> rfbTextChatClose:</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;        <span class="comment">/* Do nothing… but wait for the next rfbTextChatFinished signal */</span></div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;    <span class="keywordflow">case</span> rfbTextChatFinished:</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;        IDLE_ADD((GSourceFunc)<a class="code" href="vnc__plugin_8c.html#a5e82957848c696045b21f365827e11c7">remmina_plugin_vnc_close_chat</a>, gp);</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160;    <span class="keywordflow">default</span>:</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;        <span class="comment">/* value is the text length */</span></div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;        remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a881a79477d6e122c0aed7d5528ab6b9a">protocol_plugin_chat_receive</a>(gp, text);</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;    }</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;}</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"><a class="line" href="vnc__plugin_8c.html#a50903bb7e69828cee9c16e8367715a42"> 1073</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="vnc__plugin_8c.html#a50903bb7e69828cee9c16e8367715a42">remmina_plugin_vnc_incoming_connection</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>, rfbClient *cl)</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;{</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;    fd_set fds;</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160;</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;    gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a41dc885437b90c87b6a8b4367b0ba63c">listen_sock</a> = ListenAtTcpPort(cl-&gt;listenPort);</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160;    <span class="keywordflow">if</span> (gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a41dc885437b90c87b6a8b4367b0ba63c">listen_sock</a> &lt; 0)</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160;    remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a2a2ce8e15512459b816ce22cfe5c0550">protocol_plugin_init_show_listen</a>(gp, cl-&gt;listenPort);</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160;</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;    remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#ad0f29c76e2ec9ea145faab2313e94749">protocol_plugin_start_reverse_tunnel</a>(gp, cl-&gt;listenPort);</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160;    FD_ZERO(&amp;fds);</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160;    <span class="keywordflow">if</span> (gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a41dc885437b90c87b6a8b4367b0ba63c">listen_sock</a> &gt;= 0)</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160;        FD_SET(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a41dc885437b90c87b6a8b4367b0ba63c">listen_sock</a>, &amp;fds);</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160;</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160;    select(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a41dc885437b90c87b6a8b4367b0ba63c">listen_sock</a> + 1, &amp;fds, NULL, NULL, NULL);</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160;</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;    <span class="keywordflow">if</span> (!FD_ISSET(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a41dc885437b90c87b6a8b4367b0ba63c">listen_sock</a>, &amp;fds)) {</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;        close(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a41dc885437b90c87b6a8b4367b0ba63c">listen_sock</a>);</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a41dc885437b90c87b6a8b4367b0ba63c">listen_sock</a> = -1;</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160;        <span class="keywordflow">return</span> FALSE;</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"> 1103</span>&#160;    <span class="keywordflow">if</span> (FD_ISSET(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a41dc885437b90c87b6a8b4367b0ba63c">listen_sock</a>, &amp;fds))</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160;        cl-&gt;sock = AcceptTcpConnection(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a41dc885437b90c87b6a8b4367b0ba63c">listen_sock</a>);</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160;    <span class="keywordflow">if</span> (cl-&gt;sock &gt;= 0) {</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160;        close(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a41dc885437b90c87b6a8b4367b0ba63c">listen_sock</a>);</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a41dc885437b90c87b6a8b4367b0ba63c">listen_sock</a> = -1;</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160;    }</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160;    <span class="keywordflow">if</span> (cl-&gt;sock &lt; 0 || !SetNonBlocking(cl-&gt;sock))</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160;</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160;    <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160;}</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160;</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"><a class="line" href="vnc__plugin_8c.html#a093245037037f681c4ffe6356d916a02"> 1116</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="vnc__plugin_8c.html#a093245037037f681c4ffe6356d916a02">remmina_plugin_vnc_main_loop</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>)</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160;{</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160;    gint ret;</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160;    gint i;</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160;    rfbClient *cl;</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160;    fd_set fds;</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;    <span class="keyword">struct </span>timeval timeout;</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"> 1126</span>&#160;    <span class="keywordflow">if</span> (!gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#ab105fe07330946ed3687ad2d06fabe95">connected</a>) {</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#ac4e1f4b6fc95c31896cc50f315312f93">running</a> = FALSE;</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160;    }</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160;</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160;    cl = (rfbClient *)gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a33bc751b1d5728b624bfa57814504f90">client</a>;</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;    <span class="comment">/*</span></div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160;<span class="comment">     * Do not explicitly wait while data is on the buffer, see:</span></div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160;<span class="comment">     * - https://jira.glyptodon.com/browse/GUAC-1056</span></div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160;<span class="comment">     * - https://jira.glyptodon.com/browse/GUAC-1056?focusedCommentId=14348&amp;page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-14348</span></div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160;<span class="comment">     * - https://github.com/apache/guacamole-server/blob/67680bd2d51e7949453f0f7ffc7f4234a1136715/src/protocols/vnc/vnc.c#L155</span></div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160;<span class="comment">     */</span></div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160;    if (cl-&gt;buffered)</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160;        <span class="keywordflow">goto</span> handle_buffered;</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160;</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160;    timeout.tv_sec = 10;</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160;    timeout.tv_usec = 0;</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160;    FD_ZERO(&amp;fds);</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160;    FD_SET(cl-&gt;sock, &amp;fds);</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160;    FD_SET(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a625ea21fb2d92cb8489d3c9e5a2477ea">vnc_event_pipe</a>[0], &amp;fds);</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160;    ret = select(MAX(cl-&gt;sock, gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a625ea21fb2d92cb8489d3c9e5a2477ea">vnc_event_pipe</a>[0]) + 1, &amp;fds, NULL, NULL, &amp;timeout);</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160;</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160;    <span class="comment">/* Sometimes it returns &lt;0 when opening a modal dialog in other window. Absolutely weird */</span></div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160;    <span class="comment">/* So we continue looping anyway */</span></div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160;    <span class="keywordflow">if</span> (ret &lt;= 0)</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160;        <span class="keywordflow">return</span> TRUE;</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="keywordflow">if</span> (FD_ISSET(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a625ea21fb2d92cb8489d3c9e5a2477ea">vnc_event_pipe</a>[0], &amp;fds))</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160;        <a class="code" href="vnc__plugin_8c.html#aee8a8cf42ad03be152f4f5a751798383">remmina_plugin_vnc_process_vnc_event</a>(gp);</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160;    <span class="keywordflow">if</span> (FD_ISSET(cl-&gt;sock, &amp;fds)) {</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160;        i = WaitForMessage(cl, 500);</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160;        <span class="keywordflow">if</span> (i &lt; 0)</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160;            <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160;handle_buffered:</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160;        <span class="keywordflow">if</span> (!HandleRFBServerMessage(cl)) {</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160;            gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#ac4e1f4b6fc95c31896cc50f315312f93">running</a> = FALSE;</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160;            <span class="keywordflow">if</span> (gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#ab105fe07330946ed3687ad2d06fabe95">connected</a> &amp;&amp; !remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a4eac7cd317ef677917c2fa7b1859a189">protocol_plugin_is_closed</a>(gp))</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;                remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#ab58b7bf5f91c5f60349a8242e6322f7f">protocol_plugin_signal_connection_closed</a>(gp);</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;            <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;        }</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160;    }</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;</div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160;    <span class="keywordflow">return</span> TRUE;</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="vnc__plugin_8c.html#a8648ba06e3c1b7093147ae9a1c576452"> 1172</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="vnc__plugin_8c.html#a8648ba06e3c1b7093147ae9a1c576452">remmina_plugin_vnc_main</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>)</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="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160;    <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160;    rfbClient *cl = NULL;</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160;    gchar *host;</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160;    gchar *s = NULL;</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160;    </div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160;    remminafile = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a1409dcc143ddc35de86b792df095cfc4">protocol_plugin_get_file</a>(gp);</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160;    gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#ac4e1f4b6fc95c31896cc50f315312f93">running</a> = TRUE;</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160;</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160;    rfbClientLog = rfbClientErr = remmina_plugin_vnc_rfb_output;</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160;</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160;    gint colordepth = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a0c7eab256e1b1fdf84be44e28cddc3de">file_get_int</a>(remminafile, <span class="stringliteral">&quot;colordepth&quot;</span>, 32);</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160;    gint quality = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a0c7eab256e1b1fdf84be44e28cddc3de">file_get_int</a>(remminafile, <span class="stringliteral">&quot;quality&quot;</span>, 9);</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160;</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160;    <span class="keywordflow">while</span> (gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#ab105fe07330946ed3687ad2d06fabe95">connected</a>) {</div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a782a902d036e12eb08bfcd1006c12b97">auth_called</a> = FALSE;</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;        host = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#ae95121f8f944c058d4f0683073f79183">protocol_plugin_start_direct_tunnel</a>(gp, VNC_DEFAULT_PORT, TRUE);</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160;</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160;        <span class="keywordflow">if</span> (host == NULL) {</div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160;            REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;host is null&quot;</span>);</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160;            gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#ab105fe07330946ed3687ad2d06fabe95">connected</a> = FALSE;</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160;        }</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;        <span class="comment">/* int bitsPerSample,int samplesPerPixel, int bytesPerPixel */</span></div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160;        <span class="keywordflow">switch</span> (colordepth) {</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160;        <span class="keywordflow">case</span> 8:</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160;            cl = rfbGetClient(2, 3, 1);</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;        <span class="keywordflow">case</span> 15:</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;        <span class="keywordflow">case</span> 16:</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;            cl = rfbGetClient(5, 3, 2);</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160;        <span class="keywordflow">case</span> 24:</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160;            cl = rfbGetClient(6, 3, 3);</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160;        <span class="keywordflow">case</span> 32:</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160;        <span class="keywordflow">default</span>:</div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160;            cl = rfbGetClient(8, 3, 4);</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160;        }</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160;        REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;Color depth: %d&quot;</span>, colordepth);</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160;        cl-&gt;MallocFrameBuffer = <a class="code" href="vnc__plugin_8c.html#a91cf510208363f5678c65f420d2d0586">remmina_plugin_vnc_rfb_allocfb</a>;</div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160;        cl-&gt;canHandleNewFBSize = TRUE;</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160;        cl-&gt;GetPassword = <a class="code" href="vnc__plugin_8c.html#ab553977a035eea4d913b2cfaaf49a003">remmina_plugin_vnc_rfb_password</a>;</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160;        cl-&gt;GetCredential = <a class="code" href="vnc__plugin_8c.html#ab3bb0ef97fadc9782e47cf1dd011a19d">remmina_plugin_vnc_rfb_credential</a>;</div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160;        cl-&gt;GotFrameBufferUpdate = <a class="code" href="vnc__plugin_8c.html#af77b4e3099a5d382aa4b840e4aecaadc">remmina_plugin_vnc_rfb_updatefb</a>;</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160;        cl-&gt;HandleKeyboardLedState = <a class="code" href="vnc__plugin_8c.html#a3d316a2257bd539a6d5d0e0247810fe5">remmina_plugin_vnc_rfb_led_state</a>;</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160;        cl-&gt;GotXCutText = (</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160;            remmina_plugin_service-&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="l01236"></a><span class="lineno"> 1236</span>&#160;            NULL : <a class="code" href="vnc__plugin_8c.html#ad67a66a0788c440bd755e300645155c1">remmina_plugin_vnc_rfb_cuttext</a>);</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160;        cl-&gt;GotCursorShape = <a class="code" href="vnc__plugin_8c.html#a7f128e63501e5f28aaf50c6d77111b14">remmina_plugin_vnc_rfb_cursor_shape</a>;</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160;        cl-&gt;Bell = <a class="code" href="vnc__plugin_8c.html#aea5839c1087d585275c487093112f2ac">remmina_plugin_vnc_rfb_bell</a>;</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160;        cl-&gt;HandleTextChat = <a class="code" href="vnc__plugin_8c.html#a1aaa1353346af3f9e18347768d5dc5b1">remmina_plugin_vnc_rfb_chat</a>;</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160;        rfbClientSetClientData(cl, NULL, gp);</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160;</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160;        <span class="keywordflow">if</span> (host[0] == <span class="charliteral">&#39;\0&#39;</span>) {</div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160;            cl-&gt;serverHost = g_strdup(host);</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160;            cl-&gt;listenSpecified = TRUE;</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160;            <span class="keywordflow">if</span> (remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a0c7eab256e1b1fdf84be44e28cddc3de">file_get_int</a>(remminafile, <span class="stringliteral">&quot;ssh_tunnel_enabled&quot;</span>, FALSE))</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160;                <span class="comment">/* When we use reverse tunnel, the local port does not really matter.</span></div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160;<span class="comment">                 * Hardcode a default port just in case the remote port is customized</span></div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160;<span class="comment">                 * to a privilege port then we will have problem listening. */</span></div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160;                cl-&gt;listenPort = 5500;</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160;            <span class="keywordflow">else</span></div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160;                cl-&gt;listenPort = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a0c7eab256e1b1fdf84be44e28cddc3de">file_get_int</a>(remminafile, <span class="stringliteral">&quot;listenport&quot;</span>, 5500);</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160;</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160;            <a class="code" href="vnc__plugin_8c.html#a50903bb7e69828cee9c16e8367715a42">remmina_plugin_vnc_incoming_connection</a>(gp, cl);</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160;        } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160;            <span class="keywordflow">if</span> (strstr(host, <span class="stringliteral">&quot;unix://&quot;</span>) == host) {</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160;                cl-&gt;serverHost = g_strdup(host + strlen(<span class="stringliteral">&quot;unix://&quot;</span>));</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160;                cl-&gt;serverPort  = 0;</div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160;            } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160;                remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a6fdfd3063906f49157225f536537bb0f">get_server_port</a>(host, VNC_DEFAULT_PORT, &amp;s, &amp;cl-&gt;serverPort);</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160;                cl-&gt;serverHost = g_strdup(s);</div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160;                g_free(s);</div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160;                <span class="comment">/* Support short-form (:0, :1) */</span></div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160;                <span class="keywordflow">if</span> (cl-&gt;serverPort &lt; 100)</div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160;                    cl-&gt;serverPort += VNC_DEFAULT_PORT;</div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160;            }</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160;        }</div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160;        g_free(host);</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160;        host = NULL;</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160;</div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160;        <span class="keywordflow">if</span> (cl-&gt;serverHost &amp;&amp; strstr(cl-&gt;serverHost, <span class="stringliteral">&quot;unix://&quot;</span>) != cl-&gt;serverHost &amp;&amp; remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a673ff4320377c3b440dfd24a796c69fc">file_get_string</a>(remminafile, <span class="stringliteral">&quot;proxy&quot;</span>)) {</div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160;            remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a6fdfd3063906f49157225f536537bb0f">get_server_port</a>(</div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160;                remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a673ff4320377c3b440dfd24a796c69fc">file_get_string</a>(remminafile, <span class="stringliteral">&quot;server&quot;</span>),</div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160;                VNC_DEFAULT_PORT,</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160;                &amp;cl-&gt;destHost,</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160;                &amp;cl-&gt;destPort);</div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160;            remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a6fdfd3063906f49157225f536537bb0f">get_server_port</a>(</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160;                remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a673ff4320377c3b440dfd24a796c69fc">file_get_string</a>(remminafile, <span class="stringliteral">&quot;proxy&quot;</span>),</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160;                VNC_DEFAULT_PORT,</div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160;                &amp;cl-&gt;serverHost,</div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160;                &amp;cl-&gt;serverPort);</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160;            REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;cl-&gt;serverHost: %s&quot;</span>, cl-&gt;serverHost);</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160;            REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;cl-&gt;serverPort: %d&quot;</span>, cl-&gt;serverPort);</div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160;            REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;cl-&gt;destHost: %s&quot;</span>, cl-&gt;destHost);</div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160;            REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;cl-&gt;destPort: %d&quot;</span>, cl-&gt;destPort);</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;</div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160;        cl-&gt;appData.useRemoteCursor = (</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160;            remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a0c7eab256e1b1fdf84be44e28cddc3de">file_get_int</a>(remminafile, <span class="stringliteral">&quot;showcursor&quot;</span>, FALSE) ? FALSE : TRUE);</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160;</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160;        <a class="code" href="vnc__plugin_8c.html#aa09286b99e12ea23e6a6ea14c5488469">remmina_plugin_vnc_update_quality</a>(cl, quality);</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160;        <a class="code" href="vnc__plugin_8c.html#a7149c702b5beec6fccbf5d4207e0ff55">remmina_plugin_vnc_update_colordepth</a>(cl, colordepth);</div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160;        <span class="keywordflow">if</span> ((cl-&gt;format.depth == 8) &amp;&amp; (quality == 9))</div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160;            cl-&gt;appData.encodingsString = <span class="stringliteral">&quot;copyrect zlib hextile raw&quot;</span>;</div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((cl-&gt;format.depth == 8) &amp;&amp; (quality == 2))</div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160;            cl-&gt;appData.encodingsString = <span class="stringliteral">&quot;zrle ultra copyrect hextile zlib corre rre raw&quot;</span>;</div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((cl-&gt;format.depth == 8) &amp;&amp; (quality == 1))</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160;            cl-&gt;appData.encodingsString = <span class="stringliteral">&quot;zrle ultra copyrect hextile zlib corre rre raw&quot;</span>;</div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((cl-&gt;format.depth == 8) &amp;&amp; (quality == 0))</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160;            cl-&gt;appData.encodingsString = <span class="stringliteral">&quot;zrle ultra copyrect hextile zlib corre rre raw&quot;</span>;</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160;        SetFormatAndEncodings(cl);</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">if</span> (remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a0c7eab256e1b1fdf84be44e28cddc3de">file_get_int</a>(remminafile, <span class="stringliteral">&quot;disableencryption&quot;</span>, FALSE)) {</div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160;            vnc_encryption_disable_requested = TRUE;</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160;            SetClientAuthSchemes(cl, <a class="code" href="vnc__plugin_8c.html#aa6380a77d4119e8ce70c2d46fd60aece">remmina_plugin_vnc_no_encrypt_auth_types</a>, -1);</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160;        } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160;            vnc_encryption_disable_requested = FALSE;</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"> 1314</span>&#160;        <span class="keywordflow">if</span> (rfbInitClient(cl, NULL, NULL)) {</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160;            REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;Client initialization successfull&quot;</span>);</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160;        } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160;            REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;Client initialization failed&quot;</span>);</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"> 1320</span>&#160;</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160;        <span class="comment">/* If the authentication is not called, it has to be a fatal error and must quit */</span></div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160;        <span class="keywordflow">if</span> (!gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a782a902d036e12eb08bfcd1006c12b97">auth_called</a>) {</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160;            REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;Client not authenticated&quot;</span>);</div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160;            gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#ab105fe07330946ed3687ad2d06fabe95">connected</a> = FALSE;</div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160;        }</div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160;</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160;        <span class="comment">/* vnc4server reports &quot;already in use&quot; after authentication. Workaround here */</span></div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160;        <span class="keywordflow">if</span> (strstr(vnc_error, <span class="stringliteral">&quot;The server is already in use&quot;</span>)) {</div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160;            gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#ab105fe07330946ed3687ad2d06fabe95">connected</a> = FALSE;</div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160;            gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a782a902d036e12eb08bfcd1006c12b97">auth_called</a> = FALSE;</div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160;        }</div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160;        <span class="comment">/* Don&#39;t assume authentication failed for known network-related errors in</span></div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160;<span class="comment">           libvncclient/sockets.c. */</span></div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160;        <span class="keywordflow">if</span> (strstr(vnc_error, <span class="stringliteral">&quot;read (&quot;</span>) || strstr(vnc_error, <span class="stringliteral">&quot;select\n&quot;</span>) ||</div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160;            strstr(vnc_error, <span class="stringliteral">&quot;write\n&quot;</span>) || strstr(vnc_error, <span class="stringliteral">&quot;Connection timed out&quot;</span>)) {</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160;            gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#ab105fe07330946ed3687ad2d06fabe95">connected</a> = FALSE;</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160;            gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a782a902d036e12eb08bfcd1006c12b97">auth_called</a> = FALSE;</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160;            <span class="keywordflow">break</span>;</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;</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160;        <span class="comment">/* Otherwise, it’s a password error. Try to clear saved password if any */</span></div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160;        remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a4880fb57479708bc1cb47bf6b4dcabc3">file_set_string</a>(remminafile, <span class="stringliteral">&quot;password&quot;</span>, NULL);</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160;</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160;        <span class="keywordflow">if</span> (!gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#ab105fe07330946ed3687ad2d06fabe95">connected</a>)</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160;</div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160;        remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a63683e6046384d902a573e150801e0d3">protocol_plugin_init_show_retry</a>(gp);</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;        <span class="comment">/* It’s safer to sleep a while before reconnect */</span></div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160;        sleep(2);</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160;</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5b17067fb2b9437f1fdf607334dfade3">auth_first</a> = FALSE;</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160;    }</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160;</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160;    <span class="keywordflow">if</span> (!gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#ab105fe07330946ed3687ad2d06fabe95">connected</a>) {</div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160;        REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;Client not connected with error: %s&quot;</span>, vnc_error);</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160;        <span class="keywordflow">if</span> (cl &amp;&amp; !gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a782a902d036e12eb08bfcd1006c12b97">auth_called</a> &amp;&amp; !(remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#abfb79da3d96ca4aa219eae9c73b0b53f">protocol_plugin_has_error</a>(gp)))</div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160;            remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a7ac875d202f1ccd0ae85bb60ee3222c1">protocol_plugin_set_error</a>(gp, <span class="stringliteral">&quot;%s&quot;</span>, vnc_error);</div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#ac4e1f4b6fc95c31896cc50f315312f93">running</a> = FALSE;</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160;</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160;        remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#ab58b7bf5f91c5f60349a8242e6322f7f">protocol_plugin_signal_connection_closed</a>(gp);</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">return</span> FALSE;</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160;    }</div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160;</div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160;    REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;Client connected&quot;</span>);</div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160;    remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#ac432221a82ead6babe045cbf18061a0b">protocol_plugin_init_save_cred</a>(gp);</div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160;</div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160;    gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a33bc751b1d5728b624bfa57814504f90">client</a> = cl;</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;    remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#ab212bed4baf8cba148fadb5773148ad6">protocol_plugin_signal_connection_opened</a>(gp);</div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160;</div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160;    <span class="keywordflow">if</span> (remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a0c7eab256e1b1fdf84be44e28cddc3de">file_get_int</a>(remminafile, <span class="stringliteral">&quot;disableserverinput&quot;</span>, FALSE))</div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160;        PermitServerInput(cl, 1);</div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160;</div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160;    <span class="keywordflow">if</span> (gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a2958d10774cc6fc28a0bfa0b1c843095">thread</a>) {</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160;        <span class="keywordflow">while</span> (<a class="code" href="vnc__plugin_8c.html#a093245037037f681c4ffe6356d916a02">remmina_plugin_vnc_main_loop</a>(gp)) {</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;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#ac4e1f4b6fc95c31896cc50f315312f93">running</a> = FALSE;</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160;        IDLE_ADD((GSourceFunc)<a class="code" href="vnc__plugin_8c.html#a093245037037f681c4ffe6356d916a02">remmina_plugin_vnc_main_loop</a>, gp);</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"> 1386</span>&#160;    <span class="keywordflow">return</span> FALSE;</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;</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;<span class="keyword">static</span> gpointer</div><div class="line"><a name="l01391"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a14c13d425ace0c90144b0e486e6893b8"> 1391</a></span>&#160;<a class="code" href="vnc__plugin_8c.html#a14c13d425ace0c90144b0e486e6893b8">remmina_plugin_vnc_main_thread</a>(gpointer data)</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;    TRACE_CALL(__func__);</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160;    pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);</div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160;</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160;    CANCEL_ASYNC</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160;    <a class="code" href="vnc__plugin_8c.html#a8648ba06e3c1b7093147ae9a1c576452">remmina_plugin_vnc_main</a>((<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *)data);</div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160;    <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160;}</div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160;</div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160;</div><div class="line"><a name="l01402"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a317c3aca2102f38bc876c95413701a80"> 1402</a></span>&#160;<span class="keyword">static</span> <a class="code" href="struct___remmina_plugin_vnc_coordinates.html">RemminaPluginVncCoordinates</a> <a class="code" href="vnc__plugin_8c.html#a317c3aca2102f38bc876c95413701a80">remmina_plugin_vnc_scale_coordinates</a>(GtkWidget *<a class="code" href="structon_main_thread__cb__data.html#af0d50114cec8cfdd7692a39c1fdba783">widget</a>, <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>, gint <a class="code" href="structon_main_thread__cb__data.html#a92fd0bfc7715dcb8237a002850701222">x</a>, gint <a class="code" href="structon_main_thread__cb__data.html#aec2ab8de1fa3f948ada7bd70ce2b353f">y</a>)</div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160;{</div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160;    GtkAllocation widget_allocation;</div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_coordinates.html">RemminaPluginVncCoordinates</a> result;</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;    <span class="keywordflow">if</span> ((remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#ae97f4052c4bbda628682ae071ada27ed">remmina_protocol_widget_get_current_scale_mode</a>(gp) != <a class="code" href="types_8h.html#aeea5ee1e675368413b6f6ab09883e7dead50ff64ad1e14caf78956850f03871bd">REMMINA_PROTOCOL_WIDGET_SCALE_MODE_NONE</a>)) {</div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160;        gtk_widget_get_allocation(widget, &amp;widget_allocation);</div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160;        result.<a class="code" href="struct___remmina_plugin_vnc_coordinates.html#a33c99179134cf900b66103767766ed3a">x</a> = x * remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#adf255b7ceaec6a51fc9269cf824a02ce">protocol_plugin_get_width</a>(gp) / widget_allocation.width;</div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160;        result.<a class="code" href="struct___remmina_plugin_vnc_coordinates.html#ad385abd59c1f49bdb244fd679efb5b3e">y</a> = y * remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#aa159850f20499e5bc1067f533d2fa820">protocol_plugin_get_height</a>(gp) / widget_allocation.height;</div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160;        result.<a class="code" href="struct___remmina_plugin_vnc_coordinates.html#a33c99179134cf900b66103767766ed3a">x</a> = <a class="code" href="structon_main_thread__cb__data.html#a92fd0bfc7715dcb8237a002850701222">x</a>;</div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160;        result.<a class="code" href="struct___remmina_plugin_vnc_coordinates.html#ad385abd59c1f49bdb244fd679efb5b3e">y</a> = <a class="code" href="structon_main_thread__cb__data.html#aec2ab8de1fa3f948ada7bd70ce2b353f">y</a>;</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;    <span class="keywordflow">return</span> result;</div><div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160;}</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"><a class="line" href="vnc__plugin_8c.html#a47762f374c697476aed0a36ed26a0aa1"> 1419</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="vnc__plugin_8c.html#a47762f374c697476aed0a36ed26a0aa1">remmina_plugin_vnc_on_motion</a>(GtkWidget *<a class="code" href="structon_main_thread__cb__data.html#af0d50114cec8cfdd7692a39c1fdba783">widget</a>, GdkEventMotion *event, <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>)</div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160;{</div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160;    <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_coordinates.html">RemminaPluginVncCoordinates</a> coordinates;</div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160;</div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160;    <span class="keywordflow">if</span> (!gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#ab105fe07330946ed3687ad2d06fabe95">connected</a> || !gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a33bc751b1d5728b624bfa57814504f90">client</a>)</div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160;    remminafile = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a1409dcc143ddc35de86b792df095cfc4">protocol_plugin_get_file</a>(gp);</div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160;    <span class="keywordflow">if</span> (remmina_plugin_service-&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="l01430"></a><span class="lineno"> 1430</span>&#160;        <span class="keywordflow">return</span> FALSE;</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;    coordinates = <a class="code" href="vnc__plugin_8c.html#a317c3aca2102f38bc876c95413701a80">remmina_plugin_vnc_scale_coordinates</a>(widget, gp, event-&gt;x, event-&gt;y);</div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160;    <a class="code" href="vnc__plugin_8c.html#a885240d470f95a89ac67051da38fa01d">remmina_plugin_vnc_event_push</a>(gp, <a class="code" href="vnc__plugin_8h.html#a2f80701c36e79c0640d91c788feee0b3a1897cf83244e2e2e25c7f32e50a4964f">REMMINA_PLUGIN_VNC_EVENT_POINTER</a>, GINT_TO_POINTER(coordinates.<a class="code" href="struct___remmina_plugin_vnc_coordinates.html#a33c99179134cf900b66103767766ed3a">x</a>), GINT_TO_POINTER(coordinates.<a class="code" href="struct___remmina_plugin_vnc_coordinates.html#ad385abd59c1f49bdb244fd679efb5b3e">y</a>),</div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160;                      GINT_TO_POINTER(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a4047890129d7177dc5f813f2947e7a3c">button_mask</a>));</div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160;    <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160;}</div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160;</div><div class="line"><a name="l01438"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a4dc4f7fbf26336d69aa468e6d81d9b0a"> 1438</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="vnc__plugin_8c.html#a4dc4f7fbf26336d69aa468e6d81d9b0a">remmina_plugin_vnc_on_button</a>(GtkWidget *<a class="code" href="structon_main_thread__cb__data.html#af0d50114cec8cfdd7692a39c1fdba783">widget</a>, GdkEventButton *event, <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>)</div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160;{</div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160;    <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_coordinates.html">RemminaPluginVncCoordinates</a> coordinates;</div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160;    gint mask;</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;    <span class="keywordflow">if</span> (!gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#ab105fe07330946ed3687ad2d06fabe95">connected</a> || !gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a33bc751b1d5728b624bfa57814504f90">client</a>)</div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160;    remminafile = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a1409dcc143ddc35de86b792df095cfc4">protocol_plugin_get_file</a>(gp);</div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160;    <span class="keywordflow">if</span> (remmina_plugin_service-&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="l01450"></a><span class="lineno"> 1450</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160;</div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160;    <span class="comment">/* We only accept 3 buttons */</span></div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160;    <span class="keywordflow">if</span> (event-&gt;button &lt; 1 || event-&gt;button &gt; 3)</div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160;    <span class="comment">/* We bypass 2button-press and 3button-press events */</span></div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160;    <span class="keywordflow">if</span> (event-&gt;type != GDK_BUTTON_PRESS &amp;&amp; event-&gt;type != GDK_BUTTON_RELEASE)</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160;        <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160;</div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160;    mask = (1 &lt;&lt; (<span class="keyword">event</span>-&gt;button - 1));</div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160;    gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a4047890129d7177dc5f813f2947e7a3c">button_mask</a> = (<span class="keyword">event</span>-&gt;type == GDK_BUTTON_PRESS ? (gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a4047890129d7177dc5f813f2947e7a3c">button_mask</a> | mask) :</div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160;                   (gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a4047890129d7177dc5f813f2947e7a3c">button_mask</a> &amp; (0xff - mask)));</div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160;</div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160;    coordinates = <a class="code" href="vnc__plugin_8c.html#a317c3aca2102f38bc876c95413701a80">remmina_plugin_vnc_scale_coordinates</a>(widget, gp, event-&gt;x, event-&gt;y);</div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160;    <a class="code" href="vnc__plugin_8c.html#a885240d470f95a89ac67051da38fa01d">remmina_plugin_vnc_event_push</a>(gp, <a class="code" href="vnc__plugin_8h.html#a2f80701c36e79c0640d91c788feee0b3a1897cf83244e2e2e25c7f32e50a4964f">REMMINA_PLUGIN_VNC_EVENT_POINTER</a>, GINT_TO_POINTER(coordinates.<a class="code" href="struct___remmina_plugin_vnc_coordinates.html#a33c99179134cf900b66103767766ed3a">x</a>), GINT_TO_POINTER(coordinates.<a class="code" href="struct___remmina_plugin_vnc_coordinates.html#ad385abd59c1f49bdb244fd679efb5b3e">y</a>),</div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160;                      GINT_TO_POINTER(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a4047890129d7177dc5f813f2947e7a3c">button_mask</a>));</div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160;    <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160;}</div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160;</div><div class="line"><a name="l01469"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a624c006e2a475a0944322c7bbdbcb548"> 1469</a></span>&#160;<span class="keyword">static</span> gint <a class="code" href="vnc__plugin_8c.html#a624c006e2a475a0944322c7bbdbcb548">delta_to_mask</a>(<span class="keywordtype">float</span> delta, <span class="keywordtype">float</span> *accum, gint mask_plus, gint mask_minus)</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"> 1471</span>&#160;    *accum += delta;</div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160;    <span class="keywordflow">if</span> (*accum &gt;= 1.0) {</div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160;        *accum = 0.0;</div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160;        <span class="keywordflow">return</span> mask_plus;</div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160;    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (*accum &lt;= -1.0) {</div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160;        *accum = 0.0;</div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160;        <span class="keywordflow">return</span> mask_minus;</div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160;    }</div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160;    <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160;}</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"><a class="line" href="vnc__plugin_8c.html#a6f8fd3a6a5f00aef49bd4e3404be5697"> 1482</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="vnc__plugin_8c.html#a6f8fd3a6a5f00aef49bd4e3404be5697">remmina_plugin_vnc_on_scroll</a>(GtkWidget *<a class="code" href="structon_main_thread__cb__data.html#af0d50114cec8cfdd7692a39c1fdba783">widget</a>, GdkEventScroll *event, <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>)</div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160;{</div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160;    <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_coordinates.html">RemminaPluginVncCoordinates</a> coordinates;</div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160;    gint mask;</div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160;</div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160;    <span class="keywordflow">if</span> (!gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#ab105fe07330946ed3687ad2d06fabe95">connected</a> || !gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a33bc751b1d5728b624bfa57814504f90">client</a>)</div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160;    remminafile = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a1409dcc143ddc35de86b792df095cfc4">protocol_plugin_get_file</a>(gp);</div><div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160;    <span class="keywordflow">if</span> (remmina_plugin_service-&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="l01494"></a><span class="lineno"> 1494</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160;</div><div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160;    <span class="keywordflow">switch</span> (event-&gt;direction) {</div><div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160;    <span class="keywordflow">case</span> GDK_SCROLL_UP:</div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160;        mask = (1 &lt;&lt; 3);</div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a0c3efe656bbe8ce7a9216f121972b2fe">scroll_y_accumulator</a> = 0;</div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160;    <span class="keywordflow">case</span> GDK_SCROLL_DOWN:</div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160;        mask = (1 &lt;&lt; 4);</div><div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a0c3efe656bbe8ce7a9216f121972b2fe">scroll_y_accumulator</a> = 0;</div><div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160;    <span class="keywordflow">case</span> GDK_SCROLL_LEFT:</div><div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160;        mask = (1 &lt;&lt; 5);</div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a3c589814c8c21221fc90b98e22e38714">scroll_x_accumulator</a> = 0;</div><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160;    <span class="keywordflow">case</span> GDK_SCROLL_RIGHT:</div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160;        mask = (1 &lt;&lt; 6);</div><div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a3c589814c8c21221fc90b98e22e38714">scroll_x_accumulator</a> = 0;</div><div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160;<span class="preprocessor">#if GTK_CHECK_VERSION(3, 4, 0)</span></div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160;    <span class="keywordflow">case</span> GDK_SCROLL_SMOOTH:</div><div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160;        <span class="comment">/* RFB does not seems to support SMOOTH scroll, so we accumulate GTK delta requested</span></div><div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160;<span class="comment">         * up to 1.0 and then send a normal RFB wheel scroll when the accumulator reaches 1.0 */</span></div><div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160;        mask = <a class="code" href="vnc__plugin_8c.html#a624c006e2a475a0944322c7bbdbcb548">delta_to_mask</a>(event-&gt;delta_y, &amp;(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a0c3efe656bbe8ce7a9216f121972b2fe">scroll_y_accumulator</a>), (1 &lt;&lt; 4), (1 &lt;&lt; 3));</div><div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160;        mask |= <a class="code" href="vnc__plugin_8c.html#a624c006e2a475a0944322c7bbdbcb548">delta_to_mask</a>(event-&gt;delta_x, &amp;(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a3c589814c8c21221fc90b98e22e38714">scroll_x_accumulator</a>), (1 &lt;&lt; 6), (1 &lt;&lt; 5));</div><div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160;        <span class="keywordflow">if</span> (!mask)</div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160;            <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160;    <span class="keywordflow">default</span>:</div><div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160;    }</div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160;</div><div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160;    coordinates = <a class="code" href="vnc__plugin_8c.html#a317c3aca2102f38bc876c95413701a80">remmina_plugin_vnc_scale_coordinates</a>(widget, gp, event-&gt;x, event-&gt;y);</div><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160;    <a class="code" href="vnc__plugin_8c.html#a885240d470f95a89ac67051da38fa01d">remmina_plugin_vnc_event_push</a>(gp, <a class="code" href="vnc__plugin_8h.html#a2f80701c36e79c0640d91c788feee0b3a1897cf83244e2e2e25c7f32e50a4964f">REMMINA_PLUGIN_VNC_EVENT_POINTER</a>, GINT_TO_POINTER(coordinates.<a class="code" href="struct___remmina_plugin_vnc_coordinates.html#a33c99179134cf900b66103767766ed3a">x</a>), GINT_TO_POINTER(coordinates.<a class="code" href="struct___remmina_plugin_vnc_coordinates.html#ad385abd59c1f49bdb244fd679efb5b3e">y</a>),</div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160;                      GINT_TO_POINTER(mask | gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a4047890129d7177dc5f813f2947e7a3c">button_mask</a>));</div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160;    <a class="code" href="vnc__plugin_8c.html#a885240d470f95a89ac67051da38fa01d">remmina_plugin_vnc_event_push</a>(gp, <a class="code" href="vnc__plugin_8h.html#a2f80701c36e79c0640d91c788feee0b3a1897cf83244e2e2e25c7f32e50a4964f">REMMINA_PLUGIN_VNC_EVENT_POINTER</a>, GINT_TO_POINTER(coordinates.<a class="code" href="struct___remmina_plugin_vnc_coordinates.html#a33c99179134cf900b66103767766ed3a">x</a>), GINT_TO_POINTER(coordinates.<a class="code" href="struct___remmina_plugin_vnc_coordinates.html#ad385abd59c1f49bdb244fd679efb5b3e">y</a>),</div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160;                      GINT_TO_POINTER(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a4047890129d7177dc5f813f2947e7a3c">button_mask</a>));</div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160;</div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160;    <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160;}</div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160;</div><div class="line"><a name="l01536"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a3ba650386c03a1daa8a46546c81820c4"> 1536</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="vnc__plugin_8c.html#a3ba650386c03a1daa8a46546c81820c4">remmina_plugin_vnc_release_key</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>, guint16 keycode)</div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160;{</div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160;    <a class="code" href="struct___remmina_key_val.html">RemminaKeyVal</a> *k;</div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160;    gint i;</div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160;</div><div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160;    <span class="keywordflow">if</span> (!gpdata)</div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160;</div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160;    <span class="keywordflow">if</span> (keycode == 0) {</div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160;        <span class="comment">/* Send all release key events for previously pressed keys */</span></div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160;        <span class="keywordflow">for</span> (i = 0; i &lt; gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a0453c0a0676675e91ba19318dc9b06e0">pressed_keys</a>-&gt;len; i++) {</div><div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160;            k = g_ptr_array_index(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a0453c0a0676675e91ba19318dc9b06e0">pressed_keys</a>, i);</div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160;            <a class="code" href="vnc__plugin_8c.html#a885240d470f95a89ac67051da38fa01d">remmina_plugin_vnc_event_push</a>(gp, <a class="code" href="vnc__plugin_8h.html#a2f80701c36e79c0640d91c788feee0b3a98fec12a2047bf22ce4d44b9e0905540">REMMINA_PLUGIN_VNC_EVENT_KEY</a>, GUINT_TO_POINTER(k-&gt;<a class="code" href="struct___remmina_key_val.html#a682fb6be0c09c0dd457b279796eec712">keyval</a>),</div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160;                              GINT_TO_POINTER(FALSE), NULL);</div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160;            g_free(k);</div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160;        }</div><div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160;        g_ptr_array_set_size(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a0453c0a0676675e91ba19318dc9b06e0">pressed_keys</a>, 0);</div><div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160;        <span class="comment">/* Unregister the keycode only */</span></div><div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160;        <span class="keywordflow">for</span> (i = 0; i &lt; gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a0453c0a0676675e91ba19318dc9b06e0">pressed_keys</a>-&gt;len; i++) {</div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160;            k = g_ptr_array_index(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a0453c0a0676675e91ba19318dc9b06e0">pressed_keys</a>, i);</div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160;            <span class="keywordflow">if</span> (k-&gt;<a class="code" href="struct___remmina_key_val.html#a9d3b8298be454a8f6d9a678e2a14e2e8">keycode</a> == keycode) {</div><div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160;                g_free(k);</div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160;                g_ptr_array_remove_index_fast(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a0453c0a0676675e91ba19318dc9b06e0">pressed_keys</a>, i);</div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160;            }</div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160;        }</div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160;    }</div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160;}</div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160;</div><div class="line"><a name="l01568"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a4f528272dda8a3538cbdce39254ecc81"> 1568</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="vnc__plugin_8c.html#a4f528272dda8a3538cbdce39254ecc81">remmina_plugin_vnc_on_key</a>(GtkWidget *<a class="code" href="structon_main_thread__cb__data.html#af0d50114cec8cfdd7692a39c1fdba783">widget</a>, GdkEventKey *event, <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>)</div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160;{</div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160;    <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160;    <a class="code" href="struct___remmina_key_val.html">RemminaKeyVal</a> *k;</div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160;    guint event_keyval;</div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160;    guint keyval;</div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160;</div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160;    <span class="keywordflow">if</span> (!gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#ab105fe07330946ed3687ad2d06fabe95">connected</a> || !gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a33bc751b1d5728b624bfa57814504f90">client</a>)</div><div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160;    remminafile = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a1409dcc143ddc35de86b792df095cfc4">protocol_plugin_get_file</a>(gp);</div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160;    <span class="keywordflow">if</span> (remmina_plugin_service-&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="l01581"></a><span class="lineno"> 1581</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160;</div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160;    gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a3c589814c8c21221fc90b98e22e38714">scroll_x_accumulator</a> = 0;</div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160;    gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a0c3efe656bbe8ce7a9216f121972b2fe">scroll_y_accumulator</a> = 0;</div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160;</div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160;    <span class="comment">/* When sending key release, try first to find out a previously sent keyval</span></div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160;<span class="comment">     * to workaround bugs like https://bugs.freedesktop.org/show_bug.cgi?id=7430 */</span></div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160;</div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160;    event_keyval = <span class="keyword">event</span>-&gt;keyval;</div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160;    <span class="keywordflow">if</span> (event-&gt;type == GDK_KEY_RELEASE) {</div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a0453c0a0676675e91ba19318dc9b06e0">pressed_keys</a>-&gt;len; i++) {</div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160;            k = g_ptr_array_index(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a0453c0a0676675e91ba19318dc9b06e0">pressed_keys</a>, i);</div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160;            <span class="keywordflow">if</span> (k-&gt;<a class="code" href="struct___remmina_key_val.html#a9d3b8298be454a8f6d9a678e2a14e2e8">keycode</a> == event-&gt;hardware_keycode) {</div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160;                event_keyval = k-&gt;<a class="code" href="struct___remmina_key_val.html#a682fb6be0c09c0dd457b279796eec712">keyval</a>;</div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160;            }</div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160;        }</div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160;    }</div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160;</div><div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160;    keyval = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a0884b2124ba4ea3f747f00bbe91135d2">pref_keymap_get_keyval</a>(remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a673ff4320377c3b440dfd24a796c69fc">file_get_string</a>(remminafile, <span class="stringliteral">&quot;keymap&quot;</span>),</div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160;                                event_keyval);</div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160;</div><div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160;    <a class="code" href="vnc__plugin_8c.html#a885240d470f95a89ac67051da38fa01d">remmina_plugin_vnc_event_push</a>(gp, <a class="code" href="vnc__plugin_8h.html#a2f80701c36e79c0640d91c788feee0b3a98fec12a2047bf22ce4d44b9e0905540">REMMINA_PLUGIN_VNC_EVENT_KEY</a>, GUINT_TO_POINTER(keyval),</div><div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160;                      GINT_TO_POINTER(event-&gt;type == GDK_KEY_PRESS ? TRUE : FALSE), NULL);</div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160;</div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160;    <span class="comment">/* Register/unregister the pressed key */</span></div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160;    <span class="keywordflow">if</span> (event-&gt;type == GDK_KEY_PRESS) {</div><div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160;        k = g_new(<a class="code" href="struct___remmina_key_val.html">RemminaKeyVal</a>, 1);</div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160;        k-&gt;<a class="code" href="struct___remmina_key_val.html#a682fb6be0c09c0dd457b279796eec712">keyval</a> = keyval;</div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160;        k-&gt;<a class="code" href="struct___remmina_key_val.html#a9d3b8298be454a8f6d9a678e2a14e2e8">keycode</a> = <span class="keyword">event</span>-&gt;hardware_keycode;</div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160;        g_ptr_array_add(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a0453c0a0676675e91ba19318dc9b06e0">pressed_keys</a>, k);</div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160;        <a class="code" href="vnc__plugin_8c.html#a3ba650386c03a1daa8a46546c81820c4">remmina_plugin_vnc_release_key</a>(gp, event-&gt;hardware_keycode);</div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160;    }</div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>&#160;    <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160;}</div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160;</div><div class="line"><a name="l01618"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a987d6ebfa00d29578dada803f33d6a99"> 1618</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="vnc__plugin_8c.html#a987d6ebfa00d29578dada803f33d6a99">remmina_plugin_vnc_on_cuttext_request</a>(GtkClipboard *clipboard, <span class="keyword">const</span> gchar *text, <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>)</div><div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160;{</div><div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160;    GDateTime *t;</div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160;    glong diff;</div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160;    gsize br, bw;</div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160;    gchar *latin1_text;</div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">char</span> *cur_charset;</div><div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160;</div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160;    <span class="keywordflow">if</span> (text) {</div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160;        <span class="comment">/* A timer (1 second) to avoid clipboard &quot;loopback&quot;: text cut out from VNC won’t paste back into VNC */</span></div><div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160;        t = g_date_time_new_now_utc();</div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160;        diff = g_date_time_difference(t, gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#aaee126db00e50ad613a6c8ae032ba3b2">clipboard_timer</a>) / 100000; <span class="comment">// tenth of second</span></div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160;        <span class="keywordflow">if</span> (diff &lt; 10)</div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160;            <span class="keywordflow">return</span>;</div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160;        g_date_time_unref(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#aaee126db00e50ad613a6c8ae032ba3b2">clipboard_timer</a>);</div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#aaee126db00e50ad613a6c8ae032ba3b2">clipboard_timer</a> = t;</div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160;        <span class="comment">/* Convert text from current charset to latin-1 before sending to remote server.</span></div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160;<span class="comment">         * See RFC6143 7.5.6 */</span></div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160;        g_get_charset(&amp;cur_charset);</div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160;        latin1_text = g_convert_with_fallback(text, -1, <span class="stringliteral">&quot;ISO-8859-1&quot;</span>, cur_charset, <span class="stringliteral">&quot;?&quot;</span>, &amp;br, &amp;bw, NULL);</div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160;        <a class="code" href="vnc__plugin_8c.html#a885240d470f95a89ac67051da38fa01d">remmina_plugin_vnc_event_push</a>(gp, <a class="code" href="vnc__plugin_8h.html#a2f80701c36e79c0640d91c788feee0b3a0662a5bd411f37922da376de06e8fbfd">REMMINA_PLUGIN_VNC_EVENT_CUTTEXT</a>, (gpointer)latin1_text, NULL, NULL);</div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160;        g_free(latin1_text);</div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160;    }</div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160;}</div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160;</div><div class="line"><a name="l01645"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a7bce24c89cf4554a664693a6b5e1a78d"> 1645</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="vnc__plugin_8c.html#a7bce24c89cf4554a664693a6b5e1a78d">remmina_plugin_vnc_on_cuttext</a>(GtkClipboard *clipboard, GdkEvent *event, <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>)</div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160;{</div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160;    <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160;</div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160;    <span class="keywordflow">if</span> (!gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#ab105fe07330946ed3687ad2d06fabe95">connected</a> || !gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a33bc751b1d5728b624bfa57814504f90">client</a>)</div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160;    remminafile = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a1409dcc143ddc35de86b792df095cfc4">protocol_plugin_get_file</a>(gp);</div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160;    <span class="keywordflow">if</span> (remmina_plugin_service-&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="l01655"></a><span class="lineno"> 1655</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160;</div><div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160;    gtk_clipboard_request_text(clipboard, (GtkClipboardTextReceivedFunc)<a class="code" href="vnc__plugin_8c.html#a987d6ebfa00d29578dada803f33d6a99">remmina_plugin_vnc_on_cuttext_request</a>, gp);</div><div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160;}</div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160;</div><div class="line"><a name="l01660"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a18ba6738d4a3d84a4a38e45ecc0e704a"> 1660</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="vnc__plugin_8c.html#a18ba6738d4a3d84a4a38e45ecc0e704a">remmina_plugin_vnc_on_realize</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>, gpointer data)</div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160;{</div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160;    <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160;    GdkCursor *cursor;</div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160;    GdkPixbuf *pixbuf;</div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160;</div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160;    remminafile = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a1409dcc143ddc35de86b792df095cfc4">protocol_plugin_get_file</a>(gp);</div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160;</div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160;    <span class="keywordflow">if</span> (remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a0c7eab256e1b1fdf84be44e28cddc3de">file_get_int</a>(remminafile, <span class="stringliteral">&quot;showcursor&quot;</span>, FALSE)) {</div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160;        <span class="comment">/* Hide local cursor (show a small dot instead) */</span></div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160;        pixbuf = gdk_pixbuf_new_from_xpm_data(<a class="code" href="vnc__plugin_8c.html#ade7041eba0e97ab146e2bc418982f100">dot_cursor_xpm</a>);</div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160;        cursor = gdk_cursor_new_from_pixbuf(gdk_display_get_default(), pixbuf, <a class="code" href="vnc__plugin_8c.html#aeeb18a588e3d003bf3adcaa6eb1697ff">dot_cursor_x_hot</a>, <a class="code" href="vnc__plugin_8c.html#a01923764292c3ab42dbcb43a9bb438a5">dot_cursor_y_hot</a>);</div><div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160;        g_object_unref(pixbuf);</div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160;        gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(gp)), cursor);</div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160;        g_object_unref(cursor);</div><div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160;    }</div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160;}</div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160;</div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160;<span class="comment">/******************************************************************************************/</span></div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160;</div><div class="line"><a name="l01681"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a29fb120041bcace9f201cbdf3a3f6f2f"> 1681</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="vnc__plugin_8c.html#a29fb120041bcace9f201cbdf3a3f6f2f">remmina_plugin_vnc_open_connection</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>)</div><div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160;{</div><div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>&#160;    <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>&#160;</div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160;    remminafile = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a1409dcc143ddc35de86b792df095cfc4">protocol_plugin_get_file</a>(gp);</div><div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160;</div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160;    gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#ab105fe07330946ed3687ad2d06fabe95">connected</a> = TRUE;</div><div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>&#160;    gchar *server;</div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160;    gint port;</div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160;    <span class="keyword">const</span> gchar* raw_server;</div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160;</div><div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160;    remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#ac3fc04c8c7b20c35122e2786d9e8fc34">protocol_plugin_register_hostkey</a>(gp, gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#acf12d2c89046160dddcae35af84e5e57">drawing_area</a>);</div><div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160;</div><div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160;    g_signal_connect(G_OBJECT(gp), <span class="stringliteral">&quot;realize&quot;</span>, G_CALLBACK(<a class="code" href="vnc__plugin_8c.html#a18ba6738d4a3d84a4a38e45ecc0e704a">remmina_plugin_vnc_on_realize</a>), NULL);</div><div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>&#160;    g_signal_connect(G_OBJECT(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#acf12d2c89046160dddcae35af84e5e57">drawing_area</a>), <span class="stringliteral">&quot;motion-notify-event&quot;</span>, G_CALLBACK(<a class="code" href="vnc__plugin_8c.html#a47762f374c697476aed0a36ed26a0aa1">remmina_plugin_vnc_on_motion</a>), gp);</div><div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160;    g_signal_connect(G_OBJECT(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#acf12d2c89046160dddcae35af84e5e57">drawing_area</a>), <span class="stringliteral">&quot;button-press-event&quot;</span>, G_CALLBACK(<a class="code" href="vnc__plugin_8c.html#a4dc4f7fbf26336d69aa468e6d81d9b0a">remmina_plugin_vnc_on_button</a>), gp);</div><div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160;    g_signal_connect(G_OBJECT(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#acf12d2c89046160dddcae35af84e5e57">drawing_area</a>), <span class="stringliteral">&quot;button-release-event&quot;</span>, G_CALLBACK(<a class="code" href="vnc__plugin_8c.html#a4dc4f7fbf26336d69aa468e6d81d9b0a">remmina_plugin_vnc_on_button</a>), gp);</div><div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160;    g_signal_connect(G_OBJECT(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#acf12d2c89046160dddcae35af84e5e57">drawing_area</a>), <span class="stringliteral">&quot;scroll-event&quot;</span>, G_CALLBACK(<a class="code" href="vnc__plugin_8c.html#a6f8fd3a6a5f00aef49bd4e3404be5697">remmina_plugin_vnc_on_scroll</a>), gp);</div><div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160;    g_signal_connect(G_OBJECT(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#acf12d2c89046160dddcae35af84e5e57">drawing_area</a>), <span class="stringliteral">&quot;key-press-event&quot;</span>, G_CALLBACK(<a class="code" href="vnc__plugin_8c.html#a4f528272dda8a3538cbdce39254ecc81">remmina_plugin_vnc_on_key</a>), gp);</div><div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>&#160;    g_signal_connect(G_OBJECT(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#acf12d2c89046160dddcae35af84e5e57">drawing_area</a>), <span class="stringliteral">&quot;key-release-event&quot;</span>, G_CALLBACK(<a class="code" href="vnc__plugin_8c.html#a4f528272dda8a3538cbdce39254ecc81">remmina_plugin_vnc_on_key</a>), gp);</div><div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>&#160;</div><div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>&#160;    <span class="keywordflow">if</span> (!remmina_plugin_service-&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="l01705"></a><span class="lineno"> 1705</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#af834392929e0be100534bcc4a4d6df3c">clipboard_handler</a> = g_signal_connect(G_OBJECT(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD)),</div><div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160;                                 <span class="stringliteral">&quot;owner-change&quot;</span>, G_CALLBACK(<a class="code" href="vnc__plugin_8c.html#a7bce24c89cf4554a664693a6b5e1a78d">remmina_plugin_vnc_on_cuttext</a>), <a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>);</div><div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>&#160;</div><div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>&#160;</div><div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160;    <span class="keywordflow">if</span> (pthread_create(&amp;gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a2958d10774cc6fc28a0bfa0b1c843095">thread</a>, NULL, <a class="code" href="vnc__plugin_8c.html#a14c13d425ace0c90144b0e486e6893b8">remmina_plugin_vnc_main_thread</a>, gp)) {</div><div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160;        <span class="comment">/* I don’t think this will ever happen… */</span></div><div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>&#160;        g_print(<span class="stringliteral">&quot;Could not initialize pthread. Falling back to non-thread mode…\n&quot;</span>);</div><div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>&#160;        g_timeout_add(0, (GSourceFunc)<a class="code" href="vnc__plugin_8c.html#a8648ba06e3c1b7093147ae9a1c576452">remmina_plugin_vnc_main</a>, gp);</div><div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a2958d10774cc6fc28a0bfa0b1c843095">thread</a> = 0;</div><div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160;    }</div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160;</div><div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>&#160;    raw_server = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a673ff4320377c3b440dfd24a796c69fc">file_get_string</a>(remminafile, <span class="stringliteral">&quot;server&quot;</span>);</div><div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160;</div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160;    <span class="keywordflow">if</span> (raw_server &amp;&amp; strstr(raw_server, <span class="stringliteral">&quot;unix://&quot;</span>) == raw_server) {</div><div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>&#160;        REMMINA_PLUGIN_AUDIT(_(<span class="stringliteral">&quot;Connected to %s via VNC&quot;</span>), raw_server);</div><div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>&#160;        remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a6fdfd3063906f49157225f536537bb0f">get_server_port</a>(raw_server,</div><div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>&#160;                VNC_DEFAULT_PORT,</div><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>&#160;                &amp;server,</div><div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>&#160;                &amp;port);</div><div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>&#160;</div><div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>&#160;        REMMINA_PLUGIN_AUDIT(_(<span class="stringliteral">&quot;Connected to %s:%d via VNC&quot;</span>), server, port);</div><div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>&#160;        g_free(server), server = NULL;</div><div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>&#160;    }</div><div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>&#160;<span class="preprocessor">#if LIBVNCSERVER_CHECK_VERSION_VERSION(0, 9, 14)</span></div><div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>&#160;    remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#aa129753441dbfb630cbdb92e447f1d1e">protocol_plugin_unlock_dynres</a>(gp);</div><div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>&#160;    <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>&#160;}</div><div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>&#160;</div><div class="line"><a name="l01735"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a5a66b50e38de8f8f7ff4c47455145a61"> 1735</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="vnc__plugin_8c.html#a5a66b50e38de8f8f7ff4c47455145a61">remmina_plugin_vnc_close_connection_timeout</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>)</div><div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>&#160;{</div><div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160;</div><div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>&#160;    gchar *server;</div><div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160;    gint port;</div><div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>&#160;</div><div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160;    <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a1409dcc143ddc35de86b792df095cfc4">protocol_plugin_get_file</a>(gp);</div><div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160;    remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a6fdfd3063906f49157225f536537bb0f">get_server_port</a>(remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a673ff4320377c3b440dfd24a796c69fc">file_get_string</a>(remminafile, <span class="stringliteral">&quot;server&quot;</span>),</div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160;            VNC_DEFAULT_PORT,</div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160;            &amp;server,</div><div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160;            &amp;port);</div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160;</div><div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>&#160;    REMMINA_PLUGIN_AUDIT(_(<span class="stringliteral">&quot;Disconnected from %s:%d via VNC&quot;</span>), server, port);</div><div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>&#160;    g_free(server), server = NULL;</div><div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>&#160;</div><div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160;    <span class="comment">/* wait until the running attribute is set to false by the VNC thread */</span></div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160;    <span class="keywordflow">if</span> (gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#ac4e1f4b6fc95c31896cc50f315312f93">running</a>)</div><div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>&#160;        <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>&#160;</div><div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>&#160;    <span class="comment">/* unregister the clipboard monitor */</span></div><div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>&#160;    <span class="keywordflow">if</span> (gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#af834392929e0be100534bcc4a4d6df3c">clipboard_handler</a>) {</div><div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>&#160;        g_signal_handler_disconnect(G_OBJECT(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD)), gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#af834392929e0be100534bcc4a4d6df3c">clipboard_handler</a>);</div><div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#af834392929e0be100534bcc4a4d6df3c">clipboard_handler</a> = 0;</div><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160;    }</div><div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160;</div><div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>&#160;    <span class="keywordflow">if</span> (gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#af7838da89b30d194de8d5571e2130364">queuecursor_handler</a>) {</div><div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>&#160;        g_source_remove(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#af7838da89b30d194de8d5571e2130364">queuecursor_handler</a>);</div><div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#af7838da89b30d194de8d5571e2130364">queuecursor_handler</a> = 0;</div><div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160;    }</div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160;    <span class="keywordflow">if</span> (gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5d655f538f7a29657c664bdd0117dcfb">queuecursor_surface</a>) {</div><div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>&#160;        cairo_surface_destroy(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5d655f538f7a29657c664bdd0117dcfb">queuecursor_surface</a>);</div><div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5d655f538f7a29657c664bdd0117dcfb">queuecursor_surface</a> = NULL;</div><div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>&#160;    }</div><div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160;</div><div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>&#160;    <span class="keywordflow">if</span> (gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a8c3e9e03bc8b3ed04ee93a2c0281b5c6">queuedraw_handler</a>) {</div><div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>&#160;        g_source_remove(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a8c3e9e03bc8b3ed04ee93a2c0281b5c6">queuedraw_handler</a>);</div><div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a8c3e9e03bc8b3ed04ee93a2c0281b5c6">queuedraw_handler</a> = 0;</div><div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>&#160;    }</div><div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>&#160;    <span class="keywordflow">if</span> (gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a41dc885437b90c87b6a8b4367b0ba63c">listen_sock</a> &gt;= 0)</div><div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>&#160;        close(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a41dc885437b90c87b6a8b4367b0ba63c">listen_sock</a>);</div><div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>&#160;    <span class="keywordflow">if</span> (gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a33bc751b1d5728b624bfa57814504f90">client</a>) {</div><div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>&#160;        rfbClientCleanup((rfbClient *)gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a33bc751b1d5728b624bfa57814504f90">client</a>);</div><div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a33bc751b1d5728b624bfa57814504f90">client</a> = NULL;</div><div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>&#160;    }</div><div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>&#160;    <span class="keywordflow">if</span> (gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5412ada4c656d0053f0656bed890c030">rgb_buffer</a>) {</div><div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>&#160;        cairo_surface_destroy(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5412ada4c656d0053f0656bed890c030">rgb_buffer</a>);</div><div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5412ada4c656d0053f0656bed890c030">rgb_buffer</a> = NULL;</div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160;    }</div><div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>&#160;    <span class="keywordflow">if</span> (gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5b85e81358d36bc4772b95cb9856e2ca">vnc_buffer</a>) {</div><div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>&#160;        g_free(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5b85e81358d36bc4772b95cb9856e2ca">vnc_buffer</a>);</div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5b85e81358d36bc4772b95cb9856e2ca">vnc_buffer</a> = NULL;</div><div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>&#160;    }</div><div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>&#160;    g_ptr_array_free(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a0453c0a0676675e91ba19318dc9b06e0">pressed_keys</a>, TRUE);</div><div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>&#160;    g_date_time_unref(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#aaee126db00e50ad613a6c8ae032ba3b2">clipboard_timer</a>);</div><div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>&#160;    <a class="code" href="vnc__plugin_8c.html#a2b47331cd4f72ee2c69573ffb3142c10">remmina_plugin_vnc_event_free_all</a>(gp);</div><div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>&#160;    g_queue_free(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a0e175ab5a31b720d9d7dfc6923ce3c6a">vnc_event_queue</a>);</div><div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>&#160;    pthread_mutex_destroy(&amp;gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5f8bcbfe873d4949852e9624e1c43063">vnc_event_queue_mutex</a>);</div><div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>&#160;    close(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a625ea21fb2d92cb8489d3c9e5a2477ea">vnc_event_pipe</a>[0]);</div><div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>&#160;    close(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a625ea21fb2d92cb8489d3c9e5a2477ea">vnc_event_pipe</a>[1]);</div><div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>&#160;</div><div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>&#160;</div><div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>&#160;    pthread_mutex_destroy(&amp;gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a824b3ab6d51d0ba65abdbd0e788edb89">buffer_mutex</a>);</div><div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>&#160;    remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#ab58b7bf5f91c5f60349a8242e6322f7f">protocol_plugin_signal_connection_closed</a>(gp);</div><div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>&#160;</div><div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>&#160;    <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>&#160;}</div><div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>&#160;</div><div class="line"><a name="l01804"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a7fa113e651e76230f66ca23135f2c688"> 1804</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="vnc__plugin_8c.html#a7fa113e651e76230f66ca23135f2c688">remmina_plugin_vnc_close_connection</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>)</div><div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>&#160;{</div><div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>&#160;</div><div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>&#160;    gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#ab105fe07330946ed3687ad2d06fabe95">connected</a> = FALSE;</div><div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>&#160;</div><div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>&#160;    <span class="keywordflow">if</span> (gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a2958d10774cc6fc28a0bfa0b1c843095">thread</a>) {</div><div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>&#160;        pthread_cancel(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a2958d10774cc6fc28a0bfa0b1c843095">thread</a>);</div><div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>&#160;        <span class="keywordflow">if</span> (gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a2958d10774cc6fc28a0bfa0b1c843095">thread</a>) pthread_join(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a2958d10774cc6fc28a0bfa0b1c843095">thread</a>, NULL);</div><div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#ac4e1f4b6fc95c31896cc50f315312f93">running</a> = FALSE;</div><div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>&#160;        <a class="code" href="vnc__plugin_8c.html#a5a66b50e38de8f8f7ff4c47455145a61">remmina_plugin_vnc_close_connection_timeout</a>(gp);</div><div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>&#160;        g_timeout_add(200, (GSourceFunc)<a class="code" href="vnc__plugin_8c.html#a5a66b50e38de8f8f7ff4c47455145a61">remmina_plugin_vnc_close_connection_timeout</a>, gp);</div><div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>&#160;    }</div><div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>&#160;</div><div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>&#160;    <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>&#160;}</div><div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>&#160;</div><div class="line"><a name="l01823"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a6497b38386d6de20157b0baf75dcbf44"> 1823</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="vnc__plugin_8c.html#a6497b38386d6de20157b0baf75dcbf44">remmina_plugin_vnc_query_feature</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>, <span class="keyword">const</span> <a class="code" href="struct___remmina_protocol_feature.html">RemminaProtocolFeature</a> *feature)</div><div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>&#160;{</div><div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>&#160;    <span class="keywordflow">switch</span> (feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a36b55faeba78528ac9708dfa66667e20">id</a>) {</div><div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>&#160;    <span class="keywordflow">case</span> REMMINA_PLUGIN_VNC_FEATURE_PREF_DISABLESERVERINPUT:</div><div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>&#160;        <span class="keywordflow">return</span> SupportsClient2Server((rfbClient *)(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a33bc751b1d5728b624bfa57814504f90">client</a>), rfbSetServerInput) ? TRUE : FALSE;</div><div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>&#160;    <span class="keywordflow">case</span> REMMINA_PLUGIN_VNC_FEATURE_TOOL_CHAT:</div><div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>&#160;        <span class="keywordflow">return</span> SupportsClient2Server((rfbClient *)(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a33bc751b1d5728b624bfa57814504f90">client</a>), rfbTextChat) ? TRUE : FALSE;</div><div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>&#160;    <span class="keywordflow">default</span>:</div><div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>&#160;        <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>&#160;    }</div><div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>&#160;}</div><div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>&#160;</div><div class="line"><a name="l01837"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a626a6a09f076b133df208d5bc04233b6"> 1837</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="vnc__plugin_8c.html#a626a6a09f076b133df208d5bc04233b6">remmina_plugin_vnc_call_feature</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>, <span class="keyword">const</span> <a class="code" href="struct___remmina_protocol_feature.html">RemminaProtocolFeature</a> *feature)</div><div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>&#160;{</div><div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>&#160;    <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>&#160;    rfbClient*  client;</div><div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>&#160;    uint8_t previous_bpp;</div><div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>&#160;    remminafile = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a1409dcc143ddc35de86b792df095cfc4">protocol_plugin_get_file</a>(gp);</div><div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>&#160;    <span class="keywordflow">switch</span> (feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a36b55faeba78528ac9708dfa66667e20">id</a>) {</div><div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>&#160;    <span class="keywordflow">case</span> REMMINA_PLUGIN_VNC_FEATURE_PREF_QUALITY:</div><div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>&#160;        <a class="code" href="vnc__plugin_8c.html#aa09286b99e12ea23e6a6ea14c5488469">remmina_plugin_vnc_update_quality</a>((rfbClient *)(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a33bc751b1d5728b624bfa57814504f90">client</a>),</div><div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>&#160;                          remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a0c7eab256e1b1fdf84be44e28cddc3de">file_get_int</a>(remminafile, <span class="stringliteral">&quot;quality&quot;</span>, 9));</div><div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>&#160;        <a class="code" href="vnc__plugin_8c.html#a7149c702b5beec6fccbf5d4207e0ff55">remmina_plugin_vnc_update_colordepth</a>((rfbClient *)(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a33bc751b1d5728b624bfa57814504f90">client</a>),</div><div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>&#160;                             remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a0c7eab256e1b1fdf84be44e28cddc3de">file_get_int</a>(remminafile, <span class="stringliteral">&quot;colordepth&quot;</span>, 32));</div><div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>&#160;        SetFormatAndEncodings((rfbClient *)(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a33bc751b1d5728b624bfa57814504f90">client</a>));</div><div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>&#160;    <span class="keywordflow">case</span> REMMINA_PLUGIN_VNC_FEATURE_PREF_COLOR:</div><div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>&#160;        client = (rfbClient *)(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a33bc751b1d5728b624bfa57814504f90">client</a>);</div><div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>&#160;        previous_bpp = client-&gt;format.bitsPerPixel;</div><div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>&#160;        <a class="code" href="vnc__plugin_8c.html#a7149c702b5beec6fccbf5d4207e0ff55">remmina_plugin_vnc_update_colordepth</a>(client,</div><div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>&#160;                             remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a0c7eab256e1b1fdf84be44e28cddc3de">file_get_int</a>(remminafile, <span class="stringliteral">&quot;colordepth&quot;</span>, 32));</div><div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>&#160;        SetFormatAndEncodings(client);</div><div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>&#160;        <span class="comment">//Need to clear away old and reallocate if we&#39;re increasing bpp </span></div><div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>&#160;        <span class="keywordflow">if</span> (client-&gt;format.bitsPerPixel &gt; previous_bpp){</div><div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>&#160;            <a class="code" href="vnc__plugin_8c.html#a91cf510208363f5678c65f420d2d0586">remmina_plugin_vnc_rfb_allocfb</a>((rfbClient *)(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a33bc751b1d5728b624bfa57814504f90">client</a>));</div><div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>&#160;            SendFramebufferUpdateRequest((rfbClient *)(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a33bc751b1d5728b624bfa57814504f90">client</a>), 0, 0,</div><div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>&#160;                         remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#adf255b7ceaec6a51fc9269cf824a02ce">protocol_plugin_get_width</a>(gp),</div><div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>&#160;                         remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#aa159850f20499e5bc1067f533d2fa820">protocol_plugin_get_height</a>(gp), FALSE);</div><div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>&#160;        }</div><div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>&#160;    <span class="keywordflow">case</span> REMMINA_PLUGIN_VNC_FEATURE_PREF_VIEWONLY:</div><div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>&#160;    <span class="keywordflow">case</span> REMMINA_PLUGIN_VNC_FEATURE_PREF_DISABLESERVERINPUT:</div><div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>&#160;        PermitServerInput((rfbClient *)(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a33bc751b1d5728b624bfa57814504f90">client</a>),</div><div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>&#160;                  remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a0c7eab256e1b1fdf84be44e28cddc3de">file_get_int</a>(remminafile, <span class="stringliteral">&quot;disableserverinput&quot;</span>, FALSE) ? 1 : 0);</div><div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>&#160;    <span class="keywordflow">case</span> REMMINA_PLUGIN_VNC_FEATURE_UNFOCUS:</div><div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>&#160;        <a class="code" href="vnc__plugin_8c.html#a3ba650386c03a1daa8a46546c81820c4">remmina_plugin_vnc_release_key</a>(gp, 0);</div><div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>&#160;    <span class="keywordflow">case</span> REMMINA_PLUGIN_VNC_FEATURE_SCALE:</div><div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>&#160;        <a class="code" href="vnc__plugin_8c.html#a1f57bda271e77f086885101650e8d82c">remmina_plugin_vnc_update_scale</a>(gp, remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a0c7eab256e1b1fdf84be44e28cddc3de">file_get_int</a>(remminafile, <span class="stringliteral">&quot;scale&quot;</span>, FALSE));</div><div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>&#160;    <span class="keywordflow">case</span> REMMINA_PLUGIN_VNC_FEATURE_TOOL_REFRESH:</div><div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>&#160;        SendFramebufferUpdateRequest((rfbClient *)(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a33bc751b1d5728b624bfa57814504f90">client</a>), 0, 0,</div><div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>&#160;                         remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#adf255b7ceaec6a51fc9269cf824a02ce">protocol_plugin_get_width</a>(gp),</div><div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>&#160;                         remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#aa159850f20499e5bc1067f533d2fa820">protocol_plugin_get_height</a>(gp), FALSE);</div><div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>&#160;    <span class="keywordflow">case</span> REMMINA_PLUGIN_VNC_FEATURE_TOOL_CHAT:</div><div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>&#160;        <a class="code" href="vnc__plugin_8c.html#a4d672e305030849447b5b8b522d82242">remmina_plugin_vnc_open_chat</a>(gp);</div><div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>&#160;    <span class="keywordflow">case</span> REMMINA_PLUGIN_VNC_FEATURE_TOOL_SENDCTRLALTDEL:</div><div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>&#160;        <a class="code" href="vnc__plugin_8c.html#acb2067d0a9a7a7e6d9f26b0357fbf0e1">remmina_plugin_vnc_send_ctrlaltdel</a>(gp);</div><div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>&#160;    <span class="keywordflow">default</span>:</div><div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>&#160;    }</div><div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>&#160;}</div><div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>&#160;</div><div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>&#160;<span class="comment">/* Send a keystroke to the plugin window */</span></div><div class="line"><a name="l01896"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#aacfc4c3693cace69153a6ad95a69495e"> 1896</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="vnc__plugin_8c.html#aacfc4c3693cace69153a6ad95a69495e">remmina_plugin_vnc_keystroke</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>, <span class="keyword">const</span> guint keystrokes[], <span class="keyword">const</span> gint keylen)</div><div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>&#160;{</div><div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>&#160;</div><div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>&#160;    remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a2d6704aa58ecc18ecc178ea418addd87">protocol_plugin_send_keys_signals</a>(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#acf12d2c89046160dddcae35af84e5e57">drawing_area</a>,</div><div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>&#160;                                  keystrokes, keylen, GDK_KEY_PRESS | GDK_KEY_RELEASE);</div><div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>&#160;    <span class="keywordflow">return</span>;</div><div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>&#160;}</div><div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>&#160;</div><div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>&#160;<span class="preprocessor">#if LIBVNCSERVER_CHECK_VERSION_VERSION(0, 9, 14)</span></div><div class="line"><a name="l01907"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#aa3c606397c49c49479e75783386477aa"> 1907</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="vnc__plugin_8c.html#aa3c606397c49c49479e75783386477aa">remmina_plugin_vnc_on_size_allocate</a>(GtkWidget *<a class="code" href="structon_main_thread__cb__data.html#af0d50114cec8cfdd7692a39c1fdba783">widget</a>, GtkAllocation *alloc, <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>)</div><div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>&#160;{</div><div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>&#160;    <a class="code" href="types_8h.html#aeea5ee1e675368413b6f6ab09883e7de">RemminaScaleMode</a> scale_mode = remmina_plugin_service-&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="l01911"></a><span class="lineno"> 1911</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>&#160;</div><div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>&#160;    <span class="keywordflow">if</span> (scale_mode == <a class="code" href="types_8h.html#aeea5ee1e675368413b6f6ab09883e7dea4d22c6eed721b661d618098159a20946">REMMINA_PROTOCOL_WIDGET_SCALE_MODE_DYNRES</a>){</div><div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>&#160;        <span class="keywordtype">char</span> str[1024];</div><div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>&#160;        sprintf(str, <span class="stringliteral">&quot;DEBUG: %d x %d&quot;</span>, alloc-&gt;width, alloc-&gt;height);</div><div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>&#160;        TRACE_CALL(str);</div><div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>&#160;        <span class="keywordflow">if</span> (gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a33bc751b1d5728b624bfa57814504f90">client</a>){</div><div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>&#160;            SendExtDesktopSize(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a33bc751b1d5728b624bfa57814504f90">client</a>, alloc-&gt;width, alloc-&gt;height);</div><div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>&#160;        }</div><div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>&#160;    }</div><div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>&#160;    <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>&#160;}</div><div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>&#160;</div><div class="line"><a name="l01925"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a5321b08f070c51b58669fe2187f35bc4"> 1925</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="vnc__plugin_8c.html#a5321b08f070c51b58669fe2187f35bc4">remmina_plugin_vnc_on_draw</a>(GtkWidget *<a class="code" href="structon_main_thread__cb__data.html#af0d50114cec8cfdd7692a39c1fdba783">widget</a>, cairo_t *context, <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>)</div><div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>&#160;{</div><div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata = GET_PLUGIN_DATA(gp);</div><div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>&#160;    cairo_surface_t *surface;</div><div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>&#160;    gint <a class="code" href="structon_main_thread__cb__data.html#a8bf0f89b3c961ac28ccae9a9e1060db4">width</a>, <a class="code" href="structon_main_thread__cb__data.html#aa01cccfd573952ec0cd5df823e2d8f74">height</a>;</div><div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>&#160;    GtkAllocation widget_allocation;</div><div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>&#160;</div><div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>&#160;    LOCK_BUFFER(FALSE);</div><div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>&#160;</div><div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>&#160;    surface = gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5412ada4c656d0053f0656bed890c030">rgb_buffer</a>;</div><div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>&#160;    <span class="keywordflow">if</span> (!surface) {</div><div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>&#160;        UNLOCK_BUFFER(FALSE);</div><div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>&#160;    }</div><div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>&#160;</div><div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>&#160;    width = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#adf255b7ceaec6a51fc9269cf824a02ce">protocol_plugin_get_width</a>(gp);</div><div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>&#160;    height = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#aa159850f20499e5bc1067f533d2fa820">protocol_plugin_get_height</a>(gp);</div><div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>&#160;</div><div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>&#160;    <span class="keywordflow">if</span> ((remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#ae97f4052c4bbda628682ae071ada27ed">remmina_protocol_widget_get_current_scale_mode</a>(gp) != <a class="code" href="types_8h.html#aeea5ee1e675368413b6f6ab09883e7dead50ff64ad1e14caf78956850f03871bd">REMMINA_PROTOCOL_WIDGET_SCALE_MODE_NONE</a>)) {</div><div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>&#160;        gtk_widget_get_allocation(widget, &amp;widget_allocation);</div><div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>&#160;        cairo_scale(context,</div><div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>&#160;                (<span class="keywordtype">double</span>)widget_allocation.width / width,</div><div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>&#160;                (<span class="keywordtype">double</span>)widget_allocation.height / height);</div><div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>&#160;    }</div><div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>&#160;</div><div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>&#160;    cairo_rectangle(context, 0, 0, width, height);</div><div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>&#160;    cairo_set_source_surface(context, surface, 0, 0);</div><div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>&#160;    cairo_fill(context);</div><div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>&#160;</div><div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>&#160;    UNLOCK_BUFFER(FALSE);</div><div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>&#160;    <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>&#160;}</div><div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>&#160;</div><div class="line"><a name="l01959"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a58be4b85cfe9050078599d73df2c21f0"> 1959</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="vnc__plugin_8c.html#a58be4b85cfe9050078599d73df2c21f0">remmina_plugin_vnc_init</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">gp</a>)</div><div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>&#160;{</div><div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>&#160;    <a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a> *gpdata;</div><div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>&#160;    gint flags;</div><div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>&#160;    gdouble aspect_ratio;</div><div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>&#160;</div><div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>&#160;    gpdata = g_new0(<a class="code" href="struct___remmina_plugin_vnc_data.html">RemminaPluginVncData</a>, 1);</div><div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>&#160;    g_object_set_data_full(G_OBJECT(gp), <span class="stringliteral">&quot;plugin-data&quot;</span>, gpdata, g_free);</div><div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>&#160;</div><div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>&#160;    gboolean disable_smooth_scrolling = FALSE;</div><div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>&#160;    <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a1409dcc143ddc35de86b792df095cfc4">protocol_plugin_get_file</a>(gp);</div><div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>&#160;</div><div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>&#160;    disable_smooth_scrolling = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a0c7eab256e1b1fdf84be44e28cddc3de">file_get_int</a>(remminafile, <span class="stringliteral">&quot;disablesmoothscrolling&quot;</span>, FALSE);</div><div class="line"><a name="l01973"></a><span class="lineno"> 1973</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="l01974"></a><span class="lineno"> 1974</span>&#160;</div><div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>&#160;    gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#acf12d2c89046160dddcae35af84e5e57">drawing_area</a> = gtk_drawing_area_new();</div><div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>&#160;    gtk_widget_show(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#acf12d2c89046160dddcae35af84e5e57">drawing_area</a>);</div><div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>&#160;</div><div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>&#160;    aspect_ratio = remmina_plugin_service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a80f2bf0ddb4035bef2298becf803c65e">file_get_double</a>(remminafile, <span class="stringliteral">&quot;aspect_ratio&quot;</span>, 0);</div><div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>&#160;    <span class="keywordflow">if</span> (aspect_ratio &gt; 0){</div><div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>&#160;        GtkWidget* aspectframe = gtk_aspect_frame_new(NULL, 0, 0, aspect_ratio, FALSE);</div><div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>&#160;</div><div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>&#160;        gtk_frame_set_shadow_type(GTK_FRAME(aspectframe), GTK_SHADOW_NONE);</div><div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>&#160;        gtk_widget_show(aspectframe);</div><div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>&#160;        gtk_container_add(GTK_CONTAINER(aspectframe), gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#acf12d2c89046160dddcae35af84e5e57">drawing_area</a>);</div><div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>&#160;        gtk_container_add(GTK_CONTAINER(gp), aspectframe);</div><div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>&#160;    }</div><div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>&#160;    <span class="keywordflow">else</span>{</div><div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>&#160;        gtk_container_add(GTK_CONTAINER(gp), gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#acf12d2c89046160dddcae35af84e5e57">drawing_area</a>);</div><div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>&#160;    }</div><div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>&#160;</div><div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>&#160;    gtk_widget_add_events(</div><div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#acf12d2c89046160dddcae35af84e5e57">drawing_area</a>,</div><div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>&#160;        GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK</div><div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>&#160;        | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK</div><div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>&#160;        | GDK_KEY_RELEASE_MASK</div><div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>&#160;        | GDK_SCROLL_MASK);</div><div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>&#160;    gtk_widget_set_can_focus(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#acf12d2c89046160dddcae35af84e5e57">drawing_area</a>, TRUE);</div><div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>&#160;</div><div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>&#160;    <span class="keywordflow">if</span> (!disable_smooth_scrolling) {</div><div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>&#160;        REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;Adding GDK_SMOOTH_SCROLL_MASK&quot;</span>);</div><div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>&#160;        gtk_widget_add_events(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#acf12d2c89046160dddcae35af84e5e57">drawing_area</a>, GDK_SMOOTH_SCROLL_MASK);</div><div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>&#160;    }</div><div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>&#160;</div><div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>&#160;</div><div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>&#160;    g_signal_connect(G_OBJECT(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#acf12d2c89046160dddcae35af84e5e57">drawing_area</a>), <span class="stringliteral">&quot;draw&quot;</span>, G_CALLBACK(<a class="code" href="vnc__plugin_8c.html#a5321b08f070c51b58669fe2187f35bc4">remmina_plugin_vnc_on_draw</a>), gp);</div><div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>&#160;<span class="preprocessor">#if LIBVNCSERVER_CHECK_VERSION_VERSION(0, 9, 14)</span></div><div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>&#160;    g_signal_connect(G_OBJECT(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#acf12d2c89046160dddcae35af84e5e57">drawing_area</a>), <span class="stringliteral">&quot;size-allocate&quot;</span>, G_CALLBACK(<a class="code" href="vnc__plugin_8c.html#aa3c606397c49c49479e75783386477aa">remmina_plugin_vnc_on_size_allocate</a>), gp);</div><div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>&#160;    gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5b17067fb2b9437f1fdf607334dfade3">auth_first</a> = TRUE;</div><div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>&#160;    gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#aaee126db00e50ad613a6c8ae032ba3b2">clipboard_timer</a> = g_date_time_new_now_utc();</div><div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>&#160;    gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a41dc885437b90c87b6a8b4367b0ba63c">listen_sock</a> = -1;</div><div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>&#160;    gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a0453c0a0676675e91ba19318dc9b06e0">pressed_keys</a> = g_ptr_array_new();</div><div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>&#160;    gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a0e175ab5a31b720d9d7dfc6923ce3c6a">vnc_event_queue</a> = g_queue_new();</div><div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>&#160;    pthread_mutex_init(&amp;gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a5f8bcbfe873d4949852e9624e1c43063">vnc_event_queue_mutex</a>, NULL);</div><div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>&#160;    <span class="keywordflow">if</span> (pipe(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a625ea21fb2d92cb8489d3c9e5a2477ea">vnc_event_pipe</a>)) {</div><div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>&#160;        g_print(<span class="stringliteral">&quot;Error creating pipes.\n&quot;</span>);</div><div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a625ea21fb2d92cb8489d3c9e5a2477ea">vnc_event_pipe</a>[0] = 0;</div><div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>&#160;        gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a625ea21fb2d92cb8489d3c9e5a2477ea">vnc_event_pipe</a>[1] = 0;</div><div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>&#160;    }</div><div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>&#160;    flags = fcntl(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a625ea21fb2d92cb8489d3c9e5a2477ea">vnc_event_pipe</a>[0], F_GETFL, 0);</div><div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>&#160;    fcntl(gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a625ea21fb2d92cb8489d3c9e5a2477ea">vnc_event_pipe</a>[0], F_SETFL, flags | O_NONBLOCK);</div><div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>&#160;</div><div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>&#160;    pthread_mutex_init(&amp;gpdata-&gt;<a class="code" href="struct___remmina_plugin_vnc_data.html#a824b3ab6d51d0ba65abdbd0e788edb89">buffer_mutex</a>, NULL);</div><div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>&#160;}</div><div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>&#160;</div><div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>&#160;<span class="comment">/* Array of key/value pairs for color depths */</span></div><div class="line"><a name="l02027"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a7d6c92b318e43b96efddbcaa9400c1f1"> 2027</a></span>&#160;<span class="keyword">static</span> gpointer <a class="code" href="vnc__plugin_8c.html#a7d6c92b318e43b96efddbcaa9400c1f1">colordepth_list</a>[] =</div><div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>&#160;{</div><div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>&#160;    <span class="stringliteral">&quot;32&quot;</span>, <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;True colour (32 bpp)&quot;</span>),</div><div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>&#160;    <span class="stringliteral">&quot;16&quot;</span>, <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;High colour (16 bpp)&quot;</span>),</div><div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>&#160;    <span class="stringliteral">&quot;8&quot;</span>,  <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;256 colours (8 bpp)&quot;</span>),</div><div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>&#160;    NULL</div><div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>&#160;};</div><div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>&#160;</div><div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>&#160;<span class="comment">/* Array of key/value pairs for quality selection */</span></div><div class="line"><a name="l02036"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a64254af45bb17a5a40a3a0383daa3fe7"> 2036</a></span>&#160;<span class="keyword">static</span> gpointer <a class="code" href="vnc__plugin_8c.html#a64254af45bb17a5a40a3a0383daa3fe7">quality_list</a>[] =</div><div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>&#160;{</div><div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>&#160;    <span class="stringliteral">&quot;2&quot;</span>, <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Good&quot;</span>),</div><div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>&#160;    <span class="stringliteral">&quot;9&quot;</span>, <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Best (slowest)&quot;</span>),</div><div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>&#160;    <span class="stringliteral">&quot;1&quot;</span>, <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Medium&quot;</span>),</div><div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>&#160;    <span class="stringliteral">&quot;0&quot;</span>, <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Poor (fastest)&quot;</span>),</div><div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>&#160;    NULL</div><div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>&#160;};</div><div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>&#160;</div><div class="line"><a name="l02045"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a616ad35664d4a399f88a8a84ee89140d"> 2045</a></span>&#160;<span class="keyword">static</span> gchar <a class="code" href="vnc__plugin_8c.html#a616ad35664d4a399f88a8a84ee89140d">repeater_tooltip</a>[] =</div><div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>&#160;    <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Connect to VNC using a repeater:\n&quot;</span></div><div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>&#160;       <span class="stringliteral">&quot;  • The server field must contain the repeater ID, e.g. ID:123456789\n&quot;</span></div><div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160;       <span class="stringliteral">&quot;  • The repeater field have to be set to the repeater IP and port, like:\n&quot;</span></div><div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160;       <span class="stringliteral">&quot;    10.10.10.12:5901\n&quot;</span></div><div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160;       <span class="stringliteral">&quot;  • From the remote VNC server, you will connect to\n&quot;</span></div><div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>&#160;       <span class="stringliteral">&quot;    the repeater, e.g. with x11vnc:\n&quot;</span></div><div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>&#160;       <span class="stringliteral">&quot;    x11vnc -connect repeater=ID:123456789+10.10.10.12:5500&quot;</span>);</div><div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>&#160;</div><div class="line"><a name="l02054"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a285701647495e19a7861c16b594d6c98"> 2054</a></span>&#160;<span class="keyword">static</span> gchar <a class="code" href="vnc__plugin_8c.html#a285701647495e19a7861c16b594d6c98">vnciport_tooltip</a>[] =</div><div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>&#160;    <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Listening for remote VNC connection:\n&quot;</span></div><div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>&#160;       <span class="stringliteral">&quot;  • The “Listen on port” field is the port Remmina will listen to,\n&quot;</span></div><div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>&#160;       <span class="stringliteral">&quot;    e.g. 8888\n&quot;</span></div><div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>&#160;       <span class="stringliteral">&quot;  • From the remote VNC server, you will connect to\n&quot;</span></div><div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>&#160;       <span class="stringliteral">&quot;    Remmina, e.g. with x11vnc:\n&quot;</span></div><div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>&#160;       <span class="stringliteral">&quot;    x11vnc -display :0 -connect 192.168.1.36:8888&quot;</span>);</div><div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>&#160;</div><div class="line"><a name="l02062"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a052429df6b9d03301a607fb4a3e3203d"> 2062</a></span>&#160;<span class="keyword">static</span> gchar <a class="code" href="vnc__plugin_8c.html#a052429df6b9d03301a607fb4a3e3203d">aspect_ratio_tooltip</a>[] =</div><div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>&#160;    <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Lock the aspect ratio when dynamic resolution is enabled:\n&quot;</span></div><div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>&#160;       <span class="stringliteral">&quot;\n&quot;</span></div><div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>&#160;       <span class="stringliteral">&quot;  • The aspect ratio should be entered as a decimal number, e.g. 1.777\n&quot;</span></div><div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>&#160;       <span class="stringliteral">&quot;  • 16:9 corresponds roughly to 1.7777, 4:3 corresponds roughly to 1.333\n&quot;</span></div><div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>&#160;       <span class="stringliteral">&quot;  • The default value of 0 does not enforce any aspect ratio&quot;</span>);       </div><div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>&#160;</div><div class="line"><a name="l02069"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a9573c48df84c26fb7f5fac785a0f7731"> 2069</a></span>&#160;<span class="keyword">static</span> gchar <a class="code" href="vnc__plugin_8c.html#a9573c48df84c26fb7f5fac785a0f7731">vncencodings_tooltip</a>[] =</div><div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>&#160;    <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Overriding the pre-set VNC encoding quality:\n&quot;</span></div><div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>&#160;       <span class="stringliteral">&quot;\n&quot;</span></div><div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>&#160;       <span class="stringliteral">&quot;  • “Poor (fastest)” sets encoding to “copyrect zlib hextile raw”\n&quot;</span></div><div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160;       <span class="stringliteral">&quot;  • “Medium” sets encoding to “tight zrle ultra copyrect hextile zlib corre rre raw”\n&quot;</span></div><div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160;       <span class="stringliteral">&quot;  • “Good” sets encoding to “tight zrle ultra copyrect hextile zlib corre rre raw”\n&quot;</span></div><div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>&#160;       <span class="stringliteral">&quot;  • “Best (slowest)” sets encoding to “copyrect zrle ultra zlib hextile corre rre raw”&quot;</span>);</div><div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>&#160;</div><div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160;<span class="comment">/* Array of RemminaProtocolSetting for basic settings.</span></div><div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>&#160;<span class="comment"> * Each item is composed by:</span></div><div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>&#160;<span class="comment"> * a) RemminaProtocolSettingType for setting type</span></div><div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>&#160;<span class="comment"> * b) Setting name</span></div><div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>&#160;<span class="comment"> * c) Setting description</span></div><div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>&#160;<span class="comment"> * d) Compact disposition</span></div><div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>&#160;<span class="comment"> * e) Values for REMMINA_PROTOCOL_SETTING_TYPE_SELECT or REMMINA_PROTOCOL_SETTING_TYPE_COMBO</span></div><div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160;<span class="comment"> * f) Setting tooltip</span></div><div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>&#160;<span class="comment"> * g) Validation data pointer, will be passed to the validation callback method.</span></div><div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>&#160;<span class="comment"> * h) Validation callback method (Can be NULL. Every entry will be valid then.)</span></div><div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>&#160;<span class="comment"> *      use following prototype:</span></div><div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>&#160;<span class="comment"> *      gboolean mysetting_validator_method(gpointer key, gpointer value,</span></div><div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>&#160;<span class="comment"> *                          gpointer validator_data);</span></div><div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>&#160;<span class="comment"> *      gpointer key is a gchar* containing the setting&#39;s name,</span></div><div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>&#160;<span class="comment"> *      gpointer value contains the value which should be validated,</span></div><div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>&#160;<span class="comment"> *      gpointer validator_data contains your passed data.</span></div><div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02094"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a8b2de0c8917cafa414c0b9ed4c29aee3"> 2094</a></span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="struct___remmina_protocol_setting.html">RemminaProtocolSetting</a> <a class="code" href="vnc__plugin_8c.html#a8b2de0c8917cafa414c0b9ed4c29aee3">remmina_plugin_vnc_basic_settings</a>[] =</div><div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>&#160;{</div><div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>&#160;    { <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a579ed0f0f6624dd55a25665693c92a92">REMMINA_PROTOCOL_SETTING_TYPE_SERVER</a>,   <span class="stringliteral">&quot;server&quot;</span>, NULL,            FALSE, <span class="stringliteral">&quot;_rfb._tcp&quot;</span>,     NULL,         NULL, NULL },</div><div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>&#160;    { <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a8be3f210c609fde31f68e607c41de296">REMMINA_PROTOCOL_SETTING_TYPE_TEXT</a>,     <span class="stringliteral">&quot;proxy&quot;</span>,  <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Repeater&quot;</span>),      FALSE, NULL,        <a class="code" href="vnc__plugin_8c.html#a616ad35664d4a399f88a8a84ee89140d">repeater_tooltip</a>, NULL, NULL },</div><div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160;    { <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a8be3f210c609fde31f68e607c41de296">REMMINA_PROTOCOL_SETTING_TYPE_TEXT</a>,     <span class="stringliteral">&quot;username&quot;</span>,   <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Username&quot;</span>),      FALSE, NULL,        NULL,         NULL, NULL },</div><div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>&#160;    { <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350ae76d06b6e313971e5f420dd6e7f4c5aa">REMMINA_PROTOCOL_SETTING_TYPE_PASSWORD</a>, <span class="stringliteral">&quot;password&quot;</span>,   <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;User password&quot;</span>), FALSE, NULL,        NULL,         NULL, NULL },</div><div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>&#160;    { <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a04da01eead7904a55d1c813950609b2d">REMMINA_PROTOCOL_SETTING_TYPE_SELECT</a>,   <span class="stringliteral">&quot;colordepth&quot;</span>, <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Colour depth&quot;</span>),  FALSE, <a class="code" href="vnc__plugin_8c.html#a7d6c92b318e43b96efddbcaa9400c1f1">colordepth_list</a>, NULL,         NULL, NULL },</div><div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>&#160;    { <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a04da01eead7904a55d1c813950609b2d">REMMINA_PROTOCOL_SETTING_TYPE_SELECT</a>,   <span class="stringliteral">&quot;quality&quot;</span>,    <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Quality&quot;</span>),       FALSE, <a class="code" href="vnc__plugin_8c.html#a64254af45bb17a5a40a3a0383daa3fe7">quality_list</a>,    NULL,         NULL, NULL },</div><div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>&#160;    { <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350ad9418344a7f597351e3cc5639be78425">REMMINA_PROTOCOL_SETTING_TYPE_KEYMAP</a>,   <span class="stringliteral">&quot;keymap&quot;</span>, NULL,            FALSE, NULL,        NULL,         NULL, NULL },</div><div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160;    { <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350ad898beb6ae625dee1ae27de75f1ab4e3">REMMINA_PROTOCOL_SETTING_TYPE_END</a>,      NULL,     NULL,            FALSE, NULL,        NULL,         NULL, NULL }</div><div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160;};</div><div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>&#160;</div><div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>&#160;<span class="comment">// Same as above.</span></div><div class="line"><a name="l02107"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#ac25782cb49710754854863dc9500bd57"> 2107</a></span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="struct___remmina_protocol_setting.html">RemminaProtocolSetting</a> <a class="code" href="vnc__plugin_8c.html#ac25782cb49710754854863dc9500bd57">remmina_plugin_vnci_basic_settings</a>[] =</div><div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>&#160;{</div><div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>&#160;    { <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a8be3f210c609fde31f68e607c41de296">REMMINA_PROTOCOL_SETTING_TYPE_TEXT</a>,     <span class="stringliteral">&quot;listenport&quot;</span>, <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Listen on port&quot;</span>), FALSE, NULL,        <a class="code" href="vnc__plugin_8c.html#a285701647495e19a7861c16b594d6c98">vnciport_tooltip</a>, NULL, NULL},</div><div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>&#160;    { <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a8be3f210c609fde31f68e607c41de296">REMMINA_PROTOCOL_SETTING_TYPE_TEXT</a>,     <span class="stringliteral">&quot;username&quot;</span>,   <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Username&quot;</span>),       FALSE, NULL,        NULL,     NULL, NULL},</div><div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>&#160;    { <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350ae76d06b6e313971e5f420dd6e7f4c5aa">REMMINA_PROTOCOL_SETTING_TYPE_PASSWORD</a>, <span class="stringliteral">&quot;password&quot;</span>,   <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;User password&quot;</span>),  FALSE, NULL,        NULL,     NULL, NULL},</div><div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>&#160;    { <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a04da01eead7904a55d1c813950609b2d">REMMINA_PROTOCOL_SETTING_TYPE_SELECT</a>,   <span class="stringliteral">&quot;colordepth&quot;</span>, <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Colour depth&quot;</span>),   FALSE, <a class="code" href="vnc__plugin_8c.html#a7d6c92b318e43b96efddbcaa9400c1f1">colordepth_list</a>, NULL,     NULL, NULL},</div><div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>&#160;    { <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a04da01eead7904a55d1c813950609b2d">REMMINA_PROTOCOL_SETTING_TYPE_SELECT</a>,   <span class="stringliteral">&quot;quality&quot;</span>,    <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Quality&quot;</span>),        FALSE, <a class="code" href="vnc__plugin_8c.html#a64254af45bb17a5a40a3a0383daa3fe7">quality_list</a>,    NULL,     NULL, NULL},</div><div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>&#160;    { <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350ad9418344a7f597351e3cc5639be78425">REMMINA_PROTOCOL_SETTING_TYPE_KEYMAP</a>,   <span class="stringliteral">&quot;keymap&quot;</span>, NULL,             FALSE, NULL,        NULL,     NULL, NULL},</div><div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>&#160;    { <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350ad898beb6ae625dee1ae27de75f1ab4e3">REMMINA_PROTOCOL_SETTING_TYPE_END</a>,      NULL,     NULL,             FALSE, NULL,        NULL,     NULL, NULL}</div><div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>&#160;};</div><div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>&#160;</div><div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>&#160;<span class="comment">/* Array of RemminaProtocolSetting for advanced settings.</span></div><div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>&#160;<span class="comment"> * Each item is composed by:</span></div><div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>&#160;<span class="comment"> * a) RemminaProtocolSettingType for setting type</span></div><div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>&#160;<span class="comment"> * b) Setting name</span></div><div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>&#160;<span class="comment"> * c) Setting description</span></div><div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>&#160;<span class="comment"> * d) Compact disposition</span></div><div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>&#160;<span class="comment"> * e) Values for REMMINA_PROTOCOL_SETTING_TYPE_SELECT or REMMINA_PROTOCOL_SETTING_TYPE_COMBO</span></div><div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>&#160;<span class="comment"> * f) Setting Tooltip</span></div><div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02127"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a8525912fbb407209875f84448abec8c7"> 2127</a></span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="struct___remmina_protocol_setting.html">RemminaProtocolSetting</a> <a class="code" href="vnc__plugin_8c.html#a8525912fbb407209875f84448abec8c7">remmina_plugin_vnc_advanced_settings</a>[] =</div><div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>&#160;{</div><div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>&#160;    { <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a8be3f210c609fde31f68e607c41de296">REMMINA_PROTOCOL_SETTING_TYPE_TEXT</a>,  <span class="stringliteral">&quot;encodings&quot;</span>,      <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Override pre-set VNC encodings&quot;</span>),          FALSE, NULL, vncencodings_tooltip },</div><div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>&#160;    { <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a8be3f210c609fde31f68e607c41de296">REMMINA_PROTOCOL_SETTING_TYPE_TEXT</a>,  <span class="stringliteral">&quot;aspect_ratio&quot;</span>,       <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Dynamic resolution enforced aspec ratio&quot;</span>),         FALSE, NULL, aspect_ratio_tooltip },</div><div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>&#160;    { <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a52a80f3f9b84e9e0d0bf3335cfd7527f">REMMINA_PROTOCOL_SETTING_TYPE_CHECK</a>, <span class="stringliteral">&quot;tightencoding&quot;</span>, <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Force tight encoding&quot;</span>),         TRUE, NULL, <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Enabling this may help when the remote desktop looks scrambled&quot;</span>) },</div><div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>&#160;    { <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a52a80f3f9b84e9e0d0bf3335cfd7527f">REMMINA_PROTOCOL_SETTING_TYPE_CHECK</a>, <span class="stringliteral">&quot;disablesmoothscrolling&quot;</span>, <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Disable smooth scrolling&quot;</span>),        FALSE, NULL, NULL },</div><div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>&#160;    { <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a52a80f3f9b84e9e0d0bf3335cfd7527f">REMMINA_PROTOCOL_SETTING_TYPE_CHECK</a>, <span class="stringliteral">&quot;disablepasswordstoring&quot;</span>, <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Forget passwords after use&quot;</span>),      TRUE,  NULL, NULL },</div><div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>&#160;    { <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a52a80f3f9b84e9e0d0bf3335cfd7527f">REMMINA_PROTOCOL_SETTING_TYPE_CHECK</a>, <span class="stringliteral">&quot;disableserverbell&quot;</span>,  <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Ignore remote bell messages&quot;</span>),     FALSE, NULL, NULL },</div><div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>&#160;    { <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a52a80f3f9b84e9e0d0bf3335cfd7527f">REMMINA_PROTOCOL_SETTING_TYPE_CHECK</a>, <span class="stringliteral">&quot;disableserverinput&quot;</span>,     <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Prevent local interaction on the server&quot;</span>), TRUE,  NULL, NULL },</div><div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>&#160;    { <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a52a80f3f9b84e9e0d0bf3335cfd7527f">REMMINA_PROTOCOL_SETTING_TYPE_CHECK</a>, <span class="stringliteral">&quot;showcursor&quot;</span>,         <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Show remote cursor&quot;</span>),          FALSE,  NULL, NULL },</div><div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>&#160;    { <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a52a80f3f9b84e9e0d0bf3335cfd7527f">REMMINA_PROTOCOL_SETTING_TYPE_CHECK</a>, <span class="stringliteral">&quot;disableclipboard&quot;</span>,   <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Turn off clipboard sync&quot;</span>),         TRUE,  NULL, NULL },</div><div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>&#160;    { <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a52a80f3f9b84e9e0d0bf3335cfd7527f">REMMINA_PROTOCOL_SETTING_TYPE_CHECK</a>, <span class="stringliteral">&quot;disableencryption&quot;</span>,  <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Turn off encryption&quot;</span>),         FALSE, NULL, NULL },</div><div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>&#160;    { <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a52a80f3f9b84e9e0d0bf3335cfd7527f">REMMINA_PROTOCOL_SETTING_TYPE_CHECK</a>, <span class="stringliteral">&quot;viewonly&quot;</span>,       <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;View only&quot;</span>),               TRUE, NULL, NULL },</div><div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>&#160;    { <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350ad898beb6ae625dee1ae27de75f1ab4e3">REMMINA_PROTOCOL_SETTING_TYPE_END</a>,   NULL,             NULL,                      FALSE, NULL, NULL }</div><div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>&#160;};</div><div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>&#160;</div><div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>&#160;<span class="comment">/* Array for available features.</span></div><div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>&#160;<span class="comment"> * The last element of the array must be REMMINA_PROTOCOL_FEATURE_TYPE_END. */</span></div><div class="line"><a name="l02145"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#ab9cd44cc6ac7467e6c31c3d5fe77ac21"> 2145</a></span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="struct___remmina_protocol_feature.html">RemminaProtocolFeature</a> <a class="code" href="vnc__plugin_8c.html#ab9cd44cc6ac7467e6c31c3d5fe77ac21">remmina_plugin_vnc_features</a>[] =</div><div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>&#160;{</div><div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>&#160;    { <a class="code" href="types_8h.html#a77ae46c4fd739dcd8e819fe9cdae27c5a26774624e955f451f7e4270c36622527">REMMINA_PROTOCOL_FEATURE_TYPE_PREF</a>,    REMMINA_PLUGIN_VNC_FEATURE_PREF_QUALITY,        GINT_TO_POINTER(REMMINA_PROTOCOL_FEATURE_PREF_RADIO), <span class="stringliteral">&quot;quality&quot;</span>,</div><div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>&#160;      quality_list },</div><div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>&#160;    { <a class="code" href="types_8h.html#a77ae46c4fd739dcd8e819fe9cdae27c5a26774624e955f451f7e4270c36622527">REMMINA_PROTOCOL_FEATURE_TYPE_PREF</a>,    REMMINA_PLUGIN_VNC_FEATURE_PREF_COLOR,      GINT_TO_POINTER(REMMINA_PROTOCOL_FEATURE_PREF_RADIO), <span class="stringliteral">&quot;colordepth&quot;</span>,</div><div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>&#160;      colordepth_list },</div><div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>&#160;    { <a class="code" href="types_8h.html#a77ae46c4fd739dcd8e819fe9cdae27c5a26774624e955f451f7e4270c36622527">REMMINA_PROTOCOL_FEATURE_TYPE_PREF</a>,    REMMINA_PLUGIN_VNC_FEATURE_PREF_VIEWONLY,       GINT_TO_POINTER(REMMINA_PROTOCOL_FEATURE_PREF_CHECK), <span class="stringliteral">&quot;viewonly&quot;</span>,</div><div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>&#160;      <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;View only&quot;</span>) },</div><div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>&#160;    { <a class="code" href="types_8h.html#a77ae46c4fd739dcd8e819fe9cdae27c5a26774624e955f451f7e4270c36622527">REMMINA_PROTOCOL_FEATURE_TYPE_PREF</a>,    REMMINA_PLUGIN_VNC_FEATURE_PREF_DISABLESERVERINPUT, GINT_TO_POINTER(REMMINA_PROTOCOL_FEATURE_PREF_CHECK), <span class="stringliteral">&quot;disableserverinput&quot;</span>,<a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Prevent local interaction on the server&quot;</span>)  },</div><div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>&#160;    { <a class="code" href="types_8h.html#a77ae46c4fd739dcd8e819fe9cdae27c5a645d9a32b55325b3672e265a64d0a507">REMMINA_PROTOCOL_FEATURE_TYPE_TOOL</a>,    REMMINA_PLUGIN_VNC_FEATURE_TOOL_REFRESH,        <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Refresh&quot;</span>),                    NULL,        NULL                           },</div><div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>&#160;    { <a class="code" href="types_8h.html#a77ae46c4fd739dcd8e819fe9cdae27c5a645d9a32b55325b3672e265a64d0a507">REMMINA_PROTOCOL_FEATURE_TYPE_TOOL</a>,    REMMINA_PLUGIN_VNC_FEATURE_TOOL_CHAT,           <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Open Chat…&quot;</span>),                    <span class="stringliteral">&quot;face-smile&quot;</span>,    NULL                           },</div><div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>&#160;    { <a class="code" href="types_8h.html#a77ae46c4fd739dcd8e819fe9cdae27c5a645d9a32b55325b3672e265a64d0a507">REMMINA_PROTOCOL_FEATURE_TYPE_TOOL</a>,    REMMINA_PLUGIN_VNC_FEATURE_TOOL_SENDCTRLALTDEL,     <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Send Ctrl+Alt+Delete&quot;</span>),               NULL,        NULL                           },</div><div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>&#160;    { <a class="code" href="types_8h.html#a77ae46c4fd739dcd8e819fe9cdae27c5affe302f5d3151bfe99607edf308c3c9f">REMMINA_PROTOCOL_FEATURE_TYPE_SCALE</a>,   REMMINA_PLUGIN_VNC_FEATURE_SCALE,           NULL,                         NULL,        NULL                           },</div><div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>&#160;    { <a class="code" href="types_8h.html#a77ae46c4fd739dcd8e819fe9cdae27c5a0658dd6adcfaf5cb52d6d99c97c352d1">REMMINA_PROTOCOL_FEATURE_TYPE_UNFOCUS</a>, REMMINA_PLUGIN_VNC_FEATURE_UNFOCUS,             NULL,                         NULL,        NULL                           },</div><div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>&#160;<span class="preprocessor">#if LIBVNCSERVER_CHECK_VERSION_VERSION(0, 9, 14)</span></div><div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>&#160;    { <a class="code" href="types_8h.html#a77ae46c4fd739dcd8e819fe9cdae27c5a23e854b5f2eb0c8d3efa54cac0acb6cf">REMMINA_PROTOCOL_FEATURE_TYPE_DYNRESUPDATE</a>, REMMINA_PLUGIN_VNC_FEATURE_DYNRESUPDATE,         NULL,               NULL, NULL },</div><div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>&#160;<span class="preprocessor">#endif  </span></div><div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>&#160;    { <a class="code" href="types_8h.html#a77ae46c4fd739dcd8e819fe9cdae27c5a311d2a8dae8d3d7b9045b4b704f94fe4">REMMINA_PROTOCOL_FEATURE_TYPE_END</a>,     0,                          NULL,                         NULL,        NULL                           }</div><div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>&#160;};</div><div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>&#160;</div><div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>&#160;<span class="comment">/* Protocol plugin definition and features */</span></div><div class="line"><a name="l02166"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a954db5d93dbd612c1f64c3a3b05b97ea"> 2166</a></span>&#160;<span class="keyword">static</span> <a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> <a class="code" href="vnc__plugin_8c.html#a954db5d93dbd612c1f64c3a3b05b97ea">remmina_plugin_vnc</a> =</div><div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>&#160;{</div><div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>&#160;    <a class="code" href="plugin_8h.html#aaf53c620d115a4642130227cff4a624aa45e094c248384c12cdafd9d088e4aa24">REMMINA_PLUGIN_TYPE_PROTOCOL</a>,                   <span class="comment">// Type</span></div><div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>&#160;    VNC_PLUGIN_NAME,                                <span class="comment">// Name</span></div><div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>&#160;    VNC_PLUGIN_DESCRIPTION,                         <span class="comment">// Description</span></div><div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>&#160;    GETTEXT_PACKAGE,                                <span class="comment">// Translation domain</span></div><div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>&#160;    VNC_PLUGIN_VERSION,                             <span class="comment">// Version number</span></div><div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>&#160;    VNC_PLUGIN_APPICON,                             <span class="comment">// Icon for normal connection</span></div><div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>&#160;    VNC_PLUGIN_SSH_APPICON,                         <span class="comment">// Icon for SSH connection</span></div><div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>&#160;    <a class="code" href="vnc__plugin_8c.html#a8b2de0c8917cafa414c0b9ed4c29aee3">remmina_plugin_vnc_basic_settings</a>,              <span class="comment">// Array for basic settings</span></div><div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>&#160;    <a class="code" href="vnc__plugin_8c.html#a8525912fbb407209875f84448abec8c7">remmina_plugin_vnc_advanced_settings</a>,           <span class="comment">// Array for advanced settings</span></div><div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>&#160;    <a class="code" href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7ab0449f571d03e46b99b301792a5d8e1a">REMMINA_PROTOCOL_SSH_SETTING_TUNNEL</a>,            <span class="comment">// SSH settings type</span></div><div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>&#160;    <a class="code" href="vnc__plugin_8c.html#ab9cd44cc6ac7467e6c31c3d5fe77ac21">remmina_plugin_vnc_features</a>,                    <span class="comment">// Array for available features</span></div><div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>&#160;    <a class="code" href="vnc__plugin_8c.html#a58be4b85cfe9050078599d73df2c21f0">remmina_plugin_vnc_init</a>,                        <span class="comment">// Plugin initialization</span></div><div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>&#160;    <a class="code" href="vnc__plugin_8c.html#a29fb120041bcace9f201cbdf3a3f6f2f">remmina_plugin_vnc_open_connection</a>,             <span class="comment">// Plugin open connection</span></div><div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>&#160;    <a class="code" href="vnc__plugin_8c.html#a7fa113e651e76230f66ca23135f2c688">remmina_plugin_vnc_close_connection</a>,            <span class="comment">// Plugin close connection</span></div><div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>&#160;    <a class="code" href="vnc__plugin_8c.html#a6497b38386d6de20157b0baf75dcbf44">remmina_plugin_vnc_query_feature</a>,               <span class="comment">// Query for available features</span></div><div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>&#160;    <a class="code" href="vnc__plugin_8c.html#a626a6a09f076b133df208d5bc04233b6">remmina_plugin_vnc_call_feature</a>,                <span class="comment">// Call a feature</span></div><div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>&#160;    <a class="code" href="vnc__plugin_8c.html#aacfc4c3693cace69153a6ad95a69495e">remmina_plugin_vnc_keystroke</a>                    <span class="comment">// Send a keystroke</span></div><div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>&#160;};</div><div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>&#160;</div><div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>&#160;<span class="comment">/* Protocol plugin definition and features */</span></div><div class="line"><a name="l02188"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a289d56662190215fffd46338a57133d9"> 2188</a></span>&#160;<span class="keyword">static</span> <a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> <a class="code" href="vnc__plugin_8c.html#a289d56662190215fffd46338a57133d9">remmina_plugin_vnci</a> =</div><div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>&#160;{</div><div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>&#160;    <a class="code" href="plugin_8h.html#aaf53c620d115a4642130227cff4a624aa45e094c248384c12cdafd9d088e4aa24">REMMINA_PLUGIN_TYPE_PROTOCOL</a>,                   <span class="comment">// Type</span></div><div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>&#160;    VNCI_PLUGIN_NAME,                               <span class="comment">// Name</span></div><div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>&#160;    VNCI_PLUGIN_DESCRIPTION,                        <span class="comment">// Description</span></div><div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>&#160;    GETTEXT_PACKAGE,                                <span class="comment">// Translation domain</span></div><div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>&#160;    VERSION,                                        <span class="comment">// Version number</span></div><div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>&#160;    VNCI_PLUGIN_APPICON,                            <span class="comment">// Icon for normal connection</span></div><div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>&#160;    VNCI_PLUGIN_SSH_APPICON,                        <span class="comment">// Icon for SSH connection</span></div><div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>&#160;    <a class="code" href="vnc__plugin_8c.html#ac25782cb49710754854863dc9500bd57">remmina_plugin_vnci_basic_settings</a>,             <span class="comment">// Array for basic settings</span></div><div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>&#160;    <a class="code" href="vnc__plugin_8c.html#a8525912fbb407209875f84448abec8c7">remmina_plugin_vnc_advanced_settings</a>,           <span class="comment">// Array for advanced settings</span></div><div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>&#160;    <a class="code" href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7a2f71ac2987eeec94430308f6f36840cd">REMMINA_PROTOCOL_SSH_SETTING_REVERSE_TUNNEL</a>,    <span class="comment">// SSH settings type</span></div><div class="line"><a name="l02200"></a><span class="lineno"> 2200</span>&#160;    <a class="code" href="vnc__plugin_8c.html#ab9cd44cc6ac7467e6c31c3d5fe77ac21">remmina_plugin_vnc_features</a>,                    <span class="comment">// Array for available features</span></div><div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>&#160;    <a class="code" href="vnc__plugin_8c.html#a58be4b85cfe9050078599d73df2c21f0">remmina_plugin_vnc_init</a>,                        <span class="comment">// Plugin initialization</span></div><div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>&#160;    <a class="code" href="vnc__plugin_8c.html#a29fb120041bcace9f201cbdf3a3f6f2f">remmina_plugin_vnc_open_connection</a>,             <span class="comment">// Plugin open connection</span></div><div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>&#160;    <a class="code" href="vnc__plugin_8c.html#a7fa113e651e76230f66ca23135f2c688">remmina_plugin_vnc_close_connection</a>,            <span class="comment">// Plugin close connection</span></div><div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>&#160;    <a class="code" href="vnc__plugin_8c.html#a6497b38386d6de20157b0baf75dcbf44">remmina_plugin_vnc_query_feature</a>,               <span class="comment">// Query for available features</span></div><div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>&#160;    <a class="code" href="vnc__plugin_8c.html#a626a6a09f076b133df208d5bc04233b6">remmina_plugin_vnc_call_feature</a>,                <span class="comment">// Call a feature</span></div><div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>&#160;    <a class="code" href="vnc__plugin_8c.html#aacfc4c3693cace69153a6ad95a69495e">remmina_plugin_vnc_keystroke</a>,                   <span class="comment">// Send a keystroke</span></div><div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>&#160;    NULL,                                           <span class="comment">// No screenshot support available</span></div><div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>&#160;    NULL,                                           <span class="comment">// RCW map event</span></div><div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>&#160;    NULL                                            <span class="comment">// RCW unmap event</span></div><div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>&#160;};</div><div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>&#160;</div><div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>&#160;G_MODULE_EXPORT gboolean</div><div class="line"><a name="l02213"></a><span class="lineno"><a class="line" href="vnc__plugin_8c.html#a56e5020de11446dbc23f3480e313f208"> 2213</a></span>&#160;<a class="code" href="vnc__plugin_8c.html#a56e5020de11446dbc23f3480e313f208">remmina_plugin_entry</a>(<a class="code" href="struct___remmina_plugin_service.html">RemminaPluginService</a> *service)</div><div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>&#160;{</div><div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>&#160;    remmina_plugin_service = service;</div><div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>&#160;</div><div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>&#160;    bindtextdomain(GETTEXT_PACKAGE, REMMINA_RUNTIME_LOCALEDIR);</div><div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>&#160;    bind_textdomain_codeset(GETTEXT_PACKAGE, <span class="stringliteral">&quot;UTF-8&quot;</span>);</div><div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>&#160;</div><div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>&#160;    <span class="keywordflow">if</span> (!service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a529cc64f67b16f13f0445add690a8df2">register_plugin</a>((<a class="code" href="struct___remmina_plugin.html">RemminaPlugin</a> *)&amp;remmina_plugin_vnc))</div><div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>&#160;</div><div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>&#160;    <span class="keywordflow">if</span> (!service-&gt;<a class="code" href="struct___remmina_plugin_service.html#a529cc64f67b16f13f0445add690a8df2">register_plugin</a>((<a class="code" href="struct___remmina_plugin.html">RemminaPlugin</a> *)&amp;remmina_plugin_vnci))</div><div class="line"><a name="l02225"></a><span class="lineno"> 2225</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l02226"></a><span class="lineno"> 2226</span>&#160;</div><div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>&#160;    <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l02228"></a><span class="lineno"> 2228</span>&#160;}</div><div class="ttc" id="types_8h_html_aee1a3e130e6991978acd907b52204350a579ed0f0f6624dd55a25665693c92a92"><div class="ttname"><a href="types_8h.html#aee1a3e130e6991978acd907b52204350a579ed0f0f6624dd55a25665693c92a92">REMMINA_PROTOCOL_SETTING_TYPE_SERVER</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00100">types.h:100</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a7bce24c89cf4554a664693a6b5e1a78d"><div class="ttname"><a href="vnc__plugin_8c.html#a7bce24c89cf4554a664693a6b5e1a78d">remmina_plugin_vnc_on_cuttext</a></div><div class="ttdeci">static void remmina_plugin_vnc_on_cuttext(GtkClipboard *clipboard, GdkEvent *event, RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l01645">vnc_plugin.c:1645</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_data_html_a782a902d036e12eb08bfcd1006c12b97"><div class="ttname"><a href="struct___remmina_plugin_vnc_data.html#a782a902d036e12eb08bfcd1006c12b97">_RemminaPluginVncData::auth_called</a></div><div class="ttdeci">gboolean auth_called</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00086">vnc_plugin.h:86</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_aa3c606397c49c49479e75783386477aa"><div class="ttname"><a href="vnc__plugin_8c.html#aa3c606397c49c49479e75783386477aa">remmina_plugin_vnc_on_size_allocate</a></div><div class="ttdeci">static gboolean remmina_plugin_vnc_on_size_allocate(GtkWidget *widget, GtkAllocation *alloc, RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l01907">vnc_plugin.c:1907</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_af1a91949fa5f1c5ff978046e8186a5f8"><div class="ttname"><a href="vnc__plugin_8c.html#af1a91949fa5f1c5ff978046e8186a5f8">remmina_plugin_vnc_bits</a></div><div class="ttdeci">static gint remmina_plugin_vnc_bits(gint n)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00540">vnc_plugin.c:540</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_acb2067d0a9a7a7e6d9f26b0357fbf0e1"><div class="ttname"><a href="vnc__plugin_8c.html#acb2067d0a9a7a7e6d9f26b0357fbf0e1">remmina_plugin_vnc_send_ctrlaltdel</a></div><div class="ttdeci">static void remmina_plugin_vnc_send_ctrlaltdel(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l01019">vnc_plugin.c:1019</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_data_html_acf12d2c89046160dddcae35af84e5e57"><div class="ttname"><a href="struct___remmina_plugin_vnc_data.html#acf12d2c89046160dddcae35af84e5e57">_RemminaPluginVncData::drawing_area</a></div><div class="ttdeci">GtkWidget * drawing_area</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00090">vnc_plugin.h:90</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_a9e481e56c9970b741a109c0af04c650d"><div class="ttname"><a href="struct___remmina_plugin_service.html#a9e481e56c9970b741a109c0af04c650d">_RemminaPluginService::protocol_plugin_init_get_cacert</a></div><div class="ttdeci">gchar *(* protocol_plugin_init_get_cacert)(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00199">plugin.h:199</a></div></div>
<div class="ttc" id="struct___remmina_plugin_html"><div class="ttname"><a href="struct___remmina_plugin.html">_RemminaPlugin</a></div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00056">plugin.h:56</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a616ad35664d4a399f88a8a84ee89140d"><div class="ttname"><a href="vnc__plugin_8c.html#a616ad35664d4a399f88a8a84ee89140d">repeater_tooltip</a></div><div class="ttdeci">static gchar repeater_tooltip[]</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l02045">vnc_plugin.c:2045</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_event_html"><div class="ttname"><a href="struct___remmina_plugin_vnc_event.html">_RemminaPluginVncEvent</a></div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00131">vnc_plugin.h:131</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_a83f3c05d16949a06cdddb5c7432b5053"><div class="ttname"><a href="struct___remmina_plugin_service.html#a83f3c05d16949a06cdddb5c7432b5053">_RemminaPluginService::protocol_plugin_chat_close</a></div><div class="ttdeci">void(* protocol_plugin_chat_close)(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00210">plugin.h:210</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a18ba6738d4a3d84a4a38e45ecc0e704a"><div class="ttname"><a href="vnc__plugin_8c.html#a18ba6738d4a3d84a4a38e45ecc0e704a">remmina_plugin_vnc_on_realize</a></div><div class="ttdeci">static void remmina_plugin_vnc_on_realize(RemminaProtocolWidget *gp, gpointer data)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l01660">vnc_plugin.c:1660</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_data_html_a0c3efe656bbe8ce7a9216f121972b2fe"><div class="ttname"><a href="struct___remmina_plugin_vnc_data.html#a0c3efe656bbe8ce7a9216f121972b2fe">_RemminaPluginVncData::scroll_y_accumulator</a></div><div class="ttdeci">float scroll_y_accumulator</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00118">vnc_plugin.h:118</a></div></div>
<div class="ttc" id="types_8h_html_a77ae46c4fd739dcd8e819fe9cdae27c5a23e854b5f2eb0c8d3efa54cac0acb6cf"><div class="ttname"><a href="types_8h.html#a77ae46c4fd739dcd8e819fe9cdae27c5a23e854b5f2eb0c8d3efa54cac0acb6cf">REMMINA_PROTOCOL_FEATURE_TYPE_DYNRESUPDATE</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00052">types.h:52</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_data_html_aeae081d32acaa79294cba7adaf6c57dd"><div class="ttname"><a href="struct___remmina_plugin_vnc_data.html#aeae081d32acaa79294cba7adaf6c57dd">_RemminaPluginVncData::queuecursor_y</a></div><div class="ttdeci">gint queuecursor_y</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00101">vnc_plugin.h:101</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_aae5060f94c26073c776213a0ddb0f2a2"><div class="ttname"><a href="vnc__plugin_8c.html#aae5060f94c26073c776213a0ddb0f2a2">remmina_plugin_vnc_rfb_finished</a></div><div class="ttdeci">static void remmina_plugin_vnc_rfb_finished(rfbClient *cl) __attribute__((unused))</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00716">vnc_plugin.c:716</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="structon_main_thread__cb__data_html_af0d50114cec8cfdd7692a39c1fdba783"><div class="ttname"><a href="structon_main_thread__cb__data.html#af0d50114cec8cfdd7692a39c1fdba783">onMainThread_cb_data::widget</a></div><div class="ttdeci">GtkWidget * widget</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00070">vnc_plugin.c:70</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a58be4b85cfe9050078599d73df2c21f0"><div class="ttname"><a href="vnc__plugin_8c.html#a58be4b85cfe9050078599d73df2c21f0">remmina_plugin_vnc_init</a></div><div class="ttdeci">static void remmina_plugin_vnc_init(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l01959">vnc_plugin.c:1959</a></div></div>
<div class="ttc" id="structon_main_thread__cb__data_html_a2819729ddf9ffa92927a4ef7d3a6e0f8"><div class="ttname"><a href="structon_main_thread__cb__data.html#a2819729ddf9ffa92927a4ef7d3a6e0f8">onMainThread_cb_data::w</a></div><div class="ttdeci">Window w</div><div class="ttdef"><b>Definition:</b> <a href="x2go__plugin_8c_source.html#l01478">x2go_plugin.c:1478</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_a7ac875d202f1ccd0ae85bb60ee3222c1"><div class="ttname"><a href="struct___remmina_plugin_service.html#a7ac875d202f1ccd0ae85bb60ee3222c1">_RemminaPluginService::protocol_plugin_set_error</a></div><div class="ttdeci">void(* protocol_plugin_set_error)(RemminaProtocolWidget *gp, const gchar *fmt,...)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00176">plugin.h:176</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_event_html_a79891d24c0e6257efceeefb3c10d8c65"><div class="ttname"><a href="struct___remmina_plugin_vnc_event.html#a79891d24c0e6257efceeefb3c10d8c65">_RemminaPluginVncEvent::text</a></div><div class="ttdeci">gchar * text</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00144">vnc_plugin.h:144</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_af77b4e3099a5d382aa4b840e4aecaadc"><div class="ttname"><a href="vnc__plugin_8c.html#af77b4e3099a5d382aa4b840e4aecaadc">remmina_plugin_vnc_rfb_updatefb</a></div><div class="ttdeci">static void remmina_plugin_vnc_rfb_updatefb(rfbClient *cl, int x, int y, int w, int h)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00685">vnc_plugin.c:685</a></div></div>
<div class="ttc" id="types_8h_html_aee1a3e130e6991978acd907b52204350a52a80f3f9b84e9e0d0bf3335cfd7527f"><div class="ttname"><a href="types_8h.html#aee1a3e130e6991978acd907b52204350a52a80f3f9b84e9e0d0bf3335cfd7527f">REMMINA_PROTOCOL_SETTING_TYPE_CHECK</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00110">types.h:110</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a093245037037f681c4ffe6356d916a02"><div class="ttname"><a href="vnc__plugin_8c.html#a093245037037f681c4ffe6356d916a02">remmina_plugin_vnc_main_loop</a></div><div class="ttdeci">static gboolean remmina_plugin_vnc_main_loop(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l01116">vnc_plugin.c:1116</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_ac432221a82ead6babe045cbf18061a0b"><div class="ttname"><a href="struct___remmina_plugin_service.html#ac432221a82ead6babe045cbf18061a0b">_RemminaPluginService::protocol_plugin_init_save_cred</a></div><div class="ttdeci">void(* protocol_plugin_init_save_cred)(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00203">plugin.h:203</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="types_8h_html_aee1a3e130e6991978acd907b52204350a8be3f210c609fde31f68e607c41de296"><div class="ttname"><a href="types_8h.html#aee1a3e130e6991978acd907b52204350a8be3f210c609fde31f68e607c41de296">REMMINA_PROTOCOL_SETTING_TYPE_TEXT</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00106">types.h:106</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_ab9cd44cc6ac7467e6c31c3d5fe77ac21"><div class="ttname"><a href="vnc__plugin_8c.html#ab9cd44cc6ac7467e6c31c3d5fe77ac21">remmina_plugin_vnc_features</a></div><div class="ttdeci">static const RemminaProtocolFeature remmina_plugin_vnc_features[]</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l02145">vnc_plugin.c:2145</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a01923764292c3ab42dbcb43a9bb438a5"><div class="ttname"><a href="vnc__plugin_8c.html#a01923764292c3ab42dbcb43a9bb438a5">dot_cursor_y_hot</a></div><div class="ttdeci">static int dot_cursor_y_hot</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00060">vnc_plugin.c:60</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a7d6c92b318e43b96efddbcaa9400c1f1"><div class="ttname"><a href="vnc__plugin_8c.html#a7d6c92b318e43b96efddbcaa9400c1f1">colordepth_list</a></div><div class="ttdeci">static gpointer colordepth_list[]</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l02027">vnc_plugin.c:2027</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="vnc__plugin_8h_html_a2f80701c36e79c0640d91c788feee0b3a0723d566806911ca2ed79d03214fe4ee"><div class="ttname"><a href="vnc__plugin_8h.html#a2f80701c36e79c0640d91c788feee0b3a0723d566806911ca2ed79d03214fe4ee">REMMINA_PLUGIN_VNC_EVENT_CHAT_SEND</a></div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00127">vnc_plugin.h:127</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_a63683e6046384d902a573e150801e0d3"><div class="ttname"><a href="struct___remmina_plugin_service.html#a63683e6046384d902a573e150801e0d3">_RemminaPluginService::protocol_plugin_init_show_retry</a></div><div class="ttdeci">void(* protocol_plugin_init_show_retry)(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00205">plugin.h:205</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_aa09286b99e12ea23e6a6ea14c5488469"><div class="ttname"><a href="vnc__plugin_8c.html#aa09286b99e12ea23e6a6ea14c5488469">remmina_plugin_vnc_update_quality</a></div><div class="ttdeci">static void remmina_plugin_vnc_update_quality(rfbClient *cl, gint quality)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00377">vnc_plugin.c:377</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_data_html_a0e175ab5a31b720d9d7dfc6923ce3c6a"><div class="ttname"><a href="struct___remmina_plugin_vnc_data.html#a0e175ab5a31b720d9d7dfc6923ce3c6a">_RemminaPluginVncData::vnc_event_queue</a></div><div class="ttdeci">GQueue * vnc_event_queue</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00112">vnc_plugin.h:112</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a390e3b371156197feb518b737a31cc53"><div class="ttname"><a href="vnc__plugin_8c.html#a390e3b371156197feb518b737a31cc53">onMainThread_schedule_callback_and_wait</a></div><div class="ttdeci">static void onMainThread_schedule_callback_and_wait(struct onMainThread_cb_data *d)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00108">vnc_plugin.c:108</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a317c3aca2102f38bc876c95413701a80"><div class="ttname"><a href="vnc__plugin_8c.html#a317c3aca2102f38bc876c95413701a80">remmina_plugin_vnc_scale_coordinates</a></div><div class="ttdeci">static RemminaPluginVncCoordinates remmina_plugin_vnc_scale_coordinates(GtkWidget *widget, RemminaProtocolWidget *gp, gint x, gint y)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l01402">vnc_plugin.c:1402</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_ad67a66a0788c440bd755e300645155c1"><div class="ttname"><a href="vnc__plugin_8c.html#ad67a66a0788c440bd755e300645155c1">remmina_plugin_vnc_rfb_cuttext</a></div><div class="ttdeci">static void remmina_plugin_vnc_rfb_cuttext(rfbClient *cl, const char *text, int textlen)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00759">vnc_plugin.c:759</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_data_html_a5d655f538f7a29657c664bdd0117dcfb"><div class="ttname"><a href="struct___remmina_plugin_vnc_data.html#a5d655f538f7a29657c664bdd0117dcfb">_RemminaPluginVncData::queuecursor_surface</a></div><div class="ttdeci">cairo_surface_t * queuecursor_surface</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00100">vnc_plugin.h:100</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="vnc__plugin_8c_html_a5dea604d34a804e23a5cd8a6683d9e49"><div class="ttname"><a href="vnc__plugin_8c.html#a5dea604d34a804e23a5cd8a6683d9e49">onMainThread_cleanup_handler</a></div><div class="ttdeci">static void onMainThread_cleanup_handler(gpointer data)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00099">vnc_plugin.c:99</a></div></div>
<div class="ttc" id="struct___remmina_protocol_feature_html_a36b55faeba78528ac9708dfa66667e20"><div class="ttname"><a href="struct___remmina_protocol_feature.html#a36b55faeba78528ac9708dfa66667e20">_RemminaProtocolFeature::id</a></div><div class="ttdeci">gint id</div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00074">types.h:74</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a7149c702b5beec6fccbf5d4207e0ff55"><div class="ttname"><a href="vnc__plugin_8c.html#a7149c702b5beec6fccbf5d4207e0ff55">remmina_plugin_vnc_update_colordepth</a></div><div class="ttdeci">static void remmina_plugin_vnc_update_colordepth(rfbClient *cl, gint colordepth)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00434">vnc_plugin.c:434</a></div></div>
<div class="ttc" id="types_8h_html_aee1a3e130e6991978acd907b52204350ae76d06b6e313971e5f420dd6e7f4c5aa"><div class="ttname"><a href="types_8h.html#aee1a3e130e6991978acd907b52204350ae76d06b6e313971e5f420dd6e7f4c5aa">REMMINA_PROTOCOL_SETTING_TYPE_PASSWORD</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00101">types.h:101</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_ae185dbf1d0a8f2f2d225b7f7a2d1deb8"><div class="ttname"><a href="vnc__plugin_8c.html#ae185dbf1d0a8f2f2d225b7f7a2d1deb8">remmina_plugin_vnc_event_queue_pop_head</a></div><div class="ttdeci">static RemminaPluginVncEvent * remmina_plugin_vnc_event_queue_pop_head(RemminaPluginVncData *gpdata)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00309">vnc_plugin.c:309</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a80cd2a03f3f695edbb1ac9ee8c680a5c"><div class="ttname"><a href="vnc__plugin_8c.html#a80cd2a03f3f695edbb1ac9ee8c680a5c">remmina_plugin_vnc_queuecursor</a></div><div class="ttdeci">static void remmina_plugin_vnc_queuecursor(RemminaProtocolWidget *gp, cairo_surface_t *surface, gint x, gint y)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00285">vnc_plugin.c:285</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a1f57bda271e77f086885101650e8d82c"><div class="ttname"><a href="vnc__plugin_8c.html#a1f57bda271e77f086885101650e8d82c">remmina_plugin_vnc_update_scale</a></div><div class="ttdeci">static void remmina_plugin_vnc_update_scale(RemminaProtocolWidget *gp, gboolean scale)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00228">vnc_plugin.c:228</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_data_html_a14aaefd3fdb0038689972d672a87f6d2"><div class="ttname"><a href="struct___remmina_plugin_vnc_data.html#a14aaefd3fdb0038689972d672a87f6d2">_RemminaPluginVncData::queuedraw_w</a></div><div class="ttdeci">gint queuedraw_w</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00094">vnc_plugin.h:94</a></div></div>
<div class="ttc" id="plugin_8h_html_aaf53c620d115a4642130227cff4a624aa45e094c248384c12cdafd9d088e4aa24"><div class="ttname"><a href="plugin_8h.html#aaf53c620d115a4642130227cff4a624aa45e094c248384c12cdafd9d088e4aa24">REMMINA_PLUGIN_TYPE_PROTOCOL</a></div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00047">plugin.h:47</a></div></div>
<div class="ttc" id="vnc__plugin_8h_html_a2f80701c36e79c0640d91c788feee0b3a98fec12a2047bf22ce4d44b9e0905540"><div class="ttname"><a href="vnc__plugin_8h.html#a2f80701c36e79c0640d91c788feee0b3a98fec12a2047bf22ce4d44b9e0905540">REMMINA_PLUGIN_VNC_EVENT_KEY</a></div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00123">vnc_plugin.h:123</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_a7c5de526e0adaee6df2654987d92a834"><div class="ttname"><a href="struct___remmina_plugin_service.html#a7c5de526e0adaee6df2654987d92a834">_RemminaPluginService::protocol_plugin_init_get_clientkey</a></div><div class="ttdeci">gchar *(* protocol_plugin_init_get_clientkey)(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00202">plugin.h:202</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_a80f2bf0ddb4035bef2298becf803c65e"><div class="ttname"><a href="struct___remmina_plugin_service.html#a80f2bf0ddb4035bef2298becf803c65e">_RemminaPluginService::file_get_double</a></div><div class="ttdeci">gdouble(* file_get_double)(RemminaFile *remminafile, const gchar *setting, gdouble default_value)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00223">plugin.h:223</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a2b47331cd4f72ee2c69573ffb3142c10"><div class="ttname"><a href="vnc__plugin_8c.html#a2b47331cd4f72ee2c69573ffb3142c10">remmina_plugin_vnc_event_free_all</a></div><div class="ttdeci">static void remmina_plugin_vnc_event_free_all(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00185">vnc_plugin.c:185</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_aea5839c1087d585275c487093112f2ac"><div class="ttname"><a href="vnc__plugin_8c.html#aea5839c1087d585275c487093112f2ac">remmina_plugin_vnc_rfb_bell</a></div><div class="ttdeci">static void remmina_plugin_vnc_rfb_bell(rfbClient *cl)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00930">vnc_plugin.c:930</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_ad43b46448de165f501529d6b203ca8ca"><div class="ttname"><a href="vnc__plugin_8c.html#ad43b46448de165f501529d6b203ca8ca">remmina_plugin_vnc_chat_on_destroy</a></div><div class="ttdeci">static void remmina_plugin_vnc_chat_on_destroy(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l01012">vnc_plugin.c:1012</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a29fb120041bcace9f201cbdf3a3f6f2f"><div class="ttname"><a href="vnc__plugin_8c.html#a29fb120041bcace9f201cbdf3a3f6f2f">remmina_plugin_vnc_open_connection</a></div><div class="ttdeci">static gboolean remmina_plugin_vnc_open_connection(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l01681">vnc_plugin.c:1681</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_data_html_af7838da89b30d194de8d5571e2130364"><div class="ttname"><a href="struct___remmina_plugin_vnc_data.html#af7838da89b30d194de8d5571e2130364">_RemminaPluginVncData::queuecursor_handler</a></div><div class="ttdeci">guint queuecursor_handler</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00102">vnc_plugin.h:102</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_a0884b2124ba4ea3f747f00bbe91135d2"><div class="ttname"><a href="struct___remmina_plugin_service.html#a0884b2124ba4ea3f747f00bbe91135d2">_RemminaPluginService::pref_keymap_get_keyval</a></div><div class="ttdeci">guint(* pref_keymap_get_keyval)(const gchar *keymap, guint keyval)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00233">plugin.h:233</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_ad0f29c76e2ec9ea145faab2313e94749"><div class="ttname"><a href="struct___remmina_plugin_service.html#ad0f29c76e2ec9ea145faab2313e94749">_RemminaPluginService::protocol_plugin_start_reverse_tunnel</a></div><div class="ttdeci">gboolean(* protocol_plugin_start_reverse_tunnel)(RemminaProtocolWidget *gp, gint local_port)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00182">plugin.h:182</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_coordinates_html_ad385abd59c1f49bdb244fd679efb5b3e"><div class="ttname"><a href="struct___remmina_plugin_vnc_coordinates.html#ad385abd59c1f49bdb244fd679efb5b3e">_RemminaPluginVncCoordinates::y</a></div><div class="ttdeci">gint y</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00150">vnc_plugin.h:150</a></div></div>
<div class="ttc" id="vnc__plugin_8h_html_a2f80701c36e79c0640d91c788feee0b3a1897cf83244e2e2e25c7f32e50a4964f"><div class="ttname"><a href="vnc__plugin_8h.html#a2f80701c36e79c0640d91c788feee0b3a1897cf83244e2e2e25c7f32e50a4964f">REMMINA_PLUGIN_VNC_EVENT_POINTER</a></div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00124">vnc_plugin.h:124</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a5e82957848c696045b21f365827e11c7"><div class="ttname"><a href="vnc__plugin_8c.html#a5e82957848c696045b21f365827e11c7">remmina_plugin_vnc_close_chat</a></div><div class="ttdeci">static gboolean remmina_plugin_vnc_close_chat(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l01029">vnc_plugin.c:1029</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a8908f48e85693e75dc871ed7e2eb1ddc"><div class="ttname"><a href="vnc__plugin_8c.html#a8908f48e85693e75dc871ed7e2eb1ddc">remmina_plugin_vnc_queue_draw_area_real</a></div><div class="ttdeci">static gboolean remmina_plugin_vnc_queue_draw_area_real(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00552">vnc_plugin.c:552</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_aa6380a77d4119e8ce70c2d46fd60aece"><div class="ttname"><a href="vnc__plugin_8c.html#aa6380a77d4119e8ce70c2d46fd60aece">remmina_plugin_vnc_no_encrypt_auth_types</a></div><div class="ttdeci">static const uint32_t remmina_plugin_vnc_no_encrypt_auth_types[]</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00306">vnc_plugin.c:306</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a289d56662190215fffd46338a57133d9"><div class="ttname"><a href="vnc__plugin_8c.html#a289d56662190215fffd46338a57133d9">remmina_plugin_vnci</a></div><div class="ttdeci">static RemminaProtocolPlugin remmina_plugin_vnci</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l02188">vnc_plugin.c:2188</a></div></div>
<div class="ttc" id="types_8h_html_a77ae46c4fd739dcd8e819fe9cdae27c5a311d2a8dae8d3d7b9045b4b704f94fe4"><div class="ttname"><a href="types_8h.html#a77ae46c4fd739dcd8e819fe9cdae27c5a311d2a8dae8d3d7b9045b4b704f94fe4">REMMINA_PROTOCOL_FEATURE_TYPE_END</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00047">types.h:47</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_a4eac7cd317ef677917c2fa7b1859a189"><div class="ttname"><a href="struct___remmina_plugin_service.html#a4eac7cd317ef677917c2fa7b1859a189">_RemminaPluginService::protocol_plugin_is_closed</a></div><div class="ttdeci">gboolean(* protocol_plugin_is_closed)(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00177">plugin.h:177</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a885240d470f95a89ac67051da38fa01d"><div class="ttname"><a href="vnc__plugin_8c.html#a885240d470f95a89ac67051da38fa01d">remmina_plugin_vnc_event_push</a></div><div class="ttdeci">static void remmina_plugin_vnc_event_push(RemminaProtocolWidget *gp, gint event_type, gpointer p1, gpointer p2, gpointer p3)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00136">vnc_plugin.c:136</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_a2d6704aa58ecc18ecc178ea418addd87"><div class="ttname"><a href="struct___remmina_plugin_service.html#a2d6704aa58ecc18ecc178ea418addd87">_RemminaPluginService::protocol_plugin_send_keys_signals</a></div><div class="ttdeci">void(* protocol_plugin_send_keys_signals)(GtkWidget *widget, const guint *keyvals, int length, GdkEventType action)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00212">plugin.h:212</a></div></div>
<div class="ttc" id="vnc__plugin_8h_html_a2f80701c36e79c0640d91c788feee0b3aa818c3e00b67a01cdee20db2136a7718"><div class="ttname"><a href="vnc__plugin_8h.html#a2f80701c36e79c0640d91c788feee0b3aa818c3e00b67a01cdee20db2136a7718">REMMINA_PLUGIN_VNC_EVENT_CHAT_OPEN</a></div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00126">vnc_plugin.h:126</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_cuttext_param_html_a3623cf203470ce741397e972fb12ab76"><div class="ttname"><a href="struct___remmina_plugin_vnc_cuttext_param.html#a3623cf203470ce741397e972fb12ab76">_RemminaPluginVncCuttextParam::textlen</a></div><div class="ttdeci">gint textlen</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00374">vnc_plugin.c:374</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_ab58b7bf5f91c5f60349a8242e6322f7f"><div class="ttname"><a href="struct___remmina_plugin_service.html#ab58b7bf5f91c5f60349a8242e6322f7f">_RemminaPluginService::protocol_plugin_signal_connection_closed</a></div><div class="ttdeci">void(* protocol_plugin_signal_connection_closed)(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00185">plugin.h:185</a></div></div>
<div class="ttc" id="struct___remmina_protocol_plugin_html"><div class="ttname"><a href="struct___remmina_protocol_plugin.html">_RemminaProtocolPlugin</a></div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00065">plugin.h:65</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="vnc__plugin_8c_html_a3d316a2257bd539a6d5d0e0247810fe5"><div class="ttname"><a href="vnc__plugin_8c.html#a3d316a2257bd539a6d5d0e0247810fe5">remmina_plugin_vnc_rfb_led_state</a></div><div class="ttdeci">static void remmina_plugin_vnc_rfb_led_state(rfbClient *cl, int value, int pad)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00722">vnc_plugin.c:722</a></div></div>
<div class="ttc" id="structon_main_thread__cb__data_html_a2990bfbbb713d7d300b121327dc179bdaf505d0b00d46515c4ab37b643567af41"><div class="ttname"><a href="structon_main_thread__cb__data.html#a2990bfbbb713d7d300b121327dc179bdaf505d0b00d46515c4ab37b643567af41">onMainThread_cb_data::FUNC_UPDATE_SCALE</a></div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00069">vnc_plugin.c:69</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_a6fdfd3063906f49157225f536537bb0f"><div class="ttname"><a href="struct___remmina_plugin_service.html#a6fdfd3063906f49157225f536537bb0f">_RemminaPluginService::get_server_port</a></div><div class="ttdeci">void(* get_server_port)(const gchar *server, gint defaultport, gchar **host, gint *port)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00249">plugin.h:249</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a285701647495e19a7861c16b594d6c98"><div class="ttname"><a href="vnc__plugin_8c.html#a285701647495e19a7861c16b594d6c98">vnciport_tooltip</a></div><div class="ttdeci">static gchar vnciport_tooltip[]</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l02054">vnc_plugin.c:2054</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="vnc__plugin_8c_html_a624c006e2a475a0944322c7bbdbcb548"><div class="ttname"><a href="vnc__plugin_8c.html#a624c006e2a475a0944322c7bbdbcb548">delta_to_mask</a></div><div class="ttdeci">static gint delta_to_mask(float delta, float *accum, gint mask_plus, gint mask_minus)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l01469">vnc_plugin.c:1469</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a1aaa1353346af3f9e18347768d5dc5b1"><div class="ttname"><a href="vnc__plugin_8c.html#a1aaa1353346af3f9e18347768d5dc5b1">remmina_plugin_vnc_rfb_chat</a></div><div class="ttdeci">static void remmina_plugin_vnc_rfb_chat(rfbClient *cl, int value, char *text)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l01050">vnc_plugin.c:1050</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_ab553977a035eea4d913b2cfaaf49a003"><div class="ttname"><a href="vnc__plugin_8c.html#ab553977a035eea4d913b2cfaaf49a003">remmina_plugin_vnc_rfb_password</a></div><div class="ttdeci">static char * remmina_plugin_vnc_rfb_password(rfbClient *cl)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00773">vnc_plugin.c:773</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a8525912fbb407209875f84448abec8c7"><div class="ttname"><a href="vnc__plugin_8c.html#a8525912fbb407209875f84448abec8c7">remmina_plugin_vnc_advanced_settings</a></div><div class="ttdeci">static const RemminaProtocolSetting remmina_plugin_vnc_advanced_settings[]</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l02127">vnc_plugin.c:2127</a></div></div>
<div class="ttc" id="structon_main_thread__cb__data_html_a8bf0f89b3c961ac28ccae9a9e1060db4"><div class="ttname"><a href="structon_main_thread__cb__data.html#a8bf0f89b3c961ac28ccae9a9e1060db4">onMainThread_cb_data::width</a></div><div class="ttdeci">gint width</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00071">vnc_plugin.c:71</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_a881a79477d6e122c0aed7d5528ab6b9a"><div class="ttname"><a href="struct___remmina_plugin_service.html#a881a79477d6e122c0aed7d5528ab6b9a">_RemminaPluginService::protocol_plugin_chat_receive</a></div><div class="ttdeci">void(* protocol_plugin_chat_receive)(RemminaProtocolWidget *gp, const gchar *text)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00211">plugin.h:211</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a626a6a09f076b133df208d5bc04233b6"><div class="ttname"><a href="vnc__plugin_8c.html#a626a6a09f076b133df208d5bc04233b6">remmina_plugin_vnc_call_feature</a></div><div class="ttdeci">static void remmina_plugin_vnc_call_feature(RemminaProtocolWidget *gp, const RemminaProtocolFeature *feature)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l01837">vnc_plugin.c:1837</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="types_8h_html_a77ae46c4fd739dcd8e819fe9cdae27c5a645d9a32b55325b3672e265a64d0a507"><div class="ttname"><a href="types_8h.html#a77ae46c4fd739dcd8e819fe9cdae27c5a645d9a32b55325b3672e265a64d0a507">REMMINA_PROTOCOL_FEATURE_TYPE_TOOL</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00049">types.h:49</a></div></div>
<div class="ttc" id="structon_main_thread__cb__data_html_af55aa025154991f8c762e93074eec242"><div class="ttname"><a href="structon_main_thread__cb__data.html#af55aa025154991f8c762e93074eec242">onMainThread_cb_data::scale</a></div><div class="ttdeci">gboolean scale</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00073">vnc_plugin.c:73</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a7f128e63501e5f28aaf50c6d77111b14"><div class="ttname"><a href="vnc__plugin_8c.html#a7f128e63501e5f28aaf50c6d77111b14">remmina_plugin_vnc_rfb_cursor_shape</a></div><div class="ttdeci">static void remmina_plugin_vnc_rfb_cursor_shape(rfbClient *cl, int xhot, int yhot, int width, int height, int bytesPerPixel)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00900">vnc_plugin.c:900</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_data_html_a5b85e81358d36bc4772b95cb9856e2ca"><div class="ttname"><a href="struct___remmina_plugin_vnc_data.html#a5b85e81358d36bc4772b95cb9856e2ca">_RemminaPluginVncData::vnc_buffer</a></div><div class="ttdeci">guchar * vnc_buffer</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00091">vnc_plugin.h:91</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a954db5d93dbd612c1f64c3a3b05b97ea"><div class="ttname"><a href="vnc__plugin_8c.html#a954db5d93dbd612c1f64c3a3b05b97ea">remmina_plugin_vnc</a></div><div class="ttdeci">static RemminaProtocolPlugin remmina_plugin_vnc</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l02166">vnc_plugin.c:2166</a></div></div>
<div class="ttc" id="types_8h_html_a77ae46c4fd739dcd8e819fe9cdae27c5a26774624e955f451f7e4270c36622527"><div class="ttname"><a href="types_8h.html#a77ae46c4fd739dcd8e819fe9cdae27c5a26774624e955f451f7e4270c36622527">REMMINA_PROTOCOL_FEATURE_TYPE_PREF</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00048">types.h:48</a></div></div>
<div class="ttc" id="struct___remmina_key_val_html_a9d3b8298be454a8f6d9a678e2a14e2e8"><div class="ttname"><a href="struct___remmina_key_val.html#a9d3b8298be454a8f6d9a678e2a14e2e8">_RemminaKeyVal::keycode</a></div><div class="ttdeci">guint16 keycode</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00301">vnc_plugin.c:301</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_data_html_a673281e9b313ad358b1a426dcf6238c2"><div class="ttname"><a href="struct___remmina_plugin_vnc_data.html#a673281e9b313ad358b1a426dcf6238c2">_RemminaPluginVncData::queuecursor_x</a></div><div class="ttdeci">gint queuecursor_x</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00101">vnc_plugin.h:101</a></div></div>
<div class="ttc" id="types_8h_html_a77ae46c4fd739dcd8e819fe9cdae27c5affe302f5d3151bfe99607edf308c3c9f"><div class="ttname"><a href="types_8h.html#a77ae46c4fd739dcd8e819fe9cdae27c5affe302f5d3151bfe99607edf308c3c9f">REMMINA_PROTOCOL_FEATURE_TYPE_SCALE</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00051">types.h:51</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a7fa113e651e76230f66ca23135f2c688"><div class="ttname"><a href="vnc__plugin_8c.html#a7fa113e651e76230f66ca23135f2c688">remmina_plugin_vnc_close_connection</a></div><div class="ttdeci">static gboolean remmina_plugin_vnc_close_connection(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l01804">vnc_plugin.c:1804</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_aeeb18a588e3d003bf3adcaa6eb1697ff"><div class="ttname"><a href="vnc__plugin_8c.html#aeeb18a588e3d003bf3adcaa6eb1697ff">dot_cursor_x_hot</a></div><div class="ttdeci">static int dot_cursor_x_hot</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00059">vnc_plugin.c:59</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_aa129753441dbfb630cbdb92e447f1d1e"><div class="ttname"><a href="struct___remmina_plugin_service.html#aa129753441dbfb630cbdb92e447f1d1e">_RemminaPluginService::protocol_plugin_unlock_dynres</a></div><div class="ttdeci">void(* protocol_plugin_unlock_dynres)(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00189">plugin.h:189</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_data_html_a09a73e5d8e44a505154432e91cc8af4e"><div class="ttname"><a href="struct___remmina_plugin_vnc_data.html#a09a73e5d8e44a505154432e91cc8af4e">_RemminaPluginVncData::queuedraw_y</a></div><div class="ttdeci">gint queuedraw_y</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00094">vnc_plugin.h:94</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_af2b857b2de1af3621f543b810f68b17b"><div class="ttname"><a href="struct___remmina_plugin_service.html#af2b857b2de1af3621f543b810f68b17b">_RemminaPluginService::protocol_plugin_init_get_savepassword</a></div><div class="ttdeci">gboolean(* protocol_plugin_init_get_savepassword)(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00197">plugin.h:197</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_event_html_a54d7d71d502dae3182d2dfd96855f4d8"><div class="ttname"><a href="struct___remmina_plugin_vnc_event.html#a54d7d71d502dae3182d2dfd96855f4d8">_RemminaPluginVncEvent::key</a></div><div class="ttdeci">struct _RemminaPluginVncEvent::@63::@64 key</div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_data_html_ac4e1f4b6fc95c31896cc50f315312f93"><div class="ttname"><a href="struct___remmina_plugin_vnc_data.html#ac4e1f4b6fc95c31896cc50f315312f93">_RemminaPluginVncData::running</a></div><div class="ttdeci">gboolean running</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00084">vnc_plugin.h:84</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_a83e35d80f04cb3d6a8cc883f6a089a24"><div class="ttname"><a href="struct___remmina_plugin_service.html#a83e35d80f04cb3d6a8cc883f6a089a24">_RemminaPluginService::protocol_plugin_init_get_clientcert</a></div><div class="ttdeci">gchar *(* protocol_plugin_init_get_clientcert)(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00201">plugin.h:201</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_a529cc64f67b16f13f0445add690a8df2"><div class="ttname"><a href="struct___remmina_plugin_service.html#a529cc64f67b16f13f0445add690a8df2">_RemminaPluginService::register_plugin</a></div><div class="ttdeci">gboolean(* register_plugin)(RemminaPlugin *plugin)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00166">plugin.h:166</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_data_html_a0453c0a0676675e91ba19318dc9b06e0"><div class="ttname"><a href="struct___remmina_plugin_vnc_data.html#a0453c0a0676675e91ba19318dc9b06e0">_RemminaPluginVncData::pressed_keys</a></div><div class="ttdeci">GPtrArray * pressed_keys</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00109">vnc_plugin.h:109</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_data_html_a4de43e091ed0b511921b87f2d456e990"><div class="ttname"><a href="struct___remmina_plugin_vnc_data.html#a4de43e091ed0b511921b87f2d456e990">_RemminaPluginVncData::queuedraw_h</a></div><div class="ttdeci">gint queuedraw_h</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00094">vnc_plugin.h:94</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_event_html_a0ffbaa26908fd25e653dfaf5ad8ccff0"><div class="ttname"><a href="struct___remmina_plugin_vnc_event.html#a0ffbaa26908fd25e653dfaf5ad8ccff0">_RemminaPluginVncEvent::event_type</a></div><div class="ttdeci">gint event_type</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00132">vnc_plugin.h:132</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a2ec48a513b23088125e7363a1832437e"><div class="ttname"><a href="vnc__plugin_8c.html#a2ec48a513b23088125e7363a1832437e">RemminaKeyVal</a></div><div class="ttdeci">struct _RemminaKeyVal RemminaKeyVal</div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_data_html_a5412ada4c656d0053f0656bed890c030"><div class="ttname"><a href="struct___remmina_plugin_vnc_data.html#a5412ada4c656d0053f0656bed890c030">_RemminaPluginVncData::rgb_buffer</a></div><div class="ttdeci">cairo_surface_t * rgb_buffer</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00092">vnc_plugin.h:92</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a1266cacd4af9e75fb043669f88fbd108"><div class="ttname"><a href="vnc__plugin_8c.html#a1266cacd4af9e75fb043669f88fbd108">remmina_plugin_vnc_rfb_fill_buffer</a></div><div class="ttdeci">static void remmina_plugin_vnc_rfb_fill_buffer(rfbClient *cl, guchar *dest, gint dest_rowstride, guchar *src, gint src_rowstride, guchar *mask, gint w, gint h)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00598">vnc_plugin.c:598</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_ac0d402aa12eeef76a267a3b27e85fbb0"><div class="ttname"><a href="vnc__plugin_8c.html#ac0d402aa12eeef76a267a3b27e85fbb0">remmina_plugin_vnc_scale_area</a></div><div class="ttdeci">static void remmina_plugin_vnc_scale_area(RemminaProtocolWidget *gp, gint *x, gint *y, gint *w, gint *h)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00197">vnc_plugin.c:197</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_coordinates_html_a33c99179134cf900b66103767766ed3a"><div class="ttname"><a href="struct___remmina_plugin_vnc_coordinates.html#a33c99179134cf900b66103767766ed3a">_RemminaPluginVncCoordinates::x</a></div><div class="ttdeci">gint x</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00150">vnc_plugin.h:150</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_data_html_a2958d10774cc6fc28a0bfa0b1c843095"><div class="ttname"><a href="struct___remmina_plugin_vnc_data.html#a2958d10774cc6fc28a0bfa0b1c843095">_RemminaPluginVncData::thread</a></div><div class="ttdeci">pthread_t thread</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00115">vnc_plugin.h:115</a></div></div>
<div class="ttc" id="types_8h_html_a64c62354cc2b7baa50e1d73dcd3df9c7ab0449f571d03e46b99b301792a5d8e1a"><div class="ttname"><a href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7ab0449f571d03e46b99b301792a5d8e1a">REMMINA_PROTOCOL_SSH_SETTING_TUNNEL</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00130">types.h:130</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_aae9ff42cb268892f94cf7ed3070d4b5a"><div class="ttname"><a href="vnc__plugin_8c.html#aae9ff42cb268892f94cf7ed3070d4b5a">remmina_plugin_vnc_chat_on_send</a></div><div class="ttdeci">static void remmina_plugin_vnc_chat_on_send(RemminaProtocolWidget *gp, const gchar *text)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l01001">vnc_plugin.c:1001</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_abfb79da3d96ca4aa219eae9c73b0b53f"><div class="ttname"><a href="struct___remmina_plugin_service.html#abfb79da3d96ca4aa219eae9c73b0b53f">_RemminaPluginService::protocol_plugin_has_error</a></div><div class="ttdeci">gboolean(* protocol_plugin_has_error)(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00175">plugin.h:175</a></div></div>
<div class="ttc" id="structon_main_thread__cb__data_html_ab5a747d3d76631e059d736ef286a6c38"><div class="ttname"><a href="structon_main_thread__cb__data.html#ab5a747d3d76631e059d736ef286a6c38">onMainThread_cb_data::func</a></div><div class="ttdeci">enum onMainThread_cb_data::@61 func</div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_data_html_ab105fe07330946ed3687ad2d06fabe95"><div class="ttname"><a href="struct___remmina_plugin_vnc_data.html#ab105fe07330946ed3687ad2d06fabe95">_RemminaPluginVncData::connected</a></div><div class="ttdeci">gboolean connected</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00082">vnc_plugin.h:82</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_cuttext_param_html"><div class="ttname"><a href="struct___remmina_plugin_vnc_cuttext_param.html">_RemminaPluginVncCuttextParam</a></div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00371">vnc_plugin.c:371</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a14c13d425ace0c90144b0e486e6893b8"><div class="ttname"><a href="vnc__plugin_8c.html#a14c13d425ace0c90144b0e486e6893b8">remmina_plugin_vnc_main_thread</a></div><div class="ttdeci">static gpointer remmina_plugin_vnc_main_thread(gpointer data)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l01391">vnc_plugin.c:1391</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="struct___remmina_plugin_vnc_data_html_a625ea21fb2d92cb8489d3c9e5a2477ea"><div class="ttname"><a href="struct___remmina_plugin_vnc_data.html#a625ea21fb2d92cb8489d3c9e5a2477ea">_RemminaPluginVncData::vnc_event_pipe</a></div><div class="ttdeci">gint vnc_event_pipe[2]</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00113">vnc_plugin.h:113</a></div></div>
<div class="ttc" id="types_8h_html_aee1a3e130e6991978acd907b52204350a04da01eead7904a55d1c813950609b2d"><div class="ttname"><a href="types_8h.html#aee1a3e130e6991978acd907b52204350a04da01eead7904a55d1c813950609b2d">REMMINA_PROTOCOL_SETTING_TYPE_SELECT</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00108">types.h:108</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a4f528272dda8a3538cbdce39254ecc81"><div class="ttname"><a href="vnc__plugin_8c.html#a4f528272dda8a3538cbdce39254ecc81">remmina_plugin_vnc_on_key</a></div><div class="ttdeci">static gboolean remmina_plugin_vnc_on_key(GtkWidget *widget, GdkEventKey *event, RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l01568">vnc_plugin.c:1568</a></div></div>
<div class="ttc" id="struct___remmina_protocol_feature_html"><div class="ttname"><a href="struct___remmina_protocol_feature.html">_RemminaProtocolFeature</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00072">types.h:72</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_ab8bbe7ce317cb9e97da8bf0e34459030"><div class="ttname"><a href="struct___remmina_plugin_service.html#ab8bbe7ce317cb9e97da8bf0e34459030">_RemminaPluginService::protocol_plugin_chat_open</a></div><div class="ttdeci">void(* protocol_plugin_chat_open)(RemminaProtocolWidget *gp, const gchar *name, void(*on_send)(RemminaProtocolWidget *gp, const gchar *text), void(*on_destroy)(RemminaProtocolWidget *gp))</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00209">plugin.h:209</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_a54c773d5581087b272a9377893b92999"><div class="ttname"><a href="struct___remmina_plugin_service.html#a54c773d5581087b272a9377893b92999">_RemminaPluginService::protocol_plugin_init_authx509</a></div><div class="ttdeci">gint(* protocol_plugin_init_authx509)(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00198">plugin.h:198</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a987d6ebfa00d29578dada803f33d6a99"><div class="ttname"><a href="vnc__plugin_8c.html#a987d6ebfa00d29578dada803f33d6a99">remmina_plugin_vnc_on_cuttext_request</a></div><div class="ttdeci">static void remmina_plugin_vnc_on_cuttext_request(GtkClipboard *clipboard, const gchar *text, RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l01618">vnc_plugin.c:1618</a></div></div>
<div class="ttc" id="structon_main_thread__cb__data_html_a92fd0bfc7715dcb8237a002850701222"><div class="ttname"><a href="structon_main_thread__cb__data.html#a92fd0bfc7715dcb8237a002850701222">onMainThread_cb_data::x</a></div><div class="ttdeci">gint x</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00071">vnc_plugin.c:71</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_data_html_a5b17067fb2b9437f1fdf607334dfade3"><div class="ttname"><a href="struct___remmina_plugin_vnc_data.html#a5b17067fb2b9437f1fdf607334dfade3">_RemminaPluginVncData::auth_first</a></div><div class="ttdeci">gboolean auth_first</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00088">vnc_plugin.h:88</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a9573c48df84c26fb7f5fac785a0f7731"><div class="ttname"><a href="vnc__plugin_8c.html#a9573c48df84c26fb7f5fac785a0f7731">vncencodings_tooltip</a></div><div class="ttdeci">static gchar vncencodings_tooltip[]</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l02069">vnc_plugin.c:2069</a></div></div>
<div class="ttc" id="structon_main_thread__cb__data_html_aec2ab8de1fa3f948ada7bd70ce2b353f"><div class="ttname"><a href="structon_main_thread__cb__data.html#aec2ab8de1fa3f948ada7bd70ce2b353f">onMainThread_cb_data::y</a></div><div class="ttdeci">gint y</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00071">vnc_plugin.c:71</a></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="struct___remmina_plugin_service_html_a9b4cfe0a97a34260e58784feef693704"><div class="ttname"><a href="struct___remmina_plugin_service.html#a9b4cfe0a97a34260e58784feef693704">_RemminaPluginService::protocol_plugin_init_auth</a></div><div class="ttdeci">gint(* protocol_plugin_init_auth)(RemminaProtocolWidget *gp, RemminaMessagePanelFlags pflags, const gchar *title, const gchar *default_username, const gchar *default_password, const gchar *default_domain, const gchar *password_prompt)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00191">plugin.h:191</a></div></div>
<div class="ttc" id="vnc__plugin_8h_html_a2f80701c36e79c0640d91c788feee0b3a4588937e7ecca9c67f043eabff7de4df"><div class="ttname"><a href="vnc__plugin_8h.html#a2f80701c36e79c0640d91c788feee0b3a4588937e7ecca9c67f043eabff7de4df">REMMINA_PLUGIN_VNC_EVENT_CHAT_CLOSE</a></div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00128">vnc_plugin.h:128</a></div></div>
<div class="ttc" id="structon_main_thread__cb__data_html_acd2e5f24279a00e0d426d67604dc8fbc"><div class="ttname"><a href="structon_main_thread__cb__data.html#acd2e5f24279a00e0d426d67604dc8fbc">onMainThread_cb_data::mu</a></div><div class="ttdeci">pthread_mutex_t mu</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00076">vnc_plugin.c:76</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a3ba650386c03a1daa8a46546c81820c4"><div class="ttname"><a href="vnc__plugin_8c.html#a3ba650386c03a1daa8a46546c81820c4">remmina_plugin_vnc_release_key</a></div><div class="ttdeci">static void remmina_plugin_vnc_release_key(RemminaProtocolWidget *gp, guint16 keycode)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l01536">vnc_plugin.c:1536</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_data_html_a3c589814c8c21221fc90b98e22e38714"><div class="ttname"><a href="struct___remmina_plugin_vnc_data.html#a3c589814c8c21221fc90b98e22e38714">_RemminaPluginVncData::scroll_x_accumulator</a></div><div class="ttdeci">float scroll_x_accumulator</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00118">vnc_plugin.h:118</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_aa0b52e3e065b5042bed7cd9eb0561c5d"><div class="ttname"><a href="vnc__plugin_8c.html#aa0b52e3e065b5042bed7cd9eb0561c5d">remmina_plugin_vnc_queue_cuttext</a></div><div class="ttdeci">static gboolean remmina_plugin_vnc_queue_cuttext(RemminaPluginVncCuttextParam *param)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00728">vnc_plugin.c:728</a></div></div>
<div class="ttc" id="vnc__plugin_8h_html_a2f80701c36e79c0640d91c788feee0b3a0662a5bd411f37922da376de06e8fbfd"><div class="ttname"><a href="vnc__plugin_8h.html#a2f80701c36e79c0640d91c788feee0b3a0662a5bd411f37922da376de06e8fbfd">REMMINA_PLUGIN_VNC_EVENT_CUTTEXT</a></div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00125">vnc_plugin.h:125</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a6f8fd3a6a5f00aef49bd4e3404be5697"><div class="ttname"><a href="vnc__plugin_8c.html#a6f8fd3a6a5f00aef49bd4e3404be5697">remmina_plugin_vnc_on_scroll</a></div><div class="ttdeci">static gboolean remmina_plugin_vnc_on_scroll(GtkWidget *widget, GdkEventScroll *event, RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l01482">vnc_plugin.c:1482</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_adf7b4c8b2fa3722af25cc40dc66a83b9"><div class="ttname"><a href="vnc__plugin_8c.html#adf7b4c8b2fa3722af25cc40dc66a83b9">remmina_plugin_vnc_queue_draw_area</a></div><div class="ttdeci">static void remmina_plugin_vnc_queue_draw_area(RemminaProtocolWidget *gp, gint x, gint y, gint w, gint h)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00572">vnc_plugin.c:572</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_cuttext_param_html_a3acb975cf5fb33970f68bed221978a09"><div class="ttname"><a href="struct___remmina_plugin_vnc_cuttext_param.html#a3acb975cf5fb33970f68bed221978a09">_RemminaPluginVncCuttextParam::gp</a></div><div class="ttdeci">RemminaProtocolWidget * gp</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00372">vnc_plugin.c:372</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a9ba8e968998b64b3832e484a2ca7dfc1"><div class="ttname"><a href="vnc__plugin_8c.html#a9ba8e968998b64b3832e484a2ca7dfc1">onMainThread_cb</a></div><div class="ttdeci">static gboolean onMainThread_cb(struct onMainThread_cb_data *d)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00081">vnc_plugin.c:81</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_event_html_af3990101571bcf27e9f69fd5835c5115"><div class="ttname"><a href="struct___remmina_plugin_vnc_event.html#af3990101571bcf27e9f69fd5835c5115">_RemminaPluginVncEvent::event_data</a></div><div class="ttdeci">union _RemminaPluginVncEvent::@63 event_data</div></div>
<div class="ttc" id="struct___remmina_protocol_setting_html"><div class="ttname"><a href="struct___remmina_protocol_setting.html">_RemminaProtocolSetting</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00117">types.h:117</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_data_html_a3c4413fdc098cf2dd9a1ff336c20356e"><div class="ttname"><a href="struct___remmina_plugin_vnc_data.html#a3c4413fdc098cf2dd9a1ff336c20356e">_RemminaPluginVncData::queuedraw_x</a></div><div class="ttdeci">gint queuedraw_x</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00094">vnc_plugin.h:94</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_data_html_a4047890129d7177dc5f813f2947e7a3c"><div class="ttname"><a href="struct___remmina_plugin_vnc_data.html#a4047890129d7177dc5f813f2947e7a3c">_RemminaPluginVncData::button_mask</a></div><div class="ttdeci">gint button_mask</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00107">vnc_plugin.h:107</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="struct___remmina_plugin_service_html_a734f491f20072acdcbebb41e36bafe2f"><div class="ttname"><a href="struct___remmina_plugin_service.html#a734f491f20072acdcbebb41e36bafe2f">_RemminaPluginService::protocol_plugin_desktop_resize</a></div><div class="ttdeci">void(* protocol_plugin_desktop_resize)(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00190">plugin.h:190</a></div></div>
<div class="ttc" id="types_8h_html_aeea5ee1e675368413b6f6ab09883e7dead50ff64ad1e14caf78956850f03871bd"><div class="ttname"><a href="types_8h.html#aeea5ee1e675368413b6f6ab09883e7dead50ff64ad1e14caf78956850f03871bd">REMMINA_PROTOCOL_WIDGET_SCALE_MODE_NONE</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00143">types.h:143</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a4d672e305030849447b5b8b522d82242"><div class="ttname"><a href="vnc__plugin_8c.html#a4d672e305030849447b5b8b522d82242">remmina_plugin_vnc_open_chat</a></div><div class="ttdeci">static gboolean remmina_plugin_vnc_open_chat(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l01036">vnc_plugin.c:1036</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_data_html_a33bc751b1d5728b624bfa57814504f90"><div class="ttname"><a href="struct___remmina_plugin_vnc_data.html#a33bc751b1d5728b624bfa57814504f90">_RemminaPluginVncData::client</a></div><div class="ttdeci">gpointer client</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00104">vnc_plugin.h:104</a></div></div>
<div class="ttc" id="types_8h_html_a341a0a8b6509633809d99348cc3ba486a10be0730fc3ea326856019ae139a922a"><div class="ttname"><a href="types_8h.html#a341a0a8b6509633809d99348cc3ba486a10be0730fc3ea326856019ae139a922a">REMMINA_MESSAGE_PANEL_FLAG_USERNAME</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00157">types.h:157</a></div></div>
<div class="ttc" id="types_8h_html_aeea5ee1e675368413b6f6ab09883e7de"><div class="ttname"><a href="types_8h.html#aeea5ee1e675368413b6f6ab09883e7de">RemminaScaleMode</a></div><div class="ttdeci">RemminaScaleMode</div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00142">types.h:142</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a6497b38386d6de20157b0baf75dcbf44"><div class="ttname"><a href="vnc__plugin_8c.html#a6497b38386d6de20157b0baf75dcbf44">remmina_plugin_vnc_query_feature</a></div><div class="ttdeci">static gboolean remmina_plugin_vnc_query_feature(RemminaProtocolWidget *gp, const RemminaProtocolFeature *feature)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l01823">vnc_plugin.c:1823</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a8648ba06e3c1b7093147ae9a1c576452"><div class="ttname"><a href="vnc__plugin_8c.html#a8648ba06e3c1b7093147ae9a1c576452">remmina_plugin_vnc_main</a></div><div class="ttdeci">static gboolean remmina_plugin_vnc_main(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l01172">vnc_plugin.c:1172</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_cuttext_param_html_a435d7b845e1d90c3bfbe5e5a7be19b30"><div class="ttname"><a href="struct___remmina_plugin_vnc_cuttext_param.html#a435d7b845e1d90c3bfbe5e5a7be19b30">_RemminaPluginVncCuttextParam::text</a></div><div class="ttdeci">gchar * text</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00373">vnc_plugin.c:373</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a8b2de0c8917cafa414c0b9ed4c29aee3"><div class="ttname"><a href="vnc__plugin_8c.html#a8b2de0c8917cafa414c0b9ed4c29aee3">remmina_plugin_vnc_basic_settings</a></div><div class="ttdeci">static const RemminaProtocolSetting remmina_plugin_vnc_basic_settings[]</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l02094">vnc_plugin.c:2094</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_event_html_a9160c64481a1f56984c2f33785b2bf07"><div class="ttname"><a href="struct___remmina_plugin_vnc_event.html#a9160c64481a1f56984c2f33785b2bf07">_RemminaPluginVncEvent::pointer</a></div><div class="ttdeci">struct _RemminaPluginVncEvent::@63::@65 pointer</div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_ac892dd297fae87868752a1f86e07937d"><div class="ttname"><a href="struct___remmina_plugin_service.html#ac892dd297fae87868752a1f86e07937d">_RemminaPluginService::protocol_plugin_init_get_username</a></div><div class="ttdeci">gchar *(* protocol_plugin_init_get_username)(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00194">plugin.h:194</a></div></div>
<div class="ttc" id="types_8h_html_a341a0a8b6509633809d99348cc3ba486a9b734c324722cf2982768feaeeb15c7c"><div class="ttname"><a href="types_8h.html#a341a0a8b6509633809d99348cc3ba486a9b734c324722cf2982768feaeeb15c7c">REMMINA_MESSAGE_PANEL_FLAG_SAVEPASSWORD</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00160">types.h:160</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a781dfc8cb5371260bbf358fa7d9e3751"><div class="ttname"><a href="vnc__plugin_8c.html#a781dfc8cb5371260bbf358fa7d9e3751">check_for_endianness</a></div><div class="ttdeci">static gboolean check_for_endianness()</div><div class="ttdoc">Function check_for_endianness() returns 1, if architecture is little endian, 0 in case of big endian...</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00128">vnc_plugin.c:128</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_ad98eaa3efc0214bc701dc66b5730e174"><div class="ttname"><a href="struct___remmina_plugin_service.html#ad98eaa3efc0214bc701dc66b5730e174">_RemminaPluginService::protocol_plugin_init_get_password</a></div><div class="ttdeci">gchar *(* protocol_plugin_init_get_password)(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00195">plugin.h:195</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_ade7041eba0e97ab146e2bc418982f100"><div class="ttname"><a href="vnc__plugin_8c.html#ade7041eba0e97ab146e2bc418982f100">dot_cursor_xpm</a></div><div class="ttdeci">static const gchar * dot_cursor_xpm[]</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00061">vnc_plugin.c:61</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_ab3bb0ef97fadc9782e47cf1dd011a19d"><div class="ttname"><a href="vnc__plugin_8c.html#ab3bb0ef97fadc9782e47cf1dd011a19d">remmina_plugin_vnc_rfb_credential</a></div><div class="ttdeci">static rfbCredential * remmina_plugin_vnc_rfb_credential(rfbClient *cl, int credentialType)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00812">vnc_plugin.c:812</a></div></div>
<div class="ttc" id="types_8h_html_a77ae46c4fd739dcd8e819fe9cdae27c5a0658dd6adcfaf5cb52d6d99c97c352d1"><div class="ttname"><a href="types_8h.html#a77ae46c4fd739dcd8e819fe9cdae27c5a0658dd6adcfaf5cb52d6d99c97c352d1">REMMINA_PROTOCOL_FEATURE_TYPE_UNFOCUS</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00050">types.h:50</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a91cf510208363f5678c65f420d2d0586"><div class="ttname"><a href="vnc__plugin_8c.html#a91cf510208363f5678c65f420d2d0586">remmina_plugin_vnc_rfb_allocfb</a></div><div class="ttdeci">static rfbBool remmina_plugin_vnc_rfb_allocfb(rfbClient *cl)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00491">vnc_plugin.c:491</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_data_html_aaee126db00e50ad613a6c8ae032ba3b2"><div class="ttname"><a href="struct___remmina_plugin_vnc_data.html#aaee126db00e50ad613a6c8ae032ba3b2">_RemminaPluginVncData::clipboard_timer</a></div><div class="ttdeci">GDateTime * clipboard_timer</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00098">vnc_plugin.h:98</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_coordinates_html"><div class="ttname"><a href="struct___remmina_plugin_vnc_coordinates.html">_RemminaPluginVncCoordinates</a></div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00149">vnc_plugin.h:149</a></div></div>
<div class="ttc" id="types_8h_html_aee1a3e130e6991978acd907b52204350ad9418344a7f597351e3cc5639be78425"><div class="ttname"><a href="types_8h.html#aee1a3e130e6991978acd907b52204350ad9418344a7f597351e3cc5639be78425">REMMINA_PROTOCOL_SETTING_TYPE_KEYMAP</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00104">types.h:104</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_data_html_a8c3e9e03bc8b3ed04ee93a2c0281b5c6"><div class="ttname"><a href="struct___remmina_plugin_vnc_data.html#a8c3e9e03bc8b3ed04ee93a2c0281b5c6">_RemminaPluginVncData::queuedraw_handler</a></div><div class="ttdeci">guint queuedraw_handler</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00095">vnc_plugin.h:95</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_data_html_af834392929e0be100534bcc4a4d6df3c"><div class="ttname"><a href="struct___remmina_plugin_vnc_data.html#af834392929e0be100534bcc4a4d6df3c">_RemminaPluginVncData::clipboard_handler</a></div><div class="ttdeci">gulong clipboard_handler</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00097">vnc_plugin.h:97</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_aee8a8cf42ad03be152f4f5a751798383"><div class="ttname"><a href="vnc__plugin_8c.html#aee8a8cf42ad03be152f4f5a751798383">remmina_plugin_vnc_process_vnc_event</a></div><div class="ttdeci">static void remmina_plugin_vnc_process_vnc_event(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00324">vnc_plugin.c:324</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="struct___remmina_plugin_vnc_data_html"><div class="ttname"><a href="struct___remmina_plugin_vnc_data.html">_RemminaPluginVncData</a></div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00080">vnc_plugin.h:80</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_data_html_a41dc885437b90c87b6a8b4367b0ba63c"><div class="ttname"><a href="struct___remmina_plugin_vnc_data.html#a41dc885437b90c87b6a8b4367b0ba63c">_RemminaPluginVncData::listen_sock</a></div><div class="ttdeci">gint listen_sock</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00105">vnc_plugin.h:105</a></div></div>
<div class="ttc" id="structon_main_thread__cb__data_html_aa01cccfd573952ec0cd5df823e2d8f74"><div class="ttname"><a href="structon_main_thread__cb__data.html#aa01cccfd573952ec0cd5df823e2d8f74">onMainThread_cb_data::height</a></div><div class="ttdeci">gint height</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00071">vnc_plugin.c:71</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a058e64c8178484c3c76da43b9b80d307"><div class="ttname"><a href="vnc__plugin_8c.html#a058e64c8178484c3c76da43b9b80d307">RemminaPluginVncCuttextParam</a></div><div class="ttdeci">struct _RemminaPluginVncCuttextParam RemminaPluginVncCuttextParam</div></div>
<div class="ttc" id="structon_main_thread__cb__data_html_ad4019cdd5ac560eb1cd47d9f924831bb"><div class="ttname"><a href="structon_main_thread__cb__data.html#ad4019cdd5ac560eb1cd47d9f924831bb">onMainThread_cb_data::gp</a></div><div class="ttdeci">RemminaProtocolWidget * gp</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00072">vnc_plugin.c:72</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_a4880fb57479708bc1cb47bf6b4dcabc3"><div class="ttname"><a href="struct___remmina_plugin_service.html#a4880fb57479708bc1cb47bf6b4dcabc3">_RemminaPluginService::file_set_string</a></div><div class="ttdeci">void(* file_set_string)(RemminaFile *remminafile, const gchar *setting, const gchar *value)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00218">plugin.h:218</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="struct___remmina_plugin_vnc_data_html_a824b3ab6d51d0ba65abdbd0e788edb89"><div class="ttname"><a href="struct___remmina_plugin_vnc_data.html#a824b3ab6d51d0ba65abdbd0e788edb89">_RemminaPluginVncData::buffer_mutex</a></div><div class="ttdeci">pthread_mutex_t buffer_mutex</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00116">vnc_plugin.h:116</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a9493664f6bdafe3f5b593c3e5e1eacc7"><div class="ttname"><a href="vnc__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="vnc__plugin_8c_source.html#l00057">vnc_plugin.c:57</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_ae95121f8f944c058d4f0683073f79183"><div class="ttname"><a href="struct___remmina_plugin_service.html#ae95121f8f944c058d4f0683073f79183">_RemminaPluginService::protocol_plugin_start_direct_tunnel</a></div><div class="ttdeci">gchar *(* protocol_plugin_start_direct_tunnel)(RemminaProtocolWidget *gp, gint default_port, gboolean port_plus)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00181">plugin.h:181</a></div></div>
<div class="ttc" id="vnc__plugin_8h_html"><div class="ttname"><a href="vnc__plugin_8h.html">vnc_plugin.h</a></div></div>
<div class="ttc" id="types_8h_html_a64c62354cc2b7baa50e1d73dcd3df9c7a2f71ac2987eeec94430308f6f36840cd"><div class="ttname"><a href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7a2f71ac2987eeec94430308f6f36840cd">REMMINA_PROTOCOL_SSH_SETTING_REVERSE_TUNNEL</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00132">types.h:132</a></div></div>
<div class="ttc" id="types_8h_html_aee1a3e130e6991978acd907b52204350ad898beb6ae625dee1ae27de75f1ab4e3"><div class="ttname"><a href="types_8h.html#aee1a3e130e6991978acd907b52204350ad898beb6ae625dee1ae27de75f1ab4e3">REMMINA_PROTOCOL_SETTING_TYPE_END</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00098">types.h:98</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_a8d1c34496a6def21e5ad7d871cd581b5"><div class="ttname"><a href="struct___remmina_plugin_service.html#a8d1c34496a6def21e5ad7d871cd581b5">_RemminaPluginService::protocol_plugin_init_get_cacrl</a></div><div class="ttdeci">gchar *(* protocol_plugin_init_get_cacrl)(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00200">plugin.h:200</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a64254af45bb17a5a40a3a0383daa3fe7"><div class="ttname"><a href="vnc__plugin_8c.html#a64254af45bb17a5a40a3a0383daa3fe7">quality_list</a></div><div class="ttdeci">static gpointer quality_list[]</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l02036">vnc_plugin.c:2036</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a47762f374c697476aed0a36ed26a0aa1"><div class="ttname"><a href="vnc__plugin_8c.html#a47762f374c697476aed0a36ed26a0aa1">remmina_plugin_vnc_on_motion</a></div><div class="ttdeci">static gboolean remmina_plugin_vnc_on_motion(GtkWidget *widget, GdkEventMotion *event, RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l01419">vnc_plugin.c:1419</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_a673ff4320377c3b440dfd24a796c69fc"><div class="ttname"><a href="struct___remmina_plugin_service.html#a673ff4320377c3b440dfd24a796c69fc">_RemminaPluginService::file_get_string</a></div><div class="ttdeci">const gchar *(* file_get_string)(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00219">plugin.h:219</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a5a66b50e38de8f8f7ff4c47455145a61"><div class="ttname"><a href="vnc__plugin_8c.html#a5a66b50e38de8f8f7ff4c47455145a61">remmina_plugin_vnc_close_connection_timeout</a></div><div class="ttdeci">static gboolean remmina_plugin_vnc_close_connection_timeout(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l01735">vnc_plugin.c:1735</a></div></div>
<div class="ttc" id="struct___remmina_key_val_html"><div class="ttname"><a href="struct___remmina_key_val.html">_RemminaKeyVal</a></div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00299">vnc_plugin.c:299</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a50903bb7e69828cee9c16e8367715a42"><div class="ttname"><a href="vnc__plugin_8c.html#a50903bb7e69828cee9c16e8367715a42">remmina_plugin_vnc_incoming_connection</a></div><div class="ttdeci">static gboolean remmina_plugin_vnc_incoming_connection(RemminaProtocolWidget *gp, rfbClient *cl)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l01073">vnc_plugin.c:1073</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a052429df6b9d03301a607fb4a3e3203d"><div class="ttname"><a href="vnc__plugin_8c.html#a052429df6b9d03301a607fb4a3e3203d">aspect_ratio_tooltip</a></div><div class="ttdeci">static gchar aspect_ratio_tooltip[]</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l02062">vnc_plugin.c:2062</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_ab96ef9227ecef94018f2729f72e7651e"><div class="ttname"><a href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a></div><div class="ttdeci">N_(&quot;Unable to connect to VNC server&quot;)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00953">vnc_plugin.c:953</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_aca3ee6dd15dd0da8017a1560e0dc7e0d"><div class="ttname"><a href="vnc__plugin_8c.html#aca3ee6dd15dd0da8017a1560e0dc7e0d">remmina_plugin_vnc_setcursor</a></div><div class="ttdeci">gboolean remmina_plugin_vnc_setcursor(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00261">vnc_plugin.c:261</a></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="struct___remmina_plugin_service_html"><div class="ttname"><a href="struct___remmina_plugin_service.html">_RemminaPluginService</a></div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00165">plugin.h:165</a></div></div>
<div class="ttc" id="structon_main_thread__cb__data_html"><div class="ttname"><a href="structon_main_thread__cb__data.html">onMainThread_cb_data</a></div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00068">vnc_plugin.c:68</a></div></div>
<div class="ttc" id="struct___remmina_plugin_vnc_data_html_a5f8bcbfe873d4949852e9624e1c43063"><div class="ttname"><a href="struct___remmina_plugin_vnc_data.html#a5f8bcbfe873d4949852e9624e1c43063">_RemminaPluginVncData::vnc_event_queue_mutex</a></div><div class="ttdeci">pthread_mutex_t vnc_event_queue_mutex</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8h_source.html#l00111">vnc_plugin.h:111</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a56e5020de11446dbc23f3480e313f208"><div class="ttname"><a href="vnc__plugin_8c.html#a56e5020de11446dbc23f3480e313f208">remmina_plugin_entry</a></div><div class="ttdeci">G_MODULE_EXPORT gboolean remmina_plugin_entry(RemminaPluginService *service)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l02213">vnc_plugin.c:2213</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a4dc4f7fbf26336d69aa468e6d81d9b0a"><div class="ttname"><a href="vnc__plugin_8c.html#a4dc4f7fbf26336d69aa468e6d81d9b0a">remmina_plugin_vnc_on_button</a></div><div class="ttdeci">static gboolean remmina_plugin_vnc_on_button(GtkWidget *widget, GdkEventButton *event, RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l01438">vnc_plugin.c:1438</a></div></div>
<div class="ttc" id="struct___remmina_plugin_service_html_a2a2ce8e15512459b816ce22cfe5c0550"><div class="ttname"><a href="struct___remmina_plugin_service.html#a2a2ce8e15512459b816ce22cfe5c0550">_RemminaPluginService::protocol_plugin_init_show_listen</a></div><div class="ttdeci">void(* protocol_plugin_init_show_listen)(RemminaProtocolWidget *gp, gint port)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00204">plugin.h:204</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_ac25782cb49710754854863dc9500bd57"><div class="ttname"><a href="vnc__plugin_8c.html#ac25782cb49710754854863dc9500bd57">remmina_plugin_vnci_basic_settings</a></div><div class="ttdeci">static const RemminaProtocolSetting remmina_plugin_vnci_basic_settings[]</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l02107">vnc_plugin.c:2107</a></div></div>
<div class="ttc" id="structon_main_thread__cb__data_html_a75eab61445fbabacaa34f95e2437ea75"><div class="ttname"><a href="structon_main_thread__cb__data.html#a75eab61445fbabacaa34f95e2437ea75">onMainThread_cb_data::cancelled</a></div><div class="ttdeci">gboolean cancelled</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00078">vnc_plugin.c:78</a></div></div>
<div class="ttc" id="struct___remmina_key_val_html_a682fb6be0c09c0dd457b279796eec712"><div class="ttname"><a href="struct___remmina_key_val.html#a682fb6be0c09c0dd457b279796eec712">_RemminaKeyVal::keyval</a></div><div class="ttdeci">guint keyval</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00300">vnc_plugin.c:300</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_aeba06240e996cdffb95cf9ca4c461449"><div class="ttname"><a href="vnc__plugin_8c.html#aeba06240e996cdffb95cf9ca4c461449">remmina_plugin_vnc_event_free</a></div><div class="ttdeci">static void remmina_plugin_vnc_event_free(RemminaPluginVncEvent *event)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00171">vnc_plugin.c:171</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_aacfc4c3693cace69153a6ad95a69495e"><div class="ttname"><a href="vnc__plugin_8c.html#aacfc4c3693cace69153a6ad95a69495e">remmina_plugin_vnc_keystroke</a></div><div class="ttdeci">static void remmina_plugin_vnc_keystroke(RemminaProtocolWidget *gp, const guint keystrokes[], const gint keylen)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l01896">vnc_plugin.c:1896</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_a5321b08f070c51b58669fe2187f35bc4"><div class="ttname"><a href="vnc__plugin_8c.html#a5321b08f070c51b58669fe2187f35bc4">remmina_plugin_vnc_on_draw</a></div><div class="ttdeci">static gboolean remmina_plugin_vnc_on_draw(GtkWidget *widget, cairo_t *context, RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l01925">vnc_plugin.c:1925</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_ff91815d22ef8e3219147b7ca619fdb5.html">vnc</a></li><li class="navelem"><a class="el" href="vnc__plugin_8c.html">vnc_plugin.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>