问题描述
我正在尝试使用GLFW窗口打开gtk文件对话框窗口。 现在,由于GLFW是一个相当低级的API,它仅公开X11窗口和显示,因为它只是创建了一个没有GUI内容的窗口。
我遇到的问题是gtk_file_chooser_dialog_new()希望传递父窗口,但是由于我只有X11句柄,因此我不确定如何从中创建GTK句柄。
glfwSetKeyCallback(windowHandle1,[](GLFWwindow *window,int keyCode,int scanCode,int action,int mods) {
if (action == GLFW_PRESS)
{
if (keyCode == GLFW_KEY_O && mods == (GLFW_MOD_SHIFT | GLFW_MOD_CONTROL))
{
GtkWidget *dialog;
GtkFileChooserAction fileAction = GTK_FILE_CHOOSER_ACTION_OPEN;
gint res;
// Window x11Window = glfwGetX11Window(window);
// display *x11display = glfwGetX11display();
int argc = 0;
gtk_init(&argc,nullptr); // Todo: don't do this every time
dialog = gtk_file_chooser_dialog_new("Open File",nullptr,// should be _GtkWindow of the GLFWwindow
fileAction,_("_Cancel"),GTK_RESPONSE_CANCEL,_("_Open"),GTK_RESPONSE_ACCEPT,nullptr);
res = gtk_dialog_run(GTK_DIALOG(dialog));
if (res == GTK_RESPONSE_ACCEPT)
{
char *filename;
GtkFileChooser *chooser = GTK_FILE_CHOOSER(dialog);
filename = gtk_file_chooser_get_filename(chooser);
std::cout << filename << std::endl;
g_free(filename);
}
gtk_widget_destroy(dialog);
std::cout << "destroyed file dialog" << std::endl;
}
}
});
这将打开一个打开的文件对话框,但是因为我没有指定父窗口,所以主窗口仍然可以聚焦,并且另一个问题是即使我调用{{1} }。
我已经看过this帖子,但是唯一的答案似乎是获取文件对话框窗口的xid,这不是我想要的。
This谷歌搜索结果似乎也无济于事,因为它会在默认显示屏幕上创建一个全新的gdk(而非gtk)窗口。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)