kdelibs/kdeui

Dominik Haumann dhdev at gmx.de
Thu Mar 3 21:10:43 CET 2005


On Thursday 03 March 2005 20:25, Matt Rogers wrote:
> On Thursday 03 March 2005 12:47 pm, Dominik Haumann wrote:
> > CVS commit by dhaumann:
> >
> > fix: keep the right size when redock undocked widgets.
> > Tested with: mainly k3b and some other apps.
> > Now I can drag/drop/undock/dock widgets and the size is always correct.
> > PS: There is a huge bug with highResolution, which has effects here. I
> >     have fixed that locally here as well. So very probably a patch
> > follows
> >
> > :)
Btw, does this fix bugs/misbehaviors for example for Quanta as well? Andras?

>
> highResolution is a huge bug, and will be gone for KDE 4.0 :)
yes, but the even cooler thing is: I have a real fix for it *now* - not for 
KDE 4.0 :)

I try to explain the problems with high-resolution:


1st) kdockwidget.cpp gets the splitter position on many places by using
splitter->separatorPos(). This returns the separator position. KDockWidget 
assumes it is a value between 0..100 (so a procentual value), but if you 
turn on high resolution this is a value between 0..10000. Now assume the 
value is 10000 (eg. in kdocksplitter 100%), now it may happen, that 
KDockWidget (the very code I just changed) calculates "100-splitPos", which 
results in a value of "-9900", totally borked.

Solutions for this:
1) KDockWidget can always test for highResolution. This is ugly and the code 
for this sucks.
2) KDockSplitter should provide an extra function separatorPosInPercent(), 
which always returns a value of 0..100. This works perfectly as I've got it 
already implemented and tested. I will commit this probably later :)

Small example: k3b uses high resolution. Try to move a dockwidget, you will 
see the size always changes, it is *never* correct, because of the above 
described bug.


2nd) again highResolution. I try to explain why highResolution exists at 
all.
Assume we have not high resolution, so only a value of 0..100.
IF splitterKeepSize is not set, the splitter position always is a procentual 
value, which is right. But if you resize the windows (or do similar stuff 
like this) the splitter value always gets rounded to an integer value. That 
is, why the splitter only moves by ~8-10 pixel if you move it (see for 
example kate). It feels like there is something like a grid to which the 
splitter "snaps".
IF splitterKeepSize *is* set, there is a problem. The code still saves the 
splitter position in a procentual value, so if you resize a window, the 
splitter position must always be corrected, so that the dockwidget's size 
stays. Because of the "low splitter resolution" there are a lot of rounding 
bugs, -- in short: low resolution and keep size is ***totally unusable***.

If high resolution is set, the rounding bugs are not that bad, but they are 
still there, so it is still *unusable*! believe me! :) But I think that is 
why high resolution exists.
Now: One could think "why not use a double for the separator position"? - 
Yes! That is what I tried, but it is not possible, because it is not BC. 
I'd have to change so much code which results in changes in public API - 
forget it.


For all this I have a fix (along with some other fixes) - and it works like 
this:
I remove the highResolution stuff so the resolution will be always 100000.
(Of course, the interface stays, this is BC, but the function 
setHighResolution just has no effect anymore). 100000 is big enough to fix 
all rounding bugs for a screen resolution up to 10000x10000 pixel, so the 
user won't have/see bugs.

(side note: assume the screen resolution is 10000 (yes, I exaggerate 
intentionally), then 100000*10000 = 1.000.000.000. This still fits into an 
4-byte-int, so there is not buffer overflow)



I just subscribed to the list, so I cannot answer to other mails now.
There is an attempt to rewrite the dockwidgets (adymo afaik). Keep in mind:
KDE 3.5 will be already this year, there is not enough time to
1. rewrite it and even stay BC
2. fix all bugs after the rewrite is finished
If the rewrite is not BC, then other apps will not profit.
So in short: Is it really right to rewrite it? For KDE 4 maybe, but who 
knows what the Qt4-QDockWidgets bring?


I'd rather encourage all of you to try fix bugs in the current dockwidget 
stuff. If we all try *together*, we might even be successful ;)

Cheers,
-- 
Dominik
GPG Fingerprint: AC88 49E3 D8A5 0541 5B71 AC6E 29AA 1696 FF64 EDBC
User-Agent: KMail; Desktop: KDE; OS: Gentoo/Linux; *free software*


More information about the Kmdi-devel mailing list