【问题标题】:system modal dialog in GTKGTK 中的系统模式对话框
【发布时间】:2010-09-02 19:08:10
【问题描述】:

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

【问题讨论】:

  • 坏主意。如果您的应用程序冻结并且无法使用系统监视器或终端来杀死它怎么办?你的用户在回答你的模态对话框之前不能任何事情是不是很重要?
  • 实际上,我正在实现一个用于关机和重启的对话框。所以我需要用户不应该关注其他任何事情,除非回答了对话框。

标签: c++ linux modal-dialog gtk


【解决方案1】:

这是一个完全可怕的想法,但是您可以覆盖窗口的“focus-out-event”处理程序并让它调用gtk_window_present

类似 gksu 的功能:

静态 gboolean focus_out_cb (GtkWidget *widget, GdkEventFocus *event, gpointer user_data) { gtk_window_present (GTK_WINDOW(widget)); 返回真; } //在你的窗口初始化代码中...... /* 确保我们的窗口总是有焦点 */ g_signal_connect (G_OBJECT(mywindow), "焦点事件", G_CALLBACK(focus_out_cb), NULL);

如果您的应用程序确实冻结,这有望带来额外的好处,那么焦点事件的信号可能不会被处理。我不确定 GTK 是如何处理 UI 线程的,但我认为这应该是真的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 2021-12-24
    相关资源
    最近更新 更多