我有一个弹出窗口(使用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