[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kwin
Subject:    Re: Review Request 108513: Rewrite of KWin's Screen Edge Handling
From:       Martin_Gräßlin <mgraesslin () kde ! org>
Date:       2013-01-28 7:54:43
Message-ID: 20130128075443.28414.46551 () vidsolbach ! de
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://git.reviewboard.kde.org/r/108513/
-----------------------------------------------------------

(Updated Jan. 28, 2013, 8:54 a.m.)


Review request for kwin and Arthur Arlt.


Changes
-------

* ScreenEdges became a singleton
* modified event handling to support XEvent and xcb_generic_event_t
* added an approach area which is emitting a signal and passed through to the effects.


Description
-------

Change the way how screen edges interact with Effects/Scripts

The main difference is that the activation of an edge is no longer
broadcasted to all effects and scripts, but instead a passed in slot of
the Effect/Script is invoked.

For this the EffectsHandler API is changed to take the Effect as an
argument to (un)reserveElectricBorder. As callback slot the existing
borderActivated is used.

In addition the ScreenEdge monitors the object for beeing destroyed and
unregisters the the edge automatically. This removes the need from the
Effect to call unregister in the dtor.

BUG: 309695
FIXED-IN: 4.11

Rewrite of KWin's Screen Edge Handling

This rewrite is mostly motivated by the need to handle multi screen
setups correctly. That is have edges per screen and not for the combined
geometry. Also porting from XLib to XCB has been a motivation for the
rewrite.

The design of the new ScreenEdge handling is described in the
documentation of ScreenEdges in screenedge.h.

In addition the following changes have been performed:
* move configuration from Options to ScreenEdge
* add screen edge information to Workspace::supportInformation (obviously
  replaces what had been read from Options)
* have Workspace hold a pointer to ScreenEdges instead of an object
* forward declaration of ScreenEdges in workspaces.h, this explains the
  seemingly unrelated changes of just another include in some files

BUG: 290887
FIXED-IN: 4.11

Do not update screen edges when compositing settings changes

The comment says it all: update all settings which can be done through
the compositing KCM. Years ago screen edges was in the composite KCM, but
it no longer is. So there is no need to update the edges when the
compositing settings changes.

Remove interaction of quick tiling with ScreenEdges

Quick tiling/maximizing of Clients is completely independent of the
screen edges functionality. That is it determines the borders itself.
Nevertheless there has been some code still around which interacted with
the screen edges each time a window was moved. This code is completely
useless.

Remove unused screen edge related methods from kwineffects interface

No effect has ever used these methods and there is no reason why an
effect should use them. Reserve/unreserve is sufficient as the effect
will be notified anyway.

Adding some convenient functions to wrap xcb calls

Commonly needed functionality, like
* move/resize windows
* restack windows
* restack to top of stack


This addresses bugs 290887 and 309695.
    http://bugs.kde.org/show_bug.cgi?id=290887
    http://bugs.kde.org/show_bug.cgi?id=309695


Diffs (updated)
-----

  kwin/composite.cpp c27b37f21ec946775497047837c00dc7107c7756 
  kwin/effects.h 8d721fceef3e0a041e5a38088aef0de3a897d58d 
  kwin/effects.cpp 6845b748e46d0ffec42af58987dd255ff7a03bbb 
  kwin/effects/cube/cube.cpp 3fffbd0577194c8c16bf608a04a2eeedd84b3ba1 
  kwin/effects/desktopgrid/desktopgrid.cpp 741723191cbcd4bf0457fe3d962ca6bc2c520065 
  kwin/effects/flipswitch/flipswitch.cpp 445405edb93c39d9e776e6bb7ae40a233a6ab740 
  kwin/effects/presentwindows/presentwindows.cpp 3b13533af17b6370bd0bec5c4038f0f2d61172f2 
  kwin/events.cpp a39aec07fc9f69438eb38d5569ba4ee0a218db42 
  kwin/geometry.cpp 7eb7e94d2804aa512b3da23b81c40ffe4b899811 
  kwin/layers.cpp 78f07eb3db800e418b50e7510545ea5b50aff5ad 
  kwin/libkwineffects/kwineffects.h 2b8ede9e46d7b49f6dd2804c7979967e976281ad 
  kwin/options.h f458637b7f7f8210f6c9de3497ad1d49df8261c0 
  kwin/options.cpp 0f8597cf62eaf4b06e4536666874c403f7a99168 
  kwin/screenedge.h 6dd1956332958d11e768c01eb3f91ae411a5cc77 
  kwin/screenedge.cpp fb6209c1994345cf36da8dbcf097bb3596890cf3 
  kwin/scripting/scriptedeffect.h 830997b50b2f2d1eaf2aa828b94b110612b2080b 
  kwin/scripting/scriptedeffect.cpp e9c05091087c8303da53d998d06dc46748b9fdce 
  kwin/scripting/scripting.h 077fe667dbf76e4165f10f0f19c8700e54e1350e 
  kwin/scripting/scripting.cpp 6c6e258656eb62bf5811984472f0d0776420b4d5 
  kwin/scripting/scriptingutils.h 3ed78458131a7fb535e38a08f3c6e7467e9e231b 
  kwin/workspace.h b26725d0afdcba339aa79348e824bacaec13f32f 
  kwin/workspace.cpp 9183fd66dace05db6d2ad0b55c4c26e1a288ce95 
  kwin/xcbutils.h caa28f6ac1ea54932c2fa8566c971078773de880 

Diff: http://git.reviewboard.kde.org/r/108513/diff/


Testing
-------

* effects on various edges
* action on one edge
* activated/deactivated actions
* turned on off screen
* switch desktop (terrible feature)
* switch desktop when moving Clients

TODO: unit test for base functionality


Thanks,

Martin Gräßlin


[Attachment #5 (text/html)]

<html>
 <body>
  <div style="font-family: Verdana, Arial, Helvetica, Sans-Serif;">
   <table bgcolor="#f9f3c9" width="100%" cellpadding="8" style="border: 1px #c9c399 \
solid;">  <tr>
     <td>
      This is an automatically generated e-mail. To reply, visit:
      <a href="http://git.reviewboard.kde.org/r/108513/">http://git.reviewboard.kde.org/r/108513/</a>
  </td>
    </tr>
   </table>
   <br />


<table bgcolor="#fefadf" width="100%" cellspacing="0" cellpadding="8" \
style="background-image: \
url('http://git.reviewboard.kde.org/static/rb/images/review_request_box_top_bg.ab6f3b1072c9.png'); \
background-position: left top; background-repeat: repeat-x; border: 1px black \
solid;">  <tr>
  <td>

<div>Review request for kwin and Arthur Arlt.</div>
<div>By Martin Gräßlin.</div>


<p style="color: grey;"><i>Updated Jan. 28, 2013, 8:54 a.m.</i></p>



<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Changes</h1>
<table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: \
1px solid #b8b5a0">  <tr>
  <td>
   <pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: \
-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: \
                break-word;">* ScreenEdges became a singleton
* modified event handling to support XEvent and xcb_generic_event_t
* added an approach area which is emitting a signal and passed through to the \
effects.</pre>  </td>
 </tr>
</table>




<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Description </h1>
 <table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" \
style="border: 1px solid #b8b5a0">  <tr>
  <td>
   <pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: \
-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: \
break-word;">Change the way how screen edges interact with Effects/Scripts

The main difference is that the activation of an edge is no longer
broadcasted to all effects and scripts, but instead a passed in slot of
the Effect/Script is invoked.

For this the EffectsHandler API is changed to take the Effect as an
argument to (un)reserveElectricBorder. As callback slot the existing
borderActivated is used.

In addition the ScreenEdge monitors the object for beeing destroyed and
unregisters the the edge automatically. This removes the need from the
Effect to call unregister in the dtor.

BUG: 309695
FIXED-IN: 4.11

Rewrite of KWin&#39;s Screen Edge Handling

This rewrite is mostly motivated by the need to handle multi screen
setups correctly. That is have edges per screen and not for the combined
geometry. Also porting from XLib to XCB has been a motivation for the
rewrite.

The design of the new ScreenEdge handling is described in the
documentation of ScreenEdges in screenedge.h.

In addition the following changes have been performed:
* move configuration from Options to ScreenEdge
* add screen edge information to Workspace::supportInformation (obviously
  replaces what had been read from Options)
* have Workspace hold a pointer to ScreenEdges instead of an object
* forward declaration of ScreenEdges in workspaces.h, this explains the
  seemingly unrelated changes of just another include in some files

BUG: 290887
FIXED-IN: 4.11

Do not update screen edges when compositing settings changes

The comment says it all: update all settings which can be done through
the compositing KCM. Years ago screen edges was in the composite KCM, but
it no longer is. So there is no need to update the edges when the
compositing settings changes.

Remove interaction of quick tiling with ScreenEdges

Quick tiling/maximizing of Clients is completely independent of the
screen edges functionality. That is it determines the borders itself.
Nevertheless there has been some code still around which interacted with
the screen edges each time a window was moved. This code is completely
useless.

Remove unused screen edge related methods from kwineffects interface

No effect has ever used these methods and there is no reason why an
effect should use them. Reserve/unreserve is sufficient as the effect
will be notified anyway.

Adding some convenient functions to wrap xcb calls

Commonly needed functionality, like
* move/resize windows
* restack windows
* restack to top of stack</pre>
  </td>
 </tr>
</table>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Testing </h1>
<table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: \
1px solid #b8b5a0">  <tr>
  <td>
   <pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: \
-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: \
                break-word;">* effects on various edges
* action on one edge
* activated/deactivated actions
* turned on off screen
* switch desktop (terrible feature)
* switch desktop when moving Clients

TODO: unit test for base functionality</pre>
  </td>
 </tr>
</table>



<div style="margin-top: 1.5em;">
 <b style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Bugs: </b>


 <a href="http://bugs.kde.org/show_bug.cgi?id=290887">290887</a>, 

 <a href="http://bugs.kde.org/show_bug.cgi?id=309695">309695</a>


</div>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Diffs</b> \
(updated)</h1> <ul style="margin-left: 3em; padding-left: 0;">

 <li>kwin/composite.cpp <span style="color: \
grey">(c27b37f21ec946775497047837c00dc7107c7756)</span></li>

 <li>kwin/effects.h <span style="color: \
grey">(8d721fceef3e0a041e5a38088aef0de3a897d58d)</span></li>

 <li>kwin/effects.cpp <span style="color: \
grey">(6845b748e46d0ffec42af58987dd255ff7a03bbb)</span></li>

 <li>kwin/effects/cube/cube.cpp <span style="color: \
grey">(3fffbd0577194c8c16bf608a04a2eeedd84b3ba1)</span></li>

 <li>kwin/effects/desktopgrid/desktopgrid.cpp <span style="color: \
grey">(741723191cbcd4bf0457fe3d962ca6bc2c520065)</span></li>

 <li>kwin/effects/flipswitch/flipswitch.cpp <span style="color: \
grey">(445405edb93c39d9e776e6bb7ae40a233a6ab740)</span></li>

 <li>kwin/effects/presentwindows/presentwindows.cpp <span style="color: \
grey">(3b13533af17b6370bd0bec5c4038f0f2d61172f2)</span></li>

 <li>kwin/events.cpp <span style="color: \
grey">(a39aec07fc9f69438eb38d5569ba4ee0a218db42)</span></li>

 <li>kwin/geometry.cpp <span style="color: \
grey">(7eb7e94d2804aa512b3da23b81c40ffe4b899811)</span></li>

 <li>kwin/layers.cpp <span style="color: \
grey">(78f07eb3db800e418b50e7510545ea5b50aff5ad)</span></li>

 <li>kwin/libkwineffects/kwineffects.h <span style="color: \
grey">(2b8ede9e46d7b49f6dd2804c7979967e976281ad)</span></li>

 <li>kwin/options.h <span style="color: \
grey">(f458637b7f7f8210f6c9de3497ad1d49df8261c0)</span></li>

 <li>kwin/options.cpp <span style="color: \
grey">(0f8597cf62eaf4b06e4536666874c403f7a99168)</span></li>

 <li>kwin/screenedge.h <span style="color: \
grey">(6dd1956332958d11e768c01eb3f91ae411a5cc77)</span></li>

 <li>kwin/screenedge.cpp <span style="color: \
grey">(fb6209c1994345cf36da8dbcf097bb3596890cf3)</span></li>

 <li>kwin/scripting/scriptedeffect.h <span style="color: \
grey">(830997b50b2f2d1eaf2aa828b94b110612b2080b)</span></li>

 <li>kwin/scripting/scriptedeffect.cpp <span style="color: \
grey">(e9c05091087c8303da53d998d06dc46748b9fdce)</span></li>

 <li>kwin/scripting/scripting.h <span style="color: \
grey">(077fe667dbf76e4165f10f0f19c8700e54e1350e)</span></li>

 <li>kwin/scripting/scripting.cpp <span style="color: \
grey">(6c6e258656eb62bf5811984472f0d0776420b4d5)</span></li>

 <li>kwin/scripting/scriptingutils.h <span style="color: \
grey">(3ed78458131a7fb535e38a08f3c6e7467e9e231b)</span></li>

 <li>kwin/workspace.h <span style="color: \
grey">(b26725d0afdcba339aa79348e824bacaec13f32f)</span></li>

 <li>kwin/workspace.cpp <span style="color: \
grey">(9183fd66dace05db6d2ad0b55c4c26e1a288ce95)</span></li>

 <li>kwin/xcbutils.h <span style="color: \
grey">(caa28f6ac1ea54932c2fa8566c971078773de880)</span></li>

</ul>

<p><a href="http://git.reviewboard.kde.org/r/108513/diff/" style="margin-left: \
3em;">View Diff</a></p>







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




  </div>
 </body>
</html>



_______________________________________________
kwin mailing list
kwin@kde.org
https://mail.kde.org/mailman/listinfo/kwin


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic