C++ GTK中的系统模态对话框
我正在尝试使用系统范围的模态属性创建GtkDialog,即当对话框打开时,其他窗口不应获得焦点。有一个选项可以使用GtkDialogFlag将其设置为模态,但这不是系统范围的模态。这是一个非常糟糕的想法,但是您可以覆盖窗口的“聚焦事件”处理程序,并让它调用C++ GTK中的系统模态对话框,c++,linux,modal-dialog,gtk,C++,Linux,Modal Dialog,Gtk,我正在尝试使用系统范围的模态属性创建GtkDialog,即当对话框打开时,其他窗口不应获得焦点。有一个选项可以使用GtkDialogFlag将其设置为模态,但这不是系统范围的模态。这是一个非常糟糕的想法,但是您可以覆盖窗口的“聚焦事件”处理程序,并让它调用gtk\u window\u present 像gksu一样: static gboolean focus_out_cb (GtkWidget *widget, GdkEventFocus *event, gpointer user_data)
gtk\u window\u present
像gksu一样:
static gboolean
focus_out_cb (GtkWidget *widget, GdkEventFocus *event, gpointer user_data)
{
gtk_window_present (GTK_WINDOW(widget));
return TRUE;
}
//in your initialization code for your window...
/* make sure that our window will always have the focus */
g_signal_connect (G_OBJECT(mywindow), "focus-out-event",
G_CALLBACK(focus_out_cb), NULL);
静态gboolean
焦点输出cb(GtkWidget*小部件、GdkEventFocus*事件、gpointer用户数据)
{
gtk_窗口存在(gtk_窗口(小部件));
返回TRUE;
}
//在窗口的初始化代码中。。。
/*确保我们的窗口始终具有焦点*/
g_信号连接(g_对象(mywindow),“聚焦输出事件”,
G_回调(focus_out_cb),NULL;
这有望带来额外的好处,即如果您的应用程序确实冻结,则可能不会处理focus out事件的信号。我不确定GTK是如何实现UI线程的,但我认为这应该是真的。坏主意。如果您的应用程序冻结,并且无法使用系统监视器或终端终止它,该怎么办?用户在回答您的模式对话框之前不能做任何其他事情,这是否如此重要?实际上,我正在实现一个关机和重新启动对话框。因此,我需要用户不要关注任何其他内容,除非回答对话框。