如何知道GTK窗口是否在ruby中最小化

时间:2017-09-08 13:57:18

标签: ruby gtk3

我想知道窗口是否最小化。我已将来自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 如何在窗口最小化的情况下如何正确检测?

1 个答案:

答案 0 :(得分:0)

我认为您对回调名称感到困惑。每次状态事件更改都会发出window-state-event信号,因此回调应该调用on_main_window_state_event,因为它不仅会在窗口隐藏时发出。然后,您可以检查事件掩码的更改。

你的回调有一个冗余的if条件。 From the APIchanged_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