1. 调用其他输入框程序实现
调用 zenity 实现,使用 popen
系统调用,参考:tinyfiledialogs 的实现。
zenity 的文本输入框介绍在这里
实现已经放到评论区:hanxi/blog#7 (comment)
2. 最后采用了 GTK+ 的 dialog 实现
这种实现更像 windows 下的 dialog。而且查了 glfw 的 FAQ,建议使用 GTK+ 实现 messge box。
需要安装 gtk 库:sudo apt-get install libgtk-3-dev
主要代码是参考这里的。还添加了下面两点:
- 把 dialog 设置为置顶
gtk_window_set_keep_above(GTK_WINDOW(dialog), true);
- 设置 dialog 失去焦点时就销毁
// desoty dialog when lost focus
static void dialogFocusOutCallback(GtkWidget* widget, gpointer user_data)
{
gtk_widget_destroy(widget);
}
...
g_signal_connect(dialog, "focus-out-event", G_CALLBACK(dialogFocusOutCallback), NULL);
我也是试过去找到 dialog 的父窗口,然后设置模态等等,使 dialog 为子窗口。可是没能成功的实现。现在我的这种实现也能满足基本的需求,代码在这里:cocos2d/cocos2d-x#12220