Sophie

Sophie

distrib > Fedora > 15 > i386 > by-pkgid > 1f9eb832ba1e4b88d9a5c2b384813bb4 > files > 2451

kdelibs3-apidocs-3.5.10-31.fc15.noarch.rpm

<?xml version="1.0" encoding="UTF-8"?>
<!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" lang="en_US" xml:lang="en_US">

<head>
  <title>kdecore: netwm.cpp Source File (kdecore)</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

  <meta http-equiv="Content-Style-Type" content="text/css" />

  <meta http-equiv="pics-label" content='(pics-1.1 "http://www.icra.org/ratingsv02.html" comment "ICRAonline DE v2.0" l gen true for "http://www.kde.org"  r (nz 1 vz 1 lz 1 oz 1 cb 1) "http://www.rsac.org/ratingsv01.html" l gen true for "http://www.kde.org"  r (n 0 s 0 v 0 l 0))' />

  <meta name="trademark" content="KDE e.V." />
  <meta name="description" content="K Desktop Environment Homepage, KDE.org" />
  <meta name="MSSmartTagsPreventParsing" content="true" />
  <meta name="robots" content="all" />

  <link rel="shortcut icon" href="../../favicon.ico" />

<link rel="stylesheet" media="screen" type="text/css" title="APIDOX" href="doxygen.css" />



</head>

<body>

<div id="nav_header_top" align="right">
  <a href="#content" class="doNotDisplay" accesskey="2">Skip to main content ::</a>

  <a href="../.."><img id="nav_header_logo" alt="Home" align="left" src="../../kde_gear_64.png" border="0" /></a>
  <span class="doNotDisplay">::</span>

  <div id="nav_header_title" align="left">KDE API Reference</div>


</div>

<div id="nav_header_bottom" align="right">
  <span class="doNotDisplay">:: <a href="#navigation" accesskey="5">Skip to Link Menu</a><br/></span>
  <div id="nav_header_bottom_right" style="text-align: left;">
/ <a href="../..">API Reference</a>
 / <a href=".">kdecore</a>
  </div>
</div>


<table id="main" border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
      <td valign="top" class="menuheader" height="0"></td>

  <td id="contentcolumn" valign="top" rowspan="2" >
    <div id="content" style="padding-top: 0px;"><div style="width:100%; margin: 0px; padding: 0px;">
    <a name="content"></a>


<!-- Generated by Doxygen 1.7.4 -->
<div class="header">
  <div class="headertitle">
<div class="title">netwm.cpp</div>  </div>
</div>
<div class="contents">
<div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
<a name="l00002"></a>00002 <span class="comment"></span>
<a name="l00003"></a>00003 <span class="comment">  Copyright (c) 2000 Troll Tech AS</span>
<a name="l00004"></a>00004 <span class="comment">  Copyright (c) 2003 Lubos Lunak &lt;l.lunak@kde.org&gt;</span>
<a name="l00005"></a>00005 <span class="comment"></span>
<a name="l00006"></a>00006 <span class="comment">  Permission is hereby granted, free of charge, to any person obtaining a</span>
<a name="l00007"></a>00007 <span class="comment">  copy of this software and associated documentation files (the &quot;Software&quot;),</span>
<a name="l00008"></a>00008 <span class="comment">  to deal in the Software without restriction, including without limitation</span>
<a name="l00009"></a>00009 <span class="comment">  the rights to use, copy, modify, merge, publish, distribute, sublicense,</span>
<a name="l00010"></a>00010 <span class="comment">  and/or sell copies of the Software, and to permit persons to whom the</span>
<a name="l00011"></a>00011 <span class="comment">  Software is furnished to do so, subject to the following conditions:</span>
<a name="l00012"></a>00012 <span class="comment"></span>
<a name="l00013"></a>00013 <span class="comment">  The above copyright notice and this permission notice shall be included in</span>
<a name="l00014"></a>00014 <span class="comment">  all copies or substantial portions of the Software.</span>
<a name="l00015"></a>00015 <span class="comment"></span>
<a name="l00016"></a>00016 <span class="comment">  THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span>
<a name="l00017"></a>00017 <span class="comment">  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span>
<a name="l00018"></a>00018 <span class="comment">  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL</span>
<a name="l00019"></a>00019 <span class="comment">  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>
<a name="l00020"></a>00020 <span class="comment">  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span>
<a name="l00021"></a>00021 <span class="comment">  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span>
<a name="l00022"></a>00022 <span class="comment">  DEALINGS IN THE SOFTWARE.</span>
<a name="l00023"></a>00023 <span class="comment"></span>
<a name="l00024"></a>00024 <span class="comment">*/</span>
<a name="l00025"></a>00025 
<a name="l00026"></a>00026 <span class="comment">//#define NETWMDEBUG</span>
<a name="l00027"></a>00027 
<a name="l00028"></a>00028 <span class="preprocessor">#include &lt;qwidget.h&gt;</span>
<a name="l00029"></a>00029 <span class="preprocessor">#ifdef Q_WS_X11 //FIXME</span>
<a name="l00030"></a>00030 <span class="preprocessor"></span>
<a name="l00031"></a>00031 <span class="preprocessor">#include &quot;netwm.h&quot;</span>
<a name="l00032"></a>00032 
<a name="l00033"></a>00033 <span class="preprocessor">#include &lt;string.h&gt;</span>
<a name="l00034"></a>00034 <span class="preprocessor">#include &lt;stdio.h&gt;</span>
<a name="l00035"></a>00035 <span class="preprocessor">#include &lt;assert.h&gt;</span>
<a name="l00036"></a>00036 <span class="preprocessor">#include &lt;stdlib.h&gt;</span>
<a name="l00037"></a>00037 
<a name="l00038"></a>00038 <span class="preprocessor">#include &lt;X11/Xmd.h&gt;</span>
<a name="l00039"></a>00039 
<a name="l00040"></a>00040 <span class="preprocessor">#include &quot;netwm_p.h&quot;</span>
<a name="l00041"></a>00041 
<a name="l00042"></a>00042 <span class="comment">// UTF-8 string</span>
<a name="l00043"></a>00043 <span class="keyword">static</span> Atom UTF8_STRING = 0;
<a name="l00044"></a>00044 
<a name="l00045"></a>00045 <span class="comment">// root window properties</span>
<a name="l00046"></a>00046 <span class="keyword">static</span> Atom net_supported            = 0;
<a name="l00047"></a>00047 <span class="keyword">static</span> Atom net_client_list          = 0;
<a name="l00048"></a>00048 <span class="keyword">static</span> Atom net_client_list_stacking = 0;
<a name="l00049"></a>00049 <span class="keyword">static</span> Atom net_desktop_geometry     = 0;
<a name="l00050"></a>00050 <span class="keyword">static</span> Atom net_desktop_viewport     = 0;
<a name="l00051"></a>00051 <span class="keyword">static</span> Atom net_current_desktop      = 0;
<a name="l00052"></a>00052 <span class="keyword">static</span> Atom net_desktop_names        = 0;
<a name="l00053"></a>00053 <span class="keyword">static</span> Atom net_number_of_desktops   = 0;
<a name="l00054"></a>00054 <span class="keyword">static</span> Atom net_active_window        = 0;
<a name="l00055"></a>00055 <span class="keyword">static</span> Atom net_workarea             = 0;
<a name="l00056"></a>00056 <span class="keyword">static</span> Atom net_supporting_wm_check  = 0;
<a name="l00057"></a>00057 <span class="keyword">static</span> Atom net_virtual_roots        = 0;
<a name="l00058"></a>00058 <span class="keyword">static</span> Atom net_showing_desktop      = 0;
<a name="l00059"></a>00059 <span class="keyword">static</span> Atom net_desktop_layout       = 0;
<a name="l00060"></a>00060 
<a name="l00061"></a>00061 <span class="comment">// root window messages</span>
<a name="l00062"></a>00062 <span class="keyword">static</span> Atom net_close_window         = 0;
<a name="l00063"></a>00063 <span class="keyword">static</span> Atom net_restack_window       = 0;
<a name="l00064"></a>00064 <span class="keyword">static</span> Atom net_wm_moveresize        = 0;
<a name="l00065"></a>00065 <span class="keyword">static</span> Atom net_moveresize_window    = 0;
<a name="l00066"></a>00066 
<a name="l00067"></a>00067 <span class="comment">// application window properties</span>
<a name="l00068"></a>00068 <span class="keyword">static</span> Atom net_wm_name              = 0;
<a name="l00069"></a>00069 <span class="keyword">static</span> Atom net_wm_visible_name      = 0;
<a name="l00070"></a>00070 <span class="keyword">static</span> Atom net_wm_icon_name         = 0;
<a name="l00071"></a>00071 <span class="keyword">static</span> Atom net_wm_visible_icon_name = 0;
<a name="l00072"></a>00072 <span class="keyword">static</span> Atom net_wm_desktop           = 0;
<a name="l00073"></a>00073 <span class="keyword">static</span> Atom net_wm_window_type       = 0;
<a name="l00074"></a>00074 <span class="keyword">static</span> Atom net_wm_state             = 0;
<a name="l00075"></a>00075 <span class="keyword">static</span> Atom net_wm_strut             = 0;
<a name="l00076"></a>00076 <span class="keyword">static</span> Atom net_wm_extended_strut    = 0; <span class="comment">// the atom is called _NET_WM_STRUT_PARTIAL</span>
<a name="l00077"></a>00077 <span class="keyword">static</span> Atom net_wm_icon_geometry     = 0;
<a name="l00078"></a>00078 <span class="keyword">static</span> Atom net_wm_icon              = 0;
<a name="l00079"></a>00079 <span class="keyword">static</span> Atom net_wm_pid               = 0;
<a name="l00080"></a>00080 <span class="keyword">static</span> Atom net_wm_user_time         = 0;
<a name="l00081"></a>00081 <span class="keyword">static</span> Atom net_wm_handled_icons     = 0;
<a name="l00082"></a>00082 <span class="keyword">static</span> Atom net_startup_id           = 0;
<a name="l00083"></a>00083 <span class="keyword">static</span> Atom net_wm_allowed_actions   = 0;
<a name="l00084"></a>00084 <span class="keyword">static</span> Atom wm_window_role           = 0;
<a name="l00085"></a>00085 <span class="keyword">static</span> Atom net_frame_extents        = 0;
<a name="l00086"></a>00086 
<a name="l00087"></a>00087 <span class="comment">// KDE extensions</span>
<a name="l00088"></a>00088 <span class="keyword">static</span> Atom kde_net_system_tray_windows       = 0;
<a name="l00089"></a>00089 <span class="keyword">static</span> Atom kde_net_wm_system_tray_window_for = 0;
<a name="l00090"></a>00090 <span class="keyword">static</span> Atom kde_net_wm_frame_strut            = 0;
<a name="l00091"></a>00091 <span class="keyword">static</span> Atom kde_net_wm_window_type_override   = 0;
<a name="l00092"></a>00092 <span class="keyword">static</span> Atom kde_net_wm_window_type_topmenu    = 0;
<a name="l00093"></a>00093 <span class="keyword">static</span> Atom kde_net_wm_temporary_rules        = 0;
<a name="l00094"></a>00094 
<a name="l00095"></a>00095 <span class="comment">// application protocols</span>
<a name="l00096"></a>00096 <span class="keyword">static</span> Atom wm_protocols = 0;
<a name="l00097"></a>00097 <span class="keyword">static</span> Atom net_wm_ping = 0;
<a name="l00098"></a>00098 <span class="keyword">static</span> Atom net_wm_take_activity = 0;
<a name="l00099"></a>00099 
<a name="l00100"></a>00100 <span class="comment">// application window types</span>
<a name="l00101"></a>00101 <span class="keyword">static</span> Atom net_wm_window_type_normal  = 0;
<a name="l00102"></a>00102 <span class="keyword">static</span> Atom net_wm_window_type_desktop = 0;
<a name="l00103"></a>00103 <span class="keyword">static</span> Atom net_wm_window_type_dock    = 0;
<a name="l00104"></a>00104 <span class="keyword">static</span> Atom net_wm_window_type_toolbar = 0;
<a name="l00105"></a>00105 <span class="keyword">static</span> Atom net_wm_window_type_menu    = 0;
<a name="l00106"></a>00106 <span class="keyword">static</span> Atom net_wm_window_type_dialog  = 0;
<a name="l00107"></a>00107 <span class="keyword">static</span> Atom net_wm_window_type_utility = 0;
<a name="l00108"></a>00108 <span class="keyword">static</span> Atom net_wm_window_type_splash  = 0;
<a name="l00109"></a>00109 <span class="keyword">static</span> Atom net_wm_window_type_dropdown_menu = 0;
<a name="l00110"></a>00110 <span class="keyword">static</span> Atom net_wm_window_type_popup_menu    = 0;
<a name="l00111"></a>00111 <span class="keyword">static</span> Atom net_wm_window_type_tooltip       = 0;
<a name="l00112"></a>00112 <span class="keyword">static</span> Atom net_wm_window_type_notification  = 0;
<a name="l00113"></a>00113 <span class="keyword">static</span> Atom net_wm_window_type_combobox      = 0;
<a name="l00114"></a>00114 <span class="keyword">static</span> Atom net_wm_window_type_dnd           = 0;
<a name="l00115"></a>00115 
<a name="l00116"></a>00116 <span class="comment">// application window state</span>
<a name="l00117"></a>00117 <span class="keyword">static</span> Atom net_wm_state_modal        = 0;
<a name="l00118"></a>00118 <span class="keyword">static</span> Atom net_wm_state_sticky       = 0;
<a name="l00119"></a>00119 <span class="keyword">static</span> Atom net_wm_state_max_vert     = 0;
<a name="l00120"></a>00120 <span class="keyword">static</span> Atom net_wm_state_max_horiz    = 0;
<a name="l00121"></a>00121 <span class="keyword">static</span> Atom net_wm_state_shaded       = 0;
<a name="l00122"></a>00122 <span class="keyword">static</span> Atom net_wm_state_skip_taskbar = 0;
<a name="l00123"></a>00123 <span class="keyword">static</span> Atom net_wm_state_skip_pager   = 0;
<a name="l00124"></a>00124 <span class="keyword">static</span> Atom net_wm_state_hidden       = 0;
<a name="l00125"></a>00125 <span class="keyword">static</span> Atom net_wm_state_fullscreen   = 0;
<a name="l00126"></a>00126 <span class="keyword">static</span> Atom net_wm_state_above        = 0;
<a name="l00127"></a>00127 <span class="keyword">static</span> Atom net_wm_state_below        = 0;
<a name="l00128"></a>00128 <span class="keyword">static</span> Atom net_wm_state_demands_attention = 0;
<a name="l00129"></a>00129 
<a name="l00130"></a>00130 <span class="comment">// allowed actions</span>
<a name="l00131"></a>00131 <span class="keyword">static</span> Atom net_wm_action_move        = 0;
<a name="l00132"></a>00132 <span class="keyword">static</span> Atom net_wm_action_resize      = 0;
<a name="l00133"></a>00133 <span class="keyword">static</span> Atom net_wm_action_minimize    = 0;
<a name="l00134"></a>00134 <span class="keyword">static</span> Atom net_wm_action_shade       = 0;
<a name="l00135"></a>00135 <span class="keyword">static</span> Atom net_wm_action_stick       = 0;
<a name="l00136"></a>00136 <span class="keyword">static</span> Atom net_wm_action_max_vert    = 0;
<a name="l00137"></a>00137 <span class="keyword">static</span> Atom net_wm_action_max_horiz   = 0;
<a name="l00138"></a>00138 <span class="keyword">static</span> Atom net_wm_action_fullscreen  = 0;
<a name="l00139"></a>00139 <span class="keyword">static</span> Atom net_wm_action_change_desk = 0;
<a name="l00140"></a>00140 <span class="keyword">static</span> Atom net_wm_action_close       = 0;
<a name="l00141"></a>00141 
<a name="l00142"></a>00142 <span class="comment">// KDE extension that&#39;s not in the specs - Replaced by state_above now?</span>
<a name="l00143"></a>00143 <span class="keyword">static</span> Atom net_wm_state_stays_on_top = 0;
<a name="l00144"></a>00144 
<a name="l00145"></a>00145 <span class="comment">// used to determine whether application window is managed or not</span>
<a name="l00146"></a>00146 <span class="keyword">static</span> Atom xa_wm_state = 0;
<a name="l00147"></a>00147 
<a name="l00148"></a>00148 <span class="keyword">static</span> Bool netwm_atoms_created      = False;
<a name="l00149"></a>00149 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> netwm_sendevent_mask = (SubstructureRedirectMask|
<a name="l00150"></a>00150                          SubstructureNotifyMask);
<a name="l00151"></a>00151 
<a name="l00152"></a>00152 
<a name="l00153"></a>00153 <span class="keyword">const</span> <span class="keywordtype">long</span> MAX_PROP_SIZE = 100000;
<a name="l00154"></a>00154 
<a name="l00155"></a>00155 <span class="keyword">static</span> <span class="keywordtype">char</span> *nstrdup(<span class="keyword">const</span> <span class="keywordtype">char</span> *s1) {
<a name="l00156"></a>00156     <span class="keywordflow">if</span> (! s1) <span class="keywordflow">return</span> (<span class="keywordtype">char</span> *) 0;
<a name="l00157"></a>00157 
<a name="l00158"></a>00158     <span class="keywordtype">int</span> l = strlen(s1) + 1;
<a name="l00159"></a>00159     <span class="keywordtype">char</span> *s2 = <span class="keyword">new</span> <span class="keywordtype">char</span>[l];
<a name="l00160"></a>00160     strncpy(s2, s1, l);
<a name="l00161"></a>00161     <span class="keywordflow">return</span> s2;
<a name="l00162"></a>00162 }
<a name="l00163"></a>00163 
<a name="l00164"></a>00164 
<a name="l00165"></a>00165 <span class="keyword">static</span> <span class="keywordtype">char</span> *nstrndup(<span class="keyword">const</span> <span class="keywordtype">char</span> *s1, <span class="keywordtype">int</span> l) {
<a name="l00166"></a>00166     <span class="keywordflow">if</span> (! s1 || l == 0) <span class="keywordflow">return</span> (<span class="keywordtype">char</span> *) 0;
<a name="l00167"></a>00167 
<a name="l00168"></a>00168     <span class="keywordtype">char</span> *s2 = <span class="keyword">new</span> <span class="keywordtype">char</span>[l+1];
<a name="l00169"></a>00169     strncpy(s2, s1, l);
<a name="l00170"></a>00170     s2[l] = <span class="charliteral">&#39;\0&#39;</span>;
<a name="l00171"></a>00171     <span class="keywordflow">return</span> s2;
<a name="l00172"></a>00172 }
<a name="l00173"></a>00173 
<a name="l00174"></a>00174 
<a name="l00175"></a>00175 <span class="keyword">static</span> Window *nwindup(Window *w1, <span class="keywordtype">int</span> n) {
<a name="l00176"></a>00176     <span class="keywordflow">if</span> (! w1 || n == 0) <span class="keywordflow">return</span> (Window *) 0;
<a name="l00177"></a>00177 
<a name="l00178"></a>00178     Window *w2 = <span class="keyword">new</span> Window[n];
<a name="l00179"></a>00179     <span class="keywordflow">while</span> (n--) w2[n] = w1[n];
<a name="l00180"></a>00180     <span class="keywordflow">return</span> w2;
<a name="l00181"></a>00181 }
<a name="l00182"></a>00182 
<a name="l00183"></a>00183 
<a name="l00184"></a>00184 <span class="keyword">static</span> <span class="keywordtype">void</span> refdec_nri(NETRootInfoPrivate *p) {
<a name="l00185"></a>00185 
<a name="l00186"></a>00186 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l00187"></a>00187 <span class="preprocessor"></span>    fprintf(stderr, <span class="stringliteral">&quot;NET: decrementing NETRootInfoPrivate::ref (%d)\n&quot;</span>, p-&gt;ref - 1);
<a name="l00188"></a>00188 <span class="preprocessor">#endif</span>
<a name="l00189"></a>00189 <span class="preprocessor"></span>
<a name="l00190"></a>00190     <span class="keywordflow">if</span> (! --p-&gt;ref) {
<a name="l00191"></a>00191 
<a name="l00192"></a>00192 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l00193"></a>00193 <span class="preprocessor"></span>    fprintf(stderr, <span class="stringliteral">&quot;NET: \tno more references, deleting\n&quot;</span>);
<a name="l00194"></a>00194 <span class="preprocessor">#endif</span>
<a name="l00195"></a>00195 <span class="preprocessor"></span>
<a name="l00196"></a>00196     <span class="keyword">delete</span> [] p-&gt;name;
<a name="l00197"></a>00197     <span class="keyword">delete</span> [] p-&gt;stacking;
<a name="l00198"></a>00198     <span class="keyword">delete</span> [] p-&gt;clients;
<a name="l00199"></a>00199     <span class="keyword">delete</span> [] p-&gt;virtual_roots;
<a name="l00200"></a>00200     <span class="keyword">delete</span> [] p-&gt;kde_system_tray_windows;
<a name="l00201"></a>00201 
<a name="l00202"></a>00202     <span class="keywordtype">int</span> i;
<a name="l00203"></a>00203     <span class="keywordflow">for</span> (i = 0; i &lt; p-&gt;desktop_names.size(); i++)
<a name="l00204"></a>00204         <span class="keyword">delete</span> [] p-&gt;desktop_names[i];
<a name="l00205"></a>00205     }
<a name="l00206"></a>00206 }
<a name="l00207"></a>00207 
<a name="l00208"></a>00208 
<a name="l00209"></a>00209 <span class="keyword">static</span> <span class="keywordtype">void</span> refdec_nwi(NETWinInfoPrivate *p) {
<a name="l00210"></a>00210 
<a name="l00211"></a>00211 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l00212"></a>00212 <span class="preprocessor"></span>    fprintf(stderr, <span class="stringliteral">&quot;NET: decrementing NETWinInfoPrivate::ref (%d)\n&quot;</span>, p-&gt;ref - 1);
<a name="l00213"></a>00213 <span class="preprocessor">#endif</span>
<a name="l00214"></a>00214 <span class="preprocessor"></span>
<a name="l00215"></a>00215     <span class="keywordflow">if</span> (! --p-&gt;ref) {
<a name="l00216"></a>00216 
<a name="l00217"></a>00217 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l00218"></a>00218 <span class="preprocessor"></span>    fprintf(stderr, <span class="stringliteral">&quot;NET: \tno more references, deleting\n&quot;</span>);
<a name="l00219"></a>00219 <span class="preprocessor">#endif</span>
<a name="l00220"></a>00220 <span class="preprocessor"></span>
<a name="l00221"></a>00221     <span class="keyword">delete</span> [] p-&gt;name;
<a name="l00222"></a>00222     <span class="keyword">delete</span> [] p-&gt;visible_name;
<a name="l00223"></a>00223     <span class="keyword">delete</span> [] p-&gt;icon_name;
<a name="l00224"></a>00224     <span class="keyword">delete</span> [] p-&gt;visible_icon_name;
<a name="l00225"></a>00225     <span class="keyword">delete</span> [] p-&gt;startup_id;
<a name="l00226"></a>00226 
<a name="l00227"></a>00227     <span class="keywordtype">int</span> i;
<a name="l00228"></a>00228     <span class="keywordflow">for</span> (i = 0; i &lt; p-&gt;icons.size(); i++)
<a name="l00229"></a>00229         <span class="keyword">delete</span> [] p-&gt;icons[i].data;
<a name="l00230"></a>00230     }
<a name="l00231"></a>00231 }
<a name="l00232"></a>00232 
<a name="l00233"></a>00233 
<a name="l00234"></a>00234 <span class="keyword">static</span> <span class="keywordtype">int</span> wcmp(<span class="keyword">const</span> <span class="keywordtype">void</span> *a, <span class="keyword">const</span> <span class="keywordtype">void</span> *b) {
<a name="l00235"></a>00235     <span class="keywordflow">return</span> *((Window *) a) - *((Window *) b);
<a name="l00236"></a>00236 }
<a name="l00237"></a>00237 
<a name="l00238"></a>00238 
<a name="l00239"></a>00239 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> netAtomCount = 84;
<a name="l00240"></a>00240 <span class="keyword">static</span> <span class="keywordtype">void</span> create_atoms(Display *d) {
<a name="l00241"></a>00241     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * <span class="keyword">const</span> names[netAtomCount] =
<a name="l00242"></a>00242     {
<a name="l00243"></a>00243     <span class="stringliteral">&quot;UTF8_STRING&quot;</span>,
<a name="l00244"></a>00244         <span class="stringliteral">&quot;_NET_SUPPORTED&quot;</span>,
<a name="l00245"></a>00245         <span class="stringliteral">&quot;_NET_SUPPORTING_WM_CHECK&quot;</span>,
<a name="l00246"></a>00246         <span class="stringliteral">&quot;_NET_CLIENT_LIST&quot;</span>,
<a name="l00247"></a>00247         <span class="stringliteral">&quot;_NET_CLIENT_LIST_STACKING&quot;</span>,
<a name="l00248"></a>00248         <span class="stringliteral">&quot;_NET_NUMBER_OF_DESKTOPS&quot;</span>,
<a name="l00249"></a>00249         <span class="stringliteral">&quot;_NET_DESKTOP_GEOMETRY&quot;</span>,
<a name="l00250"></a>00250         <span class="stringliteral">&quot;_NET_DESKTOP_VIEWPORT&quot;</span>,
<a name="l00251"></a>00251         <span class="stringliteral">&quot;_NET_CURRENT_DESKTOP&quot;</span>,
<a name="l00252"></a>00252         <span class="stringliteral">&quot;_NET_DESKTOP_NAMES&quot;</span>,
<a name="l00253"></a>00253         <span class="stringliteral">&quot;_NET_ACTIVE_WINDOW&quot;</span>,
<a name="l00254"></a>00254         <span class="stringliteral">&quot;_NET_WORKAREA&quot;</span>,
<a name="l00255"></a>00255         <span class="stringliteral">&quot;_NET_VIRTUAL_ROOTS&quot;</span>,
<a name="l00256"></a>00256             <span class="stringliteral">&quot;_NET_DESKTOP_LAYOUT&quot;</span>,
<a name="l00257"></a>00257             <span class="stringliteral">&quot;_NET_SHOWING_DESKTOP&quot;</span>,
<a name="l00258"></a>00258         <span class="stringliteral">&quot;_NET_CLOSE_WINDOW&quot;</span>,
<a name="l00259"></a>00259             <span class="stringliteral">&quot;_NET_RESTACK_WINDOW&quot;</span>,
<a name="l00260"></a>00260 
<a name="l00261"></a>00261         <span class="stringliteral">&quot;_NET_WM_MOVERESIZE&quot;</span>,
<a name="l00262"></a>00262             <span class="stringliteral">&quot;_NET_MOVERESIZE_WINDOW&quot;</span>,
<a name="l00263"></a>00263         <span class="stringliteral">&quot;_NET_WM_NAME&quot;</span>,
<a name="l00264"></a>00264         <span class="stringliteral">&quot;_NET_WM_VISIBLE_NAME&quot;</span>,
<a name="l00265"></a>00265         <span class="stringliteral">&quot;_NET_WM_ICON_NAME&quot;</span>,
<a name="l00266"></a>00266         <span class="stringliteral">&quot;_NET_WM_VISIBLE_ICON_NAME&quot;</span>,
<a name="l00267"></a>00267         <span class="stringliteral">&quot;_NET_WM_DESKTOP&quot;</span>,
<a name="l00268"></a>00268         <span class="stringliteral">&quot;_NET_WM_WINDOW_TYPE&quot;</span>,
<a name="l00269"></a>00269         <span class="stringliteral">&quot;_NET_WM_STATE&quot;</span>,
<a name="l00270"></a>00270         <span class="stringliteral">&quot;_NET_WM_STRUT&quot;</span>,
<a name="l00271"></a>00271             <span class="stringliteral">&quot;_NET_WM_STRUT_PARTIAL&quot;</span>,
<a name="l00272"></a>00272         <span class="stringliteral">&quot;_NET_WM_ICON_GEOMETRY&quot;</span>,
<a name="l00273"></a>00273         <span class="stringliteral">&quot;_NET_WM_ICON&quot;</span>,
<a name="l00274"></a>00274         <span class="stringliteral">&quot;_NET_WM_PID&quot;</span>,
<a name="l00275"></a>00275         <span class="stringliteral">&quot;_NET_WM_USER_TIME&quot;</span>,
<a name="l00276"></a>00276         <span class="stringliteral">&quot;_NET_WM_HANDLED_ICONS&quot;</span>,
<a name="l00277"></a>00277             <span class="stringliteral">&quot;_NET_STARTUP_ID&quot;</span>,
<a name="l00278"></a>00278             <span class="stringliteral">&quot;_NET_WM_ALLOWED_ACTIONS&quot;</span>,
<a name="l00279"></a>00279         <span class="stringliteral">&quot;_NET_WM_PING&quot;</span>,
<a name="l00280"></a>00280             <span class="stringliteral">&quot;_NET_WM_TAKE_ACTIVITY&quot;</span>,
<a name="l00281"></a>00281             <span class="stringliteral">&quot;WM_WINDOW_ROLE&quot;</span>,
<a name="l00282"></a>00282             <span class="stringliteral">&quot;_NET_FRAME_EXTENTS&quot;</span>,
<a name="l00283"></a>00283 
<a name="l00284"></a>00284         <span class="stringliteral">&quot;_NET_WM_WINDOW_TYPE_NORMAL&quot;</span>,
<a name="l00285"></a>00285         <span class="stringliteral">&quot;_NET_WM_WINDOW_TYPE_DESKTOP&quot;</span>,
<a name="l00286"></a>00286         <span class="stringliteral">&quot;_NET_WM_WINDOW_TYPE_DOCK&quot;</span>,
<a name="l00287"></a>00287         <span class="stringliteral">&quot;_NET_WM_WINDOW_TYPE_TOOLBAR&quot;</span>,
<a name="l00288"></a>00288         <span class="stringliteral">&quot;_NET_WM_WINDOW_TYPE_MENU&quot;</span>,
<a name="l00289"></a>00289         <span class="stringliteral">&quot;_NET_WM_WINDOW_TYPE_DIALOG&quot;</span>,
<a name="l00290"></a>00290         <span class="stringliteral">&quot;_NET_WM_WINDOW_TYPE_UTILITY&quot;</span>,
<a name="l00291"></a>00291         <span class="stringliteral">&quot;_NET_WM_WINDOW_TYPE_SPLASH&quot;</span>,
<a name="l00292"></a>00292         <span class="stringliteral">&quot;_NET_WM_WINDOW_TYPE_DROPDOWN_MENU&quot;</span>,
<a name="l00293"></a>00293         <span class="stringliteral">&quot;_NET_WM_WINDOW_TYPE_POPUP_MENU&quot;</span>,
<a name="l00294"></a>00294         <span class="stringliteral">&quot;_NET_WM_WINDOW_TYPE_TOOLTIP&quot;</span>,
<a name="l00295"></a>00295         <span class="stringliteral">&quot;_NET_WM_WINDOW_TYPE_NOTIFICATION&quot;</span>,
<a name="l00296"></a>00296         <span class="stringliteral">&quot;_NET_WM_WINDOW_TYPE_COMBOBOX&quot;</span>,
<a name="l00297"></a>00297         <span class="stringliteral">&quot;_NET_WM_WINDOW_TYPE_DND&quot;</span>,
<a name="l00298"></a>00298 
<a name="l00299"></a>00299         <span class="stringliteral">&quot;_NET_WM_STATE_MODAL&quot;</span>,
<a name="l00300"></a>00300         <span class="stringliteral">&quot;_NET_WM_STATE_STICKY&quot;</span>,
<a name="l00301"></a>00301         <span class="stringliteral">&quot;_NET_WM_STATE_MAXIMIZED_VERT&quot;</span>,
<a name="l00302"></a>00302         <span class="stringliteral">&quot;_NET_WM_STATE_MAXIMIZED_HORZ&quot;</span>,
<a name="l00303"></a>00303         <span class="stringliteral">&quot;_NET_WM_STATE_SHADED&quot;</span>,
<a name="l00304"></a>00304         <span class="stringliteral">&quot;_NET_WM_STATE_SKIP_TASKBAR&quot;</span>,
<a name="l00305"></a>00305         <span class="stringliteral">&quot;_NET_WM_STATE_SKIP_PAGER&quot;</span>,
<a name="l00306"></a>00306         <span class="stringliteral">&quot;_NET_WM_STATE_HIDDEN&quot;</span>,
<a name="l00307"></a>00307         <span class="stringliteral">&quot;_NET_WM_STATE_FULLSCREEN&quot;</span>,
<a name="l00308"></a>00308         <span class="stringliteral">&quot;_NET_WM_STATE_ABOVE&quot;</span>,
<a name="l00309"></a>00309         <span class="stringliteral">&quot;_NET_WM_STATE_BELOW&quot;</span>,
<a name="l00310"></a>00310         <span class="stringliteral">&quot;_NET_WM_STATE_DEMANDS_ATTENTION&quot;</span>,
<a name="l00311"></a>00311 
<a name="l00312"></a>00312             <span class="stringliteral">&quot;_NET_WM_ACTION_MOVE&quot;</span>,
<a name="l00313"></a>00313             <span class="stringliteral">&quot;_NET_WM_ACTION_RESIZE&quot;</span>,
<a name="l00314"></a>00314             <span class="stringliteral">&quot;_NET_WM_ACTION_MINIMIZE&quot;</span>,
<a name="l00315"></a>00315             <span class="stringliteral">&quot;_NET_WM_ACTION_SHADE&quot;</span>,
<a name="l00316"></a>00316             <span class="stringliteral">&quot;_NET_WM_ACTION_STICK&quot;</span>,
<a name="l00317"></a>00317             <span class="stringliteral">&quot;_NET_WM_ACTION_MAXIMIZE_VERT&quot;</span>,
<a name="l00318"></a>00318             <span class="stringliteral">&quot;_NET_WM_ACTION_MAXIMIZE_HORZ&quot;</span>,
<a name="l00319"></a>00319             <span class="stringliteral">&quot;_NET_WM_ACTION_FULLSCREEN&quot;</span>,
<a name="l00320"></a>00320             <span class="stringliteral">&quot;_NET_WM_ACTION_CHANGE_DESKTOP&quot;</span>,
<a name="l00321"></a>00321             <span class="stringliteral">&quot;_NET_WM_ACTION_CLOSE&quot;</span>,
<a name="l00322"></a>00322 
<a name="l00323"></a>00323         <span class="stringliteral">&quot;_NET_WM_STATE_STAYS_ON_TOP&quot;</span>,
<a name="l00324"></a>00324 
<a name="l00325"></a>00325         <span class="stringliteral">&quot;_KDE_NET_SYSTEM_TRAY_WINDOWS&quot;</span>,
<a name="l00326"></a>00326         <span class="stringliteral">&quot;_KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR&quot;</span>,
<a name="l00327"></a>00327         <span class="stringliteral">&quot;_KDE_NET_WM_FRAME_STRUT&quot;</span>,
<a name="l00328"></a>00328         <span class="stringliteral">&quot;_KDE_NET_WM_WINDOW_TYPE_OVERRIDE&quot;</span>,
<a name="l00329"></a>00329         <span class="stringliteral">&quot;_KDE_NET_WM_WINDOW_TYPE_TOPMENU&quot;</span>,
<a name="l00330"></a>00330             <span class="stringliteral">&quot;_KDE_NET_WM_TEMPORARY_RULES&quot;</span>,
<a name="l00331"></a>00331 
<a name="l00332"></a>00332         <span class="stringliteral">&quot;WM_STATE&quot;</span>,
<a name="l00333"></a>00333         <span class="stringliteral">&quot;WM_PROTOCOLS&quot;</span>
<a name="l00334"></a>00334         };
<a name="l00335"></a>00335 
<a name="l00336"></a>00336     Atom atoms[netAtomCount], *atomsp[netAtomCount] =
<a name="l00337"></a>00337     {
<a name="l00338"></a>00338     &amp;UTF8_STRING,
<a name="l00339"></a>00339         &amp;net_supported,
<a name="l00340"></a>00340         &amp;net_supporting_wm_check,
<a name="l00341"></a>00341         &amp;net_client_list,
<a name="l00342"></a>00342         &amp;net_client_list_stacking,
<a name="l00343"></a>00343         &amp;net_number_of_desktops,
<a name="l00344"></a>00344         &amp;net_desktop_geometry,
<a name="l00345"></a>00345         &amp;net_desktop_viewport,
<a name="l00346"></a>00346         &amp;net_current_desktop,
<a name="l00347"></a>00347         &amp;net_desktop_names,
<a name="l00348"></a>00348         &amp;net_active_window,
<a name="l00349"></a>00349         &amp;net_workarea,
<a name="l00350"></a>00350         &amp;net_virtual_roots,
<a name="l00351"></a>00351             &amp;net_desktop_layout,
<a name="l00352"></a>00352             &amp;net_showing_desktop,
<a name="l00353"></a>00353         &amp;net_close_window,
<a name="l00354"></a>00354             &amp;net_restack_window,
<a name="l00355"></a>00355 
<a name="l00356"></a>00356         &amp;net_wm_moveresize,
<a name="l00357"></a>00357             &amp;net_moveresize_window,
<a name="l00358"></a>00358         &amp;net_wm_name,
<a name="l00359"></a>00359         &amp;net_wm_visible_name,
<a name="l00360"></a>00360         &amp;net_wm_icon_name,
<a name="l00361"></a>00361         &amp;net_wm_visible_icon_name,
<a name="l00362"></a>00362         &amp;net_wm_desktop,
<a name="l00363"></a>00363         &amp;net_wm_window_type,
<a name="l00364"></a>00364         &amp;net_wm_state,
<a name="l00365"></a>00365         &amp;net_wm_strut,
<a name="l00366"></a>00366             &amp;net_wm_extended_strut,
<a name="l00367"></a>00367         &amp;net_wm_icon_geometry,
<a name="l00368"></a>00368         &amp;net_wm_icon,
<a name="l00369"></a>00369         &amp;net_wm_pid,
<a name="l00370"></a>00370         &amp;net_wm_user_time,
<a name="l00371"></a>00371         &amp;net_wm_handled_icons,
<a name="l00372"></a>00372             &amp;net_startup_id,
<a name="l00373"></a>00373             &amp;net_wm_allowed_actions,
<a name="l00374"></a>00374         &amp;net_wm_ping,
<a name="l00375"></a>00375             &amp;net_wm_take_activity,
<a name="l00376"></a>00376             &amp;wm_window_role,
<a name="l00377"></a>00377             &amp;net_frame_extents,
<a name="l00378"></a>00378 
<a name="l00379"></a>00379         &amp;net_wm_window_type_normal,
<a name="l00380"></a>00380         &amp;net_wm_window_type_desktop,
<a name="l00381"></a>00381         &amp;net_wm_window_type_dock,
<a name="l00382"></a>00382         &amp;net_wm_window_type_toolbar,
<a name="l00383"></a>00383         &amp;net_wm_window_type_menu,
<a name="l00384"></a>00384         &amp;net_wm_window_type_dialog,
<a name="l00385"></a>00385         &amp;net_wm_window_type_utility,
<a name="l00386"></a>00386         &amp;net_wm_window_type_splash,
<a name="l00387"></a>00387         &amp;net_wm_window_type_dropdown_menu,
<a name="l00388"></a>00388         &amp;net_wm_window_type_popup_menu,
<a name="l00389"></a>00389         &amp;net_wm_window_type_tooltip,
<a name="l00390"></a>00390         &amp;net_wm_window_type_notification,
<a name="l00391"></a>00391         &amp;net_wm_window_type_combobox,
<a name="l00392"></a>00392         &amp;net_wm_window_type_dnd,
<a name="l00393"></a>00393 
<a name="l00394"></a>00394         &amp;net_wm_state_modal,
<a name="l00395"></a>00395         &amp;net_wm_state_sticky,
<a name="l00396"></a>00396         &amp;net_wm_state_max_vert,
<a name="l00397"></a>00397         &amp;net_wm_state_max_horiz,
<a name="l00398"></a>00398         &amp;net_wm_state_shaded,
<a name="l00399"></a>00399         &amp;net_wm_state_skip_taskbar,
<a name="l00400"></a>00400         &amp;net_wm_state_skip_pager,
<a name="l00401"></a>00401         &amp;net_wm_state_hidden,
<a name="l00402"></a>00402         &amp;net_wm_state_fullscreen,
<a name="l00403"></a>00403         &amp;net_wm_state_above,
<a name="l00404"></a>00404         &amp;net_wm_state_below,
<a name="l00405"></a>00405         &amp;net_wm_state_demands_attention,
<a name="l00406"></a>00406 
<a name="l00407"></a>00407             &amp;net_wm_action_move,
<a name="l00408"></a>00408             &amp;net_wm_action_resize,
<a name="l00409"></a>00409             &amp;net_wm_action_minimize,
<a name="l00410"></a>00410             &amp;net_wm_action_shade,
<a name="l00411"></a>00411             &amp;net_wm_action_stick,
<a name="l00412"></a>00412             &amp;net_wm_action_max_vert,
<a name="l00413"></a>00413             &amp;net_wm_action_max_horiz,
<a name="l00414"></a>00414             &amp;net_wm_action_fullscreen,
<a name="l00415"></a>00415             &amp;net_wm_action_change_desk,
<a name="l00416"></a>00416             &amp;net_wm_action_close,
<a name="l00417"></a>00417 
<a name="l00418"></a>00418         &amp;net_wm_state_stays_on_top,
<a name="l00419"></a>00419 
<a name="l00420"></a>00420         &amp;kde_net_system_tray_windows,
<a name="l00421"></a>00421         &amp;kde_net_wm_system_tray_window_for,
<a name="l00422"></a>00422         &amp;kde_net_wm_frame_strut,
<a name="l00423"></a>00423         &amp;kde_net_wm_window_type_override,
<a name="l00424"></a>00424         &amp;kde_net_wm_window_type_topmenu,
<a name="l00425"></a>00425             &amp;kde_net_wm_temporary_rules,
<a name="l00426"></a>00426 
<a name="l00427"></a>00427         &amp;xa_wm_state,
<a name="l00428"></a>00428         &amp;wm_protocols
<a name="l00429"></a>00429         };
<a name="l00430"></a>00430 
<a name="l00431"></a>00431     assert( !netwm_atoms_created );
<a name="l00432"></a>00432 
<a name="l00433"></a>00433     <span class="keywordtype">int</span> i = netAtomCount;
<a name="l00434"></a>00434     <span class="keywordflow">while</span> (i--)
<a name="l00435"></a>00435     atoms[i] = 0;
<a name="l00436"></a>00436 
<a name="l00437"></a>00437     XInternAtoms(d, (<span class="keywordtype">char</span> **) names, netAtomCount, False, atoms);
<a name="l00438"></a>00438 
<a name="l00439"></a>00439     i = netAtomCount;
<a name="l00440"></a>00440     <span class="keywordflow">while</span> (i--)
<a name="l00441"></a>00441     *atomsp[i] = atoms[i];
<a name="l00442"></a>00442 
<a name="l00443"></a>00443     netwm_atoms_created = True;
<a name="l00444"></a>00444 }
<a name="l00445"></a>00445 
<a name="l00446"></a>00446 
<a name="l00447"></a>00447 <span class="keyword">static</span> <span class="keywordtype">void</span> readIcon(Display* display, Window window, Atom property, NETRArray&lt;NETIcon&gt;&amp; icons, <span class="keywordtype">int</span>&amp; icon_count) {
<a name="l00448"></a>00448 
<a name="l00449"></a>00449 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l00450"></a>00450 <span class="preprocessor"></span>    fprintf(stderr, <span class="stringliteral">&quot;NET: readIcon\n&quot;</span>);
<a name="l00451"></a>00451 <span class="preprocessor">#endif</span>
<a name="l00452"></a>00452 <span class="preprocessor"></span>
<a name="l00453"></a>00453     Atom type_ret;
<a name="l00454"></a>00454     <span class="keywordtype">int</span> format_ret;
<a name="l00455"></a>00455     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> nitems_ret = 0, after_ret = 0;
<a name="l00456"></a>00456     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *data_ret = 0;
<a name="l00457"></a>00457 
<a name="l00458"></a>00458     <span class="comment">// reset</span>
<a name="l00459"></a>00459     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; icons.size(); i++)
<a name="l00460"></a>00460         <span class="keyword">delete</span> [] icons[i].data;
<a name="l00461"></a>00461     icons.reset();
<a name="l00462"></a>00462     icon_count = 0;
<a name="l00463"></a>00463 
<a name="l00464"></a>00464     <span class="comment">// allocate buffers</span>
<a name="l00465"></a>00465     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *buffer = 0;
<a name="l00466"></a>00466     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> offset = 0;
<a name="l00467"></a>00467     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> buffer_offset = 0;
<a name="l00468"></a>00468     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> bufsize = 0;
<a name="l00469"></a>00469 
<a name="l00470"></a>00470     <span class="comment">// read data</span>
<a name="l00471"></a>00471     <span class="keywordflow">do</span> {
<a name="l00472"></a>00472     <span class="keywordflow">if</span> (XGetWindowProperty(display, window, property, offset,
<a name="l00473"></a>00473                    MAX_PROP_SIZE, False, XA_CARDINAL, &amp;type_ret,
<a name="l00474"></a>00474                    &amp;format_ret, &amp;nitems_ret, &amp;after_ret, &amp;data_ret)
<a name="l00475"></a>00475         == Success) {
<a name="l00476"></a>00476             <span class="keywordflow">if</span> (!bufsize)
<a name="l00477"></a>00477             {
<a name="l00478"></a>00478                <span class="keywordflow">if</span> (nitems_ret &lt; 3 || type_ret != XA_CARDINAL ||
<a name="l00479"></a>00479                   format_ret != 32) {
<a name="l00480"></a>00480                   <span class="comment">// either we didn&#39;t get the property, or the property has less than</span>
<a name="l00481"></a>00481                   <span class="comment">// 3 elements in it</span>
<a name="l00482"></a>00482                   <span class="comment">// NOTE: 3 is the ABSOLUTE minimum:</span>
<a name="l00483"></a>00483                   <span class="comment">//     width = 1, height = 1, length(data) = 1 (width * height)</span>
<a name="l00484"></a>00484                   <span class="keywordflow">if</span> ( data_ret )
<a name="l00485"></a>00485                      XFree(data_ret);
<a name="l00486"></a>00486                   <span class="keywordflow">return</span>;
<a name="l00487"></a>00487                }
<a name="l00488"></a>00488 
<a name="l00489"></a>00489                bufsize = nitems_ret * <span class="keyword">sizeof</span>(long) + after_ret;
<a name="l00490"></a>00490                buffer = (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) malloc(bufsize);
<a name="l00491"></a>00491             }
<a name="l00492"></a>00492             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (buffer_offset + nitems_ret*<span class="keyword">sizeof</span>(<span class="keywordtype">long</span>) &gt; bufsize)
<a name="l00493"></a>00493             {
<a name="l00494"></a>00494 fprintf(stderr, <span class="stringliteral">&quot;NETWM: Warning readIcon() needs buffer adjustment!\n&quot;</span>);
<a name="l00495"></a>00495                bufsize = buffer_offset + nitems_ret * <span class="keyword">sizeof</span>(long) + after_ret;
<a name="l00496"></a>00496                buffer = (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) realloc(buffer, bufsize);
<a name="l00497"></a>00497             }
<a name="l00498"></a>00498         memcpy((buffer + buffer_offset), data_ret, nitems_ret * <span class="keyword">sizeof</span>(<span class="keywordtype">long</span>));
<a name="l00499"></a>00499         buffer_offset += nitems_ret * <span class="keyword">sizeof</span>(long);
<a name="l00500"></a>00500         offset += nitems_ret;
<a name="l00501"></a>00501 
<a name="l00502"></a>00502         <span class="keywordflow">if</span> ( data_ret )
<a name="l00503"></a>00503         XFree(data_ret);
<a name="l00504"></a>00504     } <span class="keywordflow">else</span> {
<a name="l00505"></a>00505             <span class="keywordflow">if</span> (buffer)
<a name="l00506"></a>00506                free(buffer);
<a name="l00507"></a>00507         <span class="keywordflow">return</span>; <span class="comment">// Some error occurred cq. property didn&#39;t exist.</span>
<a name="l00508"></a>00508     }
<a name="l00509"></a>00509     }
<a name="l00510"></a>00510     <span class="keywordflow">while</span> (after_ret &gt; 0);
<a name="l00511"></a>00511 
<a name="l00512"></a>00512     CARD32 *data32;
<a name="l00513"></a>00513     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> i, j, k, sz, s;
<a name="l00514"></a>00514     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *d = (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *) buffer;
<a name="l00515"></a>00515     <span class="keywordflow">for</span> (i = 0, j = 0; i &lt; bufsize;) {
<a name="l00516"></a>00516     icons[j].size.width = *d++;
<a name="l00517"></a>00517     i += <span class="keyword">sizeof</span>(long);
<a name="l00518"></a>00518     icons[j].size.height = *d++;
<a name="l00519"></a>00519     i += <span class="keyword">sizeof</span>(long);
<a name="l00520"></a>00520 
<a name="l00521"></a>00521     sz = icons[j].size.width * icons[j].size.height;
<a name="l00522"></a>00522     s = sz * <span class="keyword">sizeof</span>(long);
<a name="l00523"></a>00523 
<a name="l00524"></a>00524     <span class="keywordflow">if</span> ( i + s - 1 &gt; bufsize || sz == 0 || sz &gt; 1024 * 1024 ) {
<a name="l00525"></a>00525         <span class="keywordflow">break</span>;
<a name="l00526"></a>00526     }
<a name="l00527"></a>00527 
<a name="l00528"></a>00528     <span class="keyword">delete</span> [] icons[j].data;
<a name="l00529"></a>00529     data32 = <span class="keyword">new</span> CARD32[sz];
<a name="l00530"></a>00530     icons[j].data = (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) data32;
<a name="l00531"></a>00531     <span class="keywordflow">for</span> (k = 0; k &lt; sz; k++, i += <span class="keyword">sizeof</span>(long)) {
<a name="l00532"></a>00532         *data32++ = (CARD32) *d++;
<a name="l00533"></a>00533     }
<a name="l00534"></a>00534     j++;
<a name="l00535"></a>00535         icon_count++;
<a name="l00536"></a>00536     }
<a name="l00537"></a>00537 
<a name="l00538"></a>00538 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l00539"></a>00539 <span class="preprocessor"></span>    fprintf(stderr, <span class="stringliteral">&quot;NET: readIcon got %d icons\n&quot;</span>, icon_count);
<a name="l00540"></a>00540 <span class="preprocessor">#endif</span>
<a name="l00541"></a>00541 <span class="preprocessor"></span>
<a name="l00542"></a>00542     free(buffer);
<a name="l00543"></a>00543 }
<a name="l00544"></a>00544 
<a name="l00545"></a>00545 
<a name="l00546"></a>00546 <span class="keyword">template</span> &lt;<span class="keyword">class</span> Z&gt;
<a name="l00547"></a>00547 NETRArray&lt;Z&gt;::NETRArray()
<a name="l00548"></a>00548   : sz(0),  capacity(2)
<a name="l00549"></a>00549 {
<a name="l00550"></a>00550     d = (Z*) calloc(capacity, <span class="keyword">sizeof</span>(Z)); <span class="comment">// allocate 2 elts and set to zero</span>
<a name="l00551"></a>00551 }
<a name="l00552"></a>00552 
<a name="l00553"></a>00553 
<a name="l00554"></a>00554 <span class="keyword">template</span> &lt;<span class="keyword">class</span> Z&gt;
<a name="l00555"></a>00555 NETRArray&lt;Z&gt;::~NETRArray() {
<a name="l00556"></a>00556     free(d);
<a name="l00557"></a>00557 }
<a name="l00558"></a>00558 
<a name="l00559"></a>00559 
<a name="l00560"></a>00560 <span class="keyword">template</span> &lt;<span class="keyword">class</span> Z&gt;
<a name="l00561"></a>00561 <span class="keywordtype">void</span> NETRArray&lt;Z&gt;::reset() {
<a name="l00562"></a>00562     sz = 0;
<a name="l00563"></a>00563     capacity = 2;
<a name="l00564"></a>00564     d = (Z*) realloc(d, <span class="keyword">sizeof</span>(Z)*capacity);
<a name="l00565"></a>00565     memset( (<span class="keywordtype">void</span>*) d, 0, <span class="keyword">sizeof</span>(Z)*capacity );
<a name="l00566"></a>00566 }
<a name="l00567"></a>00567 
<a name="l00568"></a>00568 <span class="keyword">template</span> &lt;<span class="keyword">class</span> Z&gt;
<a name="l00569"></a>00569 Z &amp;NETRArray&lt;Z&gt;::operator[](<span class="keywordtype">int</span> index) {
<a name="l00570"></a>00570     <span class="keywordflow">if</span> (index &gt;= capacity) {
<a name="l00571"></a>00571     <span class="comment">// allocate space for the new data</span>
<a name="l00572"></a>00572     <span class="comment">// open table has amortized O(1) access time</span>
<a name="l00573"></a>00573     <span class="comment">// when N elements appended consecutively -- exa</span>
<a name="l00574"></a>00574         <span class="keywordtype">int</span> newcapacity = 2*capacity &gt; index+1 ? 2*capacity : index+1; <span class="comment">// max</span>
<a name="l00575"></a>00575     <span class="comment">// copy into new larger memory block using realloc</span>
<a name="l00576"></a>00576         d = (Z*) realloc(d, <span class="keyword">sizeof</span>(Z)*newcapacity);
<a name="l00577"></a>00577         memset( (<span class="keywordtype">void</span>*) &amp;d[capacity], 0, <span class="keyword">sizeof</span>(Z)*(newcapacity-capacity) );
<a name="l00578"></a>00578     capacity = newcapacity;
<a name="l00579"></a>00579     }
<a name="l00580"></a>00580     <span class="keywordflow">if</span> (index &gt;= sz)            <span class="comment">// at this point capacity&gt;index</span>
<a name="l00581"></a>00581         sz = index + 1;
<a name="l00582"></a>00582 
<a name="l00583"></a>00583     <span class="keywordflow">return</span> d[index];
<a name="l00584"></a>00584 }
<a name="l00585"></a>00585 
<a name="l00586"></a>00586 
<a name="l00587"></a>00587 <span class="comment">// Construct a new NETRootInfo object.</span>
<a name="l00588"></a>00588 
<a name="l00589"></a>00589 NETRootInfo::NETRootInfo(Display *display, Window supportWindow, <span class="keyword">const</span> <span class="keywordtype">char</span> *wmName,
<a name="l00590"></a>00590              <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> properties[], <span class="keywordtype">int</span> properties_size,
<a name="l00591"></a>00591                          <span class="keywordtype">int</span> screen, <span class="keywordtype">bool</span> doActivate)
<a name="l00592"></a>00592 {
<a name="l00593"></a>00593 
<a name="l00594"></a>00594 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l00595"></a>00595 <span class="preprocessor"></span>    fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::NETRootInfo: using window manager constructor\n&quot;</span>);
<a name="l00596"></a>00596 <span class="preprocessor">#endif</span>
<a name="l00597"></a>00597 <span class="preprocessor"></span>
<a name="l00598"></a>00598     p = <span class="keyword">new</span> NETRootInfoPrivate;
<a name="l00599"></a>00599     p-&gt;ref = 1;
<a name="l00600"></a>00600 
<a name="l00601"></a>00601     p-&gt;display = display;
<a name="l00602"></a>00602     p-&gt;name = nstrdup(wmName);
<a name="l00603"></a>00603 
<a name="l00604"></a>00604     <span class="keywordflow">if</span> (screen != -1) {
<a name="l00605"></a>00605     p-&gt;screen = screen;
<a name="l00606"></a>00606     } <span class="keywordflow">else</span> {
<a name="l00607"></a>00607     p-&gt;screen = DefaultScreen(p-&gt;display);
<a name="l00608"></a>00608     }
<a name="l00609"></a>00609 
<a name="l00610"></a>00610     p-&gt;root = RootWindow(p-&gt;display, p-&gt;screen);
<a name="l00611"></a>00611     p-&gt;supportwindow = supportWindow;
<a name="l00612"></a>00612     p-&gt;number_of_desktops = p-&gt;current_desktop = 0;
<a name="l00613"></a>00613     p-&gt;active = None;
<a name="l00614"></a>00614     p-&gt;clients = p-&gt;stacking = p-&gt;virtual_roots = (Window *) 0;
<a name="l00615"></a>00615     p-&gt;clients_count = p-&gt;stacking_count = p-&gt;virtual_roots_count = 0;
<a name="l00616"></a>00616     p-&gt;kde_system_tray_windows = 0;
<a name="l00617"></a>00617     p-&gt;kde_system_tray_windows_count = 0;
<a name="l00618"></a>00618     p-&gt;showing_desktop = <span class="keyword">false</span>;
<a name="l00619"></a>00619     p-&gt;desktop_layout_orientation = OrientationHorizontal;
<a name="l00620"></a>00620     p-&gt;desktop_layout_corner = DesktopLayoutCornerTopLeft;
<a name="l00621"></a>00621     p-&gt;desktop_layout_columns = p-&gt;desktop_layout_rows = 0;
<a name="l00622"></a>00622     setDefaultProperties();
<a name="l00623"></a>00623     <span class="keywordflow">if</span>( properties_size &gt; PROPERTIES_SIZE ) {
<a name="l00624"></a>00624         fprintf( stderr, <span class="stringliteral">&quot;NETRootInfo::NETRootInfo(): properties array too large\n&quot;</span>);
<a name="l00625"></a>00625         properties_size = PROPERTIES_SIZE;
<a name="l00626"></a>00626     }
<a name="l00627"></a>00627     <span class="keywordflow">for</span>( <span class="keywordtype">int</span> i = 0; i &lt; properties_size; ++i )
<a name="l00628"></a>00628         p-&gt;properties[ i ] = properties[ i ];
<a name="l00629"></a>00629     <span class="comment">// force support for Supported and SupportingWMCheck for window managers</span>
<a name="l00630"></a>00630     p-&gt;properties[ PROTOCOLS ] |= ( Supported | SupportingWMCheck );
<a name="l00631"></a>00631     p-&gt;client_properties[ PROTOCOLS ] = DesktopNames <span class="comment">// the only thing that can be changed by clients</span>
<a name="l00632"></a>00632                             | WMPing; <span class="comment">// or they can reply to this</span>
<a name="l00633"></a>00633     p-&gt;client_properties[ PROTOCOLS2 ] = WM2TakeActivity | WM2DesktopLayout;
<a name="l00634"></a>00634 
<a name="l00635"></a>00635     role = WindowManager;
<a name="l00636"></a>00636 
<a name="l00637"></a>00637     <span class="keywordflow">if</span> (! netwm_atoms_created) create_atoms(p-&gt;display);
<a name="l00638"></a>00638 
<a name="l00639"></a>00639     <span class="keywordflow">if</span> (doActivate) activate();
<a name="l00640"></a>00640 }
<a name="l00641"></a>00641 
<a name="l00642"></a>00642 NETRootInfo::NETRootInfo(Display *display, Window supportWindow, <span class="keyword">const</span> <span class="keywordtype">char</span> *wmName,
<a name="l00643"></a>00643              <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> properties, <span class="keywordtype">int</span> screen, <span class="keywordtype">bool</span> doActivate)
<a name="l00644"></a>00644 {
<a name="l00645"></a>00645 
<a name="l00646"></a>00646 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l00647"></a>00647 <span class="preprocessor"></span>    fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::NETRootInfo: using window manager constructor\n&quot;</span>);
<a name="l00648"></a>00648 <span class="preprocessor">#endif</span>
<a name="l00649"></a>00649 <span class="preprocessor"></span>
<a name="l00650"></a>00650     p = <span class="keyword">new</span> NETRootInfoPrivate;
<a name="l00651"></a>00651     p-&gt;ref = 1;
<a name="l00652"></a>00652 
<a name="l00653"></a>00653     p-&gt;display = display;
<a name="l00654"></a>00654     p-&gt;name = nstrdup(wmName);
<a name="l00655"></a>00655 
<a name="l00656"></a>00656     <span class="keywordflow">if</span> (screen != -1) {
<a name="l00657"></a>00657     p-&gt;screen = screen;
<a name="l00658"></a>00658     } <span class="keywordflow">else</span> {
<a name="l00659"></a>00659     p-&gt;screen = DefaultScreen(p-&gt;display);
<a name="l00660"></a>00660     }
<a name="l00661"></a>00661 
<a name="l00662"></a>00662     p-&gt;root = RootWindow(p-&gt;display, p-&gt;screen);
<a name="l00663"></a>00663     p-&gt;supportwindow = supportWindow;
<a name="l00664"></a>00664     p-&gt;number_of_desktops = p-&gt;current_desktop = 0;
<a name="l00665"></a>00665     p-&gt;active = None;
<a name="l00666"></a>00666     p-&gt;clients = p-&gt;stacking = p-&gt;virtual_roots = (Window *) 0;
<a name="l00667"></a>00667     p-&gt;clients_count = p-&gt;stacking_count = p-&gt;virtual_roots_count = 0;
<a name="l00668"></a>00668     p-&gt;kde_system_tray_windows = 0;
<a name="l00669"></a>00669     p-&gt;kde_system_tray_windows_count = 0;
<a name="l00670"></a>00670     p-&gt;showing_desktop = <span class="keyword">false</span>;
<a name="l00671"></a>00671     setDefaultProperties();
<a name="l00672"></a>00672     p-&gt;properties[ PROTOCOLS ] = properties;
<a name="l00673"></a>00673     <span class="comment">// force support for Supported and SupportingWMCheck for window managers</span>
<a name="l00674"></a>00674     p-&gt;properties[ PROTOCOLS ] |= ( Supported | SupportingWMCheck );
<a name="l00675"></a>00675     p-&gt;client_properties[ PROTOCOLS ] = DesktopNames <span class="comment">// the only thing that can be changed by clients</span>
<a name="l00676"></a>00676                             | WMPing; <span class="comment">// or they can reply to this</span>
<a name="l00677"></a>00677     p-&gt;client_properties[ PROTOCOLS2 ] = WM2TakeActivity;
<a name="l00678"></a>00678 
<a name="l00679"></a>00679     role = WindowManager;
<a name="l00680"></a>00680 
<a name="l00681"></a>00681     <span class="keywordflow">if</span> (! netwm_atoms_created) create_atoms(p-&gt;display);
<a name="l00682"></a>00682 
<a name="l00683"></a>00683     <span class="keywordflow">if</span> (doActivate) activate();
<a name="l00684"></a>00684 }
<a name="l00685"></a>00685 
<a name="l00686"></a>00686 
<a name="l00687"></a>00687 NETRootInfo::NETRootInfo(Display *display, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> properties[], <span class="keywordtype">int</span> properties_size,
<a name="l00688"></a>00688                          <span class="keywordtype">int</span> screen, <span class="keywordtype">bool</span> doActivate)
<a name="l00689"></a>00689 {
<a name="l00690"></a>00690 
<a name="l00691"></a>00691 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l00692"></a>00692 <span class="preprocessor"></span>    fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::NETRootInfo: using Client constructor\n&quot;</span>);
<a name="l00693"></a>00693 <span class="preprocessor">#endif</span>
<a name="l00694"></a>00694 <span class="preprocessor"></span>
<a name="l00695"></a>00695     p = <span class="keyword">new</span> NETRootInfoPrivate;
<a name="l00696"></a>00696     p-&gt;ref = 1;
<a name="l00697"></a>00697 
<a name="l00698"></a>00698     p-&gt;name = 0;
<a name="l00699"></a>00699 
<a name="l00700"></a>00700     p-&gt;display = display;
<a name="l00701"></a>00701 
<a name="l00702"></a>00702     <span class="keywordflow">if</span> (screen != -1) {
<a name="l00703"></a>00703     p-&gt;screen = screen;
<a name="l00704"></a>00704     } <span class="keywordflow">else</span> {
<a name="l00705"></a>00705     p-&gt;screen = DefaultScreen(p-&gt;display);
<a name="l00706"></a>00706     }
<a name="l00707"></a>00707 
<a name="l00708"></a>00708     p-&gt;root = RootWindow(p-&gt;display, p-&gt;screen);
<a name="l00709"></a>00709     p-&gt;rootSize.width = WidthOfScreen(ScreenOfDisplay(p-&gt;display, p-&gt;screen));
<a name="l00710"></a>00710     p-&gt;rootSize.height = HeightOfScreen(ScreenOfDisplay(p-&gt;display, p-&gt;screen));
<a name="l00711"></a>00711 
<a name="l00712"></a>00712     p-&gt;supportwindow = None;
<a name="l00713"></a>00713     p-&gt;number_of_desktops = p-&gt;current_desktop = 0;
<a name="l00714"></a>00714     p-&gt;active = None;
<a name="l00715"></a>00715     p-&gt;clients = p-&gt;stacking = p-&gt;virtual_roots = (Window *) 0;
<a name="l00716"></a>00716     p-&gt;clients_count = p-&gt;stacking_count = p-&gt;virtual_roots_count = 0;
<a name="l00717"></a>00717     p-&gt;kde_system_tray_windows = 0;
<a name="l00718"></a>00718     p-&gt;kde_system_tray_windows_count = 0;
<a name="l00719"></a>00719     p-&gt;showing_desktop = <span class="keyword">false</span>;
<a name="l00720"></a>00720     p-&gt;desktop_layout_orientation = OrientationHorizontal;
<a name="l00721"></a>00721     p-&gt;desktop_layout_corner = DesktopLayoutCornerTopLeft;
<a name="l00722"></a>00722     p-&gt;desktop_layout_columns = p-&gt;desktop_layout_rows = 0;
<a name="l00723"></a>00723     setDefaultProperties();
<a name="l00724"></a>00724     <span class="keywordflow">if</span>( properties_size &gt; 2 ) {
<a name="l00725"></a>00725         fprintf( stderr, <span class="stringliteral">&quot;NETWinInfo::NETWinInfo(): properties array too large\n&quot;</span>);
<a name="l00726"></a>00726         properties_size = 2;
<a name="l00727"></a>00727     }
<a name="l00728"></a>00728     <span class="keywordflow">for</span>( <span class="keywordtype">int</span> i = 0; i &lt; properties_size; ++i )
<a name="l00729"></a>00729         <span class="comment">// remap from [0]=NET::Property,[1]=NET::Property2</span>
<a name="l00730"></a>00730         <span class="keywordflow">switch</span>( i ) {
<a name="l00731"></a>00731             <span class="keywordflow">case</span> 0:
<a name="l00732"></a>00732                 p-&gt;client_properties[ PROTOCOLS ] = properties[ i ];
<a name="l00733"></a>00733                 <span class="keywordflow">break</span>;
<a name="l00734"></a>00734             <span class="keywordflow">case</span> 1:
<a name="l00735"></a>00735                 p-&gt;client_properties[ PROTOCOLS2 ] = properties[ i ];
<a name="l00736"></a>00736                 <span class="keywordflow">break</span>;
<a name="l00737"></a>00737         }
<a name="l00738"></a>00738     <span class="keywordflow">for</span>( <span class="keywordtype">int</span> i = 0; i &lt; PROPERTIES_SIZE; ++i )
<a name="l00739"></a>00739         p-&gt;properties[ i ] = 0;
<a name="l00740"></a>00740 
<a name="l00741"></a>00741     role = Client;
<a name="l00742"></a>00742 
<a name="l00743"></a>00743     if (! netwm_atoms_created) create_atoms(p-&gt;display);
<a name="l00744"></a>00744 
<a name="l00745"></a>00745     <span class="keywordflow">if</span> (doActivate) activate();
<a name="l00746"></a>00746 }
<a name="l00747"></a>00747 
<a name="l00748"></a>00748 NETRootInfo::NETRootInfo(Display *display, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> properties, <span class="keywordtype">int</span> screen,
<a name="l00749"></a>00749              <span class="keywordtype">bool</span> doActivate)
<a name="l00750"></a>00750 {
<a name="l00751"></a>00751 
<a name="l00752"></a>00752 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l00753"></a>00753 <span class="preprocessor"></span>    fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::NETRootInfo: using Client constructor\n&quot;</span>);
<a name="l00754"></a>00754 <span class="preprocessor">#endif</span>
<a name="l00755"></a>00755 <span class="preprocessor"></span>
<a name="l00756"></a>00756     p = <span class="keyword">new</span> NETRootInfoPrivate;
<a name="l00757"></a>00757     p-&gt;ref = 1;
<a name="l00758"></a>00758 
<a name="l00759"></a>00759     p-&gt;name = 0;
<a name="l00760"></a>00760 
<a name="l00761"></a>00761     p-&gt;display = display;
<a name="l00762"></a>00762 
<a name="l00763"></a>00763     <span class="keywordflow">if</span> (screen != -1) {
<a name="l00764"></a>00764     p-&gt;screen = screen;
<a name="l00765"></a>00765     } <span class="keywordflow">else</span> {
<a name="l00766"></a>00766     p-&gt;screen = DefaultScreen(p-&gt;display);
<a name="l00767"></a>00767     }
<a name="l00768"></a>00768 
<a name="l00769"></a>00769     p-&gt;root = RootWindow(p-&gt;display, p-&gt;screen);
<a name="l00770"></a>00770     p-&gt;rootSize.width = WidthOfScreen(ScreenOfDisplay(p-&gt;display, p-&gt;screen));
<a name="l00771"></a>00771     p-&gt;rootSize.height = HeightOfScreen(ScreenOfDisplay(p-&gt;display, p-&gt;screen));
<a name="l00772"></a>00772 
<a name="l00773"></a>00773     p-&gt;supportwindow = None;
<a name="l00774"></a>00774     p-&gt;number_of_desktops = p-&gt;current_desktop = 0;
<a name="l00775"></a>00775     p-&gt;active = None;
<a name="l00776"></a>00776     p-&gt;clients = p-&gt;stacking = p-&gt;virtual_roots = (Window *) 0;
<a name="l00777"></a>00777     p-&gt;clients_count = p-&gt;stacking_count = p-&gt;virtual_roots_count = 0;
<a name="l00778"></a>00778     p-&gt;kde_system_tray_windows = 0;
<a name="l00779"></a>00779     p-&gt;kde_system_tray_windows_count = 0;
<a name="l00780"></a>00780     p-&gt;showing_desktop = <span class="keyword">false</span>;
<a name="l00781"></a>00781     p-&gt;desktop_layout_orientation = OrientationHorizontal;
<a name="l00782"></a>00782     p-&gt;desktop_layout_corner = DesktopLayoutCornerTopLeft;
<a name="l00783"></a>00783     p-&gt;desktop_layout_columns = p-&gt;desktop_layout_rows = 0;
<a name="l00784"></a>00784     setDefaultProperties();
<a name="l00785"></a>00785     p-&gt;client_properties[ PROTOCOLS ] = properties;
<a name="l00786"></a>00786     <span class="keywordflow">for</span>( <span class="keywordtype">int</span> i = 0; i &lt; PROPERTIES_SIZE; ++i )
<a name="l00787"></a>00787         p-&gt;properties[ i ] = 0;
<a name="l00788"></a>00788 
<a name="l00789"></a>00789     role = Client;
<a name="l00790"></a>00790 
<a name="l00791"></a>00791     if (! netwm_atoms_created) create_atoms(p-&gt;display);
<a name="l00792"></a>00792 
<a name="l00793"></a>00793     <span class="keywordflow">if</span> (doActivate) activate();
<a name="l00794"></a>00794 }
<a name="l00795"></a>00795 
<a name="l00796"></a>00796 
<a name="l00797"></a>00797 NETRootInfo2::NETRootInfo2(Display *display, Window supportWindow, <span class="keyword">const</span> <span class="keywordtype">char</span> *wmName,
<a name="l00798"></a>00798              <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> properties[], <span class="keywordtype">int</span> properties_size,
<a name="l00799"></a>00799                          <span class="keywordtype">int</span> screen, <span class="keywordtype">bool</span> doActivate)
<a name="l00800"></a>00800     : NETRootInfo( display, supportWindow, wmName, properties, properties_size,
<a name="l00801"></a>00801     screen, doActivate )
<a name="l00802"></a>00802 {
<a name="l00803"></a>00803 }
<a name="l00804"></a>00804 
<a name="l00805"></a>00805 NETRootInfo2::NETRootInfo2(Display *display, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> properties[], <span class="keywordtype">int</span> properties_size,
<a name="l00806"></a>00806                 <span class="keywordtype">int</span> screen, <span class="keywordtype">bool</span> doActivate)
<a name="l00807"></a>00807     : NETRootInfo( display, properties, properties_size, screen, doActivate )
<a name="l00808"></a>00808 {
<a name="l00809"></a>00809 }
<a name="l00810"></a>00810 
<a name="l00811"></a>00811 NETRootInfo3::NETRootInfo3(Display *display, Window supportWindow, <span class="keyword">const</span> <span class="keywordtype">char</span> *wmName,
<a name="l00812"></a>00812              <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> properties[], <span class="keywordtype">int</span> properties_size,
<a name="l00813"></a>00813                          <span class="keywordtype">int</span> screen, <span class="keywordtype">bool</span> doActivate)
<a name="l00814"></a>00814     : NETRootInfo2( display, supportWindow, wmName, properties, properties_size,
<a name="l00815"></a>00815     screen, doActivate )
<a name="l00816"></a>00816 {
<a name="l00817"></a>00817 }
<a name="l00818"></a>00818 
<a name="l00819"></a>00819 NETRootInfo3::NETRootInfo3(Display *display, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> properties[], <span class="keywordtype">int</span> properties_size,
<a name="l00820"></a>00820                 <span class="keywordtype">int</span> screen, <span class="keywordtype">bool</span> doActivate)
<a name="l00821"></a>00821     : NETRootInfo2( display, properties, properties_size, screen, doActivate )
<a name="l00822"></a>00822 {
<a name="l00823"></a>00823 }
<a name="l00824"></a>00824 
<a name="l00825"></a>00825 NETRootInfo4::NETRootInfo4(Display *display, Window supportWindow, <span class="keyword">const</span> <span class="keywordtype">char</span> *wmName,
<a name="l00826"></a>00826              <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> properties[], <span class="keywordtype">int</span> properties_size,
<a name="l00827"></a>00827                          <span class="keywordtype">int</span> screen, <span class="keywordtype">bool</span> doActivate)
<a name="l00828"></a>00828     : NETRootInfo3( display, supportWindow, wmName, properties, properties_size,
<a name="l00829"></a>00829     screen, doActivate )
<a name="l00830"></a>00830 {
<a name="l00831"></a>00831 }
<a name="l00832"></a>00832 
<a name="l00833"></a>00833 NETRootInfo4::NETRootInfo4(Display *display, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> properties[], <span class="keywordtype">int</span> properties_size,
<a name="l00834"></a>00834                 <span class="keywordtype">int</span> screen, <span class="keywordtype">bool</span> doActivate)
<a name="l00835"></a>00835     : NETRootInfo3( display, properties, properties_size, screen, doActivate )
<a name="l00836"></a>00836 {
<a name="l00837"></a>00837 }
<a name="l00838"></a>00838 
<a name="l00839"></a>00839 <span class="comment">// Copy an existing NETRootInfo object.</span>
<a name="l00840"></a>00840 
<a name="l00841"></a>00841 NETRootInfo::NETRootInfo(<span class="keyword">const</span> NETRootInfo &amp;rootinfo) {
<a name="l00842"></a>00842 
<a name="l00843"></a>00843 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l00844"></a>00844 <span class="preprocessor"></span>    fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::NETRootInfo: using copy constructor\n&quot;</span>);
<a name="l00845"></a>00845 <span class="preprocessor">#endif</span>
<a name="l00846"></a>00846 <span class="preprocessor"></span>
<a name="l00847"></a>00847     p = rootinfo.p;
<a name="l00848"></a>00848     role = rootinfo.role;
<a name="l00849"></a>00849 
<a name="l00850"></a>00850     p-&gt;ref++;
<a name="l00851"></a>00851 }
<a name="l00852"></a>00852 
<a name="l00853"></a>00853 
<a name="l00854"></a>00854 <span class="comment">// Be gone with our NETRootInfo.</span>
<a name="l00855"></a>00855 
<a name="l00856"></a>00856 NETRootInfo::~NETRootInfo() {
<a name="l00857"></a>00857     refdec_nri(p);
<a name="l00858"></a>00858 
<a name="l00859"></a>00859     <span class="keywordflow">if</span> (! p-&gt;ref) <span class="keyword">delete</span> p;
<a name="l00860"></a>00860 }
<a name="l00861"></a>00861 
<a name="l00862"></a>00862 
<a name="l00863"></a>00863 <span class="keywordtype">void</span> NETRootInfo::setDefaultProperties()
<a name="l00864"></a>00864 {
<a name="l00865"></a>00865     p-&gt;properties[ PROTOCOLS ] = Supported | SupportingWMCheck;
<a name="l00866"></a>00866     p-&gt;properties[ WINDOW_TYPES ] = NormalMask | DesktopMask | DockMask
<a name="l00867"></a>00867         | ToolbarMask | MenuMask | DialogMask;
<a name="l00868"></a>00868     p-&gt;properties[ STATES ] = Modal | Sticky | MaxVert | MaxHoriz | Shaded
<a name="l00869"></a>00869         | SkipTaskbar | StaysOnTop;
<a name="l00870"></a>00870     p-&gt;properties[ PROTOCOLS2 ] = 0;
<a name="l00871"></a>00871     p-&gt;properties[ ACTIONS ] = 0;
<a name="l00872"></a>00872     p-&gt;client_properties[ PROTOCOLS ] = 0;
<a name="l00873"></a>00873     p-&gt;client_properties[ WINDOW_TYPES ] = 0; <span class="comment">// these two actually don&#39;t</span>
<a name="l00874"></a>00874     p-&gt;client_properties[ STATES ] = 0;       <span class="comment">// make sense in client_properties</span>
<a name="l00875"></a>00875     p-&gt;client_properties[ PROTOCOLS2 ] = 0;
<a name="l00876"></a>00876     p-&gt;client_properties[ ACTIONS ] = 0;
<a name="l00877"></a>00877 }
<a name="l00878"></a>00878 
<a name="l00879"></a>00879 <span class="keywordtype">void</span> NETRootInfo::activate() {
<a name="l00880"></a>00880     <span class="keywordflow">if</span> (role == WindowManager) {
<a name="l00881"></a>00881 
<a name="l00882"></a>00882 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l00883"></a>00883 <span class="preprocessor"></span>    fprintf(stderr,
<a name="l00884"></a>00884         <span class="stringliteral">&quot;NETRootInfo::activate: setting supported properties on root\n&quot;</span>);
<a name="l00885"></a>00885 <span class="preprocessor">#endif</span>
<a name="l00886"></a>00886 <span class="preprocessor"></span>
<a name="l00887"></a>00887     setSupported();
<a name="l00888"></a>00888     update(p-&gt;client_properties);
<a name="l00889"></a>00889     } <span class="keywordflow">else</span> {
<a name="l00890"></a>00890 
<a name="l00891"></a>00891 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l00892"></a>00892 <span class="preprocessor"></span>    fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::activate: updating client information\n&quot;</span>);
<a name="l00893"></a>00893 <span class="preprocessor">#endif</span>
<a name="l00894"></a>00894 <span class="preprocessor"></span>
<a name="l00895"></a>00895     update(p-&gt;client_properties);
<a name="l00896"></a>00896     }
<a name="l00897"></a>00897 }
<a name="l00898"></a>00898 
<a name="l00899"></a>00899 
<a name="l00900"></a>00900 <span class="keywordtype">void</span> NETRootInfo::setClientList(Window *windows, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count) {
<a name="l00901"></a>00901     <span class="keywordflow">if</span> (role != WindowManager) <span class="keywordflow">return</span>;
<a name="l00902"></a>00902 
<a name="l00903"></a>00903     p-&gt;clients_count = count;
<a name="l00904"></a>00904 
<a name="l00905"></a>00905     <span class="keyword">delete</span> [] p-&gt;clients;
<a name="l00906"></a>00906     p-&gt;clients = nwindup(windows, count);
<a name="l00907"></a>00907 
<a name="l00908"></a>00908 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l00909"></a>00909 <span class="preprocessor"></span>    fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::setClientList: setting list with %ld windows\n&quot;</span>,
<a name="l00910"></a>00910         p-&gt;clients_count);
<a name="l00911"></a>00911 <span class="preprocessor">#endif</span>
<a name="l00912"></a>00912 <span class="preprocessor"></span>
<a name="l00913"></a>00913     XChangeProperty(p-&gt;display, p-&gt;root, net_client_list, XA_WINDOW, 32,
<a name="l00914"></a>00914             PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *)p-&gt;clients,
<a name="l00915"></a>00915             p-&gt;clients_count);
<a name="l00916"></a>00916 }
<a name="l00917"></a>00917 
<a name="l00918"></a>00918 
<a name="l00919"></a>00919 <span class="keywordtype">void</span> NETRootInfo::setClientListStacking(Window *windows, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count) {
<a name="l00920"></a>00920     <span class="keywordflow">if</span> (role != WindowManager) <span class="keywordflow">return</span>;
<a name="l00921"></a>00921 
<a name="l00922"></a>00922     p-&gt;stacking_count = count;
<a name="l00923"></a>00923     <span class="keyword">delete</span> [] p-&gt;stacking;
<a name="l00924"></a>00924     p-&gt;stacking = nwindup(windows, count);
<a name="l00925"></a>00925 
<a name="l00926"></a>00926 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l00927"></a>00927 <span class="preprocessor"></span>    fprintf(stderr,
<a name="l00928"></a>00928         <span class="stringliteral">&quot;NETRootInfo::setClientListStacking: setting list with %ld windows\n&quot;</span>,
<a name="l00929"></a>00929         p-&gt;clients_count);
<a name="l00930"></a>00930 <span class="preprocessor">#endif</span>
<a name="l00931"></a>00931 <span class="preprocessor"></span>
<a name="l00932"></a>00932     XChangeProperty(p-&gt;display, p-&gt;root, net_client_list_stacking, XA_WINDOW, 32,
<a name="l00933"></a>00933             PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) p-&gt;stacking,
<a name="l00934"></a>00934             p-&gt;stacking_count);
<a name="l00935"></a>00935 }
<a name="l00936"></a>00936 
<a name="l00937"></a>00937 
<a name="l00938"></a>00938 <span class="keywordtype">void</span> NETRootInfo::setKDESystemTrayWindows(Window *windows, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count) {
<a name="l00939"></a>00939     <span class="keywordflow">if</span> (role != WindowManager) <span class="keywordflow">return</span>;
<a name="l00940"></a>00940 
<a name="l00941"></a>00941     p-&gt;kde_system_tray_windows_count = count;
<a name="l00942"></a>00942     <span class="keyword">delete</span> [] p-&gt;kde_system_tray_windows;
<a name="l00943"></a>00943     p-&gt;kde_system_tray_windows = nwindup(windows, count);
<a name="l00944"></a>00944 
<a name="l00945"></a>00945 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l00946"></a>00946 <span class="preprocessor"></span>    fprintf(stderr,
<a name="l00947"></a>00947         <span class="stringliteral">&quot;NETRootInfo::setKDESystemTrayWindows: setting list with %ld windows\n&quot;</span>,
<a name="l00948"></a>00948         p-&gt;kde_system_tray_windows_count);
<a name="l00949"></a>00949 <span class="preprocessor">#endif</span>
<a name="l00950"></a>00950 <span class="preprocessor"></span>
<a name="l00951"></a>00951     XChangeProperty(p-&gt;display, p-&gt;root, kde_net_system_tray_windows, XA_WINDOW, 32,
<a name="l00952"></a>00952             PropModeReplace,
<a name="l00953"></a>00953             (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) p-&gt;kde_system_tray_windows,
<a name="l00954"></a>00954             p-&gt;kde_system_tray_windows_count);
<a name="l00955"></a>00955 }
<a name="l00956"></a>00956 
<a name="l00957"></a>00957 
<a name="l00958"></a>00958 <span class="keywordtype">void</span> NETRootInfo::setNumberOfDesktops(<span class="keywordtype">int</span> numberOfDesktops) {
<a name="l00959"></a>00959 
<a name="l00960"></a>00960 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l00961"></a>00961 <span class="preprocessor"></span>    fprintf(stderr,
<a name="l00962"></a>00962         <span class="stringliteral">&quot;NETRootInfo::setNumberOfDesktops: setting desktop count to %d (%s)\n&quot;</span>,
<a name="l00963"></a>00963         numberOfDesktops, (role == WindowManager) ? <span class="stringliteral">&quot;WM&quot;</span> : <span class="stringliteral">&quot;Client&quot;</span>);
<a name="l00964"></a>00964 <span class="preprocessor">#endif</span>
<a name="l00965"></a>00965 <span class="preprocessor"></span>
<a name="l00966"></a>00966     <span class="keywordflow">if</span> (role == WindowManager) {
<a name="l00967"></a>00967     p-&gt;number_of_desktops = numberOfDesktops;
<a name="l00968"></a>00968     <span class="keywordtype">long</span> d = numberOfDesktops;
<a name="l00969"></a>00969     XChangeProperty(p-&gt;display, p-&gt;root, net_number_of_desktops, XA_CARDINAL, 32,
<a name="l00970"></a>00970             PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) &amp;d, 1);
<a name="l00971"></a>00971     } <span class="keywordflow">else</span> {
<a name="l00972"></a>00972     XEvent e;
<a name="l00973"></a>00973 
<a name="l00974"></a>00974     e.xclient.type = ClientMessage;
<a name="l00975"></a>00975     e.xclient.message_type = net_number_of_desktops;
<a name="l00976"></a>00976     e.xclient.display = p-&gt;display;
<a name="l00977"></a>00977     e.xclient.window = p-&gt;root;
<a name="l00978"></a>00978     e.xclient.format = 32;
<a name="l00979"></a>00979     e.xclient.data.l[0] = numberOfDesktops;
<a name="l00980"></a>00980     e.xclient.data.l[1] = 0l;
<a name="l00981"></a>00981     e.xclient.data.l[2] = 0l;
<a name="l00982"></a>00982     e.xclient.data.l[3] = 0l;
<a name="l00983"></a>00983     e.xclient.data.l[4] = 0l;
<a name="l00984"></a>00984 
<a name="l00985"></a>00985     XSendEvent(p-&gt;display, p-&gt;root, False, netwm_sendevent_mask, &amp;e);
<a name="l00986"></a>00986     }
<a name="l00987"></a>00987 }
<a name="l00988"></a>00988 
<a name="l00989"></a>00989 
<a name="l00990"></a>00990 <span class="keywordtype">void</span> NETRootInfo::setCurrentDesktop(<span class="keywordtype">int</span> desktop) {
<a name="l00991"></a>00991 
<a name="l00992"></a>00992 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l00993"></a>00993 <span class="preprocessor"></span>    fprintf(stderr,
<a name="l00994"></a>00994         <span class="stringliteral">&quot;NETRootInfo::setCurrentDesktop: setting current desktop = %d (%s)\n&quot;</span>,
<a name="l00995"></a>00995         desktop, (role == WindowManager) ? <span class="stringliteral">&quot;WM&quot;</span> : <span class="stringliteral">&quot;Client&quot;</span>);
<a name="l00996"></a>00996 <span class="preprocessor">#endif</span>
<a name="l00997"></a>00997 <span class="preprocessor"></span>
<a name="l00998"></a>00998     <span class="keywordflow">if</span> (role == WindowManager) {
<a name="l00999"></a>00999     p-&gt;current_desktop = desktop;
<a name="l01000"></a>01000     <span class="keywordtype">long</span> d = p-&gt;current_desktop - 1;
<a name="l01001"></a>01001     XChangeProperty(p-&gt;display, p-&gt;root, net_current_desktop, XA_CARDINAL, 32,
<a name="l01002"></a>01002             PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) &amp;d, 1);
<a name="l01003"></a>01003     } <span class="keywordflow">else</span> {
<a name="l01004"></a>01004     XEvent e;
<a name="l01005"></a>01005 
<a name="l01006"></a>01006     e.xclient.type = ClientMessage;
<a name="l01007"></a>01007     e.xclient.message_type = net_current_desktop;
<a name="l01008"></a>01008     e.xclient.display = p-&gt;display;
<a name="l01009"></a>01009     e.xclient.window = p-&gt;root;
<a name="l01010"></a>01010     e.xclient.format = 32;
<a name="l01011"></a>01011     e.xclient.data.l[0] = desktop - 1;
<a name="l01012"></a>01012     e.xclient.data.l[1] = 0l;
<a name="l01013"></a>01013     e.xclient.data.l[2] = 0l;
<a name="l01014"></a>01014     e.xclient.data.l[3] = 0l;
<a name="l01015"></a>01015     e.xclient.data.l[4] = 0l;
<a name="l01016"></a>01016 
<a name="l01017"></a>01017     XSendEvent(p-&gt;display, p-&gt;root, False, netwm_sendevent_mask, &amp;e);
<a name="l01018"></a>01018     }
<a name="l01019"></a>01019 }
<a name="l01020"></a>01020 
<a name="l01021"></a>01021 
<a name="l01022"></a>01022 <span class="keywordtype">void</span> NETRootInfo::setDesktopName(<span class="keywordtype">int</span> desktop, <span class="keyword">const</span> <span class="keywordtype">char</span> *desktopName) {
<a name="l01023"></a>01023     <span class="comment">// allow setting desktop names even for non-existant desktops, see the spec, sect.3.7.</span>
<a name="l01024"></a>01024     <span class="keywordflow">if</span> (desktop &lt; 1) <span class="keywordflow">return</span>;
<a name="l01025"></a>01025 
<a name="l01026"></a>01026     <span class="keyword">delete</span> [] p-&gt;desktop_names[desktop - 1];
<a name="l01027"></a>01027     p-&gt;desktop_names[desktop - 1] = nstrdup(desktopName);
<a name="l01028"></a>01028 
<a name="l01029"></a>01029     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i, proplen,
<a name="l01030"></a>01030     num = ((p-&gt;number_of_desktops &gt; p-&gt;desktop_names.size()) ?
<a name="l01031"></a>01031            p-&gt;number_of_desktops : p-&gt;desktop_names.size());
<a name="l01032"></a>01032     <span class="keywordflow">for</span> (i = 0, proplen = 0; i &lt; num; i++)
<a name="l01033"></a>01033     proplen += (p-&gt;desktop_names[i] != 0 ? strlen(p-&gt;desktop_names[i])+1 : 1 );
<a name="l01034"></a>01034 
<a name="l01035"></a>01035     <span class="keywordtype">char</span> *prop = <span class="keyword">new</span> <span class="keywordtype">char</span>[proplen], *propp = prop;
<a name="l01036"></a>01036 
<a name="l01037"></a>01037     <span class="keywordflow">for</span> (i = 0; i &lt; num; i++)
<a name="l01038"></a>01038     <span class="keywordflow">if</span> (p-&gt;desktop_names[i]) {
<a name="l01039"></a>01039         strcpy(propp, p-&gt;desktop_names[i]);
<a name="l01040"></a>01040         propp += strlen(p-&gt;desktop_names[i]) + 1;
<a name="l01041"></a>01041     } <span class="keywordflow">else</span>
<a name="l01042"></a>01042         *propp++ = <span class="charliteral">&#39;\0&#39;</span>;
<a name="l01043"></a>01043 
<a name="l01044"></a>01044 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l01045"></a>01045 <span class="preprocessor"></span>    fprintf(stderr,
<a name="l01046"></a>01046         <span class="stringliteral">&quot;NETRootInfo::setDesktopName(%d, &#39;%s&#39;)\n&quot;</span>
<a name="l01047"></a>01047         <span class="stringliteral">&quot;NETRootInfo::setDesktopName: total property length = %d&quot;</span>,
<a name="l01048"></a>01048         desktop, desktopName, proplen);
<a name="l01049"></a>01049 <span class="preprocessor">#endif</span>
<a name="l01050"></a>01050 <span class="preprocessor"></span>
<a name="l01051"></a>01051     XChangeProperty(p-&gt;display, p-&gt;root, net_desktop_names, UTF8_STRING, 8,
<a name="l01052"></a>01052             PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) prop, proplen);
<a name="l01053"></a>01053 
<a name="l01054"></a>01054     <span class="keyword">delete</span> [] prop;
<a name="l01055"></a>01055 }
<a name="l01056"></a>01056 
<a name="l01057"></a>01057 
<a name="l01058"></a>01058 <span class="keywordtype">void</span> NETRootInfo::setDesktopGeometry(<span class="keywordtype">int</span> , <span class="keyword">const</span> <a class="code" href="structNETSize.html" title="Simple size class for NET classes.">NETSize</a> &amp;geometry) {
<a name="l01059"></a>01059 
<a name="l01060"></a>01060 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l01061"></a>01061 <span class="preprocessor"></span>    fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::setDesktopGeometry( -- , { %d, %d }) (%s)\n&quot;</span>,
<a name="l01062"></a>01062         geometry.<a class="code" href="structNETSize.html#af2e6a5fcac88037fa745273e85c5e219" title="Width.">width</a>, geometry.<a class="code" href="structNETSize.html#a0a6def5683983f7f3478192248ef2f8e" title="Height.">height</a>, (role == WindowManager) ? <span class="stringliteral">&quot;WM&quot;</span> : <span class="stringliteral">&quot;Client&quot;</span>);
<a name="l01063"></a>01063 <span class="preprocessor">#endif</span>
<a name="l01064"></a>01064 <span class="preprocessor"></span>
<a name="l01065"></a>01065     <span class="keywordflow">if</span> (role == WindowManager) {
<a name="l01066"></a>01066     p-&gt;geometry = geometry;
<a name="l01067"></a>01067 
<a name="l01068"></a>01068     <span class="keywordtype">long</span> data[2];
<a name="l01069"></a>01069     data[0] = p-&gt;geometry.<a class="code" href="structNETSize.html#af2e6a5fcac88037fa745273e85c5e219" title="Width.">width</a>;
<a name="l01070"></a>01070     data[1] = p-&gt;geometry.height;
<a name="l01071"></a>01071 
<a name="l01072"></a>01072     XChangeProperty(p-&gt;display, p-&gt;root, net_desktop_geometry, XA_CARDINAL, 32,
<a name="l01073"></a>01073             PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) data, 2);
<a name="l01074"></a>01074     } <span class="keywordflow">else</span> {
<a name="l01075"></a>01075     XEvent e;
<a name="l01076"></a>01076 
<a name="l01077"></a>01077     e.xclient.type = ClientMessage;
<a name="l01078"></a>01078     e.xclient.message_type = net_desktop_geometry;
<a name="l01079"></a>01079     e.xclient.display = p-&gt;display;
<a name="l01080"></a>01080     e.xclient.window = p-&gt;root;
<a name="l01081"></a>01081     e.xclient.format = 32;
<a name="l01082"></a>01082     e.xclient.data.l[0] = geometry.<a class="code" href="structNETSize.html#af2e6a5fcac88037fa745273e85c5e219" title="Width.">width</a>;
<a name="l01083"></a>01083     e.xclient.data.l[1] = geometry.<a class="code" href="structNETSize.html#a0a6def5683983f7f3478192248ef2f8e" title="Height.">height</a>;
<a name="l01084"></a>01084     e.xclient.data.l[2] = 0l;
<a name="l01085"></a>01085     e.xclient.data.l[3] = 0l;
<a name="l01086"></a>01086     e.xclient.data.l[4] = 0l;
<a name="l01087"></a>01087 
<a name="l01088"></a>01088     XSendEvent(p-&gt;display, p-&gt;root, False, netwm_sendevent_mask, &amp;e);
<a name="l01089"></a>01089     }
<a name="l01090"></a>01090 }
<a name="l01091"></a>01091 
<a name="l01092"></a>01092 
<a name="l01093"></a>01093 <span class="keywordtype">void</span> NETRootInfo::setDesktopViewport(<span class="keywordtype">int</span> desktop, <span class="keyword">const</span> <a class="code" href="structNETPoint.html" title="Simple point class for NET classes.">NETPoint</a> &amp;viewport) {
<a name="l01094"></a>01094 
<a name="l01095"></a>01095 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l01096"></a>01096 <span class="preprocessor"></span>    fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::setDesktopViewport(%d, { %d, %d }) (%s)\n&quot;</span>,
<a name="l01097"></a>01097         desktop, viewport.<a class="code" href="structNETPoint.html#a662b6d948b949dabcaf2e955a078e63f" title="x coordinate.">x</a>, viewport.<a class="code" href="structNETPoint.html#ac64b3831f6fd7f1874f7e344beb117bd" title="y coordinate">y</a>, (role == WindowManager) ? <span class="stringliteral">&quot;WM&quot;</span> : <span class="stringliteral">&quot;Client&quot;</span>);
<a name="l01098"></a>01098 <span class="preprocessor">#endif</span>
<a name="l01099"></a>01099 <span class="preprocessor"></span>
<a name="l01100"></a>01100     <span class="keywordflow">if</span> (desktop &lt; 1) <span class="keywordflow">return</span>;
<a name="l01101"></a>01101 
<a name="l01102"></a>01102     <span class="keywordflow">if</span> (role == WindowManager) {
<a name="l01103"></a>01103     p-&gt;viewport[desktop - 1] = viewport;
<a name="l01104"></a>01104 
<a name="l01105"></a>01105     <span class="keywordtype">int</span> d, i, l;
<a name="l01106"></a>01106     l = p-&gt;number_of_desktops * 2;
<a name="l01107"></a>01107     <span class="keywordtype">long</span> *data = <span class="keyword">new</span> <span class="keywordtype">long</span>[l];
<a name="l01108"></a>01108     <span class="keywordflow">for</span> (d = 0, i = 0; d &lt; p-&gt;number_of_desktops; d++) {
<a name="l01109"></a>01109         data[i++] = p-&gt;viewport[d].<a class="code" href="structNETPoint.html#a662b6d948b949dabcaf2e955a078e63f" title="x coordinate.">x</a>;
<a name="l01110"></a>01110         data[i++] = p-&gt;viewport[d].y;
<a name="l01111"></a>01111     }
<a name="l01112"></a>01112 
<a name="l01113"></a>01113     XChangeProperty(p-&gt;display, p-&gt;root, net_desktop_viewport, XA_CARDINAL, 32,
<a name="l01114"></a>01114             PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) data, l);
<a name="l01115"></a>01115 
<a name="l01116"></a>01116     <span class="keyword">delete</span> [] data;
<a name="l01117"></a>01117     } <span class="keywordflow">else</span> {
<a name="l01118"></a>01118     XEvent e;
<a name="l01119"></a>01119 
<a name="l01120"></a>01120     e.xclient.type = ClientMessage;
<a name="l01121"></a>01121     e.xclient.message_type = net_desktop_viewport;
<a name="l01122"></a>01122     e.xclient.display = p-&gt;display;
<a name="l01123"></a>01123     e.xclient.window = p-&gt;root;
<a name="l01124"></a>01124     e.xclient.format = 32;
<a name="l01125"></a>01125     e.xclient.data.l[0] = viewport.<a class="code" href="structNETPoint.html#a662b6d948b949dabcaf2e955a078e63f" title="x coordinate.">x</a>;
<a name="l01126"></a>01126     e.xclient.data.l[1] = viewport.<a class="code" href="structNETPoint.html#ac64b3831f6fd7f1874f7e344beb117bd" title="y coordinate">y</a>;
<a name="l01127"></a>01127     e.xclient.data.l[2] = 0l;
<a name="l01128"></a>01128     e.xclient.data.l[3] = 0l;
<a name="l01129"></a>01129     e.xclient.data.l[4] = 0l;
<a name="l01130"></a>01130 
<a name="l01131"></a>01131     XSendEvent(p-&gt;display, p-&gt;root, False, netwm_sendevent_mask, &amp;e);
<a name="l01132"></a>01132     }
<a name="l01133"></a>01133 }
<a name="l01134"></a>01134 
<a name="l01135"></a>01135 
<a name="l01136"></a>01136 <span class="keywordtype">void</span> NETRootInfo::setSupported() {
<a name="l01137"></a>01137     <span class="keywordflow">if</span> (role != WindowManager) {
<a name="l01138"></a>01138 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l01139"></a>01139 <span class="preprocessor"></span>    fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::setSupported - role != WindowManager\n&quot;</span>);
<a name="l01140"></a>01140 <span class="preprocessor">#endif</span>
<a name="l01141"></a>01141 <span class="preprocessor"></span>
<a name="l01142"></a>01142     <span class="keywordflow">return</span>;
<a name="l01143"></a>01143     }
<a name="l01144"></a>01144 
<a name="l01145"></a>01145     Atom atoms[netAtomCount];
<a name="l01146"></a>01146     <span class="keywordtype">int</span> pnum = 2;
<a name="l01147"></a>01147 
<a name="l01148"></a>01148     <span class="comment">// Root window properties/messages</span>
<a name="l01149"></a>01149     atoms[0] = net_supported;
<a name="l01150"></a>01150     atoms[1] = net_supporting_wm_check;
<a name="l01151"></a>01151 
<a name="l01152"></a>01152     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS ] &amp; ClientList)
<a name="l01153"></a>01153     atoms[pnum++] = net_client_list;
<a name="l01154"></a>01154 
<a name="l01155"></a>01155     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS ] &amp; ClientListStacking)
<a name="l01156"></a>01156     atoms[pnum++] = net_client_list_stacking;
<a name="l01157"></a>01157 
<a name="l01158"></a>01158     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS ] &amp; NumberOfDesktops)
<a name="l01159"></a>01159     atoms[pnum++] = net_number_of_desktops;
<a name="l01160"></a>01160 
<a name="l01161"></a>01161     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS ] &amp; DesktopGeometry)
<a name="l01162"></a>01162     atoms[pnum++] = net_desktop_geometry;
<a name="l01163"></a>01163 
<a name="l01164"></a>01164     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS ] &amp; DesktopViewport)
<a name="l01165"></a>01165     atoms[pnum++] = net_desktop_viewport;
<a name="l01166"></a>01166 
<a name="l01167"></a>01167     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS ] &amp; CurrentDesktop)
<a name="l01168"></a>01168     atoms[pnum++] = net_current_desktop;
<a name="l01169"></a>01169 
<a name="l01170"></a>01170     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS ] &amp; DesktopNames)
<a name="l01171"></a>01171     atoms[pnum++] = net_desktop_names;
<a name="l01172"></a>01172 
<a name="l01173"></a>01173     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS ] &amp; ActiveWindow)
<a name="l01174"></a>01174     atoms[pnum++] = net_active_window;
<a name="l01175"></a>01175 
<a name="l01176"></a>01176     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS ] &amp; WorkArea)
<a name="l01177"></a>01177     atoms[pnum++] = net_workarea;
<a name="l01178"></a>01178 
<a name="l01179"></a>01179     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS ] &amp; VirtualRoots)
<a name="l01180"></a>01180     atoms[pnum++] = net_virtual_roots;
<a name="l01181"></a>01181 
<a name="l01182"></a>01182     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS2 ] &amp; WM2DesktopLayout)
<a name="l01183"></a>01183     atoms[pnum++] = net_desktop_layout;
<a name="l01184"></a>01184 
<a name="l01185"></a>01185     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS ] &amp; CloseWindow)
<a name="l01186"></a>01186     atoms[pnum++] = net_close_window;
<a name="l01187"></a>01187 
<a name="l01188"></a>01188     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS2 ] &amp; WM2RestackWindow)
<a name="l01189"></a>01189     atoms[pnum++] = net_restack_window;
<a name="l01190"></a>01190 
<a name="l01191"></a>01191     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS2 ] &amp; WM2ShowingDesktop)
<a name="l01192"></a>01192     atoms[pnum++] = net_showing_desktop;
<a name="l01193"></a>01193 
<a name="l01194"></a>01194     <span class="comment">// Application window properties/messages</span>
<a name="l01195"></a>01195     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS ] &amp; WMMoveResize)
<a name="l01196"></a>01196     atoms[pnum++] = net_wm_moveresize;
<a name="l01197"></a>01197 
<a name="l01198"></a>01198     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS2 ] &amp; WM2MoveResizeWindow)
<a name="l01199"></a>01199     atoms[pnum++] = net_moveresize_window;
<a name="l01200"></a>01200 
<a name="l01201"></a>01201     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS ] &amp; WMName)
<a name="l01202"></a>01202     atoms[pnum++] = net_wm_name;
<a name="l01203"></a>01203 
<a name="l01204"></a>01204     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS ] &amp; WMVisibleName)
<a name="l01205"></a>01205     atoms[pnum++] = net_wm_visible_name;
<a name="l01206"></a>01206 
<a name="l01207"></a>01207     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS ] &amp; WMIconName)
<a name="l01208"></a>01208     atoms[pnum++] = net_wm_icon_name;
<a name="l01209"></a>01209 
<a name="l01210"></a>01210     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS ] &amp; WMVisibleIconName)
<a name="l01211"></a>01211     atoms[pnum++] = net_wm_visible_icon_name;
<a name="l01212"></a>01212 
<a name="l01213"></a>01213     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS ] &amp; WMDesktop)
<a name="l01214"></a>01214     atoms[pnum++] = net_wm_desktop;
<a name="l01215"></a>01215 
<a name="l01216"></a>01216     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS ] &amp; WMWindowType) {
<a name="l01217"></a>01217     atoms[pnum++] = net_wm_window_type;
<a name="l01218"></a>01218 
<a name="l01219"></a>01219     <span class="comment">// Application window types</span>
<a name="l01220"></a>01220         <span class="keywordflow">if</span> (p-&gt;properties[ WINDOW_TYPES ] &amp; NormalMask)
<a name="l01221"></a>01221         atoms[pnum++] = net_wm_window_type_normal;
<a name="l01222"></a>01222         <span class="keywordflow">if</span> (p-&gt;properties[ WINDOW_TYPES ] &amp; DesktopMask)
<a name="l01223"></a>01223         atoms[pnum++] = net_wm_window_type_desktop;
<a name="l01224"></a>01224         <span class="keywordflow">if</span> (p-&gt;properties[ WINDOW_TYPES ] &amp; DockMask)
<a name="l01225"></a>01225             atoms[pnum++] = net_wm_window_type_dock;
<a name="l01226"></a>01226         <span class="keywordflow">if</span> (p-&gt;properties[ WINDOW_TYPES ] &amp; ToolbarMask)
<a name="l01227"></a>01227         atoms[pnum++] = net_wm_window_type_toolbar;
<a name="l01228"></a>01228         <span class="keywordflow">if</span> (p-&gt;properties[ WINDOW_TYPES ] &amp; MenuMask)
<a name="l01229"></a>01229         atoms[pnum++] = net_wm_window_type_menu;
<a name="l01230"></a>01230         <span class="keywordflow">if</span> (p-&gt;properties[ WINDOW_TYPES ] &amp; DialogMask)
<a name="l01231"></a>01231         atoms[pnum++] = net_wm_window_type_dialog;
<a name="l01232"></a>01232         <span class="keywordflow">if</span> (p-&gt;properties[ WINDOW_TYPES ] &amp; UtilityMask)
<a name="l01233"></a>01233         atoms[pnum++] = net_wm_window_type_utility;
<a name="l01234"></a>01234         <span class="keywordflow">if</span> (p-&gt;properties[ WINDOW_TYPES ] &amp; SplashMask)
<a name="l01235"></a>01235         atoms[pnum++] = net_wm_window_type_splash;
<a name="l01236"></a>01236         <span class="keywordflow">if</span> (p-&gt;properties[ WINDOW_TYPES ] &amp; DropdownMenuMask)
<a name="l01237"></a>01237         atoms[pnum++] = net_wm_window_type_dropdown_menu;
<a name="l01238"></a>01238         <span class="keywordflow">if</span> (p-&gt;properties[ WINDOW_TYPES ] &amp; PopupMenuMask)
<a name="l01239"></a>01239         atoms[pnum++] = net_wm_window_type_popup_menu;
<a name="l01240"></a>01240         <span class="keywordflow">if</span> (p-&gt;properties[ WINDOW_TYPES ] &amp; TooltipMask)
<a name="l01241"></a>01241         atoms[pnum++] = net_wm_window_type_tooltip;
<a name="l01242"></a>01242         <span class="keywordflow">if</span> (p-&gt;properties[ WINDOW_TYPES ] &amp; NotificationMask)
<a name="l01243"></a>01243         atoms[pnum++] = net_wm_window_type_notification;
<a name="l01244"></a>01244         <span class="keywordflow">if</span> (p-&gt;properties[ WINDOW_TYPES ] &amp; ComboBoxMask)
<a name="l01245"></a>01245         atoms[pnum++] = net_wm_window_type_combobox;
<a name="l01246"></a>01246         <span class="keywordflow">if</span> (p-&gt;properties[ WINDOW_TYPES ] &amp; DNDIconMask)
<a name="l01247"></a>01247         atoms[pnum++] = net_wm_window_type_dnd;
<a name="l01248"></a>01248     <span class="comment">// KDE extensions</span>
<a name="l01249"></a>01249         <span class="keywordflow">if</span> (p-&gt;properties[ WINDOW_TYPES ] &amp; OverrideMask)
<a name="l01250"></a>01250         atoms[pnum++] = kde_net_wm_window_type_override;
<a name="l01251"></a>01251         <span class="keywordflow">if</span> (p-&gt;properties[ WINDOW_TYPES ] &amp; TopMenuMask)
<a name="l01252"></a>01252         atoms[pnum++] = kde_net_wm_window_type_topmenu;
<a name="l01253"></a>01253     }
<a name="l01254"></a>01254 
<a name="l01255"></a>01255     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS ] &amp; WMState) {
<a name="l01256"></a>01256     atoms[pnum++] = net_wm_state;
<a name="l01257"></a>01257 
<a name="l01258"></a>01258     <span class="comment">// Application window states</span>
<a name="l01259"></a>01259         <span class="keywordflow">if</span> (p-&gt;properties[ STATES ] &amp; Modal)
<a name="l01260"></a>01260             atoms[pnum++] = net_wm_state_modal;
<a name="l01261"></a>01261         <span class="keywordflow">if</span> (p-&gt;properties[ STATES ] &amp; Sticky)
<a name="l01262"></a>01262         atoms[pnum++] = net_wm_state_sticky;
<a name="l01263"></a>01263         <span class="keywordflow">if</span> (p-&gt;properties[ STATES ] &amp; MaxVert)
<a name="l01264"></a>01264         atoms[pnum++] = net_wm_state_max_vert;
<a name="l01265"></a>01265         <span class="keywordflow">if</span> (p-&gt;properties[ STATES ] &amp; MaxHoriz)
<a name="l01266"></a>01266         atoms[pnum++] = net_wm_state_max_horiz;
<a name="l01267"></a>01267         <span class="keywordflow">if</span> (p-&gt;properties[ STATES ] &amp; Shaded)
<a name="l01268"></a>01268         atoms[pnum++] = net_wm_state_shaded;
<a name="l01269"></a>01269         <span class="keywordflow">if</span> (p-&gt;properties[ STATES ] &amp; SkipTaskbar)
<a name="l01270"></a>01270         atoms[pnum++] = net_wm_state_skip_taskbar;
<a name="l01271"></a>01271         <span class="keywordflow">if</span> (p-&gt;properties[ STATES ] &amp; SkipPager)
<a name="l01272"></a>01272         atoms[pnum++] = net_wm_state_skip_pager;
<a name="l01273"></a>01273         <span class="keywordflow">if</span> (p-&gt;properties[ STATES ] &amp; Hidden)
<a name="l01274"></a>01274         atoms[pnum++] = net_wm_state_hidden;
<a name="l01275"></a>01275         <span class="keywordflow">if</span> (p-&gt;properties[ STATES ] &amp; FullScreen)
<a name="l01276"></a>01276         atoms[pnum++] = net_wm_state_fullscreen;
<a name="l01277"></a>01277         <span class="keywordflow">if</span> (p-&gt;properties[ STATES ] &amp; KeepAbove)
<a name="l01278"></a>01278         atoms[pnum++] = net_wm_state_above;
<a name="l01279"></a>01279         <span class="keywordflow">if</span> (p-&gt;properties[ STATES ] &amp; KeepBelow)
<a name="l01280"></a>01280         atoms[pnum++] = net_wm_state_below;
<a name="l01281"></a>01281         <span class="keywordflow">if</span> (p-&gt;properties[ STATES ] &amp; DemandsAttention)
<a name="l01282"></a>01282         atoms[pnum++] = net_wm_state_demands_attention;
<a name="l01283"></a>01283 
<a name="l01284"></a>01284         <span class="keywordflow">if</span> (p-&gt;properties[ STATES ] &amp; StaysOnTop)
<a name="l01285"></a>01285         atoms[pnum++] = net_wm_state_stays_on_top;
<a name="l01286"></a>01286     }
<a name="l01287"></a>01287 
<a name="l01288"></a>01288     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS ] &amp; WMStrut)
<a name="l01289"></a>01289     atoms[pnum++] = net_wm_strut;
<a name="l01290"></a>01290 
<a name="l01291"></a>01291     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS2 ] &amp; WM2ExtendedStrut)
<a name="l01292"></a>01292     atoms[pnum++] = net_wm_extended_strut;
<a name="l01293"></a>01293 
<a name="l01294"></a>01294     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS ] &amp; WMIconGeometry)
<a name="l01295"></a>01295     atoms[pnum++] = net_wm_icon_geometry;
<a name="l01296"></a>01296 
<a name="l01297"></a>01297     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS ] &amp; WMIcon)
<a name="l01298"></a>01298     atoms[pnum++] = net_wm_icon;
<a name="l01299"></a>01299 
<a name="l01300"></a>01300     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS ] &amp; WMPid)
<a name="l01301"></a>01301     atoms[pnum++] = net_wm_pid;
<a name="l01302"></a>01302 
<a name="l01303"></a>01303     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS ] &amp; WMHandledIcons)
<a name="l01304"></a>01304     atoms[pnum++] = net_wm_handled_icons;
<a name="l01305"></a>01305 
<a name="l01306"></a>01306     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS ] &amp; WMPing)
<a name="l01307"></a>01307     atoms[pnum++] = net_wm_ping;
<a name="l01308"></a>01308 
<a name="l01309"></a>01309     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS2 ] &amp; WM2TakeActivity)
<a name="l01310"></a>01310     atoms[pnum++] = net_wm_take_activity;
<a name="l01311"></a>01311 
<a name="l01312"></a>01312     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS2 ] &amp; WM2UserTime)
<a name="l01313"></a>01313     atoms[pnum++] = net_wm_user_time;
<a name="l01314"></a>01314 
<a name="l01315"></a>01315     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS2 ] &amp; WM2StartupId)
<a name="l01316"></a>01316     atoms[pnum++] = net_startup_id;
<a name="l01317"></a>01317 
<a name="l01318"></a>01318     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS2 ] &amp; WM2AllowedActions) {
<a name="l01319"></a>01319         atoms[pnum++] = net_wm_allowed_actions;
<a name="l01320"></a>01320 
<a name="l01321"></a>01321     <span class="comment">// Actions</span>
<a name="l01322"></a>01322         <span class="keywordflow">if</span> (p-&gt;properties[ ACTIONS ] &amp; ActionMove)
<a name="l01323"></a>01323             atoms[pnum++] = net_wm_action_move;
<a name="l01324"></a>01324         <span class="keywordflow">if</span> (p-&gt;properties[ ACTIONS ] &amp; ActionResize)
<a name="l01325"></a>01325             atoms[pnum++] = net_wm_action_resize;
<a name="l01326"></a>01326         <span class="keywordflow">if</span> (p-&gt;properties[ ACTIONS ] &amp; ActionMinimize)
<a name="l01327"></a>01327             atoms[pnum++] = net_wm_action_minimize;
<a name="l01328"></a>01328         <span class="keywordflow">if</span> (p-&gt;properties[ ACTIONS ] &amp; ActionShade)
<a name="l01329"></a>01329             atoms[pnum++] = net_wm_action_shade;
<a name="l01330"></a>01330         <span class="keywordflow">if</span> (p-&gt;properties[ ACTIONS ] &amp; ActionStick)
<a name="l01331"></a>01331             atoms[pnum++] = net_wm_action_stick;
<a name="l01332"></a>01332         <span class="keywordflow">if</span> (p-&gt;properties[ ACTIONS ] &amp; ActionMaxVert)
<a name="l01333"></a>01333             atoms[pnum++] = net_wm_action_max_vert;
<a name="l01334"></a>01334         <span class="keywordflow">if</span> (p-&gt;properties[ ACTIONS ] &amp; ActionMaxHoriz)
<a name="l01335"></a>01335             atoms[pnum++] = net_wm_action_max_horiz;
<a name="l01336"></a>01336         <span class="keywordflow">if</span> (p-&gt;properties[ ACTIONS ] &amp; ActionFullScreen)
<a name="l01337"></a>01337             atoms[pnum++] = net_wm_action_fullscreen;
<a name="l01338"></a>01338         <span class="keywordflow">if</span> (p-&gt;properties[ ACTIONS ] &amp; ActionChangeDesktop)
<a name="l01339"></a>01339             atoms[pnum++] = net_wm_action_change_desk;
<a name="l01340"></a>01340         <span class="keywordflow">if</span> (p-&gt;properties[ ACTIONS ] &amp; ActionClose)
<a name="l01341"></a>01341             atoms[pnum++] = net_wm_action_close;
<a name="l01342"></a>01342     }
<a name="l01343"></a>01343 
<a name="l01344"></a>01344     <span class="comment">// KDE specific extensions</span>
<a name="l01345"></a>01345     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS ] &amp; KDESystemTrayWindows)
<a name="l01346"></a>01346     atoms[pnum++] = kde_net_system_tray_windows;
<a name="l01347"></a>01347 
<a name="l01348"></a>01348     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS ] &amp; WMKDESystemTrayWinFor)
<a name="l01349"></a>01349     atoms[pnum++] = kde_net_wm_system_tray_window_for;
<a name="l01350"></a>01350 
<a name="l01351"></a>01351     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS ] &amp; WMFrameExtents) {
<a name="l01352"></a>01352     atoms[pnum++] = net_frame_extents;
<a name="l01353"></a>01353     atoms[pnum++] = kde_net_wm_frame_strut;
<a name="l01354"></a>01354     }
<a name="l01355"></a>01355 
<a name="l01356"></a>01356     <span class="keywordflow">if</span> (p-&gt;properties[ PROTOCOLS2 ] &amp; WM2KDETemporaryRules)
<a name="l01357"></a>01357     atoms[pnum++] = kde_net_wm_temporary_rules;
<a name="l01358"></a>01358 
<a name="l01359"></a>01359     XChangeProperty(p-&gt;display, p-&gt;root, net_supported, XA_ATOM, 32,
<a name="l01360"></a>01360             PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) atoms, pnum);
<a name="l01361"></a>01361     XChangeProperty(p-&gt;display, p-&gt;root, net_supporting_wm_check, XA_WINDOW, 32,
<a name="l01362"></a>01362             PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) &amp;(p-&gt;supportwindow), 1);
<a name="l01363"></a>01363 
<a name="l01364"></a>01364 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l01365"></a>01365 <span class="preprocessor"></span>    fprintf(stderr,
<a name="l01366"></a>01366         <span class="stringliteral">&quot;NETRootInfo::setSupported: _NET_SUPPORTING_WM_CHECK = 0x%lx on 0x%lx\n&quot;</span>
<a name="l01367"></a>01367         <span class="stringliteral">&quot;                         : _NET_WM_NAME = &#39;%s&#39; on 0x%lx\n&quot;</span>,
<a name="l01368"></a>01368         p-&gt;supportwindow, p-&gt;supportwindow, p-&gt;name, p-&gt;supportwindow);
<a name="l01369"></a>01369 <span class="preprocessor">#endif</span>
<a name="l01370"></a>01370 <span class="preprocessor"></span>
<a name="l01371"></a>01371     XChangeProperty(p-&gt;display, p-&gt;supportwindow, net_supporting_wm_check,
<a name="l01372"></a>01372             XA_WINDOW, 32, PropModeReplace,
<a name="l01373"></a>01373             (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) &amp;(p-&gt;supportwindow), 1);
<a name="l01374"></a>01374     XChangeProperty(p-&gt;display, p-&gt;supportwindow, net_wm_name, UTF8_STRING, 8,
<a name="l01375"></a>01375             PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) p-&gt;name,
<a name="l01376"></a>01376             strlen(p-&gt;name));
<a name="l01377"></a>01377 }
<a name="l01378"></a>01378 
<a name="l01379"></a>01379 <span class="keywordtype">void</span> NETRootInfo::updateSupportedProperties( Atom atom )
<a name="l01380"></a>01380 {
<a name="l01381"></a>01381     <span class="keywordflow">if</span>( atom == net_supported )
<a name="l01382"></a>01382         p-&gt;properties[ PROTOCOLS ] |= Supported;
<a name="l01383"></a>01383 
<a name="l01384"></a>01384     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_supporting_wm_check )
<a name="l01385"></a>01385         p-&gt;properties[ PROTOCOLS ] |= SupportingWMCheck;
<a name="l01386"></a>01386 
<a name="l01387"></a>01387     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_client_list )
<a name="l01388"></a>01388         p-&gt;properties[ PROTOCOLS ] |= ClientList;
<a name="l01389"></a>01389 
<a name="l01390"></a>01390     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_client_list_stacking )
<a name="l01391"></a>01391         p-&gt;properties[ PROTOCOLS ] |= ClientListStacking;
<a name="l01392"></a>01392 
<a name="l01393"></a>01393     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_number_of_desktops )
<a name="l01394"></a>01394         p-&gt;properties[ PROTOCOLS ] |= NumberOfDesktops;
<a name="l01395"></a>01395 
<a name="l01396"></a>01396     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_desktop_geometry )
<a name="l01397"></a>01397         p-&gt;properties[ PROTOCOLS ] |= DesktopGeometry;
<a name="l01398"></a>01398 
<a name="l01399"></a>01399     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_desktop_viewport )
<a name="l01400"></a>01400         p-&gt;properties[ PROTOCOLS ] |= DesktopViewport;
<a name="l01401"></a>01401 
<a name="l01402"></a>01402     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_current_desktop )
<a name="l01403"></a>01403         p-&gt;properties[ PROTOCOLS ] |= CurrentDesktop;
<a name="l01404"></a>01404 
<a name="l01405"></a>01405     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_desktop_names )
<a name="l01406"></a>01406         p-&gt;properties[ PROTOCOLS ] |= DesktopNames;
<a name="l01407"></a>01407 
<a name="l01408"></a>01408     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_active_window )
<a name="l01409"></a>01409         p-&gt;properties[ PROTOCOLS ] |= ActiveWindow;
<a name="l01410"></a>01410 
<a name="l01411"></a>01411     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_workarea )
<a name="l01412"></a>01412         p-&gt;properties[ PROTOCOLS ] |= WorkArea;
<a name="l01413"></a>01413 
<a name="l01414"></a>01414     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_virtual_roots )
<a name="l01415"></a>01415         p-&gt;properties[ PROTOCOLS ] |= VirtualRoots;
<a name="l01416"></a>01416 
<a name="l01417"></a>01417     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_desktop_layout )
<a name="l01418"></a>01418         p-&gt;properties[ PROTOCOLS2 ] |= WM2DesktopLayout;
<a name="l01419"></a>01419 
<a name="l01420"></a>01420     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_close_window )
<a name="l01421"></a>01421         p-&gt;properties[ PROTOCOLS ] |= CloseWindow;
<a name="l01422"></a>01422 
<a name="l01423"></a>01423     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_restack_window )
<a name="l01424"></a>01424         p-&gt;properties[ PROTOCOLS2 ] |= WM2RestackWindow;
<a name="l01425"></a>01425 
<a name="l01426"></a>01426     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_showing_desktop )
<a name="l01427"></a>01427         p-&gt;properties[ PROTOCOLS2 ] |= WM2ShowingDesktop;
<a name="l01428"></a>01428 
<a name="l01429"></a>01429     <span class="comment">// Application window properties/messages</span>
<a name="l01430"></a>01430     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_moveresize )
<a name="l01431"></a>01431         p-&gt;properties[ PROTOCOLS ] |= WMMoveResize;
<a name="l01432"></a>01432 
<a name="l01433"></a>01433     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_moveresize_window )
<a name="l01434"></a>01434         p-&gt;properties[ PROTOCOLS2 ] |= WM2MoveResizeWindow;
<a name="l01435"></a>01435 
<a name="l01436"></a>01436     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_name )
<a name="l01437"></a>01437         p-&gt;properties[ PROTOCOLS ] |= WMName;
<a name="l01438"></a>01438 
<a name="l01439"></a>01439     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_visible_name )
<a name="l01440"></a>01440         p-&gt;properties[ PROTOCOLS ] |= WMVisibleName;
<a name="l01441"></a>01441 
<a name="l01442"></a>01442     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_icon_name )
<a name="l01443"></a>01443         p-&gt;properties[ PROTOCOLS ] |= WMIconName;
<a name="l01444"></a>01444 
<a name="l01445"></a>01445     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_visible_icon_name )
<a name="l01446"></a>01446         p-&gt;properties[ PROTOCOLS ] |= WMVisibleIconName;
<a name="l01447"></a>01447 
<a name="l01448"></a>01448     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_desktop )
<a name="l01449"></a>01449         p-&gt;properties[ PROTOCOLS ] |= WMDesktop;
<a name="l01450"></a>01450 
<a name="l01451"></a>01451     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_window_type )
<a name="l01452"></a>01452         p-&gt;properties[ PROTOCOLS ] |= WMWindowType;
<a name="l01453"></a>01453 
<a name="l01454"></a>01454     <span class="comment">// Application window types</span>
<a name="l01455"></a>01455     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_window_type_normal )
<a name="l01456"></a>01456         p-&gt;properties[ WINDOW_TYPES ] |= NormalMask;
<a name="l01457"></a>01457     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_window_type_desktop )
<a name="l01458"></a>01458         p-&gt;properties[ WINDOW_TYPES ] |= DesktopMask;
<a name="l01459"></a>01459     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_window_type_dock )
<a name="l01460"></a>01460         p-&gt;properties[ WINDOW_TYPES ] |= DockMask;
<a name="l01461"></a>01461     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_window_type_toolbar )
<a name="l01462"></a>01462         p-&gt;properties[ WINDOW_TYPES ] |= ToolbarMask;
<a name="l01463"></a>01463     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_window_type_menu )
<a name="l01464"></a>01464         p-&gt;properties[ WINDOW_TYPES ] |= MenuMask;
<a name="l01465"></a>01465     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_window_type_dialog )
<a name="l01466"></a>01466         p-&gt;properties[ WINDOW_TYPES ] |= DialogMask;
<a name="l01467"></a>01467     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_window_type_utility )
<a name="l01468"></a>01468         p-&gt;properties[ WINDOW_TYPES ] |= UtilityMask;
<a name="l01469"></a>01469     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_window_type_splash )
<a name="l01470"></a>01470         p-&gt;properties[ WINDOW_TYPES ] |= SplashMask;
<a name="l01471"></a>01471     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_window_type_dropdown_menu )
<a name="l01472"></a>01472         p-&gt;properties[ WINDOW_TYPES ] |= DropdownMenuMask;
<a name="l01473"></a>01473     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_window_type_popup_menu )
<a name="l01474"></a>01474         p-&gt;properties[ WINDOW_TYPES ] |= PopupMenuMask;
<a name="l01475"></a>01475     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_window_type_tooltip )
<a name="l01476"></a>01476         p-&gt;properties[ WINDOW_TYPES ] |= TooltipMask;
<a name="l01477"></a>01477     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_window_type_notification )
<a name="l01478"></a>01478         p-&gt;properties[ WINDOW_TYPES ] |= NotificationMask;
<a name="l01479"></a>01479     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_window_type_combobox )
<a name="l01480"></a>01480         p-&gt;properties[ WINDOW_TYPES ] |= ComboBoxMask;
<a name="l01481"></a>01481     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_window_type_dnd )
<a name="l01482"></a>01482         p-&gt;properties[ WINDOW_TYPES ] |= DNDIconMask;
<a name="l01483"></a>01483     <span class="comment">// KDE extensions</span>
<a name="l01484"></a>01484     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == kde_net_wm_window_type_override )
<a name="l01485"></a>01485         p-&gt;properties[ WINDOW_TYPES ] |= OverrideMask;
<a name="l01486"></a>01486     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == kde_net_wm_window_type_topmenu )
<a name="l01487"></a>01487         p-&gt;properties[ WINDOW_TYPES ] |= TopMenuMask;
<a name="l01488"></a>01488 
<a name="l01489"></a>01489     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_state )
<a name="l01490"></a>01490         p-&gt;properties[ PROTOCOLS ] |= WMState;
<a name="l01491"></a>01491 
<a name="l01492"></a>01492     <span class="comment">// Application window states</span>
<a name="l01493"></a>01493     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_state_modal )
<a name="l01494"></a>01494         p-&gt;properties[ STATES ] |= Modal;
<a name="l01495"></a>01495     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_state_sticky )
<a name="l01496"></a>01496         p-&gt;properties[ STATES ] |= Sticky;
<a name="l01497"></a>01497     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_state_max_vert )
<a name="l01498"></a>01498         p-&gt;properties[ STATES ] |= MaxVert;
<a name="l01499"></a>01499     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_state_max_horiz )
<a name="l01500"></a>01500         p-&gt;properties[ STATES ] |= MaxHoriz;
<a name="l01501"></a>01501     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_state_shaded )
<a name="l01502"></a>01502         p-&gt;properties[ STATES ] |= Shaded;
<a name="l01503"></a>01503     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_state_skip_taskbar )
<a name="l01504"></a>01504         p-&gt;properties[ STATES ] |= SkipTaskbar;
<a name="l01505"></a>01505     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_state_skip_pager )
<a name="l01506"></a>01506         p-&gt;properties[ STATES ] |= SkipPager;
<a name="l01507"></a>01507     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_state_hidden )
<a name="l01508"></a>01508         p-&gt;properties[ STATES ] |= Hidden;
<a name="l01509"></a>01509     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_state_fullscreen )
<a name="l01510"></a>01510         p-&gt;properties[ STATES ] |= FullScreen;
<a name="l01511"></a>01511     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_state_above )
<a name="l01512"></a>01512         p-&gt;properties[ STATES ] |= KeepAbove;
<a name="l01513"></a>01513     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_state_below )
<a name="l01514"></a>01514         p-&gt;properties[ STATES ] |= KeepBelow;
<a name="l01515"></a>01515     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_state_demands_attention )
<a name="l01516"></a>01516         p-&gt;properties[ STATES ] |= DemandsAttention;
<a name="l01517"></a>01517 
<a name="l01518"></a>01518     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_state_stays_on_top )
<a name="l01519"></a>01519         p-&gt;properties[ STATES ] |= StaysOnTop;
<a name="l01520"></a>01520 
<a name="l01521"></a>01521     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_strut )
<a name="l01522"></a>01522         p-&gt;properties[ PROTOCOLS ] |= WMStrut;
<a name="l01523"></a>01523 
<a name="l01524"></a>01524     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_extended_strut )
<a name="l01525"></a>01525         p-&gt;properties[ PROTOCOLS2 ] |= WM2ExtendedStrut;
<a name="l01526"></a>01526 
<a name="l01527"></a>01527     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_icon_geometry )
<a name="l01528"></a>01528         p-&gt;properties[ PROTOCOLS ] |= WMIconGeometry;
<a name="l01529"></a>01529 
<a name="l01530"></a>01530     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_icon )
<a name="l01531"></a>01531         p-&gt;properties[ PROTOCOLS ] |= WMIcon;
<a name="l01532"></a>01532 
<a name="l01533"></a>01533     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_pid )
<a name="l01534"></a>01534         p-&gt;properties[ PROTOCOLS ] |= WMPid;
<a name="l01535"></a>01535 
<a name="l01536"></a>01536     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_handled_icons )
<a name="l01537"></a>01537         p-&gt;properties[ PROTOCOLS ] |= WMHandledIcons;
<a name="l01538"></a>01538 
<a name="l01539"></a>01539     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_ping )
<a name="l01540"></a>01540         p-&gt;properties[ PROTOCOLS ] |= WMPing;
<a name="l01541"></a>01541 
<a name="l01542"></a>01542     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_take_activity )
<a name="l01543"></a>01543         p-&gt;properties[ PROTOCOLS2 ] |= WM2TakeActivity;
<a name="l01544"></a>01544 
<a name="l01545"></a>01545     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_user_time )
<a name="l01546"></a>01546         p-&gt;properties[ PROTOCOLS2 ] |= WM2UserTime;
<a name="l01547"></a>01547 
<a name="l01548"></a>01548     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_startup_id )
<a name="l01549"></a>01549         p-&gt;properties[ PROTOCOLS2 ] |= WM2StartupId;
<a name="l01550"></a>01550 
<a name="l01551"></a>01551     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_allowed_actions )
<a name="l01552"></a>01552         p-&gt;properties[ PROTOCOLS2 ] |= WM2AllowedActions;
<a name="l01553"></a>01553 
<a name="l01554"></a>01554         <span class="comment">// Actions</span>
<a name="l01555"></a>01555     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_action_move )
<a name="l01556"></a>01556         p-&gt;properties[ ACTIONS ] |= ActionMove;
<a name="l01557"></a>01557     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_action_resize )
<a name="l01558"></a>01558         p-&gt;properties[ ACTIONS ] |= ActionResize;
<a name="l01559"></a>01559     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_action_minimize )
<a name="l01560"></a>01560         p-&gt;properties[ ACTIONS ] |= ActionMinimize;
<a name="l01561"></a>01561     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_action_shade )
<a name="l01562"></a>01562         p-&gt;properties[ ACTIONS ] |= ActionShade;
<a name="l01563"></a>01563     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_action_stick )
<a name="l01564"></a>01564         p-&gt;properties[ ACTIONS ] |= ActionStick;
<a name="l01565"></a>01565     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_action_max_vert )
<a name="l01566"></a>01566         p-&gt;properties[ ACTIONS ] |= ActionMaxVert;
<a name="l01567"></a>01567     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_action_max_horiz )
<a name="l01568"></a>01568         p-&gt;properties[ ACTIONS ] |= ActionMaxHoriz;
<a name="l01569"></a>01569     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_action_fullscreen )
<a name="l01570"></a>01570         p-&gt;properties[ ACTIONS ] |= ActionFullScreen;
<a name="l01571"></a>01571     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_action_change_desk )
<a name="l01572"></a>01572         p-&gt;properties[ ACTIONS ] |= ActionChangeDesktop;
<a name="l01573"></a>01573     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_wm_action_close )
<a name="l01574"></a>01574         p-&gt;properties[ ACTIONS ] |= ActionClose;
<a name="l01575"></a>01575 
<a name="l01576"></a>01576     <span class="comment">// KDE specific extensions</span>
<a name="l01577"></a>01577     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == kde_net_system_tray_windows )
<a name="l01578"></a>01578         p-&gt;properties[ PROTOCOLS ] |= KDESystemTrayWindows;
<a name="l01579"></a>01579 
<a name="l01580"></a>01580     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == kde_net_wm_system_tray_window_for )
<a name="l01581"></a>01581         p-&gt;properties[ PROTOCOLS ] |= WMKDESystemTrayWinFor;
<a name="l01582"></a>01582 
<a name="l01583"></a>01583     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == net_frame_extents )
<a name="l01584"></a>01584         p-&gt;properties[ PROTOCOLS ] |= WMFrameExtents;
<a name="l01585"></a>01585     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == kde_net_wm_frame_strut )
<a name="l01586"></a>01586         p-&gt;properties[ PROTOCOLS ] |= WMKDEFrameStrut;
<a name="l01587"></a>01587 
<a name="l01588"></a>01588     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( atom == kde_net_wm_temporary_rules )
<a name="l01589"></a>01589         p-&gt;properties[ PROTOCOLS2 ] |= WM2KDETemporaryRules;
<a name="l01590"></a>01590 }
<a name="l01591"></a>01591 
<a name="l01592"></a>01592 <span class="keyword">extern</span> Time qt_x_user_time;
<a name="l01593"></a>01593 <span class="keywordtype">void</span> NETRootInfo::setActiveWindow(Window window) {
<a name="l01594"></a>01594     setActiveWindow( window, FromUnknown, qt_x_user_time, None );
<a name="l01595"></a>01595 }
<a name="l01596"></a>01596 
<a name="l01597"></a>01597 <span class="keywordtype">void</span> NETRootInfo::setActiveWindow(Window window, <a class="code" href="classNET.html#ab8310daed1ca6a628b77ad4f92eeae74" title="Source of the request.">NET::RequestSource</a> src,
<a name="l01598"></a>01598     Time timestamp, Window active_window ) {
<a name="l01599"></a>01599 
<a name="l01600"></a>01600 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l01601"></a>01601 <span class="preprocessor"></span>    fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::setActiveWindow(0x%lx) (%s)\n&quot;</span>,
<a name="l01602"></a>01602             window, (role == WindowManager) ? <span class="stringliteral">&quot;WM&quot;</span> : <span class="stringliteral">&quot;Client&quot;</span>);
<a name="l01603"></a>01603 <span class="preprocessor">#endif</span>
<a name="l01604"></a>01604 <span class="preprocessor"></span>
<a name="l01605"></a>01605     <span class="keywordflow">if</span> (role == WindowManager) {
<a name="l01606"></a>01606     p-&gt;active = window;
<a name="l01607"></a>01607     XChangeProperty(p-&gt;display, p-&gt;root, net_active_window, XA_WINDOW, 32,
<a name="l01608"></a>01608             PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) &amp;(p-&gt;active), 1);
<a name="l01609"></a>01609     } <span class="keywordflow">else</span> {
<a name="l01610"></a>01610     XEvent e;
<a name="l01611"></a>01611 
<a name="l01612"></a>01612     e.xclient.type = ClientMessage;
<a name="l01613"></a>01613     e.xclient.message_type = net_active_window;
<a name="l01614"></a>01614     e.xclient.display = p-&gt;display;
<a name="l01615"></a>01615     e.xclient.window = window;
<a name="l01616"></a>01616     e.xclient.format = 32;
<a name="l01617"></a>01617     e.xclient.data.l[0] = src;
<a name="l01618"></a>01618     e.xclient.data.l[1] = timestamp;
<a name="l01619"></a>01619     e.xclient.data.l[2] = active_window;
<a name="l01620"></a>01620     e.xclient.data.l[3] = 0l;
<a name="l01621"></a>01621     e.xclient.data.l[4] = 0l;
<a name="l01622"></a>01622 
<a name="l01623"></a>01623     XSendEvent(p-&gt;display, p-&gt;root, False, netwm_sendevent_mask, &amp;e);
<a name="l01624"></a>01624     }
<a name="l01625"></a>01625 }
<a name="l01626"></a>01626 
<a name="l01627"></a>01627 
<a name="l01628"></a>01628 <span class="keywordtype">void</span> NETRootInfo::setWorkArea(<span class="keywordtype">int</span> desktop, <span class="keyword">const</span> <a class="code" href="structNETRect.html" title="Simple rectangle class for NET classes.">NETRect</a> &amp;workarea) {
<a name="l01629"></a>01629 
<a name="l01630"></a>01630 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l01631"></a>01631 <span class="preprocessor"></span>    fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::setWorkArea(%d, { %d, %d, %d, %d }) (%s)\n&quot;</span>,
<a name="l01632"></a>01632         desktop, workarea.<a class="code" href="structNETRect.html#a2604a60ef01bb245df79ada826b1718d" title="Position of the rectangle.">pos</a>.<a class="code" href="structNETPoint.html#a662b6d948b949dabcaf2e955a078e63f" title="x coordinate.">x</a>, workarea.<a class="code" href="structNETRect.html#a2604a60ef01bb245df79ada826b1718d" title="Position of the rectangle.">pos</a>.<a class="code" href="structNETPoint.html#ac64b3831f6fd7f1874f7e344beb117bd" title="y coordinate">y</a>, workarea.<a class="code" href="structNETRect.html#a97102c18e356965d829855c570bb45ca" title="Size of the rectangle.">size</a>.<a class="code" href="structNETSize.html#af2e6a5fcac88037fa745273e85c5e219" title="Width.">width</a>, workarea.<a class="code" href="structNETRect.html#a97102c18e356965d829855c570bb45ca" title="Size of the rectangle.">size</a>.<a class="code" href="structNETSize.html#a0a6def5683983f7f3478192248ef2f8e" title="Height.">height</a>,
<a name="l01633"></a>01633         (role == WindowManager) ? <span class="stringliteral">&quot;WM&quot;</span> : <span class="stringliteral">&quot;Client&quot;</span>);
<a name="l01634"></a>01634 <span class="preprocessor">#endif</span>
<a name="l01635"></a>01635 <span class="preprocessor"></span>
<a name="l01636"></a>01636     <span class="keywordflow">if</span> (role != WindowManager || desktop &lt; 1) <span class="keywordflow">return</span>;
<a name="l01637"></a>01637 
<a name="l01638"></a>01638     p-&gt;workarea[desktop - 1] = workarea;
<a name="l01639"></a>01639 
<a name="l01640"></a>01640     <span class="keywordtype">long</span> *wa = <span class="keyword">new</span> <span class="keywordtype">long</span>[p-&gt;number_of_desktops * 4];
<a name="l01641"></a>01641     <span class="keywordtype">int</span> i, o;
<a name="l01642"></a>01642     <span class="keywordflow">for</span> (i = 0, o = 0; i &lt; p-&gt;number_of_desktops; i++) {
<a name="l01643"></a>01643     wa[o++] = p-&gt;workarea[i].<a class="code" href="structNETRect.html#a2604a60ef01bb245df79ada826b1718d" title="Position of the rectangle.">pos</a>.<a class="code" href="structNETPoint.html#a662b6d948b949dabcaf2e955a078e63f" title="x coordinate.">x</a>;
<a name="l01644"></a>01644     wa[o++] = p-&gt;workarea[i].pos.y;
<a name="l01645"></a>01645     wa[o++] = p-&gt;workarea[i].size.width;
<a name="l01646"></a>01646     wa[o++] = p-&gt;workarea[i].size.height;
<a name="l01647"></a>01647     }
<a name="l01648"></a>01648 
<a name="l01649"></a>01649     XChangeProperty(p-&gt;display, p-&gt;root, net_workarea, XA_CARDINAL, 32,
<a name="l01650"></a>01650             PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) wa,
<a name="l01651"></a>01651             p-&gt;number_of_desktops * 4);
<a name="l01652"></a>01652 
<a name="l01653"></a>01653     <span class="keyword">delete</span> [] wa;
<a name="l01654"></a>01654 }
<a name="l01655"></a>01655 
<a name="l01656"></a>01656 
<a name="l01657"></a>01657 <span class="keywordtype">void</span> NETRootInfo::setVirtualRoots(Window *windows, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count) {
<a name="l01658"></a>01658     <span class="keywordflow">if</span> (role != WindowManager) <span class="keywordflow">return</span>;
<a name="l01659"></a>01659 
<a name="l01660"></a>01660     p-&gt;virtual_roots_count = count;
<a name="l01661"></a>01661     p-&gt;virtual_roots = windows;
<a name="l01662"></a>01662 
<a name="l01663"></a>01663 <span class="preprocessor">#ifdef   NETWMDEBUG</span>
<a name="l01664"></a>01664 <span class="preprocessor"></span>    fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::setVirtualRoots: setting list with %ld windows\n&quot;</span>,
<a name="l01665"></a>01665         p-&gt;virtual_roots_count);
<a name="l01666"></a>01666 <span class="preprocessor">#endif</span>
<a name="l01667"></a>01667 <span class="preprocessor"></span>
<a name="l01668"></a>01668     XChangeProperty(p-&gt;display, p-&gt;root, net_virtual_roots, XA_WINDOW, 32,
<a name="l01669"></a>01669             PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) p-&gt;virtual_roots,
<a name="l01670"></a>01670             p-&gt;virtual_roots_count);
<a name="l01671"></a>01671 }
<a name="l01672"></a>01672 
<a name="l01673"></a>01673 
<a name="l01674"></a>01674 <span class="keywordtype">void</span> NETRootInfo::setDesktopLayout(<a class="code" href="classNET.html#afac5b26cfb4e28ec2f18cd5cc9e1989a" title="Orientation.">NET::Orientation</a> orientation, <span class="keywordtype">int</span> columns, <span class="keywordtype">int</span> rows,
<a name="l01675"></a>01675     <a class="code" href="classNET.html#a3359c32a21f438e0e6564f26179e458f" title="Starting corner for desktop layout.">NET::DesktopLayoutCorner</a> corner)
<a name="l01676"></a>01676 {
<a name="l01677"></a>01677     p-&gt;desktop_layout_orientation = orientation;
<a name="l01678"></a>01678     p-&gt;desktop_layout_columns = columns;
<a name="l01679"></a>01679     p-&gt;desktop_layout_rows = rows;
<a name="l01680"></a>01680     p-&gt;desktop_layout_corner = corner;
<a name="l01681"></a>01681 
<a name="l01682"></a>01682 <span class="preprocessor">#ifdef   NETWMDEBUG</span>
<a name="l01683"></a>01683 <span class="preprocessor"></span>    fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::setDesktopLayout: %d %d %d %d\n&quot;</span>,
<a name="l01684"></a>01684         orientation, columns, rows, corner);
<a name="l01685"></a>01685 <span class="preprocessor">#endif</span>
<a name="l01686"></a>01686 <span class="preprocessor"></span>
<a name="l01687"></a>01687     <span class="keywordtype">long</span> data[ 4 ];
<a name="l01688"></a>01688     data[ 0 ] = orientation;
<a name="l01689"></a>01689     data[ 1 ] = columns;
<a name="l01690"></a>01690     data[ 2 ] = rows;
<a name="l01691"></a>01691     data[ 3 ] = corner;
<a name="l01692"></a>01692     XChangeProperty(p-&gt;display, p-&gt;root, net_desktop_layout, XA_CARDINAL, 32,
<a name="l01693"></a>01693             PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) &amp;data, 4);
<a name="l01694"></a>01694 }
<a name="l01695"></a>01695 
<a name="l01696"></a>01696 
<a name="l01697"></a>01697 <span class="keywordtype">void</span> NETRootInfo::setShowingDesktop( <span class="keywordtype">bool</span> showing ) {
<a name="l01698"></a>01698     <span class="keywordflow">if</span> (role == WindowManager) {
<a name="l01699"></a>01699     <span class="keywordtype">long</span> d = p-&gt;showing_desktop = showing;
<a name="l01700"></a>01700     XChangeProperty(p-&gt;display, p-&gt;root, net_showing_desktop, XA_CARDINAL, 32,
<a name="l01701"></a>01701             PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) &amp;d, 1);
<a name="l01702"></a>01702     } <span class="keywordflow">else</span> {
<a name="l01703"></a>01703     XEvent e;
<a name="l01704"></a>01704 
<a name="l01705"></a>01705     e.xclient.type = ClientMessage;
<a name="l01706"></a>01706     e.xclient.message_type = net_showing_desktop;
<a name="l01707"></a>01707     e.xclient.display = p-&gt;display;
<a name="l01708"></a>01708     e.xclient.window = 0;
<a name="l01709"></a>01709     e.xclient.format = 32;
<a name="l01710"></a>01710     e.xclient.data.l[0] = showing ? 1 : 0;
<a name="l01711"></a>01711     e.xclient.data.l[1] = 0;
<a name="l01712"></a>01712     e.xclient.data.l[2] = 0;
<a name="l01713"></a>01713     e.xclient.data.l[3] = 0;
<a name="l01714"></a>01714     e.xclient.data.l[4] = 0;
<a name="l01715"></a>01715 
<a name="l01716"></a>01716     XSendEvent(p-&gt;display, p-&gt;root, False, netwm_sendevent_mask, &amp;e);
<a name="l01717"></a>01717     }
<a name="l01718"></a>01718 }
<a name="l01719"></a>01719 
<a name="l01720"></a>01720 
<a name="l01721"></a>01721 <span class="keywordtype">bool</span> NETRootInfo::showingDesktop()<span class="keyword"> const </span>{
<a name="l01722"></a>01722     <span class="keywordflow">return</span> p-&gt;showing_desktop;
<a name="l01723"></a>01723 }
<a name="l01724"></a>01724 
<a name="l01725"></a>01725 
<a name="l01726"></a>01726 <span class="keywordtype">void</span> NETRootInfo::closeWindowRequest(Window window) {
<a name="l01727"></a>01727 
<a name="l01728"></a>01728 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l01729"></a>01729 <span class="preprocessor"></span>    fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::closeWindowRequest: requesting close for 0x%lx\n&quot;</span>,
<a name="l01730"></a>01730         window);
<a name="l01731"></a>01731 <span class="preprocessor">#endif</span>
<a name="l01732"></a>01732 <span class="preprocessor"></span>
<a name="l01733"></a>01733     XEvent e;
<a name="l01734"></a>01734 
<a name="l01735"></a>01735     e.xclient.type = ClientMessage;
<a name="l01736"></a>01736     e.xclient.message_type = net_close_window;
<a name="l01737"></a>01737     e.xclient.display = p-&gt;display;
<a name="l01738"></a>01738     e.xclient.window = window;
<a name="l01739"></a>01739     e.xclient.format = 32;
<a name="l01740"></a>01740     e.xclient.data.l[0] = 0l;
<a name="l01741"></a>01741     e.xclient.data.l[1] = 0l;
<a name="l01742"></a>01742     e.xclient.data.l[2] = 0l;
<a name="l01743"></a>01743     e.xclient.data.l[3] = 0l;
<a name="l01744"></a>01744     e.xclient.data.l[4] = 0l;
<a name="l01745"></a>01745 
<a name="l01746"></a>01746     XSendEvent(p-&gt;display, p-&gt;root, False, netwm_sendevent_mask, &amp;e);
<a name="l01747"></a>01747 }
<a name="l01748"></a>01748 
<a name="l01749"></a>01749 
<a name="l01750"></a>01750 <span class="keywordtype">void</span> NETRootInfo::moveResizeRequest(Window window, <span class="keywordtype">int</span> x_root, <span class="keywordtype">int</span> y_root,
<a name="l01751"></a>01751                     Direction direction)
<a name="l01752"></a>01752 {
<a name="l01753"></a>01753 
<a name="l01754"></a>01754 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l01755"></a>01755 <span class="preprocessor"></span>    fprintf(stderr,
<a name="l01756"></a>01756         <span class="stringliteral">&quot;NETRootInfo::moveResizeRequest: requesting resize/move for 0x%lx (%d, %d, %d)\n&quot;</span>,
<a name="l01757"></a>01757         window, x_root, y_root, direction);
<a name="l01758"></a>01758 <span class="preprocessor">#endif</span>
<a name="l01759"></a>01759 <span class="preprocessor"></span>
<a name="l01760"></a>01760     XEvent e;
<a name="l01761"></a>01761 
<a name="l01762"></a>01762     e.xclient.type = ClientMessage;
<a name="l01763"></a>01763     e.xclient.message_type = net_wm_moveresize;
<a name="l01764"></a>01764     e.xclient.display = p-&gt;display;
<a name="l01765"></a>01765     e.xclient.window = window,
<a name="l01766"></a>01766     e.xclient.format = 32;
<a name="l01767"></a>01767     e.xclient.data.l[0] = x_root;
<a name="l01768"></a>01768     e.xclient.data.l[1] = y_root;
<a name="l01769"></a>01769     e.xclient.data.l[2] = direction;
<a name="l01770"></a>01770     e.xclient.data.l[3] = 0l;
<a name="l01771"></a>01771     e.xclient.data.l[4] = 0l;
<a name="l01772"></a>01772 
<a name="l01773"></a>01773     XSendEvent(p-&gt;display, p-&gt;root, False, netwm_sendevent_mask, &amp;e);
<a name="l01774"></a>01774 }
<a name="l01775"></a>01775 
<a name="l01776"></a>01776 <span class="keywordtype">void</span> NETRootInfo::moveResizeWindowRequest(Window window, <span class="keywordtype">int</span> flags, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height )
<a name="l01777"></a>01777 {
<a name="l01778"></a>01778 
<a name="l01779"></a>01779 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l01780"></a>01780 <span class="preprocessor"></span>    fprintf(stderr,
<a name="l01781"></a>01781         <span class="stringliteral">&quot;NETRootInfo::moveResizeWindowRequest: resizing/moving 0x%lx (%d, %d, %d, %d, %d)\n&quot;</span>,
<a name="l01782"></a>01782         window, flags, x, y, width, height);
<a name="l01783"></a>01783 <span class="preprocessor">#endif</span>
<a name="l01784"></a>01784 <span class="preprocessor"></span>
<a name="l01785"></a>01785     XEvent e;
<a name="l01786"></a>01786 
<a name="l01787"></a>01787     e.xclient.type = ClientMessage;
<a name="l01788"></a>01788     e.xclient.message_type = net_moveresize_window;
<a name="l01789"></a>01789     e.xclient.display = p-&gt;display;
<a name="l01790"></a>01790     e.xclient.window = window,
<a name="l01791"></a>01791     e.xclient.format = 32;
<a name="l01792"></a>01792     e.xclient.data.l[0] = flags;
<a name="l01793"></a>01793     e.xclient.data.l[1] = x;
<a name="l01794"></a>01794     e.xclient.data.l[2] = y;
<a name="l01795"></a>01795     e.xclient.data.l[3] = width;
<a name="l01796"></a>01796     e.xclient.data.l[4] = height;
<a name="l01797"></a>01797 
<a name="l01798"></a>01798     XSendEvent(p-&gt;display, p-&gt;root, False, netwm_sendevent_mask, &amp;e);
<a name="l01799"></a>01799 }
<a name="l01800"></a>01800 
<a name="l01801"></a>01801 <span class="keywordtype">void</span> NETRootInfo::restackRequest(Window window, Window above, <span class="keywordtype">int</span> detail)
<a name="l01802"></a>01802 {
<a name="l01803"></a>01803     restackRequest( window, FromTool, above, detail, qt_x_user_time );
<a name="l01804"></a>01804 }
<a name="l01805"></a>01805 
<a name="l01806"></a>01806 <span class="keywordtype">void</span> NETRootInfo::restackRequest(Window window, RequestSource src, Window above, <span class="keywordtype">int</span> detail, Time timestamp )
<a name="l01807"></a>01807 {
<a name="l01808"></a>01808 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l01809"></a>01809 <span class="preprocessor"></span>    fprintf(stderr,
<a name="l01810"></a>01810         <span class="stringliteral">&quot;NETRootInfo::restackRequest: requesting restack for 0x%lx (%lx, %d)\n&quot;</span>,
<a name="l01811"></a>01811         window, above, detail);
<a name="l01812"></a>01812 <span class="preprocessor">#endif</span>
<a name="l01813"></a>01813 <span class="preprocessor"></span>
<a name="l01814"></a>01814     XEvent e;
<a name="l01815"></a>01815 
<a name="l01816"></a>01816     e.xclient.type = ClientMessage;
<a name="l01817"></a>01817     e.xclient.message_type = net_restack_window;
<a name="l01818"></a>01818     e.xclient.display = p-&gt;display;
<a name="l01819"></a>01819     e.xclient.window = window,
<a name="l01820"></a>01820     e.xclient.format = 32;
<a name="l01821"></a>01821     e.xclient.data.l[0] = src;
<a name="l01822"></a>01822     e.xclient.data.l[1] = above;
<a name="l01823"></a>01823     e.xclient.data.l[2] = detail;
<a name="l01824"></a>01824     e.xclient.data.l[3] = timestamp;
<a name="l01825"></a>01825     e.xclient.data.l[4] = 0l;
<a name="l01826"></a>01826 
<a name="l01827"></a>01827     XSendEvent(p-&gt;display, p-&gt;root, False, netwm_sendevent_mask, &amp;e);
<a name="l01828"></a>01828 }
<a name="l01829"></a>01829 
<a name="l01830"></a>01830 <span class="keywordtype">void</span> NETRootInfo2::sendPing( Window window, Time timestamp )
<a name="l01831"></a>01831 {
<a name="l01832"></a>01832     <span class="keywordflow">if</span> (role != WindowManager) <span class="keywordflow">return</span>;
<a name="l01833"></a>01833 <span class="preprocessor">#ifdef   NETWMDEBUG</span>
<a name="l01834"></a>01834 <span class="preprocessor"></span>    fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo2::setPing: window 0x%lx, timestamp %lu\n&quot;</span>,
<a name="l01835"></a>01835     window, timestamp );
<a name="l01836"></a>01836 <span class="preprocessor">#endif</span>
<a name="l01837"></a>01837 <span class="preprocessor"></span>    XEvent e;
<a name="l01838"></a>01838     e.xclient.type = ClientMessage;
<a name="l01839"></a>01839     e.xclient.message_type = wm_protocols;
<a name="l01840"></a>01840     e.xclient.display = p-&gt;display;
<a name="l01841"></a>01841     e.xclient.window = window,
<a name="l01842"></a>01842     e.xclient.format = 32;
<a name="l01843"></a>01843     e.xclient.data.l[0] = net_wm_ping;
<a name="l01844"></a>01844     e.xclient.data.l[1] = timestamp;
<a name="l01845"></a>01845     e.xclient.data.l[2] = window;
<a name="l01846"></a>01846     e.xclient.data.l[3] = 0;
<a name="l01847"></a>01847     e.xclient.data.l[4] = 0;
<a name="l01848"></a>01848 
<a name="l01849"></a>01849     XSendEvent(p-&gt;display, window, False, 0, &amp;e);
<a name="l01850"></a>01850 }
<a name="l01851"></a>01851 
<a name="l01852"></a>01852 <span class="keywordtype">void</span> NETRootInfo3::takeActivity( Window window, Time timestamp, <span class="keywordtype">long</span> flags )
<a name="l01853"></a>01853 {
<a name="l01854"></a>01854     <span class="keywordflow">if</span> (role != WindowManager) <span class="keywordflow">return</span>;
<a name="l01855"></a>01855 <span class="preprocessor">#ifdef   NETWMDEBUG</span>
<a name="l01856"></a>01856 <span class="preprocessor"></span>    fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo2::takeActivity: window 0x%lx, timestamp %lu, flags 0x%lx\n&quot;</span>,
<a name="l01857"></a>01857     window, timestamp, flags );
<a name="l01858"></a>01858 <span class="preprocessor">#endif</span>
<a name="l01859"></a>01859 <span class="preprocessor"></span>    XEvent e;
<a name="l01860"></a>01860     e.xclient.type = ClientMessage;
<a name="l01861"></a>01861     e.xclient.message_type = wm_protocols;
<a name="l01862"></a>01862     e.xclient.display = p-&gt;display;
<a name="l01863"></a>01863     e.xclient.window = window,
<a name="l01864"></a>01864     e.xclient.format = 32;
<a name="l01865"></a>01865     e.xclient.data.l[0] = net_wm_take_activity;
<a name="l01866"></a>01866     e.xclient.data.l[1] = timestamp;
<a name="l01867"></a>01867     e.xclient.data.l[2] = window;
<a name="l01868"></a>01868     e.xclient.data.l[3] = flags;
<a name="l01869"></a>01869     e.xclient.data.l[4] = 0;
<a name="l01870"></a>01870 
<a name="l01871"></a>01871     XSendEvent(p-&gt;display, window, False, 0, &amp;e);
<a name="l01872"></a>01872 }
<a name="l01873"></a>01873 
<a name="l01874"></a>01874 
<a name="l01875"></a>01875 
<a name="l01876"></a>01876 <span class="comment">// assignment operator</span>
<a name="l01877"></a>01877 
<a name="l01878"></a>01878 <span class="keyword">const</span> NETRootInfo &amp;NETRootInfo::operator=(<span class="keyword">const</span> NETRootInfo &amp;rootinfo) {
<a name="l01879"></a>01879 
<a name="l01880"></a>01880 <span class="preprocessor">#ifdef   NETWMDEBUG</span>
<a name="l01881"></a>01881 <span class="preprocessor"></span>    fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::operator=()\n&quot;</span>);
<a name="l01882"></a>01882 <span class="preprocessor">#endif</span>
<a name="l01883"></a>01883 <span class="preprocessor"></span>
<a name="l01884"></a>01884     <span class="keywordflow">if</span> (p != rootinfo.p) {
<a name="l01885"></a>01885     refdec_nri(p);
<a name="l01886"></a>01886 
<a name="l01887"></a>01887     <span class="keywordflow">if</span> (! p-&gt;ref) <span class="keyword">delete</span> p;
<a name="l01888"></a>01888     }
<a name="l01889"></a>01889 
<a name="l01890"></a>01890     p = rootinfo.p;
<a name="l01891"></a>01891     role = rootinfo.role;
<a name="l01892"></a>01892     p-&gt;ref++;
<a name="l01893"></a>01893 
<a name="l01894"></a>01894     <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l01895"></a>01895 }
<a name="l01896"></a>01896 
<a name="l01897"></a>01897 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> NETRootInfo::event(XEvent *ev )
<a name="l01898"></a>01898 {
<a name="l01899"></a>01899     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> props[ 1 ];
<a name="l01900"></a>01900     <a class="code" href="namespaceKNotifyClient.html#a4057f79811e557201f9dc297541be589">event</a>( ev, props, 1 );
<a name="l01901"></a>01901     <span class="keywordflow">return</span> props[ 0 ];
<a name="l01902"></a>01902 }
<a name="l01903"></a>01903 
<a name="l01904"></a>01904 <span class="keywordtype">void</span> NETRootInfo::event(XEvent *event, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>* properties, <span class="keywordtype">int</span> properties_size )
<a name="l01905"></a>01905 {
<a name="l01906"></a>01906     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> props[ PROPERTIES_SIZE ] = { 0, 0, 0, 0, 0 };
<a name="l01907"></a>01907     assert( PROPERTIES_SIZE == 5 ); <span class="comment">// add elements above</span>
<a name="l01908"></a>01908     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>&amp; dirty = props[ PROTOCOLS ];
<a name="l01909"></a>01909     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>&amp; dirty2 = props[ PROTOCOLS2 ];
<a name="l01910"></a>01910     <span class="keywordtype">bool</span> do_update = <span class="keyword">false</span>;
<a name="l01911"></a>01911 
<a name="l01912"></a>01912     <span class="comment">// the window manager will be interested in client messages... no other</span>
<a name="l01913"></a>01913     <span class="comment">// client should get these messages</span>
<a name="l01914"></a>01914     <span class="keywordflow">if</span> (role == WindowManager &amp;&amp; event-&gt;type == ClientMessage &amp;&amp;
<a name="l01915"></a>01915     event-&gt;xclient.format == 32) {
<a name="l01916"></a>01916 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l01917"></a>01917 <span class="preprocessor"></span>    fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::event: handling ClientMessage event\n&quot;</span>);
<a name="l01918"></a>01918 <span class="preprocessor">#endif</span>
<a name="l01919"></a>01919 <span class="preprocessor"></span>
<a name="l01920"></a>01920     <span class="keywordflow">if</span> (event-&gt;xclient.message_type == net_number_of_desktops) {
<a name="l01921"></a>01921         dirty = NumberOfDesktops;
<a name="l01922"></a>01922 
<a name="l01923"></a>01923 <span class="preprocessor">#ifdef   NETWMDEBUG</span>
<a name="l01924"></a>01924 <span class="preprocessor"></span>        fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::event: changeNumberOfDesktops(%ld)\n&quot;</span>,
<a name="l01925"></a>01925             event-&gt;xclient.data.l[0]);
<a name="l01926"></a>01926 <span class="preprocessor">#endif</span>
<a name="l01927"></a>01927 <span class="preprocessor"></span>
<a name="l01928"></a>01928         changeNumberOfDesktops(event-&gt;xclient.data.l[0]);
<a name="l01929"></a>01929     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (event-&gt;xclient.message_type == net_desktop_geometry) {
<a name="l01930"></a>01930         dirty = DesktopGeometry;
<a name="l01931"></a>01931 
<a name="l01932"></a>01932         <a class="code" href="structNETSize.html" title="Simple size class for NET classes.">NETSize</a> sz;
<a name="l01933"></a>01933         sz.<a class="code" href="structNETSize.html#af2e6a5fcac88037fa745273e85c5e219" title="Width.">width</a> = <span class="keyword">event</span>-&gt;xclient.data.l[0];
<a name="l01934"></a>01934         sz.<a class="code" href="structNETSize.html#a0a6def5683983f7f3478192248ef2f8e" title="Height.">height</a> = <span class="keyword">event</span>-&gt;xclient.data.l[1];
<a name="l01935"></a>01935 
<a name="l01936"></a>01936 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l01937"></a>01937 <span class="preprocessor"></span>        fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::event: changeDesktopGeometry( -- , { %d, %d })\n&quot;</span>,
<a name="l01938"></a>01938             sz.<a class="code" href="structNETSize.html#af2e6a5fcac88037fa745273e85c5e219" title="Width.">width</a>, sz.<a class="code" href="structNETSize.html#a0a6def5683983f7f3478192248ef2f8e" title="Height.">height</a>);
<a name="l01939"></a>01939 <span class="preprocessor">#endif</span>
<a name="l01940"></a>01940 <span class="preprocessor"></span>
<a name="l01941"></a>01941         changeDesktopGeometry(~0, sz);
<a name="l01942"></a>01942     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (event-&gt;xclient.message_type == net_desktop_viewport) {
<a name="l01943"></a>01943         dirty = DesktopViewport;
<a name="l01944"></a>01944 
<a name="l01945"></a>01945         <a class="code" href="structNETPoint.html" title="Simple point class for NET classes.">NETPoint</a> pt;
<a name="l01946"></a>01946         pt.<a class="code" href="structNETPoint.html#a662b6d948b949dabcaf2e955a078e63f" title="x coordinate.">x</a> = <span class="keyword">event</span>-&gt;xclient.data.l[0];
<a name="l01947"></a>01947         pt.<a class="code" href="structNETPoint.html#ac64b3831f6fd7f1874f7e344beb117bd" title="y coordinate">y</a> = <span class="keyword">event</span>-&gt;xclient.data.l[1];
<a name="l01948"></a>01948 
<a name="l01949"></a>01949 <span class="preprocessor">#ifdef   NETWMDEBUG</span>
<a name="l01950"></a>01950 <span class="preprocessor"></span>        fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::event: changeDesktopViewport(%d, { %d, %d })\n&quot;</span>,
<a name="l01951"></a>01951             p-&gt;current_desktop, pt.<a class="code" href="structNETPoint.html#a662b6d948b949dabcaf2e955a078e63f" title="x coordinate.">x</a>, pt.<a class="code" href="structNETPoint.html#ac64b3831f6fd7f1874f7e344beb117bd" title="y coordinate">y</a>);
<a name="l01952"></a>01952 <span class="preprocessor">#endif</span>
<a name="l01953"></a>01953 <span class="preprocessor"></span>
<a name="l01954"></a>01954         changeDesktopViewport(p-&gt;current_desktop, pt);
<a name="l01955"></a>01955     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (event-&gt;xclient.message_type == net_current_desktop) {
<a name="l01956"></a>01956         dirty = CurrentDesktop;
<a name="l01957"></a>01957 
<a name="l01958"></a>01958 <span class="preprocessor">#ifdef   NETWMDEBUG</span>
<a name="l01959"></a>01959 <span class="preprocessor"></span>        fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::event: changeCurrentDesktop(%ld)\n&quot;</span>,
<a name="l01960"></a>01960             event-&gt;xclient.data.l[0] + 1);
<a name="l01961"></a>01961 <span class="preprocessor">#endif</span>
<a name="l01962"></a>01962 <span class="preprocessor"></span>
<a name="l01963"></a>01963         changeCurrentDesktop(event-&gt;xclient.data.l[0] + 1);
<a name="l01964"></a>01964     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (event-&gt;xclient.message_type == net_active_window) {
<a name="l01965"></a>01965         dirty = ActiveWindow;
<a name="l01966"></a>01966 
<a name="l01967"></a>01967 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l01968"></a>01968 <span class="preprocessor"></span>        fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::event: changeActiveWindow(0x%lx)\n&quot;</span>,
<a name="l01969"></a>01969             event-&gt;xclient.window);
<a name="l01970"></a>01970 <span class="preprocessor">#endif</span>
<a name="l01971"></a>01971 <span class="preprocessor"></span>
<a name="l01972"></a>01972         changeActiveWindow(event-&gt;xclient.window);
<a name="l01973"></a>01973         <span class="keywordflow">if</span>( NETRootInfo2* this2 = dynamic_cast&lt; NETRootInfo2* &gt;( <span class="keyword">this</span> ))
<a name="l01974"></a>01974             {
<a name="l01975"></a>01975                 RequestSource src = FromUnknown;
<a name="l01976"></a>01976                 Time timestamp = CurrentTime;
<a name="l01977"></a>01977                 Window active_window = None;
<a name="l01978"></a>01978                 <span class="comment">// make sure there aren&#39;t unknown values</span>
<a name="l01979"></a>01979                 <span class="keywordflow">if</span>( event-&gt;xclient.data.l[0] &gt;= FromUnknown
<a name="l01980"></a>01980                     &amp;&amp; event-&gt;xclient.data.l[0] &lt;= FromTool )
<a name="l01981"></a>01981                     {
<a name="l01982"></a>01982                     src = <span class="keyword">static_cast&lt;</span> RequestSource <span class="keyword">&gt;</span>( <span class="keyword">event</span>-&gt;xclient.data.l[0] );
<a name="l01983"></a>01983                     timestamp = <span class="keyword">event</span>-&gt;xclient.data.l[1];
<a name="l01984"></a>01984                     active_window = <span class="keyword">event</span>-&gt;xclient.data.l[2];
<a name="l01985"></a>01985                     }
<a name="l01986"></a>01986         this2-&gt;changeActiveWindow( event-&gt;xclient.window, src, timestamp, active_window );
<a name="l01987"></a>01987             }
<a name="l01988"></a>01988     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (event-&gt;xclient.message_type == net_wm_moveresize) {
<a name="l01989"></a>01989 
<a name="l01990"></a>01990 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l01991"></a>01991 <span class="preprocessor"></span>        fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::event: moveResize(%ld, %ld, %ld, %ld)\n&quot;</span>,
<a name="l01992"></a>01992             event-&gt;xclient.window,
<a name="l01993"></a>01993             event-&gt;xclient.data.l[0],
<a name="l01994"></a>01994             event-&gt;xclient.data.l[1],
<a name="l01995"></a>01995             event-&gt;xclient.data.l[2]
<a name="l01996"></a>01996             );
<a name="l01997"></a>01997 <span class="preprocessor">#endif</span>
<a name="l01998"></a>01998 <span class="preprocessor"></span>
<a name="l01999"></a>01999         moveResize(event-&gt;xclient.window,
<a name="l02000"></a>02000                event-&gt;xclient.data.l[0],
<a name="l02001"></a>02001                event-&gt;xclient.data.l[1],
<a name="l02002"></a>02002                event-&gt;xclient.data.l[2]);
<a name="l02003"></a>02003     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (event-&gt;xclient.message_type == net_moveresize_window) {
<a name="l02004"></a>02004 
<a name="l02005"></a>02005 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l02006"></a>02006 <span class="preprocessor"></span>        fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::event: moveResizeWindow(%ld, %ld, %ld, %ld, %ld, %ld)\n&quot;</span>,
<a name="l02007"></a>02007             event-&gt;xclient.window,
<a name="l02008"></a>02008             event-&gt;xclient.data.l[0],
<a name="l02009"></a>02009             event-&gt;xclient.data.l[1],
<a name="l02010"></a>02010             event-&gt;xclient.data.l[2],
<a name="l02011"></a>02011             event-&gt;xclient.data.l[3],
<a name="l02012"></a>02012             event-&gt;xclient.data.l[4]
<a name="l02013"></a>02013             );
<a name="l02014"></a>02014 <span class="preprocessor">#endif</span>
<a name="l02015"></a>02015 <span class="preprocessor"></span>
<a name="l02016"></a>02016         <span class="keywordflow">if</span>( NETRootInfo2* this2 = dynamic_cast&lt; NETRootInfo2* &gt;( <span class="keyword">this</span> ))
<a name="l02017"></a>02017             this2-&gt;moveResizeWindow(event-&gt;xclient.window,
<a name="l02018"></a>02018                    event-&gt;xclient.data.l[0],
<a name="l02019"></a>02019                    event-&gt;xclient.data.l[1],
<a name="l02020"></a>02020                    event-&gt;xclient.data.l[2],
<a name="l02021"></a>02021                    event-&gt;xclient.data.l[3],
<a name="l02022"></a>02022                    event-&gt;xclient.data.l[4]);
<a name="l02023"></a>02023     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (event-&gt;xclient.message_type == net_close_window) {
<a name="l02024"></a>02024 
<a name="l02025"></a>02025 <span class="preprocessor">#ifdef   NETWMDEBUG</span>
<a name="l02026"></a>02026 <span class="preprocessor"></span>        fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::event: closeWindow(0x%lx)\n&quot;</span>,
<a name="l02027"></a>02027             event-&gt;xclient.window);
<a name="l02028"></a>02028 <span class="preprocessor">#endif</span>
<a name="l02029"></a>02029 <span class="preprocessor"></span>
<a name="l02030"></a>02030         closeWindow(event-&gt;xclient.window);
<a name="l02031"></a>02031     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (event-&gt;xclient.message_type == net_restack_window) {
<a name="l02032"></a>02032 
<a name="l02033"></a>02033 <span class="preprocessor">#ifdef   NETWMDEBUG</span>
<a name="l02034"></a>02034 <span class="preprocessor"></span>        fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::event: restackWindow(0x%lx)\n&quot;</span>,
<a name="l02035"></a>02035             event-&gt;xclient.window);
<a name="l02036"></a>02036 <span class="preprocessor">#endif</span>
<a name="l02037"></a>02037 <span class="preprocessor"></span>
<a name="l02038"></a>02038         <span class="keywordflow">if</span>( NETRootInfo3* this3 = dynamic_cast&lt; NETRootInfo3* &gt;( <span class="keyword">this</span> ))
<a name="l02039"></a>02039             {
<a name="l02040"></a>02040                 RequestSource src = FromUnknown;
<a name="l02041"></a>02041                 Time timestamp = CurrentTime;
<a name="l02042"></a>02042                 <span class="comment">// make sure there aren&#39;t unknown values</span>
<a name="l02043"></a>02043                 <span class="keywordflow">if</span>( event-&gt;xclient.data.l[0] &gt;= FromUnknown
<a name="l02044"></a>02044                     &amp;&amp; event-&gt;xclient.data.l[0] &lt;= FromTool )
<a name="l02045"></a>02045                     {
<a name="l02046"></a>02046                     src = <span class="keyword">static_cast&lt;</span> RequestSource <span class="keyword">&gt;</span>( <span class="keyword">event</span>-&gt;xclient.data.l[0] );
<a name="l02047"></a>02047                     timestamp = <span class="keyword">event</span>-&gt;xclient.data.l[3];
<a name="l02048"></a>02048                     }
<a name="l02049"></a>02049             this3-&gt;restackWindow(event-&gt;xclient.window, src,
<a name="l02050"></a>02050                     event-&gt;xclient.data.l[1], event-&gt;xclient.data.l[2], timestamp);
<a name="l02051"></a>02051             }
<a name="l02052"></a>02052         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( NETRootInfo2* this2 = dynamic_cast&lt; NETRootInfo2* &gt;( <span class="keyword">this</span> ))
<a name="l02053"></a>02053             this2-&gt;restackWindow(event-&gt;xclient.window,
<a name="l02054"></a>02054                     event-&gt;xclient.data.l[1], event-&gt;xclient.data.l[2]);
<a name="l02055"></a>02055     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (event-&gt;xclient.message_type == wm_protocols
<a name="l02056"></a>02056         &amp;&amp; (Atom)event-&gt;xclient.data.l[ 0 ] == net_wm_ping) {
<a name="l02057"></a>02057         dirty = WMPing;
<a name="l02058"></a>02058 
<a name="l02059"></a>02059 <span class="preprocessor">#ifdef   NETWMDEBUG</span>
<a name="l02060"></a>02060 <span class="preprocessor"></span>        fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo2::event: gotPing(0x%lx,%lu)\n&quot;</span>,
<a name="l02061"></a>02061         event-&gt;xclient.window, event-&gt;xclient.data.l[1]);
<a name="l02062"></a>02062 <span class="preprocessor">#endif</span>
<a name="l02063"></a>02063 <span class="preprocessor"></span>        <span class="keywordflow">if</span>( NETRootInfo2* this2 = dynamic_cast&lt; NETRootInfo2* &gt;( <span class="keyword">this</span> ))
<a name="l02064"></a>02064         this2-&gt;gotPing( event-&gt;xclient.data.l[2], event-&gt;xclient.data.l[1]);
<a name="l02065"></a>02065     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (event-&gt;xclient.message_type == wm_protocols
<a name="l02066"></a>02066         &amp;&amp; (Atom)event-&gt;xclient.data.l[ 0 ] == net_wm_take_activity) {
<a name="l02067"></a>02067         dirty2 = WM2TakeActivity;
<a name="l02068"></a>02068 
<a name="l02069"></a>02069 <span class="preprocessor">#ifdef   NETWMDEBUG</span>
<a name="l02070"></a>02070 <span class="preprocessor"></span>        fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo2::event: gotTakeActivity(0x%lx,%lu,0x%lx)\n&quot;</span>,
<a name="l02071"></a>02071         event-&gt;xclient.window, event-&gt;xclient.data.l[1], event-&gt;xclient.data.l[3]);
<a name="l02072"></a>02072 <span class="preprocessor">#endif</span>
<a name="l02073"></a>02073 <span class="preprocessor"></span>        <span class="keywordflow">if</span>( NETRootInfo3* this3 = dynamic_cast&lt; NETRootInfo3* &gt;( <span class="keyword">this</span> ))
<a name="l02074"></a>02074         this3-&gt;gotTakeActivity( event-&gt;xclient.data.l[2], event-&gt;xclient.data.l[1],
<a name="l02075"></a>02075                     event-&gt;xclient.data.l[3]);
<a name="l02076"></a>02076     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (event-&gt;xclient.message_type == net_showing_desktop) {
<a name="l02077"></a>02077         dirty2 = WM2ShowingDesktop;
<a name="l02078"></a>02078 
<a name="l02079"></a>02079 <span class="preprocessor">#ifdef   NETWMDEBUG</span>
<a name="l02080"></a>02080 <span class="preprocessor"></span>        fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::event: changeShowingDesktop(%ld)\n&quot;</span>,
<a name="l02081"></a>02081             event-&gt;xclient.data.l[0]);
<a name="l02082"></a>02082 <span class="preprocessor">#endif</span>
<a name="l02083"></a>02083 <span class="preprocessor"></span>
<a name="l02084"></a>02084         <span class="keywordflow">if</span>( NETRootInfo4* this4 = dynamic_cast&lt; NETRootInfo4* &gt;( <span class="keyword">this</span> ))
<a name="l02085"></a>02085             this4-&gt;changeShowingDesktop(event-&gt;xclient.data.l[0]);
<a name="l02086"></a>02086     }
<a name="l02087"></a>02087     }
<a name="l02088"></a>02088 
<a name="l02089"></a>02089     <span class="keywordflow">if</span> (event-&gt;type == PropertyNotify) {
<a name="l02090"></a>02090 
<a name="l02091"></a>02091 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l02092"></a>02092 <span class="preprocessor"></span>    fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::event: handling PropertyNotify event\n&quot;</span>);
<a name="l02093"></a>02093 <span class="preprocessor">#endif</span>
<a name="l02094"></a>02094 <span class="preprocessor"></span>
<a name="l02095"></a>02095     XEvent pe = *event;
<a name="l02096"></a>02096 
<a name="l02097"></a>02097     Bool done = False;
<a name="l02098"></a>02098     Bool compaction = False;
<a name="l02099"></a>02099     <span class="keywordflow">while</span> (! done) {
<a name="l02100"></a>02100 
<a name="l02101"></a>02101 <span class="preprocessor">#ifdef   NETWMDEBUG</span>
<a name="l02102"></a>02102 <span class="preprocessor"></span>        fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::event: loop fire\n&quot;</span>);
<a name="l02103"></a>02103 <span class="preprocessor">#endif</span>
<a name="l02104"></a>02104 <span class="preprocessor"></span>
<a name="l02105"></a>02105         <span class="keywordflow">if</span> (pe.xproperty.atom == net_client_list)
<a name="l02106"></a>02106         dirty |= ClientList;
<a name="l02107"></a>02107         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == net_client_list_stacking)
<a name="l02108"></a>02108         dirty |= ClientListStacking;
<a name="l02109"></a>02109         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == kde_net_system_tray_windows)
<a name="l02110"></a>02110         dirty |= KDESystemTrayWindows;
<a name="l02111"></a>02111         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == net_desktop_names)
<a name="l02112"></a>02112         dirty |= DesktopNames;
<a name="l02113"></a>02113         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == net_workarea)
<a name="l02114"></a>02114         dirty |= WorkArea;
<a name="l02115"></a>02115         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == net_number_of_desktops)
<a name="l02116"></a>02116         dirty |= NumberOfDesktops;
<a name="l02117"></a>02117         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == net_desktop_geometry)
<a name="l02118"></a>02118         dirty |= DesktopGeometry;
<a name="l02119"></a>02119         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == net_desktop_viewport)
<a name="l02120"></a>02120         dirty |= DesktopViewport;
<a name="l02121"></a>02121         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == net_current_desktop)
<a name="l02122"></a>02122         dirty |= CurrentDesktop;
<a name="l02123"></a>02123         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == net_active_window)
<a name="l02124"></a>02124         dirty |= ActiveWindow;
<a name="l02125"></a>02125         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == net_showing_desktop)
<a name="l02126"></a>02126         dirty2 |= WM2ShowingDesktop;
<a name="l02127"></a>02127 <span class="comment">//            else if (pe.xproperty.atom == net_supported )</span>
<a name="l02128"></a>02128 <span class="comment">//                dirty |= Supported; // update here?</span>
<a name="l02129"></a>02129             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == net_supporting_wm_check )
<a name="l02130"></a>02130                 dirty |= SupportingWMCheck;
<a name="l02131"></a>02131             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == net_virtual_roots )
<a name="l02132"></a>02132                 dirty |= VirtualRoots;
<a name="l02133"></a>02133             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == net_desktop_layout )
<a name="l02134"></a>02134                 dirty2 |= WM2DesktopLayout;
<a name="l02135"></a>02135         <span class="keywordflow">else</span> {
<a name="l02136"></a>02136 
<a name="l02137"></a>02137 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l02138"></a>02138 <span class="preprocessor"></span>        fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::event: putting back event and breaking\n&quot;</span>);
<a name="l02139"></a>02139 <span class="preprocessor">#endif</span>
<a name="l02140"></a>02140 <span class="preprocessor"></span>
<a name="l02141"></a>02141         <span class="keywordflow">if</span> ( compaction )
<a name="l02142"></a>02142             XPutBackEvent(p-&gt;display, &amp;pe);
<a name="l02143"></a>02143         <span class="keywordflow">break</span>;
<a name="l02144"></a>02144         }
<a name="l02145"></a>02145 
<a name="l02146"></a>02146         <span class="keywordflow">if</span> (XCheckTypedWindowEvent(p-&gt;display, p-&gt;root, PropertyNotify, &amp;pe) )
<a name="l02147"></a>02147         compaction = True;
<a name="l02148"></a>02148         <span class="keywordflow">else</span>
<a name="l02149"></a>02149         <span class="keywordflow">break</span>;
<a name="l02150"></a>02150     }
<a name="l02151"></a>02151 
<a name="l02152"></a>02152     do_update = <span class="keyword">true</span>;
<a name="l02153"></a>02153     }
<a name="l02154"></a>02154 
<a name="l02155"></a>02155     <span class="keywordflow">if</span>( do_update )
<a name="l02156"></a>02156         update( props );
<a name="l02157"></a>02157 
<a name="l02158"></a>02158 <span class="preprocessor">#ifdef   NETWMDEBUG</span>
<a name="l02159"></a>02159 <span class="preprocessor"></span>     fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::event: handled events, returning dirty = 0x%lx, 0x%lx\n&quot;</span>,
<a name="l02160"></a>02160         dirty, dirty2);
<a name="l02161"></a>02161 <span class="preprocessor">#endif</span>
<a name="l02162"></a>02162 <span class="preprocessor"></span>
<a name="l02163"></a>02163     <span class="keywordflow">if</span>( properties_size &gt; PROPERTIES_SIZE )
<a name="l02164"></a>02164         properties_size = PROPERTIES_SIZE;
<a name="l02165"></a>02165     <span class="keywordflow">for</span>( <span class="keywordtype">int</span> i = 0;
<a name="l02166"></a>02166          i &lt; properties_size;
<a name="l02167"></a>02167          ++i )
<a name="l02168"></a>02168         properties[ i ] = props[ i ];
<a name="l02169"></a>02169 }
<a name="l02170"></a>02170 
<a name="l02171"></a>02171 
<a name="l02172"></a>02172 <span class="comment">// private functions to update the data we keep</span>
<a name="l02173"></a>02173 
<a name="l02174"></a>02174 <span class="keywordtype">void</span> NETRootInfo::update( <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> dirty_props[] )
<a name="l02175"></a>02175 {
<a name="l02176"></a>02176     Atom type_ret;
<a name="l02177"></a>02177     <span class="keywordtype">int</span> format_ret;
<a name="l02178"></a>02178     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *data_ret;
<a name="l02179"></a>02179     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> nitems_ret, unused;
<a name="l02180"></a>02180     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> props[ PROPERTIES_SIZE ];
<a name="l02181"></a>02181     <span class="keywordflow">for</span>( <span class="keywordtype">int</span> i = 0;
<a name="l02182"></a>02182          i &lt; PROPERTIES_SIZE;
<a name="l02183"></a>02183          ++i )
<a name="l02184"></a>02184         props[ i ] = dirty_props[ i ] &amp; p-&gt;client_properties[ i ];
<a name="l02185"></a>02185     <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>&amp; dirty = props[ PROTOCOLS ];
<a name="l02186"></a>02186     <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>&amp; dirty2 = props[ PROTOCOLS2 ];
<a name="l02187"></a>02187 
<a name="l02188"></a>02188     if (dirty &amp; Supported ) {
<a name="l02189"></a>02189         <span class="comment">// only in Client mode</span>
<a name="l02190"></a>02190         <span class="keywordflow">for</span>( <span class="keywordtype">int</span> i = 0; i &lt; PROPERTIES_SIZE; ++i )
<a name="l02191"></a>02191             p-&gt;properties[ i ] = 0;
<a name="l02192"></a>02192         <span class="keywordflow">if</span>( XGetWindowProperty(p-&gt;display, p-&gt;root, net_supported,
<a name="l02193"></a>02193                                0l, MAX_PROP_SIZE, False, XA_ATOM, &amp;type_ret,
<a name="l02194"></a>02194                                &amp;format_ret, &amp;nitems_ret, &amp;unused, &amp;data_ret)
<a name="l02195"></a>02195             == Success ) {
<a name="l02196"></a>02196             <span class="keywordflow">if</span>( type_ret == XA_ATOM &amp;&amp; format_ret == 32 ) {
<a name="l02197"></a>02197                 Atom* atoms = (Atom*) data_ret;
<a name="l02198"></a>02198                 <span class="keywordflow">for</span>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0;
<a name="l02199"></a>02199                      i &lt; nitems_ret;
<a name="l02200"></a>02200                      ++i )
<a name="l02201"></a>02201                     updateSupportedProperties( atoms[ i ] );
<a name="l02202"></a>02202             }
<a name="l02203"></a>02203         <span class="keywordflow">if</span> ( data_ret )
<a name="l02204"></a>02204         XFree(data_ret);
<a name="l02205"></a>02205         }
<a name="l02206"></a>02206     }
<a name="l02207"></a>02207 
<a name="l02208"></a>02208     <span class="keywordflow">if</span> (dirty &amp; ClientList) {
<a name="l02209"></a>02209         <span class="keywordtype">bool</span> read_ok = <span class="keyword">false</span>;
<a name="l02210"></a>02210     <span class="keywordflow">if</span> (XGetWindowProperty(p-&gt;display, p-&gt;root, net_client_list,
<a name="l02211"></a>02211                    0l, MAX_PROP_SIZE, False, XA_WINDOW, &amp;type_ret,
<a name="l02212"></a>02212                    &amp;format_ret, &amp;nitems_ret, &amp;unused, &amp;data_ret)
<a name="l02213"></a>02213         == Success) {
<a name="l02214"></a>02214         <span class="keywordflow">if</span> (type_ret == XA_WINDOW &amp;&amp; format_ret == 32) {
<a name="l02215"></a>02215         Window *wins = (Window *) data_ret;
<a name="l02216"></a>02216 
<a name="l02217"></a>02217         qsort(wins, nitems_ret, <span class="keyword">sizeof</span>(Window), wcmp);
<a name="l02218"></a>02218 
<a name="l02219"></a>02219         <span class="keywordflow">if</span> (p-&gt;clients) {
<a name="l02220"></a>02220             <span class="keywordflow">if</span> (role == Client) {
<a name="l02221"></a>02221             <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> new_index = 0, old_index = 0;
<a name="l02222"></a>02222             <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> new_count = nitems_ret,
<a name="l02223"></a>02223                       old_count = p-&gt;clients_count;
<a name="l02224"></a>02224 
<a name="l02225"></a>02225             <span class="keywordflow">while</span> (old_index &lt; old_count || new_index &lt; new_count) {
<a name="l02226"></a>02226                 <span class="keywordflow">if</span> (old_index == old_count) {
<a name="l02227"></a>02227                 addClient(wins[new_index++]);
<a name="l02228"></a>02228                 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (new_index == new_count) {
<a name="l02229"></a>02229                 removeClient(p-&gt;clients[old_index++]);
<a name="l02230"></a>02230                 } <span class="keywordflow">else</span> {
<a name="l02231"></a>02231                 <span class="keywordflow">if</span> (p-&gt;clients[old_index] &lt;
<a name="l02232"></a>02232                     wins[new_index]) {
<a name="l02233"></a>02233                     removeClient(p-&gt;clients[old_index++]);
<a name="l02234"></a>02234                 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (wins[new_index] &lt;
<a name="l02235"></a>02235                        p-&gt;clients[old_index]) {
<a name="l02236"></a>02236                     addClient(wins[new_index++]);
<a name="l02237"></a>02237                 } <span class="keywordflow">else</span> {
<a name="l02238"></a>02238                     new_index++;
<a name="l02239"></a>02239                     old_index++;
<a name="l02240"></a>02240                 }
<a name="l02241"></a>02241                 }
<a name="l02242"></a>02242             }
<a name="l02243"></a>02243             }
<a name="l02244"></a>02244 
<a name="l02245"></a>02245             <span class="keyword">delete</span> [] p-&gt;clients;
<a name="l02246"></a>02246         } <span class="keywordflow">else</span> {
<a name="l02247"></a>02247 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l02248"></a>02248 <span class="preprocessor"></span>            fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::update: client list null, creating\n&quot;</span>);
<a name="l02249"></a>02249 <span class="preprocessor">#endif</span>
<a name="l02250"></a>02250 <span class="preprocessor"></span>
<a name="l02251"></a>02251             <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n;
<a name="l02252"></a>02252             <span class="keywordflow">for</span> (n = 0; n &lt; nitems_ret; n++) {
<a name="l02253"></a>02253             addClient(wins[n]);
<a name="l02254"></a>02254             }
<a name="l02255"></a>02255         }
<a name="l02256"></a>02256 
<a name="l02257"></a>02257         p-&gt;clients_count = nitems_ret;
<a name="l02258"></a>02258         p-&gt;clients = nwindup(wins, p-&gt;clients_count);
<a name="l02259"></a>02259                 read_ok = <span class="keyword">true</span>;
<a name="l02260"></a>02260         }
<a name="l02261"></a>02261 
<a name="l02262"></a>02262         <span class="keywordflow">if</span> ( data_ret )
<a name="l02263"></a>02263         XFree(data_ret);
<a name="l02264"></a>02264     }
<a name="l02265"></a>02265         <span class="keywordflow">if</span>( !read_ok ) {
<a name="l02266"></a>02266             <span class="keywordflow">for</span>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; p-&gt;clients_count; ++ i )
<a name="l02267"></a>02267             removeClient(p-&gt;clients[i]);
<a name="l02268"></a>02268             p-&gt;clients_count = 0;
<a name="l02269"></a>02269             <span class="keyword">delete</span>[] p-&gt;clients;
<a name="l02270"></a>02270             p-&gt;clients = NULL;
<a name="l02271"></a>02271         }
<a name="l02272"></a>02272 
<a name="l02273"></a>02273 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l02274"></a>02274 <span class="preprocessor"></span>    fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::update: client list updated (%ld clients)\n&quot;</span>,
<a name="l02275"></a>02275         p-&gt;clients_count);
<a name="l02276"></a>02276 <span class="preprocessor">#endif</span>
<a name="l02277"></a>02277 <span class="preprocessor"></span>    }
<a name="l02278"></a>02278 
<a name="l02279"></a>02279     <span class="keywordflow">if</span> (dirty &amp; KDESystemTrayWindows) {
<a name="l02280"></a>02280         <span class="keywordtype">bool</span> read_ok = <span class="keyword">false</span>;
<a name="l02281"></a>02281     <span class="keywordflow">if</span> (XGetWindowProperty(p-&gt;display, p-&gt;root, kde_net_system_tray_windows,
<a name="l02282"></a>02282                    0l, MAX_PROP_SIZE, False, XA_WINDOW, &amp;type_ret,
<a name="l02283"></a>02283                    &amp;format_ret, &amp;nitems_ret, &amp;unused, &amp;data_ret)
<a name="l02284"></a>02284         == Success) {
<a name="l02285"></a>02285         <span class="keywordflow">if</span> (type_ret == XA_WINDOW &amp;&amp; format_ret == 32) {
<a name="l02286"></a>02286         Window *wins = (Window *) data_ret;
<a name="l02287"></a>02287 
<a name="l02288"></a>02288         qsort(wins, nitems_ret, <span class="keyword">sizeof</span>(Window), wcmp);
<a name="l02289"></a>02289 
<a name="l02290"></a>02290         <span class="keywordflow">if</span> (p-&gt;kde_system_tray_windows) {
<a name="l02291"></a>02291             <span class="keywordflow">if</span> (role == Client) {
<a name="l02292"></a>02292             <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> new_index = 0, new_count = nitems_ret;
<a name="l02293"></a>02293             <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> old_index = 0,
<a name="l02294"></a>02294                       old_count = p-&gt;kde_system_tray_windows_count;
<a name="l02295"></a>02295 
<a name="l02296"></a>02296             <span class="keywordflow">while</span>(old_index &lt; old_count || new_index &lt; new_count) {
<a name="l02297"></a>02297                 <span class="keywordflow">if</span> (old_index == old_count) {
<a name="l02298"></a>02298                 addSystemTrayWin(wins[new_index++]);
<a name="l02299"></a>02299                 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (new_index == new_count) {
<a name="l02300"></a>02300                 removeSystemTrayWin(p-&gt;kde_system_tray_windows[old_index++]);
<a name="l02301"></a>02301                 } <span class="keywordflow">else</span> {
<a name="l02302"></a>02302                 <span class="keywordflow">if</span> (p-&gt;kde_system_tray_windows[old_index] &lt;
<a name="l02303"></a>02303                     wins[new_index]) {
<a name="l02304"></a>02304                     removeSystemTrayWin(p-&gt;kde_system_tray_windows[old_index++]);
<a name="l02305"></a>02305                 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (wins[new_index] &lt;
<a name="l02306"></a>02306                        p-&gt;kde_system_tray_windows[old_index]) {
<a name="l02307"></a>02307                     addSystemTrayWin(wins[new_index++]);
<a name="l02308"></a>02308                 } <span class="keywordflow">else</span> {
<a name="l02309"></a>02309                     new_index++;
<a name="l02310"></a>02310                     old_index++;
<a name="l02311"></a>02311                 }
<a name="l02312"></a>02312                 }
<a name="l02313"></a>02313             }
<a name="l02314"></a>02314             }
<a name="l02315"></a>02315 
<a name="l02316"></a>02316         } <span class="keywordflow">else</span> {
<a name="l02317"></a>02317             <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n;
<a name="l02318"></a>02318             <span class="keywordflow">for</span> (n = 0; n &lt; nitems_ret; n++) {
<a name="l02319"></a>02319             addSystemTrayWin(wins[n]);
<a name="l02320"></a>02320             }
<a name="l02321"></a>02321         }
<a name="l02322"></a>02322 
<a name="l02323"></a>02323         p-&gt;kde_system_tray_windows_count = nitems_ret;
<a name="l02324"></a>02324         <span class="keyword">delete</span> [] p-&gt;kde_system_tray_windows;
<a name="l02325"></a>02325         p-&gt;kde_system_tray_windows =
<a name="l02326"></a>02326             nwindup(wins, p-&gt;kde_system_tray_windows_count);
<a name="l02327"></a>02327                 read_ok = <span class="keyword">true</span>;
<a name="l02328"></a>02328         }
<a name="l02329"></a>02329 
<a name="l02330"></a>02330         <span class="keywordflow">if</span> ( data_ret )
<a name="l02331"></a>02331         XFree(data_ret);
<a name="l02332"></a>02332     }
<a name="l02333"></a>02333         <span class="keywordflow">if</span>( !read_ok ) {
<a name="l02334"></a>02334             <span class="keywordflow">for</span>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; p-&gt;kde_system_tray_windows_count; ++i )
<a name="l02335"></a>02335                 removeSystemTrayWin(p-&gt;kde_system_tray_windows[i]);
<a name="l02336"></a>02336             p-&gt;kde_system_tray_windows_count = 0;
<a name="l02337"></a>02337         <span class="keyword">delete</span> [] p-&gt;kde_system_tray_windows;
<a name="l02338"></a>02338             p-&gt;kde_system_tray_windows = NULL;
<a name="l02339"></a>02339         }
<a name="l02340"></a>02340     }
<a name="l02341"></a>02341 
<a name="l02342"></a>02342     <span class="keywordflow">if</span> (dirty &amp; ClientListStacking) {
<a name="l02343"></a>02343         p-&gt;stacking_count = 0;
<a name="l02344"></a>02344         <span class="keyword">delete</span>[] p-&gt;stacking;
<a name="l02345"></a>02345         p-&gt;stacking = NULL;
<a name="l02346"></a>02346     <span class="keywordflow">if</span> (XGetWindowProperty(p-&gt;display, p-&gt;root, net_client_list_stacking,
<a name="l02347"></a>02347                    0, MAX_PROP_SIZE, False, XA_WINDOW, &amp;type_ret,
<a name="l02348"></a>02348                    &amp;format_ret, &amp;nitems_ret, &amp;unused, &amp;data_ret)
<a name="l02349"></a>02349         == Success) {
<a name="l02350"></a>02350         <span class="keywordflow">if</span> (type_ret == XA_WINDOW &amp;&amp; format_ret == 32) {
<a name="l02351"></a>02351         Window *wins = (Window *) data_ret;
<a name="l02352"></a>02352 
<a name="l02353"></a>02353         p-&gt;stacking_count = nitems_ret;
<a name="l02354"></a>02354         p-&gt;stacking = nwindup(wins, p-&gt;stacking_count);
<a name="l02355"></a>02355         }
<a name="l02356"></a>02356 
<a name="l02357"></a>02357 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l02358"></a>02358 <span class="preprocessor"></span>        fprintf(stderr,<span class="stringliteral">&quot;NETRootInfo::update: client stacking updated (%ld clients)\n&quot;</span>,
<a name="l02359"></a>02359             p-&gt;stacking_count);
<a name="l02360"></a>02360 <span class="preprocessor">#endif</span>
<a name="l02361"></a>02361 <span class="preprocessor"></span>
<a name="l02362"></a>02362         <span class="keywordflow">if</span> ( data_ret )
<a name="l02363"></a>02363         XFree(data_ret);
<a name="l02364"></a>02364     }
<a name="l02365"></a>02365     }
<a name="l02366"></a>02366 
<a name="l02367"></a>02367     <span class="keywordflow">if</span> (dirty &amp; NumberOfDesktops) {
<a name="l02368"></a>02368     p-&gt;number_of_desktops = 0;
<a name="l02369"></a>02369 
<a name="l02370"></a>02370     <span class="keywordflow">if</span> (XGetWindowProperty(p-&gt;display, p-&gt;root, net_number_of_desktops,
<a name="l02371"></a>02371                    0l, 1l, False, XA_CARDINAL, &amp;type_ret, &amp;format_ret,
<a name="l02372"></a>02372                    &amp;nitems_ret, &amp;unused, &amp;data_ret)
<a name="l02373"></a>02373         == Success) {
<a name="l02374"></a>02374         <span class="keywordflow">if</span> (type_ret == XA_CARDINAL &amp;&amp; format_ret == 32 &amp;&amp; nitems_ret == 1) {
<a name="l02375"></a>02375         p-&gt;number_of_desktops = *((<span class="keywordtype">long</span> *) data_ret);
<a name="l02376"></a>02376         }
<a name="l02377"></a>02377 
<a name="l02378"></a>02378 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l02379"></a>02379 <span class="preprocessor"></span>        fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::update: number of desktops = %d\n&quot;</span>,
<a name="l02380"></a>02380             p-&gt;number_of_desktops);
<a name="l02381"></a>02381 <span class="preprocessor">#endif</span>
<a name="l02382"></a>02382 <span class="preprocessor"></span>        <span class="keywordflow">if</span> ( data_ret )
<a name="l02383"></a>02383         XFree(data_ret);
<a name="l02384"></a>02384     }
<a name="l02385"></a>02385     }
<a name="l02386"></a>02386 
<a name="l02387"></a>02387     <span class="keywordflow">if</span> (dirty &amp; DesktopGeometry) {
<a name="l02388"></a>02388         p-&gt;geometry = p-&gt;rootSize;
<a name="l02389"></a>02389     <span class="keywordflow">if</span> (XGetWindowProperty(p-&gt;display, p-&gt;root, net_desktop_geometry,
<a name="l02390"></a>02390                    0l, 2l, False, XA_CARDINAL, &amp;type_ret, &amp;format_ret,
<a name="l02391"></a>02391                    &amp;nitems_ret, &amp;unused, &amp;data_ret)
<a name="l02392"></a>02392         == Success) {
<a name="l02393"></a>02393         <span class="keywordflow">if</span> (type_ret == XA_CARDINAL &amp;&amp; format_ret == 32 &amp;&amp;
<a name="l02394"></a>02394         nitems_ret == 2) {
<a name="l02395"></a>02395         <span class="keywordtype">long</span> *data = (<span class="keywordtype">long</span> *) data_ret;
<a name="l02396"></a>02396 
<a name="l02397"></a>02397         p-&gt;geometry.width  = data[0];
<a name="l02398"></a>02398         p-&gt;geometry.height = data[1];
<a name="l02399"></a>02399 
<a name="l02400"></a>02400 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l02401"></a>02401 <span class="preprocessor"></span>        fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::update: desktop geometry updated\n&quot;</span>);
<a name="l02402"></a>02402 <span class="preprocessor">#endif</span>
<a name="l02403"></a>02403 <span class="preprocessor"></span>        }
<a name="l02404"></a>02404         <span class="keywordflow">if</span> ( data_ret )
<a name="l02405"></a>02405         XFree(data_ret);
<a name="l02406"></a>02406     }
<a name="l02407"></a>02407     }
<a name="l02408"></a>02408 
<a name="l02409"></a>02409     <span class="keywordflow">if</span> (dirty &amp; DesktopViewport) {
<a name="l02410"></a>02410     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; p-&gt;viewport.size(); i++)
<a name="l02411"></a>02411         p-&gt;viewport[i].x = p-&gt;viewport[i].y = 0;
<a name="l02412"></a>02412     if (XGetWindowProperty(p-&gt;display, p-&gt;root, net_desktop_viewport,
<a name="l02413"></a>02413                    0l, 2l, False, XA_CARDINAL, &amp;type_ret, &amp;format_ret,
<a name="l02414"></a>02414                    &amp;nitems_ret, &amp;unused, &amp;data_ret)
<a name="l02415"></a>02415         == Success) {
<a name="l02416"></a>02416         <span class="keywordflow">if</span> (type_ret == XA_CARDINAL &amp;&amp; format_ret == 32 &amp;&amp;
<a name="l02417"></a>02417         nitems_ret == 2) {
<a name="l02418"></a>02418         <span class="keywordtype">long</span> *data = (<span class="keywordtype">long</span> *) data_ret;
<a name="l02419"></a>02419 
<a name="l02420"></a>02420         <span class="keywordtype">int</span> d, i, n;
<a name="l02421"></a>02421         n = nitems_ret / 2;
<a name="l02422"></a>02422         <span class="keywordflow">for</span> (d = 0, i = 0; d &lt; n; d++) {
<a name="l02423"></a>02423             p-&gt;viewport[d].x = data[i++];
<a name="l02424"></a>02424             p-&gt;viewport[d].y = data[i++];
<a name="l02425"></a>02425         }
<a name="l02426"></a>02426 
<a name="l02427"></a>02427 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l02428"></a>02428 <span class="preprocessor"></span>        fprintf(stderr,
<a name="l02429"></a>02429             <span class="stringliteral">&quot;NETRootInfo::update: desktop viewport array updated (%d entries)\n&quot;</span>,
<a name="l02430"></a>02430             p-&gt;viewport.size());
<a name="l02431"></a>02431 
<a name="l02432"></a>02432         <span class="keywordflow">if</span> (nitems_ret % 2 != 0) {
<a name="l02433"></a>02433             fprintf(stderr,
<a name="l02434"></a>02434                 <span class="stringliteral">&quot;NETRootInfo::update(): desktop viewport array &quot;</span>
<a name="l02435"></a>02435                 <span class="stringliteral">&quot;size not a multiple of 2\n&quot;</span>);
<a name="l02436"></a>02436         }
<a name="l02437"></a>02437 <span class="preprocessor">#endif</span>
<a name="l02438"></a>02438 <span class="preprocessor"></span>        }
<a name="l02439"></a>02439         <span class="keywordflow">if</span> ( data_ret )
<a name="l02440"></a>02440         XFree(data_ret);
<a name="l02441"></a>02441     }
<a name="l02442"></a>02442     }
<a name="l02443"></a>02443 
<a name="l02444"></a>02444     <span class="keywordflow">if</span> (dirty &amp; CurrentDesktop) {
<a name="l02445"></a>02445     p-&gt;current_desktop = 0;
<a name="l02446"></a>02446     <span class="keywordflow">if</span> (XGetWindowProperty(p-&gt;display, p-&gt;root, net_current_desktop,
<a name="l02447"></a>02447                    0l, 1l, False, XA_CARDINAL, &amp;type_ret, &amp;format_ret,
<a name="l02448"></a>02448                    &amp;nitems_ret, &amp;unused, &amp;data_ret)
<a name="l02449"></a>02449         == Success) {
<a name="l02450"></a>02450         <span class="keywordflow">if</span> (type_ret == XA_CARDINAL &amp;&amp; format_ret == 32 &amp;&amp; nitems_ret == 1) {
<a name="l02451"></a>02451         p-&gt;current_desktop = *((<span class="keywordtype">long</span> *) data_ret) + 1;
<a name="l02452"></a>02452         }
<a name="l02453"></a>02453 
<a name="l02454"></a>02454 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l02455"></a>02455 <span class="preprocessor"></span>        fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::update: current desktop = %d\n&quot;</span>,
<a name="l02456"></a>02456             p-&gt;current_desktop);
<a name="l02457"></a>02457 <span class="preprocessor">#endif</span>
<a name="l02458"></a>02458 <span class="preprocessor"></span>        <span class="keywordflow">if</span> ( data_ret )
<a name="l02459"></a>02459         XFree(data_ret);
<a name="l02460"></a>02460     }
<a name="l02461"></a>02461     }
<a name="l02462"></a>02462 
<a name="l02463"></a>02463     <span class="keywordflow">if</span> (dirty &amp; DesktopNames) {
<a name="l02464"></a>02464         <span class="keywordflow">for</span>( <span class="keywordtype">int</span> i = 0; i &lt; p-&gt;desktop_names.size(); ++i )
<a name="l02465"></a>02465             <span class="keyword">delete</span>[] p-&gt;desktop_names[ i ];
<a name="l02466"></a>02466         p-&gt;desktop_names.reset();
<a name="l02467"></a>02467     <span class="keywordflow">if</span> (XGetWindowProperty(p-&gt;display, p-&gt;root, net_desktop_names,
<a name="l02468"></a>02468                    0l, MAX_PROP_SIZE, False, UTF8_STRING, &amp;type_ret,
<a name="l02469"></a>02469                    &amp;format_ret, &amp;nitems_ret, &amp;unused, &amp;data_ret)
<a name="l02470"></a>02470         == Success) {
<a name="l02471"></a>02471         <span class="keywordflow">if</span> (type_ret == UTF8_STRING &amp;&amp; format_ret == 8) {
<a name="l02472"></a>02472         <span class="keyword">const</span> <span class="keywordtype">char</span> *d = (<span class="keyword">const</span> <span class="keywordtype">char</span> *) data_ret;
<a name="l02473"></a>02473         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> s, n, index;
<a name="l02474"></a>02474 
<a name="l02475"></a>02475         <span class="keywordflow">for</span> (s = 0, n = 0, index = 0; n &lt; nitems_ret; n++) {
<a name="l02476"></a>02476             <span class="keywordflow">if</span> (d[n] == <span class="charliteral">&#39;\0&#39;</span>) {
<a name="l02477"></a>02477             <span class="keyword">delete</span> [] p-&gt;desktop_names[index];
<a name="l02478"></a>02478             p-&gt;desktop_names[index++] = nstrndup((d + s), n - s + 1);
<a name="l02479"></a>02479             s = n + 1;
<a name="l02480"></a>02480             }
<a name="l02481"></a>02481         }
<a name="l02482"></a>02482         }
<a name="l02483"></a>02483 
<a name="l02484"></a>02484 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l02485"></a>02485 <span class="preprocessor"></span>        fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::update: desktop names array updated (%d entries)\n&quot;</span>,
<a name="l02486"></a>02486             p-&gt;desktop_names.size());
<a name="l02487"></a>02487 <span class="preprocessor">#endif</span>
<a name="l02488"></a>02488 <span class="preprocessor"></span>        <span class="keywordflow">if</span> ( data_ret )
<a name="l02489"></a>02489         XFree(data_ret);
<a name="l02490"></a>02490     }
<a name="l02491"></a>02491     }
<a name="l02492"></a>02492 
<a name="l02493"></a>02493     <span class="keywordflow">if</span> (dirty &amp; ActiveWindow) {
<a name="l02494"></a>02494         p-&gt;active = None;
<a name="l02495"></a>02495     <span class="keywordflow">if</span> (XGetWindowProperty(p-&gt;display, p-&gt;root, net_active_window, 0l, 1l,
<a name="l02496"></a>02496                    False, XA_WINDOW, &amp;type_ret, &amp;format_ret,
<a name="l02497"></a>02497                    &amp;nitems_ret, &amp;unused, &amp;data_ret)
<a name="l02498"></a>02498         == Success) {
<a name="l02499"></a>02499         <span class="keywordflow">if</span> (type_ret == XA_WINDOW &amp;&amp; format_ret == 32 &amp;&amp; nitems_ret == 1) {
<a name="l02500"></a>02500         p-&gt;active = *((Window *) data_ret);
<a name="l02501"></a>02501         }
<a name="l02502"></a>02502 
<a name="l02503"></a>02503 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l02504"></a>02504 <span class="preprocessor"></span>        fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::update: active window = 0x%lx\n&quot;</span>,
<a name="l02505"></a>02505             p-&gt;active);
<a name="l02506"></a>02506 <span class="preprocessor">#endif</span>
<a name="l02507"></a>02507 <span class="preprocessor"></span>        <span class="keywordflow">if</span> ( data_ret )
<a name="l02508"></a>02508         XFree(data_ret);
<a name="l02509"></a>02509     }
<a name="l02510"></a>02510     }
<a name="l02511"></a>02511 
<a name="l02512"></a>02512     <span class="keywordflow">if</span> (dirty &amp; WorkArea) {
<a name="l02513"></a>02513         p-&gt;workarea.reset();
<a name="l02514"></a>02514     <span class="keywordflow">if</span> (XGetWindowProperty(p-&gt;display, p-&gt;root, net_workarea, 0l,
<a name="l02515"></a>02515                    (p-&gt;number_of_desktops * 4), False, XA_CARDINAL,
<a name="l02516"></a>02516                    &amp;type_ret, &amp;format_ret, &amp;nitems_ret, &amp;unused,
<a name="l02517"></a>02517                    &amp;data_ret)
<a name="l02518"></a>02518         == Success) {
<a name="l02519"></a>02519         <span class="keywordflow">if</span> (type_ret == XA_CARDINAL &amp;&amp; format_ret == 32 &amp;&amp;
<a name="l02520"></a>02520         nitems_ret == (<span class="keywordtype">unsigned</span>) (p-&gt;number_of_desktops * 4)) {
<a name="l02521"></a>02521         <span class="keywordtype">long</span> *d = (<span class="keywordtype">long</span> *) data_ret;
<a name="l02522"></a>02522         <span class="keywordtype">int</span> i, j;
<a name="l02523"></a>02523         <span class="keywordflow">for</span> (i = 0, j = 0; i &lt; p-&gt;number_of_desktops; i++) {
<a name="l02524"></a>02524             p-&gt;workarea[i].pos.x       = d[j++];
<a name="l02525"></a>02525             p-&gt;workarea[i].pos.y       = d[j++];
<a name="l02526"></a>02526             p-&gt;workarea[i].size.width  = d[j++];
<a name="l02527"></a>02527             p-&gt;workarea[i].size.height = d[j++];
<a name="l02528"></a>02528         }
<a name="l02529"></a>02529         }
<a name="l02530"></a>02530 
<a name="l02531"></a>02531 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l02532"></a>02532 <span class="preprocessor"></span>        fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::update: work area array updated (%d entries)\n&quot;</span>,
<a name="l02533"></a>02533             p-&gt;workarea.size());
<a name="l02534"></a>02534 <span class="preprocessor">#endif</span>
<a name="l02535"></a>02535 <span class="preprocessor"></span>        <span class="keywordflow">if</span> ( data_ret )
<a name="l02536"></a>02536         XFree(data_ret);
<a name="l02537"></a>02537     }
<a name="l02538"></a>02538     }
<a name="l02539"></a>02539 
<a name="l02540"></a>02540 
<a name="l02541"></a>02541     <span class="keywordflow">if</span> (dirty &amp; SupportingWMCheck) {
<a name="l02542"></a>02542         p-&gt;supportwindow = None;
<a name="l02543"></a>02543         <span class="keyword">delete</span>[] p-&gt;name;
<a name="l02544"></a>02544         p-&gt;name = NULL;
<a name="l02545"></a>02545     <span class="keywordflow">if</span> (XGetWindowProperty(p-&gt;display, p-&gt;root, net_supporting_wm_check,
<a name="l02546"></a>02546                    0l, 1l, False, XA_WINDOW, &amp;type_ret, &amp;format_ret,
<a name="l02547"></a>02547                    &amp;nitems_ret, &amp;unused, &amp;data_ret)
<a name="l02548"></a>02548         == Success) {
<a name="l02549"></a>02549         <span class="keywordflow">if</span> (type_ret == XA_WINDOW &amp;&amp; format_ret == 32 &amp;&amp; nitems_ret == 1) {
<a name="l02550"></a>02550         p-&gt;supportwindow = *((Window *) data_ret);
<a name="l02551"></a>02551 
<a name="l02552"></a>02552         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *name_ret;
<a name="l02553"></a>02553         <span class="keywordflow">if</span> (XGetWindowProperty(p-&gt;display, p-&gt;supportwindow,
<a name="l02554"></a>02554                        net_wm_name, 0l, MAX_PROP_SIZE, False,
<a name="l02555"></a>02555                        UTF8_STRING, &amp;type_ret, &amp;format_ret,
<a name="l02556"></a>02556                        &amp;nitems_ret, &amp;unused, &amp;name_ret)
<a name="l02557"></a>02557             == Success) {
<a name="l02558"></a>02558             <span class="keywordflow">if</span> (type_ret == UTF8_STRING &amp;&amp; format_ret == 8)
<a name="l02559"></a>02559             p-&gt;name = nstrndup((<span class="keyword">const</span> <span class="keywordtype">char</span> *) name_ret, nitems_ret);
<a name="l02560"></a>02560 
<a name="l02561"></a>02561             <span class="keywordflow">if</span> ( name_ret )
<a name="l02562"></a>02562             XFree(name_ret);
<a name="l02563"></a>02563         }
<a name="l02564"></a>02564         }
<a name="l02565"></a>02565 
<a name="l02566"></a>02566 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l02567"></a>02567 <span class="preprocessor"></span>        fprintf(stderr,
<a name="l02568"></a>02568             <span class="stringliteral">&quot;NETRootInfo::update: supporting window manager = &#39;%s&#39;\n&quot;</span>,
<a name="l02569"></a>02569             p-&gt;name);
<a name="l02570"></a>02570 <span class="preprocessor">#endif</span>
<a name="l02571"></a>02571 <span class="preprocessor"></span>        <span class="keywordflow">if</span> ( data_ret )
<a name="l02572"></a>02572         XFree(data_ret);
<a name="l02573"></a>02573     }
<a name="l02574"></a>02574     }
<a name="l02575"></a>02575 
<a name="l02576"></a>02576     <span class="keywordflow">if</span> (dirty &amp; VirtualRoots) {
<a name="l02577"></a>02577         p-&gt;virtual_roots_count = 0;
<a name="l02578"></a>02578         <span class="keyword">delete</span>[] p-&gt;virtual_roots;
<a name="l02579"></a>02579         p-&gt;virtual_roots = NULL;
<a name="l02580"></a>02580     <span class="keywordflow">if</span> (XGetWindowProperty(p-&gt;display, p-&gt;root, net_virtual_roots,
<a name="l02581"></a>02581                    0, MAX_PROP_SIZE, False, XA_WINDOW, &amp;type_ret,
<a name="l02582"></a>02582                    &amp;format_ret, &amp;nitems_ret, &amp;unused, &amp;data_ret)
<a name="l02583"></a>02583         == Success) {
<a name="l02584"></a>02584         <span class="keywordflow">if</span> (type_ret == XA_WINDOW &amp;&amp; format_ret == 32) {
<a name="l02585"></a>02585         Window *wins = (Window *) data_ret;
<a name="l02586"></a>02586 
<a name="l02587"></a>02587         p-&gt;virtual_roots_count = nitems_ret;
<a name="l02588"></a>02588         p-&gt;virtual_roots = nwindup(wins, p-&gt;virtual_roots_count);
<a name="l02589"></a>02589         }
<a name="l02590"></a>02590 
<a name="l02591"></a>02591 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l02592"></a>02592 <span class="preprocessor"></span>        fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::updated: virtual roots updated (%ld windows)\n&quot;</span>,
<a name="l02593"></a>02593             p-&gt;virtual_roots_count);
<a name="l02594"></a>02594 <span class="preprocessor">#endif</span>
<a name="l02595"></a>02595 <span class="preprocessor"></span>        <span class="keywordflow">if</span> ( data_ret )
<a name="l02596"></a>02596         XFree(data_ret);
<a name="l02597"></a>02597     }
<a name="l02598"></a>02598     }
<a name="l02599"></a>02599 
<a name="l02600"></a>02600     <span class="keywordflow">if</span> (dirty2 &amp; WM2DesktopLayout) {
<a name="l02601"></a>02601         p-&gt;desktop_layout_orientation = OrientationHorizontal;
<a name="l02602"></a>02602         p-&gt;desktop_layout_corner = DesktopLayoutCornerTopLeft;
<a name="l02603"></a>02603         p-&gt;desktop_layout_columns = p-&gt;desktop_layout_rows = 0;
<a name="l02604"></a>02604     <span class="keywordflow">if</span> (XGetWindowProperty(p-&gt;display, p-&gt;root, net_desktop_layout,
<a name="l02605"></a>02605                    0, MAX_PROP_SIZE, False, XA_CARDINAL, &amp;type_ret,
<a name="l02606"></a>02606                    &amp;format_ret, &amp;nitems_ret, &amp;unused, &amp;data_ret)
<a name="l02607"></a>02607         == Success) {
<a name="l02608"></a>02608         <span class="keywordflow">if</span> (type_ret == XA_CARDINAL &amp;&amp; format_ret == 32) {
<a name="l02609"></a>02609                 <span class="keywordtype">long</span>* data = (<span class="keywordtype">long</span>*) data_ret;
<a name="l02610"></a>02610                 <span class="keywordflow">if</span>( nitems_ret &gt;= 4 &amp;&amp; data[ 3 ] &gt;= 0 &amp;&amp; data[ 3 ] &lt;= 3 )
<a name="l02611"></a>02611                     p-&gt;desktop_layout_corner = (<a class="code" href="classNET.html#a3359c32a21f438e0e6564f26179e458f" title="Starting corner for desktop layout.">NET::DesktopLayoutCorner</a>)data[ 3 ];
<a name="l02612"></a>02612                 <span class="keywordflow">if</span>( nitems_ret &gt;= 3 ) {
<a name="l02613"></a>02613                     <span class="keywordflow">if</span>( data[ 0 ] &gt;= 0 &amp;&amp; data[ 0 ] &lt;= 1 )
<a name="l02614"></a>02614                         p-&gt;desktop_layout_orientation = (<a class="code" href="classNET.html#afac5b26cfb4e28ec2f18cd5cc9e1989a" title="Orientation.">NET::Orientation</a>)data[ 0 ];
<a name="l02615"></a>02615                     p-&gt;desktop_layout_columns = data[ 1 ];
<a name="l02616"></a>02616                     p-&gt;desktop_layout_rows = data[ 2 ];
<a name="l02617"></a>02617                 }
<a name="l02618"></a>02618         }
<a name="l02619"></a>02619 
<a name="l02620"></a>02620 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l02621"></a>02621 <span class="preprocessor"></span>        fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::updated: desktop layout updated (%d %d %d %d)\n&quot;</span>,
<a name="l02622"></a>02622                 p-&gt;desktop_layout_orientation, p-&gt;desktop_layout_columns,
<a name="l02623"></a>02623                 p-&gt;desktop_layout_rows, p-&gt;desktop_layout_corner );
<a name="l02624"></a>02624 <span class="preprocessor">#endif</span>
<a name="l02625"></a>02625 <span class="preprocessor"></span>        <span class="keywordflow">if</span> ( data_ret )
<a name="l02626"></a>02626         XFree(data_ret);
<a name="l02627"></a>02627     }
<a name="l02628"></a>02628     }
<a name="l02629"></a>02629 
<a name="l02630"></a>02630     <span class="keywordflow">if</span> (dirty2 &amp; WM2ShowingDesktop) {
<a name="l02631"></a>02631         p-&gt;showing_desktop = <span class="keyword">false</span>;
<a name="l02632"></a>02632     <span class="keywordflow">if</span> (XGetWindowProperty(p-&gt;display, p-&gt;root, net_showing_desktop,
<a name="l02633"></a>02633                    0, MAX_PROP_SIZE, False, XA_CARDINAL, &amp;type_ret,
<a name="l02634"></a>02634                    &amp;format_ret, &amp;nitems_ret, &amp;unused, &amp;data_ret)
<a name="l02635"></a>02635         == Success) {
<a name="l02636"></a>02636         <span class="keywordflow">if</span> (type_ret == XA_CARDINAL &amp;&amp; format_ret == 32 &amp;&amp; nitems_ret == 1) {
<a name="l02637"></a>02637         p-&gt;showing_desktop = *((<span class="keywordtype">long</span> *) data_ret);
<a name="l02638"></a>02638         }
<a name="l02639"></a>02639 
<a name="l02640"></a>02640 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l02641"></a>02641 <span class="preprocessor"></span>        fprintf(stderr, <span class="stringliteral">&quot;NETRootInfo::update: showing desktop = %d\n&quot;</span>,
<a name="l02642"></a>02642             p-&gt;showing_desktop);
<a name="l02643"></a>02643 <span class="preprocessor">#endif</span>
<a name="l02644"></a>02644 <span class="preprocessor"></span>        <span class="keywordflow">if</span> ( data_ret )
<a name="l02645"></a>02645         XFree(data_ret);
<a name="l02646"></a>02646     }
<a name="l02647"></a>02647     }
<a name="l02648"></a>02648 }
<a name="l02649"></a>02649 
<a name="l02650"></a>02650 
<a name="l02651"></a>02651 Display *NETRootInfo::x11Display()<span class="keyword"> const </span>{
<a name="l02652"></a>02652     <span class="keywordflow">return</span> p-&gt;display;
<a name="l02653"></a>02653 }
<a name="l02654"></a>02654 
<a name="l02655"></a>02655 
<a name="l02656"></a>02656 Window NETRootInfo::rootWindow()<span class="keyword"> const </span>{
<a name="l02657"></a>02657     <span class="keywordflow">return</span> p-&gt;root;
<a name="l02658"></a>02658 }
<a name="l02659"></a>02659 
<a name="l02660"></a>02660 
<a name="l02661"></a>02661 Window NETRootInfo::supportWindow()<span class="keyword"> const </span>{
<a name="l02662"></a>02662     <span class="keywordflow">return</span> p-&gt;supportwindow;
<a name="l02663"></a>02663 }
<a name="l02664"></a>02664 
<a name="l02665"></a>02665 
<a name="l02666"></a>02666 <span class="keyword">const</span> <span class="keywordtype">char</span> *NETRootInfo::wmName()<span class="keyword"> const </span>{
<a name="l02667"></a>02667     <span class="keywordflow">return</span> p-&gt;name; }
<a name="l02668"></a>02668 
<a name="l02669"></a>02669 
<a name="l02670"></a>02670 <span class="keywordtype">int</span> NETRootInfo::screenNumber()<span class="keyword"> const </span>{
<a name="l02671"></a>02671     <span class="keywordflow">return</span> p-&gt;screen;
<a name="l02672"></a>02672 }
<a name="l02673"></a>02673 
<a name="l02674"></a>02674 
<a name="l02675"></a>02675 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> NETRootInfo::supported()<span class="keyword"> const </span>{
<a name="l02676"></a>02676     <span class="keywordflow">return</span> role == WindowManager
<a name="l02677"></a>02677         ? p-&gt;properties[ PROTOCOLS ]
<a name="l02678"></a>02678         : p-&gt;client_properties[ PROTOCOLS ];
<a name="l02679"></a>02679 }
<a name="l02680"></a>02680 
<a name="l02681"></a>02681 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>* NETRootInfo::supportedProperties()<span class="keyword"> const </span>{
<a name="l02682"></a>02682     <span class="keywordflow">return</span> p-&gt;properties;
<a name="l02683"></a>02683 }
<a name="l02684"></a>02684 
<a name="l02685"></a>02685 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>* NETRootInfo::passedProperties()<span class="keyword"> const </span>{
<a name="l02686"></a>02686     <span class="keywordflow">return</span> role == WindowManager
<a name="l02687"></a>02687         ? p-&gt;properties
<a name="l02688"></a>02688         : p-&gt;client_properties;
<a name="l02689"></a>02689 }
<a name="l02690"></a>02690 
<a name="l02691"></a>02691 <span class="keywordtype">bool</span> NETRootInfo::isSupported( <a class="code" href="classNET.html#aaea92340c4b9901e05aa7748587dcde5" title="Supported properties.">NET::Property</a> property )<span class="keyword"> const </span>{
<a name="l02692"></a>02692     <span class="keywordflow">return</span> p-&gt;properties[ PROTOCOLS ] &amp; property;
<a name="l02693"></a>02693 }
<a name="l02694"></a>02694 
<a name="l02695"></a>02695 <span class="keywordtype">bool</span> NETRootInfo::isSupported( <a class="code" href="classNET.html#a851d15d9aa748b5f76e44b1e2d7c79b0" title="Supported properties.">NET::Property2</a> property )<span class="keyword"> const </span>{
<a name="l02696"></a>02696     <span class="keywordflow">return</span> p-&gt;properties[ PROTOCOLS2 ] &amp; property;
<a name="l02697"></a>02697 }
<a name="l02698"></a>02698 
<a name="l02699"></a>02699 <span class="keywordtype">bool</span> NETRootInfo::isSupported( <a class="code" href="classNET.html#a4b3115c0f40e7bc8e38119cc44dd60e0" title="Window type.">NET::WindowType</a> type )<span class="keyword"> const </span>{
<a name="l02700"></a>02700     <span class="keywordflow">return</span> p-&gt;properties[ WINDOW_TYPES ] &amp; type;
<a name="l02701"></a>02701 }
<a name="l02702"></a>02702 
<a name="l02703"></a>02703 <span class="keywordtype">bool</span> NETRootInfo::isSupported( <a class="code" href="classNET.html#a08dce7f5ea8a2a6d1d38aea3498f00ee" title="Window state.">NET::State</a> state )<span class="keyword"> const </span>{
<a name="l02704"></a>02704     <span class="keywordflow">return</span> p-&gt;properties[ STATES ] &amp; state;
<a name="l02705"></a>02705 }
<a name="l02706"></a>02706 
<a name="l02707"></a>02707 <span class="keywordtype">bool</span> NETRootInfo::isSupported( <a class="code" href="classNET.html#afa9281c19ea7e280327b01b2c6236928" title="Actions that can be done with a window (_NET_WM_ALLOWED_ACTIONS).">NET::Action</a> action )<span class="keyword"> const </span>{
<a name="l02708"></a>02708     <span class="keywordflow">return</span> p-&gt;properties[ ACTIONS ] &amp; action;
<a name="l02709"></a>02709 }
<a name="l02710"></a>02710 
<a name="l02711"></a>02711 <span class="keyword">const</span> Window *NETRootInfo::clientList()<span class="keyword"> const </span>{
<a name="l02712"></a>02712     <span class="keywordflow">return</span> p-&gt;clients;
<a name="l02713"></a>02713 }
<a name="l02714"></a>02714 
<a name="l02715"></a>02715 
<a name="l02716"></a>02716 <span class="keywordtype">int</span> NETRootInfo::clientListCount()<span class="keyword"> const </span>{
<a name="l02717"></a>02717     <span class="keywordflow">return</span> p-&gt;clients_count;
<a name="l02718"></a>02718 }
<a name="l02719"></a>02719 
<a name="l02720"></a>02720 
<a name="l02721"></a>02721 <span class="keyword">const</span> Window *NETRootInfo::clientListStacking()<span class="keyword"> const </span>{
<a name="l02722"></a>02722     <span class="keywordflow">return</span> p-&gt;stacking;
<a name="l02723"></a>02723 }
<a name="l02724"></a>02724 
<a name="l02725"></a>02725 
<a name="l02726"></a>02726 <span class="keywordtype">int</span> NETRootInfo::clientListStackingCount()<span class="keyword"> const </span>{
<a name="l02727"></a>02727     <span class="keywordflow">return</span> p-&gt;stacking_count;
<a name="l02728"></a>02728 }
<a name="l02729"></a>02729 
<a name="l02730"></a>02730 
<a name="l02731"></a>02731 <span class="keyword">const</span> Window *NETRootInfo::kdeSystemTrayWindows()<span class="keyword"> const </span>{
<a name="l02732"></a>02732     <span class="keywordflow">return</span> p-&gt;kde_system_tray_windows;
<a name="l02733"></a>02733 }
<a name="l02734"></a>02734 
<a name="l02735"></a>02735 
<a name="l02736"></a>02736 <span class="keywordtype">int</span> NETRootInfo::kdeSystemTrayWindowsCount()<span class="keyword"> const </span>{
<a name="l02737"></a>02737     <span class="keywordflow">return</span> p-&gt;kde_system_tray_windows_count;
<a name="l02738"></a>02738 }
<a name="l02739"></a>02739 
<a name="l02740"></a>02740 
<a name="l02741"></a>02741 <a class="code" href="structNETSize.html" title="Simple size class for NET classes.">NETSize</a> NETRootInfo::desktopGeometry(<span class="keywordtype">int</span>)<span class="keyword"> const </span>{
<a name="l02742"></a>02742     <span class="keywordflow">return</span> p-&gt;geometry.<a class="code" href="structNETSize.html#af2e6a5fcac88037fa745273e85c5e219" title="Width.">width</a> != 0 ? p-&gt;geometry : p-&gt;rootSize;
<a name="l02743"></a>02743 }
<a name="l02744"></a>02744 
<a name="l02745"></a>02745 
<a name="l02746"></a>02746 <a class="code" href="structNETPoint.html" title="Simple point class for NET classes.">NETPoint</a> NETRootInfo::desktopViewport(<span class="keywordtype">int</span> desktop)<span class="keyword"> const </span>{
<a name="l02747"></a>02747     <span class="keywordflow">if</span> (desktop &lt; 1) {
<a name="l02748"></a>02748     <a class="code" href="structNETPoint.html" title="Simple point class for NET classes.">NETPoint</a> pt; <span class="comment">// set to (0,0)</span>
<a name="l02749"></a>02749     <span class="keywordflow">return</span> pt;
<a name="l02750"></a>02750     }
<a name="l02751"></a>02751 
<a name="l02752"></a>02752     <span class="keywordflow">return</span> p-&gt;viewport[desktop - 1];
<a name="l02753"></a>02753 }
<a name="l02754"></a>02754 
<a name="l02755"></a>02755 
<a name="l02756"></a>02756 <a class="code" href="structNETRect.html" title="Simple rectangle class for NET classes.">NETRect</a> NETRootInfo::workArea(<span class="keywordtype">int</span> desktop)<span class="keyword"> const </span>{
<a name="l02757"></a>02757     <span class="keywordflow">if</span> (desktop &lt; 1) {
<a name="l02758"></a>02758     <a class="code" href="structNETRect.html" title="Simple rectangle class for NET classes.">NETRect</a> rt;
<a name="l02759"></a>02759     <span class="keywordflow">return</span> rt;
<a name="l02760"></a>02760     }
<a name="l02761"></a>02761 
<a name="l02762"></a>02762     <span class="keywordflow">return</span> p-&gt;workarea[desktop - 1];
<a name="l02763"></a>02763 }
<a name="l02764"></a>02764 
<a name="l02765"></a>02765 
<a name="l02766"></a>02766 <span class="keyword">const</span> <span class="keywordtype">char</span> *NETRootInfo::desktopName(<span class="keywordtype">int</span> desktop)<span class="keyword"> const </span>{
<a name="l02767"></a>02767     <span class="keywordflow">if</span> (desktop &lt; 1) {
<a name="l02768"></a>02768     <span class="keywordflow">return</span> 0;
<a name="l02769"></a>02769     }
<a name="l02770"></a>02770 
<a name="l02771"></a>02771     <span class="keywordflow">return</span> p-&gt;desktop_names[desktop - 1];
<a name="l02772"></a>02772 }
<a name="l02773"></a>02773 
<a name="l02774"></a>02774 
<a name="l02775"></a>02775 <span class="keyword">const</span> Window *NETRootInfo::virtualRoots( )<span class="keyword"> const </span>{
<a name="l02776"></a>02776     <span class="keywordflow">return</span> p-&gt;virtual_roots;
<a name="l02777"></a>02777 }
<a name="l02778"></a>02778 
<a name="l02779"></a>02779 
<a name="l02780"></a>02780 <span class="keywordtype">int</span> NETRootInfo::virtualRootsCount()<span class="keyword"> const </span>{
<a name="l02781"></a>02781     <span class="keywordflow">return</span> p-&gt;virtual_roots_count;
<a name="l02782"></a>02782 }
<a name="l02783"></a>02783 
<a name="l02784"></a>02784 
<a name="l02785"></a>02785 <a class="code" href="classNET.html#afac5b26cfb4e28ec2f18cd5cc9e1989a" title="Orientation.">NET::Orientation</a> NETRootInfo::desktopLayoutOrientation()<span class="keyword"> const </span>{
<a name="l02786"></a>02786     <span class="keywordflow">return</span> p-&gt;desktop_layout_orientation;
<a name="l02787"></a>02787 }
<a name="l02788"></a>02788 
<a name="l02789"></a>02789 
<a name="l02790"></a>02790 <a class="codeRef" href="qsize.html">QSize</a> NETRootInfo::desktopLayoutColumnsRows()<span class="keyword"> const </span>{
<a name="l02791"></a>02791     <span class="keywordflow">return</span> <a class="codeRef" href="qsize.html">QSize</a>( p-&gt;desktop_layout_columns, p-&gt;desktop_layout_rows );
<a name="l02792"></a>02792 }
<a name="l02793"></a>02793 
<a name="l02794"></a>02794 
<a name="l02795"></a>02795 <a class="code" href="classNET.html#a3359c32a21f438e0e6564f26179e458f" title="Starting corner for desktop layout.">NET::DesktopLayoutCorner</a> NETRootInfo::desktopLayoutCorner()<span class="keyword"> const </span>{
<a name="l02796"></a>02796     <span class="keywordflow">return</span> p-&gt;desktop_layout_corner;
<a name="l02797"></a>02797 }
<a name="l02798"></a>02798 
<a name="l02799"></a>02799 
<a name="l02800"></a>02800 <span class="keywordtype">int</span> NETRootInfo::numberOfDesktops()<span class="keyword"> const </span>{
<a name="l02801"></a>02801     <span class="keywordflow">return</span> p-&gt;number_of_desktops == 0 ? 1 : p-&gt;number_of_desktops;
<a name="l02802"></a>02802 }
<a name="l02803"></a>02803 
<a name="l02804"></a>02804 
<a name="l02805"></a>02805 <span class="keywordtype">int</span> NETRootInfo::currentDesktop()<span class="keyword"> const </span>{
<a name="l02806"></a>02806     <span class="keywordflow">return</span> p-&gt;current_desktop == 0 ? 1 : p-&gt;current_desktop;
<a name="l02807"></a>02807 }
<a name="l02808"></a>02808 
<a name="l02809"></a>02809 
<a name="l02810"></a>02810 Window NETRootInfo::activeWindow()<span class="keyword"> const </span>{
<a name="l02811"></a>02811     <span class="keywordflow">return</span> p-&gt;active;
<a name="l02812"></a>02812 }
<a name="l02813"></a>02813 
<a name="l02814"></a>02814 
<a name="l02815"></a>02815 <span class="comment">// NETWinInfo stuffs</span>
<a name="l02816"></a>02816 
<a name="l02817"></a>02817 <span class="keyword">const</span> <span class="keywordtype">int</span> NETWinInfo::OnAllDesktops = NET::OnAllDesktops;
<a name="l02818"></a>02818 
<a name="l02819"></a>02819 NETWinInfo::NETWinInfo(Display *display, Window window, Window rootWindow,
<a name="l02820"></a>02820                <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> properties[], <span class="keywordtype">int</span> properties_size,
<a name="l02821"></a>02821                        Role role)
<a name="l02822"></a>02822 {
<a name="l02823"></a>02823 
<a name="l02824"></a>02824 <span class="preprocessor">#ifdef   NETWMDEBUG</span>
<a name="l02825"></a>02825 <span class="preprocessor"></span>    fprintf(stderr, <span class="stringliteral">&quot;NETWinInfo::NETWinInfo: constructing object with role &#39;%s&#39;\n&quot;</span>,
<a name="l02826"></a>02826         (role == WindowManager) ? <span class="stringliteral">&quot;WindowManager&quot;</span> : <span class="stringliteral">&quot;Client&quot;</span>);
<a name="l02827"></a>02827 <span class="preprocessor">#endif</span>
<a name="l02828"></a>02828 <span class="preprocessor"></span>
<a name="l02829"></a>02829     p = <span class="keyword">new</span> NETWinInfoPrivate;
<a name="l02830"></a>02830     p-&gt;ref = 1;
<a name="l02831"></a>02831 
<a name="l02832"></a>02832     p-&gt;display = display;
<a name="l02833"></a>02833     p-&gt;window = window;
<a name="l02834"></a>02834     p-&gt;root = rootWindow;
<a name="l02835"></a>02835     p-&gt;mapping_state = Withdrawn;
<a name="l02836"></a>02836     p-&gt;mapping_state_dirty = True;
<a name="l02837"></a>02837     p-&gt;state = 0;
<a name="l02838"></a>02838     p-&gt;types[ 0 ] = Unknown;
<a name="l02839"></a>02839     p-&gt;name = (<span class="keywordtype">char</span> *) 0;
<a name="l02840"></a>02840     p-&gt;visible_name = (<span class="keywordtype">char</span> *) 0;
<a name="l02841"></a>02841     p-&gt;icon_name = (<span class="keywordtype">char</span> *) 0;
<a name="l02842"></a>02842     p-&gt;visible_icon_name = (<span class="keywordtype">char</span> *) 0;
<a name="l02843"></a>02843     p-&gt;desktop = p-&gt;pid = p-&gt;handled_icons = 0;
<a name="l02844"></a>02844     p-&gt;user_time = -1U;
<a name="l02845"></a>02845     p-&gt;startup_id = NULL;
<a name="l02846"></a>02846     p-&gt;transient_for = None;
<a name="l02847"></a>02847     p-&gt;window_group = None;
<a name="l02848"></a>02848     p-&gt;allowed_actions = 0;
<a name="l02849"></a>02849     p-&gt;has_net_support = <span class="keyword">false</span>;
<a name="l02850"></a>02850     p-&gt;class_class = (<span class="keywordtype">char</span>*) 0;
<a name="l02851"></a>02851     p-&gt;class_name = (<span class="keywordtype">char</span>*) 0;
<a name="l02852"></a>02852     p-&gt;role = (<span class="keywordtype">char</span>*) 0;
<a name="l02853"></a>02853     p-&gt;client_machine = (<span class="keywordtype">char</span>*) 0;
<a name="l02854"></a>02854 
<a name="l02855"></a>02855     <span class="comment">// p-&gt;strut.left = p-&gt;strut.right = p-&gt;strut.top = p-&gt;strut.bottom = 0;</span>
<a name="l02856"></a>02856     <span class="comment">// p-&gt;frame_strut.left = p-&gt;frame_strut.right = p-&gt;frame_strut.top =</span>
<a name="l02857"></a>02857     <span class="comment">// p-&gt;frame_strut.bottom = 0;</span>
<a name="l02858"></a>02858 
<a name="l02859"></a>02859     p-&gt;kde_system_tray_win_for = 0;
<a name="l02860"></a>02860 
<a name="l02861"></a>02861     <span class="keywordflow">for</span>( <span class="keywordtype">int</span> i = 0;
<a name="l02862"></a>02862          i &lt; PROPERTIES_SIZE;
<a name="l02863"></a>02863          ++i )
<a name="l02864"></a>02864         p-&gt;properties[ i ] = 0;
<a name="l02865"></a>02865     <span class="keywordflow">if</span>( properties_size &gt; PROPERTIES_SIZE )
<a name="l02866"></a>02866         properties_size = PROPERTIES_SIZE;
<a name="l02867"></a>02867     <span class="keywordflow">for</span>( <span class="keywordtype">int</span> i = 0;
<a name="l02868"></a>02868          i &lt; properties_size;
<a name="l02869"></a>02869          ++i )
<a name="l02870"></a>02870         p-&gt;properties[ i ] = properties[ i ];
<a name="l02871"></a>02871 
<a name="l02872"></a>02872     p-&gt;icon_count = 0;
<a name="l02873"></a>02873 
<a name="l02874"></a>02874     this-&gt;role = role;
<a name="l02875"></a>02875 
<a name="l02876"></a>02876     if (! netwm_atoms_created) create_atoms(p-&gt;display);
<a name="l02877"></a>02877 
<a name="l02878"></a>02878     update(p-&gt;properties);
<a name="l02879"></a>02879 }
<a name="l02880"></a>02880 
<a name="l02881"></a>02881 
<a name="l02882"></a>02882 NETWinInfo::NETWinInfo(Display *display, Window window, Window rootWindow,
<a name="l02883"></a>02883                <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> properties, Role role)
<a name="l02884"></a>02884 {
<a name="l02885"></a>02885 
<a name="l02886"></a>02886 <span class="preprocessor">#ifdef   NETWMDEBUG</span>
<a name="l02887"></a>02887 <span class="preprocessor"></span>    fprintf(stderr, <span class="stringliteral">&quot;NETWinInfo::NETWinInfo: constructing object with role &#39;%s&#39;\n&quot;</span>,
<a name="l02888"></a>02888         (role == WindowManager) ? <span class="stringliteral">&quot;WindowManager&quot;</span> : <span class="stringliteral">&quot;Client&quot;</span>);
<a name="l02889"></a>02889 <span class="preprocessor">#endif</span>
<a name="l02890"></a>02890 <span class="preprocessor"></span>
<a name="l02891"></a>02891     p = <span class="keyword">new</span> NETWinInfoPrivate;
<a name="l02892"></a>02892     p-&gt;ref = 1;
<a name="l02893"></a>02893 
<a name="l02894"></a>02894     p-&gt;display = display;
<a name="l02895"></a>02895     p-&gt;window = window;
<a name="l02896"></a>02896     p-&gt;root = rootWindow;
<a name="l02897"></a>02897     p-&gt;mapping_state = Withdrawn;
<a name="l02898"></a>02898     p-&gt;mapping_state_dirty = True;
<a name="l02899"></a>02899     p-&gt;state = 0;
<a name="l02900"></a>02900     p-&gt;types[ 0 ] = Unknown;
<a name="l02901"></a>02901     p-&gt;name = (<span class="keywordtype">char</span> *) 0;
<a name="l02902"></a>02902     p-&gt;visible_name = (<span class="keywordtype">char</span> *) 0;
<a name="l02903"></a>02903     p-&gt;icon_name = (<span class="keywordtype">char</span> *) 0;
<a name="l02904"></a>02904     p-&gt;visible_icon_name = (<span class="keywordtype">char</span> *) 0;
<a name="l02905"></a>02905     p-&gt;desktop = p-&gt;pid = p-&gt;handled_icons = 0;
<a name="l02906"></a>02906     p-&gt;user_time = -1U;
<a name="l02907"></a>02907     p-&gt;startup_id = NULL;
<a name="l02908"></a>02908     p-&gt;transient_for = None;
<a name="l02909"></a>02909     p-&gt;window_group = None;
<a name="l02910"></a>02910     p-&gt;allowed_actions = 0;
<a name="l02911"></a>02911     p-&gt;has_net_support = <span class="keyword">false</span>;
<a name="l02912"></a>02912     p-&gt;class_class = (<span class="keywordtype">char</span>*) 0;
<a name="l02913"></a>02913     p-&gt;class_name = (<span class="keywordtype">char</span>*) 0;
<a name="l02914"></a>02914     p-&gt;role = (<span class="keywordtype">char</span>*) 0;
<a name="l02915"></a>02915     p-&gt;client_machine = (<span class="keywordtype">char</span>*) 0;
<a name="l02916"></a>02916 
<a name="l02917"></a>02917     <span class="comment">// p-&gt;strut.left = p-&gt;strut.right = p-&gt;strut.top = p-&gt;strut.bottom = 0;</span>
<a name="l02918"></a>02918     <span class="comment">// p-&gt;frame_strut.left = p-&gt;frame_strut.right = p-&gt;frame_strut.top =</span>
<a name="l02919"></a>02919     <span class="comment">// p-&gt;frame_strut.bottom = 0;</span>
<a name="l02920"></a>02920 
<a name="l02921"></a>02921     p-&gt;kde_system_tray_win_for = 0;
<a name="l02922"></a>02922 
<a name="l02923"></a>02923     <span class="keywordflow">for</span>( <span class="keywordtype">int</span> i = 0;
<a name="l02924"></a>02924          i &lt; PROPERTIES_SIZE;
<a name="l02925"></a>02925          ++i )
<a name="l02926"></a>02926         p-&gt;properties[ i ] = 0;
<a name="l02927"></a>02927     p-&gt;properties[ PROTOCOLS ] = properties;
<a name="l02928"></a>02928 
<a name="l02929"></a>02929     p-&gt;icon_count = 0;
<a name="l02930"></a>02930 
<a name="l02931"></a>02931     this-&gt;role = role;
<a name="l02932"></a>02932 
<a name="l02933"></a>02933     if (! netwm_atoms_created) create_atoms(p-&gt;display);
<a name="l02934"></a>02934 
<a name="l02935"></a>02935     update(p-&gt;properties);
<a name="l02936"></a>02936 }
<a name="l02937"></a>02937 
<a name="l02938"></a>02938 
<a name="l02939"></a>02939 NETWinInfo::NETWinInfo(<span class="keyword">const</span> NETWinInfo &amp;wininfo) {
<a name="l02940"></a>02940     p = wininfo.p;
<a name="l02941"></a>02941     p-&gt;ref++;
<a name="l02942"></a>02942 }
<a name="l02943"></a>02943 
<a name="l02944"></a>02944 
<a name="l02945"></a>02945 NETWinInfo::~NETWinInfo() {
<a name="l02946"></a>02946     refdec_nwi(p);
<a name="l02947"></a>02947 
<a name="l02948"></a>02948     <span class="keywordflow">if</span> (! p-&gt;ref) <span class="keyword">delete</span> p;
<a name="l02949"></a>02949 }
<a name="l02950"></a>02950 
<a name="l02951"></a>02951 
<a name="l02952"></a>02952 <span class="comment">// assignment operator</span>
<a name="l02953"></a>02953 
<a name="l02954"></a>02954 <span class="keyword">const</span> NETWinInfo &amp;NETWinInfo::operator=(<span class="keyword">const</span> NETWinInfo &amp;wininfo) {
<a name="l02955"></a>02955 
<a name="l02956"></a>02956 <span class="preprocessor">#ifdef   NETWMDEBUG</span>
<a name="l02957"></a>02957 <span class="preprocessor"></span>    fprintf(stderr, <span class="stringliteral">&quot;NETWinInfo::operator=()\n&quot;</span>);
<a name="l02958"></a>02958 <span class="preprocessor">#endif</span>
<a name="l02959"></a>02959 <span class="preprocessor"></span>
<a name="l02960"></a>02960     <span class="keywordflow">if</span> (p != wininfo.p) {
<a name="l02961"></a>02961     refdec_nwi(p);
<a name="l02962"></a>02962 
<a name="l02963"></a>02963     <span class="keywordflow">if</span> (! p-&gt;ref) <span class="keyword">delete</span> p;
<a name="l02964"></a>02964     }
<a name="l02965"></a>02965 
<a name="l02966"></a>02966     p = wininfo.p;
<a name="l02967"></a>02967     role = wininfo.role;
<a name="l02968"></a>02968     p-&gt;ref++;
<a name="l02969"></a>02969 
<a name="l02970"></a>02970     <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l02971"></a>02971 }
<a name="l02972"></a>02972 
<a name="l02973"></a>02973 
<a name="l02974"></a>02974 <span class="keywordtype">void</span> NETWinInfo::setIcon(<a class="code" href="structNETIcon.html" title="Simple icon class for NET classes.">NETIcon</a> icon, Bool replace) {
<a name="l02975"></a>02975     setIconInternal( p-&gt;icons, p-&gt;icon_count, net_wm_icon, icon, replace );
<a name="l02976"></a>02976 }
<a name="l02977"></a>02977 
<a name="l02978"></a>02978 <span class="keywordtype">void</span> NETWinInfo::setIconInternal(NETRArray&lt;NETIcon&gt;&amp; icons, <span class="keywordtype">int</span>&amp; icon_count, Atom property, <a class="code" href="structNETIcon.html" title="Simple icon class for NET classes.">NETIcon</a> icon, Bool replace) {
<a name="l02979"></a>02979     <span class="keywordflow">if</span> (role != Client) <span class="keywordflow">return</span>;
<a name="l02980"></a>02980 
<a name="l02981"></a>02981     <span class="keywordtype">int</span> proplen, i, sz, j;
<a name="l02982"></a>02982 
<a name="l02983"></a>02983     <span class="keywordflow">if</span> (replace) {
<a name="l02984"></a>02984 
<a name="l02985"></a>02985     <span class="keywordflow">for</span> (i = 0; i &lt; icons.size(); i++) {
<a name="l02986"></a>02986         <span class="keyword">delete</span> [] icons[i].data;
<a name="l02987"></a>02987         icons[i].data = 0;
<a name="l02988"></a>02988         icons[i].size.width = 0;
<a name="l02989"></a>02989         icons[i].size.height = 0;
<a name="l02990"></a>02990     }
<a name="l02991"></a>02991 
<a name="l02992"></a>02992     icon_count = 0;
<a name="l02993"></a>02993     }
<a name="l02994"></a>02994 
<a name="l02995"></a>02995     <span class="comment">// assign icon</span>
<a name="l02996"></a>02996     icons[icon_count] = icon;
<a name="l02997"></a>02997     icon_count++;
<a name="l02998"></a>02998 
<a name="l02999"></a>02999     <span class="comment">// do a deep copy, we want to own the data</span>
<a name="l03000"></a>03000     <a class="code" href="structNETIcon.html" title="Simple icon class for NET classes.">NETIcon</a> &amp;ni = icons[icon_count - 1];
<a name="l03001"></a>03001     sz = ni.<a class="code" href="structNETIcon.html#a6506944fe7143f0a37bbe58cc0d8df94" title="Size of the icon.">size</a>.<a class="code" href="structNETSize.html#af2e6a5fcac88037fa745273e85c5e219" title="Width.">width</a> * ni.<a class="code" href="structNETIcon.html#a6506944fe7143f0a37bbe58cc0d8df94" title="Size of the icon.">size</a>.<a class="code" href="structNETSize.html#a0a6def5683983f7f3478192248ef2f8e" title="Height.">height</a>;
<a name="l03002"></a>03002     CARD32 *d = <span class="keyword">new</span> CARD32[sz];
<a name="l03003"></a>03003     ni.<a class="code" href="structNETIcon.html#aaa6c9f9828e7d2f9a29f408529a68822" title="Image data for the icon.">data</a> = (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) d;
<a name="l03004"></a>03004     memcpy(d, icon.<a class="code" href="structNETIcon.html#aaa6c9f9828e7d2f9a29f408529a68822" title="Image data for the icon.">data</a>, sz * <span class="keyword">sizeof</span>(CARD32));
<a name="l03005"></a>03005 
<a name="l03006"></a>03006     <span class="comment">// compute property length</span>
<a name="l03007"></a>03007     <span class="keywordflow">for</span> (i = 0, proplen = 0; i &lt; icon_count; i++) {
<a name="l03008"></a>03008     proplen += 2 + (icons[i].size.width *
<a name="l03009"></a>03009             icons[i].size.height);
<a name="l03010"></a>03010     }
<a name="l03011"></a>03011 
<a name="l03012"></a>03012     CARD32 *d32;
<a name="l03013"></a>03013     <span class="keywordtype">long</span> *prop = <span class="keyword">new</span> <span class="keywordtype">long</span>[proplen], *pprop = prop;
<a name="l03014"></a>03014     <span class="keywordflow">for</span> (i = 0; i &lt; icon_count; i++) {
<a name="l03015"></a>03015     <span class="comment">// copy size into property</span>
<a name="l03016"></a>03016         *pprop++ = icons[i].size.width;
<a name="l03017"></a>03017     *pprop++ = icons[i].size.height;
<a name="l03018"></a>03018 
<a name="l03019"></a>03019     <span class="comment">// copy data into property</span>
<a name="l03020"></a>03020     sz = (icons[i].size.width * icons[i].size.height);
<a name="l03021"></a>03021     d32 = (CARD32 *) icons[i].data;
<a name="l03022"></a>03022     <span class="keywordflow">for</span> (j = 0; j &lt; sz; j++) *pprop++ = *d32++;
<a name="l03023"></a>03023     }
<a name="l03024"></a>03024 
<a name="l03025"></a>03025     XChangeProperty(p-&gt;display, p-&gt;window, property, XA_CARDINAL, 32,
<a name="l03026"></a>03026             PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) prop, proplen);
<a name="l03027"></a>03027 
<a name="l03028"></a>03028     <span class="keyword">delete</span> [] prop;
<a name="l03029"></a>03029 }
<a name="l03030"></a>03030 
<a name="l03031"></a>03031 
<a name="l03032"></a>03032 <span class="keywordtype">void</span> NETWinInfo::setIconGeometry(<a class="code" href="structNETRect.html" title="Simple rectangle class for NET classes.">NETRect</a> geometry) {
<a name="l03033"></a>03033     <span class="keywordflow">if</span> (role != Client) <span class="keywordflow">return</span>;
<a name="l03034"></a>03034 
<a name="l03035"></a>03035     p-&gt;icon_geom = geometry;
<a name="l03036"></a>03036 
<a name="l03037"></a>03037     <span class="keywordflow">if</span>( geometry.<a class="code" href="structNETRect.html#a97102c18e356965d829855c570bb45ca" title="Size of the rectangle.">size</a>.<a class="code" href="structNETSize.html#af2e6a5fcac88037fa745273e85c5e219" title="Width.">width</a> == 0 ) <span class="comment">// empty</span>
<a name="l03038"></a>03038         XDeleteProperty(p-&gt;display, p-&gt;window, net_wm_icon_geometry);
<a name="l03039"></a>03039     <span class="keywordflow">else</span> {
<a name="l03040"></a>03040         <span class="keywordtype">long</span> data[4];
<a name="l03041"></a>03041         data[0] = geometry.<a class="code" href="structNETRect.html#a2604a60ef01bb245df79ada826b1718d" title="Position of the rectangle.">pos</a>.<a class="code" href="structNETPoint.html#a662b6d948b949dabcaf2e955a078e63f" title="x coordinate.">x</a>;
<a name="l03042"></a>03042         data[1] = geometry.<a class="code" href="structNETRect.html#a2604a60ef01bb245df79ada826b1718d" title="Position of the rectangle.">pos</a>.<a class="code" href="structNETPoint.html#ac64b3831f6fd7f1874f7e344beb117bd" title="y coordinate">y</a>;
<a name="l03043"></a>03043         data[2] = geometry.<a class="code" href="structNETRect.html#a97102c18e356965d829855c570bb45ca" title="Size of the rectangle.">size</a>.<a class="code" href="structNETSize.html#af2e6a5fcac88037fa745273e85c5e219" title="Width.">width</a>;
<a name="l03044"></a>03044         data[3] = geometry.<a class="code" href="structNETRect.html#a97102c18e356965d829855c570bb45ca" title="Size of the rectangle.">size</a>.<a class="code" href="structNETSize.html#a0a6def5683983f7f3478192248ef2f8e" title="Height.">height</a>;
<a name="l03045"></a>03045 
<a name="l03046"></a>03046         XChangeProperty(p-&gt;display, p-&gt;window, net_wm_icon_geometry, XA_CARDINAL,
<a name="l03047"></a>03047             32, PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) data, 4);
<a name="l03048"></a>03048     }
<a name="l03049"></a>03049 }
<a name="l03050"></a>03050 
<a name="l03051"></a>03051 
<a name="l03052"></a>03052 <span class="keywordtype">void</span> NETWinInfo::setExtendedStrut(<span class="keyword">const</span> <a class="code" href="structNETExtendedStrut.html" title="Partial strut class for NET classes.">NETExtendedStrut</a>&amp; extended_strut ) {
<a name="l03053"></a>03053     <span class="keywordflow">if</span> (role != Client) <span class="keywordflow">return</span>;
<a name="l03054"></a>03054 
<a name="l03055"></a>03055     p-&gt;extended_strut = extended_strut;
<a name="l03056"></a>03056 
<a name="l03057"></a>03057     <span class="keywordtype">long</span> data[12];
<a name="l03058"></a>03058     data[0] = extended_strut.<a class="code" href="structNETExtendedStrut.html#a79fc79c632ccc599b393693d99f24164" title="Left border of the strut, width and range.">left_width</a>;
<a name="l03059"></a>03059     data[1] = extended_strut.<a class="code" href="structNETExtendedStrut.html#a7c1f4d0bf33fe20f5dba649e8a2a505b" title="Right border of the strut, width and range.">right_width</a>;
<a name="l03060"></a>03060     data[2] = extended_strut.<a class="code" href="structNETExtendedStrut.html#acb07800b67a53e134faaf09c571a1f0e" title="Top border of the strut, width and range.">top_width</a>;
<a name="l03061"></a>03061     data[3] = extended_strut.<a class="code" href="structNETExtendedStrut.html#a12ee0a2d04e980001139a7677a821148" title="Bottom border of the strut, width and range.">bottom_width</a>;
<a name="l03062"></a>03062     data[4] = extended_strut.left_start;
<a name="l03063"></a>03063     data[5] = extended_strut.left_end;
<a name="l03064"></a>03064     data[6] = extended_strut.right_start;
<a name="l03065"></a>03065     data[7] = extended_strut.right_end;
<a name="l03066"></a>03066     data[8] = extended_strut.top_start;
<a name="l03067"></a>03067     data[9] = extended_strut.top_end;
<a name="l03068"></a>03068     data[10] = extended_strut.bottom_start;
<a name="l03069"></a>03069     data[11] = extended_strut.bottom_end;
<a name="l03070"></a>03070 
<a name="l03071"></a>03071     XChangeProperty(p-&gt;display, p-&gt;window, net_wm_extended_strut, XA_CARDINAL, 32,
<a name="l03072"></a>03072             PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) data, 12);
<a name="l03073"></a>03073 }
<a name="l03074"></a>03074 
<a name="l03075"></a>03075 
<a name="l03076"></a>03076 <span class="keywordtype">void</span> NETWinInfo::setStrut(<a class="code" href="structNETStrut.html">NETStrut</a> strut) {
<a name="l03077"></a>03077     <span class="keywordflow">if</span> (role != Client) <span class="keywordflow">return</span>;
<a name="l03078"></a>03078 
<a name="l03079"></a>03079     p-&gt;strut = strut;
<a name="l03080"></a>03080 
<a name="l03081"></a>03081     <span class="keywordtype">long</span> data[4];
<a name="l03082"></a>03082     data[0] = strut.<a class="code" href="structNETStrut.html#a3ffe1d55e64632f4cdc1225ae8a301df" title="Left border of the strut.">left</a>;
<a name="l03083"></a>03083     data[1] = strut.<a class="code" href="structNETStrut.html#a46c92f5dc806d6def2390f258d00b80e" title="Right border of the strut.">right</a>;
<a name="l03084"></a>03084     data[2] = strut.<a class="code" href="structNETStrut.html#ac359ac56290a66002010f64dc4842aa2" title="Top border of the strut.">top</a>;
<a name="l03085"></a>03085     data[3] = strut.<a class="code" href="structNETStrut.html#a031e023bb8f0c8cf3d00b748c7dd7ca7" title="Bottom border of the strut.">bottom</a>;
<a name="l03086"></a>03086 
<a name="l03087"></a>03087     XChangeProperty(p-&gt;display, p-&gt;window, net_wm_strut, XA_CARDINAL, 32,
<a name="l03088"></a>03088             PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) data, 4);
<a name="l03089"></a>03089 }
<a name="l03090"></a>03090 
<a name="l03091"></a>03091 
<a name="l03092"></a>03092 <span class="keywordtype">void</span> NETWinInfo::setState(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> state, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> mask) {
<a name="l03093"></a>03093     <span class="keywordflow">if</span> (p-&gt;mapping_state_dirty)
<a name="l03094"></a>03094     updateWMState();
<a name="l03095"></a>03095 
<a name="l03096"></a>03096     <span class="comment">// setState() needs to know the current state, so read it even if not requested</span>
<a name="l03097"></a>03097     <span class="keywordflow">if</span>( ( p-&gt;properties[ PROTOCOLS ] &amp; WMState ) == 0 ) {
<a name="l03098"></a>03098         p-&gt;properties[ PROTOCOLS ] |= WMState;
<a name="l03099"></a>03099         <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> props[ PROPERTIES_SIZE ] = { WMState, 0 };
<a name="l03100"></a>03100         assert( PROPERTIES_SIZE == 2 ); <span class="comment">// add elements above</span>
<a name="l03101"></a>03101         update( props );
<a name="l03102"></a>03102         p-&gt;properties[ PROTOCOLS ] &amp;= ~WMState;
<a name="l03103"></a>03103     }
<a name="l03104"></a>03104 
<a name="l03105"></a>03105     <span class="keywordflow">if</span> (role == Client &amp;&amp; p-&gt;mapping_state != Withdrawn) {
<a name="l03106"></a>03106 
<a name="l03107"></a>03107 <span class="preprocessor">#ifdef NETWMDEBUG</span>
<a name="l03108"></a>03108 <span class="preprocessor"></span>        fprintf(stderr, <span class="stringliteral">&quot;NETWinInfo::setState (0x%lx, 0x%lx) (Client)\n&quot;</span>,
<a name="l03109"></a>03109                 state, mask);
<a name="l03110"></a>03110 <span class="preprocessor">#endif // NETWMDEBUG</span>
<a name="l03111"></a>03111 <span class="preprocessor"></span>
<a name="l03112"></a>03112     XEvent e;
<a name="l03113"></a>03113     e.xclient.type = ClientMessage;
<a name="l03114"></a>03114     e.xclient.message_type = net_wm_state;
<a name="l03115"></a>03115     e.xclient.display = p-&gt;display;
<a name="l03116"></a>03116     e.xclient.window = p-&gt;window;
<a name="l03117"></a>03117     e.xclient.format = 32;
<a name="l03118"></a>03118     e.xclient.data.l[3] = 0l;
<a name="l03119"></a>03119     e.xclient.data.l[4] = 0l;
<a name="l03120"></a>03120 
<a name="l03121"></a>03121     <span class="keywordflow">if</span> ((mask &amp; Modal) &amp;&amp; ((p-&gt;state &amp; Modal) != (state &amp; Modal))) {
<a name="l03122"></a>03122         e.xclient.data.l[0] = (state &amp; Modal) ? 1 : 0;
<a name="l03123"></a>03123         e.xclient.data.l[1] = net_wm_state_modal;
<a name="l03124"></a>03124         e.xclient.data.l[2] = 0l;
<a name="l03125"></a>03125 
<a name="l03126"></a>03126         XSendEvent(p-&gt;display, p-&gt;root, False, netwm_sendevent_mask, &amp;e);
<a name="l03127"></a>03127     }
<a name="l03128"></a>03128 
<a name="l03129"></a>03129     <span class="keywordflow">if</span> ((mask &amp; Sticky) &amp;&amp; ((p-&gt;state &amp; Sticky) != (state &amp; Sticky))) {
<a name="l03130"></a>03130         e.xclient.data.l[0] = (state &amp; Sticky) ? 1 : 0;
<a name="l03131"></a>03131         e.xclient.data.l[1] = net_wm_state_sticky;
<a name="l03132"></a>03132         e.xclient.data.l[2] = 0l;
<a name="l03133"></a>03133 
<a name="l03134"></a>03134         XSendEvent(p-&gt;display, p-&gt;root, False, netwm_sendevent_mask, &amp;e);
<a name="l03135"></a>03135     }
<a name="l03136"></a>03136 
<a name="l03137"></a>03137     <span class="keywordflow">if</span> ((mask &amp; Max) &amp;&amp; (( (p-&gt;state&amp;mask) &amp; Max) != (state &amp; Max))) {
<a name="l03138"></a>03138 
<a name="l03139"></a>03139         <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> wishstate = (p-&gt;state &amp; ~mask) | (state &amp; mask);
<a name="l03140"></a>03140         <span class="keywordflow">if</span> ( ( (wishstate &amp; MaxHoriz) != (p-&gt;state &amp; MaxHoriz) )
<a name="l03141"></a>03141          &amp;&amp; ( (wishstate &amp; MaxVert) != (p-&gt;state &amp; MaxVert) ) ) {
<a name="l03142"></a>03142         <span class="keywordflow">if</span> ( (wishstate &amp; Max) == Max ) {
<a name="l03143"></a>03143             e.xclient.data.l[0] = 1;
<a name="l03144"></a>03144             e.xclient.data.l[1] = net_wm_state_max_horiz;
<a name="l03145"></a>03145             e.xclient.data.l[2] = net_wm_state_max_vert;
<a name="l03146"></a>03146             XSendEvent(p-&gt;display, p-&gt;root, False, netwm_sendevent_mask, &amp;e);
<a name="l03147"></a>03147         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( (wishstate &amp; Max) == 0 ) {
<a name="l03148"></a>03148             e.xclient.data.l[0] = 0;
<a name="l03149"></a>03149             e.xclient.data.l[1] = net_wm_state_max_horiz;
<a name="l03150"></a>03150             e.xclient.data.l[2] = net_wm_state_max_vert;
<a name="l03151"></a>03151             XSendEvent(p-&gt;display, p-&gt;root, False, netwm_sendevent_mask, &amp;e);
<a name="l03152"></a>03152         } <span class="keywordflow">else</span> {
<a name="l03153"></a>03153             e.xclient.data.l[0] = ( wishstate &amp; MaxHoriz ) ? 1 : 0;
<a name="l03154"></a>03154             e.xclient.data.l[1] = net_wm_state_max_horiz;
<a name="l03155"></a>03155             e.xclient.data.l[2] = 0;
<a name="l03156"></a>03156             XSendEvent(p-&gt;display, p-&gt;root, False, netwm_sendevent_mask, &amp;e);
<a name="l03157"></a>03157             e.xclient.data.l[0] = ( wishstate &amp; MaxVert ) ? 1 : 0;
<a name="l03158"></a>03158             e.xclient.data.l[1] = net_wm_state_max_vert;
<a name="l03159"></a>03159             e.xclient.data.l[2] = 0;
<a name="l03160"></a>03160             XSendEvent(p-&gt;display, p-&gt;root, False, netwm_sendevent_mask, &amp;e);
<a name="l03161"></a>03161         }
<a name="l03162"></a>03162         } <span class="keywordflow">else</span>  <span class="keywordflow">if</span> ( (wishstate &amp; MaxVert) != (p-&gt;state &amp; MaxVert) ) {
<a name="l03163"></a>03163         e.xclient.data.l[0] = ( wishstate &amp; MaxVert ) ? 1 : 0;
<a name="l03164"></a>03164         e.xclient.data.l[1] = net_wm_state_max_vert;
<a name="l03165"></a>03165         e.xclient.data.l[2] = 0;
<a name="l03166"></a>03166         XSendEvent(p-&gt;display, p-&gt;root, False, netwm_sendevent_mask, &amp;e);
<a name="l03167"></a>03167         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( (wishstate &amp; MaxHoriz) != (p-&gt;state &amp; MaxHoriz) ) {
<a name="l03168"></a>03168         e.xclient.data.l[0] = ( wishstate &amp; MaxHoriz ) ? 1 : 0;
<a name="l03169"></a>03169         e.xclient.data.l[1] = net_wm_state_max_horiz;
<a name="l03170"></a>03170         e.xclient.data.l[2] = 0;
<a name="l03171"></a>03171         XSendEvent(p-&gt;display, p-&gt;root, False, netwm_sendevent_mask, &amp;e);
<a name="l03172"></a>03172         }
<a name="l03173"></a>03173     }
<a name="l03174"></a>03174 
<a name="l03175"></a>03175     <span class="keywordflow">if</span> ((mask &amp; Shaded) &amp;&amp; ((p-&gt;state &amp; Shaded) != (state &amp; Shaded))) {
<a name="l03176"></a>03176         e.xclient.data.l[0] = (state &amp; Shaded) ? 1 : 0;
<a name="l03177"></a>03177         e.xclient.data.l[1] = net_wm_state_shaded;
<a name="l03178"></a>03178         e.xclient.data.l[2] = 0l;
<a name="l03179"></a>03179 
<a name="l03180"></a>03180         XSendEvent(p-&gt;display, p-&gt;root, False, netwm_sendevent_mask, &amp;e);
<a name="l03181"></a>03181     }
<a name="l03182"></a>03182 
<a name="l03183"></a>03183     <span class="keywordflow">if</span> ((mask &amp; SkipTaskbar) &amp;&amp;
<a name="l03184"></a>03184         ((p-&gt;state &amp; SkipTaskbar) != (state &amp; SkipTaskbar))) {
<a name="l03185"></a>03185         e.xclient.data.l[0] = (state &amp; SkipTaskbar) ? 1 : 0;
<a name="l03186"></a>03186         e.xclient.data.l[1] = net_wm_state_skip_taskbar;
<a name="l03187"></a>03187         e.xclient.data.l[2] = 0l;
<a name="l03188"></a>03188 
<a name="l03189"></a>03189         XSendEvent(p-&gt;display, p-&gt;root, False, netwm_sendevent_mask, &amp;e);
<a name="l03190"></a>03190     }
<a name="l03191"></a>03191 
<a name="l03192"></a>03192         <span class="keywordflow">if</span> ((mask &amp; SkipPager) &amp;&amp;
<a name="l03193"></a>03193         ((p-&gt;state &amp; SkipPager) != (state &amp; SkipPager))) {
<a name="l03194"></a>03194             e.xclient.data.l[0] = (state &amp; SkipPager) ? 1 : 0;
<a name="l03195"></a>03195             e.xclient.data.l[1] = net_wm_state_skip_pager;
<a name="l03196"></a>03196             e.xclient.data.l[2] = 0l;
<a name="l03197"></a>03197 
<a name="l03198"></a>03198             XSendEvent(p-&gt;display, p-&gt;root, False, netwm_sendevent_mask, &amp;e);
<a name="l03199"></a>03199         }
<a name="l03200"></a>03200 
<a name="l03201"></a>03201         <span class="keywordflow">if</span> ((mask &amp; Hidden) &amp;&amp;
<a name="l03202"></a>03202         ((p-&gt;state &amp; Hidden) != (state &amp; Hidden))) {
<a name="l03203"></a>03203             e.xclient.data.l[0] = (state &amp; Hidden) ? 1 : 0;
<a name="l03204"></a>03204             e.xclient.data.l[1] = net_wm_state_hidden;
<a name="l03205"></a>03205             e.xclient.data.l[2] = 0l;
<a name="l03206"></a>03206 
<a name="l03207"></a>03207             XSendEvent(p-&gt;display, p-&gt;root, False, netwm_sendevent_mask, &amp;e);
<a name="l03208"></a>03208         }
<a name="l03209"></a>03209 
<a name="l03210"></a>03210         <span class="keywordflow">if</span> ((mask &amp; FullScreen) &amp;&amp;
<a name="l03211"></a>03211         ((p-&gt;state &amp; FullScreen) != (state &amp; FullScreen))) {
<a name="l03212"></a>03212             e.xclient.data.l[0] = (state &amp; FullScreen) ? 1 : 0;
<a name="l03213"></a>03213             e.xclient.data.l[1] = net_wm_state_fullscreen;
<a name="l03214"></a>03214             e.xclient.data.l[2] = 0l;
<a name="l03215"></a>03215 
<a name="l03216"></a>03216             XSendEvent(p-&gt;display, p-&gt;root, False, netwm_sendevent_mask, &amp;e);
<a name="l03217"></a>03217         }
<a name="l03218"></a>03218 
<a name="l03219"></a>03219         <span class="keywordflow">if</span> ((mask &amp; KeepAbove) &amp;&amp;
<a name="l03220"></a>03220         ((p-&gt;state &amp; KeepAbove) != (state &amp; KeepAbove))) {
<a name="l03221"></a>03221             e.xclient.data.l[0] = (state &amp; KeepAbove) ? 1 : 0;
<a name="l03222"></a>03222             e.xclient.data.l[1] = net_wm_state_above;
<a name="l03223"></a>03223             e.xclient.data.l[2] = 0l;
<a name="l03224"></a>03224 
<a name="l03225"></a>03225             XSendEvent(p-&gt;display, p-&gt;root, False, netwm_sendevent_mask, &amp;e);
<a name="l03226"></a>03226         }
<a name="l03227"></a>03227 
<a name="l03228"></a>03228         <span class="keywordflow">if</span> ((mask &amp; KeepBelow) &amp;&amp;
<a name="l03229"></a>03229         ((p-&gt;state &amp; KeepBelow) != (state &amp; KeepBelow))) {
<a name="l03230"></a>03230             e.xclient.data.l[0] = (state &amp; KeepBelow) ? 1 : 0;
<a name="l03231"></a>03231             e.xclient.data.l[1] = net_wm_state_below;
<a name="l03232"></a>03232             e.xclient.data.l[2] = 0l;
<a name="l03233"></a>03233 
<a name="l03234"></a>03234             XSendEvent(p-&gt;display, p-&gt;root, False, netwm_sendevent_mask, &amp;e);
<a name="l03235"></a>03235         }
<a name="l03236"></a>03236 
<a name="l03237"></a>03237     <span class="keywordflow">if</span> ((mask &amp; StaysOnTop) &amp;&amp; ((p-&gt;state &amp; StaysOnTop) != (state &amp; StaysOnTop))) {
<a name="l03238"></a>03238         e.xclient.data.l[0] = (state &amp; StaysOnTop) ? 1 : 0;
<a name="l03239"></a>03239         e.xclient.data.l[1] = net_wm_state_stays_on_top;
<a name="l03240"></a>03240         e.xclient.data.l[2] = 0l;
<a name="l03241"></a>03241 
<a name="l03242"></a>03242         XSendEvent(p-&gt;display, p-&gt;root, False, netwm_sendevent_mask, &amp;e);
<a name="l03243"></a>03243     }
<a name="l03244"></a>03244 
<a name="l03245"></a>03245         <span class="keywordflow">if</span> ((mask &amp; DemandsAttention) &amp;&amp;
<a name="l03246"></a>03246         ((p-&gt;state &amp; DemandsAttention) != (state &amp; DemandsAttention))) {
<a name="l03247"></a>03247             e.xclient.data.l[0] = (state &amp; DemandsAttention) ? 1 : 0;
<a name="l03248"></a>03248             e.xclient.data.l[1] = net_wm_state_demands_attention;
<a name="l03249"></a>03249             e.xclient.data.l[2] = 0l;
<a name="l03250"></a>03250 
<a name="l03251"></a>03251             XSendEvent(p-&gt;display, p-&gt;root, False, netwm_sendevent_mask, &amp;e);
<a name="l03252"></a>03252         }
<a name="l03253"></a>03253 
<a name="l03254"></a>03254     } <span class="keywordflow">else</span> {
<a name="l03255"></a>03255     p-&gt;state &amp;= ~mask;
<a name="l03256"></a>03256     p-&gt;state |= state;
<a name="l03257"></a>03257 
<a name="l03258"></a>03258     <span class="keywordtype">long</span> data[50];
<a name="l03259"></a>03259     <span class="keywordtype">int</span> count = 0;
<a name="l03260"></a>03260 
<a name="l03261"></a>03261     <span class="comment">// hints</span>
<a name="l03262"></a>03262     <span class="keywordflow">if</span> (p-&gt;state &amp; Modal) data[count++] = net_wm_state_modal;
<a name="l03263"></a>03263     <span class="keywordflow">if</span> (p-&gt;state &amp; MaxVert) data[count++] = net_wm_state_max_vert;
<a name="l03264"></a>03264     <span class="keywordflow">if</span> (p-&gt;state &amp; MaxHoriz) data[count++] = net_wm_state_max_horiz;
<a name="l03265"></a>03265     <span class="keywordflow">if</span> (p-&gt;state &amp; Shaded) data[count++] = net_wm_state_shaded;
<a name="l03266"></a>03266     <span class="keywordflow">if</span> (p-&gt;state &amp; Hidden) data[count++] = net_wm_state_hidden;
<a name="l03267"></a>03267     <span class="keywordflow">if</span> (p-&gt;state &amp; FullScreen) data[count++] = net_wm_state_fullscreen;
<a name="l03268"></a>03268     <span class="keywordflow">if</span> (p-&gt;state &amp; DemandsAttention) data[count++] = net_wm_state_demands_attention;
<a name="l03269"></a>03269 
<a name="l03270"></a>03270     <span class="comment">// policy</span>
<a name="l03271"></a>03271     <span class="keywordflow">if</span> (p-&gt;state &amp; KeepAbove) data[count++] = net_wm_state_above;
<a name="l03272"></a>03272     <span class="keywordflow">if</span> (p-&gt;state &amp; KeepBelow) data[count++] = net_wm_state_below;
<a name="l03273"></a>03273     <span class="keywordflow">if</span> (p-&gt;state &amp; StaysOnTop) data[count++] = net_wm_state_stays_on_top;
<a name="l03274"></a>03274     <span class="keywordflow">if</span> (p-&gt;state &amp; Sticky) data[count++] = net_wm_state_sticky;
<a name="l03275"></a>03275     <span class="keywordflow">if</span> (p-&gt;state &amp; SkipTaskbar) data[count++] = net_wm_state_skip_taskbar;
<a name="l03276"></a>03276     <span class="keywordflow">if</span> (p-&gt;state &amp; SkipPager) data[count++] = net_wm_state_skip_pager;
<a name="l03277"></a>03277 
<a name="l03278"></a>03278 <span class="preprocessor">#ifdef NETWMDEBUG</span>
<a name="l03279"></a>03279 <span class="preprocessor"></span>    fprintf(stderr, <span class="stringliteral">&quot;NETWinInfo::setState: setting state property (%d)\n&quot;</span>, count);
<a name="l03280"></a>03280     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; count; i++) {
<a name="l03281"></a>03281             <span class="keywordtype">char</span>* data_ret = XGetAtomName(p-&gt;display, (Atom) data[i]);
<a name="l03282"></a>03282         fprintf(stderr, <span class="stringliteral">&quot;NETWinInfo::setState:   state %ld &#39;%s&#39;\n&quot;</span>,
<a name="l03283"></a>03283             data[i], data_ret);
<a name="l03284"></a>03284             <span class="keywordflow">if</span> ( data_ret )
<a name="l03285"></a>03285                 XFree( data_ret );
<a name="l03286"></a>03286         }
<a name="l03287"></a>03287 
<a name="l03288"></a>03288 <span class="preprocessor">#endif</span>
<a name="l03289"></a>03289 <span class="preprocessor"></span>
<a name="l03290"></a>03290     XChangeProperty(p-&gt;display, p-&gt;window, net_wm_state, XA_ATOM, 32,
<a name="l03291"></a>03291             PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) data, count);
<a name="l03292"></a>03292     }
<a name="l03293"></a>03293 }
<a name="l03294"></a>03294 
<a name="l03295"></a>03295 
<a name="l03296"></a>03296 <span class="keywordtype">void</span> NETWinInfo::setWindowType(WindowType type) {
<a name="l03297"></a>03297     <span class="keywordflow">if</span> (role != Client) <span class="keywordflow">return</span>;
<a name="l03298"></a>03298 
<a name="l03299"></a>03299     <span class="keywordtype">int</span> len;
<a name="l03300"></a>03300     <span class="keywordtype">long</span> data[2];
<a name="l03301"></a>03301 
<a name="l03302"></a>03302     <span class="keywordflow">switch</span> (type) {
<a name="l03303"></a>03303     <span class="keywordflow">case</span> Override:
<a name="l03304"></a>03304     <span class="comment">// spec extension: override window type.  we must comply with the spec</span>
<a name="l03305"></a>03305     <span class="comment">// and provide a fall back (normal seems best)</span>
<a name="l03306"></a>03306     data[0] = kde_net_wm_window_type_override;
<a name="l03307"></a>03307     data[1] = net_wm_window_type_normal;
<a name="l03308"></a>03308     len = 2;
<a name="l03309"></a>03309     <span class="keywordflow">break</span>;
<a name="l03310"></a>03310 
<a name="l03311"></a>03311     <span class="keywordflow">case</span>  Dialog:
<a name="l03312"></a>03312     data[0] = net_wm_window_type_dialog;
<a name="l03313"></a>03313     data[1] = None;
<a name="l03314"></a>03314     len = 1;
<a name="l03315"></a>03315     <span class="keywordflow">break</span>;
<a name="l03316"></a>03316 
<a name="l03317"></a>03317     <span class="keywordflow">case</span> Menu:
<a name="l03318"></a>03318     data[0] = net_wm_window_type_menu;
<a name="l03319"></a>03319     data[1] = None;
<a name="l03320"></a>03320     len = 1;
<a name="l03321"></a>03321     <span class="keywordflow">break</span>;
<a name="l03322"></a>03322 
<a name="l03323"></a>03323     <span class="keywordflow">case</span> TopMenu:
<a name="l03324"></a>03324     <span class="comment">// spec extension: override window type.  we must comply with the spec</span>
<a name="l03325"></a>03325     <span class="comment">// and provide a fall back (dock seems best)</span>
<a name="l03326"></a>03326     data[0] = kde_net_wm_window_type_topmenu;
<a name="l03327"></a>03327     data[1] = net_wm_window_type_dock;
<a name="l03328"></a>03328     len = 2;
<a name="l03329"></a>03329     <span class="keywordflow">break</span>;
<a name="l03330"></a>03330 
<a name="l03331"></a>03331     <span class="keywordflow">case</span> Tool:
<a name="l03332"></a>03332     data[0] = net_wm_window_type_toolbar;
<a name="l03333"></a>03333     data[1] = None;
<a name="l03334"></a>03334     len = 1;
<a name="l03335"></a>03335     <span class="keywordflow">break</span>;
<a name="l03336"></a>03336 
<a name="l03337"></a>03337     <span class="keywordflow">case</span> Dock:
<a name="l03338"></a>03338     data[0] = net_wm_window_type_dock;
<a name="l03339"></a>03339     data[1] = None;
<a name="l03340"></a>03340     len = 1;
<a name="l03341"></a>03341     <span class="keywordflow">break</span>;
<a name="l03342"></a>03342 
<a name="l03343"></a>03343     <span class="keywordflow">case</span> Desktop:
<a name="l03344"></a>03344     data[0] = net_wm_window_type_desktop;
<a name="l03345"></a>03345     data[1] = None;
<a name="l03346"></a>03346     len = 1;
<a name="l03347"></a>03347     <span class="keywordflow">break</span>;
<a name="l03348"></a>03348 
<a name="l03349"></a>03349     <span class="keywordflow">case</span> Utility:
<a name="l03350"></a>03350     data[0] = net_wm_window_type_utility;
<a name="l03351"></a>03351     data[1] = net_wm_window_type_dialog; <span class="comment">// fallback for old netwm version</span>
<a name="l03352"></a>03352     len = 2;
<a name="l03353"></a>03353     <span class="keywordflow">break</span>;
<a name="l03354"></a>03354 
<a name="l03355"></a>03355     <span class="keywordflow">case</span> Splash:
<a name="l03356"></a>03356     data[0] = net_wm_window_type_splash;
<a name="l03357"></a>03357     data[1] = net_wm_window_type_dock; <span class="comment">// fallback (dock seems best)</span>
<a name="l03358"></a>03358     len = 2;
<a name="l03359"></a>03359     <span class="keywordflow">break</span>;
<a name="l03360"></a>03360 
<a name="l03361"></a>03361     <span class="keywordflow">case</span> DropdownMenu:
<a name="l03362"></a>03362     data[0] = net_wm_window_type_dropdown_menu;
<a name="l03363"></a>03363     data[1] = None;
<a name="l03364"></a>03364     len = 1;
<a name="l03365"></a>03365     <span class="keywordflow">break</span>;
<a name="l03366"></a>03366 
<a name="l03367"></a>03367     <span class="keywordflow">case</span> PopupMenu:
<a name="l03368"></a>03368     data[0] = net_wm_window_type_popup_menu;
<a name="l03369"></a>03369     data[1] = None;
<a name="l03370"></a>03370     len = 1;
<a name="l03371"></a>03371     <span class="keywordflow">break</span>;
<a name="l03372"></a>03372 
<a name="l03373"></a>03373     <span class="keywordflow">case</span> Tooltip:
<a name="l03374"></a>03374     data[0] = net_wm_window_type_tooltip;
<a name="l03375"></a>03375     data[1] = None;
<a name="l03376"></a>03376     len = 1;
<a name="l03377"></a>03377     <span class="keywordflow">break</span>;
<a name="l03378"></a>03378 
<a name="l03379"></a>03379     <span class="keywordflow">case</span> Notification:
<a name="l03380"></a>03380     data[0] = net_wm_window_type_notification;
<a name="l03381"></a>03381     data[1] = None;
<a name="l03382"></a>03382     len = 1;
<a name="l03383"></a>03383     <span class="keywordflow">break</span>;
<a name="l03384"></a>03384 
<a name="l03385"></a>03385     <span class="keywordflow">case</span> ComboBox:
<a name="l03386"></a>03386     data[0] = net_wm_window_type_combobox;
<a name="l03387"></a>03387     data[1] = None;
<a name="l03388"></a>03388     len = 1;
<a name="l03389"></a>03389     <span class="keywordflow">break</span>;
<a name="l03390"></a>03390 
<a name="l03391"></a>03391     <span class="keywordflow">case</span> DNDIcon:
<a name="l03392"></a>03392     data[0] = net_wm_window_type_dnd;
<a name="l03393"></a>03393     data[1] = None;
<a name="l03394"></a>03394     len = 1;
<a name="l03395"></a>03395     <span class="keywordflow">break</span>;
<a name="l03396"></a>03396 
<a name="l03397"></a>03397     <span class="keywordflow">default</span>:
<a name="l03398"></a>03398     <span class="keywordflow">case</span> Normal:
<a name="l03399"></a>03399     data[0] = net_wm_window_type_normal;
<a name="l03400"></a>03400     data[1] = None;
<a name="l03401"></a>03401     len = 1;
<a name="l03402"></a>03402     <span class="keywordflow">break</span>;
<a name="l03403"></a>03403     }
<a name="l03404"></a>03404 
<a name="l03405"></a>03405     XChangeProperty(p-&gt;display, p-&gt;window, net_wm_window_type, XA_ATOM, 32,
<a name="l03406"></a>03406             PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) &amp;data, len);
<a name="l03407"></a>03407 }
<a name="l03408"></a>03408 
<a name="l03409"></a>03409 
<a name="l03410"></a>03410 <span class="keywordtype">void</span> NETWinInfo::setName(<span class="keyword">const</span> <span class="keywordtype">char</span> *name) {
<a name="l03411"></a>03411     <span class="keywordflow">if</span> (role != Client) <span class="keywordflow">return</span>;
<a name="l03412"></a>03412 
<a name="l03413"></a>03413     <span class="keyword">delete</span> [] p-&gt;name;
<a name="l03414"></a>03414     p-&gt;name = nstrdup(name);
<a name="l03415"></a>03415     <span class="keywordflow">if</span>( p-&gt;name[ 0 ] != <span class="charliteral">&#39;\0&#39;</span> )
<a name="l03416"></a>03416         XChangeProperty(p-&gt;display, p-&gt;window, net_wm_name, UTF8_STRING, 8,
<a name="l03417"></a>03417             PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) p-&gt;name,
<a name="l03418"></a>03418             strlen(p-&gt;name));
<a name="l03419"></a>03419     <span class="keywordflow">else</span>
<a name="l03420"></a>03420         XDeleteProperty(p-&gt;display, p-&gt;window, net_wm_name);
<a name="l03421"></a>03421 }
<a name="l03422"></a>03422 
<a name="l03423"></a>03423 
<a name="l03424"></a>03424 <span class="keywordtype">void</span> NETWinInfo::setVisibleName(<span class="keyword">const</span> <span class="keywordtype">char</span> *visibleName) {
<a name="l03425"></a>03425     <span class="keywordflow">if</span> (role != WindowManager) <span class="keywordflow">return</span>;
<a name="l03426"></a>03426 
<a name="l03427"></a>03427     <span class="keyword">delete</span> [] p-&gt;visible_name;
<a name="l03428"></a>03428     p-&gt;visible_name = nstrdup(visibleName);
<a name="l03429"></a>03429     <span class="keywordflow">if</span>( p-&gt;visible_name[ 0 ] != <span class="charliteral">&#39;\0&#39;</span> )
<a name="l03430"></a>03430         XChangeProperty(p-&gt;display, p-&gt;window, net_wm_visible_name, UTF8_STRING, 8,
<a name="l03431"></a>03431             PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) p-&gt;visible_name,
<a name="l03432"></a>03432             strlen(p-&gt;visible_name));
<a name="l03433"></a>03433     <span class="keywordflow">else</span>
<a name="l03434"></a>03434         XDeleteProperty(p-&gt;display, p-&gt;window, net_wm_visible_name);
<a name="l03435"></a>03435 }
<a name="l03436"></a>03436 
<a name="l03437"></a>03437 
<a name="l03438"></a>03438 <span class="keywordtype">void</span> NETWinInfo::setIconName(<span class="keyword">const</span> <span class="keywordtype">char</span> *iconName) {
<a name="l03439"></a>03439     <span class="keywordflow">if</span> (role != Client) <span class="keywordflow">return</span>;
<a name="l03440"></a>03440 
<a name="l03441"></a>03441     <span class="keyword">delete</span> [] p-&gt;icon_name;
<a name="l03442"></a>03442     p-&gt;icon_name = nstrdup(iconName);
<a name="l03443"></a>03443     <span class="keywordflow">if</span>( p-&gt;icon_name[ 0 ] != <span class="charliteral">&#39;\0&#39;</span> )
<a name="l03444"></a>03444         XChangeProperty(p-&gt;display, p-&gt;window, net_wm_icon_name, UTF8_STRING, 8,
<a name="l03445"></a>03445             PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) p-&gt;icon_name,
<a name="l03446"></a>03446             strlen(p-&gt;icon_name));
<a name="l03447"></a>03447     <span class="keywordflow">else</span>
<a name="l03448"></a>03448         XDeleteProperty(p-&gt;display, p-&gt;window, net_wm_icon_name);
<a name="l03449"></a>03449 }
<a name="l03450"></a>03450 
<a name="l03451"></a>03451 
<a name="l03452"></a>03452 <span class="keywordtype">void</span> NETWinInfo::setVisibleIconName(<span class="keyword">const</span> <span class="keywordtype">char</span> *visibleIconName) {
<a name="l03453"></a>03453     <span class="keywordflow">if</span> (role != WindowManager) <span class="keywordflow">return</span>;
<a name="l03454"></a>03454 
<a name="l03455"></a>03455     <span class="keyword">delete</span> [] p-&gt;visible_icon_name;
<a name="l03456"></a>03456     p-&gt;visible_icon_name = nstrdup(visibleIconName);
<a name="l03457"></a>03457     <span class="keywordflow">if</span>( p-&gt;visible_icon_name[ 0 ] != <span class="charliteral">&#39;\0&#39;</span> )
<a name="l03458"></a>03458         XChangeProperty(p-&gt;display, p-&gt;window, net_wm_visible_icon_name, UTF8_STRING, 8,
<a name="l03459"></a>03459             PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) p-&gt;visible_icon_name,
<a name="l03460"></a>03460             strlen(p-&gt;visible_icon_name));
<a name="l03461"></a>03461     <span class="keywordflow">else</span>
<a name="l03462"></a>03462         XDeleteProperty(p-&gt;display, p-&gt;window, net_wm_visible_icon_name);
<a name="l03463"></a>03463 }
<a name="l03464"></a>03464 
<a name="l03465"></a>03465 
<a name="l03466"></a>03466 <span class="keywordtype">void</span> NETWinInfo::setDesktop(<span class="keywordtype">int</span> desktop) {
<a name="l03467"></a>03467     <span class="keywordflow">if</span> (p-&gt;mapping_state_dirty)
<a name="l03468"></a>03468     updateWMState();
<a name="l03469"></a>03469 
<a name="l03470"></a>03470     <span class="keywordflow">if</span> (role == Client &amp;&amp; p-&gt;mapping_state != Withdrawn) {
<a name="l03471"></a>03471     <span class="comment">// we only send a ClientMessage if we are 1) a client and 2) managed</span>
<a name="l03472"></a>03472 
<a name="l03473"></a>03473     <span class="keywordflow">if</span> ( desktop == 0 )
<a name="l03474"></a>03474         <span class="keywordflow">return</span>; <span class="comment">// we can&#39;t do that while being managed</span>
<a name="l03475"></a>03475 
<a name="l03476"></a>03476     XEvent e;
<a name="l03477"></a>03477 
<a name="l03478"></a>03478     e.xclient.type = ClientMessage;
<a name="l03479"></a>03479     e.xclient.message_type = net_wm_desktop;
<a name="l03480"></a>03480     e.xclient.display = p-&gt;display;
<a name="l03481"></a>03481     e.xclient.window = p-&gt;window;
<a name="l03482"></a>03482     e.xclient.format = 32;
<a name="l03483"></a>03483     e.xclient.data.l[0] = desktop == OnAllDesktops ? OnAllDesktops : desktop - 1;
<a name="l03484"></a>03484     e.xclient.data.l[1] = 0l;
<a name="l03485"></a>03485     e.xclient.data.l[2] = 0l;
<a name="l03486"></a>03486     e.xclient.data.l[3] = 0l;
<a name="l03487"></a>03487     e.xclient.data.l[4] = 0l;
<a name="l03488"></a>03488 
<a name="l03489"></a>03489     XSendEvent(p-&gt;display, p-&gt;root, False, netwm_sendevent_mask, &amp;e);
<a name="l03490"></a>03490     } <span class="keywordflow">else</span> {
<a name="l03491"></a>03491     <span class="comment">// otherwise we just set or remove the property directly</span>
<a name="l03492"></a>03492     p-&gt;desktop = desktop;
<a name="l03493"></a>03493     <span class="keywordtype">long</span> d = desktop;
<a name="l03494"></a>03494 
<a name="l03495"></a>03495     <span class="keywordflow">if</span> ( d != OnAllDesktops ) {
<a name="l03496"></a>03496         <span class="keywordflow">if</span> ( d == 0 ) {
<a name="l03497"></a>03497         XDeleteProperty( p-&gt;display, p-&gt;window, net_wm_desktop );
<a name="l03498"></a>03498         <span class="keywordflow">return</span>;
<a name="l03499"></a>03499         }
<a name="l03500"></a>03500 
<a name="l03501"></a>03501         d -= 1;
<a name="l03502"></a>03502     }
<a name="l03503"></a>03503 
<a name="l03504"></a>03504     XChangeProperty(p-&gt;display, p-&gt;window, net_wm_desktop, XA_CARDINAL, 32,
<a name="l03505"></a>03505             PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) &amp;d, 1);
<a name="l03506"></a>03506     }
<a name="l03507"></a>03507 }
<a name="l03508"></a>03508 
<a name="l03509"></a>03509 
<a name="l03510"></a>03510 <span class="keywordtype">void</span> NETWinInfo::setPid(<span class="keywordtype">int</span> pid) {
<a name="l03511"></a>03511     <span class="keywordflow">if</span> (role != Client) <span class="keywordflow">return</span>;
<a name="l03512"></a>03512 
<a name="l03513"></a>03513     p-&gt;pid = pid;
<a name="l03514"></a>03514     <span class="keywordtype">long</span> d = pid;
<a name="l03515"></a>03515     XChangeProperty(p-&gt;display, p-&gt;window, net_wm_pid, XA_CARDINAL, 32,
<a name="l03516"></a>03516             PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) &amp;d, 1);
<a name="l03517"></a>03517 }
<a name="l03518"></a>03518 
<a name="l03519"></a>03519 
<a name="l03520"></a>03520 <span class="keywordtype">void</span> NETWinInfo::setHandledIcons(Bool handled) {
<a name="l03521"></a>03521     <span class="keywordflow">if</span> (role != Client) <span class="keywordflow">return</span>;
<a name="l03522"></a>03522 
<a name="l03523"></a>03523     p-&gt;handled_icons = handled;
<a name="l03524"></a>03524     <span class="keywordtype">long</span> d = handled;
<a name="l03525"></a>03525     XChangeProperty(p-&gt;display, p-&gt;window, net_wm_handled_icons, XA_CARDINAL, 32,
<a name="l03526"></a>03526             PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) &amp;d, 1);
<a name="l03527"></a>03527 }
<a name="l03528"></a>03528 
<a name="l03529"></a>03529 <span class="keywordtype">void</span> NETWinInfo::setStartupId(<span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keywordtype">id</span>) {
<a name="l03530"></a>03530     <span class="keywordflow">if</span> (role != Client) <span class="keywordflow">return</span>;
<a name="l03531"></a>03531 
<a name="l03532"></a>03532     <span class="keyword">delete</span>[] p-&gt;startup_id;
<a name="l03533"></a>03533     p-&gt;startup_id = nstrdup(<span class="keywordtype">id</span>);
<a name="l03534"></a>03534     XChangeProperty(p-&gt;display, p-&gt;window, net_startup_id, UTF8_STRING, 8,
<a name="l03535"></a>03535         PropModeReplace, reinterpret_cast&lt; unsigned char* &gt;( p-&gt;startup_id ),
<a name="l03536"></a>03536         strlen( p-&gt;startup_id ));
<a name="l03537"></a>03537 }
<a name="l03538"></a>03538 
<a name="l03539"></a>03539 <span class="keywordtype">void</span> NETWinInfo::setAllowedActions( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> actions ) {
<a name="l03540"></a>03540     <span class="keywordflow">if</span>( role != WindowManager )
<a name="l03541"></a>03541         <span class="keywordflow">return</span>;
<a name="l03542"></a>03542     <span class="keywordtype">long</span> data[50];
<a name="l03543"></a>03543     <span class="keywordtype">int</span> count = 0;
<a name="l03544"></a>03544 
<a name="l03545"></a>03545     p-&gt;allowed_actions = actions;
<a name="l03546"></a>03546     <span class="keywordflow">if</span> (p-&gt;allowed_actions &amp; ActionMove) data[count++] = net_wm_action_move;
<a name="l03547"></a>03547     <span class="keywordflow">if</span> (p-&gt;allowed_actions &amp; ActionResize) data[count++] = net_wm_action_resize;
<a name="l03548"></a>03548     <span class="keywordflow">if</span> (p-&gt;allowed_actions &amp; ActionMinimize) data[count++] = net_wm_action_minimize;
<a name="l03549"></a>03549     <span class="keywordflow">if</span> (p-&gt;allowed_actions &amp; ActionShade) data[count++] = net_wm_action_shade;
<a name="l03550"></a>03550     <span class="keywordflow">if</span> (p-&gt;allowed_actions &amp; ActionStick) data[count++] = net_wm_action_stick;
<a name="l03551"></a>03551     <span class="keywordflow">if</span> (p-&gt;allowed_actions &amp; ActionMaxVert) data[count++] = net_wm_action_max_vert;
<a name="l03552"></a>03552     <span class="keywordflow">if</span> (p-&gt;allowed_actions &amp; ActionMaxHoriz) data[count++] = net_wm_action_max_horiz;
<a name="l03553"></a>03553     <span class="keywordflow">if</span> (p-&gt;allowed_actions &amp; ActionFullScreen) data[count++] = net_wm_action_fullscreen;
<a name="l03554"></a>03554     <span class="keywordflow">if</span> (p-&gt;allowed_actions &amp; ActionChangeDesktop) data[count++] = net_wm_action_change_desk;
<a name="l03555"></a>03555     <span class="keywordflow">if</span> (p-&gt;allowed_actions &amp; ActionClose) data[count++] = net_wm_action_close;
<a name="l03556"></a>03556 
<a name="l03557"></a>03557 <span class="preprocessor">#ifdef NETWMDEBUG</span>
<a name="l03558"></a>03558 <span class="preprocessor"></span>    fprintf(stderr, <span class="stringliteral">&quot;NETWinInfo::setAllowedActions: setting property (%d)\n&quot;</span>, count);
<a name="l03559"></a>03559     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; count; i++) {
<a name="l03560"></a>03560         <span class="keywordtype">char</span>* data_ret = XGetAtomName(p-&gt;display, (Atom) data[i]);
<a name="l03561"></a>03561         fprintf(stderr, <span class="stringliteral">&quot;NETWinInfo::setAllowedActions:   action %ld &#39;%s&#39;\n&quot;</span>,
<a name="l03562"></a>03562         data[i], data_ret);
<a name="l03563"></a>03563         <span class="keywordflow">if</span> ( data_ret )
<a name="l03564"></a>03564             XFree(data_ret);
<a name="l03565"></a>03565     }
<a name="l03566"></a>03566 <span class="preprocessor">#endif</span>
<a name="l03567"></a>03567 <span class="preprocessor"></span>
<a name="l03568"></a>03568     XChangeProperty(p-&gt;display, p-&gt;window, net_wm_allowed_actions, XA_ATOM, 32,
<a name="l03569"></a>03569             PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) data, count);
<a name="l03570"></a>03570 }
<a name="l03571"></a>03571 
<a name="l03572"></a>03572 <span class="keywordtype">void</span> NETWinInfo::setKDESystemTrayWinFor(Window window) {
<a name="l03573"></a>03573     <span class="keywordflow">if</span> (role != Client) <span class="keywordflow">return</span>;
<a name="l03574"></a>03574 
<a name="l03575"></a>03575     p-&gt;kde_system_tray_win_for = window;
<a name="l03576"></a>03576     XChangeProperty(p-&gt;display, p-&gt;window, kde_net_wm_system_tray_window_for,
<a name="l03577"></a>03577             XA_WINDOW, 32, PropModeReplace,
<a name="l03578"></a>03578             (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) &amp;(p-&gt;kde_system_tray_win_for), 1);
<a name="l03579"></a>03579 }
<a name="l03580"></a>03580 
<a name="l03581"></a>03581 
<a name="l03582"></a>03582 <span class="keywordtype">void</span> NETWinInfo::setKDEFrameStrut(<a class="code" href="structNETStrut.html">NETStrut</a> strut) {
<a name="l03583"></a>03583     setFrameExtents( strut );
<a name="l03584"></a>03584 }
<a name="l03585"></a>03585 
<a name="l03586"></a>03586 <span class="keywordtype">void</span> NETWinInfo::setFrameExtents(<a class="code" href="structNETStrut.html">NETStrut</a> strut) {
<a name="l03587"></a>03587     <span class="keywordflow">if</span> (role != WindowManager) <span class="keywordflow">return</span>;
<a name="l03588"></a>03588 
<a name="l03589"></a>03589     p-&gt;frame_strut = strut;
<a name="l03590"></a>03590 
<a name="l03591"></a>03591     <span class="keywordtype">long</span> d[4];
<a name="l03592"></a>03592     d[0] = strut.<a class="code" href="structNETStrut.html#a3ffe1d55e64632f4cdc1225ae8a301df" title="Left border of the strut.">left</a>;
<a name="l03593"></a>03593     d[1] = strut.<a class="code" href="structNETStrut.html#a46c92f5dc806d6def2390f258d00b80e" title="Right border of the strut.">right</a>;
<a name="l03594"></a>03594     d[2] = strut.<a class="code" href="structNETStrut.html#ac359ac56290a66002010f64dc4842aa2" title="Top border of the strut.">top</a>;
<a name="l03595"></a>03595     d[3] = strut.<a class="code" href="structNETStrut.html#a031e023bb8f0c8cf3d00b748c7dd7ca7" title="Bottom border of the strut.">bottom</a>;
<a name="l03596"></a>03596 
<a name="l03597"></a>03597     XChangeProperty(p-&gt;display, p-&gt;window, net_frame_extents, XA_CARDINAL, 32,
<a name="l03598"></a>03598             PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) d, 4);
<a name="l03599"></a>03599     XChangeProperty(p-&gt;display, p-&gt;window, kde_net_wm_frame_strut, XA_CARDINAL, 32,
<a name="l03600"></a>03600             PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) d, 4);
<a name="l03601"></a>03601 }
<a name="l03602"></a>03602 
<a name="l03603"></a>03603 
<a name="l03604"></a>03604 <span class="keywordtype">void</span> NETWinInfo::kdeGeometry(<a class="code" href="structNETRect.html" title="Simple rectangle class for NET classes.">NETRect</a>&amp; frame, <a class="code" href="structNETRect.html" title="Simple rectangle class for NET classes.">NETRect</a>&amp; window) {
<a name="l03605"></a>03605     <span class="keywordflow">if</span> (p-&gt;win_geom.size.width == 0 || p-&gt;win_geom.size.height == 0) {
<a name="l03606"></a>03606     Window unused;
<a name="l03607"></a>03607     <span class="keywordtype">int</span> x, y;
<a name="l03608"></a>03608     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w, h, junk;
<a name="l03609"></a>03609     XGetGeometry(p-&gt;display, p-&gt;window, &amp;unused, &amp;x, &amp;y, &amp;w, &amp;h, &amp;junk, &amp;junk);
<a name="l03610"></a>03610     XTranslateCoordinates(p-&gt;display, p-&gt;window, p-&gt;root, 0, 0, &amp;x, &amp;y, &amp;unused
<a name="l03611"></a>03611                   );
<a name="l03612"></a>03612 
<a name="l03613"></a>03613     p-&gt;win_geom.pos.x = x;
<a name="l03614"></a>03614     p-&gt;win_geom.pos.y = y;
<a name="l03615"></a>03615 
<a name="l03616"></a>03616     p-&gt;win_geom.size.width = w;
<a name="l03617"></a>03617     p-&gt;win_geom.size.height = h;
<a name="l03618"></a>03618     }
<a name="l03619"></a>03619 <span class="comment">// TODO try to work also without _KDE_NET_WM_FRAME_STRUT</span>
<a name="l03620"></a>03620     window = p-&gt;win_geom;
<a name="l03621"></a>03621 
<a name="l03622"></a>03622     frame.<a class="code" href="structNETRect.html#a2604a60ef01bb245df79ada826b1718d" title="Position of the rectangle.">pos</a>.<a class="code" href="structNETPoint.html#a662b6d948b949dabcaf2e955a078e63f" title="x coordinate.">x</a> = window.<a class="code" href="structNETRect.html#a2604a60ef01bb245df79ada826b1718d" title="Position of the rectangle.">pos</a>.<a class="code" href="structNETPoint.html#a662b6d948b949dabcaf2e955a078e63f" title="x coordinate.">x</a> - p-&gt;frame_strut.left;
<a name="l03623"></a>03623     frame.<a class="code" href="structNETRect.html#a2604a60ef01bb245df79ada826b1718d" title="Position of the rectangle.">pos</a>.<a class="code" href="structNETPoint.html#ac64b3831f6fd7f1874f7e344beb117bd" title="y coordinate">y</a> = window.<a class="code" href="structNETRect.html#a2604a60ef01bb245df79ada826b1718d" title="Position of the rectangle.">pos</a>.<a class="code" href="structNETPoint.html#ac64b3831f6fd7f1874f7e344beb117bd" title="y coordinate">y</a> - p-&gt;frame_strut.top;
<a name="l03624"></a>03624     frame.<a class="code" href="structNETRect.html#a97102c18e356965d829855c570bb45ca" title="Size of the rectangle.">size</a>.<a class="code" href="structNETSize.html#af2e6a5fcac88037fa745273e85c5e219" title="Width.">width</a> = window.<a class="code" href="structNETRect.html#a97102c18e356965d829855c570bb45ca" title="Size of the rectangle.">size</a>.<a class="code" href="structNETSize.html#af2e6a5fcac88037fa745273e85c5e219" title="Width.">width</a> + p-&gt;frame_strut.left + p-&gt;frame_strut.right;
<a name="l03625"></a>03625     frame.<a class="code" href="structNETRect.html#a97102c18e356965d829855c570bb45ca" title="Size of the rectangle.">size</a>.<a class="code" href="structNETSize.html#a0a6def5683983f7f3478192248ef2f8e" title="Height.">height</a> = window.<a class="code" href="structNETRect.html#a97102c18e356965d829855c570bb45ca" title="Size of the rectangle.">size</a>.<a class="code" href="structNETSize.html#a0a6def5683983f7f3478192248ef2f8e" title="Height.">height</a> + p-&gt;frame_strut.top + p-&gt;frame_strut.bottom;
<a name="l03626"></a>03626 }
<a name="l03627"></a>03627 
<a name="l03628"></a>03628 
<a name="l03629"></a>03629 <a class="code" href="structNETIcon.html" title="Simple icon class for NET classes.">NETIcon</a> NETWinInfo::icon(<span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height)<span class="keyword"> const </span>{
<a name="l03630"></a>03630     <span class="keywordflow">return</span> iconInternal( p-&gt;icons, p-&gt;icon_count, width, height );
<a name="l03631"></a>03631 }
<a name="l03632"></a>03632 
<a name="l03633"></a>03633 <a class="code" href="structNETIcon.html" title="Simple icon class for NET classes.">NETIcon</a> NETWinInfo::iconInternal(NETRArray&lt;NETIcon&gt;&amp; icons, <span class="keywordtype">int</span> icon_count, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height)<span class="keyword"> const </span>{
<a name="l03634"></a>03634     <a class="code" href="structNETIcon.html" title="Simple icon class for NET classes.">NETIcon</a> result;
<a name="l03635"></a>03635 
<a name="l03636"></a>03636     <span class="keywordflow">if</span> ( !icon_count ) {
<a name="l03637"></a>03637     result.<a class="code" href="structNETIcon.html#a6506944fe7143f0a37bbe58cc0d8df94" title="Size of the icon.">size</a>.<a class="code" href="structNETSize.html#af2e6a5fcac88037fa745273e85c5e219" title="Width.">width</a> = 0;
<a name="l03638"></a>03638     result.<a class="code" href="structNETIcon.html#a6506944fe7143f0a37bbe58cc0d8df94" title="Size of the icon.">size</a>.<a class="code" href="structNETSize.html#a0a6def5683983f7f3478192248ef2f8e" title="Height.">height</a> = 0;
<a name="l03639"></a>03639     result.<a class="code" href="structNETIcon.html#aaa6c9f9828e7d2f9a29f408529a68822" title="Image data for the icon.">data</a> = 0;
<a name="l03640"></a>03640     <span class="keywordflow">return</span> result;
<a name="l03641"></a>03641     }
<a name="l03642"></a>03642 
<a name="l03643"></a>03643     <span class="comment">// find the largest icon</span>
<a name="l03644"></a>03644     result = icons[0];
<a name="l03645"></a>03645     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 1; i &lt; icons.size(); i++) {
<a name="l03646"></a>03646     <span class="keywordflow">if</span>( icons[i].size.width &gt;= result.<a class="code" href="structNETIcon.html#a6506944fe7143f0a37bbe58cc0d8df94" title="Size of the icon.">size</a>.<a class="code" href="structNETSize.html#af2e6a5fcac88037fa745273e85c5e219" title="Width.">width</a> &amp;&amp;
<a name="l03647"></a>03647          icons[i].size.height &gt;= result.<a class="code" href="structNETIcon.html#a6506944fe7143f0a37bbe58cc0d8df94" title="Size of the icon.">size</a>.<a class="code" href="structNETSize.html#a0a6def5683983f7f3478192248ef2f8e" title="Height.">height</a> )
<a name="l03648"></a>03648         result = icons[i];
<a name="l03649"></a>03649     }
<a name="l03650"></a>03650 
<a name="l03651"></a>03651     <span class="comment">// return the largest icon if w and h are -1</span>
<a name="l03652"></a>03652     <span class="keywordflow">if</span> (width == -1 &amp;&amp; height == -1) <span class="keywordflow">return</span> result;
<a name="l03653"></a>03653 
<a name="l03654"></a>03654     <span class="comment">// find the icon that&#39;s closest in size to w x h...</span>
<a name="l03655"></a>03655     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; icons.size(); i++) {
<a name="l03656"></a>03656     <span class="keywordflow">if</span> ((icons[i].size.width &gt;= width &amp;&amp;
<a name="l03657"></a>03657          icons[i].size.width &lt; result.<a class="code" href="structNETIcon.html#a6506944fe7143f0a37bbe58cc0d8df94" title="Size of the icon.">size</a>.<a class="code" href="structNETSize.html#af2e6a5fcac88037fa745273e85c5e219" title="Width.">width</a>) &amp;&amp;
<a name="l03658"></a>03658         (icons[i].size.height &gt;= height &amp;&amp;
<a name="l03659"></a>03659          icons[i].size.height &lt; result.<a class="code" href="structNETIcon.html#a6506944fe7143f0a37bbe58cc0d8df94" title="Size of the icon.">size</a>.<a class="code" href="structNETSize.html#a0a6def5683983f7f3478192248ef2f8e" title="Height.">height</a>))
<a name="l03660"></a>03660         result = icons[i];
<a name="l03661"></a>03661     }
<a name="l03662"></a>03662 
<a name="l03663"></a>03663     <span class="keywordflow">return</span> result;
<a name="l03664"></a>03664 }
<a name="l03665"></a>03665 
<a name="l03666"></a>03666 <span class="keywordtype">void</span> NETWinInfo::setUserTime( Time time ) {
<a name="l03667"></a>03667     <span class="keywordflow">if</span> (role != Client) <span class="keywordflow">return</span>;
<a name="l03668"></a>03668 
<a name="l03669"></a>03669     p-&gt;user_time = time;
<a name="l03670"></a>03670     <span class="keywordtype">long</span> d = time;
<a name="l03671"></a>03671     XChangeProperty(p-&gt;display, p-&gt;window, net_wm_user_time, XA_CARDINAL, 32,
<a name="l03672"></a>03672             PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) &amp;d, 1);
<a name="l03673"></a>03673 }
<a name="l03674"></a>03674 
<a name="l03675"></a>03675 
<a name="l03676"></a>03676 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> NETWinInfo::event(XEvent *ev )
<a name="l03677"></a>03677 {
<a name="l03678"></a>03678     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> props[ 1 ];
<a name="l03679"></a>03679     event( ev, props, 1 );
<a name="l03680"></a>03680     <span class="keywordflow">return</span> props[ 0 ];
<a name="l03681"></a>03681 }
<a name="l03682"></a>03682 
<a name="l03683"></a>03683 <span class="keywordtype">void</span> NETWinInfo::event(XEvent *event, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>* properties, <span class="keywordtype">int</span> properties_size ) {
<a name="l03684"></a>03684     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> props[ PROPERTIES_SIZE ] = { 0, 0 };
<a name="l03685"></a>03685     assert( PROPERTIES_SIZE == 2 ); <span class="comment">// add elements above</span>
<a name="l03686"></a>03686     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>&amp; dirty = props[ PROTOCOLS ];
<a name="l03687"></a>03687     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>&amp; dirty2 = props[ PROTOCOLS2 ];
<a name="l03688"></a>03688     <span class="keywordtype">bool</span> do_update = <span class="keyword">false</span>;
<a name="l03689"></a>03689 
<a name="l03690"></a>03690     <span class="keywordflow">if</span> (role == WindowManager &amp;&amp; event-&gt;type == ClientMessage &amp;&amp;
<a name="l03691"></a>03691     event-&gt;xclient.format == 32) {
<a name="l03692"></a>03692 
<a name="l03693"></a>03693 <span class="preprocessor">#ifdef NETWMDEBUG</span>
<a name="l03694"></a>03694 <span class="preprocessor"></span>        fprintf(stderr, <span class="stringliteral">&quot;NETWinInfo::event: handling ClientMessage event\n&quot;</span>);
<a name="l03695"></a>03695 <span class="preprocessor">#endif // NETWMDEBUG</span>
<a name="l03696"></a>03696 <span class="preprocessor"></span>
<a name="l03697"></a>03697     <span class="keywordflow">if</span> (event-&gt;xclient.message_type == net_wm_state) {
<a name="l03698"></a>03698         dirty = WMState;
<a name="l03699"></a>03699 
<a name="l03700"></a>03700         <span class="comment">// we need to generate a change mask</span>
<a name="l03701"></a>03701 
<a name="l03702"></a>03702 <span class="preprocessor">#ifdef NETWMDEBUG</span>
<a name="l03703"></a>03703 <span class="preprocessor"></span>        fprintf(stderr,
<a name="l03704"></a>03704             <span class="stringliteral">&quot;NETWinInfo::event: state client message, getting new state/mask\n&quot;</span>);
<a name="l03705"></a>03705 <span class="preprocessor">#endif</span>
<a name="l03706"></a>03706 <span class="preprocessor"></span>
<a name="l03707"></a>03707         <span class="keywordtype">int</span> i;
<a name="l03708"></a>03708         <span class="keywordtype">long</span> state = 0, mask = 0;
<a name="l03709"></a>03709 
<a name="l03710"></a>03710         <span class="keywordflow">for</span> (i = 1; i &lt; 3; i++) {
<a name="l03711"></a>03711 <span class="preprocessor">#ifdef NETWMDEBUG</span>
<a name="l03712"></a>03712 <span class="preprocessor"></span>                <span class="keywordtype">char</span>* debug_txt = XGetAtomName(p-&gt;display, (Atom) event-&gt;xclient.data.l[i]);
<a name="l03713"></a>03713         fprintf(stderr, <span class="stringliteral">&quot;NETWinInfo::event:  message %ld &#39;%s&#39;\n&quot;</span>,
<a name="l03714"></a>03714             event-&gt;xclient.data.l[i], debug_txt );
<a name="l03715"></a>03715                 <span class="keywordflow">if</span> ( debug_txt )
<a name="l03716"></a>03716                     XFree( debug_txt );
<a name="l03717"></a>03717 <span class="preprocessor">#endif</span>
<a name="l03718"></a>03718 <span class="preprocessor"></span>
<a name="l03719"></a>03719         <span class="keywordflow">if</span> ((Atom) event-&gt;xclient.data.l[i] == net_wm_state_modal)
<a name="l03720"></a>03720             mask |= Modal;
<a name="l03721"></a>03721         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) event-&gt;xclient.data.l[i] == net_wm_state_sticky)
<a name="l03722"></a>03722             mask |= Sticky;
<a name="l03723"></a>03723         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) event-&gt;xclient.data.l[i] == net_wm_state_max_vert)
<a name="l03724"></a>03724             mask |= MaxVert;
<a name="l03725"></a>03725         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) event-&gt;xclient.data.l[i] == net_wm_state_max_horiz)
<a name="l03726"></a>03726             mask |= MaxHoriz;
<a name="l03727"></a>03727         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) event-&gt;xclient.data.l[i] == net_wm_state_shaded)
<a name="l03728"></a>03728             mask |= Shaded;
<a name="l03729"></a>03729         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) event-&gt;xclient.data.l[i] == net_wm_state_skip_taskbar)
<a name="l03730"></a>03730             mask |= SkipTaskbar;
<a name="l03731"></a>03731                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) event-&gt;xclient.data.l[i] == net_wm_state_skip_pager)
<a name="l03732"></a>03732             mask |= SkipPager;
<a name="l03733"></a>03733                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) event-&gt;xclient.data.l[i] == net_wm_state_hidden)
<a name="l03734"></a>03734             mask |= Hidden;
<a name="l03735"></a>03735                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) event-&gt;xclient.data.l[i] == net_wm_state_fullscreen)
<a name="l03736"></a>03736             mask |= FullScreen;
<a name="l03737"></a>03737                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) event-&gt;xclient.data.l[i] == net_wm_state_above)
<a name="l03738"></a>03738             mask |= KeepAbove;
<a name="l03739"></a>03739                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) event-&gt;xclient.data.l[i] == net_wm_state_below)
<a name="l03740"></a>03740             mask |= KeepBelow;
<a name="l03741"></a>03741                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) event-&gt;xclient.data.l[i] == net_wm_state_demands_attention)
<a name="l03742"></a>03742             mask |= DemandsAttention;
<a name="l03743"></a>03743         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) event-&gt;xclient.data.l[i] == net_wm_state_stays_on_top)
<a name="l03744"></a>03744             mask |= StaysOnTop;
<a name="l03745"></a>03745         }
<a name="l03746"></a>03746 
<a name="l03747"></a>03747         <span class="comment">// when removing, we just leave newstate == 0</span>
<a name="l03748"></a>03748         <span class="keywordflow">switch</span> (event-&gt;xclient.data.l[0]) {
<a name="l03749"></a>03749         <span class="keywordflow">case</span> 1: <span class="comment">// set</span>
<a name="l03750"></a>03750         <span class="comment">// to set... the change state should be the same as the mask</span>
<a name="l03751"></a>03751         state = mask;
<a name="l03752"></a>03752         <span class="keywordflow">break</span>;
<a name="l03753"></a>03753 
<a name="l03754"></a>03754         <span class="keywordflow">case</span> 2: <span class="comment">// toggle</span>
<a name="l03755"></a>03755         <span class="comment">// to toggle, we need to xor the current state with the new state</span>
<a name="l03756"></a>03756         state = (p-&gt;state &amp; mask) ^ mask;
<a name="l03757"></a>03757         <span class="keywordflow">break</span>;
<a name="l03758"></a>03758 
<a name="l03759"></a>03759         <span class="keywordflow">default</span>:
<a name="l03760"></a>03760         <span class="comment">// to clear state, the new state should stay zero</span>
<a name="l03761"></a>03761         ;
<a name="l03762"></a>03762         }
<a name="l03763"></a>03763 
<a name="l03764"></a>03764 <span class="preprocessor">#ifdef NETWMDEBUG</span>
<a name="l03765"></a>03765 <span class="preprocessor"></span>        fprintf(stderr, <span class="stringliteral">&quot;NETWinInfo::event: calling changeState(%lx, %lx)\n&quot;</span>,
<a name="l03766"></a>03766             state, mask);
<a name="l03767"></a>03767 <span class="preprocessor">#endif</span>
<a name="l03768"></a>03768 <span class="preprocessor"></span>
<a name="l03769"></a>03769         changeState(state, mask);
<a name="l03770"></a>03770     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (event-&gt;xclient.message_type == net_wm_desktop) {
<a name="l03771"></a>03771         dirty = WMDesktop;
<a name="l03772"></a>03772 
<a name="l03773"></a>03773         <span class="keywordflow">if</span>( event-&gt;xclient.data.l[0] == OnAllDesktops )
<a name="l03774"></a>03774         changeDesktop( OnAllDesktops );
<a name="l03775"></a>03775         <span class="keywordflow">else</span>
<a name="l03776"></a>03776             changeDesktop(event-&gt;xclient.data.l[0] + 1);
<a name="l03777"></a>03777     }
<a name="l03778"></a>03778     }
<a name="l03779"></a>03779 
<a name="l03780"></a>03780     <span class="keywordflow">if</span> (event-&gt;type == PropertyNotify) {
<a name="l03781"></a>03781 
<a name="l03782"></a>03782 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l03783"></a>03783 <span class="preprocessor"></span>    fprintf(stderr, <span class="stringliteral">&quot;NETWinInfo::event: handling PropertyNotify event\n&quot;</span>);
<a name="l03784"></a>03784 <span class="preprocessor">#endif</span>
<a name="l03785"></a>03785 <span class="preprocessor"></span>
<a name="l03786"></a>03786     XEvent pe = *event;
<a name="l03787"></a>03787 
<a name="l03788"></a>03788     Bool done = False;
<a name="l03789"></a>03789     Bool compaction = False;
<a name="l03790"></a>03790     <span class="keywordflow">while</span> (! done) {
<a name="l03791"></a>03791 
<a name="l03792"></a>03792 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l03793"></a>03793 <span class="preprocessor"></span>        fprintf(stderr, <span class="stringliteral">&quot;NETWinInfo::event: loop fire\n&quot;</span>);
<a name="l03794"></a>03794 <span class="preprocessor">#endif</span>
<a name="l03795"></a>03795 <span class="preprocessor"></span>
<a name="l03796"></a>03796         <span class="keywordflow">if</span> (pe.xproperty.atom == net_wm_name)
<a name="l03797"></a>03797         dirty |= WMName;
<a name="l03798"></a>03798         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == net_wm_visible_name)
<a name="l03799"></a>03799         dirty |= WMVisibleName;
<a name="l03800"></a>03800         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == net_wm_desktop)
<a name="l03801"></a>03801         dirty |= WMDesktop;
<a name="l03802"></a>03802         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == net_wm_window_type)
<a name="l03803"></a>03803         dirty |=WMWindowType;
<a name="l03804"></a>03804         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == net_wm_state)
<a name="l03805"></a>03805         dirty |= WMState;
<a name="l03806"></a>03806         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == net_wm_strut)
<a name="l03807"></a>03807         dirty |= WMStrut;
<a name="l03808"></a>03808         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == net_wm_extended_strut)
<a name="l03809"></a>03809         dirty2 |= WM2ExtendedStrut;
<a name="l03810"></a>03810         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == net_wm_icon_geometry)
<a name="l03811"></a>03811         dirty |= WMIconGeometry;
<a name="l03812"></a>03812         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == net_wm_icon)
<a name="l03813"></a>03813         dirty |= WMIcon;
<a name="l03814"></a>03814         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == net_wm_pid)
<a name="l03815"></a>03815         dirty |= WMPid;
<a name="l03816"></a>03816         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == net_wm_handled_icons)
<a name="l03817"></a>03817         dirty |= WMHandledIcons;
<a name="l03818"></a>03818         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == net_startup_id)
<a name="l03819"></a>03819         dirty2 |= WM2StartupId;
<a name="l03820"></a>03820         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == net_wm_allowed_actions)
<a name="l03821"></a>03821         dirty2 |= WM2AllowedActions;
<a name="l03822"></a>03822         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == kde_net_wm_system_tray_window_for)
<a name="l03823"></a>03823         dirty |= WMKDESystemTrayWinFor;
<a name="l03824"></a>03824         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == xa_wm_state)
<a name="l03825"></a>03825         dirty |= XAWMState;
<a name="l03826"></a>03826         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == net_frame_extents)
<a name="l03827"></a>03827         dirty |= WMFrameExtents;
<a name="l03828"></a>03828         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == kde_net_wm_frame_strut)
<a name="l03829"></a>03829         dirty |= WMKDEFrameStrut;
<a name="l03830"></a>03830         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == net_wm_icon_name)
<a name="l03831"></a>03831         dirty |= WMIconName;
<a name="l03832"></a>03832         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == net_wm_visible_icon_name)
<a name="l03833"></a>03833         dirty |= WMVisibleIconName;
<a name="l03834"></a>03834         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == net_wm_user_time)
<a name="l03835"></a>03835         dirty2 |= WM2UserTime;
<a name="l03836"></a>03836             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == XA_WM_HINTS)
<a name="l03837"></a>03837                 dirty2 |= WM2GroupLeader;
<a name="l03838"></a>03838             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == XA_WM_TRANSIENT_FOR)
<a name="l03839"></a>03839                 dirty2 |= WM2TransientFor;
<a name="l03840"></a>03840             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == XA_WM_CLASS)
<a name="l03841"></a>03841                 dirty2 |= WM2WindowClass;
<a name="l03842"></a>03842             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == wm_window_role)
<a name="l03843"></a>03843                 dirty2 |= WM2WindowRole;
<a name="l03844"></a>03844             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pe.xproperty.atom == XA_WM_CLIENT_MACHINE)
<a name="l03845"></a>03845                 dirty2 |= WM2ClientMachine;
<a name="l03846"></a>03846         <span class="keywordflow">else</span> {
<a name="l03847"></a>03847 
<a name="l03848"></a>03848 <span class="preprocessor">#ifdef    NETWMDEBUG</span>
<a name="l03849"></a>03849 <span class="preprocessor"></span>        fprintf(stderr, <span class="stringliteral">&quot;NETWinInfo::event: putting back event and breaking\n&quot;</span>);
<a name="l03850"></a>03850 <span class="preprocessor">#endif</span>
<a name="l03851"></a>03851 <span class="preprocessor"></span>
<a name="l03852"></a>03852         <span class="keywordflow">if</span> ( compaction )
<a name="l03853"></a>03853             XPutBackEvent(p-&gt;display, &amp;pe);
<a name="l03854"></a>03854         <span class="keywordflow">break</span>;
<a name="l03855"></a>03855         }
<a name="l03856"></a>03856 
<a name="l03857"></a>03857         <span class="keywordflow">if</span> (XCheckTypedWindowEvent(p-&gt;display, p-&gt;window, PropertyNotify, &amp;pe) )
<a name="l03858"></a>03858         compaction = True;
<a name="l03859"></a>03859         <span class="keywordflow">else</span>
<a name="l03860"></a>03860         <span class="keywordflow">break</span>;
<a name="l03861"></a>03861     }
<a name="l03862"></a>03862 
<a name="l03863"></a>03863     do_update = <span class="keyword">true</span>;
<a name="l03864"></a>03864     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (event-&gt;type == ConfigureNotify) {
<a name="l03865"></a>03865 
<a name="l03866"></a>03866 <span class="preprocessor">#ifdef NETWMDEBUG</span>
<a name="l03867"></a>03867 <span class="preprocessor"></span>    fprintf(stderr, <span class="stringliteral">&quot;NETWinInfo::event: handling ConfigureNotify event\n&quot;</span>);
<a name="l03868"></a>03868 <span class="preprocessor">#endif</span>
<a name="l03869"></a>03869 <span class="preprocessor"></span>
<a name="l03870"></a>03870     dirty |= WMGeometry;
<a name="l03871"></a>03871 
<a name="l03872"></a>03872     <span class="comment">// update window geometry</span>
<a name="l03873"></a>03873     p-&gt;win_geom.pos.x = <span class="keyword">event</span>-&gt;xconfigure.x;
<a name="l03874"></a>03874     p-&gt;win_geom.pos.y = <span class="keyword">event</span>-&gt;xconfigure.y;
<a name="l03875"></a>03875     p-&gt;win_geom.size.width = <span class="keyword">event</span>-&gt;xconfigure.width;
<a name="l03876"></a>03876     p-&gt;win_geom.size.height = <span class="keyword">event</span>-&gt;xconfigure.height;
<a name="l03877"></a>03877     }
<a name="l03878"></a>03878 
<a name="l03879"></a>03879     <span class="keywordflow">if</span>( do_update )
<a name="l03880"></a>03880         update( props );
<a name="l03881"></a>03881 
<a name="l03882"></a>03882     <span class="keywordflow">if</span>( properties_size &gt; PROPERTIES_SIZE )
<a name="l03883"></a>03883         properties_size = PROPERTIES_SIZE;
<a name="l03884"></a>03884     <span class="keywordflow">for</span>( <span class="keywordtype">int</span> i = 0;
<a name="l03885"></a>03885          i &lt; properties_size;
<a name="l03886"></a>03886          ++i )
<a name="l03887"></a>03887         properties[ i ] = props[ i ];
<a name="l03888"></a>03888 }
<a name="l03889"></a>03889 
<a name="l03890"></a>03890 <span class="keywordtype">void</span> NETWinInfo::updateWMState() {
<a name="l03891"></a>03891     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> props[ PROPERTIES_SIZE ] = { XAWMState, 0 };
<a name="l03892"></a>03892     assert( PROPERTIES_SIZE == 2 ); <span class="comment">// add elements above</span>
<a name="l03893"></a>03893     update( props );
<a name="l03894"></a>03894 }
<a name="l03895"></a>03895 
<a name="l03896"></a>03896 <span class="keywordtype">void</span> NETWinInfo::update(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> dirty_props[]) {
<a name="l03897"></a>03897     Atom type_ret;
<a name="l03898"></a>03898     <span class="keywordtype">int</span> format_ret;
<a name="l03899"></a>03899     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> nitems_ret, unused;
<a name="l03900"></a>03900     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *data_ret;
<a name="l03901"></a>03901     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> props[ PROPERTIES_SIZE ];
<a name="l03902"></a>03902     <span class="keywordflow">for</span>( <span class="keywordtype">int</span> i = 0;
<a name="l03903"></a>03903          i &lt; PROPERTIES_SIZE;
<a name="l03904"></a>03904          ++i )
<a name="l03905"></a>03905         props[ i ] = dirty_props[ i ] &amp; p-&gt;properties[ i ];
<a name="l03906"></a>03906     <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>&amp; dirty = props[ PROTOCOLS ];
<a name="l03907"></a>03907     <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>&amp; dirty2 = props[ PROTOCOLS2 ];
<a name="l03908"></a>03908 
<a name="l03909"></a>03909     <span class="comment">// we *always* want to update WM_STATE if set in dirty_props</span>
<a name="l03910"></a>03910     <span class="keywordflow">if</span>( dirty_props[ PROTOCOLS ] &amp; XAWMState )
<a name="l03911"></a>03911         props[ PROTOCOLS ] |= XAWMState;
<a name="l03912"></a>03912 
<a name="l03913"></a>03913     <span class="keywordflow">if</span> (dirty &amp; XAWMState) {
<a name="l03914"></a>03914         p-&gt;mapping_state = Withdrawn;
<a name="l03915"></a>03915     <span class="keywordflow">if</span> (XGetWindowProperty(p-&gt;display, p-&gt;window, xa_wm_state, 0l, 1l,
<a name="l03916"></a>03916                    False, xa_wm_state, &amp;type_ret, &amp;format_ret,
<a name="l03917"></a>03917                    &amp;nitems_ret, &amp;unused, &amp;data_ret)
<a name="l03918"></a>03918         == Success) {
<a name="l03919"></a>03919         <span class="keywordflow">if</span> (type_ret == xa_wm_state &amp;&amp; format_ret == 32 &amp;&amp;
<a name="l03920"></a>03920         nitems_ret == 1) {
<a name="l03921"></a>03921         <span class="keywordtype">long</span> *state = (<span class="keywordtype">long</span> *) data_ret;
<a name="l03922"></a>03922 
<a name="l03923"></a>03923         <span class="keywordflow">switch</span>(*state) {
<a name="l03924"></a>03924             <span class="keywordflow">case</span> IconicState:
<a name="l03925"></a>03925             p-&gt;mapping_state = Iconic;
<a name="l03926"></a>03926             <span class="keywordflow">break</span>;
<a name="l03927"></a>03927             <span class="keywordflow">case</span> NormalState:
<a name="l03928"></a>03928             p-&gt;mapping_state = Visible;
<a name="l03929"></a>03929                         <span class="keywordflow">break</span>;
<a name="l03930"></a>03930             <span class="keywordflow">case</span> WithdrawnState:
<a name="l03931"></a>03931             <span class="keywordflow">default</span>:
<a name="l03932"></a>03932             p-&gt;mapping_state = Withdrawn;
<a name="l03933"></a>03933             <span class="keywordflow">break</span>;
<a name="l03934"></a>03934         }
<a name="l03935"></a>03935 
<a name="l03936"></a>03936         p-&gt;mapping_state_dirty = False;
<a name="l03937"></a>03937         }
<a name="l03938"></a>03938         <span class="keywordflow">if</span> ( data_ret )
<a name="l03939"></a>03939         XFree(data_ret);
<a name="l03940"></a>03940     }
<a name="l03941"></a>03941     }
<a name="l03942"></a>03942 
<a name="l03943"></a>03943     <span class="keywordflow">if</span> (dirty &amp; WMState) {
<a name="l03944"></a>03944     p-&gt;state = 0;
<a name="l03945"></a>03945     <span class="keywordflow">if</span> (XGetWindowProperty(p-&gt;display, p-&gt;window, net_wm_state, 0l, 2048l,
<a name="l03946"></a>03946                    False, XA_ATOM, &amp;type_ret, &amp;format_ret,
<a name="l03947"></a>03947                    &amp;nitems_ret, &amp;unused, &amp;data_ret)
<a name="l03948"></a>03948         == Success) {
<a name="l03949"></a>03949         <span class="keywordflow">if</span> (type_ret == XA_ATOM &amp;&amp; format_ret == 32 &amp;&amp; nitems_ret &gt; 0) {
<a name="l03950"></a>03950         <span class="comment">// determine window state</span>
<a name="l03951"></a>03951 <span class="preprocessor">#ifdef NETWMDEBUG</span>
<a name="l03952"></a>03952 <span class="preprocessor"></span>        fprintf(stderr, <span class="stringliteral">&quot;NETWinInfo::update: updating window state (%ld)\n&quot;</span>,
<a name="l03953"></a>03953             nitems_ret);
<a name="l03954"></a>03954 <span class="preprocessor">#endif</span>
<a name="l03955"></a>03955 <span class="preprocessor"></span>
<a name="l03956"></a>03956         <span class="keywordtype">long</span> *states = (<span class="keywordtype">long</span> *) data_ret;
<a name="l03957"></a>03957         <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> count;
<a name="l03958"></a>03958 
<a name="l03959"></a>03959         <span class="keywordflow">for</span> (count = 0; count &lt; nitems_ret; count++) {
<a name="l03960"></a>03960 <span class="preprocessor">#ifdef NETWMDEBUG</span>
<a name="l03961"></a>03961 <span class="preprocessor"></span>                    <span class="keywordtype">char</span>* data_ret = XGetAtomName(p-&gt;display, (Atom) states[count]);
<a name="l03962"></a>03962             fprintf(stderr,
<a name="l03963"></a>03963                 <span class="stringliteral">&quot;NETWinInfo::update:   adding window state %ld &#39;%s&#39;\n&quot;</span>,
<a name="l03964"></a>03964                 states[count], data_ret );
<a name="l03965"></a>03965                     <span class="keywordflow">if</span> ( data_ret )
<a name="l03966"></a>03966                         XFree( data_ret );
<a name="l03967"></a>03967 <span class="preprocessor">#endif</span>
<a name="l03968"></a>03968 <span class="preprocessor"></span>
<a name="l03969"></a>03969             <span class="keywordflow">if</span> ((Atom) states[count] == net_wm_state_modal)
<a name="l03970"></a>03970             p-&gt;state |= Modal;
<a name="l03971"></a>03971             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) states[count] == net_wm_state_sticky)
<a name="l03972"></a>03972             p-&gt;state |= Sticky;
<a name="l03973"></a>03973             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) states[count] == net_wm_state_max_vert)
<a name="l03974"></a>03974             p-&gt;state |= MaxVert;
<a name="l03975"></a>03975             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) states[count] == net_wm_state_max_horiz)
<a name="l03976"></a>03976             p-&gt;state |= MaxHoriz;
<a name="l03977"></a>03977             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) states[count] == net_wm_state_shaded)
<a name="l03978"></a>03978             p-&gt;state |= Shaded;
<a name="l03979"></a>03979             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) states[count] == net_wm_state_skip_taskbar)
<a name="l03980"></a>03980             p-&gt;state |= SkipTaskbar;
<a name="l03981"></a>03981             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) states[count] == net_wm_state_skip_pager)
<a name="l03982"></a>03982             p-&gt;state |= SkipPager;
<a name="l03983"></a>03983             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) states[count] == net_wm_state_hidden)
<a name="l03984"></a>03984             p-&gt;state |= Hidden;
<a name="l03985"></a>03985             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) states[count] == net_wm_state_fullscreen)
<a name="l03986"></a>03986             p-&gt;state |= FullScreen;
<a name="l03987"></a>03987             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) states[count] == net_wm_state_above)
<a name="l03988"></a>03988             p-&gt;state |= KeepAbove;
<a name="l03989"></a>03989             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) states[count] == net_wm_state_below)
<a name="l03990"></a>03990             p-&gt;state |= KeepBelow;
<a name="l03991"></a>03991             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) states[count] == net_wm_state_demands_attention)
<a name="l03992"></a>03992             p-&gt;state |= DemandsAttention;
<a name="l03993"></a>03993             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) states[count] == net_wm_state_stays_on_top)
<a name="l03994"></a>03994             p-&gt;state |= StaysOnTop;
<a name="l03995"></a>03995         }
<a name="l03996"></a>03996         }
<a name="l03997"></a>03997         <span class="keywordflow">if</span> ( data_ret )
<a name="l03998"></a>03998         XFree(data_ret);
<a name="l03999"></a>03999     }
<a name="l04000"></a>04000     }
<a name="l04001"></a>04001 
<a name="l04002"></a>04002     <span class="keywordflow">if</span> (dirty &amp; WMDesktop) {
<a name="l04003"></a>04003     p-&gt;desktop = 0;
<a name="l04004"></a>04004     <span class="keywordflow">if</span> (XGetWindowProperty(p-&gt;display, p-&gt;window, net_wm_desktop, 0l, 1l,
<a name="l04005"></a>04005                    False, XA_CARDINAL, &amp;type_ret,
<a name="l04006"></a>04006                    &amp;format_ret, &amp;nitems_ret,
<a name="l04007"></a>04007                    &amp;unused, &amp;data_ret)
<a name="l04008"></a>04008         == Success) {
<a name="l04009"></a>04009         <span class="keywordflow">if</span> (type_ret == XA_CARDINAL &amp;&amp; format_ret == 32 &amp;&amp;
<a name="l04010"></a>04010         nitems_ret == 1) {
<a name="l04011"></a>04011         p-&gt;desktop = *((<span class="keywordtype">long</span> *) data_ret);
<a name="l04012"></a>04012         <span class="keywordflow">if</span> ((<span class="keywordtype">signed</span>) p-&gt;desktop != OnAllDesktops)
<a name="l04013"></a>04013             p-&gt;desktop++;
<a name="l04014"></a>04014 
<a name="l04015"></a>04015         if ( p-&gt;desktop == 0 )
<a name="l04016"></a>04016             p-&gt;desktop = OnAllDesktops;
<a name="l04017"></a>04017         }
<a name="l04018"></a>04018         <span class="keywordflow">if</span> ( data_ret )
<a name="l04019"></a>04019         XFree(data_ret);
<a name="l04020"></a>04020     }
<a name="l04021"></a>04021     }
<a name="l04022"></a>04022 
<a name="l04023"></a>04023     <span class="keywordflow">if</span> (dirty &amp; WMName) {
<a name="l04024"></a>04024         <span class="keyword">delete</span>[] p-&gt;name;
<a name="l04025"></a>04025         p-&gt;name = NULL;
<a name="l04026"></a>04026     <span class="keywordflow">if</span> (XGetWindowProperty(p-&gt;display, p-&gt;window, net_wm_name, 0l,
<a name="l04027"></a>04027                    MAX_PROP_SIZE, False, UTF8_STRING, &amp;type_ret,
<a name="l04028"></a>04028                    &amp;format_ret, &amp;nitems_ret, &amp;unused, &amp;data_ret)
<a name="l04029"></a>04029         == Success) {
<a name="l04030"></a>04030         <span class="keywordflow">if</span> (type_ret == UTF8_STRING &amp;&amp; format_ret == 8 &amp;&amp; nitems_ret &gt; 0) {
<a name="l04031"></a>04031         p-&gt;name = nstrndup((<span class="keyword">const</span> <span class="keywordtype">char</span> *) data_ret, nitems_ret);
<a name="l04032"></a>04032         }
<a name="l04033"></a>04033 
<a name="l04034"></a>04034         <span class="keywordflow">if</span>( data_ret )
<a name="l04035"></a>04035         XFree(data_ret);
<a name="l04036"></a>04036     }
<a name="l04037"></a>04037     }
<a name="l04038"></a>04038 
<a name="l04039"></a>04039     <span class="keywordflow">if</span> (dirty &amp; WMVisibleName) {
<a name="l04040"></a>04040         <span class="keyword">delete</span>[] p-&gt;visible_name;
<a name="l04041"></a>04041         p-&gt;visible_name = NULL;
<a name="l04042"></a>04042     <span class="keywordflow">if</span> (XGetWindowProperty(p-&gt;display, p-&gt;window, net_wm_visible_name, 0l,
<a name="l04043"></a>04043                    MAX_PROP_SIZE, False, UTF8_STRING, &amp;type_ret,
<a name="l04044"></a>04044                    &amp;format_ret, &amp;nitems_ret, &amp;unused, &amp;data_ret)
<a name="l04045"></a>04045         == Success) {
<a name="l04046"></a>04046         <span class="keywordflow">if</span> (type_ret == UTF8_STRING &amp;&amp; format_ret == 8 &amp;&amp; nitems_ret &gt; 0) {
<a name="l04047"></a>04047         p-&gt;visible_name = nstrndup((<span class="keyword">const</span> <span class="keywordtype">char</span> *) data_ret, nitems_ret);
<a name="l04048"></a>04048         }
<a name="l04049"></a>04049 
<a name="l04050"></a>04050         <span class="keywordflow">if</span>( data_ret )
<a name="l04051"></a>04051         XFree(data_ret);
<a name="l04052"></a>04052     }
<a name="l04053"></a>04053     }
<a name="l04054"></a>04054 
<a name="l04055"></a>04055     <span class="keywordflow">if</span> (dirty &amp; WMIconName) {
<a name="l04056"></a>04056         <span class="keyword">delete</span>[] p-&gt;icon_name;
<a name="l04057"></a>04057         p-&gt;icon_name = NULL;
<a name="l04058"></a>04058     <span class="keywordflow">if</span> (XGetWindowProperty(p-&gt;display, p-&gt;window, net_wm_icon_name, 0l,
<a name="l04059"></a>04059                    MAX_PROP_SIZE, False, UTF8_STRING, &amp;type_ret,
<a name="l04060"></a>04060                    &amp;format_ret, &amp;nitems_ret, &amp;unused, &amp;data_ret)
<a name="l04061"></a>04061         == Success) {
<a name="l04062"></a>04062         <span class="keywordflow">if</span> (type_ret == UTF8_STRING &amp;&amp; format_ret == 8 &amp;&amp; nitems_ret &gt; 0) {
<a name="l04063"></a>04063         p-&gt;icon_name = nstrndup((<span class="keyword">const</span> <span class="keywordtype">char</span> *) data_ret, nitems_ret);
<a name="l04064"></a>04064         }
<a name="l04065"></a>04065 
<a name="l04066"></a>04066         <span class="keywordflow">if</span>( data_ret )
<a name="l04067"></a>04067         XFree(data_ret);
<a name="l04068"></a>04068     }
<a name="l04069"></a>04069     }
<a name="l04070"></a>04070 
<a name="l04071"></a>04071     <span class="keywordflow">if</span> (dirty &amp; WMVisibleIconName)
<a name="l04072"></a>04072     {
<a name="l04073"></a>04073         <span class="keyword">delete</span>[] p-&gt;visible_icon_name;
<a name="l04074"></a>04074         p-&gt;visible_icon_name = NULL;
<a name="l04075"></a>04075     <span class="keywordflow">if</span> (XGetWindowProperty(p-&gt;display, p-&gt;window, net_wm_visible_icon_name, 0l,
<a name="l04076"></a>04076                    MAX_PROP_SIZE, False, UTF8_STRING, &amp;type_ret,
<a name="l04077"></a>04077                    &amp;format_ret, &amp;nitems_ret, &amp;unused, &amp;data_ret)
<a name="l04078"></a>04078         == Success) {
<a name="l04079"></a>04079         <span class="keywordflow">if</span> (type_ret == UTF8_STRING &amp;&amp; format_ret == 8 &amp;&amp; nitems_ret &gt; 0) {
<a name="l04080"></a>04080         p-&gt;visible_icon_name = nstrndup((<span class="keyword">const</span> <span class="keywordtype">char</span> *) data_ret, nitems_ret);
<a name="l04081"></a>04081         }
<a name="l04082"></a>04082 
<a name="l04083"></a>04083         <span class="keywordflow">if</span>( data_ret )
<a name="l04084"></a>04084         XFree(data_ret);
<a name="l04085"></a>04085     }
<a name="l04086"></a>04086     }
<a name="l04087"></a>04087 
<a name="l04088"></a>04088     <span class="keywordflow">if</span> (dirty &amp; WMWindowType) {
<a name="l04089"></a>04089     p-&gt;types.reset();
<a name="l04090"></a>04090     p-&gt;types[ 0 ] = Unknown;
<a name="l04091"></a>04091         p-&gt;has_net_support = <span class="keyword">false</span>;
<a name="l04092"></a>04092     <span class="keywordflow">if</span> (XGetWindowProperty(p-&gt;display, p-&gt;window, net_wm_window_type, 0l, 2048l,
<a name="l04093"></a>04093                    False, XA_ATOM, &amp;type_ret, &amp;format_ret,
<a name="l04094"></a>04094                    &amp;nitems_ret, &amp;unused, &amp;data_ret)
<a name="l04095"></a>04095         == Success) {
<a name="l04096"></a>04096         <span class="keywordflow">if</span> (type_ret == XA_ATOM &amp;&amp; format_ret == 32 &amp;&amp; nitems_ret &gt; 0) {
<a name="l04097"></a>04097         <span class="comment">// determine the window type</span>
<a name="l04098"></a>04098 <span class="preprocessor">#ifdef NETWMDEBUG</span>
<a name="l04099"></a>04099 <span class="preprocessor"></span>        fprintf(stderr, <span class="stringliteral">&quot;NETWinInfo::update: getting window type (%ld)\n&quot;</span>,
<a name="l04100"></a>04100             nitems_ret);
<a name="l04101"></a>04101 <span class="preprocessor">#endif</span>
<a name="l04102"></a>04102 <span class="preprocessor"></span>
<a name="l04103"></a>04103                 p-&gt;has_net_support = <span class="keyword">true</span>;
<a name="l04104"></a>04104 
<a name="l04105"></a>04105         <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> count = 0;
<a name="l04106"></a>04106         <span class="keywordtype">long</span> *types = (<span class="keywordtype">long</span> *) data_ret;
<a name="l04107"></a>04107         <span class="keywordtype">int</span> pos = 0;
<a name="l04108"></a>04108 
<a name="l04109"></a>04109         <span class="keywordflow">while</span> (count &lt; nitems_ret) {
<a name="l04110"></a>04110             <span class="comment">// remember all window types we know</span>
<a name="l04111"></a>04111 <span class="preprocessor">#ifdef NETWMDEBUG</span>
<a name="l04112"></a>04112 <span class="preprocessor"></span>                    <span class="keywordtype">char</span>* debug_type = XGetAtomName(p-&gt;display, (Atom) types[count]);
<a name="l04113"></a>04113             fprintf(stderr,
<a name="l04114"></a>04114                 <span class="stringliteral">&quot;NETWinInfo::update:   examining window type %ld %s\n&quot;</span>,
<a name="l04115"></a>04115                 types[count], debug_type );
<a name="l04116"></a>04116                     <span class="keywordflow">if</span> ( debug_type )
<a name="l04117"></a>04117                         XFree( debug_type );
<a name="l04118"></a>04118 <span class="preprocessor">#endif</span>
<a name="l04119"></a>04119 <span class="preprocessor"></span>
<a name="l04120"></a>04120             <span class="keywordflow">if</span> ((Atom) types[count] == net_wm_window_type_normal)
<a name="l04121"></a>04121             p-&gt;types[ pos++ ] = Normal;
<a name="l04122"></a>04122             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) types[count] == net_wm_window_type_desktop)
<a name="l04123"></a>04123             p-&gt;types[ pos++ ] = Desktop;
<a name="l04124"></a>04124             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) types[count] == net_wm_window_type_dock)
<a name="l04125"></a>04125             p-&gt;types[ pos++ ] = Dock;
<a name="l04126"></a>04126             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) types[count] == net_wm_window_type_toolbar)
<a name="l04127"></a>04127             p-&gt;types[ pos++ ] = Tool;
<a name="l04128"></a>04128             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) types[count] == net_wm_window_type_menu)
<a name="l04129"></a>04129             p-&gt;types[ pos++ ] = Menu;
<a name="l04130"></a>04130             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) types[count] == net_wm_window_type_dialog)
<a name="l04131"></a>04131             p-&gt;types[ pos++ ] = Dialog;
<a name="l04132"></a>04132             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) types[count] == net_wm_window_type_utility)
<a name="l04133"></a>04133             p-&gt;types[ pos++ ] = Utility;
<a name="l04134"></a>04134             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) types[count] == net_wm_window_type_splash)
<a name="l04135"></a>04135             p-&gt;types[ pos++ ] = Splash;
<a name="l04136"></a>04136             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) types[count] == net_wm_window_type_dropdown_menu)
<a name="l04137"></a>04137             p-&gt;types[ pos++ ] = DropdownMenu;
<a name="l04138"></a>04138             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) types[count] == net_wm_window_type_popup_menu)
<a name="l04139"></a>04139             p-&gt;types[ pos++ ] = PopupMenu;
<a name="l04140"></a>04140             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) types[count] == net_wm_window_type_tooltip)
<a name="l04141"></a>04141             p-&gt;types[ pos++ ] = Tooltip;
<a name="l04142"></a>04142             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) types[count] == net_wm_window_type_notification)
<a name="l04143"></a>04143             p-&gt;types[ pos++ ] = Notification;
<a name="l04144"></a>04144             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) types[count] == net_wm_window_type_combobox)
<a name="l04145"></a>04145             p-&gt;types[ pos++ ] = ComboBox;
<a name="l04146"></a>04146             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) types[count] == net_wm_window_type_dnd)
<a name="l04147"></a>04147             p-&gt;types[ pos++ ] = DNDIcon;
<a name="l04148"></a>04148             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) types[count] == kde_net_wm_window_type_override)
<a name="l04149"></a>04149             p-&gt;types[ pos++ ] = Override;
<a name="l04150"></a>04150             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((Atom) types[count] == kde_net_wm_window_type_topmenu)
<a name="l04151"></a>04151             p-&gt;types[ pos++ ] = TopMenu;
<a name="l04152"></a>04152 
<a name="l04153"></a>04153             count++;
<a name="l04154"></a>04154         }
<a name="l04155"></a>04155         }
<a name="l04156"></a>04156 
<a name="l04157"></a>04157         <span class="keywordflow">if</span> ( data_ret )
<a name="l04158"></a>04158         XFree(data_ret);
<a name="l04159"></a>04159     }
<a name="l04160"></a>04160     }
<a name="l04161"></a>04161 
<a name="l04162"></a>04162     <span class="keywordflow">if</span> (dirty &amp; WMStrut) {
<a name="l04163"></a>04163         p-&gt;strut = <a class="code" href="structNETStrut.html">NETStrut</a>();
<a name="l04164"></a>04164     <span class="keywordflow">if</span> (XGetWindowProperty(p-&gt;display, p-&gt;window, net_wm_strut, 0l, 4l,
<a name="l04165"></a>04165                    False, XA_CARDINAL, &amp;type_ret, &amp;format_ret,
<a name="l04166"></a>04166                    &amp;nitems_ret, &amp;unused, &amp;data_ret)
<a name="l04167"></a>04167         == Success) {
<a name="l04168"></a>04168         <span class="keywordflow">if</span> (type_ret == XA_CARDINAL &amp;&amp; format_ret == 32 &amp;&amp;
<a name="l04169"></a>04169         nitems_ret == 4) {
<a name="l04170"></a>04170         <span class="keywordtype">long</span> *d = (<span class="keywordtype">long</span> *) data_ret;
<a name="l04171"></a>04171         p-&gt;strut.left   = d[0];
<a name="l04172"></a>04172         p-&gt;strut.right  = d[1];
<a name="l04173"></a>04173         p-&gt;strut.top    = d[2];
<a name="l04174"></a>04174         p-&gt;strut.bottom = d[3];
<a name="l04175"></a>04175         }
<a name="l04176"></a>04176         <span class="keywordflow">if</span> ( data_ret )
<a name="l04177"></a>04177         XFree(data_ret);
<a name="l04178"></a>04178     }
<a name="l04179"></a>04179     }
<a name="l04180"></a>04180 
<a name="l04181"></a>04181     <span class="keywordflow">if</span> (dirty2 &amp; WM2ExtendedStrut) {
<a name="l04182"></a>04182         p-&gt;extended_strut = <a class="code" href="structNETExtendedStrut.html" title="Partial strut class for NET classes.">NETExtendedStrut</a>();
<a name="l04183"></a>04183     <span class="keywordflow">if</span> (XGetWindowProperty(p-&gt;display, p-&gt;window, net_wm_extended_strut, 0l, 12l,
<a name="l04184"></a>04184                    False, XA_CARDINAL, &amp;type_ret, &amp;format_ret,
<a name="l04185"></a>04185                    &amp;nitems_ret, &amp;unused, &amp;data_ret)
<a name="l04186"></a>04186         == Success) {
<a name="l04187"></a>04187         <span class="keywordflow">if</span> (type_ret == XA_CARDINAL &amp;&amp; format_ret == 32 &amp;&amp;
<a name="l04188"></a>04188         nitems_ret == 12) {
<a name="l04189"></a>04189         <span class="keywordtype">long</span> *d = (<span class="keywordtype">long</span> *) data_ret;
<a name="l04190"></a>04190         p-&gt;extended_strut.left_width = d[0];
<a name="l04191"></a>04191         p-&gt;extended_strut.right_width = d[1];
<a name="l04192"></a>04192         p-&gt;extended_strut.top_width = d[2];
<a name="l04193"></a>04193         p-&gt;extended_strut.bottom_width = d[3];
<a name="l04194"></a>04194                 p-&gt;extended_strut.left_start = d[4];
<a name="l04195"></a>04195                 p-&gt;extended_strut.left_end = d[5];
<a name="l04196"></a>04196                 p-&gt;extended_strut.right_start = d[6];
<a name="l04197"></a>04197                 p-&gt;extended_strut.right_end = d[7];
<a name="l04198"></a>04198                 p-&gt;extended_strut.top_start = d[8];
<a name="l04199"></a>04199                 p-&gt;extended_strut.top_end = d[9];
<a name="l04200"></a>04200                 p-&gt;extended_strut.bottom_start = d[10];
<a name="l04201"></a>04201                 p-&gt;extended_strut.bottom_end = d[11];
<a name="l04202"></a>04202         }
<a name="l04203"></a>04203         <span class="keywordflow">if</span> ( data_ret )
<a name="l04204"></a>04204         XFree(data_ret);
<a name="l04205"></a>04205     }
<a name="l04206"></a>04206     }
<a name="l04207"></a>04207 
<a name="l04208"></a>04208     <span class="keywordflow">if</span> (dirty &amp; WMIconGeometry) {
<a name="l04209"></a>04209         p-&gt;icon_geom = <a class="code" href="structNETRect.html" title="Simple rectangle class for NET classes.">NETRect</a>();
<a name="l04210"></a>04210     <span class="keywordflow">if</span> (XGetWindowProperty(p-&gt;display, p-&gt;window, net_wm_icon_geometry, 0l, 4l,
<a name="l04211"></a>04211                    False, XA_CARDINAL, &amp;type_ret, &amp;format_ret,
<a name="l04212"></a>04212                    &amp;nitems_ret, &amp;unused, &amp;data_ret)
<a name="l04213"></a>04213         == Success) {
<a name="l04214"></a>04214         <span class="keywordflow">if</span> (type_ret == XA_CARDINAL &amp;&amp; format_ret == 32 &amp;&amp;
<a name="l04215"></a>04215         nitems_ret == 4) {
<a name="l04216"></a>04216         <span class="keywordtype">long</span> *d = (<span class="keywordtype">long</span> *) data_ret;
<a name="l04217"></a>04217         p-&gt;icon_geom.pos.x       = d[0];
<a name="l04218"></a>04218         p-&gt;icon_geom.pos.y       = d[1];
<a name="l04219"></a>04219         p-&gt;icon_geom.size.width  = d[2];
<a name="l04220"></a>04220         p-&gt;icon_geom.size.height = d[3];
<a name="l04221"></a>04221         }
<a name="l04222"></a>04222         <span class="keywordflow">if</span> ( data_ret )
<a name="l04223"></a>04223         XFree(data_ret);
<a name="l04224"></a>04224     }
<a name="l04225"></a>04225     }
<a name="l04226"></a>04226 
<a name="l04227"></a>04227     <span class="keywordflow">if</span> (dirty &amp; WMIcon) {
<a name="l04228"></a>04228     readIcon(p-&gt;display,p-&gt;window,net_wm_icon,p-&gt;icons,p-&gt;icon_count);
<a name="l04229"></a>04229     }
<a name="l04230"></a>04230 
<a name="l04231"></a>04231     <span class="keywordflow">if</span> (dirty &amp; WMKDESystemTrayWinFor) {
<a name="l04232"></a>04232     p-&gt;kde_system_tray_win_for = 0;
<a name="l04233"></a>04233     <span class="keywordflow">if</span> (XGetWindowProperty(p-&gt;display, p-&gt;window, kde_net_wm_system_tray_window_for,
<a name="l04234"></a>04234                    0l, 1l, False, XA_WINDOW, &amp;type_ret, &amp;format_ret,
<a name="l04235"></a>04235                    &amp;nitems_ret, &amp;unused, &amp;data_ret)
<a name="l04236"></a>04236         == Success) {
<a name="l04237"></a>04237         <span class="keywordflow">if</span> (type_ret == XA_WINDOW &amp;&amp; format_ret == 32 &amp;&amp;
<a name="l04238"></a>04238         nitems_ret == 1) {
<a name="l04239"></a>04239         p-&gt;kde_system_tray_win_for = *((Window *) data_ret);
<a name="l04240"></a>04240         <span class="keywordflow">if</span> ( p-&gt;kde_system_tray_win_for == 0 )
<a name="l04241"></a>04241             p-&gt;kde_system_tray_win_for = p-&gt;root;
<a name="l04242"></a>04242         }
<a name="l04243"></a>04243         <span class="keywordflow">if</span> ( data_ret )
<a name="l04244"></a>04244         XFree(data_ret);
<a name="l04245"></a>04245         }
<a name="l04246"></a>04246     }
<a name="l04247"></a>04247 
<a name="l04248"></a>04248     <span class="keywordflow">if</span> (dirty &amp; WMFrameExtents) {
<a name="l04249"></a>04249         p-&gt;frame_strut = <a class="code" href="structNETStrut.html">NETStrut</a>();
<a name="l04250"></a>04250         <span class="keywordtype">bool</span> ok = <span class="keyword">false</span>;
<a name="l04251"></a>04251     <span class="keywordflow">if</span> (XGetWindowProperty(p-&gt;display, p-&gt;window, net_frame_extents,
<a name="l04252"></a>04252                    0l, 4l, False, XA_CARDINAL, &amp;type_ret, &amp;format_ret,
<a name="l04253"></a>04253                    &amp;nitems_ret, &amp;unused, &amp;data_ret) == Success) {
<a name="l04254"></a>04254         <span class="keywordflow">if</span> (type_ret == XA_CARDINAL &amp;&amp; format_ret == 32 &amp;&amp; nitems_ret == 4) {
<a name="l04255"></a>04255                 ok = <span class="keyword">true</span>;
<a name="l04256"></a>04256         <span class="keywordtype">long</span> *d = (<span class="keywordtype">long</span> *) data_ret;
<a name="l04257"></a>04257 
<a name="l04258"></a>04258         p-&gt;frame_strut.left   = d[0];
<a name="l04259"></a>04259         p-&gt;frame_strut.right  = d[1];
<a name="l04260"></a>04260         p-&gt;frame_strut.top    = d[2];
<a name="l04261"></a>04261         p-&gt;frame_strut.bottom = d[3];
<a name="l04262"></a>04262         }
<a name="l04263"></a>04263         <span class="keywordflow">if</span> ( data_ret )
<a name="l04264"></a>04264         XFree(data_ret);
<a name="l04265"></a>04265         }
<a name="l04266"></a>04266     <span class="keywordflow">if</span> (!ok &amp;&amp; XGetWindowProperty(p-&gt;display, p-&gt;window, kde_net_wm_frame_strut,
<a name="l04267"></a>04267                    0l, 4l, False, XA_CARDINAL, &amp;type_ret, &amp;format_ret,
<a name="l04268"></a>04268                    &amp;nitems_ret, &amp;unused, &amp;data_ret) == Success) {
<a name="l04269"></a>04269         <span class="keywordflow">if</span> (type_ret == XA_CARDINAL &amp;&amp; format_ret == 32 &amp;&amp; nitems_ret == 4) {
<a name="l04270"></a>04270                 ok = <span class="keyword">true</span>;
<a name="l04271"></a>04271         <span class="keywordtype">long</span> *d = (<span class="keywordtype">long</span> *) data_ret;
<a name="l04272"></a>04272 
<a name="l04273"></a>04273         p-&gt;frame_strut.left   = d[0];
<a name="l04274"></a>04274         p-&gt;frame_strut.right  = d[1];
<a name="l04275"></a>04275         p-&gt;frame_strut.top    = d[2];
<a name="l04276"></a>04276         p-&gt;frame_strut.bottom = d[3];
<a name="l04277"></a>04277         }
<a name="l04278"></a>04278         <span class="keywordflow">if</span> ( data_ret )
<a name="l04279"></a>04279         XFree(data_ret);
<a name="l04280"></a>04280     }
<a name="l04281"></a>04281     }
<a name="l04282"></a>04282 
<a name="l04283"></a>04283     <span class="keywordflow">if</span> (dirty &amp; WMPid) {
<a name="l04284"></a>04284     p-&gt;pid = 0;
<a name="l04285"></a>04285     <span class="keywordflow">if</span> (XGetWindowProperty(p-&gt;display, p-&gt;window, net_wm_pid, 0l, 1l,
<a name="l04286"></a>04286                    False, XA_CARDINAL, &amp;type_ret, &amp;format_ret,
<a name="l04287"></a>04287                    &amp;nitems_ret, &amp;unused, &amp;data_ret) == Success) {
<a name="l04288"></a>04288         <span class="keywordflow">if</span> (type_ret == XA_CARDINAL &amp;&amp; format_ret == 32 &amp;&amp; nitems_ret == 1) {
<a name="l04289"></a>04289         p-&gt;pid = *((<span class="keywordtype">long</span> *) data_ret);
<a name="l04290"></a>04290         }
<a name="l04291"></a>04291         <span class="keywordflow">if</span> ( data_ret )
<a name="l04292"></a>04292         XFree(data_ret);
<a name="l04293"></a>04293     }
<a name="l04294"></a>04294     }
<a name="l04295"></a>04295 
<a name="l04296"></a>04296     <span class="keywordflow">if</span> (dirty2 &amp; WM2StartupId)
<a name="l04297"></a>04297     {
<a name="l04298"></a>04298         <span class="keyword">delete</span>[] p-&gt;startup_id;
<a name="l04299"></a>04299         p-&gt;startup_id = NULL;
<a name="l04300"></a>04300     <span class="keywordflow">if</span> (XGetWindowProperty(p-&gt;display, p-&gt;window, net_startup_id, 0l,
<a name="l04301"></a>04301                    MAX_PROP_SIZE, False, UTF8_STRING, &amp;type_ret,
<a name="l04302"></a>04302                    &amp;format_ret, &amp;nitems_ret, &amp;unused, &amp;data_ret)
<a name="l04303"></a>04303         == Success) {
<a name="l04304"></a>04304         <span class="keywordflow">if</span> (type_ret == UTF8_STRING &amp;&amp; format_ret == 8 &amp;&amp; nitems_ret &gt; 0) {
<a name="l04305"></a>04305         p-&gt;startup_id = nstrndup((<span class="keyword">const</span> <span class="keywordtype">char</span> *) data_ret, nitems_ret);
<a name="l04306"></a>04306         }
<a name="l04307"></a>04307 
<a name="l04308"></a>04308         <span class="keywordflow">if</span>( data_ret )
<a name="l04309"></a>04309         XFree(data_ret);
<a name="l04310"></a>04310     }
<a name="l04311"></a>04311     }
<a name="l04312"></a>04312 
<a name="l04313"></a>04313     <span class="keywordflow">if</span>( dirty2 &amp; WM2AllowedActions ) {
<a name="l04314"></a>04314         p-&gt;allowed_actions = 0;
<a name="l04315"></a>04315     <span class="keywordflow">if</span> (XGetWindowProperty(p-&gt;display, p-&gt;window, net_wm_allowed_actions, 0l, 2048l,
<a name="l04316"></a>04316                    False, XA_ATOM, &amp;type_ret, &amp;format_ret,
<a name="l04317"></a>04317                    &amp;nitems_ret, &amp;unused, &amp;data_ret)
<a name="l04318"></a>04318         == Success) {
<a name="l04319"></a>04319         <span class="keywordflow">if</span> (type_ret == XA_ATOM &amp;&amp; format_ret == 32 &amp;&amp; nitems_ret &gt; 0) {
<a name="l04320"></a>04320         <span class="comment">// determine actions</span>
<a name="l04321"></a>04321 <span class="preprocessor">#ifdef NETWMDEBUG</span>
<a name="l04322"></a>04322 <span class="preprocessor"></span>        fprintf(stderr, <span class="stringliteral">&quot;NETWinInfo::update: updating allowed actions (%ld)\n&quot;</span>,
<a name="l04323"></a>04323             nitems_ret);
<a name="l04324"></a>04324 <span class="preprocessor">#endif</span>
<a name="l04325"></a>04325 <span class="preprocessor"></span>
<a name="l04326"></a>04326         <span class="keywordtype">long</span> *actions = (<span class="keywordtype">long</span> *) data_ret;
<a name="l04327"></a>04327         <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> count;
<a name="l04328"></a>04328 
<a name="l04329"></a>04329         <span class="keywordflow">for</span> (count = 0; count &lt; nitems_ret; count++) {
<a name="l04330"></a>04330 <span class="preprocessor">#ifdef NETWMDEBUG</span>
<a name="l04331"></a>04331 <span class="preprocessor"></span>            fprintf(stderr,
<a name="l04332"></a>04332                 <span class="stringliteral">&quot;NETWinInfo::update:   adding allowed action %ld &#39;%s&#39;\n&quot;</span>,
<a name="l04333"></a>04333                 actions[count],
<a name="l04334"></a>04334                 XGetAtomName(p-&gt;display, (Atom) actions[count]));
<a name="l04335"></a>04335 <span class="preprocessor">#endif</span>
<a name="l04336"></a>04336 <span class="preprocessor"></span>
<a name="l04337"></a>04337             <span class="keywordflow">if</span> ((Atom) actions[count] == net_wm_action_move)
<a name="l04338"></a>04338             p-&gt;allowed_actions |= ActionMove;
<a name="l04339"></a>04339             <span class="keywordflow">if</span> ((Atom) actions[count] == net_wm_action_resize)
<a name="l04340"></a>04340             p-&gt;allowed_actions |= ActionResize;
<a name="l04341"></a>04341             <span class="keywordflow">if</span> ((Atom) actions[count] == net_wm_action_minimize)
<a name="l04342"></a>04342             p-&gt;allowed_actions |= ActionMinimize;
<a name="l04343"></a>04343             <span class="keywordflow">if</span> ((Atom) actions[count] == net_wm_action_shade)
<a name="l04344"></a>04344             p-&gt;allowed_actions |= ActionShade;
<a name="l04345"></a>04345             <span class="keywordflow">if</span> ((Atom) actions[count] == net_wm_action_stick)
<a name="l04346"></a>04346             p-&gt;allowed_actions |= ActionStick;
<a name="l04347"></a>04347             <span class="keywordflow">if</span> ((Atom) actions[count] == net_wm_action_max_vert)
<a name="l04348"></a>04348             p-&gt;allowed_actions |= ActionMaxVert;
<a name="l04349"></a>04349             <span class="keywordflow">if</span> ((Atom) actions[count] == net_wm_action_max_horiz)
<a name="l04350"></a>04350             p-&gt;allowed_actions |= ActionMaxHoriz;
<a name="l04351"></a>04351             <span class="keywordflow">if</span> ((Atom) actions[count] == net_wm_action_fullscreen)
<a name="l04352"></a>04352             p-&gt;allowed_actions |= ActionFullScreen;
<a name="l04353"></a>04353             <span class="keywordflow">if</span> ((Atom) actions[count] == net_wm_action_change_desk)
<a name="l04354"></a>04354             p-&gt;allowed_actions |= ActionChangeDesktop;
<a name="l04355"></a>04355             <span class="keywordflow">if</span> ((Atom) actions[count] == net_wm_action_close)
<a name="l04356"></a>04356             p-&gt;allowed_actions |= ActionClose;
<a name="l04357"></a>04357         }
<a name="l04358"></a>04358         }
<a name="l04359"></a>04359         <span class="keywordflow">if</span> ( data_ret )
<a name="l04360"></a>04360         XFree(data_ret);
<a name="l04361"></a>04361     }
<a name="l04362"></a>04362     }
<a name="l04363"></a>04363 
<a name="l04364"></a>04364     <span class="keywordflow">if</span> (dirty2 &amp; WM2UserTime) {
<a name="l04365"></a>04365     p-&gt;user_time = -1U;
<a name="l04366"></a>04366     <span class="keywordflow">if</span> (XGetWindowProperty(p-&gt;display, p-&gt;window, net_wm_user_time, 0l, 1l,
<a name="l04367"></a>04367                    False, XA_CARDINAL, &amp;type_ret, &amp;format_ret,
<a name="l04368"></a>04368                    &amp;nitems_ret, &amp;unused, &amp;data_ret) == Success) {
<a name="l04369"></a>04369             <span class="comment">// don&#39;t do nitems_ret check - Qt does PropModeAppend to avoid API call for it</span>
<a name="l04370"></a>04370         <span class="keywordflow">if</span> (type_ret == XA_CARDINAL &amp;&amp; format_ret == 32 <span class="comment">/*&amp;&amp; nitems_ret == 1*/</span>) {
<a name="l04371"></a>04371         p-&gt;user_time = *((<span class="keywordtype">long</span> *) data_ret);
<a name="l04372"></a>04372         }
<a name="l04373"></a>04373         <span class="keywordflow">if</span> ( data_ret )
<a name="l04374"></a>04374         XFree(data_ret);
<a name="l04375"></a>04375     }
<a name="l04376"></a>04376     }
<a name="l04377"></a>04377 
<a name="l04378"></a>04378     <span class="keywordflow">if</span> (dirty2 &amp; WM2TransientFor) {
<a name="l04379"></a>04379     p-&gt;transient_for = None;
<a name="l04380"></a>04380         XGetTransientForHint(p-&gt;display, p-&gt;window, &amp;p-&gt;transient_for);
<a name="l04381"></a>04381     }
<a name="l04382"></a>04382 
<a name="l04383"></a>04383     <span class="keywordflow">if</span> (dirty2 &amp; WM2GroupLeader) {
<a name="l04384"></a>04384         XWMHints *hints = XGetWMHints(p-&gt;display, p-&gt;window);
<a name="l04385"></a>04385         p-&gt;window_group = None;
<a name="l04386"></a>04386         <span class="keywordflow">if</span> ( hints )
<a name="l04387"></a>04387         {
<a name="l04388"></a>04388             <span class="keywordflow">if</span>( hints-&gt;flags &amp; WindowGroupHint )
<a name="l04389"></a>04389                 p-&gt;window_group = hints-&gt;window_group;
<a name="l04390"></a>04390             XFree( reinterpret_cast&lt; char* &gt;( hints ));
<a name="l04391"></a>04391         }
<a name="l04392"></a>04392     }
<a name="l04393"></a>04393     
<a name="l04394"></a>04394     <span class="keywordflow">if</span>( dirty2 &amp; WM2WindowClass ) {
<a name="l04395"></a>04395         <span class="keyword">delete</span>[] p-&gt;class_class;
<a name="l04396"></a>04396         <span class="keyword">delete</span>[] p-&gt;class_name;
<a name="l04397"></a>04397         p-&gt;class_class = NULL;
<a name="l04398"></a>04398         p-&gt;class_name = NULL;
<a name="l04399"></a>04399         XClassHint hint;
<a name="l04400"></a>04400         <span class="keywordflow">if</span>( XGetClassHint( p-&gt;display, p-&gt;window, &amp;hint )) {
<a name="l04401"></a>04401             p-&gt;class_class = strdup( hint.res_class );
<a name="l04402"></a>04402             p-&gt;class_name = strdup( hint.res_name );
<a name="l04403"></a>04403             XFree( hint.res_class );
<a name="l04404"></a>04404             XFree( hint.res_name );
<a name="l04405"></a>04405         }
<a name="l04406"></a>04406     }
<a name="l04407"></a>04407 
<a name="l04408"></a>04408     <span class="keywordflow">if</span>( dirty2 &amp; WM2WindowRole ) {
<a name="l04409"></a>04409         <span class="keyword">delete</span>[] p-&gt;role;
<a name="l04410"></a>04410         p-&gt;role = NULL;
<a name="l04411"></a>04411     <span class="keywordflow">if</span> (XGetWindowProperty(p-&gt;display, p-&gt;window, wm_window_role, 0l,
<a name="l04412"></a>04412                    MAX_PROP_SIZE, False, XA_STRING, &amp;type_ret,
<a name="l04413"></a>04413                    &amp;format_ret, &amp;nitems_ret, &amp;unused, &amp;data_ret)
<a name="l04414"></a>04414         == Success) {
<a name="l04415"></a>04415         <span class="keywordflow">if</span> (type_ret == XA_STRING &amp;&amp; format_ret == 8 &amp;&amp; nitems_ret &gt; 0) {
<a name="l04416"></a>04416         p-&gt;role = nstrndup((<span class="keyword">const</span> <span class="keywordtype">char</span> *) data_ret, nitems_ret);
<a name="l04417"></a>04417         }
<a name="l04418"></a>04418         <span class="keywordflow">if</span>( data_ret )
<a name="l04419"></a>04419         XFree(data_ret);
<a name="l04420"></a>04420     }
<a name="l04421"></a>04421     }
<a name="l04422"></a>04422 
<a name="l04423"></a>04423     <span class="keywordflow">if</span>( dirty2 &amp; WM2ClientMachine ) {
<a name="l04424"></a>04424         <span class="keyword">delete</span>[] p-&gt;client_machine;
<a name="l04425"></a>04425         p-&gt;client_machine = NULL;
<a name="l04426"></a>04426     <span class="keywordflow">if</span> (XGetWindowProperty(p-&gt;display, p-&gt;window, XA_WM_CLIENT_MACHINE, 0l,
<a name="l04427"></a>04427                    MAX_PROP_SIZE, False, XA_STRING, &amp;type_ret,
<a name="l04428"></a>04428                    &amp;format_ret, &amp;nitems_ret, &amp;unused, &amp;data_ret)
<a name="l04429"></a>04429         == Success) {
<a name="l04430"></a>04430         <span class="keywordflow">if</span> (type_ret == XA_STRING &amp;&amp; format_ret == 8 &amp;&amp; nitems_ret &gt; 0) {
<a name="l04431"></a>04431         p-&gt;client_machine = nstrndup((<span class="keyword">const</span> <span class="keywordtype">char</span> *) data_ret, nitems_ret);
<a name="l04432"></a>04432         }
<a name="l04433"></a>04433         <span class="keywordflow">if</span>( data_ret )
<a name="l04434"></a>04434         XFree(data_ret);
<a name="l04435"></a>04435     }
<a name="l04436"></a>04436     }
<a name="l04437"></a>04437 }
<a name="l04438"></a>04438 
<a name="l04439"></a>04439 
<a name="l04440"></a>04440 <a class="code" href="structNETRect.html" title="Simple rectangle class for NET classes.">NETRect</a> NETWinInfo::iconGeometry()<span class="keyword"> const </span>{
<a name="l04441"></a>04441     <span class="keywordflow">return</span> p-&gt;icon_geom;
<a name="l04442"></a>04442 }
<a name="l04443"></a>04443 
<a name="l04444"></a>04444 
<a name="l04445"></a>04445 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> NETWinInfo::state()<span class="keyword"> const </span>{
<a name="l04446"></a>04446     <span class="keywordflow">return</span> p-&gt;state;
<a name="l04447"></a>04447 }
<a name="l04448"></a>04448 
<a name="l04449"></a>04449 
<a name="l04450"></a>04450 <a class="code" href="structNETStrut.html">NETStrut</a> NETWinInfo::strut()<span class="keyword"> const </span>{
<a name="l04451"></a>04451     <span class="keywordflow">return</span> p-&gt;strut;
<a name="l04452"></a>04452 }
<a name="l04453"></a>04453 
<a name="l04454"></a>04454 <a class="code" href="structNETExtendedStrut.html" title="Partial strut class for NET classes.">NETExtendedStrut</a> NETWinInfo::extendedStrut()<span class="keyword"> const </span>{
<a name="l04455"></a>04455     <span class="keywordflow">return</span> p-&gt;extended_strut;
<a name="l04456"></a>04456 }
<a name="l04457"></a>04457 
<a name="l04458"></a>04458 <span class="keywordtype">bool</span> <a class="code" href="classNET.html#a337d6c9e124c5740cedb20328f41bea3" title="Returns true if the given window type matches the mask given using WindowTypeMask flags...">NET::typeMatchesMask</a>( WindowType type, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> mask ) {
<a name="l04459"></a>04459     <span class="keywordflow">switch</span>( type ) {
<a name="l04460"></a>04460 <span class="preprocessor">#define CHECK_TYPE_MASK( type ) \</span>
<a name="l04461"></a>04461 <span class="preprocessor">        case type: \</span>
<a name="l04462"></a>04462 <span class="preprocessor">            if( mask &amp; type##Mask ) \</span>
<a name="l04463"></a>04463 <span class="preprocessor">            return true; \</span>
<a name="l04464"></a>04464 <span class="preprocessor">        break;</span>
<a name="l04465"></a>04465 <span class="preprocessor"></span>        CHECK_TYPE_MASK( Normal )
<a name="l04466"></a>04466         CHECK_TYPE_MASK( Desktop )
<a name="l04467"></a>04467         CHECK_TYPE_MASK( Dock )
<a name="l04468"></a>04468         CHECK_TYPE_MASK( Toolbar )
<a name="l04469"></a>04469         CHECK_TYPE_MASK( Menu )
<a name="l04470"></a>04470         CHECK_TYPE_MASK( Dialog )
<a name="l04471"></a>04471         CHECK_TYPE_MASK( <a class="code" href="classNET.html#a4b3115c0f40e7bc8e38119cc44dd60e0a169c19bad87c970ee27283f2b3378b7e">Override</a> )
<a name="l04472"></a>04472         CHECK_TYPE_MASK( TopMenu )
<a name="l04473"></a>04473         CHECK_TYPE_MASK( <a class="code" href="classNET.html#a4b3115c0f40e7bc8e38119cc44dd60e0aed5a5fbe48af6bcd46122f9bda58f0c8">Utility</a> )
<a name="l04474"></a>04474         CHECK_TYPE_MASK( <a class="code" href="classNET.html#a4b3115c0f40e7bc8e38119cc44dd60e0a07c62266f94f41d18b1f522c8f917333">Splash</a> )
<a name="l04475"></a>04475         CHECK_TYPE_MASK( <a class="code" href="classNET.html#a4b3115c0f40e7bc8e38119cc44dd60e0abbd1eb83dab2ebd2b1e1909f9bf03809">DropdownMenu</a> )
<a name="l04476"></a>04476         CHECK_TYPE_MASK( <a class="code" href="classNET.html#a4b3115c0f40e7bc8e38119cc44dd60e0abf2250001e5fc6e63a42f8cc86fc8725">PopupMenu</a> )
<a name="l04477"></a>04477         CHECK_TYPE_MASK( <a class="code" href="classNET.html#a4b3115c0f40e7bc8e38119cc44dd60e0a8e9c1aa0e9c868b99aa8b5c2008cc45c">Tooltip</a> )
<a name="l04478"></a>04478         CHECK_TYPE_MASK( <a class="code" href="classNET.html#a4b3115c0f40e7bc8e38119cc44dd60e0a0f3f4349eae1a7aca0e44da1f7f26984">Notification</a> )
<a name="l04479"></a>04479         CHECK_TYPE_MASK( <a class="code" href="classNET.html#a4b3115c0f40e7bc8e38119cc44dd60e0adf15e4b5b7558558fd4adb72866d5972">ComboBox</a> )
<a name="l04480"></a>04480         CHECK_TYPE_MASK( <a class="code" href="classNET.html#a4b3115c0f40e7bc8e38119cc44dd60e0a3f2e95b29fea412b74e23deb530bb7fc">DNDIcon</a> )
<a name="l04481"></a>04481 <span class="preprocessor">#undef CHECK_TYPE_MASK</span>
<a name="l04482"></a>04482 <span class="preprocessor"></span>        <span class="keywordflow">default</span>:
<a name="l04483"></a>04483             <span class="keywordflow">break</span>;
<a name="l04484"></a>04484     }
<a name="l04485"></a>04485     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l04486"></a>04486 }
<a name="l04487"></a>04487 
<a name="l04488"></a>04488 <a class="code" href="classNET.html#a4b3115c0f40e7bc8e38119cc44dd60e0" title="Window type.">NET::WindowType</a> NETWinInfo::windowType( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> supported_types )<span class="keyword"> const </span>{
<a name="l04489"></a>04489     <span class="keywordflow">for</span>( <span class="keywordtype">int</span> i = 0;
<a name="l04490"></a>04490      i &lt; p-&gt;types.size();
<a name="l04491"></a>04491      ++i ) {
<a name="l04492"></a>04492     <span class="comment">// return the type only if the application supports it</span>
<a name="l04493"></a>04493         <span class="keywordflow">if</span>( typeMatchesMask( p-&gt;types[ i ], supported_types ))
<a name="l04494"></a>04494             <span class="keywordflow">return</span> p-&gt;types[ i ];
<a name="l04495"></a>04495     }
<a name="l04496"></a>04496     <span class="keywordflow">return</span> Unknown;
<a name="l04497"></a>04497 }
<a name="l04498"></a>04498 
<a name="l04499"></a>04499 <a class="code" href="classNET.html#a4b3115c0f40e7bc8e38119cc44dd60e0" title="Window type.">NET::WindowType</a> NETWinInfo::windowType()<span class="keyword"> const </span>{
<a name="l04500"></a>04500     <span class="keywordflow">return</span> p-&gt;types[ 0 ];
<a name="l04501"></a>04501 }
<a name="l04502"></a>04502 
<a name="l04503"></a>04503 
<a name="l04504"></a>04504 <span class="keyword">const</span> <span class="keywordtype">char</span> *NETWinInfo::name()<span class="keyword"> const </span>{
<a name="l04505"></a>04505     <span class="keywordflow">return</span> p-&gt;name;
<a name="l04506"></a>04506 }
<a name="l04507"></a>04507 
<a name="l04508"></a>04508 
<a name="l04509"></a>04509 <span class="keyword">const</span> <span class="keywordtype">char</span> *NETWinInfo::visibleName()<span class="keyword"> const </span>{
<a name="l04510"></a>04510     <span class="keywordflow">return</span> p-&gt;visible_name;
<a name="l04511"></a>04511 }
<a name="l04512"></a>04512 
<a name="l04513"></a>04513 
<a name="l04514"></a>04514 <span class="keyword">const</span> <span class="keywordtype">char</span> *NETWinInfo::iconName()<span class="keyword"> const </span>{
<a name="l04515"></a>04515     <span class="keywordflow">return</span> p-&gt;icon_name;
<a name="l04516"></a>04516 }
<a name="l04517"></a>04517 
<a name="l04518"></a>04518 
<a name="l04519"></a>04519 <span class="keyword">const</span> <span class="keywordtype">char</span> *NETWinInfo::visibleIconName()<span class="keyword"> const </span>{
<a name="l04520"></a>04520     <span class="keywordflow">return</span> p-&gt;visible_icon_name;
<a name="l04521"></a>04521 }
<a name="l04522"></a>04522 
<a name="l04523"></a>04523 
<a name="l04524"></a>04524 <span class="keywordtype">int</span> NETWinInfo::desktop()<span class="keyword"> const </span>{
<a name="l04525"></a>04525     <span class="keywordflow">return</span> p-&gt;desktop;
<a name="l04526"></a>04526 }
<a name="l04527"></a>04527 
<a name="l04528"></a>04528 <span class="keywordtype">int</span> NETWinInfo::pid()<span class="keyword"> const </span>{
<a name="l04529"></a>04529     <span class="keywordflow">return</span> p-&gt;pid;
<a name="l04530"></a>04530 }
<a name="l04531"></a>04531 
<a name="l04532"></a>04532 Time NETWinInfo::userTime()<span class="keyword"> const </span>{
<a name="l04533"></a>04533     <span class="keywordflow">return</span> p-&gt;user_time;
<a name="l04534"></a>04534 }
<a name="l04535"></a>04535 
<a name="l04536"></a>04536 <span class="keyword">const</span> <span class="keywordtype">char</span>* NETWinInfo::startupId()<span class="keyword"> const </span>{
<a name="l04537"></a>04537     <span class="keywordflow">return</span> p-&gt;startup_id;
<a name="l04538"></a>04538 }
<a name="l04539"></a>04539 
<a name="l04540"></a>04540 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> NETWinInfo::allowedActions()<span class="keyword"> const </span>{
<a name="l04541"></a>04541     <span class="keywordflow">return</span> p-&gt;allowed_actions;
<a name="l04542"></a>04542 }
<a name="l04543"></a>04543 
<a name="l04544"></a>04544 <span class="keywordtype">bool</span> NETWinInfo::hasNETSupport()<span class="keyword"> const </span>{
<a name="l04545"></a>04545     <span class="keywordflow">return</span> p-&gt;has_net_support;
<a name="l04546"></a>04546 }
<a name="l04547"></a>04547 
<a name="l04548"></a>04548 Window NETWinInfo::transientFor()<span class="keyword"> const </span>{
<a name="l04549"></a>04549     <span class="keywordflow">return</span> p-&gt;transient_for;
<a name="l04550"></a>04550 }
<a name="l04551"></a>04551 
<a name="l04552"></a>04552 Window NETWinInfo::groupLeader()<span class="keyword"> const </span>{
<a name="l04553"></a>04553     <span class="keywordflow">return</span> p-&gt;window_group;
<a name="l04554"></a>04554 }
<a name="l04555"></a>04555 
<a name="l04556"></a>04556 <span class="keyword">const</span> <span class="keywordtype">char</span>* NETWinInfo::windowClassClass()<span class="keyword"> const </span>{
<a name="l04557"></a>04557     <span class="keywordflow">return</span> p-&gt;class_class;
<a name="l04558"></a>04558 }
<a name="l04559"></a>04559 
<a name="l04560"></a>04560 <span class="keyword">const</span> <span class="keywordtype">char</span>* NETWinInfo::windowClassName()<span class="keyword"> const </span>{
<a name="l04561"></a>04561     <span class="keywordflow">return</span> p-&gt;class_name;
<a name="l04562"></a>04562 }
<a name="l04563"></a>04563 
<a name="l04564"></a>04564 <span class="keyword">const</span> <span class="keywordtype">char</span>* NETWinInfo::windowRole()<span class="keyword"> const </span>{
<a name="l04565"></a>04565     <span class="keywordflow">return</span> p-&gt;role;
<a name="l04566"></a>04566 }
<a name="l04567"></a>04567 
<a name="l04568"></a>04568 <span class="keyword">const</span> <span class="keywordtype">char</span>* NETWinInfo::clientMachine()<span class="keyword"> const </span>{
<a name="l04569"></a>04569     <span class="keywordflow">return</span> p-&gt;client_machine;
<a name="l04570"></a>04570 }
<a name="l04571"></a>04571 
<a name="l04572"></a>04572 Bool NETWinInfo::handledIcons()<span class="keyword"> const </span>{
<a name="l04573"></a>04573     <span class="keywordflow">return</span> p-&gt;handled_icons;
<a name="l04574"></a>04574 }
<a name="l04575"></a>04575 
<a name="l04576"></a>04576 
<a name="l04577"></a>04577 Window NETWinInfo::kdeSystemTrayWinFor()<span class="keyword"> const </span>{
<a name="l04578"></a>04578     <span class="keywordflow">return</span> p-&gt;kde_system_tray_win_for;
<a name="l04579"></a>04579 }
<a name="l04580"></a>04580 
<a name="l04581"></a>04581 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>* NETWinInfo::passedProperties()<span class="keyword"> const </span>{
<a name="l04582"></a>04582     <span class="keywordflow">return</span> p-&gt;properties;
<a name="l04583"></a>04583 }
<a name="l04584"></a>04584 
<a name="l04585"></a>04585 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> NETWinInfo::properties()<span class="keyword"> const </span>{
<a name="l04586"></a>04586     <span class="keywordflow">return</span> p-&gt;properties[ PROTOCOLS ];
<a name="l04587"></a>04587 }
<a name="l04588"></a>04588 
<a name="l04589"></a>04589 
<a name="l04590"></a>04590 <a class="code" href="classNET.html#afb6eef2d78c27ea693652a30d2a07c05" title="Client window mapping state.">NET::MappingState</a> NETWinInfo::mappingState()<span class="keyword"> const </span>{
<a name="l04591"></a>04591     <span class="keywordflow">return</span> p-&gt;mapping_state;
<a name="l04592"></a>04592 }
<a name="l04593"></a>04593 
<a name="l04594"></a>04594 <span class="keywordtype">void</span> NETRootInfo::virtual_hook( <span class="keywordtype">int</span>, <span class="keywordtype">void</span>* )
<a name="l04595"></a>04595 { <span class="comment">/*BASE::virtual_hook( id, data );*/</span> }
<a name="l04596"></a>04596 
<a name="l04597"></a>04597 <span class="keywordtype">void</span> NETWinInfo::virtual_hook( <span class="keywordtype">int</span>, <span class="keywordtype">void</span>* )
<a name="l04598"></a>04598 { <span class="comment">/*BASE::virtual_hook( id, data );*/</span> }
<a name="l04599"></a>04599 
<a name="l04600"></a>04600 <span class="comment">// Functions for X timestamp comparing. For Time being 32bit they&#39;re fairly simple</span>
<a name="l04601"></a>04601 <span class="comment">// (the #if 0 part), but on 64bit architectures Time is 64bit unsigned long,</span>
<a name="l04602"></a>04602 <span class="comment">// so there special care needs to be taken to always use only the lower 32bits.</span>
<a name="l04603"></a>04603 <span class="preprocessor">#if 0</span>
<a name="l04604"></a>04604 <span class="preprocessor"></span><span class="keywordtype">int</span> <a class="code" href="classNET.html#ac6cf69eec8a1bb4fe21c1cd51b0782e9" title="Compares two X timestamps, taking into account wrapping and 64bit architectures.">NET::timestampCompare</a>( Time time1, Time time2 ) <span class="comment">// like strcmp()</span>
<a name="l04605"></a>04605     {
<a name="l04606"></a>04606     <span class="keywordflow">if</span>( time1 == time2 )
<a name="l04607"></a>04607         <span class="keywordflow">return</span> 0;
<a name="l04608"></a>04608     <span class="keywordflow">return</span> ( time1 - time2 ) &lt; 0x7fffffffU ? 1 : -1; <span class="comment">// time1 &gt; time2 -&gt; 1, handle wrapping</span>
<a name="l04609"></a>04609     }
<a name="l04610"></a>04610 
<a name="l04611"></a>04611 Time <a class="code" href="classNET.html#a13dcb62f162416d353b97bd9f5f3e7f4" title="Returns a difference of two X timestamps, time2 - time1, where time2 must be later than time1...">NET::timestampDiff</a>( Time time1, Time time2 ) <span class="comment">// returns time2 - time1</span>
<a name="l04612"></a>04612     { <span class="comment">// no need to handle wrapping?</span>
<a name="l04613"></a>04613     <span class="keywordflow">return</span> time2 - time1;
<a name="l04614"></a>04614     }
<a name="l04615"></a>04615 <span class="preprocessor">#else</span>
<a name="l04616"></a>04616 <span class="preprocessor"></span><span class="keywordtype">int</span> <a class="code" href="classNET.html#ac6cf69eec8a1bb4fe21c1cd51b0782e9" title="Compares two X timestamps, taking into account wrapping and 64bit architectures.">NET::timestampCompare</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> time1_, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> time2_ ) <span class="comment">// like strcmp()</span>
<a name="l04617"></a>04617     {
<a name="l04618"></a>04618     Q_UINT32 time1 = time1_;
<a name="l04619"></a>04619     Q_UINT32 time2 = time2_;
<a name="l04620"></a>04620     <span class="keywordflow">if</span>( time1 == time2 )
<a name="l04621"></a>04621         <span class="keywordflow">return</span> 0;
<a name="l04622"></a>04622     <span class="keywordflow">return</span> Q_UINT32( time1 - time2 ) &lt; 0x7fffffffU ? 1 : -1; <span class="comment">// time1 &gt; time2 -&gt; 1, handle wrapping</span>
<a name="l04623"></a>04623     }
<a name="l04624"></a>04624 
<a name="l04625"></a>04625 <span class="keywordtype">int</span> <a class="code" href="classNET.html#a13dcb62f162416d353b97bd9f5f3e7f4" title="Returns a difference of two X timestamps, time2 - time1, where time2 must be later than time1...">NET::timestampDiff</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> time1_, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> time2_ ) <span class="comment">// returns time2 - time1</span>
<a name="l04626"></a>04626     { <span class="comment">// no need to handle wrapping?</span>
<a name="l04627"></a>04627     Q_UINT32 time1 = time1_;
<a name="l04628"></a>04628     Q_UINT32 time2 = time2_;
<a name="l04629"></a>04629     <span class="keywordflow">return</span> Q_UINT32( time2 - time1 );
<a name="l04630"></a>04630     }
<a name="l04631"></a>04631 <span class="preprocessor">#endif</span>
<a name="l04632"></a>04632 <span class="preprocessor"></span>
<a name="l04633"></a>04633 
<a name="l04634"></a>04634 <span class="preprocessor">#endif</span>
</pre></div></div>
</div>
    </div></div>


      </td>
  </tr>
  <tr>
    <td valign="top" id="leftmenu" width="25%">
      <a name="navigation"></a>
      <div class="menu_box"><h2>kdecore</h2>
<div class="nav_list">
<ul><li><a href="index.html">Main Page</a></li><li><a href="modules.html">Modules</a></li><li><a href="namespaces.html">Namespace List</a></li><li><a href="hierarchy.html">Class Hierarchy</a></li><li><a href="classes.html">Alphabetical List</a></li><li><a href="annotated.html">Class List</a></li><li><a href="files.html">File List</a></li><li><a href="namespacemembers.html">Namespace Members</a></li><li><a href="functions.html">Class Members</a></li><li><a href="pages.html">Related Pages</a></li></ul>
<!--
<h2>Class Picker</h2>
<div style="text-align: center;">
<form name="guideform">
<select name="guidelinks" style="width:100%;" onChange="window.location=document.guideform.guidelinks.options[document.guideform.guidelinks.selectedIndex].value">
<option value="annotated.html">-- Choose --</option>
  <option value="classKAboutData.html">kaboutdata</option>,  <option value="classKAboutPerson.html">kaboutperson</option>,  <option value="classKAboutTranslator.html">kabouttranslator</option>,  <option value="classKAccel.html">kaccel</option>,  <option value="classKAcceleratorManager.html">kacceleratormanager</option>,  <option value="classKAccelManagerAlgorithm.html">kaccelmanageralgorithm</option>,  <option value="classKAccelShortcutList.html">kaccelshortcutlist</option>,  <option value="classKAccelString.html">kaccelstring</option>,  <option value="classKAddressInfo.html">kaddressinfo</option>,  <option value="classKAppDCOPInterface.html">kappdcopinterface</option>,  <option value="classKApplication.html">kapplication</option>,  <option value="classKAsyncIO.html">kasyncio</option>,  <option value="classKAudioPlayer.html">kaudioplayer</option>,  <option value="classKBufferedIO.html">kbufferedio</option>,  <option value="classKCalendarSystem.html">kcalendarsystem</option>,  <option value="classKCalendarSystemFactory.html">kcalendarsystemfactory</option>,  <option value="classKCalendarSystemJalali.html">kcalendarsystemjalali</option>,  <option value="classKCatalogue.html">kcatalogue</option>,  <option value="classKCharMacroExpander.html">kcharmacroexpander</option>,  <option value="classKCharsets.html">kcharsets</option>,  <option value="classKClipboardSynchronizer.html">kclipboardsynchronizer</option>,  <option value="classKCmdLineArgs.html">kcmdlineargs</option>,  <option value="classKCodecs.html">kcodecs</option>,  <option value="classKCompletion.html">kcompletion</option>,  <option value="classKCompletionBase.html">kcompletionbase</option>,  <option value="classKCompletionMatches.html">kcompletionmatches</option>,  <option value="classKCompTreeNode.html">kcomptreenode</option>,  <option value="classKConfig.html">kconfig</option>,  <option value="classKConfigBackEnd.html">kconfigbackend</option>,  <option value="classKConfigBase.html">kconfigbase</option>,  <option value="classKConfigDialogManager.html">kconfigdialogmanager</option>,  <option value="classKConfigGroup.html">kconfiggroup</option>,  <option value="classKConfigGroupSaver.html">kconfiggroupsaver</option>,  <option value="classKConfigINIBackEnd.html">kconfiginibackend</option>,  <option value="classKConfigSkeleton.html">kconfigskeleton</option>,  <option value="classKConfigSkeleton_1_1ItemBool.html">kconfigskeleton::itembool</option>,  <option value="classKConfigSkeleton_1_1ItemColor.html">kconfigskeleton::itemcolor</option>,  <option value="classKConfigSkeleton_1_1ItemDateTime.html">kconfigskeleton::itemdatetime</option>,  <option value="classKConfigSkeleton_1_1ItemDouble.html">kconfigskeleton::itemdouble</option>,  <option value="classKConfigSkeleton_1_1ItemEnum.html">kconfigskeleton::itemenum</option>,  <option value="classKConfigSkeleton_1_1ItemFont.html">kconfigskeleton::itemfont</option>,  <option value="classKConfigSkeleton_1_1ItemInt.html">kconfigskeleton::itemint</option>,  <option value="classKConfigSkeleton_1_1ItemInt64.html">kconfigskeleton::itemint64</option>,  <option value="classKConfigSkeleton_1_1ItemIntList.html">kconfigskeleton::itemintlist</option>,  <option value="classKConfigSkeleton_1_1ItemLong.html">kconfigskeleton::itemlong</option>,  <option value="classKConfigSkeleton_1_1ItemPassword.html">kconfigskeleton::itempassword</option>,  <option value="classKConfigSkeleton_1_1ItemPath.html">kconfigskeleton::itempath</option>,  <option value="classKConfigSkeleton_1_1ItemPathList.html">kconfigskeleton::itempathlist</option>,  <option value="classKConfigSkeleton_1_1ItemPoint.html">kconfigskeleton::itempoint</option>,  <option value="classKConfigSkeleton_1_1ItemProperty.html">kconfigskeleton::itemproperty</option>,  <option value="classKConfigSkeleton_1_1ItemRect.html">kconfigskeleton::itemrect</option>,  <option value="classKConfigSkeleton_1_1ItemSize.html">kconfigskeleton::itemsize</option>,  <option value="classKConfigSkeleton_1_1ItemString.html">kconfigskeleton::itemstring</option>,  <option value="classKConfigSkeleton_1_1ItemStringList.html">kconfigskeleton::itemstringlist</option>,  <option value="classKConfigSkeleton_1_1ItemUInt.html">kconfigskeleton::itemuint</option>,  <option value="classKConfigSkeleton_1_1ItemUInt64.html">kconfigskeleton::itemuint64</option>,  <option value="classKConfigSkeleton_1_1ItemULong.html">kconfigskeleton::itemulong</option>,  <option value="classKConfigSkeletonItem.html">kconfigskeletonitem</option>,  <option value="classKCrash.html">kcrash</option>,  <option value="classKDCOPPropertyProxy.html">kdcoppropertyproxy</option>,  <option value="classKDebugDCOPIface.html">kdebugdcopiface</option>,  <option value="classKDesktopFile.html">kdesktopfile</option>,  <option value="classKExtendedSocket.html">kextendedsocket</option>,  <option value="classKGenericFactory.html">kgenericfactory</option>,  <option value="classKGenericFactory_3_01KTypeList_3_01Product_00_01ProductListTail_01_4_00_01KTypeList_3_01Pare1ed8d1e5a9847c99711cad3b12c7e96c.html">kgenericfactory< ktypelist< product, productlisttail >, ktypelist< pare1ed8d1e5a9847c99711cad3b12c7e96c</option>,  <option value="classKGenericFactory_3_01KTypeList_3_01Product_00_01ProductListTail_01_4_00_01KTypeList_3_01Paref6a00f76851e0daa2cb662bb8a41fc7f.html">kgenericfactory< ktypelist< product, productlisttail >, ktypelist< paref6a00f76851e0daa2cb662bb8a41fc7f</option>,  <option value="classKGenericFactory_3_01KTypeList_3_01Product_00_01ProductListTail_01_4_00_01QObject_01_4.html">kgenericfactory< ktypelist< product, productlisttail >, qobject ></option>,  <option value="classKGlobal.html">kglobal</option>,  <option value="classKGlobalAccel.html">kglobalaccel</option>,  <option value="classKGlobalSettings.html">kglobalsettings</option>,  <option value="classKIcon.html">kicon</option>,  <option value="classKIconEffect.html">kiconeffect</option>,  <option value="classKIconLoader.html">kiconloader</option>,  <option value="classKIconTheme.html">kicontheme</option>,  <option value="classKInetSocketAddress.html">kinetsocketaddress</option>,  <option value="classKInstance.html">kinstance</option>,  <option value="classKIOBufferBase.html">kiobufferbase</option>,  <option value="classKIPC.html">kipc</option>,  <option value="classKKey.html">kkey</option>,  <option value="classKKeyNative.html">kkeynative</option>,  <option value="classKKeySequence.html">kkeysequence</option>,  <option value="classKLibFactory.html">klibfactory</option>,  <option value="classKLibLoader.html">klibloader</option>,  <option value="classKLibrary.html">klibrary</option>,  <option value="classKLocale.html">klocale</option>,  <option value="classKLockFile.html">klockfile</option>,  <option value="classKMacroExpanderBase.html">kmacroexpanderbase</option>,  <option value="classKMD4.html">kmd4</option>,  <option value="classKMD5.html">kmd5</option>,  <option value="classKMimeSourceFactory.html">kmimesourcefactory</option>,  <option value="classKMountPoint.html">kmountpoint</option>,  <option value="classKMultipleDrag.html">kmultipledrag</option>,  <option value="classKNetwork_1_1KActiveSocketBase.html">knetwork::kactivesocketbase</option>,  <option value="classKNetwork_1_1KBufferedSocket.html">knetwork::kbufferedsocket</option>,  <option value="classKNetwork_1_1KClientSocketBase.html">knetwork::kclientsocketbase</option>,  <option value="classKNetwork_1_1KDatagramPacket.html">knetwork::kdatagrampacket</option>,  <option value="classKNetwork_1_1KDatagramSocket.html">knetwork::kdatagramsocket</option>,  <option value="classKNetwork_1_1KHttpProxySocketDevice.html">knetwork::khttpproxysocketdevice</option>,  <option value="classKNetwork_1_1KInetSocketAddress.html">knetwork::kinetsocketaddress</option>,  <option value="classKNetwork_1_1KIpAddress.html">knetwork::kipaddress</option>,  <option value="classKNetwork_1_1KMulticastSocket.html">knetwork::kmulticastsocket</option>,  <option value="classKNetwork_1_1KMulticastSocketImpl.html">knetwork::kmulticastsocketimpl</option>,  <option value="classKNetwork_1_1KNetworkInterface.html">knetwork::knetworkinterface</option>,  <option value="classKNetwork_1_1KPassiveSocketBase.html">knetwork::kpassivesocketbase</option>,  <option value="classKNetwork_1_1KResolver.html">knetwork::kresolver</option>,  <option value="classKNetwork_1_1KResolverEntry.html">knetwork::kresolverentry</option>,  <option value="classKNetwork_1_1KResolverResults.html">knetwork::kresolverresults</option>,  <option value="classKNetwork_1_1KResolverWorkerBase_1_1ResolverLocker.html">knetwork::kresolverworkerbase::resolverlocker</option>,  <option value="classKNetwork_1_1KReverseResolver.html">knetwork::kreverseresolver</option>,  <option value="classKNetwork_1_1KServerSocket.html">knetwork::kserversocket</option>,  <option value="classKNetwork_1_1KSocketAddress.html">knetwork::ksocketaddress</option>,  <option value="classKNetwork_1_1KSocketBase.html">knetwork::ksocketbase</option>,  <option value="classKNetwork_1_1KSocketDevice.html">knetwork::ksocketdevice</option>,  <option value="classKNetwork_1_1KSocketDeviceFactory.html">knetwork::ksocketdevicefactory</option>,  <option value="classKNetwork_1_1KSocksSocketDevice.html">knetwork::ksockssocketdevice</option>,  <option value="classKNetwork_1_1KStreamSocket.html">knetwork::kstreamsocket</option>,  <option value="classKNetwork_1_1KUnixSocketAddress.html">knetwork::kunixsocketaddress</option>,  <option value="classKNotifyClient_1_1Instance.html">knotifyclient::instance</option>,  <option value="classKPalette.html">kpalette</option>,  <option value="classKPixmapProvider.html">kpixmapprovider</option>,  <option value="classKPopupAccelManager.html">kpopupaccelmanager</option>,  <option value="classKProcess.html">kprocess</option>,  <option value="classKProcessController.html">kprocesscontroller</option>,  <option value="classKProcIO.html">kprocio</option>,  <option value="classKProtocolInfoFactory.html">kprotocolinfofactory</option>,  <option value="classKPty.html">kpty</option>,  <option value="classKRandomSequence.html">krandomsequence</option>,  <option value="classKRegExp.html">kregexp</option>,  <option value="classKRegExpPrivate.html">kregexpprivate</option>,  <option value="classKRFCDate.html">krfcdate</option>,  <option value="classKRootProp.html">krootprop</option>,  <option value="classKSaveFile.html">ksavefile</option>,  <option value="classKServerSocket.html">kserversocket</option>,  <option value="classKSessionManaged.html">ksessionmanaged</option>,  <option value="classKShared.html">kshared</option>,  <option value="classKSharedConfig.html">ksharedconfig</option>,  <option value="classKSharedPtr.html">ksharedptr</option>,  <option value="classKShellProcess.html">kshellprocess</option>,  <option value="classKShortcut.html">kshortcut</option>,  <option value="classKShortcutList.html">kshortcutlist</option>,  <option value="classKSimpleConfig.html">ksimpleconfig</option>,  <option value="classKSocket.html">ksocket</option>,  <option value="classKSocketAddress.html">ksocketaddress</option>,  <option value="classKSocks.html">ksocks</option>,  <option value="classKSortableItem.html">ksortableitem</option>,  <option value="classKSortableValueList.html">ksortablevaluelist</option>,  <option value="classKStandardDirs.html">kstandarddirs</option>,  <option value="classKStaticDeleter.html">kstaticdeleter</option>,  <option value="classKStaticDeleterBase.html">kstaticdeleterbase</option>,  <option value="classKStdAccel_1_1ShortcutList.html">kstdaccel::shortcutlist</option>,  <option value="classKStringHandler.html">kstringhandler</option>,  <option value="classKSycocaEntry.html">ksycocaentry</option>,  <option value="classKSycocaFactoryList.html">ksycocafactorylist</option>,  <option value="classKTempDir.html">ktempdir</option>,  <option value="classKTempFile.html">ktempfile</option>,  <option value="classKTimezone.html">ktimezone</option>,  <option value="classKTimezoneDetails.html">ktimezonedetails</option>,  <option value="classKTimezones.html">ktimezones</option>,  <option value="classKTimezoneSource.html">ktimezonesource</option>,  <option value="classKUniqueApplication.html">kuniqueapplication</option>,  <option value="classKUnixSocketAddress.html">kunixsocketaddress</option>,  <option value="classKURL.html">kurl</option>,  <option value="classKURL_1_1List.html">kurl::list</option>,  <option value="classKURLDrag.html">kurldrag</option>,  <option value="classKUser.html">kuser</option>,  <option value="classKUserGroup.html">kusergroup</option>,  <option value="classKVMAllocator.html">kvmallocator</option>,  <option value="classKWin.html">kwin</option>,  <option value="classKWin_1_1WindowInfo.html">kwin::windowinfo</option>,  <option value="classKWinModule.html">kwinmodule</option>,  <option value="classKWordMacroExpander.html">kwordmacroexpander</option>,  <option value="classKXErrorHandler.html">kxerrorhandler</option>,  <option value="classKZoneAllocator.html">kzoneallocator</option>,  <option value="classNET.html">net</option>,
</select>
</form>
</div>
-->
</div></div>
<div class="menu_box"><h2>API Dox</h2>
<div class="nav_list">
<ul>
<li><a href="../../arts/html/index.html">arts</a></li><li><a href="../../dcop/html/index.html">dcop</a></li><li><a href="../../dnssd/html/index.html">dnssd</a></li><li><a href="../../interfaces/html/index.html">interfaces</a></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<a href="../../interfaces/kimproxy/interface/html/index.html">interface</a></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<a href="../../interfaces/kimproxy/library/html/index.html">library</a></li><li>&nbsp;&nbsp;<a href="../../interfaces/kspeech/html/index.html">kspeech</a></li><li>&nbsp;&nbsp;<a href="../../interfaces/ktexteditor/html/index.html">ktexteditor</a></li><li><a href="../../kabc/html/index.html">kabc</a></li><li><a href="../../kate/html/index.html">kate</a></li><li><a href="../../kcmshell/html/index.html">kcmshell</a></li><li><a href="../../kdecore/html/index.html">kdecore</a></li><li><a href="../../kded/html/index.html">kded</a></li><li><a href="../../kdefx/html/index.html">kdefx</a></li><li><a href="../../kdeprint/html/index.html">kdeprint</a></li><li><a href="../../kdesu/html/index.html">kdesu</a></li><li><a href="../../kdeui/html/index.html">kdeui</a></li><li><a href="../../kdoctools/html/index.html">kdoctools</a></li><li><a href="../../khtml/html/index.html">khtml</a></li><li><a href="../../kimgio/html/index.html">kimgio</a></li><li><a href="../../kinit/html/index.html">kinit</a></li><li><a href="../../kio/html/index.html">kio</a></li><li>&nbsp;&nbsp;<a href="../../kio/bookmarks/html/index.html">bookmarks</a></li><li>&nbsp;&nbsp;<a href="../../kio/httpfilter/html/index.html">httpfilter</a></li><li>&nbsp;&nbsp;<a href="../../kio/kfile/html/index.html">kfile</a></li><li>&nbsp;&nbsp;<a href="../../kio/kio/html/index.html">kio</a></li><li>&nbsp;&nbsp;<a href="../../kio/kioexec/html/index.html">kioexec</a></li><li>&nbsp;&nbsp;<a href="../../kio/kpasswdserver/html/index.html">kpasswdserver</a></li><li>&nbsp;&nbsp;<a href="../../kio/kssl/html/index.html">kssl</a></li><li><a href="../../kioslave/html/index.html">kioslave</a></li><li>&nbsp;&nbsp;<a href="../../kioslave/http/html/index.html">http</a></li><li><a href="../../kjs/html/index.html">kjs</a></li><li><a href="../../kmdi/html/index.html">kmdi</a></li><li>&nbsp;&nbsp;<a href="../../kmdi/kmdi/html/index.html">kmdi</a></li><li><a href="../../knewstuff/html/index.html">knewstuff</a></li><li><a href="../../kparts/html/index.html">kparts</a></li><li><a href="../../kresources/html/index.html">kresources</a></li><li><a href="../../kspell2/html/index.html">kspell2</a></li><li><a href="../../kunittest/html/index.html">kunittest</a></li><li><a href="../../kutils/html/index.html">kutils</a></li><li><a href="../../kwallet/html/index.html">kwallet</a></li><li><a href="../../libkmid/html/index.html">libkmid</a></li><li><a href="../../libkscreensaver/html/index.html">libkscreensaver</a></li>
</ul></div></div>


        </td>
</tr>
</table>

<span class="doNotDisplay">
  <a href="http://www.kde.org/" accesskey="8">KDE Home</a> |
  <a href="http://accessibility.kde.org/" accesskey="9">KDE Accessibility Home</a> |
  <a href="http://www.kde.org/media/accesskeys.php" accesskey="0">Description of Access Keys</a>
</span>


<div style="height: 8px"></div>

<div id="footer">
  <div id="footer_left">
    Maintained by <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;groo&#116;&#64;kde&#46;or&#x67;">Adriaan de Groot</a>
and
<a href="&#109;a&#105;&#108;&#116;&#111;&#58;w&#105;nter&#64;kde&#46;or&#x67">Allen Winter</a>.
<br/>
    KDE and K Desktop Environment are trademarks of <a href="http://www.kde.org/areas/kde-ev/" title="Homepage of the KDE non-profit Organization">KDE e.V.</a> |
    <a href="http://www.kde.org/contact/impressum.php">Legal</a>
  </div>
  <div id="footer_right"><img src="/media/images/footer_right.png" style="margin: 0px" alt="" /></div>
</div>

<!--
WARNING: DO NOT SEND MAIL TO THE FOLLOWING EMAIL ADDRESS! YOU WILL
BE BLOCKED INSTANTLY AND PERMANENTLY!
<a href="mailto:aaaatrap-425acc3b5374943f@kde.org">Block me</a>
WARNING END
-->

</body>
</html>