2009-04-20 13 views
1

Gibt es eine Möglichkeit, ein gtk.Window-Objekt zu zwingen, die show/hide-Befehle des Window Managers zu ignorieren, wie "iconify" und "show desktop?"Persistente Windows in PyGTK

Ich versuche ein persistentes Fenster zu erstellen, das auf dem Desktop bleibt, das nicht mit allen anderen Fenstern verschwindet, wenn der Desktop offen gelegt wird.

BEARBEITEN: Ich denke, was ich frage mich speziell ist, ob es möglich ist, das Verhalten in Anwendungen wie Docks, Desktop-Widgets, System-Trays, etc. mit PyGTK reproduzieren?

+1

Warum würden Sie das tun? Es scheint sehr schlecht zu sein, eine Benutzeranfrage zu ignorieren, um alle Fenster auszublenden. –

+0

In der Hoffnung, etwas wie ein Desktop-Widget zu erstellen, wo die "Desktop anzeigen" -Funktion eines Fenstermanagers einen einfachen Zugang dazu bieten könnte.Vielleicht ist es ein Fehler, ein Window-Objekt dafür zu verwenden. Ich bin offen für andere Vorschläge. – Evan

Antwort

2

Sie haben es rückwärts; Es ist nicht der Fenstermanager, der dem Fenster sagt, dass er minimieren soll, indem er einen Befehl sendet. Der Fenstermanager besitzt das Fenster, wenn es aufhören soll, ein Fenster zuzuordnen, wird es es einfach tun, ohne das Fenster nach Erlaubnis zu fragen.

Also würde ich denken, dass die Antwort "Nein" ist.

+0

Dann ist meine Frage, allgemeiner, was wäre ein Best-Practice-Ansatz zum Erstellen eines Desktop-Widget mit PyGTK? – Evan

+0

Überprüfen Sie, ob die Unterstützung für "sticky" -Fenster angezeigt wird. Dies könnte der richtige Hinweis für den Manager sein, das Fenster nicht zu minimieren. Es macht normalerweise auch das Fenster am selben Ort erscheinen alle (virtuellen) Desktops, die gut sein könnten. – unwind

+0

Ich weiß über die "sticky" -Eigenschaft, und es funktioniert genau so, wie es sollte, aber dies wird nicht von einem der WMs, die ich getestet habe, in der Art, die ich beabsichtige. – Evan

1

Versuchen Sie, die GdkWindowTypeHint auf der GtkWindow Einstellung:

gtk_window_set_type_hint(the_window, GDK_WINDOW_TYPE_HINT_UTILITY); 

Es gibt auch verschiedene Methoden für nicht mit dem Fenster aufgeführt in Pagern oder Taskleisten und haben es auf allen Desktop angezeigt. Beachten Sie, dass das gesamte Verhalten von der Unterstützung durch den Fenstermanager abhängt. Wenn Sie nicht etwas wirklich Altes verwenden, sollte das kein Problem darstellen.

+1

Und wenn Sie etwas wirklich altes verwenden, wird es wahrscheinlich viel einfacher :) – XTL

0

Nachdem ich keine Antwort erhalten habe und ein wenig mehr Forschung betrieben habe, kann ich sagen, dass es - soweit ich weiß - keinen einfachen Weg gibt, diese Art von Funktionalität mit PyGTK zu erreichen . Die besten Optionen sind, Fenster-Manager-Hinweise zu setzen und es dem WM überlassen, das zu tun, was Sie wollen (hoffentlich).

0

Ich denke, gtk_window_set_type_hint(window, GDK_WINDOW_TYPE_HINT_SPLASHSCREEN) ist was du willst. Es ist auch GDK_WINDOW_TYPE_HINT_DOCK, aber dann bleibt das Fenster über allem, und Sie können es nicht zurücksenden.

1

Vom list of window type hints, nur zwei dargestellt sind nach wie vor, wenn Sie auf die Schaltfläche Desktop anzeigen klicken:

  • gtk.gdk.WINDOW_TYPE_HINT_DESKTOP
  • gtk.gdk.WINDOW_TYPE_HINT_DOCK

diese beiden Das Fenster verliert an Dekorationen (dh keine Rahmen oder Titelleiste). Das Verschieben/Ändern der Größe hängt also von Ihrer App ab. DESKTOP bewirkt, dass das Fenster immer hinter anderen Fenstern steht. DOCK bewirkt, dass es immer vorne ist.

Wenn Sie SPLASHSCREEN auswählen, erhalten Sie ein undekoriertes Fenster, das immer noch ausgeblendet wird, wenn Sie auf show desktop klicken.

Wenn Sie eine randlose, unbewegliche Fenster wollen, die noch zeigt, wenn der Benutzer klickt „Desktop anzeigen“ Verwendung:

window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DOCK) 

, bevor Sie anrufen window.show(). Sobald das Fenster angezeigt wurde, können Sie seinen Typ nicht ändern.