<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="https://git.reviewboard.kde.org/r/115442/">https://git.reviewboard.kde.org/r/115442/</a>
</td>
</tr>
</table>
<br />
<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
<p style="margin-top: 0;">On February 3rd, 2014, 9:36 a.m. CET, <b>Martin Gräßlin</b> wrote:</p>
<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
<table width="100%" border="0" bgcolor="white" style="border: 1px solid #C0C0C0; border-collapse: collapse; margin: 2px padding: 2px;">
<thead>
<tr>
<th colspan="4" bgcolor="#F0F0F0" style="border-bottom: 1px solid #C0C0C0; font-size: 9pt; padding: 4px 8px; text-align: left;">
<a href="https://git.reviewboard.kde.org/r/115442/diff/1/?file=241482#file241482line1426" style="color: black; font-weight: bold; text-decoration: underline;">src/netwm.h</a>
<span style="font-weight: normal;">
(Diff revision 1)
</span>
</th>
</tr>
</thead>
<tbody style="background-color: #e4d9cb; padding: 4px 8px; text-align: center;">
<tr>
<td colspan="4"><pre style="font-size: 8pt; line-height: 140%; margin: 0; ">protected:</pre></td>
</tr>
</tbody>
<tbody>
<tr>
<th bgcolor="#f0f0f0" style="border-right: 1px solid #C0C0C0;" align="right"><font size="2">1426</font></th>
<td bgcolor="#ffffff" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "> <span class="n">virtual</span> <span class="kt">void</span> <span class="nf">changeState</span><span class="p">(</span><span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">state</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">mask</span><span class="p">)</span></pre></td>
<th bgcolor="#f0f0f0" style="border-left: 1px solid #C0C0C0; border-right: 1px solid #C0C0C0;" align="right"><font size="2">1426</font></th>
<td bgcolor="#ffffff" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "> <span class="n">virtual</span> <span class="kt">void</span> <span class="nf">changeState</span><span class="p">(</span><span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">state</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">mask</span><span class="p">)</span></pre></td>
</tr>
<tr>
<th bgcolor="#f0f0f0" style="border-right: 1px solid #C0C0C0;" align="right"><font size="2">1427</font></th>
<td bgcolor="#ffffff" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "> <span class="p">{</span></pre></td>
<th bgcolor="#f0f0f0" style="border-left: 1px solid #C0C0C0; border-right: 1px solid #C0C0C0;" align="right"><font size="2">1427</font></th>
<td bgcolor="#ffffff" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "> <span class="p">{</span></pre></td>
</tr>
<tr>
<th bgcolor="#f0f0f0" style="border-right: 1px solid #C0C0C0;" align="right"><font size="2">1428</font></th>
<td bgcolor="#ffffff" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "> <span class="n">Q_UNUSED</span><span class="p">(</span><span class="n">state</span><span class="p">);</span></pre></td>
<th bgcolor="#f0f0f0" style="border-left: 1px solid #C0C0C0; border-right: 1px solid #C0C0C0;" align="right"><font size="2">1428</font></th>
<td bgcolor="#ffffff" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "> <span class="n">Q_UNUSED</span><span class="p">(</span><span class="n">state</span><span class="p">);</span></pre></td>
</tr>
<tr>
<th bgcolor="#f0f0f0" style="border-right: 1px solid #C0C0C0;" align="right"><font size="2">1429</font></th>
<td bgcolor="#ffffff" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "> <span class="n">Q_UNUSED</span><span class="p">(</span><span class="n">mask</span><span class="p">);</span></pre></td>
<th bgcolor="#f0f0f0" style="border-left: 1px solid #C0C0C0; border-right: 1px solid #C0C0C0;" align="right"><font size="2">1429</font></th>
<td bgcolor="#ffffff" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "> <span class="n">Q_UNUSED</span><span class="p">(</span><span class="n">mask</span><span class="p">);</span></pre></td>
</tr>
<tr>
<th bgcolor="#f0f0f0" style="border-right: 1px solid #C0C0C0;" align="right"><font size="2">1430</font></th>
<td bgcolor="#ffffff" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "> <span class="p">}</span></pre></td>
<th bgcolor="#f0f0f0" style="border-left: 1px solid #C0C0C0; border-right: 1px solid #C0C0C0;" align="right"><font size="2">1430</font></th>
<td bgcolor="#ffffff" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "> <span class="p">}</span></pre></td>
</tr>
</tbody>
</table>
<pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">This method should also get adjusted but as it's virtual it will be a true API break.
What's the best way? Deprecate this method and add a new one instead?</pre>
</blockquote>
<p>On February 3rd, 2014, 1:28 p.m. CET, <b>Aurélien Gâteau</b> wrote:</p>
<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
<pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">The problem with deprecating virtual methods is you can do it that way:
#1
virtual void changeState(NET::States states, NET::WindowTypeMask mask);
KDE_DEPRECATED virtual void changeState(unsigned long states, unsigned long mask);
But then your user has two possible methods to override, which one should he do?
Or you can do it that way:
#2
virtual void changeState(NET::States states, NET::WindowTypeMask mask);
KDE_DEPRECATED void changeState(unsigned long states, unsigned long mask)
{
changeState(NET::States(states), NET::WindowTypeMask(mask));
}
(+) Only one method can be overridden
(-) Existing code which used to override the deprecated version no longer works.
Or you can do it that way:
#3
void changeState(NET::States states, NET::WindowTypeMask mask)
{
changeState(long(states), long(mask));
}
KDE_DEPRECATED virtual void changeState(unsigned long states, unsigned long mask);
(+) Only one method can be overridden
(+) Existing code which used to override the deprecated version still works.
(-) The method to override is the deprecated one, so it's not really deprecated :/
With that in mind, I would go for the future-clean version: change the method signature and break the ABI. Since this method is not meant to be called by outside code, it's not going to make any difference with #2.</pre>
</blockquote>
</blockquote>
<pre style="margin-left: 1em; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">OK, I'm going for breaking the ABI. It's not that big deal as I think only KWin implements it and we already broke the ABI of NETWinInfo quite a bit and KWin has override flags added to all methods.</pre>
<br />
<p>- Martin</p>
<br />
<p>On February 3rd, 2014, 9:34 a.m. CET, Martin Gräßlin wrote:</p>
<table bgcolor="#fefadf" width="100%" cellspacing="0" cellpadding="8" style="background-image: url('https://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 KDE Frameworks.</div>
<div>By Martin Gräßlin.</div>
<p style="color: grey;"><i>Updated Feb. 3, 2014, 9:34 a.m.</i></p>
<div style="margin-top: 1.5em;">
<b style="color: #575012; font-size: 10pt;">Repository: </b>
kwindowsystem
</div>
<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;">Introduce QFlags for NET::Action
API of NETWinInfo adjusted.
Introduce QFlags for NET::State
API in NET* classes and KWindowInfo and KWindowSystem adjusted.
Introduce QFlags for NET::WindowTypeMasks
API in NET* classes and KWindowInfo is adjusted to make use
of the new Type instead of using long values.
Introduce QFlags for NET::Property and NET::Property2
API of KWindowInfo is adjusted to take NET::Properties and
NET::Properties2 as arguments instead of usigned long int.
The ctors of the NET* classes are adjusted which just take
NET::Properties. The other ctors take the properties array
which needs further adjustements first.
In addition a WMAllProperties and WM2AllProperties enum value
is declared to simplify matching all properties.</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;">Unit tests still succeed.
Test compiled KWin, it needs adjustments but only where int values are used (e.g. passing 0).</pre>
</td>
</tr>
</table>
<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Diffs</b> </h1>
<ul style="margin-left: 3em; padding-left: 0;">
<li>src/kwindowinfo_p_x11.h <span style="color: grey">(a74ea32aa51407d0a168dd807c29787ce856f2af)</span></li>
<li>src/kwindowinfo_p.h <span style="color: grey">(1ad6cf89e6e9dd8b070d0167410a1a758594f734)</span></li>
<li>src/kwindowinfo.cpp <span style="color: grey">(790c4458075ff0ddc22102111e2d96f8c636f0ee)</span></li>
<li>src/kwindowinfo.h <span style="color: grey">(36cbbcfede41e00f9c0aaa5ee38bc3708065ffd4)</span></li>
<li>autotests/netwininfotestwm.cpp <span style="color: grey">(585994fa0cafe63ea88beabe32bf4c73b095b3f1)</span></li>
<li>autotests/netwininfotestclient.cpp <span style="color: grey">(77b3ab163dcb2bf8a9d0aaf8dd0c7410865ceeca)</span></li>
<li>autotests/kwindowinfox11test.cpp <span style="color: grey">(18cfe39288c280ee9a6afb7b8565215365b114d1)</span></li>
<li>src/netwm_p.h <span style="color: grey">(41792b330f7405034f4d51fb31a4de5dd674b6d0)</span></li>
<li>src/netwm_def.h <span style="color: grey">(8b1ccb8bd731aefb9559c8f2b450337b0312ed4d)</span></li>
<li>src/netwm.cpp <span style="color: grey">(84eb137492e0afaaac80e8d26561fd8f8aff9c27)</span></li>
<li>src/netwm.h <span style="color: grey">(393a29de3153a8b291b9fb249bd3eaeb1ba4e7d5)</span></li>
<li>src/kwindowsystem_x11.cpp <span style="color: grey">(01c78c1debf95d5a176e2153139da19abf383c41)</span></li>
<li>src/kwindowsystem.h <span style="color: grey">(3de0fea179dd468a78a265808fc64704027ec30d)</span></li>
<li>src/kwindowinfo_x11.cpp <span style="color: grey">(eda31f2d94e23b1dd411a40fd65e96f65c389ac0)</span></li>
</ul>
<p><a href="https://git.reviewboard.kde.org/r/115442/diff/" style="margin-left: 3em;">View Diff</a></p>
</td>
</tr>
</table>
</div>
</body>
</html>