All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yordan Karadzhov <y.karadz@gmail.com>
To: Mircea Cirjaliu <mircea.cirjaliu@yahoo.com>,
	linux-trace-devel@vger.kernel.org
Subject: Re: [PATCH] kernelshark: fix bug in the behavior of ksglwidget rubber band
Date: Mon, 27 Oct 2025 22:51:10 +0200	[thread overview]
Message-ID: <f6ec9f89-a161-e596-79bb-ec21aaa1047c@gmail.com> (raw)
In-Reply-To: <5c7a78ce-b1f6-4396-982a-8b884242d8cc@yahoo.com>

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 <mircea.cirjaliu@yahoo.com>
> ---
>   src/KsGLWidget.cpp | 40 +++++++++++++++++++++++++++-------------
>   src/KsGLWidget.hpp |  2 ++
>   2 files changed, 29 insertions(+), 13 deletions(-)
> 
> diff --git a/src/KsGLWidget.cpp b/src/KsGLWidget.cpp
> index 7f2001c..a2c1fc8 100644
> --- a/src/KsGLWidget.cpp
> +++ b/src/KsGLWidget.cpp
> @@ -190,6 +190,9 @@ void KsGLWidget::mousePressEvent(QMouseEvent *event)
>   	if (event->button() == Qt::LeftButton) {
>   		_posMousePress = _posInRange(event->pos().x());
>   		_rangeBoundInit(_posMousePress);
> +	} else if (event->button() == Qt::RightButton) {
> +		if (_rubberBand.isVisible())
> +			_rangeBoundCancel();
>   	}
>   }
>   
> @@ -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.

>   
>   	bin = event->pos().x() - _bin0Offset();
>   	getPlotInfo(event->pos(), &sd, &cpu, &pid);
> @@ -291,17 +296,20 @@ void KsGLWidget::mouseReleaseEvent(QMouseEvent *event)
>   		return;
>   

No need to pile if on top of another if here. Just start the function with

	if (isEmpty() || !_rubberBand.isVisible())
		return;

The rest may stay unchanged.

>   	if (event->button() == Qt::LeftButton) {
> -		size_t posMouseRel = _posInRange(event->pos().x());
> -		int min, max;
> -		if (_posMousePress < posMouseRel) {
> -			min = _posMousePress - _bin0Offset();
> -			max = posMouseRel - _bin0Offset();
> -		} else {
> -			max = _posMousePress - _bin0Offset();
> -			min = posMouseRel - _bin0Offset();
> -		}
> +		if (_rubberBand.isVisible()) {
> +			size_t posMouseRel = _posInRange(event->pos().x());
> +
> +			int min, max;
> +			if (_posMousePress < posMouseRel) {
> +				min = _posMousePress - _bin0Offset();
> +				max = posMouseRel - _bin0Offset();
> +			} else {
> +				max = _posMousePress - _bin0Offset();
> +				min = posMouseRel - _bin0Offset();
> +			}
>   
> -		_rangeChanged(min, max);
> +			_rangeChanged(min, max);
> +		}
>   	}
>   }
>   
> @@ -1132,7 +1140,7 @@ void KsGLWidget::_rangeChanged(int binMin, int binMax)
>   	/* The rubber band is no longer needed. Make it invisible. */
>   	_rubberBand.hide();
>   
> -	if ( (binMax - binMin) < 4) {
> +	if ((binMax - binMin) < 4) {
>   		/* Most likely this is an accidental click. Do nothing. */
>   		return;
>   	}
> @@ -1182,6 +1190,12 @@ void KsGLWidget::_rangeChanged(int binMin, int binMax)
>   	}
>   }
>   
> +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.

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,

  reply	other threads:[~2025-10-27 20:51 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <5c7a78ce-b1f6-4396-982a-8b884242d8cc.ref@yahoo.com>
2025-10-20 19:00 ` [PATCH] kernelshark: fix bug in the behavior of ksglwidget rubber band Mircea Cirjaliu
2025-10-27 20:51   ` Yordan Karadzhov [this message]
2025-10-28 20:27     ` Mircea Cirjaliu
2025-10-30 19:01       ` Yordan Karadzhov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=f6ec9f89-a161-e596-79bb-ec21aaa1047c@gmail.com \
    --to=y.karadz@gmail.com \
    --cc=linux-trace-devel@vger.kernel.org \
    --cc=mircea.cirjaliu@yahoo.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.