SScrollBar is not interactable

Build Type: ‘Binary’ build (The issue is still in the lastest souce code of master branch on github)

Build version: 4.14.0-3195953+++UE4+Release-4.14 (The issue is still in the lastest souce code of master branch on github)

Detailed description of the issue:

SScrollBar is always not interactable which is incorrect, It should behave similar to SButton.

SScrollBar should override SWidget::IsInteractable() like SButton.

I found Cody Haskell’s commit (fc03448b67704d0bd76be9584aa1753988191479) only overrides SWidget::IsInteractable() in SButton.

This is the root of this issue. Cody Haskell who added IsInteractable() to SWidget should definitely ensure all interactable SWidgets (may be not just SButton and SScrollBar, please review carefully) to override SWidget::IsInteractable() properly.

Following is the git commit info:

UE4

  • GetBubblePath() now takes in a radius
  • Added IsInteractable() to SWidget (currently only returns true for SButton)
  • Added Cursor Radius to Slate App

codereview Nick.Atamas

[CL 2378496 by Cody Haskell in Main branch]

Contained in branches: 4.14
Contained in tags: 4.14.0-preview-1, 4.13.1-release, 4.13.0-release, 4.13.0-preview-3, 4.13.0-preview-2, 4.13.0-preview-1, 4.12.5-release, 4.12.4-release, 4.12.3-release, 4.12.2-release, 4.12.1-release, 4.12.0-release, 4.12.0-preview-5, 4.12.0-preview-4, 4.12.0-preview-3, 4.12.0-preview-2, 4.12.0-preview-1, 4.11.2-release, …, 4.7.0-preview-1

Simply add IsInteractable() function to the public section of Engine\Source\Runtime\Slate\Public\Widgets\Layout\SScrollBar.h

virtual bool IsInteractable() const override
{
	return IsEnabled();
}

Can someone please put this fix into the UE4 bug process?

Thank you

Hi ,

Since you already have a proposed fix for the issue that you described, would you please consider submitting a Pull Request on GitHub with the fix? That is our preferred method for receiving suggested fixes from members of the community. If you can’t submit a Pull Request, or prefer not to, please let me know and I will enter a ticket internally to have this looked into.

Hi,

I have considered that, but there are already 270 pending pull requests. I also think someone in epic should review all SWidgets. Is that still true that only SButton and SScrollBar are Interactable? I think I prefer to enter the ticket process

Thanks,

Are you seeing this happen in UMG, or only when using Slate directly? I made a quick setup, using UMG, where I had a scrollbox with a bunch of buttons and I was able to interact with the scroll bar there. Is there a specific scenario where you are unable to interact with the scroll bar?

SWidget::IsInteractable() doesn’t directly affects interactability of Widget. It allows Widget’s interactability to be queried from outside.
One of scenarios to reproduces this problem is to setup a widget interaction component, create a widget with a button and a scrollbox, and monitor the value of UWidgetInteractionComponent::IsOverInteractableWidget() in the blueprint. When the cursor hovers over the button, the value will change from false to true. But the value won’t change when hovering over the scrollbox bar.

Thanks,

Sorry for the delay, I got pulled onto some other tasks for a few days.

I misunderstood what you were getting at originally, so thank you for clarifying what you were looking at. With that additional information I was able to reproduce what you were seeing, and I have entered UE-39845 to have this investigated further. I included your suggested fix, as well as the suggestion that it should be applied to all interactable widgets.

Hi,

I have tried the latest 4.16.0 with my project. Even UE-39845 is marked fixed, but I still experience the same problem. I have checked the SScrollBar class, nothing changed regarding IsInteractable() function. Well, maybe there is another way to fix this problem. Could you please share your test project in UE-39845 with me? I wonder if I can reproduce my problem with your test project in 4.16.0.

Thanks,