Sketchup.send_action("selectPaintTool:") fails on SketchUp 2021 osx when called from HtmlDialog callback

Hi there,

For some reason I am having issues to activate the native paint tool when calling Sketchup.send_action("selectPaintTool:") on SketchUp 2021 osx when called from within an HtmlDialog callback. It seems to never activate the tool.

I thought it might be a focus problem, so I already tried the de_focus hack by creating another dialog and quickcly opening and closing that. Unfortunately that did not help.

So, I tried this:

model = Sketchup.active_model
tool = {}
def tool.onMouseMove(flags, x, y, view)
  Sketchup.send_action("selectPaintTool:")
end #def
model.select_tool(tool)

I mocked a fake tool who’s sole purpose is to activate the native one whenever the user moves the mouse and this fake tool is active. Seems to work fine :slight_smile: and I thus wanted to share this with you.

2 Likes

Nice find,
Perhaps the #onMouseEnter(view) or #onMouseLeave(view) in your original Tool will work too…?

That might work as well. I went for onMouseMove because I want to force (:rage:) Sketchup with these send_action requests for as long as my tool is active, and thus the tool I want to be active is not :slight_smile:

As soon as the Paint tool activated you tool (or a fake tool) will be no longer active…
…or you mean that one call is “not enough” for OSX to get the #sent_action(), so you keep forcing by each mouse move until OSX “understand” what you want? :thinking:

I have no idea if one call is enough, I just wanted to be sure :wink:
It is the first method that came to my mind, didn’t try other ones.

This is interesting, one call should be enough.

It can also be the html callback were lost somehow.
I mean action callbacks are detached from the dialog somehow, e.g. if the dialog is close action callbacks are detached, then you did not attached it back properly?? :thinking:

The callbacks are attached and called properly.

1 Like

There are known issues with Mac and HtmlDialog callbacks …

Might as well open another issue.

BTW, is it only the Paint Bucket Tool, … or any tool ?

Yes, and I hate it :slight_smile:

Have only tried this one, since I encountered it making an extension for one of my customers.

When I have some more time I will setup a basic repo with an HtmlDialog and a few callbacks that trigger various of these send_command methods

1 Like

This does not work with any tool. I have a scenario where I need to create a toolbar like html dialog to open tools with tutorials. Works fine on windows but on mac those buttons dont do anything.

send_action works fine if called elsewhere.

Try wrapping the send_action call inside a timer …

@dialog.add_action_callback('paint_tool') do
  UI.start_timer(0.3,false) { Sketchup.send_action('selectPaintTool:') }
end

That worked, Thankyou!

What I found is that the main problem seems to be the focus on sketchup window. If it is focused within the time set then the timer solution works, otherwise the fake tool is the only solution I found.

Okay then try this …

@dialog.add_action_callback('paint_tool') do
  UI.start_timer(0.3,false) {
    Sketchup.focus
    Sketchup.send_action('selectPaintTool:') 
  }
end

… OR this …

@dialog.add_action_callback('paint_tool') do
  Sketchup.focus
  UI.start_timer(0.3,false) {
    Sketchup.send_action('selectPaintTool:') 
  }
end