Summary: | Visual glitch (artifacts) around space information in Dolphin 2.0 | ||
---|---|---|---|
Product: | [Unmaintained] kdelibs | Reporter: | Nikola Schnelle <n.schnelle> |
Component: | kdeui | Assignee: | Hugo Pereira Da Costa <hugo.pereira.da.costa> |
Status: | RESOLVED FIXED | ||
Severity: | normal | CC: | alvarenga, cfeck, chalkerx, hein, hugo.pereira.da.costa |
Priority: | NOR | ||
Version: | unspecified | ||
Target Milestone: | --- | ||
Platform: | Ubuntu | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | ||
Sentry Crash Report: | |||
Attachments: |
A test ui file to observe the bug.
patch to kcapacitybar KSignalPlotter test *.ui file. A little different glitches with Qt-only widgets. *.ui test file. |
Description
Nikola Schnelle
2012-01-07 14:21:40 UTC
This happens on KDE 4.8 RC2 and in KDE 4.8 "nightly" from neon ppa. Also I should note that it happens with both, raster and native graphic system. I can't see the video, it's flash-only. I uploaded it to sendspace (its only 2mb): http://www.sendspace.com/file/tx1bxm This happens to me, too. To observe the bug, you must: 1) Have free space indicator enabled in status bar. 2) Have a panel on the right of the view-panel. Any panel is enough: split view (2 panels), info panel, entrance points (moved to the right if the view panel) or any other. 3) Use oxygen style. 4) Hover the resize grip near the free space indicator. Given #4, i am not even sure if this is a dolphin, oxygen style, or a qt bug. Can someone try this on old dolphin? s/Given #4/Given #3/ Not a dolphin bug. I reproduced this in an *.ui file. Will upload it after cleanup. Created attachment 67580 [details]
A test ui file to observe the bug.
0) Enable Oxygen style.
1) Open the attached file in Qt Designer.
2) Launch with Ctrl-R (not necessary).
3) Hover the resize grip in the center.
Nikola Schnelle, can you confirm my testcase? I can reproduce this, reassigning to Oxygen. I can confirm that it is oxygen style bug. It doesn't happen with qtcurve. Well it may still be in the widget, but Hugo is probably still well-qualified to look at it. KSignalPlotter widget is also affected (but the artifacts dissapear when the resize grip is unhovered, possibly becase of refresh). Again, only with oxygen style. I am not attaching a new testcase, this is trivial to reproduce using the old testcase. Is Hugo able to see this bug report? Should somebody add him to CC? Can reproduce with the provided .ui file. Will investigate. (its related to splitterProxy. Funnily enough, it does not appear with bespin, which has the same feature). its actually a bug in kcapacitybar. l374: drawCapacityBar(&p, event->rect()); and then: l170: void KCapacityBar::drawCapacityBar(QPainter *p, const QRect &rect) const { if (d->ce_capacityBar) { QStyleOptionProgressBar opt; opt.initFrom(this); opt.rect = rect; } } Passing the event rect to the option is incorrect. event rect should be set as a mask to the painter, and full widget rect should be passed to the option. At least that's what's expected for all other widgets by the widget style. I can workaround it in oxygen, but it should definitely be fixed here. Reassigning to kdelibs. PS: the fact that it only shows up in oxygen is because the new "splitterProxy" class results in some painting of the widget that is much smaller than the actual widget rect, and is interpreted (due to the bug above) as the widget rect by the style. Created attachment 67661 [details]
patch to kcapacitybar
Patch to fix rendering of kcapacitybar, notably for oxygen.
Created attachment 67662 [details] KSignalPlotter test *.ui file. I can observe this bug with KSignalPlotter too (see comment #12). This is the modified testcase. Issue with ksignalplotter is different, in the sence that oxygen is not responsible to render the inside part of the widget, but it is likely a similar issue from the widget's paint event, not dealing with the event->rect properly. (which, -because of oxygen, this time- does not match the widget rect). Note that it does not happen with regular widgets (such as QTextEdit, QListView, or Dolphin's main view). I do not have the skills (nor the time) to debug ksignalplotter, sadly enough. Can you please check the code for other kde widgets, too (in the sense of the clipping and paint area)? I mean the code, not the behavior, because this can (?) be invisible for some other reasons, like widget refresh. By the way, i have a simular glitch in the dolphin 2.0 with the main view. But it occurs only for 1-2 frames (didn't record), and is harder to observe. The bug with ksignalplotter also appears with bespin (which has a similar splitterproxy feature). This confirms it is a widget issue, IMO and not an oxygen one. Why it did not happen with kcapacitybar is likely due to the way by which the capacitybar is rendered by bespin (i.e. workaround the bug above). For checking other widgets, I can't do so (for lack of time, and there are quite some of them). For dolphin, yes I see the same thing, but it is different. This is some rendering glitch when showing/hiding a transparent widget -the proxy-, which Qt paints opaque for a frame or to before dealing with the transparency. In the plotter bug, the rect stays until the next interaction with the widget. (In reply to comment #22) > For dolphin, yes I see the same thing, but it is different. This is some > rendering glitch when showing/hiding a transparent widget -the proxy-, which Qt > paints opaque for a frame or to before dealing with the transparency. Sorry, i don't understand this fully. What is the cause of this? Is it a Qt bug (i can reproduce it with Qt-only widgets and oxygen style)? > In the plotter bug, the rect stays until the next interaction with the widget. Should i open separate bugs, if the reasons are different? Created attachment 67668 [details] A little different glitches with Qt-only widgets. *.ui test file. See comment #21 and comment #23. > Sorry, i don't understand this fully. What is the cause of this? Is it a Qt bug
> (i can reproduce it with Qt-only widgets and oxygen style)?
Yes and no. This is similar (in some sense) to the artifacts you are seing when you resize a window (to larger): it takes some frames for the widgets inside the window to update and occupy the window space. Right ?
For the splitter artifact in dolphin, and possibly any widget, the same thing happen: takes some frames for the shown/hidden widget to be rendered properly on screen.
Not much can be done about it.
With the attachment 3 [details], I here cannot see the artifact you describe. But I believe it is the same as for dolphin.
Its occurence depends on the machine load, the graphics card, etc. Definitly something different, in the sence that the artifacts dissapears "by itself", a few frames later, whereas the ksignalplotter artifacts, or the kcapacitybar don't. (they only dissapear after user action of some sort). (You agree ?)
Really something more similar to window-resize type or artifacts.
(In reply to comment #25) > For the splitter artifact in dolphin, and possibly any widget, the same thing > happen: takes some frames for the shown/hidden widget to be rendered properly > on screen. > > Not much can be done about it. Hm. When resizing, there is a sense in painting a bigger window faster and updating it's contents a bit later (async). When hovering, why can't be the widget appeareance be delayed until it is propertly rendered (and hidden or transparent until that happens)? Wouldn't that look cleaner? So, the main question: can that widget be hidden (transparent) by default (until rendered), and not filled with background color, as it is now? > So, the main question: can that widget be hidden (transparent) by default
> (until rendered), and not filled with background color, as it is now?
Not inside oxygen.
(In reply to comment #26) > With the attachment 3 [details], I here cannot see the artifact you describe. But I > believe it is the same as for dolphin. Yes, you are right, it looks exactly the same as with the dolphin main view, and dissapears on the next frame. It's hard to observe (it does not happen all the time, like with ksignalplotter or kcapacitybar). > Its occurence depends on the machine load, the graphics card, etc. Definitly > something different, in the sence that the artifacts dissapears "by itself", a > few frames later, whereas the ksignalplotter artifacts, or the kcapacitybar > don't. (they only dissapear after user action of some sort). (You agree ?) True. > Really something more similar to window-resize type or artifacts. Yes. But, can that widget be transparent by default (not opaque and filled with bg color) until rendered completely? That would look nicer. (In reply to comment #28) > > So, the main question: can that widget be hidden (transparent) by default > > (until rendered), and not filled with background color, as it is now? > Not inside oxygen. So, could that issue (testcase #3 and Dolphin main view) be fixed inside Qt? ... possibly yes :) as far as oxygen is concerned, we already make the widget as transparent as we can ... (In reply to comment #31) > ... possibly yes :) > as far as oxygen is concerned, we already make the widget as transparent as we > can ... Ok, thanks. So, what should be done next? It looks like the issue with kcapacitybar (the original cause for this bugreport) is fixed. Minor glitches for 1-2 frames have a totally different cause (inside Qt?). Should this bugreport be closed and new one opened against KSignalPlotter? Or should this bugreport's description be changed? This report is not fixed yet, cause the patch above has not been committed. I'll post a review request to do so. Will close the bug once the code is actually fixed. I'd recommend opening another bug report for signalplotter. Assign it to ksysguard, possibly with a link to this bug to advertise the discussion we had. For the other types of glitches, I'll try optimize things on my side (possibly by trying not to hide/show the invisible widget as often as it is now, though I can't guarantee success). Thanks for reporting ! Guys, it is very hard for me, non-dev, to follow your discussion. I found one more rendering glitch, and because I don't know if you are already talking about it, I made video: http://www.sendspace.com/file/06thaq (2mb). (In reply to comment #34) > Guys, it is very hard for me, non-dev, to follow your discussion. I found one > more rendering glitch, and because I don't know if you are already talking > about it, I made video: http://www.sendspace.com/file/06thaq (2mb). That't exactly the thing i was talking about for the last several comments (starting with comment #21). @Nikola and Nikita Just for my information: can you guys reproduce the same glitches in dolphin when using bespin as opposed to oxygen ? (here I can't actually see them with oxygen, but I did see it every now and then in case of heavy load of my machine). Hmm it seems that bespin is not available in oneiric repositories. So I cannot test bespin at the moment. But if it means something, I cannot reproduce this glitches with qtcurve. Nope. Won't learn anything with QtCurve: does not have the splitterProxy feature (that is: this -not so- invisible widget, showing up on top of splitters, to increase the hit area. Bespin is the only other style that also has this feature; I stole it from there, in fact. Or rather, we developed it in parallel). I managed to install kde-style-bespin natty deb package in oneiric. I don't see this glithes with bespin. So my (non-dev) thinking is this. I think these KSignalPlotter glitches (my video from comment #34) makes glitches to space information widget in Dolphin. Because space information widget taches KSignalPlotter. So KSignalPlotter glitch makes glitch to space information widget. I am not a developer and I am just trying to help. I am sorry if my logic is terribly wrong on this :) (In reply to comment #36) > @Nikola and Nikita > Just for my information: can you guys reproduce the same glitches in dolphin > when using bespin as opposed to oxygen ? > (here I can't actually see them with oxygen, but I did see it every now and > then in case of heavy load of my machine). No, i can't reproduce this with bespin on my netbook. I have compiled bespin from svn just now (bespin-svn 1463-1) with default settings. It has that feature. Thanks for the info. I'll investigate the differences between our two codes *** Bug 291327 has been marked as a duplicate of this bug. *** Git commit 48e090787b1b2e70db397ac1c6a0e0dd7e2934d5 by Hugo Pereira Da Costa. Committed on 14/01/2012 at 20:15. Pushed by hpereiradacosta into branch 'KDE/4.8'. fix the rect passed to kcapacitybar paint method. REVIEW: 103669 M +2 -1 kdeui/widgets/kcapacitybar.cpp http://commits.kde.org/kdelibs/48e090787b1b2e70db397ac1c6a0e0dd7e2934d5 Closing for good this time Git commit 179c16b216f517480f5a7bec0a074696c3e02349 by Hugo Pereira Da Costa. Committed on 15/01/2012 at 21:43. Pushed by hpereiradacosta into branch 'master'. disable enable parent widget update when hiding. This seems to prevent some artifacts in e.g. amarok, or dolphin (to be confirmed). M +2 -0 kstyles/oxygen/oxygensplitterproxy.cpp http://commits.kde.org/kde-workspace/179c16b216f517480f5a7bec0a074696c3e02349 Previous commit seems to improve things on my side, (no more glitch, in fact) for amarok at least. Can't test on dolphin since I could not see the glitch in the first place. Will backport to KDE4.8. Please double check whenever you have a chance. I can confirm that I don't see this glitches in newest KDE (4.8.0+ from git) from project-neon ppa. But I still see resize grip glitch/artifact in KDE 4.8 final. Is it possible that this commits are not included in 4.8.0? @nikola Which glitch ? The first one that this bug report is about should definitely be in 4.8 The second (flicker of a tiny grey rect) has only be pushed to master. I did not backport it to 4.8 because I was waiting for feedback here. It will go into 4.8.1, I guess. (ok, maybe the first one did not make it in time either, but I'd be Surprised ) Git commit 36331ae94755e04f00e014b8be24982ff84ee1d6 by Hugo Pereira Da Costa. Committed on 15/01/2012 at 21:43. Pushed by hpereiradacosta into branch 'KDE/4.8'. disable enable parent widget update when hiding. This seems to prevent some artifacts in e.g. amarok, or dolphin (to be confirmed). M +2 -0 kstyles/oxygen/oxygensplitterproxy.cpp http://commits.kde.org/kde-workspace/36331ae94755e04f00e014b8be24982ff84ee1d6 The first one (KCapacityBar) is fixed for me in 4.8.0. > Which glitch ? > The first one that this bug report is about should definitely be in 4.8 this is fixed. > The second (flicker of a tiny grey rect) has only be pushed to master. This is not fixed in 4.8.0. Sorry for late feedback, I misunderstood you. Everything works very well in master (project neon ppa) so I think it is safe to backport that commit to 4.8.1. @Nikola. No problem. It will be in 4.8.1 (in one month. So thats not too long). It's good thing that the glitches are gone. Thanks for reporting the bug and for the feedback Hugo So, the only thing that is left here is the glitch with KSignalPlotter. I'll open a separate bug report later today (in my timezone). Thanks, Hugo! Git commit e073090e405437a7207cf862c073749b1c60b483 by Sebastian Trueg, on behalf of Hugo Pereira Da Costa. Committed on 14/01/2012 at 20:15. Pushed by trueg into branch 'KDE/4.8'. fix the rect passed to kcapacitybar paint method. REVIEW: 103669 M +2 -1 kdeui/widgets/kcapacitybar.cpp http://commits.kde.org/kdelibs/e073090e405437a7207cf862c073749b1c60b483 Git commit 5a2e4c9223693685c81b731f747e9768246100ec by Hugo Pereira Da Costa. Committed on 17/02/2012 at 01:52. Pushed by hpereiradacosta into branch 'master'. Fix flicker of Splitter Proxy in oxygen-transparent, like for oxygen. M +2 -0 style/oxygensplitterproxy.cpp http://commits.kde.org/oxygen-transparent/5a2e4c9223693685c81b731f747e9768246100ec > No problem. It will be in 4.8.1 (in one month. So thats not too long). > It's good thing that the glitches are gone. I just updated to 4.8.1 and splitter glitches (in all apps) are completely gone for me (except for the ksignalplotter bug #293953, but i didn't observe that layout in real apps). Thanks! |