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

rdp__monitor_8c_source.html « public - gitlab.com/Remmina/remminadoc.gitlab.io.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 2bcb2fe65a244f3c8535f2004376391e3bac8f57 (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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Remmina - The GTK+ Remote Desktop Client: rdp_monitor.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.31</span>
   </div>
   <div id="projectbrief">Remmina is a remote desktop client written in GTK+, aiming to be useful for system administrators and travellers, who need to work with lots of remote computers in front of either large monitors or tiny netbooks. Remmina supports multiple network protocols in an integrated and consistent user interface. Currently RDP, VNC, NX, XDMCP and SSH are supported.</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('rdp__monitor_8c_source.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="headertitle">
<div class="title">rdp_monitor.c</div>  </div>
</div><!--header-->
<div class="contents">
<a href="rdp__monitor_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) 2016-2020 Antenore Gatta, Giovanni Panozzo</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</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="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> * (at your option) any later version.</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * GNU General Public License for more details.</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> * You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> * along with this program; if not, write to the Free Software</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> * Foundation, Inc., 51 Franklin Street, Fifth Floor,</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> * Boston, MA  02110-1301, USA.</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="comment"> *  In addition, as a special exception, the copyright holders give</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="comment"> *  permission to link the code of portions of this program with the</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="comment"> *  OpenSSL library under certain conditions as described in each</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="comment"> *  individual source file, and distribute linked combinations</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="comment"> *  including the two.</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="comment"> *  You must obey the GNU General Public License in all respects</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="comment"> *  for all of the code used other than OpenSSL. *  If you modify</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="comment"> *  file(s) with this exception, you may extend this exception to your</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</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="l00029"></a><span class="lineno">   29</span>&#160;<span class="comment"> *  do not wish to do so, delete this exception statement from your</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="comment"> *  version. *  If you delete this exception statement from all source</span></div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment"> *  files in the program, then also delete it here.</span></div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="rdp__plugin_8h.html">rdp_plugin.h</a>&quot;</span></div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="rdp__monitor_8h.html">rdp_monitor.h</a>&quot;</span></div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="rdp__monitor_8c.html#a64d88f4e91ed155edc4ae83af3608423">   39</a></span>&#160;gint <a class="code" href="rdp__monitor_8c.html#a64d88f4e91ed155edc4ae83af3608423">remmina_rdp_utils_strpos</a>(<span class="keyword">const</span> gchar *haystack, <span class="keyword">const</span> gchar *needle)</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;{</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;    <span class="keyword">const</span> gchar *sub;</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;    <span class="keywordflow">if</span> (!*needle)</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;        <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;    sub = strstr(haystack, needle);</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;    <span class="keywordflow">if</span> (!sub)</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;        <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;    <span class="keywordflow">return</span> sub - haystack;</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;</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="comment">/* https://github.com/adlocode/xfwm4/blob/1d21be9ffc0fa1cea91905a07d1446c5227745f4/common/xfwm-common.c */</span></div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;</div><div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="rdp__monitor_8h.html#a7536570aee98af77f038d82fe9f57ca6">   68</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="rdp__monitor_8c.html#aa5969439ce0342765baea33fcf396940">remmina_rdp_monitor_get</a> (<a class="code" href="structrf__context.html">rfContext</a> *rfi, gchar **monitorids, guint32 *maxwidth, guint32 *maxheight)</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;{</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;    GdkDisplay *display;</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;    GdkMonitor *monitor;</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;    gboolean has_custom_monitors = FALSE;</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;    gboolean primary_found = FALSE;</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;    gint n_monitors;</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;    gint scale;</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;    gint index = 0;</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;    gint count = 0;</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;    <span class="keyword">static</span> gchar buffer[256];</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;    gint buffer_offset = 0;</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;    GdkRectangle geometry = { 0, 0, 0, 0 };</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;    GdkRectangle tempgeom = { 0, 0, 0, 0 };</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;    GdkRectangle destgeom = { 0, 0, 0, 0 };</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    rdpSettings* settings;</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;    <span class="keywordflow">if</span> (!rfi || !rfi-&gt;<a class="code" href="structrf__context.html#a28d215e4ddb5decc543c3c6578df5e3d">settings</a>)</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;    settings = rfi-&gt;<a class="code" href="structrf__context.html#a28d215e4ddb5decc543c3c6578df5e3d">settings</a>;</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;    *maxwidth = freerdp_settings_get_uint32(settings, FreeRDP_DesktopWidth);</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;    *maxheight = freerdp_settings_get_uint32(settings, FreeRDP_DesktopHeight);</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;    display = gdk_display_get_default ();</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;    n_monitors = gdk_display_get_n_monitors(display);</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    <span class="comment">/* Get monitor at windows curently in use */</span></div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;    <span class="comment">//w = gtk_widget_get_window(rfi-&gt;drawing_area);</span></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;    <span class="comment">//current_monitor = gdk_display_get_monitor_at_window (display, w);</span></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;    <span class="comment">/* we got monitorids as options */</span></div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;    <span class="keywordflow">if</span> (*monitorids)</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;        has_custom_monitors = TRUE;</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;    rdpMonitor* base = (rdpMonitor *)freerdp_settings_get_pointer(settings, FreeRDP_MonitorDefArray);</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;    <span class="keywordflow">for</span> (gint i = 0; i &lt; n_monitors; ++i) {</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;        rdpMonitor* current;</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;        <span class="keywordflow">if</span> (has_custom_monitors) {</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;            REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;We have custom monitors&quot;</span>);</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;            gchar itoc[11];</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;            snprintf(itoc, <span class="keyword">sizeof</span>(itoc), <span class="stringliteral">&quot;%d&quot;</span>, i);</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;            <span class="keywordflow">if</span> (<a class="code" href="rdp__monitor_8c.html#a64d88f4e91ed155edc4ae83af3608423">remmina_rdp_utils_strpos</a>(*monitorids, itoc) &lt; 0 ) {</div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;                REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;Monitor n %d it&#39;s out of the provided list&quot;</span>, i);</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;                index += 1;</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;                <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;            }</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;        }</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;        monitor = gdk_display_get_monitor(display, i);</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;        <span class="keywordflow">if</span> (monitor == NULL) {</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;            REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;Monitor n %d does not exist or is not active&quot;</span>, i);</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;            index +=1;</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;            <span class="keywordflow">continue</span>;</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;</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;        monitor = gdk_display_get_monitor(display, index);</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;        current = &amp;base[index];</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;        REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;Monitor n %d&quot;</span>, index);</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;        <span class="comment">/* If the desktop env in use doesn&#39;t have the working area concept</span></div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;<span class="comment">         * gdk_monitor_get_workarea will return the monitor geometry*/</span></div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;        <span class="comment">//gdk_monitor_get_workarea (monitor, &amp;geometry);</span></div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;        gdk_monitor_get_geometry (monitor, &amp;geometry);</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;        current-&gt;x = geometry.x;</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;        REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;Monitor n %d x: %d&quot;</span>, index, geometry.x);</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;        current-&gt;y = geometry.y;</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;        REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;Monitor n %d y: %d&quot;</span>, index, geometry.y);</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;        <span class="comment">/* geometry contain the application geometry, to obtain the real one</span></div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;<span class="comment">         * we must multiply by the scale factor */</span></div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;        scale = gdk_monitor_get_scale_factor (monitor);</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;        REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;Monitor n %d scale: %d&quot;</span>, index, scale);</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;        geometry.x *= scale;</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;        geometry.y *= scale;</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;        geometry.width *= scale;</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;        geometry.height *= scale;</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;        REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;Monitor n %d width: %d&quot;</span>, index, geometry.width);</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;        REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;Monitor n %d height: %d&quot;</span>, index, geometry.height);</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;        current-&gt;width = geometry.width;</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;        current-&gt;height = geometry.height;</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;        current-&gt;attributes.physicalHeight = gdk_monitor_get_height_mm (monitor);</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;        REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;Monitor n %d physical  height: %d&quot;</span>, i, current-&gt;attributes.physicalHeight);</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;        current-&gt;attributes.physicalWidth = gdk_monitor_get_width_mm (monitor);</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;        REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;Monitor n %d physical  width: %d&quot;</span>, i, current-&gt;attributes.physicalWidth);</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;        current-&gt;orig_screen = index;</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;        <span class="keywordflow">if</span> (!primary_found) {</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;            freerdp_settings_set_uint32(settings, FreeRDP_MonitorLocalShiftX, current-&gt;x);</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;            freerdp_settings_set_uint32(settings, FreeRDP_MonitorLocalShiftY, current-&gt;y);</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;        }</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;        <span class="keywordflow">if</span> (gdk_monitor_is_primary(monitor)) {</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;            REMMINA_PLUGIN_DEBUG (<span class="stringliteral">&quot;Primary monitor found with id: %d&quot;</span>, index);</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;            current-&gt;is_primary = TRUE;</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;            primary_found = TRUE;</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;            <span class="keywordflow">if</span> (current-&gt;x != 0 || current-&gt;y != 0)</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;                REMMINA_PLUGIN_DEBUG (<span class="stringliteral">&quot;Primary monitor not at 0,0 coordinates: %d&quot;</span>, index);</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;                freerdp_settings_set_uint32(settings, FreeRDP_MonitorLocalShiftX, current-&gt;x);</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;                freerdp_settings_set_uint32(settings, FreeRDP_MonitorLocalShiftY, current-&gt;y);</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;        } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;            <span class="keywordflow">if</span> (!primary_found &amp;&amp; current-&gt;x == 0 &amp;&amp;</div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;                    current-&gt;y == 0)</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;            {</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;                REMMINA_PLUGIN_DEBUG (<span class="stringliteral">&quot;Monitor %d has 0,0 coordinates&quot;</span>, index);</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;                current-&gt;is_primary = TRUE;</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;                freerdp_settings_set_uint32(settings, FreeRDP_MonitorLocalShiftX, current-&gt;x);</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;                freerdp_settings_set_uint32(settings, FreeRDP_MonitorLocalShiftY, current-&gt;y);</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;                primary_found = TRUE;</div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;                REMMINA_PLUGIN_DEBUG (<span class="stringliteral">&quot;Primary monitor set to id: %d&quot;</span>, index);</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">  185</span>&#160;        REMMINA_PLUGIN_DEBUG (<span class="stringliteral">&quot;Local X Shift: %d&quot;</span>, freerdp_settings_get_uint32(settings, FreeRDP_MonitorLocalShiftX));</div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;        REMMINA_PLUGIN_DEBUG (<span class="stringliteral">&quot;Local Y Shift: %d&quot;</span>, freerdp_settings_get_uint32(settings, FreeRDP_MonitorLocalShiftY));</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;        <span class="comment">//current-&gt;x =</span></div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;            <span class="comment">//current-&gt;x - freerdp_settings_get_uint32(settings, FreeRDP_MonitorLocalShiftX);</span></div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;        <span class="comment">//REMMINA_PLUGIN_DEBUG(&quot;Monitor n %d calculated x: %d&quot;, index, current-&gt;x);</span></div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;        <span class="comment">//current-&gt;y =</span></div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;            <span class="comment">//current-&gt;y - freerdp_settings_get_uint32(settings, FreeRDP_MonitorLocalShiftY);</span></div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;        <span class="comment">//REMMINA_PLUGIN_DEBUG(&quot;Monitor n %d calculated y: %d&quot;, index, current-&gt;y);</span></div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;        <span class="keywordflow">if</span> (buffer_offset == 0)</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;            buffer_offset = g_sprintf(buffer + buffer_offset, <span class="stringliteral">&quot;%d&quot;</span>, i);</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;            buffer_offset = g_sprintf(buffer + buffer_offset, <span class="stringliteral">&quot;,%d&quot;</span>, i);</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;        REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;Monitor IDs buffer: %s&quot;</span>, buffer);</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;        gdk_rectangle_union(&amp;tempgeom, &amp;geometry, &amp;destgeom);</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;        memcpy(&amp;tempgeom, &amp;destgeom, <span class="keyword">sizeof</span> tempgeom);</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;        count++;</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;        index++;</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;    }</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;    freerdp_settings_set_uint32(settings, FreeRDP_MonitorCount, index);</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;    <span class="comment">/* Subtract monitor shift from monitor variables for server-side use.</span></div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;<span class="comment">     * We maintain monitor shift value as Window requires the primary monitor to have a</span></div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;<span class="comment">     * coordinate of 0,0 In some X configurations, no monitor may have a coordinate of 0,0. This</span></div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;<span class="comment">     * can also be happen if the user requests specific monitors from the command-line as well.</span></div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;<span class="comment">     * So, we make sure to translate our primary monitor&#39;s upper-left corner to 0,0 on the</span></div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;<span class="comment">     * server.</span></div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;<span class="comment">     */</span></div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;    <span class="keywordflow">for</span> (gint i = 0; i &lt; freerdp_settings_get_uint32(settings, FreeRDP_MonitorCount); i++)</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;    {</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;        rdpMonitor* current = &amp;base[i];</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;        current-&gt;x =</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;            current-&gt;x - freerdp_settings_get_uint32(settings, FreeRDP_MonitorLocalShiftX);</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;        REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;Monitor n %d calculated x: %d&quot;</span>, i, current-&gt;x);</div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;        current-&gt;y =</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;            current-&gt;y - freerdp_settings_get_uint32(settings, FreeRDP_MonitorLocalShiftY);</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;        REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;Monitor n %d calculated y: %d&quot;</span>, i, current-&gt;y);</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;    }</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;    REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;%d monitors on %d have been configured&quot;</span>, freerdp_settings_get_uint32(settings, FreeRDP_MonitorCount), count);</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;    *maxwidth = destgeom.width;</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;    *maxheight = destgeom.height;</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;    REMMINA_PLUGIN_DEBUG(<span class="stringliteral">&quot;maxw and maxh: %ux%u&quot;</span>, *maxwidth, *maxheight);</div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;    <span class="keywordflow">if</span> (n_monitors &gt; 1)</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;        freerdp_settings_set_bool(rfi-&gt;<a class="code" href="structrf__context.html#a28d215e4ddb5decc543c3c6578df5e3d">settings</a>, FreeRDP_SupportMonitorLayoutPdu, TRUE);</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;    *monitorids = g_strdup(buffer);</div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;}</div><div class="ttc" id="rdp__monitor_8c_html_a64d88f4e91ed155edc4ae83af3608423"><div class="ttname"><a href="rdp__monitor_8c.html#a64d88f4e91ed155edc4ae83af3608423">remmina_rdp_utils_strpos</a></div><div class="ttdeci">gint remmina_rdp_utils_strpos(const gchar *haystack, const gchar *needle)</div><div class="ttdoc">Utility functions should be moved somewhere else </div><div class="ttdef"><b>Definition:</b> <a href="rdp__monitor_8c_source.html#l00039">rdp_monitor.c:39</a></div></div>
<div class="ttc" id="structrf__context_html"><div class="ttname"><a href="structrf__context.html">rf_context</a></div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00320">rdp_plugin.h:320</a></div></div>
<div class="ttc" id="rdp__plugin_8h_html"><div class="ttname"><a href="rdp__plugin_8h.html">rdp_plugin.h</a></div></div>
<div class="ttc" id="rdp__monitor_8h_html"><div class="ttname"><a href="rdp__monitor_8h.html">rdp_monitor.h</a></div></div>
<div class="ttc" id="structrf__context_html_a28d215e4ddb5decc543c3c6578df5e3d"><div class="ttname"><a href="structrf__context.html#a28d215e4ddb5decc543c3c6578df5e3d">rf_context::settings</a></div><div class="ttdeci">rdpSettings * settings</div><div class="ttdef"><b>Definition:</b> <a href="rdp__plugin_8h_source.html#l00327">rdp_plugin.h:327</a></div></div>
<div class="ttc" id="rdp__monitor_8c_html_aa5969439ce0342765baea33fcf396940"><div class="ttname"><a href="rdp__monitor_8c.html#aa5969439ce0342765baea33fcf396940">remmina_rdp_monitor_get</a></div><div class="ttdeci">void remmina_rdp_monitor_get(rfContext *rfi, gchar **monitorids, guint32 *maxwidth, guint32 *maxheight)</div><div class="ttdoc">Set the MonitorIDs, the maxwidth and maxheight. </div><div class="ttdef"><b>Definition:</b> <a href="rdp__monitor_8c_source.html#l00068">rdp_monitor.c:68</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="dir_38c8d24aef3972a7f87b834274e76e31.html">plugins</a></li><li class="navelem"><a class="el" href="dir_059c6fae417c75ea7479b164feca3607.html">rdp</a></li><li class="navelem"><a class="el" href="rdp__monitor_8c.html">rdp_monitor.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>