Fensterverwaltung

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Pygoscelis papua
User
Beiträge: 206
Registriert: Freitag 13. März 2015, 18:36

ja den Fehler meine ich. Ich habe die Funktion einfach nur aus dem Quelltext abgeschrieben, das war wahrscheinlich das Problem.
Ich hatte irgendwie vorher da mal True verwendet, deshalb habe ich nicht dran gedacht, dass das ja so gehen müsste. also doch

Code: Alles auswählen

window_type = EWMH._getAtomName(EWMH.getWmWindowType(win)[0])
Gut.

Aber für mein Problem mit dem minimieren habe ich noch keine wirkliche Lösung gefunden.
ich habe etwas von der funktion 'XIconifyWindow' gelesen, habe sie aber bis jetzt nicht finden können.
Aber das mit dem setState... müsste doch eigentlich gehen, oder was habe ich falsch gemacht?
import this
hidden python features

JAVA = Just Another Vulnerability Announcement :D
Pygoscelis papua
User
Beiträge: 206
Registriert: Freitag 13. März 2015, 18:36

ist das hier hilfreich?
_NET_WM_STATE_HIDDEN should be set by the Window Manager to indicate that a window would not be visible on the screen if its desktop/viewport were active and its coordinates were within the screen bounds. The canonical example is that minimized windows should be in the _NET_WM_STATE_HIDDEN state. Pagers and similar applications should use _NET_WM_STATE_HIDDEN instead of WM_STATE to decide whether to display a window in miniature representations of the windows on a desktop.

Implementation note: if an Application asks to toggle _NET_WM_STATE_HIDDEN the Window Manager should probably just ignore the request, since _NET_WM_STATE_HIDDEN is a function of some other aspect of the window such as minimization, rather than an independent state.
Da steht doch, das '_NET_WM_STATE_HIDDEN' ignoriert wird, wenn ich das recht verstehe.
Wi minimiert man das fenster dann?
Kann ich dafür eventuell '_NET_WM_ACTION_MINIMIZE' verwenden?
Ich habe irgendwie nicht gefunden, wie man diese ACTIONS verwenden kann.
import this
hidden python features

JAVA = Just Another Vulnerability Announcement :D
BlackJack

@Pygoscelis papua: Etwas weiter oben, im ersten Absatz des Abschnitts _NET_WM_STATE, aus dem Du zitierst, steht folgendes:
A Client wishing to change the state of a window MUST send a _NET_WM_STATE client message to the root window (see below).
Wobei das `setWmState()` eigentlich machen sollte. Schau mal die Signatur: `setWmState(win, action, state, state2=0)`. Das zweite Argument heisst `action`. Nun rate mal wo man die *ACTION*-Konstanten verwenden kann. ;-)
Pygoscelis papua
User
Beiträge: 206
Registriert: Freitag 13. März 2015, 18:36

??? Ich glaub ich bin einfach zu dumm dafür.
Wenn ich dort '_NET_WM_ACTION_MINIMIZE' einsetze was nehme ich dann als state?
etwa so:

Code: Alles auswählen

EWMH.setWmState(win, '_NET_WM_ACTION_MINIMIZE', '_NET_WM_STATE_HIDDEN')
Ich möchte ja einfach nur, dass das Fenster minimiert wird. wie würdest du es den schreiben?
Da wird mir ausgegeben wie erwartet:

Code: Alles auswählen

TypeError: an integer is required (got type str)
Aber da steht doch
if an Application asks to toggle _NET_WM_STATE_HIDDEN the Window Manager should probably just ignore the request, since _NET_WM_STATE_HIDDEN is a function of some other aspect of the window such as minimization, rather than an independent state.
import this
hidden python features

JAVA = Just Another Vulnerability Announcement :D
BlackJack

@Pygoscelis papua: Okay, als `state` nimmst Du die *_ACTION_* (nicht sehr intuitiv :-() und als `action` musst Du 0, 1, oder 2 angeben. Deswegen die Fehlermeldung das ein `int` erwartet wird. Die Zahlen stehen dafür ob Du das löschen, setzen, oder toggeln willst.

Edit: Und wahrscheinlich doch nicht die *_ACTION_* sondern die entsprechende *_STATE_* als `state`. :oops:
Pygoscelis papua
User
Beiträge: 206
Registriert: Freitag 13. März 2015, 18:36

Ich habe das Programm jetzt mal auf das nötigste begrenzt, es geht aber immer noch nicht.

Code: Alles auswählen

from ewmh import EWMH
EWMH = EWMH()
win = EWMH.getActiveWindow()
EWMH.setWmState(win, 2, '_NET_WM_ACTION_MINIMIZE')
EWMH.display.flush()
Also irgendwas muss es da doch geben.

Edit:
Ich habe das hier gefunden, aber ich glaube es geht nur für gnome/gtk ich habe es noch nicht testen können.
http://unix.stackexchange.com/questions ... the-others
import this
hidden python features

JAVA = Just Another Vulnerability Announcement :D
Pygoscelis papua
User
Beiträge: 206
Registriert: Freitag 13. März 2015, 18:36

Ich glaube ich versuche das ganze erst mal in C und dann versuche ich es in Python zu integrieren.
Vielleicht erstelle ich dann einfache eine shared-libary und binde sie über ctypes ein.
import this
hidden python features

JAVA = Just Another Vulnerability Announcement :D
Antworten