我AT-SPI
用来检查我的应用程序的 GUI。但是,一些“复选框”不是真正的 GTK 复选框,它们是自定义小部件。因此,他们不会在 AT 中报告正确的信息。
有人知道我将如何解决这个问题吗?我在 Mono 下用 C# 编写,使用Gtk#
绑定到GTK+
. 我相信应该可以使用 ATK 来更改向 AT 报告的内容,但是所有示例都在 C 中,并且托管 C# 绑定的工作方式大不相同。
有什么提示吗?
我AT-SPI
用来检查我的应用程序的 GUI。但是,一些“复选框”不是真正的 GTK 复选框,它们是自定义小部件。因此,他们不会在 AT 中报告正确的信息。
有人知道我将如何解决这个问题吗?我在 Mono 下用 C# 编写,使用Gtk#
绑定到GTK+
. 我相信应该可以使用 ATK 来更改向 AT 报告的内容,但是所有示例都在 C 中,并且托管 C# 绑定的工作方式大不相同。
有什么提示吗?
该类Gtk.Widget
具有Accessible
type 的属性Atk.Object
。您可以获取但不能设置此属性。您也不能在子类中覆盖它。但是,它似乎Atk.Object
有几个可写属性,并且写入它们会更改 AT 返回的信息。
例如:
var widget = new Gtk.Label("Hello World");
widget.Accessible.Role = Atk.Role.PushButton;
这会创建一个普通的标签小部件,但会导致 AT 认为它实际上是一个按钮小部件。
我还没有确定如何更改小部件的表观状态。有两种方法看起来应该是可能的:
Atk.Object.NotifyStateChange(Atk.StateType, bool)
看起来它可能会发送一个更改信号,指示某个状态类型现在具有给定的布尔值。
Atk.Object.RefStateSet()
返回一个Atk.StateSet
,您可以在其上调用AddState(Atk.StateType)
和RemoveState(Atk.StateType)
。
这些实际上都对 AT 报告的信息没有任何影响。我什至尝试先更改状态集然后再触发事件......它仍然完全没有效果。