2013-07-04 39 views
0

我正在使用AT-SPI來檢查我的應用程序的GUI。但是,某些「複選框」不是真正的GTK複選框,它們是自定義小部件。因此,他們不會在AT中報告正確的信息。Gtk#:更改由AT報告的信息

有沒有人知道我會如何解決這個問題?我正在用Mono編寫C#,使用Gtk#綁定到GTK+。我相信應該可以使用ATK來改變報告給AT的內容,但所有的例子都在C中,並且託管的C#綁定工作方式有點不同。

任何提示?

回答

0

Gtk.Widget類有Atk.Object類型的Accessible屬性。你可以得到但不是此屬性。你也不能在子類中覆蓋它。但是,看起來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報告的信息沒有任何影響。我甚至嘗試過改變先設置的狀態,然後再開啓事件......它依然沒有任何效果。