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

时间:2018-01-12 12:41:48

标签: c gtk gtk3 cairo

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

点击按钮(Plot)后,使用cairo的指示,我在新的顶部窗口上画了一个红色正方形,我放了一个GtkDrawingArea

在这个窗口中我还点了一个按钮(取消),隐藏了窗口。通过这种方式,如果我重新推动" Plot",红色方块重新出现。

问题是" x"图标出现在窗口的顶部栏中。 如果(不是我)用户按下这个x,则窗口消失,如果他重新按下" Plot"报告错误。

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

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

1 - 从窗口中移除"装饰"的属性。 顶部栏消失(也是x),但不可能在屏幕上移动窗口

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

如果您认为这有用,我可以报告代码。 我在等你的建议。

2 个答案:

答案 0 :(得分:1)

修改

现在我们知道你想要实现的目标:显示一个单独的窗口,但避免销毁它,以便你可以再次显示它。你已经在"取消"辅助窗口的按钮是隐藏它的逻辑。

最干净的解决方案是执行相同的操作:当用户尝试关闭辅助窗口时,请隐藏它。这样,用户不会因为看到显然没有按预期工作的东西而感到沮丧。隐藏或关闭,对您来说有所不同,但对用户来说却是一样的。

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

原始回答:

  

我意识到情节

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

  

我想要的是删除这个" x"从窗户的顶部栏   或以某种方式禁用其功能。

您是否明白这对用户来说非常烦人并且会破坏统一的用户体验?您想使用随机不同的应用程序吗?

无论如何,禁用关闭按钮的一种方法是连接到delete-event并在那里返回TRUE以停止事件的传播。按钮仍然会在那里,但什么都不做,所以你必须杀死应用程序退出它。

要使按钮消失,gtk_window_set_deletable会要求窗口管理器执行此操作,但我们需要一些代码才能知道您的尝试出现了什么问题。

答案 1 :(得分:0)

谢谢liberforce。

使用返回TRUE的delete_event,x按钮被禁用。

当应用程序或多或少被终止时,我将添加一个对话框,通知用户使用“取消”按钮代替关闭带有X的窗口。

再次感谢您