我想知道窗口是否最小化。我已将来自GtkWidget的window-state-event
信号连接到此函数
def on_main_window_hide(object, event)
if event.changed_mask & Gdk::WindowState::ICONIFIED
if event.new_window_state & Gdk::WindowState::ICONIFIED
puts("minimize" + $counter.to_s)
$counter+=1
else
puts ("unminimize")
end
end
end
甚至在做了几次最小化和最小化之后......如果窗口没有被最小化,它永远不会打印,这里是输出
minimize0
minimize1
minimize2
minimize3
minimize4
加上,最小化会给窗口状态事件信号两次,就像minimize0
是初始值然后最小化它变为minimize2
如何在窗口最小化的情况下如何正确检测?
答案 0 :(得分:0)
我认为您对回调名称感到困惑。每次状态事件更改都会发出window-state-event
信号,因此回调应该调用on_main_window_state_event
,因为它不仅会在窗口隐藏时发出。然后,您可以检查事件掩码的更改。
你的回调有一个冗余的if条件。 From the API,changed_mask
是:
掩码指定哪些标志已更改
window_new_state
也是一个面具,但包含:
新窗口状态,GdkWindowState位的组合
这意味着如果第一个if条件也计算为true,则第二个if条件将始终计算为true,但else分支将永远不会发生。如果要进行“unminimize”打印,则必须删除第二个if条件并将打印移动到第一个if条件的else分支。另一种选择是检查位掩码并真正检查状态。
您的代码应为:
def on_main_window_state_event(object, event)
if event.changed_mask & Gdk::WindowState::ICONIFIED
puts("minimize" + $counter.to_s)
$counter+=1
else
puts ("unminimize")
end
end