Re: [PATCH] kernelshark: fix bug in the behavior of ksglwidget rubber band
Yordan Karadzhov <[email protected]> Thu, 30 Oct 2025 21:01:51 +0200
| Newsgroups | org.kernel.vger.linux-trace-devel |
|---|---|
| Message-ID | <[email protected]> |
Hi Mircea, On 10/28/25 22:27, Mircea Cirjaliu wrote: > Hi Yordan, > > I tend to favor debuggability, expressiveness and readability in my coding, even if it makes for longer code > or seemingly unnecessary code constructs. I'll leave it to the compiler to optimize variable usage, I wanna > make it easy (for me or others) to set a breakpoint or understand what the code is doing. > > On 27/10/2025 21:51, Yordan Karadzhov wrote: >> Hi Mircea, >> >> Looks like this is indeed a bug, however it is hard to reproduce. I had to do a lot of right mouse button clicks before seeing this misbehavior to show up. >> >> I will take the fix, but the patch itself heeds some additional work. See my comments in code below. >> >> On 10/20/25 22:00, Mircea Cirjaliu wrote: >>> Accidentally pressing right mouse button while dragging >>> the range will cause the rubber band to behave abnormally. >>> Improved the logic behind range dragging to account for this case. >>> The state of the rubber band will be reset on right click. >>> >>> Signed-off-by: Mircea Cirjaliu <[email protected]> >>> --- >>> src/KsGLWidget.cpp | 40 +++++++++++++++++++++++++++------------- >>> src/KsGLWidget.hpp | 2 ++ >>> 2 files changed, 29 insertions(+), 13 deletions(-) >>> >>> @@ -262,8 +265,10 @@ void KsGLWidget::mouseMoveEvent(QMouseEvent *event) >>> if (isEmpty()) >>> return; >>> - if (_rubberBand.isVisible()) >>> - _rangeBoundStretched(_posInRange(event->pos().x())); >>> + if (_rubberBand.isVisible()) { >>> + size_t posMouseRel = _posInRange(event->pos().x()); >>> + _rangeBoundStretched(posMouseRel); >>> + } >> >> I don't see the point in this change. > > I needed a breakpoint there. > I understand that this change helped you find the problem, but we are not merging debugging code upstream. >> >>> bin = event->pos().x() - _bin0Offset(); >>> getPlotInfo(event->pos(), &sd, &cpu, &pid); >>> @@ -291,17 +296,20 @@ void KsGLWidget::mouseReleaseEvent(QMouseEvent *event) >>> return; >>> >> >>> } >>> +void KsGLWidget::_rangeBoundCancel() >>> +{ >>> + /* The rubber band is no longer needed. Make it invisible. */ >>> + _rubberBand.hide(); >>> +} >>> + >> What is the point in defining a function that does nothing but calling another function. > > Layering functionality, i.e. mouse events call _rangeBoundXXX() functions, which instead act on _rubberBand. > For improved code readability, also having a properly named logical entry point aids in debugging. > Again, debugging cannot be a reason for pushing code upstream. Best, Yordan >> >> Thanks, >> Yordan >> >>> int KsGLWidget::_posInRange(int x) >>> { >>> int posX; >>> diff --git a/src/KsGLWidget.hpp b/src/KsGLWidget.hpp >>> index cafc70b..8fcac55 100644 >>> --- a/src/KsGLWidget.hpp >>> +++ b/src/KsGLWidget.hpp >>> @@ -315,6 +315,8 @@ private: >>> void _rangeChanged(int binMin, int binMax); >>> + void _rangeBoundCancel(); >>> + >>> bool _findAndSelect(QMouseEvent *event); >>> bool _find(int bin, int sd, int cpu, int pid, > > Best, > Mircea