Die Methode Wnck.Screen.get_windows
gibt alle Fenster einschließlich Dialoge zurück. Es gibt keine Unterscheidung, da die Funktion Wnck.Window
zurückgibt, die derzeit zugeordnet ist. Die Quelle geht so:
* The #WnckScreen represents a physical screen. A screen may consist of
* multiple monitors which are merged to form a large screen area. The
* #WnckScreen is at the bottom of the libwnck stack of objects: #WnckWorkspace
* objects exist a #WnckScreen and #WnckWindow objects are displayed on a
* #WnckWorkspace.
*
* The #WnckScreen corresponds to the notion of
* <classname>GdkScreen</classname> in GDK.
GList*
wnck_screen_get_windows (WnckScreen *screen)
{
g_return_val_if_fail (WNCK_IS_SCREEN (screen), NULL);
return screen->priv->mapped_windows;
}
wo screen->priv
verweist auf eine struct
einige Listen der Fenster (abgebildet, gestapelt), einen Zeiger auf das aktive Fenster enthält, usw. Einige WnckWindow
WNCK_WINDOW_DIALOG
Satz haben kann und ein Dialog sein .
Die WnckWindow
-Klasse bietet auch eine Funktion transient_is_most_recently_activated()
zu wissen, ob der Fokus auf ein transientes Kind Fenster, wenn in einem WnckTaskList
oder zu minimieren, um die transienten Fenster mit seinen Eltern ausgewählt gehen sollte. Zum Beispiel, um zu wissen, ob My Application
Fenster ein zuletzt aktivierte transiente hat:
screen = Wnck.Screen.get_default()
screen.force_update() # recommended per Wnck documentation
window_list = screen.get_windows()
for window in window_list:
if window.get_name() == 'My Application':
print(window.transient_is_most_recently_activated())
Das Skript unten fängt die Dialoge als andere kartiert Fenster (egal ob sie modal/nicht-modal oder die Anwendung sie sind) .
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Wnck', '3.0')
from gi.repository import Gtk, Wnck
class DialogExample(Gtk.Dialog):
def __init__(self, parent):
Gtk.Dialog.__init__(self, "My Dialog", parent, 0, #or Gtk.DialogFlags.MODAL
(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
Gtk.STOCK_OK, Gtk.ResponseType.OK))
self.set_default_size(100, 100)
label = Gtk.Label("This is a dialog to display additional information")
box = self.get_content_area()
box.add(label)
self.show_all()
class DialogWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="Dialog Example")
self.set_border_width(6)
button = Gtk.Button("Open dialog")
button.connect("clicked", self.on_button_clicked)
self.add(button)
def on_button_clicked(self, widget):
dialog = DialogExample(self)
response = dialog.run()
if response == Gtk.ResponseType.OK:
print("The OK button was clicked")
elif response == Gtk.ResponseType.CANCEL:
print("The Cancel button was clicked")
screen = Wnck.Screen.get_default()
screen.force_update() # recommended per Wnck documentation
window_list = screen.get_windows()
for window in window_list:
print(window.get_name())
window, window_list = (None,)*2
screen = None
dialog.destroy()
win = DialogWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
window = None
screen = None
Gtk.main()
Mit Gdk anstelle von Wnck machen Sie dasselbe auf einer etwas niedrigeren Ebene.
Dank für Ihre Antwort danken, aber afaik dies: _ "Die Wnck.Screen.get_windows Methode zurückgibt alle Fenster einschließlich Dialoge. "_ ist nicht wahr. Wenn der Dialog in der Liste der von der Funktion zurückgegebenen Fenster enthalten war, hätte ich diese Frage nie gestellt. Jetzt ist es eine Weile her, aber der einzige andere Fehler, den ich mir vorstellen kann, ist, dass ich etwas warten muss, bevor ich die Fensterliste erhalte, aber da es nicht darum geht, dass der Dialog für jetzt sichtbar ist, denke ich nicht Die Erstellung des Dialogs sollte so lange dauern. Kennen Sie andere Gründe, warum der Dialog nicht in dieser Liste von Fenstern wäre? – Zelphir
Beachten Sie auch, dass Dialoge in keiner Taskleiste auf meinem System angezeigt werden. Wenn wnck also eine Art Taskleistenprüfung verwendet, funktioniert das nicht so. – Zelphir
Ich konnte Ihr Beispiel ausführen und bin nun davon überzeugt, dass es in meinem Pytest einen anderen Fehler geben muss, der dazu führt, dass der Dialog nicht in der Liste erscheint. Vielleicht kann ich es mit Ihrem Beispiel arbeiten. – Zelphir