Erstellen Sie ein Gtk-Fenster, das unempfindlich gegenüber Desktop anzeigen ist und in Launcher nicht angezeigt wird

7

Ich möchte ein Gtk.Window erstellen, das an den Desktop angeheftet ist und sich wie ein Desktop-Widget verhält. Ich habe festgestellt, dass ich dies durch eine Einstellung tun kann, self.set_type_hint(Gdk.WindowTypeHint.DESKTOP)die es unter allen Fenstern hält, unbeweglich und unempfindlich gegenüber dem Plugin "Desktop Unity anzeigen". Wenn Sie jedoch auf den Desktop-Bereich außerhalb des Widgets klicken, wird das Fenster hinter dem Desktop ausgeblendet und ich kann es nicht zurückerhalten (ich muss das Programm beenden).

Was ist der beste Weg, um damit umzugehen? Gibt es eine andere Einstellung? Ich habe festgestellt, dass ich auch ein Fenster zum Ignorieren von Show Desktop-Befehlen erhalten kann, wenn ich den skip_taskbar-Hinweis setze und eine Einstellung in compiz deaktiviere, aber ich möchte lieber nicht mit den compiz-Einstellungen der Leute herumspielen, um diesen Effekt zu erzielen.

BEARBEITEN: Ich habe herausgefunden, dass Show Desktop ignoriert wird (siehe unten), kann aber die Launcher-Leiste immer noch nicht überspringen. Der DESKTOP-Fenstertipp hat dafür funktioniert, hat aber die oben genannten Nachteile. Ich habe auch mit dem Festlegen der WM_CLASS in der .desktop-Datei herumgespielt, aber Unity scheint das zu ignorieren.

Ian B.
quelle

Antworten:

7

Ich habe es herausgefunden ... Sie müssen den Typhinweis Gdk.WindowTypeHint.DOCKso einstellen , dass dann auch entweder skip_taskbar_hintODER gesetzt wird skip_pager_hint.

BEARBEITEN Dies funktioniert, aber selbst mit der Skiptaskbar wird das Fenster immer noch als Symbol in der Startleiste angezeigt. Ich brauche einen besseren Weg ...

EDIT2 Verstanden ! Das Problem kam von anderen Startern in der Leiste, die dieselbe WMClass hatten wie das Programm, mit dem ich ein Desktop-Widget erstellen wollte. Um sich von anderen abzuheben, müssen Sie die WMClass des Fensters im Programm sowie im .desktop-Starter festlegen:

Im Code:

Gtk.Window.set_wmclass(WMname,WMclass)

Und im .desktop Launcher:

StartupWMClass=WMname
Ian B.
quelle
1

Ich habe eine Anwendung, die genau das tut, was Sie möchten: Es ist rainlendar2 im Desktop-Modus. XwinInfo-Ausgabe:

xwininfo: Fenster-ID: 0x1200086 "rainlendar2"

  Fenstermanager-Tipps:
      Der Client akzeptiert Eingaben oder Eingabefokus: Ja
      Der Ausgangszustand ist Normalzustand
      Wird auf allen Desktops angezeigt
      Fenstertyp:
          Dock
      Fensterzustand:
          Pager überspringen
          Taskleiste überspringen
          Unten
          Klebrig

Wie sich dies auf Gtk + / Gdk-Flags auswirkt, ist abzuwarten. Aber es scheint, dass Klebrigkeit eine Rolle spielt.

Aquaherd
quelle
Nein ... Klebrigkeit ist nicht das Problem. Ich habe es endlich herausgefunden. Es hat damit zu tun, dass WMClass so eingestellt wird, dass es sich von den Launchern unterscheidet, die bereits in der Launcherbar vorhanden sind
Ian B.