GTK+3 禁用 window 中的关闭图标(c 程序)

GTK+3 disable the close icon present in a window (c program)

我正在使用 GTK+3 和​​图形库 cairo 在 Linux (Ubuntu 16.04 - WM: Gnome) 中开发 GUI。

单击按钮(绘图)后,使用 cairo 的说明,我在新顶部 window 上画了一个红色方块,我在其中放置了 GtkDrawingArea.

在这个 window 中,我还放了一个单击的按钮(取消),隐藏了 window。这样,如果我再按"Plot",红色方块就会重新出现。

问题是 window 顶部栏中的 "x" 图标。 如果(不是我)用户按下此 x,window 消失,如果他重新按下 "Plot",则会报告错误。

问题是:是否可以避免这种可能的错误原因? (从 window 的顶部栏中删除此 "x" 或以某种方式禁用其功能)。

我试图单独找到一个解决方案,找到的可能性是:

1 - 从 window 中删除 "decorated" 的 属性。 顶部栏消失(x 也是如此)但不可能在屏幕上移动 window

2 - 使用函数 gtk_window_set_deletable(window, FALSE)(之前用于显示 window),但 x 始终存在并将其推入 window 被破坏。

如果你觉得有用,我可以报告代码。 我在等你的建议。

编辑:

现在我们知道您想要实现什么:显示一个单独的 window 但避免破坏它以便您可以再次显示它。您已经在辅助 window 的 "Cancel" 按钮中拥有隐藏它的逻辑。

最干净的解决方案就是做同样的事情:当用户试图关闭辅助 window 时,改为隐藏它。这样,用户就不会因为看到某些明显无法按预期工作的东西而感到沮丧。隐藏或关闭,对你来说是不同的,对用户来说是一样的。

所以你只需要连接到那个辅助 window 的 delete-event,然后隐藏它。甚至不需要为此创建特定的回调,GTK+ 为您提供了它:您只需将 delete-event 连接到 gtk_widget_hide_on_delete。要再次显示 window,只需对其调用 gtk_widget_show_all

原回答:

I realize the plot

"realize" 是在 GTK+ 中具有定义含义的术语。不要脱离上下文使用它,如果您不是在谈论小部件实现,请尝试使用替代术语。

What I would like is to remove this "x" from the top bar of the window or in some way disable its functionality.

您是否了解这对用户来说非常烦人并且破坏了统一的用户体验?您想使用随机执行不同操作的应用程序吗?

无论如何,禁用关闭按钮的一种方法是连接到 delete-event 和 return TRUE 以停止事件的传播。该按钮仍会存在,但什么都不做,因此您必须终止该应用程序才能退出它。

要使按钮消失,gtk_window_set_deletable 将要求 Window 管理器执行此操作,但我们需要一些代码来了解您的尝试有什么问题。