2014-01-16 31 views
0

因此,我想要修補一個應用程序。它使用GtkWidget作爲其最上面的容器。我想做下面的事情,檢查一些屏幕,如果它是> 2,然後檢查應用程序執行的屏幕寬度(焦點在屏幕上)。我可以使用Xinerama,但首先我想嘗試原生Gtk的東西。我要做的就是:在gtk中獲取顯示器編號小部件2

num_monitors = gdk_screen_get_n_monitors (screen); 

然後我發現了一個功能gdk_screen_get_monitor_at_window(screen, ?window?),但它需要屏幕的GtkWindow作爲其參數。不幸的是,我沒有窗口,只有小部件。我試圖通過gtk_widget_get_parent_window(widget)gtk_widget_get_window(widget)這些總是導致給我GDK_IS_WINDOW (widget)失敗。另一方面,gtk_widget_get_has_window(window)返回1.

如何確定應用程序運行的屏幕?我需要它來設置正確的寬度提示。

回答

1

您可能無法獲取該窗口,因爲該窗口小部件尚未實現和/或映射。如果不是,你會從gtk_widget_get_window()得到NULL

gtk_widget_get_has_window()的返回值可能是靜態的;一個特定類的小部件總是有一個窗口,或者從來沒有一個窗口。

嘗試在提取窗口之前強制使用gtk_widget_realize()實現窗口小部件。如果失敗了,也嘗試映射它。

您可能希望從另一端進行調查,即確定您希望/希望小部件使用哪個屏幕,然後查看該屏幕的信息,而無需從小部件本身開始。

+0

我試過但沒有幫助。 gtk_widget_realize(插件); i = gdk_screen_get_monitor_at_window(screen,widget-> window); t – Darek