Sophie

Sophie

distrib > Mandriva > 2006.0 > x86_64 > by-pkgid > d0c58635c3fcc548e9b6ce88c8980028 > files > 1380

lib64kdebase4-devel-3.4.2-55.5.20060mdk.x86_64.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
  <title>kwin Library: client.cpp Source File (kwin Library)</title>
  <link href="../../common/doxygen.css" rel="stylesheet" type="text/css">
</head>
<div class="header">
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td rowspan="2" width="92">
<a href="../../index.html" title="The API documentation main page"><img src="../../common/docheadergears.png" style="border:0px;" alt=""></a>
</td>
<td width="95%">
<h1>kwin Library API Documentation</h1>
</td>
</tr>
<tr>
<td valign="bottom">
<table class="links" border=0 cellspacing=0>
<tr>
<td><a href="index.html">Overview</a></td>
<td><a href="hierarchy.html" title="Inheritance list, sorted roughly  alphabetically">Class&nbsp;Hierarchy</a></td>
<td><a href="classes.html" title="Alphabetical list of classes">Classes</a></td>
<td><a href="annotated.html" title="Classes, structs, unions and interfaces with brief descriptions">Classes&nbsp;(annotated)</a></td>
<td><a href="functions.html" title="Documented class members with links to the classes they belong to">Members</a></td>
<td><a href="namespaces.html" title="All documented namespaces with brief descriptions">Namespaces</a></td>
<td><a href="files.html" title="A list of all documented files with brief descriptions">Source&nbsp;Files</a></td>
</tr>
</table>
</td></tr></table>
</div>
<div id="hgrad"></div>
<div class="text">
<!-- Generated by Doxygen 1.4.4 -->
<h1>client.cpp</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*****************************************************************</span>
<a name="l00002"></a>00002 <span class="comment"> KWin - the KDE window manager</span>
<a name="l00003"></a>00003 <span class="comment"> This file is part of the KDE project.</span>
<a name="l00004"></a>00004 <span class="comment"></span>
<a name="l00005"></a>00005 <span class="comment">Copyright (C) 1999, 2000 Matthias Ettrich &lt;ettrich@kde.org&gt;</span>
<a name="l00006"></a>00006 <span class="comment">Copyright (C) 2003 Lubos Lunak &lt;l.lunak@kde.org&gt;</span>
<a name="l00007"></a>00007 <span class="comment"></span>
<a name="l00008"></a>00008 <span class="comment">You can Freely distribute this program under the GNU General Public</span>
<a name="l00009"></a>00009 <span class="comment">License. See the file "COPYING" for the exact licensing terms.</span>
<a name="l00010"></a>00010 <span class="comment">******************************************************************/</span>
<a name="l00011"></a>00011 
<a name="l00012"></a>00012 <span class="preprocessor">#include "client.h"</span>
<a name="l00013"></a>00013 
<a name="l00014"></a>00014 <span class="preprocessor">#include &lt;qapplication.h&gt;</span>
<a name="l00015"></a>00015 <span class="preprocessor">#include &lt;qpainter.h&gt;</span>
<a name="l00016"></a>00016 <span class="preprocessor">#include &lt;qdatetime.h&gt;</span>
<a name="l00017"></a>00017 <span class="preprocessor">#include &lt;kprocess.h&gt;</span>
<a name="l00018"></a>00018 <span class="preprocessor">#include &lt;unistd.h&gt;</span>
<a name="l00019"></a>00019 <span class="preprocessor">#include &lt;kstandarddirs.h&gt;</span>
<a name="l00020"></a>00020 <span class="preprocessor">#include &lt;qwhatsthis.h&gt;</span>
<a name="l00021"></a>00021 <span class="preprocessor">#include &lt;kwin.h&gt;</span>
<a name="l00022"></a>00022 <span class="preprocessor">#include &lt;kiconloader.h&gt;</span>
<a name="l00023"></a>00023 <span class="preprocessor">#include &lt;stdlib.h&gt;</span>
<a name="l00024"></a>00024 
<a name="l00025"></a>00025 <span class="preprocessor">#include "bridge.h"</span>
<a name="l00026"></a>00026 <span class="preprocessor">#include "group.h"</span>
<a name="l00027"></a>00027 <span class="preprocessor">#include "workspace.h"</span>
<a name="l00028"></a>00028 <span class="preprocessor">#include "atoms.h"</span>
<a name="l00029"></a>00029 <span class="preprocessor">#include "notifications.h"</span>
<a name="l00030"></a>00030 <span class="preprocessor">#include "rules.h"</span>
<a name="l00031"></a>00031 
<a name="l00032"></a>00032 <span class="preprocessor">#include &lt;X11/extensions/shape.h&gt;</span>
<a name="l00033"></a>00033 
<a name="l00034"></a>00034 <span class="comment">// put all externs before the namespace statement to allow the linker</span>
<a name="l00035"></a>00035 <span class="comment">// to resolve them properly</span>
<a name="l00036"></a>00036 
<a name="l00037"></a>00037 <span class="keyword">extern</span> Atom qt_wm_state;
<a name="l00038"></a>00038 <span class="keyword">extern</span> Time qt_x_time;
<a name="l00039"></a>00039 <span class="keyword">extern</span> Atom qt_window_role;
<a name="l00040"></a>00040 <span class="keyword">extern</span> Atom qt_sm_client_id;
<a name="l00041"></a>00041 
<a name="l00042"></a>00042 <span class="keyword">namespace </span>KWinInternal
<a name="l00043"></a>00043 {
<a name="l00044"></a>00044 
<a name="l00045"></a>00045 <span class="comment">/*</span>
<a name="l00046"></a>00046 <span class="comment"></span>
<a name="l00047"></a>00047 <span class="comment"> Creating a client:</span>
<a name="l00048"></a>00048 <span class="comment">     - only by calling Workspace::createClient()</span>
<a name="l00049"></a>00049 <span class="comment">         - it creates a new client and calls manage() for it</span>
<a name="l00050"></a>00050 <span class="comment"></span>
<a name="l00051"></a>00051 <span class="comment"> Destroying a client:</span>
<a name="l00052"></a>00052 <span class="comment">     - destroyClient() - only when the window itself has been destroyed</span>
<a name="l00053"></a>00053 <span class="comment">     - releaseWindow() - the window is kept, only the client itself is destroyed</span>
<a name="l00054"></a>00054 <span class="comment"></span>
<a name="l00055"></a>00055 <span class="comment">*/</span>
<a name="l00056"></a>00056 
<a name="l00057"></a>00057 
<a name="l00069"></a><a class="code" href="classKWinInternal_1_1Client.html#a0">00069</a> <a class="code" href="classKWinInternal_1_1Client.html#a0">Client::Client</a>( <a class="code" href="classKWinInternal_1_1Workspace.html">Workspace</a> *ws )
<a name="l00070"></a>00070     :   QObject( NULL ),
<a name="l00071"></a>00071         client( None ),
<a name="l00072"></a>00072         wrapper( None ),
<a name="l00073"></a>00073         frame( None ),
<a name="l00074"></a>00074         decoration( NULL ),
<a name="l00075"></a>00075         wspace( ws ),
<a name="l00076"></a>00076         bridge( new <a class="code" href="classKWinInternal_1_1Bridge.html">Bridge</a>( this )),
<a name="l00077"></a>00077         move_faked_activity( false ),
<a name="l00078"></a>00078         move_resize_grab_window( None ),
<a name="l00079"></a>00079         transient_for( NULL ),
<a name="l00080"></a>00080         transient_for_id( None ),
<a name="l00081"></a>00081         original_transient_for_id( None ),
<a name="l00082"></a>00082         in_group( NULL ),
<a name="l00083"></a>00083         window_group( None ),
<a name="l00084"></a>00084         in_layer( UnknownLayer ),
<a name="l00085"></a>00085         ping_timer( NULL ),
<a name="l00086"></a>00086         process_killer( NULL ),
<a name="l00087"></a>00087         user_time( CurrentTime ), <span class="comment">// not known yet</span>
<a name="l00088"></a>00088         allowed_actions( 0 ),
<a name="l00089"></a>00089         postpone_geometry_updates( 0 ),
<a name="l00090"></a>00090         pending_geometry_update( false ),
<a name="l00091"></a>00091         shade_geometry_change( false ),
<a name="l00092"></a>00092         border_left( 0 ),
<a name="l00093"></a>00093         border_right( 0 ),
<a name="l00094"></a>00094         border_top( 0 ),
<a name="l00095"></a>00095         border_bottom( 0 )
<a name="l00096"></a>00096 <span class="comment">// SELI do all as initialization</span>
<a name="l00097"></a>00097     {
<a name="l00098"></a>00098     autoRaiseTimer = 0;
<a name="l00099"></a>00099     shadeHoverTimer = 0;
<a name="l00100"></a>00100 
<a name="l00101"></a>00101     <span class="comment">// set the initial mapping state</span>
<a name="l00102"></a>00102     mapping_state = WithdrawnState;
<a name="l00103"></a>00103     desk = 0; <span class="comment">// no desktop yet</span>
<a name="l00104"></a>00104 
<a name="l00105"></a>00105     mode = PositionCenter;
<a name="l00106"></a>00106     buttonDown = FALSE;
<a name="l00107"></a>00107     moveResizeMode = FALSE;
<a name="l00108"></a>00108 
<a name="l00109"></a>00109     info = NULL;
<a name="l00110"></a>00110 
<a name="l00111"></a>00111     shade_mode = ShadeNone;
<a name="l00112"></a>00112     active = FALSE;
<a name="l00113"></a>00113     keep_above = FALSE;
<a name="l00114"></a>00114     keep_below = FALSE;
<a name="l00115"></a>00115     is_shape = FALSE;
<a name="l00116"></a>00116     motif_noborder = <span class="keyword">false</span>;
<a name="l00117"></a>00117     motif_may_move = TRUE;
<a name="l00118"></a>00118     motif_may_resize = TRUE;
<a name="l00119"></a>00119     motif_may_close = TRUE;
<a name="l00120"></a>00120     fullscreen_mode = FullScreenNone;
<a name="l00121"></a>00121     skip_taskbar = FALSE;
<a name="l00122"></a>00122     original_skip_taskbar = <span class="keyword">false</span>;
<a name="l00123"></a>00123     minimized = <span class="keyword">false</span>;
<a name="l00124"></a>00124     hidden = <span class="keyword">false</span>;
<a name="l00125"></a>00125     modal = <span class="keyword">false</span>;
<a name="l00126"></a>00126     noborder = <span class="keyword">false</span>;
<a name="l00127"></a>00127     user_noborder = <span class="keyword">false</span>;
<a name="l00128"></a>00128     not_obscured = <span class="keyword">false</span>;
<a name="l00129"></a>00129     urgency = <span class="keyword">false</span>;
<a name="l00130"></a>00130     ignore_focus_stealing = <span class="keyword">false</span>;
<a name="l00131"></a>00131     check_active_modal = <span class="keyword">false</span>;
<a name="l00132"></a>00132 
<a name="l00133"></a>00133     Pdeletewindow = 0;
<a name="l00134"></a>00134     Ptakefocus = 0;
<a name="l00135"></a>00135     Ptakeactivity = 0;
<a name="l00136"></a>00136     Pcontexthelp = 0;
<a name="l00137"></a>00137     Pping = 0;
<a name="l00138"></a>00138     input = FALSE;
<a name="l00139"></a>00139     skip_pager = FALSE;
<a name="l00140"></a>00140 
<a name="l00141"></a>00141     max_mode = <a class="code" href="classKDecorationDefines.html#w71w9">MaximizeRestore</a>;
<a name="l00142"></a>00142 
<a name="l00143"></a>00143     cmap = None;
<a name="l00144"></a>00144     
<a name="l00145"></a>00145     frame_geometry = QRect( 0, 0, 100, 100 ); <span class="comment">// so that decorations don't start with size being (0,0)</span>
<a name="l00146"></a>00146     client_size = QSize( 100, 100 );
<a name="l00147"></a>00147     custom_opacity = <span class="keyword">false</span>;
<a name="l00148"></a>00148     rule_opacity_active = 0;; <span class="comment">//translucency rules</span>
<a name="l00149"></a>00149     rule_opacity_inactive = 0; <span class="comment">//dito.</span>
<a name="l00150"></a>00150 
<a name="l00151"></a>00151     <span class="comment">// SELI initialize xsizehints??</span>
<a name="l00152"></a>00152     }
<a name="l00153"></a>00153 
<a name="l00157"></a>00157 Client::~Client()
<a name="l00158"></a>00158     {
<a name="l00159"></a>00159     assert(!moveResizeMode);
<a name="l00160"></a>00160     assert( client == None );
<a name="l00161"></a>00161     assert( frame == None &amp;&amp; wrapper == None );
<a name="l00162"></a>00162     assert( decoration == NULL );
<a name="l00163"></a>00163     assert( postpone_geometry_updates == 0 );
<a name="l00164"></a>00164     assert( !check_active_modal );
<a name="l00165"></a>00165     <span class="keyword">delete</span> info;
<a name="l00166"></a>00166     <span class="keyword">delete</span> bridge;
<a name="l00167"></a>00167     }
<a name="l00168"></a>00168 
<a name="l00169"></a>00169 <span class="comment">// use destroyClient() or releaseWindow(), Client instances cannot be deleted directly</span>
<a name="l00170"></a><a class="code" href="classKWinInternal_1_1Client.html#e5">00170</a> <span class="keywordtype">void</span> <a class="code" href="classKWinInternal_1_1Client.html#e5">Client::deleteClient</a>( <a class="code" href="classKWinInternal_1_1Client.html">Client</a>* c, <a class="code" href="namespaceKWinInternal.html#a120">allowed_t</a> )
<a name="l00171"></a>00171     {
<a name="l00172"></a>00172     <span class="keyword">delete</span> c;
<a name="l00173"></a>00173     }
<a name="l00174"></a>00174 
<a name="l00178"></a><a class="code" href="classKWinInternal_1_1Client.html#a36">00178</a> <span class="keywordtype">void</span> <a class="code" href="classKWinInternal_1_1Client.html#a36">Client::releaseWindow</a>( <span class="keywordtype">bool</span> on_shutdown )
<a name="l00179"></a>00179     {
<a name="l00180"></a>00180     <a class="code" href="classKWinInternal_1_1StackingUpdatesBlocker.html">StackingUpdatesBlocker</a> blocker( <a class="code" href="classKWinInternal_1_1Client.html#a5">workspace</a>());
<a name="l00181"></a>00181     <span class="keywordflow">if</span> (!custom_opacity) <a class="code" href="classKWinInternal_1_1Client.html#a161">setOpacity</a>(FALSE);
<a name="l00182"></a>00182     <span class="keywordflow">if</span> (moveResizeMode)
<a name="l00183"></a>00183        leaveMoveResize();
<a name="l00184"></a>00184     finishWindowRules();
<a name="l00185"></a>00185     ++postpone_geometry_updates;
<a name="l00186"></a>00186     setMappingState( WithdrawnState );
<a name="l00187"></a>00187     <a class="code" href="classKWinInternal_1_1Client.html#a81">setModal</a>( <span class="keyword">false</span> ); <span class="comment">// otherwise its mainwindow wouldn't get focus</span>
<a name="l00188"></a>00188     hidden = <span class="keyword">true</span>; <span class="comment">// so that it's not considered visible anymore (can't use hideClient(), it would set flags)</span>
<a name="l00189"></a>00189     <span class="keywordflow">if</span>( !on_shutdown )
<a name="l00190"></a>00190         <a class="code" href="classKWinInternal_1_1Client.html#a5">workspace</a>()-&gt;<a class="code" href="classKWinInternal_1_1Workspace.html#a42">clientHidden</a>( <span class="keyword">this</span> );
<a name="l00191"></a>00191     XUnmapWindow( qt_xdisplay(), <a class="code" href="classKWinInternal_1_1Client.html#a2">frameId</a>()); <span class="comment">// destroying decoration would cause ugly visual effect</span>
<a name="l00192"></a>00192     destroyDecoration();
<a name="l00193"></a>00193     cleanGrouping();
<a name="l00194"></a>00194     <span class="keywordflow">if</span>( !on_shutdown )
<a name="l00195"></a>00195         {
<a name="l00196"></a>00196         <a class="code" href="classKWinInternal_1_1Client.html#a5">workspace</a>()-&gt;<a class="code" href="classKWinInternal_1_1Workspace.html#a90">removeClient</a>( <span class="keyword">this</span>, Allowed );
<a name="l00197"></a>00197         <span class="comment">// only when the window is being unmapped, not when closing down KWin</span>
<a name="l00198"></a>00198         <span class="comment">// (NETWM sections 5.5,5.7)</span>
<a name="l00199"></a>00199         info-&gt;setDesktop( 0 );
<a name="l00200"></a>00200         desk = 0;
<a name="l00201"></a>00201         info-&gt;setState( 0, info-&gt;state()); <span class="comment">// reset all state flags</span>
<a name="l00202"></a>00202         }
<a name="l00203"></a>00203     XDeleteProperty( qt_xdisplay(),  client, <a class="code" href="namespaceKWinInternal.html#a0">atoms</a>-&gt;<a class="code" href="classKWinInternal_1_1Atoms.html#o11">kde_net_wm_user_creation_time</a>);
<a name="l00204"></a>00204     <span class="comment">// TODO remove KDEFrameStrut property</span>
<a name="l00205"></a>00205     XReparentWindow( qt_xdisplay(), client, <a class="code" href="classKWinInternal_1_1Client.html#a5">workspace</a>()-&gt;rootWin(), <a class="code" href="classKWinInternal_1_1Client.html#a27">x</a>(), <a class="code" href="classKWinInternal_1_1Client.html#a28">y</a>());
<a name="l00206"></a>00206     XRemoveFromSaveSet( qt_xdisplay(), client );
<a name="l00207"></a>00207     XSelectInput( qt_xdisplay(), client, NoEventMask );
<a name="l00208"></a>00208     <span class="keywordflow">if</span>( on_shutdown )
<a name="l00209"></a>00209         { <span class="comment">// map the window, so it can be found after another WM is started</span>
<a name="l00210"></a>00210         XMapWindow( qt_xdisplay(), client );
<a name="l00211"></a>00211     <span class="comment">// TODO preserve minimized, shaded etc. state?</span>
<a name="l00212"></a>00212         }
<a name="l00213"></a>00213     <span class="keywordflow">else</span>
<a name="l00214"></a>00214         {
<a name="l00215"></a>00215         <span class="comment">// Make sure it's not mapped if the app unmapped it (#65279). The app</span>
<a name="l00216"></a>00216         <span class="comment">// may do map+unmap before we initially map the window by calling rawShow() from manage().</span>
<a name="l00217"></a>00217         XUnmapWindow( qt_xdisplay(), client ); 
<a name="l00218"></a>00218         }
<a name="l00219"></a>00219     client = None;
<a name="l00220"></a>00220     XDestroyWindow( qt_xdisplay(), wrapper );
<a name="l00221"></a>00221     wrapper = None;
<a name="l00222"></a>00222     XDestroyWindow( qt_xdisplay(), frame );
<a name="l00223"></a>00223     frame = None;
<a name="l00224"></a>00224     --postpone_geometry_updates; <span class="comment">// don't use GeometryUpdatesBlocker, it would now set the geometry</span>
<a name="l00225"></a>00225     <a class="code" href="classKWinInternal_1_1Client.html#e5">deleteClient</a>( <span class="keyword">this</span>, Allowed );
<a name="l00226"></a>00226     }
<a name="l00227"></a>00227 
<a name="l00228"></a>00228 <span class="comment">// like releaseWindow(), but this one is called when the window has been already destroyed</span>
<a name="l00229"></a>00229 <span class="comment">// (e.g. the application closed it)</span>
<a name="l00230"></a><a class="code" href="classKWinInternal_1_1Client.html#a159">00230</a> <span class="keywordtype">void</span> <a class="code" href="classKWinInternal_1_1Client.html#a159">Client::destroyClient</a>()
<a name="l00231"></a>00231     {
<a name="l00232"></a>00232     <a class="code" href="classKWinInternal_1_1StackingUpdatesBlocker.html">StackingUpdatesBlocker</a> blocker( <a class="code" href="classKWinInternal_1_1Client.html#a5">workspace</a>());
<a name="l00233"></a>00233     <span class="keywordflow">if</span> (moveResizeMode)
<a name="l00234"></a>00234        leaveMoveResize();
<a name="l00235"></a>00235     finishWindowRules();
<a name="l00236"></a>00236     ++postpone_geometry_updates;
<a name="l00237"></a>00237     <a class="code" href="classKWinInternal_1_1Client.html#a81">setModal</a>( <span class="keyword">false</span> );
<a name="l00238"></a>00238     hidden = <span class="keyword">true</span>; <span class="comment">// so that it's not considered visible anymore</span>
<a name="l00239"></a>00239     <a class="code" href="classKWinInternal_1_1Client.html#a5">workspace</a>()-&gt;<a class="code" href="classKWinInternal_1_1Workspace.html#a42">clientHidden</a>( <span class="keyword">this</span> );
<a name="l00240"></a>00240     destroyDecoration();
<a name="l00241"></a>00241     cleanGrouping();
<a name="l00242"></a>00242     <a class="code" href="classKWinInternal_1_1Client.html#a5">workspace</a>()-&gt;<a class="code" href="classKWinInternal_1_1Workspace.html#a90">removeClient</a>( <span class="keyword">this</span>, Allowed );
<a name="l00243"></a>00243     client = None; <span class="comment">// invalidate</span>
<a name="l00244"></a>00244     XDestroyWindow( qt_xdisplay(), wrapper );
<a name="l00245"></a>00245     wrapper = None;
<a name="l00246"></a>00246     XDestroyWindow( qt_xdisplay(), frame );
<a name="l00247"></a>00247     frame = None;
<a name="l00248"></a>00248     --postpone_geometry_updates; <span class="comment">// don't use GeometryUpdatesBlocker, it would now set the geometry</span>
<a name="l00249"></a>00249     <a class="code" href="classKWinInternal_1_1Client.html#e5">deleteClient</a>( <span class="keyword">this</span>, Allowed );
<a name="l00250"></a>00250     }
<a name="l00251"></a>00251 
<a name="l00252"></a><a class="code" href="classKWinInternal_1_1Client.html#a105">00252</a> <span class="keywordtype">void</span> <a class="code" href="classKWinInternal_1_1Client.html#a105">Client::updateDecoration</a>( <span class="keywordtype">bool</span> check_workspace_pos, <span class="keywordtype">bool</span> force )
<a name="l00253"></a>00253     {
<a name="l00254"></a>00254     <span class="keywordflow">if</span>( !force &amp;&amp; (( decoration == NULL &amp;&amp; <a class="code" href="classKWinInternal_1_1Client.html#a69">noBorder</a>())
<a name="l00255"></a>00255                     || ( decoration != NULL &amp;&amp; !<a class="code" href="classKWinInternal_1_1Client.html#a69">noBorder</a>())))
<a name="l00256"></a>00256         <span class="keywordflow">return</span>;
<a name="l00257"></a>00257     <span class="keywordtype">bool</span> do_show = <span class="keyword">false</span>;
<a name="l00258"></a>00258     postponeGeometryUpdates( <span class="keyword">true</span> );
<a name="l00259"></a>00259     <span class="keywordflow">if</span>( force )
<a name="l00260"></a>00260         destroyDecoration();
<a name="l00261"></a>00261     <span class="keywordflow">if</span>( !<a class="code" href="classKWinInternal_1_1Client.html#a69">noBorder</a>())
<a name="l00262"></a>00262         {
<a name="l00263"></a>00263         decoration = <a class="code" href="classKWinInternal_1_1Client.html#a5">workspace</a>()-&gt;<a class="code" href="classKWinInternal_1_1Workspace.html#a3">createDecoration</a>( bridge );
<a name="l00264"></a>00264         <span class="comment">// TODO check decoration's minimum size?</span>
<a name="l00265"></a>00265         decoration-&gt;<a class="code" href="classKDecoration.html#a35">init</a>();
<a name="l00266"></a>00266         decoration-&gt;widget()-&gt;installEventFilter( <span class="keyword">this</span> );
<a name="l00267"></a>00267         XReparentWindow( qt_xdisplay(), decoration-&gt;widget()-&gt;winId(), <a class="code" href="classKWinInternal_1_1Client.html#a2">frameId</a>(), 0, 0 );
<a name="l00268"></a>00268         decoration-&gt;widget()-&gt;lower();
<a name="l00269"></a>00269         decoration-&gt;borders( border_left, border_right, border_top, border_bottom );
<a name="l00270"></a>00270         setXTitleHeightProperty(border_top);
<a name="l00271"></a>00271         <span class="keywordtype">int</span> save_workarea_diff_x = workarea_diff_x;
<a name="l00272"></a>00272         <span class="keywordtype">int</span> save_workarea_diff_y = workarea_diff_y;
<a name="l00273"></a>00273         <a class="code" href="classKWinInternal_1_1Client.html#a111">move</a>( <a class="code" href="classKWinInternal_1_1Client.html#a141">calculateGravitation</a>( <span class="keyword">false</span> ));
<a name="l00274"></a>00274         <a class="code" href="classKWinInternal_1_1Client.html#a113">plainResize</a>( sizeForClientSize( <a class="code" href="classKWinInternal_1_1Client.html#a32">clientSize</a>()), ForceGeometrySet );
<a name="l00275"></a>00275         workarea_diff_x = save_workarea_diff_x;
<a name="l00276"></a>00276         workarea_diff_y = save_workarea_diff_y;
<a name="l00277"></a>00277         do_show = <span class="keyword">true</span>;
<a name="l00278"></a>00278         }
<a name="l00279"></a>00279     <span class="keywordflow">else</span>
<a name="l00280"></a>00280         destroyDecoration();
<a name="l00281"></a>00281     <span class="keywordflow">if</span>( check_workspace_pos )
<a name="l00282"></a>00282         <a class="code" href="classKWinInternal_1_1Client.html#a146">checkWorkspacePosition</a>();
<a name="l00283"></a>00283     postponeGeometryUpdates( <span class="keyword">false</span> );
<a name="l00284"></a>00284     <span class="keywordflow">if</span>( do_show )
<a name="l00285"></a>00285         decoration-&gt;widget()-&gt;show();
<a name="l00286"></a>00286     updateFrameStrut();
<a name="l00287"></a>00287     }
<a name="l00288"></a>00288 
<a name="l00289"></a>00289 <span class="keywordtype">void</span> Client::destroyDecoration()
<a name="l00290"></a>00290     {
<a name="l00291"></a>00291     <span class="keywordflow">if</span>( decoration != NULL )
<a name="l00292"></a>00292         {
<a name="l00293"></a>00293         <span class="keyword">delete</span> decoration;
<a name="l00294"></a>00294         decoration = NULL;
<a name="l00295"></a>00295         QPoint grav = <a class="code" href="classKWinInternal_1_1Client.html#a141">calculateGravitation</a>( <span class="keyword">true</span> );
<a name="l00296"></a>00296         border_left = border_right = border_top = border_bottom = 0;
<a name="l00297"></a>00297         <a class="code" href="classKWinInternal_1_1Client.html#a103">setMask</a>( QRegion()); <span class="comment">// reset shape mask</span>
<a name="l00298"></a>00298         <span class="keywordtype">int</span> save_workarea_diff_x = workarea_diff_x;
<a name="l00299"></a>00299         <span class="keywordtype">int</span> save_workarea_diff_y = workarea_diff_y;
<a name="l00300"></a>00300         <a class="code" href="classKWinInternal_1_1Client.html#a113">plainResize</a>( sizeForClientSize( <a class="code" href="classKWinInternal_1_1Client.html#a32">clientSize</a>()), ForceGeometrySet );
<a name="l00301"></a>00301         <a class="code" href="classKWinInternal_1_1Client.html#a111">move</a>( grav );
<a name="l00302"></a>00302         workarea_diff_x = save_workarea_diff_x;
<a name="l00303"></a>00303         workarea_diff_y = save_workarea_diff_y;
<a name="l00304"></a>00304         }
<a name="l00305"></a>00305     }
<a name="l00306"></a>00306 
<a name="l00307"></a><a class="code" href="classKWinInternal_1_1Client.html#a106">00307</a> <span class="keywordtype">void</span> <a class="code" href="classKWinInternal_1_1Client.html#a106">Client::checkBorderSizes</a>()
<a name="l00308"></a>00308     {
<a name="l00309"></a>00309     <span class="keywordflow">if</span>( decoration == NULL )
<a name="l00310"></a>00310         <span class="keywordflow">return</span>;
<a name="l00311"></a>00311     <span class="keywordtype">int</span> new_left, new_right, new_top, new_bottom;
<a name="l00312"></a>00312     decoration-&gt;<a class="code" href="classKDecoration.html#a37">borders</a>( new_left, new_right, new_top, new_bottom );
<a name="l00313"></a>00313     <span class="keywordflow">if</span>( new_left == border_left &amp;&amp; new_right == border_right
<a name="l00314"></a>00314         &amp;&amp; new_top == border_top &amp;&amp; new_bottom == border_bottom )
<a name="l00315"></a>00315         <span class="keywordflow">return</span>;
<a name="l00316"></a>00316     <a class="code" href="classKWinInternal_1_1GeometryUpdatesPostponer.html">GeometryUpdatesPostponer</a> blocker( <span class="keyword">this</span> );
<a name="l00317"></a>00317     <a class="code" href="classKWinInternal_1_1Client.html#a111">move</a>( <a class="code" href="classKWinInternal_1_1Client.html#a141">calculateGravitation</a>( <span class="keyword">true</span> ));
<a name="l00318"></a>00318     border_left = new_left;
<a name="l00319"></a>00319     border_right = new_right;
<a name="l00320"></a>00320     <span class="keywordflow">if</span> (border_top != new_top)
<a name="l00321"></a>00321         setXTitleHeightProperty(new_top);
<a name="l00322"></a>00322     border_top = new_top;
<a name="l00323"></a>00323     border_bottom = new_bottom;
<a name="l00324"></a>00324     <a class="code" href="classKWinInternal_1_1Client.html#a111">move</a>( <a class="code" href="classKWinInternal_1_1Client.html#a141">calculateGravitation</a>( <span class="keyword">false</span> ));
<a name="l00325"></a>00325     <a class="code" href="classKWinInternal_1_1Client.html#a113">plainResize</a>( sizeForClientSize( <a class="code" href="classKWinInternal_1_1Client.html#a32">clientSize</a>()), ForceGeometrySet );
<a name="l00326"></a>00326     <a class="code" href="classKWinInternal_1_1Client.html#a146">checkWorkspacePosition</a>();
<a name="l00327"></a>00327     }
<a name="l00328"></a>00328 
<a name="l00329"></a>00329 <span class="keywordtype">void</span> Client::detectNoBorder()
<a name="l00330"></a>00330     {
<a name="l00331"></a>00331     <span class="keywordflow">if</span>( <a class="code" href="classKWinInternal_1_1Shape.html#e1">Shape::hasShape</a>( <a class="code" href="classKWinInternal_1_1Client.html#a1">window</a>()))
<a name="l00332"></a>00332         {
<a name="l00333"></a>00333         noborder = <span class="keyword">true</span>;
<a name="l00334"></a>00334         <span class="keywordflow">return</span>;
<a name="l00335"></a>00335         }
<a name="l00336"></a>00336     <span class="keywordflow">switch</span>( <a class="code" href="classKWinInternal_1_1Client.html#a19">windowType</a>())
<a name="l00337"></a>00337         {
<a name="l00338"></a>00338         <span class="keywordflow">case</span> NET::Desktop :
<a name="l00339"></a>00339         <span class="keywordflow">case</span> NET::Dock :
<a name="l00340"></a>00340         <span class="keywordflow">case</span> NET::TopMenu :
<a name="l00341"></a>00341         <span class="keywordflow">case</span> NET::Override :
<a name="l00342"></a>00342         <span class="keywordflow">case</span> NET::Splash :
<a name="l00343"></a>00343             noborder = <span class="keyword">true</span>;
<a name="l00344"></a>00344           <span class="keywordflow">break</span>;
<a name="l00345"></a>00345         <span class="keywordflow">case</span> NET::Unknown :
<a name="l00346"></a>00346         <span class="keywordflow">case</span> NET::Normal :
<a name="l00347"></a>00347         <span class="keywordflow">case</span> NET::Toolbar :
<a name="l00348"></a>00348         <span class="keywordflow">case</span> NET::Menu :
<a name="l00349"></a>00349         <span class="keywordflow">case</span> NET::Dialog :
<a name="l00350"></a>00350         <span class="keywordflow">case</span> NET::Utility :
<a name="l00351"></a>00351             noborder = <span class="keyword">false</span>;
<a name="l00352"></a>00352             <a class="code" href="classKWinInternal_1_1Client.html#a176">setShapable</a>(FALSE);
<a name="l00353"></a>00353           <span class="keywordflow">break</span>;
<a name="l00354"></a>00354         <span class="keywordflow">default</span>:
<a name="l00355"></a>00355             assert( <span class="keyword">false</span> );
<a name="l00356"></a>00356         }
<a name="l00357"></a>00357     }
<a name="l00358"></a>00358 
<a name="l00359"></a>00359 <span class="keywordtype">void</span> Client::updateFrameStrut()
<a name="l00360"></a>00360     {
<a name="l00361"></a>00361 <span class="comment">// TODO KDEFrameStrut je ale pitome jmeno</span>
<a name="l00362"></a>00362     NETStrut strut;
<a name="l00363"></a>00363     strut.left = border_left;
<a name="l00364"></a>00364     strut.right = border_right;
<a name="l00365"></a>00365     strut.top = border_top;
<a name="l00366"></a>00366     strut.bottom = border_bottom;
<a name="l00367"></a>00367     info-&gt;setKDEFrameStrut( strut );
<a name="l00368"></a>00368     }
<a name="l00369"></a>00369 
<a name="l00370"></a>00370 <span class="comment">// Resizes the decoration, and makes sure the decoration widget gets resize event</span>
<a name="l00371"></a>00371 <span class="comment">// even if the size hasn't changed. This is needed to make sure the decoration</span>
<a name="l00372"></a>00372 <span class="comment">// re-layouts (e.g. when options()-&gt;moveResizeMaximizedWindows() changes,</span>
<a name="l00373"></a>00373 <span class="comment">// the decoration may turn on/off some borders, but the actual size</span>
<a name="l00374"></a>00374 <span class="comment">// of the decoration stays the same).</span>
<a name="l00375"></a>00375 <span class="keywordtype">void</span> Client::resizeDecoration( <span class="keyword">const</span> QSize&amp; s )
<a name="l00376"></a>00376     {
<a name="l00377"></a>00377     <span class="keywordflow">if</span>( decoration == NULL )
<a name="l00378"></a>00378         <span class="keywordflow">return</span>;
<a name="l00379"></a>00379     QSize oldsize = decoration-&gt;<a class="code" href="classKDecoration.html#a55">widget</a>()-&gt;size();
<a name="l00380"></a>00380     decoration-&gt;<a class="code" href="classKDecoration.html#a38">resize</a>( s );
<a name="l00381"></a>00381     <span class="keywordflow">if</span>( oldsize == s )
<a name="l00382"></a>00382         {
<a name="l00383"></a>00383         QResizeEvent e( s, oldsize );
<a name="l00384"></a>00384         QApplication::sendEvent( decoration-&gt;<a class="code" href="classKDecoration.html#a55">widget</a>(), &amp;e );
<a name="l00385"></a>00385         }
<a name="l00386"></a>00386     }
<a name="l00387"></a>00387 
<a name="l00388"></a><a class="code" href="classKWinInternal_1_1Client.html#a69">00388</a> <span class="keywordtype">bool</span> <a class="code" href="classKWinInternal_1_1Client.html#a69">Client::noBorder</a>()<span class="keyword"> const</span>
<a name="l00389"></a>00389 <span class="keyword">    </span>{
<a name="l00390"></a>00390     <span class="keywordflow">return</span> noborder || <a class="code" href="classKWinInternal_1_1Client.html#a61">isFullScreen</a>() || user_noborder || motif_noborder;
<a name="l00391"></a>00391     }
<a name="l00392"></a>00392 
<a name="l00393"></a><a class="code" href="classKWinInternal_1_1Client.html#a68">00393</a> <span class="keywordtype">bool</span> <a class="code" href="classKWinInternal_1_1Client.html#a68">Client::userCanSetNoBorder</a>()<span class="keyword"> const</span>
<a name="l00394"></a>00394 <span class="keyword">    </span>{
<a name="l00395"></a>00395     <span class="keywordflow">return</span> !noborder &amp;&amp; !<a class="code" href="classKWinInternal_1_1Client.html#a61">isFullScreen</a>() &amp;&amp; !<a class="code" href="classKWinInternal_1_1Client.html#a50">isShade</a>();
<a name="l00396"></a>00396     }
<a name="l00397"></a>00397 
<a name="l00398"></a><a class="code" href="classKWinInternal_1_1Client.html#a66">00398</a> <span class="keywordtype">bool</span> <a class="code" href="classKWinInternal_1_1Client.html#a66">Client::isUserNoBorder</a>()<span class="keyword"> const</span>
<a name="l00399"></a>00399 <span class="keyword">    </span>{
<a name="l00400"></a>00400     <span class="keywordflow">return</span> user_noborder;
<a name="l00401"></a>00401     }
<a name="l00402"></a>00402 
<a name="l00403"></a><a class="code" href="classKWinInternal_1_1Client.html#a67">00403</a> <span class="keywordtype">void</span> <a class="code" href="classKWinInternal_1_1Client.html#a67">Client::setUserNoBorder</a>( <span class="keywordtype">bool</span> set )
<a name="l00404"></a>00404     {
<a name="l00405"></a>00405     <span class="keywordflow">if</span>( !<a class="code" href="classKWinInternal_1_1Client.html#a68">userCanSetNoBorder</a>())
<a name="l00406"></a>00406         <span class="keywordflow">return</span>;
<a name="l00407"></a>00407     set = <a class="code" href="classKWinInternal_1_1Client.html#a20">rules</a>()-&gt;<a class="code" href="classKWinInternal_1_1WindowRules.html#a23">checkNoBorder</a>( set );
<a name="l00408"></a>00408     <span class="keywordflow">if</span>( user_noborder == set )
<a name="l00409"></a>00409         <span class="keywordflow">return</span>;
<a name="l00410"></a>00410     user_noborder = set;
<a name="l00411"></a>00411     <a class="code" href="classKWinInternal_1_1Client.html#a105">updateDecoration</a>( <span class="keyword">true</span>, <span class="keyword">false</span> );
<a name="l00412"></a>00412     updateWindowRules();
<a name="l00413"></a>00413     }
<a name="l00414"></a>00414 
<a name="l00415"></a><a class="code" href="classKWinInternal_1_1Client.html#a108">00415</a> <span class="keywordtype">void</span> <a class="code" href="classKWinInternal_1_1Client.html#a108">Client::updateShape</a>()
<a name="l00416"></a>00416     {
<a name="l00417"></a>00417     <a class="code" href="classKWinInternal_1_1Client.html#a176">setShapable</a>(TRUE);
<a name="l00418"></a>00418     <span class="keywordflow">if</span> ( <a class="code" href="classKWinInternal_1_1Client.html#a107">shape</a>() )
<a name="l00419"></a>00419     {
<a name="l00420"></a>00420         XShapeCombineShape(qt_xdisplay(), <a class="code" href="classKWinInternal_1_1Client.html#a2">frameId</a>(), ShapeBounding,
<a name="l00421"></a>00421                            <a class="code" href="classKWinInternal_1_1Client.html#a31">clientPos</a>().<a class="code" href="classKWinInternal_1_1Client.html#a27">x</a>(), <a class="code" href="classKWinInternal_1_1Client.html#a31">clientPos</a>().<a class="code" href="classKWinInternal_1_1Client.html#a28">y</a>(),
<a name="l00422"></a>00422                            <a class="code" href="classKWinInternal_1_1Client.html#a1">window</a>(), ShapeBounding, ShapeSet);
<a name="l00423"></a>00423     }
<a name="l00424"></a>00424     <span class="keywordflow">else</span>
<a name="l00425"></a>00425     {
<a name="l00426"></a>00426         XShapeCombineMask( qt_xdisplay(), <a class="code" href="classKWinInternal_1_1Client.html#a2">frameId</a>(), ShapeBounding, 0, 0,
<a name="l00427"></a>00427                            None, ShapeSet);
<a name="l00428"></a>00428     }
<a name="l00429"></a>00429     <span class="comment">// workaround for #19644 - shaped windows shouldn't have decoration</span>
<a name="l00430"></a>00430     <span class="keywordflow">if</span>( <a class="code" href="classKWinInternal_1_1Client.html#a107">shape</a>() &amp;&amp; !<a class="code" href="classKWinInternal_1_1Client.html#a69">noBorder</a>()) 
<a name="l00431"></a>00431         {
<a name="l00432"></a>00432         noborder = <span class="keyword">true</span>;
<a name="l00433"></a>00433         <a class="code" href="classKWinInternal_1_1Client.html#a105">updateDecoration</a>( <span class="keyword">true</span> );
<a name="l00434"></a>00434         }
<a name="l00435"></a>00435     }
<a name="l00436"></a>00436 
<a name="l00437"></a><a class="code" href="classKWinInternal_1_1Client.html#a103">00437</a> <span class="keywordtype">void</span> <a class="code" href="classKWinInternal_1_1Client.html#a103">Client::setMask</a>( <span class="keyword">const</span> QRegion&amp; reg, <span class="keywordtype">int</span> mode )
<a name="l00438"></a>00438     {
<a name="l00439"></a>00439     _mask = reg;
<a name="l00440"></a>00440     <span class="keywordflow">if</span>( reg.isNull())
<a name="l00441"></a>00441         XShapeCombineMask( qt_xdisplay(), <a class="code" href="classKWinInternal_1_1Client.html#a2">frameId</a>(), ShapeBounding, 0, 0,
<a name="l00442"></a>00442             None, ShapeSet );
<a name="l00443"></a>00443     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( mode == X::Unsorted )
<a name="l00444"></a>00444         XShapeCombineRegion( qt_xdisplay(), <a class="code" href="classKWinInternal_1_1Client.html#a2">frameId</a>(), ShapeBounding, 0, 0,
<a name="l00445"></a>00445             reg.handle(), ShapeSet );
<a name="l00446"></a>00446     <span class="keywordflow">else</span>
<a name="l00447"></a>00447         {
<a name="l00448"></a>00448         QMemArray&lt; QRect &gt; rects = reg.rects();
<a name="l00449"></a>00449         XRectangle* xrects = <span class="keyword">new</span> XRectangle[ rects.count() ];
<a name="l00450"></a>00450         <span class="keywordflow">for</span>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0;
<a name="l00451"></a>00451              i &lt; rects.count();
<a name="l00452"></a>00452              ++i )
<a name="l00453"></a>00453             {
<a name="l00454"></a>00454             xrects[ i ].x = rects[ i ].x();
<a name="l00455"></a>00455             xrects[ i ].y = rects[ i ].y();
<a name="l00456"></a>00456             xrects[ i ].width = rects[ i ].width();
<a name="l00457"></a>00457             xrects[ i ].height = rects[ i ].height();
<a name="l00458"></a>00458             }
<a name="l00459"></a>00459         XShapeCombineRectangles( qt_xdisplay(), <a class="code" href="classKWinInternal_1_1Client.html#a2">frameId</a>(), ShapeBounding, 0, 0,
<a name="l00460"></a>00460             xrects, rects.count(), ShapeSet, mode );
<a name="l00461"></a>00461         <span class="keyword">delete</span>[] xrects;
<a name="l00462"></a>00462         }
<a name="l00463"></a>00463     }
<a name="l00464"></a>00464 
<a name="l00465"></a><a class="code" href="classKWinInternal_1_1Client.html#a104">00465</a> QRegion <a class="code" href="classKWinInternal_1_1Client.html#a104">Client::mask</a>()<span class="keyword"> const</span>
<a name="l00466"></a>00466 <span class="keyword">    </span>{
<a name="l00467"></a>00467     <span class="keywordflow">if</span>( _mask.isEmpty())
<a name="l00468"></a>00468         <span class="keywordflow">return</span> QRegion( 0, 0, <a class="code" href="classKWinInternal_1_1Client.html#a29">width</a>(), <a class="code" href="classKWinInternal_1_1Client.html#a30">height</a>());
<a name="l00469"></a>00469     <span class="keywordflow">return</span> _mask;
<a name="l00470"></a>00470     }
<a name="l00471"></a>00471     
<a name="l00472"></a><a class="code" href="classKWinInternal_1_1Client.html#a176">00472</a> <span class="keywordtype">void</span> <a class="code" href="classKWinInternal_1_1Client.html#a176">Client::setShapable</a>(<span class="keywordtype">bool</span> b)
<a name="l00473"></a>00473     {
<a name="l00474"></a>00474     <span class="keywordtype">long</span> tmp = b?1:0;
<a name="l00475"></a>00475     XChangeProperty(qt_xdisplay(), <a class="code" href="classKWinInternal_1_1Client.html#a2">frameId</a>(), <a class="code" href="namespaceKWinInternal.html#a0">atoms</a>-&gt;<a class="code" href="classKWinInternal_1_1Atoms.html#o17">net_wm_window_shapable</a>, XA_CARDINAL, 32, PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) &amp;tmp, 1L);
<a name="l00476"></a>00476     }
<a name="l00477"></a>00477 
<a name="l00478"></a><a class="code" href="classKWinInternal_1_1Client.html#a134">00478</a> <span class="keywordtype">void</span> <a class="code" href="classKWinInternal_1_1Client.html#a134">Client::hideClient</a>( <span class="keywordtype">bool</span> hide )
<a name="l00479"></a>00479     {
<a name="l00480"></a>00480     <span class="keywordflow">if</span>( hidden == hide )
<a name="l00481"></a>00481         <span class="keywordflow">return</span>;
<a name="l00482"></a>00482     hidden = hide;
<a name="l00483"></a>00483     info-&gt;setState( hidden ? NET::Hidden : 0, NET::Hidden );
<a name="l00484"></a>00484     <span class="keywordflow">if</span>( hidden )
<a name="l00485"></a>00485         {
<a name="l00486"></a>00486         setMappingState( IconicState );
<a name="l00487"></a>00487         rawHide();
<a name="l00488"></a>00488         <a class="code" href="classKWinInternal_1_1Client.html#a71">setSkipTaskbar</a>( <span class="keyword">true</span>, <span class="keyword">false</span> ); <span class="comment">// also hide from taskbar</span>
<a name="l00489"></a>00489         }
<a name="l00490"></a>00490     <span class="keywordflow">else</span> <span class="comment">// !hidden</span>
<a name="l00491"></a>00491         {
<a name="l00492"></a>00492         <a class="code" href="classKWinInternal_1_1Client.html#a71">setSkipTaskbar</a>( original_skip_taskbar, <span class="keyword">false</span> );
<a name="l00493"></a>00493         <span class="keywordflow">if</span>( <a class="code" href="classKWinInternal_1_1Client.html#a46">isOnCurrentDesktop</a>())
<a name="l00494"></a>00494             {
<a name="l00495"></a>00495             <span class="keywordflow">if</span>( <a class="code" href="classKWinInternal_1_1Client.html#a49">isShown</a>( <span class="keyword">false</span> ))
<a name="l00496"></a>00496                 setMappingState( NormalState );
<a name="l00497"></a>00497             rawShow(); <span class="comment">// is either visible or shaded</span>
<a name="l00498"></a>00498             }
<a name="l00499"></a>00499         }
<a name="l00500"></a>00500     }
<a name="l00501"></a>00501 
<a name="l00502"></a>00502 <span class="comment">/*</span>
<a name="l00503"></a>00503 <span class="comment">  Returns whether the window is minimizable or not</span>
<a name="l00504"></a>00504 <span class="comment"> */</span>
<a name="l00505"></a><a class="code" href="classKWinInternal_1_1Client.html#a58">00505</a> <span class="keywordtype">bool</span> <a class="code" href="classKWinInternal_1_1Client.html#a58">Client::isMinimizable</a>()<span class="keyword"> const</span>
<a name="l00506"></a>00506 <span class="keyword">    </span>{
<a name="l00507"></a>00507     <span class="keywordflow">if</span>( <a class="code" href="classKWinInternal_1_1Client.html#a97">isSpecialWindow</a>() &amp;&amp; !<a class="code" href="classKWinInternal_1_1Client.html#a96">isOverride</a>())
<a name="l00508"></a>00508         <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00509"></a>00509     <span class="keywordflow">if</span>( <a class="code" href="classKWinInternal_1_1Client.html#a8">isTransient</a>())
<a name="l00510"></a>00510         { <span class="comment">// #66868 - let other xmms windows be minimized when the mainwindow is minimized</span>
<a name="l00511"></a>00511         <span class="keywordtype">bool</span> shown_mainwindow = <span class="keyword">false</span>;
<a name="l00512"></a>00512         <a class="code" href="namespaceKWinInternal.html#a24">ClientList</a> mainclients = <a class="code" href="classKWinInternal_1_1Client.html#a11">mainClients</a>();
<a name="l00513"></a>00513         <span class="keywordflow">for</span>( ClientList::ConstIterator it = mainclients.begin();
<a name="l00514"></a>00514              it != mainclients.end();
<a name="l00515"></a>00515              ++it )
<a name="l00516"></a>00516             {
<a name="l00517"></a>00517             <span class="keywordflow">if</span>( (*it)-&gt;isShown( <span class="keyword">true</span> ))
<a name="l00518"></a>00518                 shown_mainwindow = <span class="keyword">true</span>;
<a name="l00519"></a>00519             }
<a name="l00520"></a>00520         <span class="keywordflow">if</span>( !shown_mainwindow )
<a name="l00521"></a>00521             <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00522"></a>00522         }
<a name="l00523"></a>00523     <span class="comment">// this is here because kicker's taskbar doesn't provide separate entries</span>
<a name="l00524"></a>00524     <span class="comment">// for windows with an explicitly given parent</span>
<a name="l00525"></a>00525     <span class="comment">// TODO perhaps this should be redone</span>
<a name="l00526"></a>00526     <span class="keywordflow">if</span>( <a class="code" href="classKWinInternal_1_1Client.html#a6">transientFor</a>() != NULL )
<a name="l00527"></a>00527         <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00528"></a>00528     <span class="keywordflow">if</span>( !<a class="code" href="classKWinInternal_1_1Client.html#a83">wantsTabFocus</a>()) <span class="comment">// SELI - NET::Utility? why wantsTabFocus() - skiptaskbar? ?</span>
<a name="l00529"></a>00529         <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00530"></a>00530     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00531"></a>00531     }
<a name="l00532"></a>00532 
<a name="l00536"></a><a class="code" href="classKWinInternal_1_1Client.html#a151">00536</a> <span class="keywordtype">void</span> <a class="code" href="classKWinInternal_1_1Client.html#a151">Client::minimize</a>( <span class="keywordtype">bool</span> avoid_animation )
<a name="l00537"></a>00537     {
<a name="l00538"></a>00538     <span class="keywordflow">if</span> ( !<a class="code" href="classKWinInternal_1_1Client.html#a58">isMinimizable</a>() || <a class="code" href="classKWinInternal_1_1Client.html#a54">isMinimized</a>())
<a name="l00539"></a>00539         <span class="keywordflow">return</span>;
<a name="l00540"></a>00540 
<a name="l00541"></a>00541     minimized = <span class="keyword">true</span>;
<a name="l00542"></a>00542 
<a name="l00543"></a>00543     <a class="code" href="classKWinInternal_1_1Notify.html#e0">Notify::raise</a>( Notify::Minimize );
<a name="l00544"></a>00544 
<a name="l00545"></a>00545     <span class="comment">// SELI mainClients().isEmpty() ??? - and in unminimize() too</span>
<a name="l00546"></a>00546     <span class="keywordflow">if</span> ( <a class="code" href="classKWinInternal_1_1Client.html#a11">mainClients</a>().isEmpty() &amp;&amp; <a class="code" href="classKWinInternal_1_1Client.html#a46">isOnCurrentDesktop</a>() &amp;&amp; !avoid_animation )
<a name="l00547"></a>00547         animateMinimizeOrUnminimize( <span class="keyword">true</span> ); <span class="comment">// was visible or shaded</span>
<a name="l00548"></a>00548 
<a name="l00549"></a>00549     setMappingState( IconicState );
<a name="l00550"></a>00550     info-&gt;setState( NET::Hidden, NET::Hidden );
<a name="l00551"></a>00551     rawHide();
<a name="l00552"></a>00552     updateAllowedActions();
<a name="l00553"></a>00553     <a class="code" href="classKWinInternal_1_1Client.html#a5">workspace</a>()-&gt;<a class="code" href="classKWinInternal_1_1Workspace.html#a65">updateMinimizedOfTransients</a>( <span class="keyword">this</span> );
<a name="l00554"></a>00554     updateWindowRules();
<a name="l00555"></a>00555     }
<a name="l00556"></a>00556 
<a name="l00557"></a><a class="code" href="classKWinInternal_1_1Client.html#a152">00557</a> <span class="keywordtype">void</span> <a class="code" href="classKWinInternal_1_1Client.html#a152">Client::unminimize</a>( <span class="keywordtype">bool</span> avoid_animation )
<a name="l00558"></a>00558     {
<a name="l00559"></a>00559     <span class="keywordflow">if</span>( !<a class="code" href="classKWinInternal_1_1Client.html#a54">isMinimized</a>())
<a name="l00560"></a>00560         <span class="keywordflow">return</span>;
<a name="l00561"></a>00561 
<a name="l00562"></a>00562     <a class="code" href="classKWinInternal_1_1Notify.html#e0">Notify::raise</a>( Notify::UnMinimize );
<a name="l00563"></a>00563     minimized = <span class="keyword">false</span>;    
<a name="l00564"></a>00564     info-&gt;setState( 0, NET::Hidden );
<a name="l00565"></a>00565     <span class="keywordflow">if</span>( <a class="code" href="classKWinInternal_1_1Client.html#a46">isOnCurrentDesktop</a>())
<a name="l00566"></a>00566         {
<a name="l00567"></a>00567         <span class="keywordflow">if</span>( <a class="code" href="classKWinInternal_1_1Client.html#a11">mainClients</a>().isEmpty() &amp;&amp; !avoid_animation )
<a name="l00568"></a>00568             animateMinimizeOrUnminimize( FALSE );
<a name="l00569"></a>00569         <span class="keywordflow">if</span>( <a class="code" href="classKWinInternal_1_1Client.html#a49">isShown</a>( <span class="keyword">false</span> ))
<a name="l00570"></a>00570             setMappingState( NormalState );
<a name="l00571"></a>00571         rawShow(); <span class="comment">// is either visible or shaded</span>
<a name="l00572"></a>00572         }
<a name="l00573"></a>00573     updateAllowedActions();
<a name="l00574"></a>00574     <a class="code" href="classKWinInternal_1_1Client.html#a5">workspace</a>()-&gt;<a class="code" href="classKWinInternal_1_1Workspace.html#a65">updateMinimizedOfTransients</a>( <span class="keyword">this</span> );
<a name="l00575"></a>00575     updateWindowRules();
<a name="l00576"></a>00576     }
<a name="l00577"></a>00577 
<a name="l00578"></a>00578 <span class="keyword">extern</span> <span class="keywordtype">bool</span>         <a class="code" href="namespaceKWinInternal.html#a1">blockAnimation</a>;
<a name="l00579"></a>00579 
<a name="l00580"></a>00580 <span class="keywordtype">void</span> Client::animateMinimizeOrUnminimize( <span class="keywordtype">bool</span> minimize )
<a name="l00581"></a>00581     {
<a name="l00582"></a>00582     <span class="keywordflow">if</span> ( <a class="code" href="namespaceKWinInternal.html#a1">blockAnimation</a> )
<a name="l00583"></a>00583         <span class="keywordflow">return</span>;
<a name="l00584"></a>00584     <span class="keywordflow">if</span> ( !<a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;<a class="code" href="classKWinInternal_1_1Options.html#o21">animateMinimize</a> )
<a name="l00585"></a>00585         <span class="keywordflow">return</span>;
<a name="l00586"></a>00586 
<a name="l00587"></a>00587     <span class="keywordflow">if</span>( decoration != NULL &amp;&amp; decoration-&gt;<a class="code" href="classKDecoration.html#a47">animateMinimize</a>( minimize ))
<a name="l00588"></a>00588         <span class="keywordflow">return</span>; <span class="comment">// decoration did it</span>
<a name="l00589"></a>00589 
<a name="l00590"></a>00590     <span class="comment">// the function is a bit tricky since it will ensure that an</span>
<a name="l00591"></a>00591     <span class="comment">// animation action needs always the same time regardless of the</span>
<a name="l00592"></a>00592     <span class="comment">// performance of the machine or the X-Server.</span>
<a name="l00593"></a>00593 
<a name="l00594"></a>00594     <span class="keywordtype">float</span> lf,rf,tf,bf,step;
<a name="l00595"></a>00595 
<a name="l00596"></a>00596     <span class="keywordtype">int</span> speed = <a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;<a class="code" href="classKWinInternal_1_1Options.html#o22">animateMinimizeSpeed</a>;
<a name="l00597"></a>00597     <span class="keywordflow">if</span> ( speed &gt; 10 )
<a name="l00598"></a>00598         speed = 10;
<a name="l00599"></a>00599     <span class="keywordflow">if</span> ( speed &lt; 0 )
<a name="l00600"></a>00600         speed = 0;
<a name="l00601"></a>00601 
<a name="l00602"></a>00602     step = 40. * (11 - speed );
<a name="l00603"></a>00603 
<a name="l00604"></a>00604     NETRect r = info-&gt;iconGeometry();
<a name="l00605"></a>00605     QRect icongeom( r.pos.x, r.pos.y, r.size.width, r.size.height );
<a name="l00606"></a>00606     <span class="keywordflow">if</span> ( !icongeom.isValid() )
<a name="l00607"></a>00607         <span class="keywordflow">return</span>;
<a name="l00608"></a>00608 
<a name="l00609"></a>00609     QPixmap pm = animationPixmap( minimize ? <a class="code" href="classKWinInternal_1_1Client.html#a29">width</a>() : icongeom.width() );
<a name="l00610"></a>00610 
<a name="l00611"></a>00611     QRect before, after;
<a name="l00612"></a>00612     <span class="keywordflow">if</span> ( minimize ) 
<a name="l00613"></a>00613         {
<a name="l00614"></a>00614         before = QRect( <a class="code" href="classKWinInternal_1_1Client.html#a27">x</a>(), <a class="code" href="classKWinInternal_1_1Client.html#a28">y</a>(), <a class="code" href="classKWinInternal_1_1Client.html#a29">width</a>(), pm.height() );
<a name="l00615"></a>00615         after = QRect( icongeom.x(), icongeom.y(), icongeom.width(), pm.height() );
<a name="l00616"></a>00616         }
<a name="l00617"></a>00617     <span class="keywordflow">else</span> 
<a name="l00618"></a>00618         {
<a name="l00619"></a>00619         before = QRect( icongeom.x(), icongeom.y(), icongeom.width(), pm.height() );
<a name="l00620"></a>00620         after = QRect( <a class="code" href="classKWinInternal_1_1Client.html#a27">x</a>(), <a class="code" href="classKWinInternal_1_1Client.html#a28">y</a>(), <a class="code" href="classKWinInternal_1_1Client.html#a29">width</a>(), pm.height() );
<a name="l00621"></a>00621         }
<a name="l00622"></a>00622 
<a name="l00623"></a>00623     lf = (after.left() - before.left())/step;
<a name="l00624"></a>00624     rf = (after.right() - before.right())/step;
<a name="l00625"></a>00625     tf = (after.top() - before.top())/step;
<a name="l00626"></a>00626     bf = (after.bottom() - before.bottom())/step;
<a name="l00627"></a>00627 
<a name="l00628"></a>00628     <a class="code" href="namespaceKWinInternal.html#a105">grabXServer</a>();
<a name="l00629"></a>00629 
<a name="l00630"></a>00630     QRect area = before;
<a name="l00631"></a>00631     QRect area2;
<a name="l00632"></a>00632     QPixmap pm2;
<a name="l00633"></a>00633 
<a name="l00634"></a>00634     QTime t;
<a name="l00635"></a>00635     t.start();
<a name="l00636"></a>00636     <span class="keywordtype">float</span> diff;
<a name="l00637"></a>00637 
<a name="l00638"></a>00638     QPainter p ( <a class="code" href="classKWinInternal_1_1Client.html#a5">workspace</a>()-&gt;desktopWidget() );
<a name="l00639"></a>00639     <span class="keywordtype">bool</span> need_to_clear = FALSE;
<a name="l00640"></a>00640     QPixmap pm3;
<a name="l00641"></a>00641     <span class="keywordflow">do</span> 
<a name="l00642"></a>00642         {
<a name="l00643"></a>00643         <span class="keywordflow">if</span> (area2 != area)
<a name="l00644"></a>00644             {
<a name="l00645"></a>00645             pm = animationPixmap( area.width() );
<a name="l00646"></a>00646             pm2 = QPixmap::grabWindow( qt_xrootwin(), area.x(), area.y(), area.width(), area.height() );
<a name="l00647"></a>00647             p.drawPixmap( area.x(), area.y(), pm );
<a name="l00648"></a>00648             <span class="keywordflow">if</span> ( need_to_clear ) 
<a name="l00649"></a>00649                 {
<a name="l00650"></a>00650                 p.drawPixmap( area2.x(), area2.y(), pm3 );
<a name="l00651"></a>00651                 need_to_clear = FALSE;
<a name="l00652"></a>00652                 }
<a name="l00653"></a>00653             area2 = area;
<a name="l00654"></a>00654             }
<a name="l00655"></a>00655         XFlush(qt_xdisplay());
<a name="l00656"></a>00656         XSync( qt_xdisplay(), FALSE );
<a name="l00657"></a>00657         diff = t.elapsed();
<a name="l00658"></a>00658         <span class="keywordflow">if</span> (diff &gt; step)
<a name="l00659"></a>00659             diff = step;
<a name="l00660"></a>00660         area.setLeft(before.left() + int(diff*lf));
<a name="l00661"></a>00661         area.setRight(before.right() + int(diff*rf));
<a name="l00662"></a>00662         area.setTop(before.top() + int(diff*tf));
<a name="l00663"></a>00663         area.setBottom(before.bottom() + int(diff*bf));
<a name="l00664"></a>00664         <span class="keywordflow">if</span> (area2 != area ) 
<a name="l00665"></a>00665             {
<a name="l00666"></a>00666             <span class="keywordflow">if</span> ( area2.intersects( area ) )
<a name="l00667"></a>00667                 p.drawPixmap( area2.x(), area2.y(), pm2 );
<a name="l00668"></a>00668             <span class="keywordflow">else</span> 
<a name="l00669"></a>00669                 { <span class="comment">// no overlap, we can clear later to avoid flicker</span>
<a name="l00670"></a>00670                 pm3 = pm2;
<a name="l00671"></a>00671                 need_to_clear = TRUE;
<a name="l00672"></a>00672                 }
<a name="l00673"></a>00673             }
<a name="l00674"></a>00674         } <span class="keywordflow">while</span> ( t.elapsed() &lt; step);
<a name="l00675"></a>00675     <span class="keywordflow">if</span> (area2 == area || need_to_clear )
<a name="l00676"></a>00676         p.drawPixmap( area2.x(), area2.y(), pm2 );
<a name="l00677"></a>00677 
<a name="l00678"></a>00678     p.end();
<a name="l00679"></a>00679     <a class="code" href="namespaceKWinInternal.html#a106">ungrabXServer</a>();
<a name="l00680"></a>00680     }
<a name="l00681"></a>00681 
<a name="l00682"></a>00682 
<a name="l00686"></a>00686 QPixmap Client::animationPixmap( <span class="keywordtype">int</span> w )
<a name="l00687"></a>00687     {
<a name="l00688"></a>00688     QFont font = <a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;font(<a class="code" href="classKWinInternal_1_1Client.html#a41">isActive</a>());
<a name="l00689"></a>00689     QFontMetrics fm( font );
<a name="l00690"></a>00690     QPixmap pm( w, fm.lineSpacing() );
<a name="l00691"></a>00691     pm.fill( <a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;color(<a class="code" href="classKDecorationDefines.html#w73w35">Options::ColorTitleBar</a>, <a class="code" href="classKWinInternal_1_1Client.html#a41">isActive</a>() || <a class="code" href="classKWinInternal_1_1Client.html#a54">isMinimized</a>() ) );
<a name="l00692"></a>00692     QPainter p( &amp;pm );
<a name="l00693"></a>00693     p.setPen(<a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;color(<a class="code" href="classKDecorationDefines.html#w73w37">Options::ColorFont</a>, <a class="code" href="classKWinInternal_1_1Client.html#a41">isActive</a>() || <a class="code" href="classKWinInternal_1_1Client.html#a54">isMinimized</a>() ));
<a name="l00694"></a>00694     p.setFont(<a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;font(<a class="code" href="classKWinInternal_1_1Client.html#a41">isActive</a>()));
<a name="l00695"></a>00695     p.drawText( pm.rect(), AlignLeft|AlignVCenter|SingleLine, <a class="code" href="classKWinInternal_1_1Client.html#a136">caption</a>() );
<a name="l00696"></a>00696     <span class="keywordflow">return</span> pm;
<a name="l00697"></a>00697     }
<a name="l00698"></a>00698 
<a name="l00699"></a>00699 
<a name="l00700"></a><a class="code" href="classKWinInternal_1_1Client.html#a53">00700</a> <span class="keywordtype">bool</span> <a class="code" href="classKWinInternal_1_1Client.html#a53">Client::isShadeable</a>()<span class="keyword"> const</span>
<a name="l00701"></a>00701 <span class="keyword">    </span>{
<a name="l00702"></a>00702     <span class="keywordflow">return</span> !<a class="code" href="classKWinInternal_1_1Client.html#a97">isSpecialWindow</a>() &amp;&amp; !<a class="code" href="classKWinInternal_1_1Client.html#a69">noBorder</a>();
<a name="l00703"></a>00703     }
<a name="l00704"></a>00704 
<a name="l00705"></a><a class="code" href="classKWinInternal_1_1Client.html#a52">00705</a> <span class="keywordtype">void</span> <a class="code" href="classKWinInternal_1_1Client.html#a52">Client::setShade</a>( <a class="code" href="namespaceKWinInternal.html#a123">ShadeMode</a> mode )
<a name="l00706"></a>00706     {
<a name="l00707"></a>00707     <span class="keywordflow">if</span>( !<a class="code" href="classKWinInternal_1_1Client.html#a53">isShadeable</a>())
<a name="l00708"></a>00708         <span class="keywordflow">return</span>;
<a name="l00709"></a>00709     mode = <a class="code" href="classKWinInternal_1_1Client.html#a20">rules</a>()-&gt;<a class="code" href="classKWinInternal_1_1WindowRules.html#a17">checkShade</a>( mode );
<a name="l00710"></a>00710     <span class="keywordflow">if</span>( shade_mode == mode )
<a name="l00711"></a>00711         <span class="keywordflow">return</span>;
<a name="l00712"></a>00712     <span class="keywordtype">bool</span> was_shade = <a class="code" href="classKWinInternal_1_1Client.html#a50">isShade</a>();
<a name="l00713"></a>00713     <a class="code" href="namespaceKWinInternal.html#a123">ShadeMode</a> was_shade_mode = shade_mode;
<a name="l00714"></a>00714     shade_mode = mode;
<a name="l00715"></a>00715     <span class="keywordflow">if</span>( was_shade == <a class="code" href="classKWinInternal_1_1Client.html#a50">isShade</a>())
<a name="l00716"></a>00716         {
<a name="l00717"></a>00717         <span class="keywordflow">if</span>( decoration != NULL ) <span class="comment">// decoration may want to update after e.g. hover-shade changes</span>
<a name="l00718"></a>00718             decoration-&gt;<a class="code" href="classKDecoration.html#a45">shadeChange</a>();
<a name="l00719"></a>00719         <span class="keywordflow">return</span>; <span class="comment">// no real change in shaded state</span>
<a name="l00720"></a>00720         }
<a name="l00721"></a>00721 
<a name="l00722"></a>00722     <span class="keywordflow">if</span>( shade_mode == ShadeNormal )
<a name="l00723"></a>00723         {
<a name="l00724"></a>00724         <span class="keywordflow">if</span> ( <a class="code" href="classKWinInternal_1_1Client.html#a49">isShown</a>( <span class="keyword">true</span> ) &amp;&amp; <a class="code" href="classKWinInternal_1_1Client.html#a46">isOnCurrentDesktop</a>())
<a name="l00725"></a>00725                 <a class="code" href="classKWinInternal_1_1Notify.html#e0">Notify::raise</a>( Notify::ShadeUp );
<a name="l00726"></a>00726         }
<a name="l00727"></a>00727     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( shade_mode == ShadeNone )
<a name="l00728"></a>00728         {
<a name="l00729"></a>00729         <span class="keywordflow">if</span>( <a class="code" href="classKWinInternal_1_1Client.html#a49">isShown</a>( <span class="keyword">true</span> ) &amp;&amp; <a class="code" href="classKWinInternal_1_1Client.html#a46">isOnCurrentDesktop</a>())
<a name="l00730"></a>00730                 <a class="code" href="classKWinInternal_1_1Notify.html#e0">Notify::raise</a>( Notify::ShadeDown );
<a name="l00731"></a>00731         }
<a name="l00732"></a>00732 
<a name="l00733"></a>00733     assert( decoration != NULL ); <span class="comment">// noborder windows can't be shaded</span>
<a name="l00734"></a>00734     <a class="code" href="classKWinInternal_1_1GeometryUpdatesPostponer.html">GeometryUpdatesPostponer</a> blocker( <span class="keyword">this</span> );
<a name="l00735"></a>00735     <span class="comment">// decorations may turn off some borders when shaded</span>
<a name="l00736"></a>00736     decoration-&gt;<a class="code" href="classKDecoration.html#a37">borders</a>( border_left, border_right, border_top, border_bottom );
<a name="l00737"></a>00737 
<a name="l00738"></a>00738     <span class="keywordtype">int</span> as = <a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;<a class="code" href="classKWinInternal_1_1Options.html#o17">animateShade</a>? 10 : 1;
<a name="l00739"></a>00739 <span class="comment">// TODO all this unmapping, resizing etc. feels too much duplicated from elsewhere</span>
<a name="l00740"></a>00740     <span class="keywordflow">if</span> ( <a class="code" href="classKWinInternal_1_1Client.html#a50">isShade</a>()) 
<a name="l00741"></a>00741         { <span class="comment">// shade_mode == ShadeNormal</span>
<a name="l00742"></a>00742         <span class="comment">// we're about to shade, texx xcompmgr to prepare</span>
<a name="l00743"></a>00743         <span class="keywordtype">long</span> _shade = 1;
<a name="l00744"></a>00744         XChangeProperty(qt_xdisplay(), <a class="code" href="classKWinInternal_1_1Client.html#a2">frameId</a>(), <a class="code" href="namespaceKWinInternal.html#a0">atoms</a>-&gt;<a class="code" href="classKWinInternal_1_1Atoms.html#o16">net_wm_window_shade</a>, XA_CARDINAL, 32, PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) &amp;_shade, 1L);
<a name="l00745"></a>00745         <span class="comment">// shade</span>
<a name="l00746"></a>00746         <span class="keywordtype">int</span> h = <a class="code" href="classKWinInternal_1_1Client.html#a30">height</a>();
<a name="l00747"></a>00747         shade_geometry_change = <span class="keyword">true</span>;
<a name="l00748"></a>00748         QSize s( sizeForClientSize( QSize( <a class="code" href="classKWinInternal_1_1Client.html#a32">clientSize</a>())));
<a name="l00749"></a>00749         s.setHeight( border_top + border_bottom );
<a name="l00750"></a>00750         XSelectInput( qt_xdisplay(), wrapper, <a class="code" href="namespaceKWinInternal.html#a23">ClientWinMask</a> ); <span class="comment">// avoid getting UnmapNotify</span>
<a name="l00751"></a>00751         XUnmapWindow( qt_xdisplay(), wrapper );
<a name="l00752"></a>00752         XUnmapWindow( qt_xdisplay(), client );
<a name="l00753"></a>00753         XSelectInput( qt_xdisplay(), wrapper, <a class="code" href="namespaceKWinInternal.html#a23">ClientWinMask</a> | SubstructureNotifyMask );
<a name="l00754"></a>00754         <span class="comment">//as we hid the unmap event, xcompmgr didn't recognize the client wid has vanished, so we'll extra inform it        </span>
<a name="l00755"></a>00755         <span class="comment">//done xcompmgr workaround</span>
<a name="l00756"></a>00756 <span class="comment">// FRAME       repaint( FALSE );</span>
<a name="l00757"></a>00757 <span class="comment">//        bool wasStaticContents = testWFlags( WStaticContents );</span>
<a name="l00758"></a>00758 <span class="comment">//        setWFlags( WStaticContents );</span>
<a name="l00759"></a>00759         <span class="keywordtype">int</span> step = QMAX( 4, QABS( h - s.height() ) / as )+1;
<a name="l00760"></a>00760         <span class="keywordflow">do</span> 
<a name="l00761"></a>00761             {
<a name="l00762"></a>00762             h -= step;
<a name="l00763"></a>00763             XResizeWindow( qt_xdisplay(), <a class="code" href="classKWinInternal_1_1Client.html#a2">frameId</a>(), s.width(), h );
<a name="l00764"></a>00764             resizeDecoration( QSize( s.width(), h ));
<a name="l00765"></a>00765             QApplication::syncX();
<a name="l00766"></a>00766             } <span class="keywordflow">while</span> ( h &gt; s.height() + step );
<a name="l00767"></a>00767 <span class="comment">//        if ( !wasStaticContents )</span>
<a name="l00768"></a>00768 <span class="comment">//            clearWFlags( WStaticContents );</span>
<a name="l00769"></a>00769         <a class="code" href="classKWinInternal_1_1Client.html#a113">plainResize</a>( s );
<a name="l00770"></a>00770         shade_geometry_change = <span class="keyword">false</span>;
<a name="l00771"></a>00771         <span class="keywordflow">if</span>( <a class="code" href="classKWinInternal_1_1Client.html#a41">isActive</a>())
<a name="l00772"></a>00772             {
<a name="l00773"></a>00773             <span class="keywordflow">if</span>( was_shade_mode == ShadeHover )
<a name="l00774"></a>00774                 <a class="code" href="classKWinInternal_1_1Client.html#a5">workspace</a>()-&gt;<a class="code" href="classKWinInternal_1_1Workspace.html#a26">activateNextClient</a>( <span class="keyword">this</span> );
<a name="l00775"></a>00775             <span class="keywordflow">else</span>
<a name="l00776"></a>00776                 <a class="code" href="classKWinInternal_1_1Client.html#a5">workspace</a>()-&gt;<a class="code" href="classKWinInternal_1_1Workspace.html#a97">focusToNull</a>();
<a name="l00777"></a>00777             }
<a name="l00778"></a>00778         <span class="comment">// tell xcompmgr shade's done</span>
<a name="l00779"></a>00779         _shade = 2;
<a name="l00780"></a>00780         XChangeProperty(qt_xdisplay(), <a class="code" href="classKWinInternal_1_1Client.html#a2">frameId</a>(), <a class="code" href="namespaceKWinInternal.html#a0">atoms</a>-&gt;<a class="code" href="classKWinInternal_1_1Atoms.html#o16">net_wm_window_shade</a>, XA_CARDINAL, 32, PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) &amp;_shade, 1L);    
<a name="l00781"></a>00781         }
<a name="l00782"></a>00782     <span class="keywordflow">else</span> 
<a name="l00783"></a>00783         {
<a name="l00784"></a>00784         <span class="keywordtype">int</span> h = <a class="code" href="classKWinInternal_1_1Client.html#a30">height</a>();
<a name="l00785"></a>00785         shade_geometry_change = <span class="keyword">true</span>;
<a name="l00786"></a>00786         QSize s( sizeForClientSize( <a class="code" href="classKWinInternal_1_1Client.html#a32">clientSize</a>()));
<a name="l00787"></a>00787 <span class="comment">// FRAME       bool wasStaticContents = testWFlags( WStaticContents );</span>
<a name="l00788"></a>00788 <span class="comment">//        setWFlags( WStaticContents );</span>
<a name="l00789"></a>00789         <span class="keywordtype">int</span> step = QMAX( 4, QABS( h - s.height() ) / as )+1;
<a name="l00790"></a>00790         <span class="keywordflow">do</span> 
<a name="l00791"></a>00791             {
<a name="l00792"></a>00792             h += step;
<a name="l00793"></a>00793             XResizeWindow( qt_xdisplay(), <a class="code" href="classKWinInternal_1_1Client.html#a2">frameId</a>(), s.width(), h );
<a name="l00794"></a>00794             resizeDecoration( QSize( s.width(), h ));
<a name="l00795"></a>00795             <span class="comment">// assume a border</span>
<a name="l00796"></a>00796             <span class="comment">// we do not have time to wait for X to send us paint events</span>
<a name="l00797"></a>00797 <span class="comment">// FRAME           repaint( 0, h - step-5, width(), step+5, TRUE);</span>
<a name="l00798"></a>00798             QApplication::syncX();
<a name="l00799"></a>00799             } <span class="keywordflow">while</span> ( h &lt; s.height() - step );
<a name="l00800"></a>00800 <span class="comment">//        if ( !wasStaticContents )</span>
<a name="l00801"></a>00801 <span class="comment">//            clearWFlags( WStaticContents );</span>
<a name="l00802"></a>00802         shade_geometry_change = <span class="keyword">false</span>;
<a name="l00803"></a>00803         <a class="code" href="classKWinInternal_1_1Client.html#a113">plainResize</a>( s );
<a name="l00804"></a>00804         <span class="keywordflow">if</span>( shade_mode == ShadeHover || shade_mode == ShadeActivated )
<a name="l00805"></a>00805             <a class="code" href="classKWinInternal_1_1Client.html#a42">setActive</a>( TRUE );
<a name="l00806"></a>00806         XMapWindow( qt_xdisplay(), <a class="code" href="classKWinInternal_1_1Client.html#a3">wrapperId</a>());
<a name="l00807"></a>00807         XMapWindow( qt_xdisplay(), <a class="code" href="classKWinInternal_1_1Client.html#a1">window</a>());
<a name="l00808"></a>00808         XDeleteProperty (qt_xdisplay(), client, <a class="code" href="namespaceKWinInternal.html#a0">atoms</a>-&gt;<a class="code" href="classKWinInternal_1_1Atoms.html#o16">net_wm_window_shade</a>);
<a name="l00809"></a>00809         <span class="keywordflow">if</span> ( <a class="code" href="classKWinInternal_1_1Client.html#a41">isActive</a>() )
<a name="l00810"></a>00810             <a class="code" href="classKWinInternal_1_1Client.html#a5">workspace</a>()-&gt;<a class="code" href="classKWinInternal_1_1Workspace.html#a17">requestFocus</a>( <span class="keyword">this</span> );
<a name="l00811"></a>00811         }
<a name="l00812"></a>00812     checkMaximizeGeometry();
<a name="l00813"></a>00813     info-&gt;setState( <a class="code" href="classKWinInternal_1_1Client.html#a50">isShade</a>() ? NET::Shaded : 0, NET::Shaded );
<a name="l00814"></a>00814     info-&gt;setState( <a class="code" href="classKWinInternal_1_1Client.html#a49">isShown</a>( <span class="keyword">false</span> ) ? 0 : NET::Hidden, NET::Hidden );
<a name="l00815"></a>00815     setMappingState( <a class="code" href="classKWinInternal_1_1Client.html#a49">isShown</a>( <span class="keyword">false</span> ) &amp;&amp; <a class="code" href="classKWinInternal_1_1Client.html#a46">isOnCurrentDesktop</a>() ? NormalState : IconicState );
<a name="l00816"></a>00816     updateAllowedActions();
<a name="l00817"></a>00817     <a class="code" href="classKWinInternal_1_1Client.html#a5">workspace</a>()-&gt;<a class="code" href="classKWinInternal_1_1Workspace.html#a65">updateMinimizedOfTransients</a>( <span class="keyword">this</span> );
<a name="l00818"></a>00818     decoration-&gt;<a class="code" href="classKDecoration.html#a45">shadeChange</a>();
<a name="l00819"></a>00819     updateWindowRules();
<a name="l00820"></a>00820     }
<a name="l00821"></a>00821 
<a name="l00822"></a>00822 <span class="keywordtype">void</span> Client::shadeHover()
<a name="l00823"></a>00823     {
<a name="l00824"></a>00824     <a class="code" href="classKWinInternal_1_1Client.html#a52">setShade</a>( ShadeHover );
<a name="l00825"></a>00825     <span class="keyword">delete</span> shadeHoverTimer;
<a name="l00826"></a>00826     shadeHoverTimer = 0;
<a name="l00827"></a>00827     }
<a name="l00828"></a>00828 
<a name="l00829"></a><a class="code" href="classKWinInternal_1_1Client.html#a156">00829</a> <span class="keywordtype">void</span> <a class="code" href="classKWinInternal_1_1Client.html#a156">Client::toggleShade</a>()
<a name="l00830"></a>00830     {
<a name="l00831"></a>00831     <span class="comment">// if the mode is ShadeHover or ShadeActive, cancel shade too</span>
<a name="l00832"></a>00832     <a class="code" href="classKWinInternal_1_1Client.html#a52">setShade</a>( shade_mode == ShadeNone ? ShadeNormal : ShadeNone );
<a name="l00833"></a>00833     }
<a name="l00834"></a>00834 
<a name="l00835"></a><a class="code" href="classKWinInternal_1_1Client.html#a135">00835</a> <span class="keywordtype">void</span> <a class="code" href="classKWinInternal_1_1Client.html#a135">Client::virtualDesktopChange</a>()
<a name="l00836"></a>00836     {
<a name="l00837"></a>00837     <span class="keywordflow">if</span>( hidden || minimized )
<a name="l00838"></a>00838         <span class="keywordflow">return</span>; <span class="comment">// no visibility change</span>
<a name="l00839"></a>00839     <span class="comment">// from here it can be only shaded or normally shown</span>
<a name="l00840"></a>00840     <span class="keywordflow">if</span>( <a class="code" href="classKWinInternal_1_1Client.html#a46">isOnCurrentDesktop</a>())
<a name="l00841"></a>00841         {
<a name="l00842"></a>00842         <span class="keywordflow">if</span>( !<a class="code" href="classKWinInternal_1_1Client.html#a50">isShade</a>())
<a name="l00843"></a>00843             setMappingState( NormalState );
<a name="l00844"></a>00844         rawShow();
<a name="l00845"></a>00845         }
<a name="l00846"></a>00846     <span class="keywordflow">else</span>
<a name="l00847"></a>00847         {
<a name="l00848"></a>00848         <span class="keywordflow">if</span>( !<a class="code" href="classKWinInternal_1_1Client.html#a50">isShade</a>())
<a name="l00849"></a>00849             setMappingState( IconicState );
<a name="l00850"></a>00850         rawHide();
<a name="l00851"></a>00851         }
<a name="l00852"></a>00852     }
<a name="l00853"></a>00853 
<a name="l00858"></a>00858 <span class="keywordtype">void</span> Client::setMappingState(<span class="keywordtype">int</span> s)
<a name="l00859"></a>00859     {
<a name="l00860"></a>00860     assert( client != None );
<a name="l00861"></a>00861     <span class="keywordflow">if</span>( mapping_state == s )
<a name="l00862"></a>00862         <span class="keywordflow">return</span>;
<a name="l00863"></a>00863     <span class="keywordtype">bool</span> was_unmanaged = ( mapping_state == WithdrawnState );
<a name="l00864"></a>00864     mapping_state = s;
<a name="l00865"></a>00865     <span class="keywordflow">if</span>( mapping_state == WithdrawnState )
<a name="l00866"></a>00866         {
<a name="l00867"></a>00867         XDeleteProperty( qt_xdisplay(), <a class="code" href="classKWinInternal_1_1Client.html#a1">window</a>(), qt_wm_state );
<a name="l00868"></a>00868         <span class="keywordflow">return</span>;
<a name="l00869"></a>00869         }
<a name="l00870"></a>00870     assert( s == NormalState || s == IconicState );
<a name="l00871"></a>00871 
<a name="l00872"></a>00872     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> data[2];
<a name="l00873"></a>00873     data[0] = (<span class="keywordtype">unsigned</span> long) s;
<a name="l00874"></a>00874     data[1] = (<span class="keywordtype">unsigned</span> long) None;
<a name="l00875"></a>00875     XChangeProperty(qt_xdisplay(), <a class="code" href="classKWinInternal_1_1Client.html#a1">window</a>(), qt_wm_state, qt_wm_state, 32,
<a name="l00876"></a>00876         PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *)data, 2);
<a name="l00877"></a>00877 
<a name="l00878"></a>00878     <span class="keywordflow">if</span>( was_unmanaged ) <span class="comment">// manage() did postpone_geometry_updates = 1, now it's ok to finally set the geometry</span>
<a name="l00879"></a>00879         postponeGeometryUpdates( <span class="keyword">false</span> );
<a name="l00880"></a>00880     }
<a name="l00881"></a>00881 
<a name="l00886"></a>00886 <span class="keywordtype">void</span> Client::rawShow()
<a name="l00887"></a>00887     {
<a name="l00888"></a>00888     <span class="keywordflow">if</span>( decoration != NULL )
<a name="l00889"></a>00889         decoration-&gt;<a class="code" href="classKDecoration.html#a55">widget</a>()-&gt;show(); <span class="comment">// not really necessary, but let it know the state</span>
<a name="l00890"></a>00890     XMapWindow( qt_xdisplay(), frame );
<a name="l00891"></a>00891     <span class="keywordflow">if</span>( !<a class="code" href="classKWinInternal_1_1Client.html#a50">isShade</a>())
<a name="l00892"></a>00892         {
<a name="l00893"></a>00893         XMapWindow( qt_xdisplay(), wrapper );
<a name="l00894"></a>00894         XMapWindow( qt_xdisplay(), client );
<a name="l00895"></a>00895         }
<a name="l00896"></a>00896     }
<a name="l00897"></a>00897 
<a name="l00903"></a>00903 <span class="keywordtype">void</span> Client::rawHide()
<a name="l00904"></a>00904     {
<a name="l00905"></a>00905 <span class="comment">// Here it may look like a race condition, as some other client might try to unmap</span>
<a name="l00906"></a>00906 <span class="comment">// the window between these two XSelectInput() calls. However, they're supposed to</span>
<a name="l00907"></a>00907 <span class="comment">// use XWithdrawWindow(), which also sends a synthetic event to the root window,</span>
<a name="l00908"></a>00908 <span class="comment">// which won't be missed, so this shouldn't be a problem. The chance the real UnmapNotify</span>
<a name="l00909"></a>00909 <span class="comment">// will be missed is also very minimal, so I don't think it's needed to grab the server</span>
<a name="l00910"></a>00910 <span class="comment">// here.</span>
<a name="l00911"></a>00911     XSelectInput( qt_xdisplay(), wrapper, <a class="code" href="namespaceKWinInternal.html#a23">ClientWinMask</a> ); <span class="comment">// avoid getting UnmapNotify</span>
<a name="l00912"></a>00912     XUnmapWindow( qt_xdisplay(), frame );
<a name="l00913"></a>00913     XUnmapWindow( qt_xdisplay(), wrapper );
<a name="l00914"></a>00914     XUnmapWindow( qt_xdisplay(), client );
<a name="l00915"></a>00915     XSelectInput( qt_xdisplay(), wrapper, <a class="code" href="namespaceKWinInternal.html#a23">ClientWinMask</a> | SubstructureNotifyMask );
<a name="l00916"></a>00916     <span class="keywordflow">if</span>( decoration != NULL )
<a name="l00917"></a>00917         decoration-&gt;<a class="code" href="classKDecoration.html#a55">widget</a>()-&gt;hide(); <span class="comment">// not really necessary, but let it know the state</span>
<a name="l00918"></a>00918     <a class="code" href="classKWinInternal_1_1Client.html#a5">workspace</a>()-&gt;clientHidden( <span class="keyword">this</span> );
<a name="l00919"></a>00919     }
<a name="l00920"></a>00920 
<a name="l00921"></a>00921 <span class="keywordtype">void</span> Client::sendClientMessage(Window w, Atom a, Atom protocol, <span class="keywordtype">long</span> data1, <span class="keywordtype">long</span> data2, <span class="keywordtype">long</span> data3)
<a name="l00922"></a>00922     {
<a name="l00923"></a>00923     XEvent ev;
<a name="l00924"></a>00924     <span class="keywordtype">long</span> <a class="code" href="classKWinInternal_1_1Client.html#a104">mask</a>;
<a name="l00925"></a>00925 
<a name="l00926"></a>00926     memset(&amp;ev, 0, <span class="keyword">sizeof</span>(ev));
<a name="l00927"></a>00927     ev.xclient.type = ClientMessage;
<a name="l00928"></a>00928     ev.xclient.window = w;
<a name="l00929"></a>00929     ev.xclient.message_type = a;
<a name="l00930"></a>00930     ev.xclient.format = 32;
<a name="l00931"></a>00931     ev.xclient.data.l[0] = protocol;
<a name="l00932"></a>00932     ev.xclient.data.l[1] = qt_x_time;
<a name="l00933"></a>00933     ev.xclient.data.l[2] = data1;
<a name="l00934"></a>00934     ev.xclient.data.l[3] = data2;
<a name="l00935"></a>00935     ev.xclient.data.l[4] = data3;
<a name="l00936"></a>00936     mask = 0L;
<a name="l00937"></a>00937     <span class="keywordflow">if</span> (w == qt_xrootwin())
<a name="l00938"></a>00938       mask = SubstructureRedirectMask;        <span class="comment">/* magic! */</span>
<a name="l00939"></a>00939     XSendEvent(qt_xdisplay(), w, False, mask, &amp;ev);
<a name="l00940"></a>00940     }
<a name="l00941"></a>00941 
<a name="l00942"></a>00942 <span class="comment">/*</span>
<a name="l00943"></a>00943 <span class="comment">  Returns whether the window may be closed (have a close button)</span>
<a name="l00944"></a>00944 <span class="comment"> */</span>
<a name="l00945"></a><a class="code" href="classKWinInternal_1_1Client.html#a99">00945</a> <span class="keywordtype">bool</span> <a class="code" href="classKWinInternal_1_1Client.html#a99">Client::isCloseable</a>()<span class="keyword"> const</span>
<a name="l00946"></a>00946 <span class="keyword">    </span>{
<a name="l00947"></a>00947     <span class="keywordflow">return</span> <a class="code" href="classKWinInternal_1_1Client.html#a20">rules</a>()-&gt;<a class="code" href="classKWinInternal_1_1WindowRules.html#a27">checkCloseable</a>( motif_may_close &amp;&amp; ( !<a class="code" href="classKWinInternal_1_1Client.html#a97">isSpecialWindow</a>() || <a class="code" href="classKWinInternal_1_1Client.html#a96">isOverride</a>())); <span class="comment">// TODO is NET::Override special?</span>
<a name="l00948"></a>00948     }
<a name="l00949"></a>00949 
<a name="l00954"></a><a class="code" href="classKWinInternal_1_1Client.html#a153">00954</a> <span class="keywordtype">void</span> <a class="code" href="classKWinInternal_1_1Client.html#a153">Client::closeWindow</a>()
<a name="l00955"></a>00955     {
<a name="l00956"></a>00956     <span class="keywordflow">if</span>( !<a class="code" href="classKWinInternal_1_1Client.html#a99">isCloseable</a>())
<a name="l00957"></a>00957         <span class="keywordflow">return</span>;
<a name="l00958"></a>00958     <span class="comment">// Update user time, needed for whole group, because the window may create a confirming dialog,</span>
<a name="l00959"></a>00959     <span class="comment">// and this window's user time wouldn't apply to it</span>
<a name="l00960"></a>00960     <span class="comment">// This is needed even for apps without support for user timestamp (e.g. nedit), so updating</span>
<a name="l00961"></a>00961     <span class="comment">// user timestamp in apps on WM_DELETE_WINDOW is not an option (and I'm not sure if it would be right)</span>
<a name="l00962"></a>00962     <a class="code" href="classKWinInternal_1_1Client.html#a16">group</a>()-&gt;<a class="code" href="classKWinInternal_1_1Group.html#a14">updateUserTime</a>(); 
<a name="l00963"></a>00963     <span class="keywordflow">if</span> ( Pdeletewindow )
<a name="l00964"></a>00964         {
<a name="l00965"></a>00965         <a class="code" href="classKWinInternal_1_1Notify.html#e0">Notify::raise</a>( Notify::Close );
<a name="l00966"></a>00966         sendClientMessage( <a class="code" href="classKWinInternal_1_1Client.html#a1">window</a>(), <a class="code" href="namespaceKWinInternal.html#a0">atoms</a>-&gt;<a class="code" href="classKWinInternal_1_1Atoms.html#o1">wm_protocols</a>, <a class="code" href="namespaceKWinInternal.html#a0">atoms</a>-&gt;<a class="code" href="classKWinInternal_1_1Atoms.html#o2">wm_delete_window</a>);
<a name="l00967"></a>00967         pingWindow();
<a name="l00968"></a>00968         }
<a name="l00969"></a>00969     <span class="keywordflow">else</span> 
<a name="l00970"></a>00970         {
<a name="l00971"></a>00971         <span class="comment">// client will not react on wm_delete_window. We have not choice</span>
<a name="l00972"></a>00972         <span class="comment">// but destroy his connection to the XServer.</span>
<a name="l00973"></a>00973         <a class="code" href="classKWinInternal_1_1Client.html#a154">killWindow</a>();
<a name="l00974"></a>00974         }
<a name="l00975"></a>00975     }
<a name="l00976"></a>00976 
<a name="l00977"></a>00977 
<a name="l00981"></a><a class="code" href="classKWinInternal_1_1Client.html#a154">00981</a> <span class="keywordtype">void</span> <a class="code" href="classKWinInternal_1_1Client.html#a154">Client::killWindow</a>()
<a name="l00982"></a>00982     {
<a name="l00983"></a>00983     kdDebug( 1212 ) &lt;&lt; <span class="stringliteral">"Client::killWindow():"</span> &lt;&lt; <a class="code" href="classKWinInternal_1_1Client.html#a136">caption</a>() &lt;&lt; endl;
<a name="l00984"></a>00984     <span class="comment">// not sure if we need an Notify::Kill or not.. until then, use</span>
<a name="l00985"></a>00985     <span class="comment">// Notify::Close</span>
<a name="l00986"></a>00986     <a class="code" href="classKWinInternal_1_1Notify.html#e0">Notify::raise</a>( Notify::Close );
<a name="l00987"></a>00987 
<a name="l00988"></a>00988     <span class="keywordflow">if</span>( <a class="code" href="classKWinInternal_1_1Client.html#a93">isDialog</a>())
<a name="l00989"></a>00989         <a class="code" href="classKWinInternal_1_1Notify.html#e0">Notify::raise</a>( Notify::TransDelete );
<a name="l00990"></a>00990     <span class="keywordflow">if</span>( <a class="code" href="classKWinInternal_1_1Client.html#a92">isNormalWindow</a>())
<a name="l00991"></a>00991         <a class="code" href="classKWinInternal_1_1Notify.html#e0">Notify::raise</a>( Notify::Delete );
<a name="l00992"></a>00992     killProcess( <span class="keyword">false</span> );
<a name="l00993"></a>00993     <span class="comment">// always kill this client at the server</span>
<a name="l00994"></a>00994     XKillClient(qt_xdisplay(), <a class="code" href="classKWinInternal_1_1Client.html#a1">window</a>() );
<a name="l00995"></a>00995     <a class="code" href="classKWinInternal_1_1Client.html#a159">destroyClient</a>();
<a name="l00996"></a>00996     }
<a name="l00997"></a>00997 
<a name="l00998"></a>00998 <span class="comment">// send a ping to the window using _NET_WM_PING if possible</span>
<a name="l00999"></a>00999 <span class="comment">// if it doesn't respond within a reasonable time, it will be</span>
<a name="l01000"></a>01000 <span class="comment">// killed</span>
<a name="l01001"></a>01001 <span class="keywordtype">void</span> Client::pingWindow()
<a name="l01002"></a>01002     {
<a name="l01003"></a>01003     <span class="keywordflow">if</span>( !Pping )
<a name="l01004"></a>01004         <span class="keywordflow">return</span>; <span class="comment">// can't ping :(</span>
<a name="l01005"></a>01005     <span class="keywordflow">if</span>( <a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;<a class="code" href="classKWinInternal_1_1Options.html#o26">killPingTimeout</a> == 0 )
<a name="l01006"></a>01006         <span class="keywordflow">return</span>; <span class="comment">// turned off</span>
<a name="l01007"></a>01007     <span class="keywordflow">if</span>( ping_timer != NULL )
<a name="l01008"></a>01008         <span class="keywordflow">return</span>; <span class="comment">// pinging already</span>
<a name="l01009"></a>01009     ping_timer = <span class="keyword">new</span> QTimer( <span class="keyword">this</span> );
<a name="l01010"></a>01010     connect( ping_timer, SIGNAL( timeout()), SLOT( pingTimeout()));
<a name="l01011"></a>01011     ping_timer-&gt;start( <a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;<a class="code" href="classKWinInternal_1_1Options.html#o26">killPingTimeout</a>, <span class="keyword">true</span> );
<a name="l01012"></a>01012     ping_timestamp = qt_x_time;
<a name="l01013"></a>01013     <a class="code" href="classKWinInternal_1_1Client.html#a5">workspace</a>()-&gt;<a class="code" href="classKWinInternal_1_1Workspace.html#a83">sendPingToWindow</a>( <a class="code" href="classKWinInternal_1_1Client.html#a1">window</a>(), ping_timestamp );
<a name="l01014"></a>01014     }
<a name="l01015"></a>01015 
<a name="l01016"></a><a class="code" href="classKWinInternal_1_1Client.html#a145">01016</a> <span class="keywordtype">void</span> <a class="code" href="classKWinInternal_1_1Client.html#a145">Client::gotPing</a>( Time timestamp )
<a name="l01017"></a>01017     {
<a name="l01018"></a>01018     <span class="keywordflow">if</span>( timestamp != ping_timestamp )
<a name="l01019"></a>01019         <span class="keywordflow">return</span>;
<a name="l01020"></a>01020     <span class="keyword">delete</span> ping_timer;
<a name="l01021"></a>01021     ping_timer = NULL;
<a name="l01022"></a>01022     <span class="keywordflow">if</span>( process_killer != NULL )
<a name="l01023"></a>01023         {
<a name="l01024"></a>01024         process_killer-&gt;kill();
<a name="l01025"></a>01025         <span class="keyword">delete</span> process_killer;
<a name="l01026"></a>01026         process_killer = NULL;
<a name="l01027"></a>01027         }
<a name="l01028"></a>01028     }
<a name="l01029"></a>01029 
<a name="l01030"></a>01030 <span class="keywordtype">void</span> Client::pingTimeout()
<a name="l01031"></a>01031     {
<a name="l01032"></a>01032     kdDebug( 1212 ) &lt;&lt; <span class="stringliteral">"Ping timeout:"</span> &lt;&lt; <a class="code" href="classKWinInternal_1_1Client.html#a136">caption</a>() &lt;&lt; endl;
<a name="l01033"></a>01033     <span class="keyword">delete</span> ping_timer;
<a name="l01034"></a>01034     ping_timer = NULL;
<a name="l01035"></a>01035     killProcess( <span class="keyword">true</span>, ping_timestamp );
<a name="l01036"></a>01036     }
<a name="l01037"></a>01037 
<a name="l01038"></a>01038 <span class="keywordtype">void</span> Client::killProcess( <span class="keywordtype">bool</span> ask, Time timestamp )
<a name="l01039"></a>01039     {
<a name="l01040"></a>01040     <span class="keywordflow">if</span>( process_killer != NULL )
<a name="l01041"></a>01041         <span class="keywordflow">return</span>;
<a name="l01042"></a>01042     Q_ASSERT( !ask || timestamp != CurrentTime );
<a name="l01043"></a>01043     QCString machine = <a class="code" href="classKWinInternal_1_1Client.html#a129">wmClientMachine</a>( <span class="keyword">true</span> );
<a name="l01044"></a>01044     pid_t <a class="code" href="classKWinInternal_1_1Client.html#a131">pid</a> = info-&gt;pid();
<a name="l01045"></a>01045     <span class="keywordflow">if</span>( pid &lt;= 0 || machine.isEmpty()) <span class="comment">// needed properties missing</span>
<a name="l01046"></a>01046         <span class="keywordflow">return</span>;
<a name="l01047"></a>01047     kdDebug( 1212 ) &lt;&lt; <span class="stringliteral">"Kill process:"</span> &lt;&lt; pid &lt;&lt; <span class="stringliteral">"("</span> &lt;&lt; machine &lt;&lt; <span class="stringliteral">")"</span> &lt;&lt; endl;
<a name="l01048"></a>01048     <span class="keywordflow">if</span>( !ask )
<a name="l01049"></a>01049         {
<a name="l01050"></a>01050         <span class="keywordflow">if</span>( machine != <span class="stringliteral">"localhost"</span> )
<a name="l01051"></a>01051             {
<a name="l01052"></a>01052             KProcess proc;
<a name="l01053"></a>01053             proc &lt;&lt; <span class="stringliteral">"xon"</span> &lt;&lt; machine &lt;&lt; <span class="stringliteral">"kill"</span> &lt;&lt; pid;
<a name="l01054"></a>01054             proc.start( KProcess::DontCare );
<a name="l01055"></a>01055             }
<a name="l01056"></a>01056         else
<a name="l01057"></a>01057             ::kill( pid, SIGTERM );
<a name="l01058"></a>01058         }
<a name="l01059"></a>01059     <span class="keywordflow">else</span>
<a name="l01060"></a>01060         { <span class="comment">// SELI TODO handle the window created by handler specially (on top,urgent?)</span>
<a name="l01061"></a>01061         process_killer = <span class="keyword">new</span> KProcess( <span class="keyword">this</span> );
<a name="l01062"></a>01062         *process_killer &lt;&lt; KStandardDirs::findExe( <span class="stringliteral">"kwin_killer_helper"</span> )
<a name="l01063"></a>01063             &lt;&lt; <span class="stringliteral">"--pid"</span> &lt;&lt; QCString().setNum( pid ) &lt;&lt; <span class="stringliteral">"--hostname"</span> &lt;&lt; machine
<a name="l01064"></a>01064             &lt;&lt; <span class="stringliteral">"--windowname"</span> &lt;&lt; <a class="code" href="classKWinInternal_1_1Client.html#a136">caption</a>().utf8()
<a name="l01065"></a>01065             &lt;&lt; <span class="stringliteral">"--applicationname"</span> &lt;&lt; <a class="code" href="classKWinInternal_1_1Client.html#a127">resourceClass</a>()
<a name="l01066"></a>01066             &lt;&lt; <span class="stringliteral">"--wid"</span> &lt;&lt; QCString().setNum( <a class="code" href="classKWinInternal_1_1Client.html#a1">window</a>())
<a name="l01067"></a>01067             &lt;&lt; <span class="stringliteral">"--timestamp"</span> &lt;&lt; QCString().setNum( timestamp );
<a name="l01068"></a>01068         connect( process_killer, SIGNAL( processExited( KProcess* )),
<a name="l01069"></a>01069             SLOT( processKillerExited()));
<a name="l01070"></a>01070         <span class="keywordflow">if</span>( !process_killer-&gt;start( KProcess::NotifyOnExit ))
<a name="l01071"></a>01071             {
<a name="l01072"></a>01072             <span class="keyword">delete</span> process_killer;
<a name="l01073"></a>01073             process_killer = NULL;
<a name="l01074"></a>01074             <span class="keywordflow">return</span>;
<a name="l01075"></a>01075             }
<a name="l01076"></a>01076         }
<a name="l01077"></a>01077     }
<a name="l01078"></a>01078 
<a name="l01079"></a>01079 <span class="keywordtype">void</span> Client::processKillerExited()
<a name="l01080"></a>01080     {
<a name="l01081"></a>01081     kdDebug( 1212 ) &lt;&lt; <span class="stringliteral">"Killer exited"</span> &lt;&lt; endl;
<a name="l01082"></a>01082     <span class="keyword">delete</span> process_killer;
<a name="l01083"></a>01083     process_killer = NULL;
<a name="l01084"></a>01084     }
<a name="l01085"></a>01085 
<a name="l01086"></a><a class="code" href="classKWinInternal_1_1Client.html#a71">01086</a> <span class="keywordtype">void</span> <a class="code" href="classKWinInternal_1_1Client.html#a71">Client::setSkipTaskbar</a>( <span class="keywordtype">bool</span> b, <span class="keywordtype">bool</span> from_outside )
<a name="l01087"></a>01087     {
<a name="l01088"></a>01088     <span class="keywordflow">if</span>( from_outside )
<a name="l01089"></a>01089         {
<a name="l01090"></a>01090         b = <a class="code" href="classKWinInternal_1_1Client.html#a20">rules</a>()-&gt;<a class="code" href="classKWinInternal_1_1WindowRules.html#a18">checkSkipTaskbar</a>( b );
<a name="l01091"></a>01091         original_skip_taskbar = b;
<a name="l01092"></a>01092         }
<a name="l01093"></a>01093     <span class="keywordflow">if</span> ( b == <a class="code" href="classKWinInternal_1_1Client.html#a70">skipTaskbar</a>() )
<a name="l01094"></a>01094         <span class="keywordflow">return</span>;
<a name="l01095"></a>01095     skip_taskbar = b;
<a name="l01096"></a>01096     info-&gt;setState( b?NET::SkipTaskbar:0, NET::SkipTaskbar );
<a name="l01097"></a>01097     updateWindowRules();
<a name="l01098"></a>01098     }
<a name="l01099"></a>01099 
<a name="l01100"></a><a class="code" href="classKWinInternal_1_1Client.html#a73">01100</a> <span class="keywordtype">void</span> <a class="code" href="classKWinInternal_1_1Client.html#a73">Client::setSkipPager</a>( <span class="keywordtype">bool</span> b )
<a name="l01101"></a>01101     {
<a name="l01102"></a>01102     b = <a class="code" href="classKWinInternal_1_1Client.html#a20">rules</a>()-&gt;<a class="code" href="classKWinInternal_1_1WindowRules.html#a19">checkSkipPager</a>( b );
<a name="l01103"></a>01103     <span class="keywordflow">if</span> ( b == <a class="code" href="classKWinInternal_1_1Client.html#a72">skipPager</a>() )
<a name="l01104"></a>01104         <span class="keywordflow">return</span>;
<a name="l01105"></a>01105     skip_pager = b;
<a name="l01106"></a>01106     info-&gt;setState( b?NET::SkipPager:0, NET::SkipPager );
<a name="l01107"></a>01107     updateWindowRules();
<a name="l01108"></a>01108     }
<a name="l01109"></a>01109 
<a name="l01110"></a><a class="code" href="classKWinInternal_1_1Client.html#a81">01110</a> <span class="keywordtype">void</span> <a class="code" href="classKWinInternal_1_1Client.html#a81">Client::setModal</a>( <span class="keywordtype">bool</span> m )
<a name="l01111"></a>01111     { <span class="comment">// Qt-3.2 can have even modal normal windows :(</span>
<a name="l01112"></a>01112     <span class="keywordflow">if</span>( modal == m )
<a name="l01113"></a>01113         <span class="keywordflow">return</span>;
<a name="l01114"></a>01114     modal = m;
<a name="l01115"></a>01115     <span class="keywordflow">if</span>( !modal )
<a name="l01116"></a>01116         <span class="keywordflow">return</span>;
<a name="l01117"></a>01117     <span class="comment">// changing modality for a mapped window is weird (?)</span>
<a name="l01118"></a>01118     <span class="comment">// _NET_WM_STATE_MODAL should possibly rather be _NET_WM_WINDOW_TYPE_MODAL_DIALOG</span>
<a name="l01119"></a>01119     }
<a name="l01120"></a>01120 
<a name="l01121"></a><a class="code" href="classKWinInternal_1_1Client.html#a44">01121</a> <span class="keywordtype">void</span> <a class="code" href="classKWinInternal_1_1Client.html#a44">Client::setDesktop</a>( <span class="keywordtype">int</span> desktop )
<a name="l01122"></a>01122     {
<a name="l01123"></a>01123     <span class="keywordflow">if</span>( desktop != NET::OnAllDesktops ) <span class="comment">// do range check</span>
<a name="l01124"></a>01124         desktop = KMAX( 1, KMIN( <a class="code" href="classKWinInternal_1_1Client.html#a5">workspace</a>()-&gt;numberOfDesktops(), desktop ));
<a name="l01125"></a>01125     desktop = <a class="code" href="classKWinInternal_1_1Client.html#a20">rules</a>()-&gt;<a class="code" href="classKWinInternal_1_1WindowRules.html#a13">checkDesktop</a>( desktop );
<a name="l01126"></a>01126     <span class="keywordflow">if</span>( desk == desktop )
<a name="l01127"></a>01127         <span class="keywordflow">return</span>;
<a name="l01128"></a>01128     <span class="keywordtype">int</span> was_desk = desk;
<a name="l01129"></a>01129     desk = desktop;
<a name="l01130"></a>01130     info-&gt;setDesktop( desktop );
<a name="l01131"></a>01131     <span class="keywordflow">if</span>(( was_desk == NET::OnAllDesktops ) != ( desktop == NET::OnAllDesktops ))
<a name="l01132"></a>01132         { <span class="comment">// onAllDesktops changed</span>
<a name="l01133"></a>01133         <span class="keywordflow">if</span> ( <a class="code" href="classKWinInternal_1_1Client.html#a49">isShown</a>( <span class="keyword">true</span> ))
<a name="l01134"></a>01134             <a class="code" href="classKWinInternal_1_1Notify.html#e0">Notify::raise</a>( <a class="code" href="classKWinInternal_1_1Client.html#a47">isOnAllDesktops</a>() ? Notify::OnAllDesktops : Notify::NotOnAllDesktops );
<a name="l01135"></a>01135         <a class="code" href="classKWinInternal_1_1Client.html#a5">workspace</a>()-&gt;<a class="code" href="classKWinInternal_1_1Workspace.html#a66">updateOnAllDesktopsOfTransients</a>( <span class="keyword">this</span> );
<a name="l01136"></a>01136         }
<a name="l01137"></a>01137     <span class="keywordflow">if</span>( decoration != NULL )
<a name="l01138"></a>01138         decoration-&gt;<a class="code" href="classKDecoration.html#a44">desktopChange</a>();
<a name="l01139"></a>01139     <a class="code" href="classKWinInternal_1_1Client.html#a135">virtualDesktopChange</a>(); <span class="comment">// hide/show if needed</span>
<a name="l01140"></a>01140     updateWindowRules();
<a name="l01141"></a>01141     }
<a name="l01142"></a>01142 
<a name="l01143"></a><a class="code" href="classKWinInternal_1_1Client.html#a48">01143</a> <span class="keywordtype">void</span> <a class="code" href="classKWinInternal_1_1Client.html#a48">Client::setOnAllDesktops</a>( <span class="keywordtype">bool</span> b )
<a name="l01144"></a>01144     {
<a name="l01145"></a>01145     <span class="keywordflow">if</span>(( b &amp;&amp; <a class="code" href="classKWinInternal_1_1Client.html#a47">isOnAllDesktops</a>())
<a name="l01146"></a>01146         || ( !b &amp;&amp; !<a class="code" href="classKWinInternal_1_1Client.html#a47">isOnAllDesktops</a>()))
<a name="l01147"></a>01147         <span class="keywordflow">return</span>;
<a name="l01148"></a>01148     <span class="keywordflow">if</span>( b )
<a name="l01149"></a>01149         <a class="code" href="classKWinInternal_1_1Client.html#a44">setDesktop</a>( NET::OnAllDesktops );
<a name="l01150"></a>01150     <span class="keywordflow">else</span>
<a name="l01151"></a>01151         <a class="code" href="classKWinInternal_1_1Client.html#a44">setDesktop</a>( <a class="code" href="classKWinInternal_1_1Client.html#a5">workspace</a>()-&gt;currentDesktop());
<a name="l01152"></a>01152     }
<a name="l01153"></a>01153 
<a name="l01154"></a><a class="code" href="classKWinInternal_1_1Client.html#a46">01154</a> <span class="keywordtype">bool</span> <a class="code" href="classKWinInternal_1_1Client.html#a46">Client::isOnCurrentDesktop</a>()<span class="keyword"> const</span>
<a name="l01155"></a>01155 <span class="keyword">    </span>{
<a name="l01156"></a>01156     <span class="keywordflow">return</span> <a class="code" href="classKWinInternal_1_1Client.html#a45">isOnDesktop</a>( <a class="code" href="classKWinInternal_1_1Client.html#a5">workspace</a>()-&gt;currentDesktop());
<a name="l01157"></a>01157     }
<a name="l01158"></a>01158 
<a name="l01159"></a>01159 <span class="comment">// performs activation and/or raising of the window</span>
<a name="l01160"></a><a class="code" href="classKWinInternal_1_1Client.html#a100">01160</a> <span class="keywordtype">void</span> <a class="code" href="classKWinInternal_1_1Client.html#a100">Client::takeActivity</a>( <span class="keywordtype">int</span> flags, <span class="keywordtype">bool</span> handled, <a class="code" href="namespaceKWinInternal.html#a120">allowed_t</a> )
<a name="l01161"></a>01161     {
<a name="l01162"></a>01162     <span class="keywordflow">if</span>( !handled || !Ptakeactivity )
<a name="l01163"></a>01163         {
<a name="l01164"></a>01164         <span class="keywordflow">if</span>( flags &amp; ActivityFocus )
<a name="l01165"></a>01165             <a class="code" href="classKWinInternal_1_1Client.html#a101">takeFocus</a>( Allowed );
<a name="l01166"></a>01166         <span class="keywordflow">if</span>( flags &amp; ActivityRaise )
<a name="l01167"></a>01167             <a class="code" href="classKWinInternal_1_1Client.html#a5">workspace</a>()-&gt;<a class="code" href="classKWinInternal_1_1Workspace.html#a34">raiseClient</a>( <span class="keyword">this</span> );
<a name="l01168"></a>01168         <span class="keywordflow">return</span>;
<a name="l01169"></a>01169         }
<a name="l01170"></a>01170 
<a name="l01171"></a>01171 <span class="preprocessor">#ifndef NDEBUG</span>
<a name="l01172"></a>01172 <span class="preprocessor"></span>    <span class="keyword">static</span> Time previous_activity_timestamp;
<a name="l01173"></a>01173     <span class="keyword">static</span> <a class="code" href="classKWinInternal_1_1Client.html">Client</a>* previous_client;
<a name="l01174"></a>01174     <span class="keywordflow">if</span>( previous_activity_timestamp == qt_x_time &amp;&amp; previous_client != this )
<a name="l01175"></a>01175         {
<a name="l01176"></a>01176         kdWarning( 1212 ) &lt;&lt; <span class="stringliteral">"Repeated use of the same X timestamp for activity"</span> &lt;&lt; endl;
<a name="l01177"></a>01177         kdDebug( 1212 ) &lt;&lt; kdBacktrace() &lt;&lt; endl;
<a name="l01178"></a>01178         }
<a name="l01179"></a>01179     previous_activity_timestamp = qt_x_time;
<a name="l01180"></a>01180     previous_client = <span class="keyword">this</span>;
<a name="l01181"></a>01181 <span class="preprocessor">#endif</span>
<a name="l01182"></a>01182 <span class="preprocessor"></span>    <a class="code" href="classKWinInternal_1_1Client.html#a5">workspace</a>()-&gt;<a class="code" href="classKWinInternal_1_1Workspace.html#a84">sendTakeActivity</a>( <span class="keyword">this</span>, qt_x_time, flags );
<a name="l01183"></a>01183     }
<a name="l01184"></a>01184 
<a name="l01185"></a>01185 <span class="comment">// performs the actual focusing of the window using XSetInputFocus and WM_TAKE_FOCUS</span>
<a name="l01186"></a><a class="code" href="classKWinInternal_1_1Client.html#a101">01186</a> <span class="keywordtype">void</span> <a class="code" href="classKWinInternal_1_1Client.html#a101">Client::takeFocus</a>( <a class="code" href="namespaceKWinInternal.html#a120">allowed_t</a> )
<a name="l01187"></a>01187     {
<a name="l01188"></a>01188 <span class="preprocessor">#ifndef NDEBUG</span>
<a name="l01189"></a>01189 <span class="preprocessor"></span>    <span class="keyword">static</span> Time previous_focus_timestamp;
<a name="l01190"></a>01190     <span class="keyword">static</span> <a class="code" href="classKWinInternal_1_1Client.html">Client</a>* previous_client;
<a name="l01191"></a>01191     <span class="keywordflow">if</span>( previous_focus_timestamp == qt_x_time &amp;&amp; previous_client != this )
<a name="l01192"></a>01192         {
<a name="l01193"></a>01193         kdWarning( 1212 ) &lt;&lt; <span class="stringliteral">"Repeated use of the same X timestamp for focus"</span> &lt;&lt; endl;
<a name="l01194"></a>01194         kdDebug( 1212 ) &lt;&lt; kdBacktrace() &lt;&lt; endl;
<a name="l01195"></a>01195         }
<a name="l01196"></a>01196     previous_focus_timestamp = qt_x_time;
<a name="l01197"></a>01197     previous_client = <span class="keyword">this</span>;
<a name="l01198"></a>01198 <span class="preprocessor">#endif</span>
<a name="l01199"></a>01199 <span class="preprocessor"></span>    <span class="keywordflow">if</span> ( <a class="code" href="classKWinInternal_1_1Client.html#a20">rules</a>()-&gt;checkAcceptFocus( input ))
<a name="l01200"></a>01200         {
<a name="l01201"></a>01201         XSetInputFocus( qt_xdisplay(), <a class="code" href="classKWinInternal_1_1Client.html#a1">window</a>(), RevertToPointerRoot, qt_x_time );
<a name="l01202"></a>01202         }
<a name="l01203"></a>01203     <span class="keywordflow">if</span> ( Ptakefocus )
<a name="l01204"></a>01204         sendClientMessage(<a class="code" href="classKWinInternal_1_1Client.html#a1">window</a>(), <a class="code" href="namespaceKWinInternal.html#a0">atoms</a>-&gt;<a class="code" href="classKWinInternal_1_1Atoms.html#o1">wm_protocols</a>, <a class="code" href="namespaceKWinInternal.html#a0">atoms</a>-&gt;<a class="code" href="classKWinInternal_1_1Atoms.html#o3">wm_take_focus</a>);
<a name="l01205"></a>01205     <a class="code" href="classKWinInternal_1_1Client.html#a5">workspace</a>()-&gt;<a class="code" href="classKWinInternal_1_1Workspace.html#a23">setShouldGetFocus</a>( <span class="keyword">this</span> );
<a name="l01206"></a>01206     }
<a name="l01207"></a>01207 
<a name="l01215"></a><a class="code" href="classKWinInternal_1_1Client.html#a120">01215</a> <span class="keywordtype">bool</span> <a class="code" href="classKWinInternal_1_1Client.html#a120">Client::providesContextHelp</a>()<span class="keyword"> const</span>
<a name="l01216"></a>01216 <span class="keyword">    </span>{
<a name="l01217"></a>01217     <span class="keywordflow">return</span> Pcontexthelp;
<a name="l01218"></a>01218     }
<a name="l01219"></a>01219 
<a name="l01220"></a>01220 
<a name="l01227"></a><a class="code" href="classKWinInternal_1_1Client.html#a157">01227</a> <span class="keywordtype">void</span> <a class="code" href="classKWinInternal_1_1Client.html#a157">Client::showContextHelp</a>()
<a name="l01228"></a>01228     {
<a name="l01229"></a>01229     <span class="keywordflow">if</span> ( Pcontexthelp ) 
<a name="l01230"></a>01230         {
<a name="l01231"></a>01231         sendClientMessage(<a class="code" href="classKWinInternal_1_1Client.html#a1">window</a>(), <a class="code" href="namespaceKWinInternal.html#a0">atoms</a>-&gt;<a class="code" href="classKWinInternal_1_1Atoms.html#o1">wm_protocols</a>, <a class="code" href="namespaceKWinInternal.html#a0">atoms</a>-&gt;<a class="code" href="classKWinInternal_1_1Atoms.html#o7">net_wm_context_help</a>);
<a name="l01232"></a>01232         QWhatsThis::enterWhatsThisMode(); <span class="comment">// SELI?</span>
<a name="l01233"></a>01233         }
<a name="l01234"></a>01234     }
<a name="l01235"></a>01235 
<a name="l01236"></a>01236 
<a name="l01241"></a>01241 <span class="keywordtype">void</span> Client::fetchName()
<a name="l01242"></a>01242     {
<a name="l01243"></a>01243     setCaption( readName());
<a name="l01244"></a>01244     }
<a name="l01245"></a>01245 
<a name="l01246"></a>01246 QString Client::readName()<span class="keyword"> const</span>
<a name="l01247"></a>01247 <span class="keyword">    </span>{
<a name="l01248"></a>01248     <span class="keywordflow">if</span> ( info-&gt;name() &amp;&amp; info-&gt;name()[ 0 ] != <span class="charliteral">'\0'</span> ) 
<a name="l01249"></a>01249         <span class="keywordflow">return</span> QString::fromUtf8( info-&gt;name() );
<a name="l01250"></a>01250     <span class="keywordflow">else</span> 
<a name="l01251"></a>01251         <span class="keywordflow">return</span> KWin::readNameProperty( <a class="code" href="classKWinInternal_1_1Client.html#a1">window</a>(), XA_WM_NAME );
<a name="l01252"></a>01252     }
<a name="l01253"></a>01253     
<a name="l01254"></a>01254 KWIN_COMPARE_PREDICATE( FetchNameInternalPredicate, <span class="keyword">const</span> Client*, (!cl-&gt;isSpecialWindow() || cl-&gt;isToolbar()) &amp;&amp; cl != value &amp;&amp; cl-&gt;caption() == value-&gt;caption());
<a name="l01255"></a>01255 
<a name="l01256"></a>01256 <span class="keywordtype">void</span> Client::setCaption( <span class="keyword">const</span> QString&amp; s, <span class="keywordtype">bool</span> force )
<a name="l01257"></a>01257     {
<a name="l01258"></a>01258     <span class="keywordflow">if</span> ( s != cap_normal || force ) 
<a name="l01259"></a>01259         {
<a name="l01260"></a>01260         <span class="keywordtype">bool</span> reset_name = force;
<a name="l01261"></a>01261         <span class="keywordflow">for</span>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0;
<a name="l01262"></a>01262              i &lt; s.length();
<a name="l01263"></a>01263              ++i )
<a name="l01264"></a>01264             <span class="keywordflow">if</span>( !s[ i ].isPrint())
<a name="l01265"></a>01265                 s[ i ] = <span class="charliteral">' '</span>;
<a name="l01266"></a>01266         cap_normal = s;
<a name="l01267"></a>01267         <span class="keywordtype">bool</span> was_suffix = ( !cap_suffix.isEmpty());
<a name="l01268"></a>01268         QString machine_suffix;
<a name="l01269"></a>01269         <span class="keywordflow">if</span>( <a class="code" href="classKWinInternal_1_1Client.html#a129">wmClientMachine</a>( <span class="keyword">false</span> ) != <span class="stringliteral">"localhost"</span> &amp;&amp; !<a class="code" href="namespaceKWinInternal.html#a107">isLocalMachine</a>( <a class="code" href="classKWinInternal_1_1Client.html#a129">wmClientMachine</a>( <span class="keyword">false</span> )))
<a name="l01270"></a>01270             machine_suffix = <span class="stringliteral">" &lt;@"</span> + <a class="code" href="classKWinInternal_1_1Client.html#a129">wmClientMachine</a>( <span class="keyword">true</span> ) + <span class="stringliteral">"&gt;"</span>;
<a name="l01271"></a>01271         QString shortcut_suffix = !<a class="code" href="classKWinInternal_1_1Client.html#a121">shortcut</a>().isNull() ? ( <span class="stringliteral">" {"</span> + <a class="code" href="classKWinInternal_1_1Client.html#a121">shortcut</a>().toString() + <span class="stringliteral">"}"</span> ) : <span class="stringliteral">""</span>;
<a name="l01272"></a>01272         cap_suffix = machine_suffix + shortcut_suffix;
<a name="l01273"></a>01273         <span class="keywordflow">if</span> ( ( !<a class="code" href="classKWinInternal_1_1Client.html#a97">isSpecialWindow</a>() || <a class="code" href="classKWinInternal_1_1Client.html#a89">isToolbar</a>()) &amp;&amp; <a class="code" href="classKWinInternal_1_1Client.html#a5">workspace</a>()-&gt;findClient( <a class="code" href="classKWinInternal_1_1Client.html#n1">FetchNameInternalPredicate</a>( <span class="keyword">this</span> ))) 
<a name="l01274"></a>01274             {
<a name="l01275"></a>01275             <span class="keywordtype">int</span> i = 2;
<a name="l01276"></a>01276             <span class="keywordflow">do</span> 
<a name="l01277"></a>01277                 {
<a name="l01278"></a>01278                 cap_suffix = machine_suffix + <span class="stringliteral">" &lt;"</span> + QString::number(i) + <span class="stringliteral">"&gt;"</span> + shortcut_suffix;
<a name="l01279"></a>01279                 i++;
<a name="l01280"></a>01280                 } <span class="keywordflow">while</span> ( <a class="code" href="classKWinInternal_1_1Client.html#a5">workspace</a>()-&gt;findClient( <a class="code" href="classKWinInternal_1_1Client.html#n1">FetchNameInternalPredicate</a>( <span class="keyword">this</span> )));
<a name="l01281"></a>01281             info-&gt;setVisibleName( <a class="code" href="classKWinInternal_1_1Client.html#a136">caption</a>().utf8() );
<a name="l01282"></a>01282             reset_name = <span class="keyword">false</span>;
<a name="l01283"></a>01283             }
<a name="l01284"></a>01284         <span class="keywordflow">if</span>(( was_suffix &amp;&amp; cap_suffix.isEmpty()
<a name="l01285"></a>01285             || reset_name )) <span class="comment">// if it was new window, it may have old value still set, if the window is reused</span>
<a name="l01286"></a>01286             {
<a name="l01287"></a>01287             info-&gt;setVisibleName( <span class="stringliteral">""</span> ); <span class="comment">// remove</span>
<a name="l01288"></a>01288             info-&gt;setVisibleIconName( <span class="stringliteral">""</span> ); <span class="comment">// remove</span>
<a name="l01289"></a>01289             }
<a name="l01290"></a>01290         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( !cap_suffix.isEmpty() &amp;&amp; !cap_iconic.isEmpty()) <span class="comment">// keep the same suffix in iconic name if it's set</span>
<a name="l01291"></a>01291             info-&gt;setVisibleIconName( ( cap_iconic + cap_suffix ).utf8() );
<a name="l01292"></a>01292 
<a name="l01293"></a>01293         <span class="keywordflow">if</span>( isManaged() &amp;&amp; decoration != NULL )
<a name="l01294"></a>01294                 decoration-&gt;<a class="code" href="classKDecoration.html#a41">captionChange</a>();
<a name="l01295"></a>01295         }
<a name="l01296"></a>01296     }
<a name="l01297"></a>01297 
<a name="l01298"></a><a class="code" href="classKWinInternal_1_1Client.html#a137">01298</a> <span class="keywordtype">void</span> <a class="code" href="classKWinInternal_1_1Client.html#a137">Client::updateCaption</a>()
<a name="l01299"></a>01299     {
<a name="l01300"></a>01300     setCaption( cap_normal, <span class="keyword">true</span> );
<a name="l01301"></a>01301     }
<a name="l01302"></a>01302 
<a name="l01303"></a>01303 <span class="keywordtype">void</span> Client::fetchIconicName()
<a name="l01304"></a>01304     {
<a name="l01305"></a>01305     QString s;
<a name="l01306"></a>01306     <span class="keywordflow">if</span> ( info-&gt;iconName() &amp;&amp; info-&gt;iconName()[ 0 ] != <span class="charliteral">'\0'</span> ) 
<a name="l01307"></a>01307         s = QString::fromUtf8( info-&gt;iconName() );
<a name="l01308"></a>01308     <span class="keywordflow">else</span> 
<a name="l01309"></a>01309         s = KWin::readNameProperty( <a class="code" href="classKWinInternal_1_1Client.html#a1">window</a>(), XA_WM_ICON_NAME );
<a name="l01310"></a>01310     <span class="keywordflow">if</span> ( s != cap_iconic ) 
<a name="l01311"></a>01311         {
<a name="l01312"></a>01312     <span class="keywordtype">bool</span> was_set = !cap_iconic.isEmpty();
<a name="l01313"></a>01313         cap_iconic = s;
<a name="l01314"></a>01314         <span class="keywordflow">if</span>( !cap_suffix.isEmpty())
<a name="l01315"></a>01315         {
<a name="l01316"></a>01316         <span class="keywordflow">if</span>( !cap_iconic.isEmpty()) <span class="comment">// keep the same suffix in iconic name if it's set</span>
<a name="l01317"></a>01317             info-&gt;setVisibleIconName( ( s + cap_suffix ).utf8() );
<a name="l01318"></a>01318         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( was_set )
<a name="l01319"></a>01319         info-&gt;setVisibleIconName( <span class="stringliteral">""</span> ); <span class="comment">//remove</span>
<a name="l01320"></a>01320         }
<a name="l01321"></a>01321         }
<a name="l01322"></a>01322     }
<a name="l01323"></a>01323 
<a name="l01326"></a><a class="code" href="classKWinInternal_1_1Client.html#a136">01326</a> QString <a class="code" href="classKWinInternal_1_1Client.html#a136">Client::caption</a>( <span class="keywordtype">bool</span> full )<span class="keyword"> const</span>
<a name="l01327"></a>01327 <span class="keyword">    </span>{
<a name="l01328"></a>01328     <span class="keywordflow">return</span> full ? cap_normal + cap_suffix : cap_normal;
<a name="l01329"></a>01329     }
<a name="l01330"></a>01330 
<a name="l01331"></a>01331 <span class="keywordtype">void</span> Client::getWMHints()
<a name="l01332"></a>01332     {
<a name="l01333"></a>01333     XWMHints *hints = XGetWMHints(qt_xdisplay(), <a class="code" href="classKWinInternal_1_1Client.html#a1">window</a>() );
<a name="l01334"></a>01334     input = <span class="keyword">true</span>;
<a name="l01335"></a>01335     window_group = None;
<a name="l01336"></a>01336     urgency = <span class="keyword">false</span>;
<a name="l01337"></a>01337     <span class="keywordflow">if</span> ( hints )
<a name="l01338"></a>01338         {
<a name="l01339"></a>01339         <span class="keywordflow">if</span>( hints-&gt;flags &amp; InputHint )
<a name="l01340"></a>01340             input = hints-&gt;input;
<a name="l01341"></a>01341         <span class="keywordflow">if</span>( hints-&gt;flags &amp; WindowGroupHint )
<a name="l01342"></a>01342             window_group = hints-&gt;window_group;
<a name="l01343"></a>01343         urgency = ( hints-&gt;flags &amp; UrgencyHint ) ? <span class="keyword">true</span> : <span class="keyword">false</span>; <span class="comment">// true/false needed, it's uint bitfield</span>
<a name="l01344"></a>01344         XFree( (<span class="keywordtype">char</span>*)hints );
<a name="l01345"></a>01345         }
<a name="l01346"></a>01346     <a class="code" href="classKWinInternal_1_1Client.html#a18">checkGroup</a>();
<a name="l01347"></a>01347     updateUrgency();
<a name="l01348"></a>01348     updateAllowedActions(); <span class="comment">// group affects isMinimizable()</span>
<a name="l01349"></a>01349     }
<a name="l01350"></a>01350 
<a name="l01351"></a>01351 <span class="keywordtype">void</span> Client::getMotifHints()
<a name="l01352"></a>01352     {
<a name="l01353"></a>01353     <span class="keywordtype">bool</span> mnoborder, mresize, mmove, mminimize, mmaximize, mclose;
<a name="l01354"></a>01354     <a class="code" href="classKWinInternal_1_1Motif.html#e0">Motif::readFlags</a>( client, mnoborder, mresize, mmove, mminimize, mmaximize, mclose );
<a name="l01355"></a>01355     motif_noborder = mnoborder;
<a name="l01356"></a>01356     <span class="keywordflow">if</span>( !<a class="code" href="classKWinInternal_1_1Client.html#a85">hasNETSupport</a>()) <span class="comment">// NETWM apps should set type and size constraints</span>
<a name="l01357"></a>01357         {
<a name="l01358"></a>01358         motif_may_resize = mresize; <span class="comment">// this should be set using minsize==maxsize, but oh well</span>
<a name="l01359"></a>01359         motif_may_move = mmove;
<a name="l01360"></a>01360         }
<a name="l01361"></a>01361     <span class="comment">// mminimize; - ignore, bogus - e.g. shading or sending to another desktop is "minimizing" too</span>
<a name="l01362"></a>01362     <span class="comment">// mmaximize; - ignore, bogus - maximizing is basically just resizing</span>
<a name="l01363"></a>01363     motif_may_close = mclose; <span class="comment">// motif apps like to crash when they set this hint and WM closes them anyway</span>
<a name="l01364"></a>01364     <span class="keywordflow">if</span>( isManaged())
<a name="l01365"></a>01365         <a class="code" href="classKWinInternal_1_1Client.html#a105">updateDecoration</a>( <span class="keyword">true</span> ); <span class="comment">// check if noborder state has changed</span>
<a name="l01366"></a>01366     }
<a name="l01367"></a>01367 
<a name="l01368"></a><a class="code" href="classKWinInternal_1_1Client.html#e8">01368</a> <span class="keywordtype">void</span> Client::readIcons( Window win, QPixmap* icon, QPixmap* miniicon )
<a name="l01369"></a>01369     {    
<a name="l01370"></a>01370     <span class="comment">// get the icons, allow scaling</span>
<a name="l01371"></a>01371     <span class="keywordflow">if</span>( icon != NULL )
<a name="l01372"></a>01372         *icon = KWin::icon( win, 32, 32, TRUE, KWin::NETWM | KWin::WMHints );
<a name="l01373"></a>01373     <span class="keywordflow">if</span>( miniicon != NULL )
<a name="l01374"></a>01374         <span class="keywordflow">if</span>( icon == NULL || !icon-&gt;isNull())
<a name="l01375"></a>01375             *miniicon = KWin::icon( win, 16, 16, TRUE, KWin::NETWM | KWin::WMHints );
<a name="l01376"></a>01376         <span class="keywordflow">else</span>
<a name="l01377"></a>01377             *miniicon = QPixmap();
<a name="l01378"></a>01378     }
<a name="l01379"></a>01379 
<a name="l01380"></a>01380 <span class="keywordtype">void</span> Client::getIcons()
<a name="l01381"></a>01381     {
<a name="l01382"></a>01382     <span class="comment">// first read icons from the window itself</span>
<a name="l01383"></a>01383     readIcons( <a class="code" href="classKWinInternal_1_1Client.html#a1">window</a>(), &amp;icon_pix, &amp;miniicon_pix );
<a name="l01384"></a>01384     <span class="keywordflow">if</span>( icon_pix.isNull())
<a name="l01385"></a>01385         { <span class="comment">// then try window group</span>
<a name="l01386"></a>01386         icon_pix = <a class="code" href="classKWinInternal_1_1Client.html#a16">group</a>()-&gt;<a class="code" href="classKWinInternal_1_1Group.html#a6">icon</a>();
<a name="l01387"></a>01387         miniicon_pix = <a class="code" href="classKWinInternal_1_1Client.html#a16">group</a>()-&gt;<a class="code" href="classKWinInternal_1_1Group.html#a7">miniIcon</a>();
<a name="l01388"></a>01388         }
<a name="l01389"></a>01389     <span class="keywordflow">if</span>( icon_pix.isNull() &amp;&amp; <a class="code" href="classKWinInternal_1_1Client.html#a8">isTransient</a>())
<a name="l01390"></a>01390         { <span class="comment">// then mainclients</span>
<a name="l01391"></a>01391         <a class="code" href="namespaceKWinInternal.html#a24">ClientList</a> mainclients = <a class="code" href="classKWinInternal_1_1Client.html#a11">mainClients</a>();
<a name="l01392"></a>01392         <span class="keywordflow">for</span>( ClientList::ConstIterator it = mainclients.begin();
<a name="l01393"></a>01393              it != mainclients.end() &amp;&amp; icon_pix.isNull();
<a name="l01394"></a>01394              ++it )
<a name="l01395"></a>01395             {
<a name="l01396"></a>01396             icon_pix = (*it)-&gt;icon();
<a name="l01397"></a>01397             miniicon_pix = (*it)-&gt;miniIcon();
<a name="l01398"></a>01398             }
<a name="l01399"></a>01399         }
<a name="l01400"></a>01400     <span class="keywordflow">if</span>( icon_pix.isNull())
<a name="l01401"></a>01401         { <span class="comment">// and if nothing else, load icon from classhint or xapp icon</span>
<a name="l01402"></a>01402         icon_pix = KWin::icon( <a class="code" href="classKWinInternal_1_1Client.html#a1">window</a>(), 32, 32, TRUE, KWin::ClassHint | KWin::XApp );
<a name="l01403"></a>01403         miniicon_pix = KWin::icon( <a class="code" href="classKWinInternal_1_1Client.html#a1">window</a>(), 16, 16, TRUE, KWin::ClassHint | KWin::XApp );
<a name="l01404"></a>01404         }
<a name="l01405"></a>01405     <span class="keywordflow">if</span>( isManaged() &amp;&amp; decoration != NULL )
<a name="l01406"></a>01406         decoration-&gt;<a class="code" href="classKDecoration.html#a42">iconChange</a>();
<a name="l01407"></a>01407     }
<a name="l01408"></a>01408 
<a name="l01409"></a>01409 <span class="keywordtype">void</span> Client::getWindowProtocols()
<a name="l01410"></a>01410     {
<a name="l01411"></a>01411     Atom *p;
<a name="l01412"></a>01412     <span class="keywordtype">int</span> i,n;
<a name="l01413"></a>01413 
<a name="l01414"></a>01414     Pdeletewindow = 0;
<a name="l01415"></a>01415     Ptakefocus = 0;
<a name="l01416"></a>01416     Ptakeactivity = 0;
<a name="l01417"></a>01417     Pcontexthelp = 0;
<a name="l01418"></a>01418     Pping = 0;
<a name="l01419"></a>01419 
<a name="l01420"></a>01420     <span class="keywordflow">if</span> (XGetWMProtocols(qt_xdisplay(), <a class="code" href="classKWinInternal_1_1Client.html#a1">window</a>(), &amp;p, &amp;n))
<a name="l01421"></a>01421         {
<a name="l01422"></a>01422         <span class="keywordflow">for</span> (i = 0; i &lt; n; i++)
<a name="l01423"></a>01423             <span class="keywordflow">if</span> (p[i] == <a class="code" href="namespaceKWinInternal.html#a0">atoms</a>-&gt;wm_delete_window)
<a name="l01424"></a>01424                 Pdeletewindow = 1;
<a name="l01425"></a>01425             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p[i] == <a class="code" href="namespaceKWinInternal.html#a0">atoms</a>-&gt;wm_take_focus)
<a name="l01426"></a>01426                 Ptakefocus = 1;
<a name="l01427"></a>01427             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p[i] == <a class="code" href="namespaceKWinInternal.html#a0">atoms</a>-&gt;net_wm_take_activity)
<a name="l01428"></a>01428                 Ptakeactivity = 1;
<a name="l01429"></a>01429             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p[i] == <a class="code" href="namespaceKWinInternal.html#a0">atoms</a>-&gt;net_wm_context_help)
<a name="l01430"></a>01430                 Pcontexthelp = 1;
<a name="l01431"></a>01431             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p[i] == <a class="code" href="namespaceKWinInternal.html#a0">atoms</a>-&gt;net_wm_ping)
<a name="l01432"></a>01432                 Pping = 1;
<a name="l01433"></a>01433         <span class="keywordflow">if</span> (n&gt;0)
<a name="l01434"></a>01434             XFree(p);
<a name="l01435"></a>01435         }
<a name="l01436"></a>01436     }
<a name="l01437"></a>01437 
<a name="l01438"></a><a class="code" href="namespaceKWinInternal.html#a60">01438</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="namespaceKWinInternal.html#a60">nullErrorHandler</a>(Display *, XErrorEvent *)
<a name="l01439"></a>01439     {
<a name="l01440"></a>01440     <span class="keywordflow">return</span> 0;
<a name="l01441"></a>01441     }
<a name="l01442"></a>01442 
<a name="l01446"></a><a class="code" href="classKWinInternal_1_1Client.html#e0">01446</a> QCString <a class="code" href="classKWinInternal_1_1Client.html#e0">Client::staticWindowRole</a>(WId w)
<a name="l01447"></a>01447     {
<a name="l01448"></a>01448     <span class="keywordflow">return</span> <a class="code" href="namespaceKWinInternal.html#a102">getStringProperty</a>(w, qt_window_role).lower();
<a name="l01449"></a>01449     }
<a name="l01450"></a>01450 
<a name="l01454"></a><a class="code" href="classKWinInternal_1_1Client.html#e1">01454</a> QCString <a class="code" href="classKWinInternal_1_1Client.html#e1">Client::staticSessionId</a>(WId w)
<a name="l01455"></a>01455     {
<a name="l01456"></a>01456     <span class="keywordflow">return</span> <a class="code" href="namespaceKWinInternal.html#a102">getStringProperty</a>(w, qt_sm_client_id);
<a name="l01457"></a>01457     }
<a name="l01458"></a>01458 
<a name="l01462"></a><a class="code" href="classKWinInternal_1_1Client.html#e2">01462</a> QCString <a class="code" href="classKWinInternal_1_1Client.html#e2">Client::staticWmCommand</a>(WId w)
<a name="l01463"></a>01463     {
<a name="l01464"></a>01464     <span class="keywordflow">return</span> <a class="code" href="namespaceKWinInternal.html#a102">getStringProperty</a>(w, XA_WM_COMMAND, <span class="charliteral">' '</span>);
<a name="l01465"></a>01465     }
<a name="l01466"></a>01466 
<a name="l01470"></a><a class="code" href="classKWinInternal_1_1Client.html#e4">01470</a> Window <a class="code" href="classKWinInternal_1_1Client.html#e4">Client::staticWmClientLeader</a>(WId w)
<a name="l01471"></a>01471     {
<a name="l01472"></a>01472     Atom type;
<a name="l01473"></a>01473     <span class="keywordtype">int</span> format, status;
<a name="l01474"></a>01474     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> nitems = 0;
<a name="l01475"></a>01475     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> extra = 0;
<a name="l01476"></a>01476     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *data = 0;
<a name="l01477"></a>01477     Window result = w;
<a name="l01478"></a>01478     XErrorHandler oldHandler = XSetErrorHandler(<a class="code" href="namespaceKWinInternal.html#a60">nullErrorHandler</a>);
<a name="l01479"></a>01479     status = XGetWindowProperty( qt_xdisplay(), w, <a class="code" href="namespaceKWinInternal.html#a0">atoms</a>-&gt;<a class="code" href="classKWinInternal_1_1Atoms.html#o5">wm_client_leader</a>, 0, 10000,
<a name="l01480"></a>01480                                  FALSE, XA_WINDOW, &amp;type, &amp;format,
<a name="l01481"></a>01481                                  &amp;nitems, &amp;extra, &amp;data );
<a name="l01482"></a>01482     XSetErrorHandler(oldHandler);
<a name="l01483"></a>01483     <span class="keywordflow">if</span> (status  == Success ) 
<a name="l01484"></a>01484         {
<a name="l01485"></a>01485         <span class="keywordflow">if</span> (data &amp;&amp; nitems &gt; 0)
<a name="l01486"></a>01486             result = *((Window*) data);
<a name="l01487"></a>01487         XFree(data);
<a name="l01488"></a>01488         }
<a name="l01489"></a>01489     <span class="keywordflow">return</span> result;
<a name="l01490"></a>01490     }
<a name="l01491"></a>01491 
<a name="l01492"></a>01492 
<a name="l01493"></a>01493 <span class="keywordtype">void</span> Client::getWmClientLeader()
<a name="l01494"></a>01494     {
<a name="l01495"></a>01495     wmClientLeaderWin = <a class="code" href="classKWinInternal_1_1Client.html#e4">staticWmClientLeader</a>(<a class="code" href="classKWinInternal_1_1Client.html#a1">window</a>());
<a name="l01496"></a>01496     }
<a name="l01497"></a>01497 
<a name="l01502"></a><a class="code" href="classKWinInternal_1_1Client.html#a125">01502</a> QCString <a class="code" href="classKWinInternal_1_1Client.html#a125">Client::sessionId</a>()
<a name="l01503"></a>01503     {
<a name="l01504"></a>01504     QCString result = <a class="code" href="classKWinInternal_1_1Client.html#e1">staticSessionId</a>(<a class="code" href="classKWinInternal_1_1Client.html#a1">window</a>());
<a name="l01505"></a>01505     <span class="keywordflow">if</span> (result.isEmpty() &amp;&amp; wmClientLeaderWin &amp;&amp; wmClientLeaderWin!=<a class="code" href="classKWinInternal_1_1Client.html#a1">window</a>())
<a name="l01506"></a>01506         result = <a class="code" href="classKWinInternal_1_1Client.html#e1">staticSessionId</a>(wmClientLeaderWin);
<a name="l01507"></a>01507     <span class="keywordflow">return</span> result;
<a name="l01508"></a>01508     }
<a name="l01509"></a>01509 
<a name="l01514"></a><a class="code" href="classKWinInternal_1_1Client.html#a128">01514</a> QCString <a class="code" href="classKWinInternal_1_1Client.html#a128">Client::wmCommand</a>()
<a name="l01515"></a>01515     {
<a name="l01516"></a>01516     QCString result = <a class="code" href="classKWinInternal_1_1Client.html#e2">staticWmCommand</a>(<a class="code" href="classKWinInternal_1_1Client.html#a1">window</a>());
<a name="l01517"></a>01517     <span class="keywordflow">if</span> (result.isEmpty() &amp;&amp; wmClientLeaderWin &amp;&amp; wmClientLeaderWin!=<a class="code" href="classKWinInternal_1_1Client.html#a1">window</a>())
<a name="l01518"></a>01518         result = <a class="code" href="classKWinInternal_1_1Client.html#e2">staticWmCommand</a>(wmClientLeaderWin);
<a name="l01519"></a>01519     <span class="keywordflow">return</span> result;
<a name="l01520"></a>01520     }
<a name="l01521"></a>01521 
<a name="l01522"></a>01522 <span class="keywordtype">void</span> Client::getWmClientMachine()
<a name="l01523"></a>01523     {
<a name="l01524"></a>01524     client_machine = <a class="code" href="namespaceKWinInternal.html#a102">getStringProperty</a>(<a class="code" href="classKWinInternal_1_1Client.html#a1">window</a>(), XA_WM_CLIENT_MACHINE);
<a name="l01525"></a>01525     <span class="keywordflow">if</span>( client_machine.isEmpty() &amp;&amp; wmClientLeaderWin &amp;&amp; wmClientLeaderWin!=<a class="code" href="classKWinInternal_1_1Client.html#a1">window</a>())
<a name="l01526"></a>01526         client_machine = <a class="code" href="namespaceKWinInternal.html#a102">getStringProperty</a>(wmClientLeaderWin, XA_WM_CLIENT_MACHINE);
<a name="l01527"></a>01527     <span class="keywordflow">if</span>( client_machine.isEmpty())
<a name="l01528"></a>01528         client_machine = <span class="stringliteral">"localhost"</span>;
<a name="l01529"></a>01529     }
<a name="l01530"></a>01530 
<a name="l01535"></a><a class="code" href="classKWinInternal_1_1Client.html#a129">01535</a> QCString <a class="code" href="classKWinInternal_1_1Client.html#a129">Client::wmClientMachine</a>( <span class="keywordtype">bool</span> use_localhost )<span class="keyword"> const</span>
<a name="l01536"></a>01536 <span class="keyword">    </span>{
<a name="l01537"></a>01537     QCString result = client_machine;
<a name="l01538"></a>01538     <span class="keywordflow">if</span>( use_localhost )
<a name="l01539"></a>01539         { <span class="comment">// special name for the local machine (localhost)</span>
<a name="l01540"></a>01540         <span class="keywordflow">if</span>( result != <span class="stringliteral">"localhost"</span> &amp;&amp; <a class="code" href="namespaceKWinInternal.html#a107">isLocalMachine</a>( result ))
<a name="l01541"></a>01541             result = <span class="stringliteral">"localhost"</span>;
<a name="l01542"></a>01542         }
<a name="l01543"></a>01543     <span class="keywordflow">return</span> result;
<a name="l01544"></a>01544     }
<a name="l01545"></a>01545 
<a name="l01550"></a><a class="code" href="classKWinInternal_1_1Client.html#a130">01550</a> Window <a class="code" href="classKWinInternal_1_1Client.html#a130">Client::wmClientLeader</a>()<span class="keyword"> const</span>
<a name="l01551"></a>01551 <span class="keyword">    </span>{
<a name="l01552"></a>01552     <span class="keywordflow">if</span> (wmClientLeaderWin)
<a name="l01553"></a>01553         <span class="keywordflow">return</span> wmClientLeaderWin;
<a name="l01554"></a>01554     <span class="keywordflow">return</span> <a class="code" href="classKWinInternal_1_1Client.html#a1">window</a>();
<a name="l01555"></a>01555     }
<a name="l01556"></a>01556 
<a name="l01557"></a><a class="code" href="classKWinInternal_1_1Client.html#a83">01557</a> <span class="keywordtype">bool</span> <a class="code" href="classKWinInternal_1_1Client.html#a83">Client::wantsTabFocus</a>()<span class="keyword"> const</span>
<a name="l01558"></a>01558 <span class="keyword">    </span>{
<a name="l01559"></a>01559     <span class="keywordflow">return</span> ( <a class="code" href="classKWinInternal_1_1Client.html#a92">isNormalWindow</a>() || <a class="code" href="classKWinInternal_1_1Client.html#a93">isDialog</a>() || <a class="code" href="classKWinInternal_1_1Client.html#a96">isOverride</a>()) &amp;&amp; <a class="code" href="classKWinInternal_1_1Client.html#a84">wantsInput</a>() &amp;&amp; !skip_taskbar;
<a name="l01560"></a>01560     }
<a name="l01561"></a>01561 
<a name="l01562"></a>01562 
<a name="l01563"></a><a class="code" href="classKWinInternal_1_1Client.html#a84">01563</a> <span class="keywordtype">bool</span> <a class="code" href="classKWinInternal_1_1Client.html#a84">Client::wantsInput</a>()<span class="keyword"> const</span>
<a name="l01564"></a>01564 <span class="keyword">    </span>{
<a name="l01565"></a>01565     <span class="keywordflow">return</span> <a class="code" href="classKWinInternal_1_1Client.html#a20">rules</a>()-&gt;<a class="code" href="classKWinInternal_1_1WindowRules.html#a25">checkAcceptFocus</a>( input || Ptakefocus );
<a name="l01566"></a>01566     }
<a name="l01567"></a>01567 
<a name="l01568"></a><a class="code" href="classKWinInternal_1_1Client.html#a87">01568</a> <span class="keywordtype">bool</span> <a class="code" href="classKWinInternal_1_1Client.html#a87">Client::isDesktop</a>()<span class="keyword"> const</span>
<a name="l01569"></a>01569 <span class="keyword">    </span>{
<a name="l01570"></a>01570     <span class="keywordflow">return</span> <a class="code" href="classKWinInternal_1_1Client.html#a19">windowType</a>() == NET::Desktop;
<a name="l01571"></a>01571     }
<a name="l01572"></a>01572 
<a name="l01573"></a><a class="code" href="classKWinInternal_1_1Client.html#a88">01573</a> <span class="keywordtype">bool</span> <a class="code" href="classKWinInternal_1_1Client.html#a88">Client::isDock</a>()<span class="keyword"> const</span>
<a name="l01574"></a>01574 <span class="keyword">    </span>{
<a name="l01575"></a>01575     <span class="keywordflow">return</span> <a class="code" href="classKWinInternal_1_1Client.html#a19">windowType</a>() == NET::Dock;
<a name="l01576"></a>01576     }
<a name="l01577"></a>01577 
<a name="l01578"></a><a class="code" href="classKWinInternal_1_1Client.html#a90">01578</a> <span class="keywordtype">bool</span> <a class="code" href="classKWinInternal_1_1Client.html#a90">Client::isTopMenu</a>()<span class="keyword"> const</span>
<a name="l01579"></a>01579 <span class="keyword">    </span>{
<a name="l01580"></a>01580     <span class="keywordflow">return</span> <a class="code" href="classKWinInternal_1_1Client.html#a19">windowType</a>() == NET::TopMenu;
<a name="l01581"></a>01581     }
<a name="l01582"></a>01582 
<a name="l01583"></a>01583 
<a name="l01584"></a><a class="code" href="classKWinInternal_1_1Client.html#a91">01584</a> <span class="keywordtype">bool</span> <a class="code" href="classKWinInternal_1_1Client.html#a91">Client::isMenu</a>()<span class="keyword"> const</span>
<a name="l01585"></a>01585 <span class="keyword">    </span>{
<a name="l01586"></a>01586     <span class="keywordflow">return</span> <a class="code" href="classKWinInternal_1_1Client.html#a19">windowType</a>() == NET::Menu &amp;&amp; !<a class="code" href="classKWinInternal_1_1Client.html#a90">isTopMenu</a>(); <span class="comment">// because of backwards comp.</span>
<a name="l01587"></a>01587     }
<a name="l01588"></a>01588 
<a name="l01589"></a><a class="code" href="classKWinInternal_1_1Client.html#a89">01589</a> <span class="keywordtype">bool</span> <a class="code" href="classKWinInternal_1_1Client.html#a89">Client::isToolbar</a>()<span class="keyword"> const</span>
<a name="l01590"></a>01590 <span class="keyword">    </span>{
<a name="l01591"></a>01591     <span class="keywordflow">return</span> <a class="code" href="classKWinInternal_1_1Client.html#a19">windowType</a>() == NET::Toolbar;
<a name="l01592"></a>01592     }
<a name="l01593"></a>01593 
<a name="l01594"></a><a class="code" href="classKWinInternal_1_1Client.html#a96">01594</a> <span class="keywordtype">bool</span> <a class="code" href="classKWinInternal_1_1Client.html#a96">Client::isOverride</a>()<span class="keyword"> const</span>
<a name="l01595"></a>01595 <span class="keyword">    </span>{
<a name="l01596"></a>01596     <span class="keywordflow">return</span> <a class="code" href="classKWinInternal_1_1Client.html#a19">windowType</a>() == NET::Override;
<a name="l01597"></a>01597     }
<a name="l01598"></a>01598 
<a name="l01599"></a><a class="code" href="classKWinInternal_1_1Client.html#a94">01599</a> <span class="keywordtype">bool</span> <a class="code" href="classKWinInternal_1_1Client.html#a94">Client::isSplash</a>()<span class="keyword"> const</span>
<a name="l01600"></a>01600 <span class="keyword">    </span>{
<a name="l01601"></a>01601     <span class="keywordflow">return</span> <a class="code" href="classKWinInternal_1_1Client.html#a19">windowType</a>() == NET::Splash;
<a name="l01602"></a>01602     }
<a name="l01603"></a>01603 
<a name="l01604"></a><a class="code" href="classKWinInternal_1_1Client.html#a95">01604</a> <span class="keywordtype">bool</span> <a class="code" href="classKWinInternal_1_1Client.html#a95">Client::isUtility</a>()<span class="keyword"> const</span>
<a name="l01605"></a>01605 <span class="keyword">    </span>{
<a name="l01606"></a>01606     <span class="keywordflow">return</span> <a class="code" href="classKWinInternal_1_1Client.html#a19">windowType</a>() == NET::Utility;
<a name="l01607"></a>01607     }
<a name="l01608"></a>01608 
<a name="l01609"></a><a class="code" href="classKWinInternal_1_1Client.html#a93">01609</a> <span class="keywordtype">bool</span> <a class="code" href="classKWinInternal_1_1Client.html#a93">Client::isDialog</a>()<span class="keyword"> const</span>
<a name="l01610"></a>01610 <span class="keyword">    </span>{
<a name="l01611"></a>01611     <span class="keywordflow">return</span> <a class="code" href="classKWinInternal_1_1Client.html#a19">windowType</a>() == NET::Dialog;
<a name="l01612"></a>01612     }
<a name="l01613"></a>01613 
<a name="l01614"></a><a class="code" href="classKWinInternal_1_1Client.html#a92">01614</a> <span class="keywordtype">bool</span> <a class="code" href="classKWinInternal_1_1Client.html#a92">Client::isNormalWindow</a>()<span class="keyword"> const</span>
<a name="l01615"></a>01615 <span class="keyword">    </span>{
<a name="l01616"></a>01616     <span class="keywordflow">return</span> <a class="code" href="classKWinInternal_1_1Client.html#a19">windowType</a>() == NET::Normal;
<a name="l01617"></a>01617     }
<a name="l01618"></a>01618 
<a name="l01619"></a><a class="code" href="classKWinInternal_1_1Client.html#a97">01619</a> <span class="keywordtype">bool</span> <a class="code" href="classKWinInternal_1_1Client.html#a97">Client::isSpecialWindow</a>()<span class="keyword"> const</span>
<a name="l01620"></a>01620 <span class="keyword">    </span>{
<a name="l01621"></a>01621     <span class="keywordflow">return</span> <a class="code" href="classKWinInternal_1_1Client.html#a87">isDesktop</a>() || <a class="code" href="classKWinInternal_1_1Client.html#a88">isDock</a>() || <a class="code" href="classKWinInternal_1_1Client.html#a94">isSplash</a>() || <a class="code" href="classKWinInternal_1_1Client.html#a90">isTopMenu</a>()
<a name="l01622"></a>01622         || ( <a class="code" href="classKWinInternal_1_1Client.html#a96">isOverride</a>() &amp;&amp; !<a class="code" href="classKWinInternal_1_1Client.html#a61">isFullScreen</a>())<span class="comment">// SELI is NET::Override special or not?</span>
<a name="l01623"></a>01623         || <a class="code" href="classKWinInternal_1_1Client.html#a89">isToolbar</a>(); <span class="comment">// TODO</span>
<a name="l01624"></a>01624     }
<a name="l01625"></a>01625 
<a name="l01626"></a><a class="code" href="classKWinInternal_1_1Client.html#a19">01626</a> NET::WindowType <a class="code" href="classKWinInternal_1_1Client.html#a19">Client::windowType</a>( <span class="keywordtype">bool</span> direct, <span class="keywordtype">int</span> supported_types )<span class="keyword"> const</span>
<a name="l01627"></a>01627 <span class="keyword">    </span>{
<a name="l01628"></a>01628     NET::WindowType wt = info-&gt;windowType( supported_types );
<a name="l01629"></a>01629     <span class="keywordflow">if</span>( direct )
<a name="l01630"></a>01630         <span class="keywordflow">return</span> wt;
<a name="l01631"></a>01631     NET::WindowType wt2 = <a class="code" href="classKWinInternal_1_1Client.html#a20">rules</a>()-&gt;<a class="code" href="classKWinInternal_1_1WindowRules.html#a14">checkType</a>( wt );
<a name="l01632"></a>01632     <span class="keywordflow">if</span>( wt != wt2 )
<a name="l01633"></a>01633         {
<a name="l01634"></a>01634         wt = wt2;
<a name="l01635"></a>01635         info-&gt;setWindowType( wt ); <span class="comment">// force hint change</span>
<a name="l01636"></a>01636         }
<a name="l01637"></a>01637     <span class="comment">// hacks here</span>
<a name="l01638"></a>01638     <span class="keywordflow">if</span>( wt == NET::Menu )
<a name="l01639"></a>01639         {
<a name="l01640"></a>01640         <span class="comment">// ugly hack to support the times when NET::Menu meant NET::TopMenu</span>
<a name="l01641"></a>01641         <span class="comment">// if it's as wide as the screen, not very high and has its upper-left</span>
<a name="l01642"></a>01642         <span class="comment">// corner a bit above the screen's upper-left cornet, it's a topmenu</span>
<a name="l01643"></a>01643         <span class="keywordflow">if</span>( <a class="code" href="classKWinInternal_1_1Client.html#a27">x</a>() == 0 &amp;&amp; <a class="code" href="classKWinInternal_1_1Client.html#a28">y</a>() &lt; 0 &amp;&amp; <a class="code" href="classKWinInternal_1_1Client.html#a28">y</a>() &gt; -10 &amp;&amp; <a class="code" href="classKWinInternal_1_1Client.html#a30">height</a>() &lt; 100
<a name="l01644"></a>01644             &amp;&amp; abs( <a class="code" href="classKWinInternal_1_1Client.html#a29">width</a>() - <a class="code" href="classKWinInternal_1_1Client.html#a5">workspace</a>()-&gt;clientArea( FullArea, <span class="keyword">this</span> ).<a class="code" href="classKWinInternal_1_1Client.html#a29">width</a>()) &lt; 10 )
<a name="l01645"></a>01645             wt = NET::TopMenu;
<a name="l01646"></a>01646         }
<a name="l01647"></a>01647     <span class="comment">// TODO change this to rule</span>
<a name="l01648"></a>01648     <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span> oo_prefix = <span class="stringliteral">"openoffice.org"</span>; <span class="comment">// QCString has no startsWith()</span>
<a name="l01649"></a>01649     <span class="comment">// oo_prefix is lowercase, because resourceClass() is forced to be lowercase</span>
<a name="l01650"></a>01650     <span class="keywordflow">if</span>( qstrncmp( <a class="code" href="classKWinInternal_1_1Client.html#a127">resourceClass</a>(), oo_prefix, strlen( oo_prefix )) == 0 &amp;&amp; wt == NET::Dialog )
<a name="l01651"></a>01651         wt = NET::Normal; <span class="comment">// see bug #66065</span>
<a name="l01652"></a>01652     <span class="keywordflow">if</span>( wt == NET::Unknown ) <span class="comment">// this is more or less suggested in NETWM spec</span>
<a name="l01653"></a>01653         wt = <a class="code" href="classKWinInternal_1_1Client.html#a8">isTransient</a>() ? NET::Dialog : NET::Normal;
<a name="l01654"></a>01654     <span class="keywordflow">return</span> wt;
<a name="l01655"></a>01655     }
<a name="l01656"></a>01656 
<a name="l01661"></a>01661 <span class="keywordtype">void</span> Client::setCursor( Position m )
<a name="l01662"></a>01662     {
<a name="l01663"></a>01663     <span class="keywordflow">if</span>( !<a class="code" href="classKWinInternal_1_1Client.html#a98">isResizable</a>() || <a class="code" href="classKWinInternal_1_1Client.html#a50">isShade</a>())
<a name="l01664"></a>01664         {
<a name="l01665"></a>01665         m = PositionCenter;
<a name="l01666"></a>01666         }
<a name="l01667"></a>01667     <span class="keywordflow">switch</span> ( m ) 
<a name="l01668"></a>01668         {
<a name="l01669"></a>01669         <span class="keywordflow">case</span> PositionTopLeft:
<a name="l01670"></a>01670         <span class="keywordflow">case</span> PositionBottomRight:
<a name="l01671"></a>01671             setCursor( sizeFDiagCursor );
<a name="l01672"></a>01672             <span class="keywordflow">break</span>;
<a name="l01673"></a>01673         <span class="keywordflow">case</span> PositionBottomLeft:
<a name="l01674"></a>01674         <span class="keywordflow">case</span> PositionTopRight:
<a name="l01675"></a>01675             setCursor( sizeBDiagCursor );
<a name="l01676"></a>01676             <span class="keywordflow">break</span>;
<a name="l01677"></a>01677         <span class="keywordflow">case</span> PositionTop:
<a name="l01678"></a>01678         <span class="keywordflow">case</span> PositionBottom:
<a name="l01679"></a>01679             setCursor( sizeVerCursor );
<a name="l01680"></a>01680             <span class="keywordflow">break</span>;
<a name="l01681"></a>01681         <span class="keywordflow">case</span> PositionLeft:
<a name="l01682"></a>01682         <span class="keywordflow">case</span> PositionRight:
<a name="l01683"></a>01683             setCursor( sizeHorCursor );
<a name="l01684"></a>01684             <span class="keywordflow">break</span>;
<a name="l01685"></a>01685         <span class="keywordflow">default</span>:
<a name="l01686"></a>01686             <span class="keywordflow">if</span>( buttonDown &amp;&amp; <a class="code" href="classKWinInternal_1_1Client.html#a86">isMovable</a>())
<a name="l01687"></a>01687                 setCursor( sizeAllCursor );
<a name="l01688"></a>01688             <span class="keywordflow">else</span>
<a name="l01689"></a>01689                 setCursor( arrowCursor );
<a name="l01690"></a>01690             <span class="keywordflow">break</span>;
<a name="l01691"></a>01691         }
<a name="l01692"></a>01692     }
<a name="l01693"></a>01693 
<a name="l01694"></a>01694 <span class="comment">// TODO mit nejake checkCursor(), ktere se zavola v manage() a pri vecech, kdy by se kurzor mohl zmenit?</span>
<a name="l01695"></a>01695 <span class="keywordtype">void</span> Client::setCursor( <span class="keyword">const</span> QCursor&amp; c )
<a name="l01696"></a>01696     {
<a name="l01697"></a>01697     <span class="keywordflow">if</span>( c.handle() == cursor.handle())
<a name="l01698"></a>01698         <span class="keywordflow">return</span>;
<a name="l01699"></a>01699     cursor = c;
<a name="l01700"></a>01700     <span class="keywordflow">if</span>( decoration != NULL )
<a name="l01701"></a>01701         decoration-&gt;<a class="code" href="classKDecoration.html#a55">widget</a>()-&gt;setCursor( cursor );
<a name="l01702"></a>01702     XDefineCursor( qt_xdisplay(), <a class="code" href="classKWinInternal_1_1Client.html#a2">frameId</a>(), cursor.handle());
<a name="l01703"></a>01703     }
<a name="l01704"></a>01704 
<a name="l01705"></a>01705 <a class="code" href="classKDecorationDefines.html#w70">Client::Position</a> Client::mousePosition( <span class="keyword">const</span> QPoint&amp; p )<span class="keyword"> const</span>
<a name="l01706"></a>01706 <span class="keyword">    </span>{
<a name="l01707"></a>01707     <span class="keywordflow">if</span>( decoration != NULL )
<a name="l01708"></a>01708         <span class="keywordflow">return</span> decoration-&gt;<a class="code" href="classKDecoration.html#a36">mousePosition</a>( p );
<a name="l01709"></a>01709     <span class="keywordflow">return</span> PositionCenter;
<a name="l01710"></a>01710     }
<a name="l01711"></a>01711 
<a name="l01712"></a>01712 <span class="keywordtype">void</span> Client::updateAllowedActions( <span class="keywordtype">bool</span> force )
<a name="l01713"></a>01713     {
<a name="l01714"></a>01714     <span class="keywordflow">if</span>( !isManaged() &amp;&amp; !force )
<a name="l01715"></a>01715         <span class="keywordflow">return</span>;
<a name="l01716"></a>01716     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> old_allowed_actions = allowed_actions;
<a name="l01717"></a>01717     allowed_actions = 0;
<a name="l01718"></a>01718     <span class="keywordflow">if</span>( <a class="code" href="classKWinInternal_1_1Client.html#a86">isMovable</a>())
<a name="l01719"></a>01719         allowed_actions |= NET::ActionMove;
<a name="l01720"></a>01720     <span class="keywordflow">if</span>( <a class="code" href="classKWinInternal_1_1Client.html#a98">isResizable</a>())
<a name="l01721"></a>01721         allowed_actions |= NET::ActionResize;
<a name="l01722"></a>01722     <span class="keywordflow">if</span>( <a class="code" href="classKWinInternal_1_1Client.html#a58">isMinimizable</a>())
<a name="l01723"></a>01723         allowed_actions |= NET::ActionMinimize;
<a name="l01724"></a>01724     <span class="keywordflow">if</span>( <a class="code" href="classKWinInternal_1_1Client.html#a53">isShadeable</a>())
<a name="l01725"></a>01725         allowed_actions |= NET::ActionShade;
<a name="l01726"></a>01726     <span class="comment">// sticky state not supported</span>
<a name="l01727"></a>01727     <span class="keywordflow">if</span>( <a class="code" href="classKWinInternal_1_1Client.html#a55">isMaximizable</a>())
<a name="l01728"></a>01728         allowed_actions |= NET::ActionMax;
<a name="l01729"></a>01729     <span class="keywordflow">if</span>( <a class="code" href="classKWinInternal_1_1Client.html#a63">userCanSetFullScreen</a>())
<a name="l01730"></a>01730         allowed_actions |= NET::ActionFullScreen;
<a name="l01731"></a>01731     allowed_actions |= NET::ActionChangeDesktop; <span class="comment">// always (pagers shouldn't show Docks etc.)</span>
<a name="l01732"></a>01732     <span class="keywordflow">if</span>( <a class="code" href="classKWinInternal_1_1Client.html#a99">isCloseable</a>())
<a name="l01733"></a>01733         allowed_actions |= NET::ActionClose;
<a name="l01734"></a>01734     <span class="keywordflow">if</span>( old_allowed_actions == allowed_actions )
<a name="l01735"></a>01735         <span class="keywordflow">return</span>;
<a name="l01736"></a>01736     <span class="comment">// TODO this could be delayed and compressed - it's only for pagers etc. anyway</span>
<a name="l01737"></a>01737     info-&gt;setAllowedActions( allowed_actions );
<a name="l01738"></a>01738     <span class="comment">// TODO this should also tell the decoration, so that it can update the buttons</span>
<a name="l01739"></a>01739     }
<a name="l01740"></a>01740 
<a name="l01741"></a>01741 <span class="keywordtype">void</span> Client::autoRaise()
<a name="l01742"></a>01742     {
<a name="l01743"></a>01743     <a class="code" href="classKWinInternal_1_1Client.html#a5">workspace</a>()-&gt;raiseClient( <span class="keyword">this</span> );
<a name="l01744"></a>01744     <a class="code" href="classKWinInternal_1_1Client.html#a158">cancelAutoRaise</a>();
<a name="l01745"></a>01745     }
<a name="l01746"></a>01746     
<a name="l01747"></a><a class="code" href="classKWinInternal_1_1Client.html#a158">01747</a> <span class="keywordtype">void</span> <a class="code" href="classKWinInternal_1_1Client.html#a158">Client::cancelAutoRaise</a>()
<a name="l01748"></a>01748     {
<a name="l01749"></a>01749     <span class="keyword">delete</span> autoRaiseTimer;
<a name="l01750"></a>01750     autoRaiseTimer = 0;
<a name="l01751"></a>01751     }
<a name="l01752"></a>01752 
<a name="l01753"></a><a class="code" href="classKWinInternal_1_1Client.html#a161">01753</a> <span class="keywordtype">void</span> <a class="code" href="classKWinInternal_1_1Client.html#a161">Client::setOpacity</a>(<span class="keywordtype">bool</span> translucent, uint opacity)
<a name="l01754"></a>01754     {
<a name="l01755"></a>01755     <span class="keywordflow">if</span> (<a class="code" href="classKWinInternal_1_1Client.html#a87">isDesktop</a>())
<a name="l01756"></a>01756         <span class="keywordflow">return</span>; <span class="comment">// xcompmgr does not like non solid desktops and the user could set it accidently by mouse scrolling</span>
<a name="l01757"></a>01757 <span class="comment">//     qWarning("setting opacity for %d",qt_xdisplay());</span>
<a name="l01758"></a>01758     <span class="comment">//rule out activated translulcency with 100% opacity</span>
<a name="l01759"></a>01759     <span class="keywordflow">if</span> (!translucent || opacity ==  0xFFFFFFFF)
<a name="l01760"></a>01760         {
<a name="l01761"></a>01761         opacity_ = 0xFFFFFFFF;
<a name="l01762"></a>01762         XDeleteProperty (qt_xdisplay(), <a class="code" href="classKWinInternal_1_1Client.html#a2">frameId</a>(), <a class="code" href="namespaceKWinInternal.html#a0">atoms</a>-&gt;<a class="code" href="classKWinInternal_1_1Atoms.html#o14">net_wm_window_opacity</a>);
<a name="l01763"></a>01763         XDeleteProperty (qt_xdisplay(), <a class="code" href="classKWinInternal_1_1Client.html#a1">window</a>(), <a class="code" href="namespaceKWinInternal.html#a0">atoms</a>-&gt;<a class="code" href="classKWinInternal_1_1Atoms.html#o14">net_wm_window_opacity</a>); <span class="comment">// ??? frameId() is necessary for visible changes, window() is the winId() that would be set by apps - we set both to be sure the app knows what's currently displayd</span>
<a name="l01764"></a>01764         }
<a name="l01765"></a>01765     <span class="keywordflow">else</span>{
<a name="l01766"></a>01766         <span class="keywordflow">if</span>(opacity == opacity_)
<a name="l01767"></a>01767             <span class="keywordflow">return</span>;
<a name="l01768"></a>01768         opacity_ = opacity;
<a name="l01769"></a>01769         <span class="keywordtype">long</span> data = opacity; <span class="comment">// 32bit XChangeProperty needs long</span>
<a name="l01770"></a>01770         XChangeProperty(qt_xdisplay(), <a class="code" href="classKWinInternal_1_1Client.html#a2">frameId</a>(), <a class="code" href="namespaceKWinInternal.html#a0">atoms</a>-&gt;<a class="code" href="classKWinInternal_1_1Atoms.html#o14">net_wm_window_opacity</a>, XA_CARDINAL, 32, PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) &amp;data, 1L);
<a name="l01771"></a>01771         XChangeProperty(qt_xdisplay(), <a class="code" href="classKWinInternal_1_1Client.html#a1">window</a>(), <a class="code" href="namespaceKWinInternal.html#a0">atoms</a>-&gt;<a class="code" href="classKWinInternal_1_1Atoms.html#o14">net_wm_window_opacity</a>, XA_CARDINAL, 32, PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) &amp;data, 1L);
<a name="l01772"></a>01772         }
<a name="l01773"></a>01773     }
<a name="l01774"></a>01774     
<a name="l01775"></a><a class="code" href="classKWinInternal_1_1Client.html#a162">01775</a> <span class="keywordtype">void</span> <a class="code" href="classKWinInternal_1_1Client.html#a162">Client::setShadowSize</a>(uint shadowSize)
<a name="l01776"></a>01776     {
<a name="l01777"></a>01777     <span class="comment">// ignoring all individual settings - if we control a window, we control it's shadow</span>
<a name="l01778"></a>01778     <span class="comment">// TODO somehow handle individual settings for docks (besides custom sizes)</span>
<a name="l01779"></a>01779     <span class="keywordtype">long</span> data = shadowSize;
<a name="l01780"></a>01780     XChangeProperty(qt_xdisplay(), <a class="code" href="classKWinInternal_1_1Client.html#a2">frameId</a>(), <a class="code" href="namespaceKWinInternal.html#a0">atoms</a>-&gt;<a class="code" href="classKWinInternal_1_1Atoms.html#o15">net_wm_window_shadow</a>, XA_CARDINAL, 32, PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) &amp;data, 1L);
<a name="l01781"></a>01781     }
<a name="l01782"></a>01782         
<a name="l01783"></a><a class="code" href="classKWinInternal_1_1Client.html#a163">01783</a> <span class="keywordtype">void</span> <a class="code" href="classKWinInternal_1_1Client.html#a163">Client::updateOpacity</a>()
<a name="l01784"></a>01784 <span class="comment">// extra syncscreen flag allows to avoid double syncs when active state changes (as it will usually change for two windows)</span>
<a name="l01785"></a>01785     {
<a name="l01786"></a>01786     <span class="keywordflow">if</span> (!(<a class="code" href="classKWinInternal_1_1Client.html#a92">isNormalWindow</a>() || <a class="code" href="classKWinInternal_1_1Client.html#a93">isDialog</a>() || <a class="code" href="classKWinInternal_1_1Client.html#a95">isUtility</a>() )|| custom_opacity)
<a name="l01787"></a>01787         <span class="keywordflow">return</span>;
<a name="l01788"></a>01788     <span class="keywordflow">if</span> (<a class="code" href="classKWinInternal_1_1Client.html#a41">isActive</a>())
<a name="l01789"></a>01789         {
<a name="l01790"></a>01790         <span class="keywordflow">if</span>( <a class="code" href="classKWinInternal_1_1Client.html#a171">ruleOpacityActive</a>() )
<a name="l01791"></a>01791             <a class="code" href="classKWinInternal_1_1Client.html#a161">setOpacity</a>(rule_opacity_active &lt; 0xFFFFFFFF, rule_opacity_active);
<a name="l01792"></a>01792         <span class="keywordflow">else</span>
<a name="l01793"></a>01793             <a class="code" href="classKWinInternal_1_1Client.html#a161">setOpacity</a>(<a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;<a class="code" href="classKWinInternal_1_1Options.html#o28">translucentActiveWindows</a>, <a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;<a class="code" href="classKWinInternal_1_1Options.html#o29">activeWindowOpacity</a>);
<a name="l01794"></a>01794         <span class="keywordflow">if</span> (<a class="code" href="classKWinInternal_1_1Client.html#a173">isBMP</a>())
<a name="l01795"></a>01795         <span class="comment">// beep-media-player, only undecorated windows (gtk2 xmms, xmms doesn't work with compmgr at all - s.e.p. :P )</span>
<a name="l01796"></a>01796             {
<a name="l01797"></a>01797             <a class="code" href="namespaceKWinInternal.html#a24">ClientList</a> tmpGroupMembers = <a class="code" href="classKWinInternal_1_1Client.html#a16">group</a>()-&gt;<a class="code" href="classKWinInternal_1_1Group.html#a5">members</a>();
<a name="l01798"></a>01798             <a class="code" href="namespaceKWinInternal.html#a24">ClientList</a> activeGroupMembers;
<a name="l01799"></a>01799             activeGroupMembers.append(<span class="keyword">this</span>);
<a name="l01800"></a>01800             tmpGroupMembers.remove(<span class="keyword">this</span>);
<a name="l01801"></a>01801             ClientList::Iterator it = tmpGroupMembers.begin();
<a name="l01802"></a>01802             <span class="keywordflow">while</span> (it != tmpGroupMembers.end())
<a name="l01803"></a>01803             <span class="comment">// search for next attached and not activated client and repeat if found</span>
<a name="l01804"></a>01804                 {
<a name="l01805"></a>01805                 <span class="keywordflow">if</span> ((*it) != <span class="keyword">this</span> &amp;&amp; (*it)-&gt;isBMP())
<a name="l01806"></a>01806                 <span class="comment">// potential "to activate" client found</span>
<a name="l01807"></a>01807                     {
<a name="l01808"></a>01808 <span class="comment">//                     qWarning("client found");</span>
<a name="l01809"></a>01809                     <span class="keywordflow">if</span> ((*it)-&gt;touches(<span class="keyword">this</span>)) <span class="comment">// first test, if the new client touches the just activated one</span>
<a name="l01810"></a>01810                         {
<a name="l01811"></a>01811 <span class="comment">//                         qWarning("found client touches me");</span>
<a name="l01812"></a>01812                         <span class="keywordflow">if</span>( <a class="code" href="classKWinInternal_1_1Client.html#a171">ruleOpacityActive</a>() )
<a name="l01813"></a>01813                             (*it)-&gt;setOpacity(rule_opacity_active &lt; 0xFFFFFFFF, rule_opacity_active);
<a name="l01814"></a>01814                         <span class="keywordflow">else</span>
<a name="l01815"></a>01815                             (*it)-&gt;setOpacity(<a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;<a class="code" href="classKWinInternal_1_1Options.html#o28">translucentActiveWindows</a>, <a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;<a class="code" href="classKWinInternal_1_1Options.html#o29">activeWindowOpacity</a>);
<a name="l01816"></a>01816 <span class="comment">//                         qWarning("activated, search restarted (1)");</span>
<a name="l01817"></a>01817                         (*it)-&gt;setShadowSize(<a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;<a class="code" href="classKWinInternal_1_1Options.html#o40">activeWindowShadowSize</a>);
<a name="l01818"></a>01818                         activeGroupMembers.append(*it);
<a name="l01819"></a>01819                         tmpGroupMembers.remove(it);
<a name="l01820"></a>01820                         it = tmpGroupMembers.begin(); <span class="comment">// restart, search next client</span>
<a name="l01821"></a>01821                         <span class="keywordflow">continue</span>;
<a name="l01822"></a>01822                         }
<a name="l01823"></a>01823                     <span class="keywordflow">else</span>
<a name="l01824"></a>01824                         { <span class="comment">// pot. client does not touch c, so we have to search if it touches some other activated client</span>
<a name="l01825"></a>01825                         <span class="keywordtype">bool</span> found = <span class="keyword">false</span>;
<a name="l01826"></a>01826                         <span class="keywordflow">for</span>( ClientList::ConstIterator it2 = activeGroupMembers.begin(); it2 != activeGroupMembers.end(); it2++ )
<a name="l01827"></a>01827                             {
<a name="l01828"></a>01828                             <span class="keywordflow">if</span> ((*it2) != <span class="keyword">this</span> &amp;&amp; (*it2) != (*it) &amp;&amp; (*it)-&gt;touches(*it2))
<a name="l01829"></a>01829                                 {
<a name="l01830"></a>01830 <span class="comment">//                                 qWarning("found client touches other active client");</span>
<a name="l01831"></a>01831                                 <span class="keywordflow">if</span>( <a class="code" href="classKWinInternal_1_1Client.html#a171">ruleOpacityActive</a>() )
<a name="l01832"></a>01832                                     (*it)-&gt;setOpacity(rule_opacity_active &lt; 0xFFFFFFFF, rule_opacity_active);
<a name="l01833"></a>01833                                 <span class="keywordflow">else</span>
<a name="l01834"></a>01834                                     (*it)-&gt;setOpacity(<a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;<a class="code" href="classKWinInternal_1_1Options.html#o28">translucentActiveWindows</a>, <a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;<a class="code" href="classKWinInternal_1_1Options.html#o29">activeWindowOpacity</a>);
<a name="l01835"></a>01835                                 (*it)-&gt;setShadowSize(<a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;<a class="code" href="classKWinInternal_1_1Options.html#o40">activeWindowShadowSize</a>);
<a name="l01836"></a>01836                                 activeGroupMembers.append(*it);
<a name="l01837"></a>01837                                 tmpGroupMembers.remove(it);
<a name="l01838"></a>01838                                 it = tmpGroupMembers.begin(); <span class="comment">// reset potential client search</span>
<a name="l01839"></a>01839                                 found = <span class="keyword">true</span>;
<a name="l01840"></a>01840 <span class="comment">//                                 qWarning("activated, search restarted (2)");</span>
<a name="l01841"></a>01841                                 <span class="keywordflow">break</span>; <span class="comment">// skip this loop</span>
<a name="l01842"></a>01842                                 }
<a name="l01843"></a>01843                             }
<a name="l01844"></a>01844                         <span class="keywordflow">if</span> (found) <span class="keywordflow">continue</span>;
<a name="l01845"></a>01845                         }
<a name="l01846"></a>01846                     }
<a name="l01847"></a>01847                     it++;
<a name="l01848"></a>01848                 }
<a name="l01849"></a>01849             }
<a name="l01850"></a>01850         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classKWinInternal_1_1Client.html#a92">isNormalWindow</a>())
<a name="l01851"></a>01851         <span class="comment">// activate dependend minor windows as well</span>
<a name="l01852"></a>01852             {
<a name="l01853"></a>01853             <span class="keywordflow">for</span>( ClientList::ConstIterator it = <a class="code" href="classKWinInternal_1_1Client.html#a16">group</a>()-&gt;<a class="code" href="classKWinInternal_1_1Group.html#a5">members</a>().begin(); it != <a class="code" href="classKWinInternal_1_1Client.html#a16">group</a>()-&gt;<a class="code" href="classKWinInternal_1_1Group.html#a5">members</a>().end(); it++ )
<a name="l01854"></a>01854                 <span class="keywordflow">if</span> ((*it)-&gt;isDialog() || (*it)-&gt;isUtility())
<a name="l01855"></a>01855                     <span class="keywordflow">if</span>( (*it)-&gt;ruleOpacityActive() )
<a name="l01856"></a>01856                         (*it)-&gt;setOpacity((*it)-&gt;ruleOpacityActive() &lt; 0xFFFFFFFF, (*it)-&gt;ruleOpacityActive());
<a name="l01857"></a>01857                     <span class="keywordflow">else</span>
<a name="l01858"></a>01858                         (*it)-&gt;setOpacity(<a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;<a class="code" href="classKWinInternal_1_1Options.html#o28">translucentActiveWindows</a>, <a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;<a class="code" href="classKWinInternal_1_1Options.html#o29">activeWindowOpacity</a>);
<a name="l01859"></a>01859             }
<a name="l01860"></a>01860         }
<a name="l01861"></a>01861     <span class="keywordflow">else</span>
<a name="l01862"></a>01862         {
<a name="l01863"></a>01863         <span class="keywordflow">if</span>( <a class="code" href="classKWinInternal_1_1Client.html#a170">ruleOpacityInactive</a>() )
<a name="l01864"></a>01864             <a class="code" href="classKWinInternal_1_1Client.html#a161">setOpacity</a>(rule_opacity_inactive &lt; 0xFFFFFFFF, rule_opacity_inactive);
<a name="l01865"></a>01865         <span class="keywordflow">else</span>
<a name="l01866"></a>01866             <a class="code" href="classKWinInternal_1_1Client.html#a161">setOpacity</a>(<a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;<a class="code" href="classKWinInternal_1_1Options.html#o30">translucentInactiveWindows</a> &amp;&amp; !(<a class="code" href="classKWinInternal_1_1Client.html#a74">keepAbove</a>() &amp;&amp; <a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;<a class="code" href="classKWinInternal_1_1Options.html#o38">keepAboveAsActive</a>),
<a name="l01867"></a>01867                     <a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;<a class="code" href="classKWinInternal_1_1Options.html#o31">inactiveWindowOpacity</a>);
<a name="l01868"></a>01868         <span class="comment">// deactivate dependend minor windows as well</span>
<a name="l01869"></a>01869         <span class="keywordflow">if</span> (<a class="code" href="classKWinInternal_1_1Client.html#a173">isBMP</a>())
<a name="l01870"></a>01870         <span class="comment">// beep-media-player, only undecorated windows (gtk2 xmms, xmms doesn't work with compmgr at all - s.e.p. :P )</span>
<a name="l01871"></a>01871             {
<a name="l01872"></a>01872             <a class="code" href="namespaceKWinInternal.html#a24">ClientList</a> tmpGroupMembers = <a class="code" href="classKWinInternal_1_1Client.html#a16">group</a>()-&gt;<a class="code" href="classKWinInternal_1_1Group.html#a5">members</a>();
<a name="l01873"></a>01873             <a class="code" href="namespaceKWinInternal.html#a24">ClientList</a> inactiveGroupMembers;
<a name="l01874"></a>01874             inactiveGroupMembers.append(<span class="keyword">this</span>);
<a name="l01875"></a>01875             tmpGroupMembers.remove(<span class="keyword">this</span>);
<a name="l01876"></a>01876             ClientList::Iterator it = tmpGroupMembers.begin();
<a name="l01877"></a>01877             <span class="keywordflow">while</span> ( it != tmpGroupMembers.end() )
<a name="l01878"></a>01878             <span class="comment">// search for next attached and not activated client and repeat if found</span>
<a name="l01879"></a>01879                 {
<a name="l01880"></a>01880                 <span class="keywordflow">if</span> ((*it) != <span class="keyword">this</span> &amp;&amp; (*it)-&gt;isBMP())
<a name="l01881"></a>01881                 <span class="comment">// potential "to activate" client found</span>
<a name="l01882"></a>01882                     {
<a name="l01883"></a>01883 <span class="comment">//                     qWarning("client found");</span>
<a name="l01884"></a>01884                     <span class="keywordflow">if</span> ((*it)-&gt;touches(<span class="keyword">this</span>)) <span class="comment">// first test, if the new client touches the just activated one</span>
<a name="l01885"></a>01885                         {
<a name="l01886"></a>01886 <span class="comment">//                         qWarning("found client touches me");</span>
<a name="l01887"></a>01887                         <span class="keywordflow">if</span>( (*it)-&gt;ruleOpacityInactive() )
<a name="l01888"></a>01888                             (*it)-&gt;setOpacity((*it)-&gt;ruleOpacityInactive() &lt; 0xFFFFFFFF, (*it)-&gt;ruleOpacityInactive());
<a name="l01889"></a>01889                         <span class="keywordflow">else</span>
<a name="l01890"></a>01890                             (*it)-&gt;setOpacity(<a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;<a class="code" href="classKWinInternal_1_1Options.html#o30">translucentInactiveWindows</a> &amp;&amp; !((*it)-&gt;keepAbove() &amp;&amp; <a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;<a class="code" href="classKWinInternal_1_1Options.html#o38">keepAboveAsActive</a>), <a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;<a class="code" href="classKWinInternal_1_1Options.html#o31">inactiveWindowOpacity</a>);
<a name="l01891"></a>01891                         (*it)-&gt;setShadowSize(<a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;<a class="code" href="classKWinInternal_1_1Options.html#o41">inactiveWindowShadowSize</a>);
<a name="l01892"></a>01892 <span class="comment">//                         qWarning("deactivated, search restarted (1)");</span>
<a name="l01893"></a>01893                         inactiveGroupMembers.append(*it);
<a name="l01894"></a>01894                         tmpGroupMembers.remove(it);
<a name="l01895"></a>01895                         it = tmpGroupMembers.begin(); <span class="comment">// restart, search next client</span>
<a name="l01896"></a>01896                         <span class="keywordflow">continue</span>;
<a name="l01897"></a>01897                         }
<a name="l01898"></a>01898                     <span class="keywordflow">else</span> <span class="comment">// pot. client does not touch c, so we have to search if it touches some other activated client</span>
<a name="l01899"></a>01899                         {
<a name="l01900"></a>01900                         <span class="keywordtype">bool</span> found = <span class="keyword">false</span>;
<a name="l01901"></a>01901                         <span class="keywordflow">for</span>( ClientList::ConstIterator it2 = inactiveGroupMembers.begin(); it2 != inactiveGroupMembers.end(); it2++ )
<a name="l01902"></a>01902                             {
<a name="l01903"></a>01903                             <span class="keywordflow">if</span> ((*it2) != <span class="keyword">this</span> &amp;&amp; (*it2) != (*it) &amp;&amp; (*it)-&gt;touches(*it2))
<a name="l01904"></a>01904                                 {
<a name="l01905"></a>01905 <span class="comment">//                                 qWarning("found client touches other inactive client");</span>
<a name="l01906"></a>01906                                 <span class="keywordflow">if</span>( (*it)-&gt;ruleOpacityInactive() )
<a name="l01907"></a>01907                                     (*it)-&gt;setOpacity((*it)-&gt;ruleOpacityInactive() &lt; 0xFFFFFFFF, (*it)-&gt;ruleOpacityInactive());
<a name="l01908"></a>01908                                 <span class="keywordflow">else</span>
<a name="l01909"></a>01909                                     (*it)-&gt;setOpacity(<a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;<a class="code" href="classKWinInternal_1_1Options.html#o30">translucentInactiveWindows</a> &amp;&amp; !((*it)-&gt;keepAbove() &amp;&amp; <a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;<a class="code" href="classKWinInternal_1_1Options.html#o38">keepAboveAsActive</a>), <a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;<a class="code" href="classKWinInternal_1_1Options.html#o31">inactiveWindowOpacity</a>);
<a name="l01910"></a>01910                                 (*it)-&gt;setShadowSize(<a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;<a class="code" href="classKWinInternal_1_1Options.html#o41">inactiveWindowShadowSize</a>);
<a name="l01911"></a>01911 <span class="comment">//                                 qWarning("deactivated, search restarted (2)");</span>
<a name="l01912"></a>01912                                 inactiveGroupMembers.append(*it);
<a name="l01913"></a>01913                                 tmpGroupMembers.remove(it);
<a name="l01914"></a>01914                                 it = tmpGroupMembers.begin(); <span class="comment">// reset potential client search</span>
<a name="l01915"></a>01915                                 found = <span class="keyword">true</span>;
<a name="l01916"></a>01916                                 <span class="keywordflow">break</span>; <span class="comment">// skip this loop</span>
<a name="l01917"></a>01917                                 }
<a name="l01918"></a>01918                             }
<a name="l01919"></a>01919                             <span class="keywordflow">if</span> (found) <span class="keywordflow">continue</span>;
<a name="l01920"></a>01920                         }
<a name="l01921"></a>01921                     }
<a name="l01922"></a>01922                     it++;
<a name="l01923"></a>01923                 }
<a name="l01924"></a>01924             }
<a name="l01925"></a>01925         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classKWinInternal_1_1Client.html#a92">isNormalWindow</a>())
<a name="l01926"></a>01926             {
<a name="l01927"></a>01927             <span class="keywordflow">for</span>( ClientList::ConstIterator it = <a class="code" href="classKWinInternal_1_1Client.html#a16">group</a>()-&gt;<a class="code" href="classKWinInternal_1_1Group.html#a5">members</a>().begin(); it != <a class="code" href="classKWinInternal_1_1Client.html#a16">group</a>()-&gt;<a class="code" href="classKWinInternal_1_1Group.html#a5">members</a>().end(); it++ )
<a name="l01928"></a>01928                 <span class="keywordflow">if</span> ((*it)-&gt;isUtility()) <span class="comment">//don't deactivate dialogs...</span>
<a name="l01929"></a>01929                     <span class="keywordflow">if</span>( (*it)-&gt;ruleOpacityInactive() )
<a name="l01930"></a>01930                         (*it)-&gt;setOpacity((*it)-&gt;ruleOpacityInactive() &lt; 0xFFFFFFFF, (*it)-&gt;ruleOpacityInactive());
<a name="l01931"></a>01931                     <span class="keywordflow">else</span>
<a name="l01932"></a>01932                         (*it)-&gt;setOpacity(<a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;<a class="code" href="classKWinInternal_1_1Options.html#o30">translucentInactiveWindows</a> &amp;&amp; !((*it)-&gt;keepAbove() &amp;&amp; <a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;<a class="code" href="classKWinInternal_1_1Options.html#o38">keepAboveAsActive</a>), <a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;<a class="code" href="classKWinInternal_1_1Options.html#o31">inactiveWindowOpacity</a>);
<a name="l01933"></a>01933             }
<a name="l01934"></a>01934         }
<a name="l01935"></a>01935     }
<a name="l01936"></a>01936     
<a name="l01937"></a><a class="code" href="classKWinInternal_1_1Client.html#a164">01937</a> <span class="keywordtype">void</span> <a class="code" href="classKWinInternal_1_1Client.html#a164">Client::updateShadowSize</a>()
<a name="l01938"></a>01938 <span class="comment">// extra syncscreen flag allows to avoid double syncs when active state changes (as it will usually change for two windows)</span>
<a name="l01939"></a>01939     {
<a name="l01940"></a>01940     <span class="keywordflow">if</span> (!(<a class="code" href="classKWinInternal_1_1Client.html#a92">isNormalWindow</a>() || <a class="code" href="classKWinInternal_1_1Client.html#a93">isDialog</a>() || <a class="code" href="classKWinInternal_1_1Client.html#a95">isUtility</a>() ))
<a name="l01941"></a>01941         <span class="keywordflow">return</span>;
<a name="l01942"></a>01942     <span class="keywordflow">if</span> (<a class="code" href="classKWinInternal_1_1Client.html#a41">isActive</a>())
<a name="l01943"></a>01943         <a class="code" href="classKWinInternal_1_1Client.html#a162">setShadowSize</a>(<a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;<a class="code" href="classKWinInternal_1_1Options.html#o40">activeWindowShadowSize</a>);
<a name="l01944"></a>01944     <span class="keywordflow">else</span>
<a name="l01945"></a>01945         <a class="code" href="classKWinInternal_1_1Client.html#a162">setShadowSize</a>(<a class="code" href="namespaceKWinInternal.html#a13">options</a>-&gt;<a class="code" href="classKWinInternal_1_1Options.html#o41">inactiveWindowShadowSize</a>);
<a name="l01946"></a>01946     }
<a name="l01947"></a>01947 
<a name="l01948"></a><a class="code" href="classKWinInternal_1_1Client.html#a170">01948</a> uint <a class="code" href="classKWinInternal_1_1Client.html#a170">Client::ruleOpacityInactive</a>()
<a name="l01949"></a>01949     {
<a name="l01950"></a>01950     <span class="keywordflow">return</span> rule_opacity_inactive;<span class="comment">// != 0 ;</span>
<a name="l01951"></a>01951     }
<a name="l01952"></a>01952 
<a name="l01953"></a><a class="code" href="classKWinInternal_1_1Client.html#a171">01953</a> uint <a class="code" href="classKWinInternal_1_1Client.html#a171">Client::ruleOpacityActive</a>()
<a name="l01954"></a>01954     {
<a name="l01955"></a>01955     <span class="keywordflow">return</span> rule_opacity_active;<span class="comment">// != 0;</span>
<a name="l01956"></a>01956     }
<a name="l01957"></a>01957     
<a name="l01958"></a><a class="code" href="classKWinInternal_1_1Client.html#a167">01958</a> <span class="keywordtype">bool</span> <a class="code" href="classKWinInternal_1_1Client.html#a167">Client::getWindowOpacity</a>() <span class="comment">//query translucency settings from X, returns true if window opacity is set</span>
<a name="l01959"></a>01959     {
<a name="l01960"></a>01960     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *data = 0;
<a name="l01961"></a>01961     Atom actual;
<a name="l01962"></a>01962     <span class="keywordtype">int</span> format, result;
<a name="l01963"></a>01963     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n, left;
<a name="l01964"></a>01964     result = XGetWindowProperty(qt_xdisplay(), <a class="code" href="classKWinInternal_1_1Client.html#a1">window</a>(), <a class="code" href="namespaceKWinInternal.html#a0">atoms</a>-&gt;<a class="code" href="classKWinInternal_1_1Atoms.html#o14">net_wm_window_opacity</a>, 0L, 1L, False, XA_CARDINAL, &amp;actual, &amp;format, &amp;n, &amp;left, <span class="comment">/*(unsigned char **)*/</span> &amp;data);
<a name="l01965"></a>01965     <span class="keywordflow">if</span> (result == Success &amp;&amp; data != None)
<a name="l01966"></a>01966         {
<a name="l01967"></a>01967         memcpy (&amp;opacity_, data, <span class="keyword">sizeof</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>));
<a name="l01968"></a>01968         custom_opacity = <span class="keyword">true</span>;
<a name="l01969"></a>01969 <span class="comment">//         setOpacity(opacity_ &lt; 0xFFFFFFFF, opacity_);</span>
<a name="l01970"></a>01970         <span class="keywordflow">return</span> TRUE;
<a name="l01971"></a>01971         }
<a name="l01972"></a>01972     <span class="keywordflow">return</span> FALSE;
<a name="l01973"></a>01973     }
<a name="l01974"></a>01974     
<a name="l01975"></a><a class="code" href="classKWinInternal_1_1Client.html#a166">01975</a> <span class="keywordtype">void</span> <a class="code" href="classKWinInternal_1_1Client.html#a166">Client::setCustomOpacityFlag</a>(<span class="keywordtype">bool</span> custom)
<a name="l01976"></a>01976     {
<a name="l01977"></a>01977     custom_opacity = custom;
<a name="l01978"></a>01978     }
<a name="l01979"></a>01979     
<a name="l01980"></a><a class="code" href="classKWinInternal_1_1Client.html#a172">01980</a> uint <a class="code" href="classKWinInternal_1_1Client.html#a172">Client::opacity</a>()
<a name="l01981"></a>01981     {
<a name="l01982"></a>01982     <span class="keywordflow">return</span> opacity_;
<a name="l01983"></a>01983     }
<a name="l01984"></a>01984 
<a name="l01985"></a><a class="code" href="classKWinInternal_1_1Client.html#a168">01985</a> <span class="keywordtype">int</span> <a class="code" href="classKWinInternal_1_1Client.html#a168">Client::opacityPercentage</a>()
<a name="l01986"></a>01986     {
<a name="l01987"></a>01987     <span class="keywordflow">return</span> int(100*((<span class="keywordtype">double</span>)opacity_/0xffffffff));
<a name="l01988"></a>01988     }
<a name="l01989"></a>01989     
<a name="l01990"></a><a class="code" href="classKWinInternal_1_1Client.html#a175">01990</a> <span class="keywordtype">bool</span> <a class="code" href="classKWinInternal_1_1Client.html#a175">Client::touches</a>(<span class="keyword">const</span> <a class="code" href="classKWinInternal_1_1Client.html">Client</a>* c)
<a name="l01991"></a>01991 <span class="comment">// checks if this client borders c, needed to test beep media player window state</span>
<a name="l01992"></a>01992     {
<a name="l01993"></a>01993     <span class="keywordflow">if</span> (<a class="code" href="classKWinInternal_1_1Client.html#a28">y</a>() == c-&gt;<a class="code" href="classKWinInternal_1_1Client.html#a28">y</a>() + c-&gt;<a class="code" href="classKWinInternal_1_1Client.html#a30">height</a>()) <span class="comment">// this bottom to c</span>
<a name="l01994"></a>01994         <span class="keywordflow">return</span> TRUE;
<a name="l01995"></a>01995     <span class="keywordflow">if</span> (<a class="code" href="classKWinInternal_1_1Client.html#a28">y</a>() + <a class="code" href="classKWinInternal_1_1Client.html#a30">height</a>() == c-&gt;<a class="code" href="classKWinInternal_1_1Client.html#a28">y</a>()) <span class="comment">// this top to c</span>
<a name="l01996"></a>01996         <span class="keywordflow">return</span> TRUE;
<a name="l01997"></a>01997     <span class="keywordflow">if</span> (<a class="code" href="classKWinInternal_1_1Client.html#a27">x</a>() == c-&gt;<a class="code" href="classKWinInternal_1_1Client.html#a27">x</a>() + c-&gt;<a class="code" href="classKWinInternal_1_1Client.html#a29">width</a>()) <span class="comment">// this right to c</span>
<a name="l01998"></a>01998         <span class="keywordflow">return</span> TRUE;
<a name="l01999"></a>01999     <span class="keywordflow">if</span> (<a class="code" href="classKWinInternal_1_1Client.html#a27">x</a>() + <a class="code" href="classKWinInternal_1_1Client.html#a29">width</a>() == c-&gt;<a class="code" href="classKWinInternal_1_1Client.html#a27">x</a>()) <span class="comment">// this left to c</span>
<a name="l02000"></a>02000         <span class="keywordflow">return</span> TRUE;
<a name="l02001"></a>02001     <span class="keywordflow">return</span> FALSE;
<a name="l02002"></a>02002     }
<a name="l02003"></a>02003     
<a name="l02004"></a>02004 <span class="keywordtype">void</span> Client::setXTitleHeightProperty(<span class="keywordtype">int</span> titleHeight)
<a name="l02005"></a>02005 {
<a name="l02006"></a>02006     <span class="keywordtype">long</span> data = titleHeight;
<a name="l02007"></a>02007     XChangeProperty(qt_xdisplay(), <a class="code" href="classKWinInternal_1_1Client.html#a2">frameId</a>(), <a class="code" href="namespaceKWinInternal.html#a0">atoms</a>-&gt;<a class="code" href="classKWinInternal_1_1Atoms.html#o18">net_wm_window_titleheight</a>, XA_CARDINAL, 32, PropModeReplace, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) &amp;data, 1L);
<a name="l02008"></a>02008 }
<a name="l02009"></a>02009     
<a name="l02010"></a>02010 <span class="preprocessor">#ifndef NDEBUG</span>
<a name="l02011"></a><a class="code" href="namespaceKWinInternal.html#a61">02011</a> <span class="preprocessor"></span>kdbgstream&amp; <a class="code" href="namespaceKWinInternal.html#a61">operator&lt;&lt;</a>( kdbgstream&amp; stream, <span class="keyword">const</span> <a class="code" href="classKWinInternal_1_1Client.html">Client</a>* cl )
<a name="l02012"></a>02012     {
<a name="l02013"></a>02013     <span class="keywordflow">if</span>( cl == NULL )
<a name="l02014"></a>02014         <span class="keywordflow">return</span> stream &lt;&lt; <span class="stringliteral">"\'NULL_CLIENT\'"</span>;
<a name="l02015"></a>02015     <span class="keywordflow">return</span> stream &lt;&lt; <span class="stringliteral">"\'ID:"</span> &lt;&lt; cl-&gt;<a class="code" href="classKWinInternal_1_1Client.html#a1">window</a>() &lt;&lt; <span class="stringliteral">";WMCLASS:"</span> &lt;&lt; cl-&gt;<a class="code" href="classKWinInternal_1_1Client.html#a127">resourceClass</a>() &lt;&lt; <span class="stringliteral">":"</span> &lt;&lt; cl-&gt;<a class="code" href="classKWinInternal_1_1Client.html#a126">resourceName</a>() &lt;&lt; <span class="stringliteral">";Caption:"</span> &lt;&lt; cl-&gt;<a class="code" href="classKWinInternal_1_1Client.html#a136">caption</a>() &lt;&lt; <span class="stringliteral">"\'"</span>;
<a name="l02016"></a>02016     }
<a name="l02017"></a><a class="code" href="namespaceKWinInternal.html#a62">02017</a> kdbgstream&amp; <a class="code" href="namespaceKWinInternal.html#a61">operator&lt;&lt;</a>( kdbgstream&amp; stream, <span class="keyword">const</span> <a class="code" href="namespaceKWinInternal.html#a24">ClientList</a>&amp; list )
<a name="l02018"></a>02018     {
<a name="l02019"></a>02019     stream &lt;&lt; <span class="stringliteral">"LIST:("</span>;
<a name="l02020"></a>02020     <span class="keywordtype">bool</span> first = <span class="keyword">true</span>;
<a name="l02021"></a>02021     <span class="keywordflow">for</span>( ClientList::ConstIterator it = list.begin();
<a name="l02022"></a>02022          it != list.end();
<a name="l02023"></a>02023          ++it )
<a name="l02024"></a>02024         {
<a name="l02025"></a>02025         <span class="keywordflow">if</span>( !first )
<a name="l02026"></a>02026             stream &lt;&lt; <span class="stringliteral">":"</span>;
<a name="l02027"></a>02027         first = <span class="keyword">false</span>;
<a name="l02028"></a>02028         stream &lt;&lt; *it;
<a name="l02029"></a>02029         }
<a name="l02030"></a>02030     stream &lt;&lt; <span class="stringliteral">")"</span>;
<a name="l02031"></a>02031     <span class="keywordflow">return</span> stream;
<a name="l02032"></a>02032     }
<a name="l02033"></a><a class="code" href="namespaceKWinInternal.html#a63">02033</a> kdbgstream&amp; <a class="code" href="namespaceKWinInternal.html#a61">operator&lt;&lt;</a>( kdbgstream&amp; stream, <span class="keyword">const</span> <a class="code" href="namespaceKWinInternal.html#a25">ConstClientList</a>&amp; list )
<a name="l02034"></a>02034     {
<a name="l02035"></a>02035     stream &lt;&lt; <span class="stringliteral">"LIST:("</span>;
<a name="l02036"></a>02036     <span class="keywordtype">bool</span> first = <span class="keyword">true</span>;
<a name="l02037"></a>02037     <span class="keywordflow">for</span>( ConstClientList::ConstIterator it = list.begin();
<a name="l02038"></a>02038          it != list.end();
<a name="l02039"></a>02039          ++it )
<a name="l02040"></a>02040         {
<a name="l02041"></a>02041         <span class="keywordflow">if</span>( !first )
<a name="l02042"></a>02042             stream &lt;&lt; <span class="stringliteral">":"</span>;
<a name="l02043"></a>02043         first = <span class="keyword">false</span>;
<a name="l02044"></a>02044         stream &lt;&lt; *it;
<a name="l02045"></a>02045         }
<a name="l02046"></a>02046     stream &lt;&lt; <span class="stringliteral">")"</span>;
<a name="l02047"></a>02047     <span class="keywordflow">return</span> stream;
<a name="l02048"></a>02048     }
<a name="l02049"></a>02049 <span class="preprocessor">#endif</span>
<a name="l02050"></a>02050 <span class="preprocessor"></span>
<a name="l02051"></a><a class="code" href="namespaceKWinInternal.html#a64">02051</a> QPixmap * <a class="code" href="namespaceKWinInternal.html#a64">kwin_get_menu_pix_hack</a>()
<a name="l02052"></a>02052     {
<a name="l02053"></a>02053     <span class="keyword">static</span> QPixmap p;
<a name="l02054"></a>02054     <span class="keywordflow">if</span> ( p.isNull() )
<a name="l02055"></a>02055         p = SmallIcon( <span class="stringliteral">"bx2"</span> );
<a name="l02056"></a>02056     <span class="keywordflow">return</span> &amp;p;
<a name="l02057"></a>02057     }
<a name="l02058"></a>02058 
<a name="l02059"></a>02059 } <span class="comment">// namespace</span>
<a name="l02060"></a>02060 
<a name="l02061"></a>02061 <span class="preprocessor">#include "client.moc"</span>
</pre></div></div>
<div id="bottom-nav">
<img src="../../common/bottom2.png" align="right" height="59" width="227" alt="KDE Logo">
</div>
<div class="bottom">
This file is part of the documentation for kwin Library Version 3.4.2.
</div>
<div class="bottom" style="color:#cccccc">
Documentation copyright &copy; 1996-2004 the KDE developers.<br>
Generated on Wed Jun 14 19:06:09 2006 by
<a href="http://www.doxygen.org/index.html">doxygen</a> 1.4.4 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>, &copy;&nbsp;1997-2003
</div>
</body>
</html>