C++ GTK中的系统模态对话框

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)

我正在尝试使用系统范围的模态属性创建GtkDialog,即当对话框打开时,其他窗口不应获得焦点。有一个选项可以使用GtkDialogFlag将其设置为模态,但这不是系统范围的模态。

这是一个非常糟糕的想法,但是您可以覆盖窗口的“聚焦事件”处理程序,并让它调用
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线程的,但我认为这应该是真的。

坏主意。如果您的应用程序冻结,并且无法使用系统监视器或终端终止它,该怎么办?用户在回答您的模式对话框之前不能做任何其他事情,这是否如此重要?实际上,我正在实现一个关机和重新启动对话框。因此,我需要用户不要关注任何其他内容,除非回答对话框。