# Poco-extension. Hidden button is always clicked

**URL:** <https://forum.defold.com/t/poco-extension-hidden-button-is-always-clicked/69811>\
**Category:** Questions\
**Created:** [November 29, 2021, 2:14pm UTC](https://forum.defold.com/t/poco-extension-hidden-button-is-always-clicked/69811 "2021-11-29T14:14:45Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![aceton41k](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/aceton41k/32/26712_2.png) [@aceton41k](https://forum.defold.com/u/aceton41k)\
**Post date:** [November 29, 2021, 2:14pm UTC](https://forum.defold.com/t/poco-extension-hidden-button-is-always-clicked/69811/1 "2021-11-29T14:14:45Z")

</div>

Hello!  
I have a button which enable only on some screens. But when I click on it via poco it is clicking as if it exists always. I tried to use exists() method, but it always returns true.  
In my script I see that button enable programmatically  
gui.set\_enabled(back\_icon\_node, true)  
How to validate this condition in test?

---

<div class="post-metadata">

**Author:** ![Mathias\_Westerdahl](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/mathias_westerdahl/32/228_2.png) [@Mathias\_Westerdahl](https://forum.defold.com/u/Mathias_Westerdahl)\
**Post date:** [November 29, 2021, 2:27pm UTC](https://forum.defold.com/t/poco-extension-hidden-button-is-always-clicked/69811/2 "2021-11-29T14:27:20Z")

</div>

It was a long time since I used the interface, but if I recall correctly, the gui nodes should have properties.

Looking at the [code](https://github.com/defold/defold/blob/dev/engine/gamesys/src/gamesys/components/comp_gui.cpp#L2245-L2379) it seems the “enabled” property was left out.

As a workaround, you should be able to call into Lua from your python script and check if the node in question is enabled.

[Example 1](https://github.com/defold/extension-poco/blob/master/examples/example_execute.py#L19-L24) which runs in the context of the server. (go or gui)

[Example 2](https://github.com/defold/extension-poco/blob/master/examples/example_custom_function.py) (same context as above)

---

<div class="post-metadata">

**Author:** ![britzl](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/britzl/32/23_2.png) [@britzl](https://forum.defold.com/u/britzl)\
**Post date:** [November 29, 2021, 5:47pm UTC](https://forum.defold.com/t/poco-extension-hidden-button-is-always-clicked/69811/3 "2021-11-29T17:47:32Z")

</div>

> [@Mathias\_Westerdahl](#):
>
> Looking at the [code](https://github.com/defold/defold/blob/dev/engine/gamesys/src/gamesys/components/comp_gui.cpp#L2245-L2379) it seems the “enabled” property was left out.

Can this be fixed in the extension or do we need to add something to our C SDK?

---

<div class="post-metadata">

**Author:** ![Mathias\_Westerdahl](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/mathias_westerdahl/32/228_2.png) [@Mathias\_Westerdahl](https://forum.defold.com/u/Mathias_Westerdahl)\
**Post date:** [November 30, 2021, 6:53am UTC](https://forum.defold.com/t/poco-extension-hidden-button-is-always-clicked/69811/4 "2021-11-30T06:53:55Z")

</div>

The fix should be in the engine, as it’s the one providing the properties.

---

<div class="post-metadata">

**Author:** ![aceton41k](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/aceton41k/32/26712_2.png) [@aceton41k](https://forum.defold.com/u/aceton41k)\
**Post date:** [November 30, 2021, 3:12pm UTC](https://forum.defold.com/t/poco-extension-hidden-button-is-always-clicked/69811/5 "2021-11-30T15:12:40Z")

</div>

Thanks for the answer, Mathias. I tried to run this:

```lua
cbk = poco.agent.rpc.call("Execute", "gui.is_enabled('back_icon_node')")
cbk.wait()
print("Execute: result: '%s'" % cbk.result)

```

But result is None.

---

<div class="post-metadata">

**Author:** ![Mathias\_Westerdahl](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/mathias_westerdahl/32/228_2.png) [@Mathias\_Westerdahl](https://forum.defold.com/u/Mathias_Westerdahl)\
**Post date:** [November 30, 2021, 3:19pm UTC](https://forum.defold.com/t/poco-extension-hidden-button-is-always-clicked/69811/6 "2021-11-30T15:19:18Z")

</div>

Ok, strange.  
And you are running the poco server in the game form inside the gui script?

---

<div class="post-metadata">

**Author:** ![aceton41k](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/aceton41k/32/26712_2.png) [@aceton41k](https://forum.defold.com/u/aceton41k)\
**Post date:** [December 1, 2021, 12:34pm UTC](https://forum.defold.com/t/poco-extension-hidden-button-is-always-clicked/69811/7 "2021-12-01T12:34:30Z")

</div>

Sorry, I missed this moment. It’s needed to add additional poco server for gui script? I already have it in main script.

---

<div class="post-metadata">

**Author:** ![Mathias\_Westerdahl](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/mathias_westerdahl/32/228_2.png) [@Mathias\_Westerdahl](https://forum.defold.com/u/Mathias_Westerdahl)\
**Post date:** [December 1, 2021, 2:26pm UTC](https://forum.defold.com/t/poco-extension-hidden-button-is-always-clicked/69811/8 "2021-12-01T14:26:07Z")

</div>

> [@aceton41k](#):
>
> `gui.is_enabled`

As mentioned, the call you make is made within the context of the server (in game).

So, if your server is started in your main.script (go), you cannot use “gui.\*” functions.  
And vice versa.

---

<div class="post-metadata">

**Author:** ![aceton41k](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/aceton41k/32/26712_2.png) [@aceton41k](https://forum.defold.com/u/aceton41k)\
**Post date:** [December 1, 2021, 3:34pm UTC](https://forum.defold.com/t/poco-extension-hidden-button-is-always-clicked/69811/9 "2021-12-01T15:34:31Z")

</div>

It’s seems to me it’s inconvenient. It’s possible to start server in multiple scripts?

---

<div class="post-metadata">

**Author:** ![Mathias\_Westerdahl](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/mathias_westerdahl/32/228_2.png) [@Mathias\_Westerdahl](https://forum.defold.com/u/Mathias_Westerdahl)\
**Post date:** [December 1, 2021, 3:35pm UTC](https://forum.defold.com/t/poco-extension-hidden-button-is-always-clicked/69811/10 "2021-12-01T15:35:38Z")

</div>

I don’t know. I guess you can try, as long as you set different ports for each server?

---

<div class="post-metadata">

**Author:** ![aceton41k](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/aceton41k/32/26712_2.png) [@aceton41k](https://forum.defold.com/u/aceton41k)\
**Post date:** [December 2, 2021, 3:30pm UTC](https://forum.defold.com/t/poco-extension-hidden-button-is-always-clicked/69811/11 "2021-12-02T15:30:13Z")

</div>

Ok. Perhaps not enough information I provided. I will try to collect all about my case.  
In app I have gui script with such code:

```lua
local function update_top_bar(self, animate)
...
local back_icon_node = gui.get_node("back_icon")
...
gui.set_enabled(back_icon_node, false)

```

I have added poco-server in init and update functions of gui script.

```lua
function update(self, dt)
	poco:server_loop()
	poco:set_view_proj(get_view_proj()) 
	poco:set_gui_view_proj(get_gui_view_proj())
end

```

```lua
function init(self)
...
poco:init_server(15004)

```

Also added functions to get get projections:

```lua
local camera = require "render.camera"
local function get_view_proj()
	local view = camera.get_view(nil)
	local proj = camera.get_projection(nil)
	return proj * view
end
local function get_gui_view_proj()
	local x, y = camera.get_window_size()
	local mat = vmath.matrix4_orthographic(0, x, 0, y, -1, 1)
	return mat
end

```

Then I maked sure that everything is ok by test of clicking on any button. Now I try to get state of button ‘back\_icon’ I have tried this:

```python
cbk = poco.agent.rpc.call("Execute", "gui.is_enabled('back_icon_node')")
cbk.wait()
print("Execute: result: '%s'" % cbk.result)

```

and

```lua
cbk = poco.agent.rpc.call("Execute", "gui.is_enabled('back_icon')")
cbk.wait()
print("Execute: result: '%s'" % cbk.result)

```

Python test script (now I use windows app)

```python
import sys
import unittest

from poco.drivers.std import StdPoco
from poco.utils.device import VirtualDevice

import util

options, args = util.parse_arguments(sys.argv)

options.address = "127.0.0.1"

device = VirtualDevice(options.address)

poco = StdPoco(addr=(options.address, options.port), device=device, use_airtest_input=False)

cbk = poco.agent.rpc.call("Execute", "gui.get_position(back_icon_node)")
cbk.wait()
print("Execute: result: '%s'" % cbk.result)

```

But result is always None. Would be glad any additional information.

---

<div class="post-metadata">

**Author:** ![britzl](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/britzl/32/23_2.png) [@britzl](https://forum.defold.com/u/britzl)\
**Post date:** [December 2, 2021, 9:52pm UTC](https://forum.defold.com/t/poco-extension-hidden-button-is-always-clicked/69811/12 "2021-12-02T21:52:58Z")

</div>

> [@aceton41k](#):
>
> `poco.agent.rpc.call("Execute", "gui.is_enabled('back_icon')")`

I haven’t tried this myself, but maybe you actually need to return something?

```lua
poco.agent.rpc.call("Execute", "return gui.is_enabled('back_icon')")

```

Edit: Yes, looks like that’s the way: [extension-poco/poco/lua/defold-poco.lua at master · defold/extension-poco · GitHub](https://github.com/defold/extension-poco/blob/master/poco/lua/defold-poco.lua#L89-L96)

---

<div class="post-metadata">

**Author:** ![aceton41k](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/aceton41k/32/26712_2.png) [@aceton41k](https://forum.defold.com/u/aceton41k)\
**Post date:** [December 3, 2021, 7:21am UTC](https://forum.defold.com/t/poco-extension-hidden-button-is-always-clicked/69811/13 "2021-12-03T07:21:50Z")

</div>

Thanks for advise. I tried this but it has no effect.

---

<div class="post-metadata">

**Author:** ![Mathias\_Westerdahl](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/mathias_westerdahl/32/228_2.png) [@Mathias\_Westerdahl](https://forum.defold.com/u/Mathias_Westerdahl)\
**Post date:** [December 3, 2021, 10:19am UTC](https://forum.defold.com/t/poco-extension-hidden-button-is-always-clicked/69811/14 "2021-12-03T10:19:33Z")

</div>

> [@britzl](#):
>
> `poco.agent.rpc.call("Execute", "return gui.is_enabled('back_icon')")`

It’s because the code isn’t valid `gui.*` code.  
The `gui.is_enabled(node)` takes a _node_, not an id.

```lua
cbk = poco.agent.rpc.call("Execute", "return gui.is_enabled(gui.get_node('back_icon'))")

```

I’ve also updated the master branch of the extension with another example.  
Select the gui\_server/main.collection as the main collection, and start the game.  
Then run the python script `examples/example_execute_gui.py` and it should print out the enabled state of the two gui boxes:

```lua
users/mawe/extension-poco $ python examples/example_execute_gui.py [master] 11:14:35
[rpc]connected
Execute: result: 'False'
Execute: result: 'True'
Done

```

---

<div class="post-metadata">

**Author:** ![aceton41k](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/aceton41k/32/26712_2.png) [@aceton41k](https://forum.defold.com/u/aceton41k)\
**Post date:** [December 3, 2021, 10:59am UTC](https://forum.defold.com/t/poco-extension-hidden-button-is-always-clicked/69811/15 "2021-12-03T10:59:11Z")

</div>

Yes! It works!  
Now I add clicking on button ‘Merge Masters’ which enables ‘back\_icon’ button

```lua
poco(text='Merge Masters').click()
cbk = poco.agent.rpc.call("Execute", "return gui.is_enabled(gui.get_node('back_icon'))")
cbk.wait()
print("Execute: result: '%s'" % cbk.result)

```

But in this case I get result ‘None’.

---

<div class="post-metadata">

**Author:** ![Mathias\_Westerdahl](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/mathias_westerdahl/32/228_2.png) [@Mathias\_Westerdahl](https://forum.defold.com/u/Mathias_Westerdahl)\
**Post date:** [December 3, 2021, 11:36am UTC](https://forum.defold.com/t/poco-extension-hidden-button-is-always-clicked/69811/16 "2021-12-03T11:36:02Z")

</div>

You might need to wait for the click to be done?

---

<div class="post-metadata">

**Author:** ![aceton41k](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/aceton41k/32/26712_2.png) [@aceton41k](https://forum.defold.com/u/aceton41k)\
**Post date:** [December 3, 2021, 11:57am UTC](https://forum.defold.com/t/poco-extension-hidden-button-is-always-clicked/69811/17 "2021-12-03T11:57:59Z")

</div>

I added time.sleep(5) before rpc call. Also I leaved only sleep without clicking. In this case result of rpc call is always ‘None’

```lua
time.sleep(5)
cbk = poco.agent.rpc.call("Execute", "return gui.is_enabled(gui.get_node('back_icon'))")
cbk.wait()
print("Execute: result: '%s'" % cbk.result)

```

---

<div class="post-metadata">

**Author:** ![Mathias\_Westerdahl](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/mathias_westerdahl/32/228_2.png) [@Mathias\_Westerdahl](https://forum.defold.com/u/Mathias_Westerdahl)\
**Post date:** [December 3, 2021, 12:46pm UTC](https://forum.defold.com/t/poco-extension-hidden-button-is-always-clicked/69811/18 "2021-12-03T12:46:41Z")

</div>

Did you update the extension-poco to the latest version? (the master.zip)  
I tried to add better error handling there (not sure if it helped though)

Also, you can try the example function I added in the main.gui\_script:

```lua
	poco:set_dispatch_fn("GuiIsEnabled", function(id)
		print("INSIDE GuiIsEnabled FUNCTION!",id)
		return gui.is_enabled(gui.get_node(id))
	end)

```

Called from python:

```lua
cbk = poco.agent.rpc.call("GuiIsEnabled", "back_icon")
cbk.wait()
print("Execute: result: '%s'" % cbk.result)

```

For further info, I recommend you debug the defold-poco.lua file

---

<div class="post-metadata">

**Author:** ![aceton41k](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/aceton41k/32/26712_2.png) [@aceton41k](https://forum.defold.com/u/aceton41k)\
**Post date:** [December 3, 2021, 1:12pm UTC](https://forum.defold.com/t/poco-extension-hidden-button-is-always-clicked/69811/19 "2021-12-03T13:12:50Z")

</div>

Sorry missed this. Now updated. In last case with sleep I got error:  
`Execute: result: 'Failed to run 'return gui.is_enabled(gui.get_node('back_icon'))'. Error: [string "return gui.is_enabled(gui.get_node('back_icon'))"]:1: You can only access gui.* functions and values from a gui script instance (.gui_script file)'`

---

<div class="post-metadata">

**Author:** ![Mathias\_Westerdahl](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/mathias_westerdahl/32/228_2.png) [@Mathias\_Westerdahl](https://forum.defold.com/u/Mathias_Westerdahl)\
**Post date:** [December 3, 2021, 1:38pm UTC](https://forum.defold.com/t/poco-extension-hidden-button-is-always-clicked/69811/20 "2021-12-03T13:38:55Z")

</div>

> [@aceton41k](#):
>
> You can only access gui.\* functions and values from a gui script instance

This is what I meant earlier. "gui._" functions can only be used in the context of gui scripts (and vice versa for go._ functions)

It seems you’re sending the call to a .script ?  
You previously had a server running on a separate port in the .gui\_script, where did that go?

[Next page](https://forum.defold.com/t/poco-extension-hidden-button-is-always-clicked/69811.md?page=2)
