我有一個彈出窗口(使用WINDOW_POPUP類型創建),其中包含一些小部件,其中包括一個文本項。問題是,當我點擊它時,條目沒有得到重點,所以我不能輸入任何內容。是否有我必須設置的標誌來允許窗口獲得鍵盤焦點?如何給彈出鍵盤焦點Gtk.Window
6
A
回答
-1
#include <gtk/gtk.h>
static gboolean delete_event(GtkWidget *widget,
GdkEvent *event,
gpointer data)
{
g_print ("delete event occurred\n");
gtk_main_quit();
return TRUE;
}
static void destroy(GtkWidget *widget,
gpointer data)
{
gtk_main_quit();
}
int main(int argc,
char *argv[])
{
GtkWidget *window;
GtkWidget *windowpopup;
GtkWidget *button;
gtk_init (&argc, &argv);
/* create a new window */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
windowpopup = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_transient_for(GTK_WINDOW(windowpopup),GTK_WINDOW(window));
gtk_window_set_destroy_with_parent(GTK_WINDOW(windowpopup),TRUE);
gtk_widget_show (windowpopup);
g_signal_connect (G_OBJECT (window), "delete_event",
G_CALLBACK (delete_event), NULL);
g_signal_connect (G_OBJECT (window), "destroy",
G_CALLBACK (destroy), NULL);
/* Creates a new button with the label "Hello World". */
button = gtk_button_new_with_label ("Hello World");
g_signal_connect_swapped (G_OBJECT (button), "clicked",
G_CALLBACK (gtk_widget_destroy),
G_OBJECT (window));
gtk_container_add (GTK_CONTAINER (window), button);
gtk_widget_show (button);
gtk_widget_show (window);
gtk_main();
return 0;
}
4
對於需要焦點的gtk窗口,不能使用WINDOW_POPUP。相反,你應該使用類型GTK_WINDOW_TOPLEVEL一個GtkWindow和呼叫下一個函數(或方法)
GtkWindow *result = g_object_new(GTK_TYPE_WINDOW, "type", GTK_WINDOW_TOPLEVEL, NULL);
gtk_widget_set_can_focus(result, TRUE);
gtk_window_set_decorated(GTK_WINDOW(result), FALSE);
gtk_window_set_type_hint(GTK_WINDOW(result), GDK_WINDOW_TYPE_HINT_POPUP_MENU);
gtk_window_set_transient_for(GTK_WINDOW(result), main_top_level_window);
這爲我工作...當這個「彈出」被破壞
遺憾的是在窗口列表中的圖標閃爍短
1
儘管有以前的答案和GTK參考,但使用GTK_WINDOW_POPUP時可以抓住鍵盤焦點。您需要連接到「秀」事件......
GtkWindow *w = gtk_window_new(GTK_WINDOW_POPUP);
g_signal_connect(G_OBJECT(w), "show", G_CALLBACK(on_window_show), NULL);
...與試圖搶鍵盤的回調:
static void on_window_show(GtkWidget *w, gpointer user_data) {
/* grabbing might not succeed immediately... */
while (gdk_keyboard_grab(w->window, FALSE, GDK_CURRENT_TIME) != GDK_GRAB_SUCCESS) {
/* ...wait a while and try again */
sleep(0.1);
}
}
爲我工作得很好。
相關問題
- 1. Bootstrap彈出焦點和鍵盤
- 2. 如何更改ime鍵盤焦點鍵?
- 3. XCode UITest不會給NSTextField鍵盤焦點
- 4. android鍵盤焦點
- 5. 在HTC Desire S上,軟鍵盤沒有彈出EditText焦點
- 6. 包含EditText-焦點的ListView的DialogFragment不會彈出鍵盤
- 7. 當TextBox獲得焦點時,防止彈出SIP/Soft鍵盤
- 8. 如何在彈出軟鍵盤時使聚焦的EditText可見?
- 9. EditText - 鍵盤不出現在焦點
- 10. 如何設置邏輯焦點而不提供鍵盤焦點?
- 11. Javascript彈出焦點?
- 12. 鍵盤焦點滯後
- 13. 鍵盤選項卡焦點
- 14. WPF維護鍵盤焦點
- 15. WPF HwndHost鍵盤焦點
- 16. iPhone彈出鍵盤
- 17. 如何在鍵盤彈出時將視圖拖動一點點?
- 18. 如何讓從Edittext獲得焦點的軟鍵盤輸出
- 19. 如何通過gtk.Window點擊?
- 20. 如何防止軟件鍵盤彈出?
- 21. 如何在運行時彈出鍵盤
- 22. 如何強制安卓鍵盤彈出?
- 23. 如何自動彈出鍵盤?
- 24. 如何彈出「?123」Android鍵盤
- 25. 如何延遲iOS鍵盤彈出?
- 26. WPF鍵盤焦點和Tab鍵
- 27. 整頁jscrollpane鍵盤箭頭鍵焦點
- 28. 閃光 - 讓鍵盤焦點不點擊
- 29. 如何讓UITabBar項目點擊時彈出鍵盤
- 30. 如何彈出默認iphone鍵盤上的按鈕點擊
這將獨佔鍵盤。用鼠標點擊其他程序的窗口不會將鍵盤焦點傳送給它們。有可能會有解決辦法,但我不知道任何。 – 2017-04-14 18:15:16