2017-09-08 1 views
0

minimiert ist, möchte ich wissen, ob das Fenster minimiert ist oder nicht. Ich habe window-state-event Signal von GtkWidget dieser Funktionwie Sie wissen, wenn ein GTK-Fenster in Ruby


    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 

verbunden und auch nach Minimierung tun und unminimizing paar Mal .. druckt es nie, wenn das Fenster unminimized ist, hier ist der Ausgang


    minimize0 
    minimize1 
    minimize2 
    minimize3 
    minimize4 

plus, Minimieren gibt das Fenster-State-Event-Signal zweimal, wie wenn minimize0 Initialwert ist dann auf Minimieren wird minimize2 Wie kann ich richtig erkennen, wenn ein Fenster minimiert ist?

Antwort

0

Ich glaube, Sie wurden durch den Rückrufnamen verwirrt. Das Signal window-state-event wird für jede Statusereignisänderung ausgegeben, daher sollte der Rückruf on_main_window_state_event heißen, da er nicht nur ausgegeben wird, wenn sich das Fenster verbirgt. Dann können Sie die Ereignismaske auf Änderungen überprüfen.

Ihr Rückruf hat eine redundante if-Bedingung. From the API ist die changed_mask a:

Maske Spezifizierungs welche Flaggen

Und window_new_state ist auch eine Maske geändert haben, aber enthält:

das neue Fenster Zustand, eine Kombination aus GdkWindowState Bits

Das bedeutet, dass die zweite if-Bedingung immer lautet als wahr auswerten, wenn der erste auch als wahr gilt, aber der else-Zweig wird niemals passieren. Wenn Sie möchten, dass Ihr "unminimize" -Druck auftritt, müssen Sie die zweite if-Bedingung entfernen und den Druck in den else-Zweig der ersten if-Bedingung verschieben. Eine andere Möglichkeit wäre, nach der Bitmaske zu suchen und den Status wirklich zu überprüfen.

sollte Ihr Code sein:

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 
Verwandte Themen