Derzeit bin ich verantwortlich für die Entwicklung einer (C++) Fensterklasse für ein kleines Projekt; Ziel ist es, Abhängigkeiten auf ein Minimum zu reduzieren. Die Implementierung für Win32/WinAPI funktioniert wie angenommen, aber ich kämpfe, wenn es um Linux/XCB geht.Welches Ereignis wird zum Maximieren/Minimieren verwendet?
Ich bin mir bewusst, dass ich in der Lage bin, die "_NET_WM_STATE" Eigenschaft zu überprüfen, jedoch die Dokumentation kein Ereignis angibt, das auftreten würde, wenn das Fenster maximiert oder minimiert wird. Die Erweiterte Window Manager Hinweise Spezifikation scheint auch kein Ereignis zu definieren.
Also, wie würde man das Maximize/Minimize Event abfangen?
EDIT: Mein Code im Grunde wie das aussieht, aber nicht funktioniert: (By nicht funktioniert, meine ich die if-Bedingung unten nie erfüllt ist.)
// xcb_generic_event_t* msg;
// xcb_intern_atom_reply_t* wmStateMinimized;
case XCB_PROPERTY_NOTIFY: {
xcb_property_notify_event_t* data{reinterpret_cast<xcb_property_notify_event_t*>(msg)};
if(data->atom == wmStateMinimized->atom)
eventQueue.emplace(Event::Minimized);
} break;
Ich habe auch prüfte die Atome, die mir das Ereignis liefert. Sie unterscheiden sich von dem Atom, das von 'wmStateMinimized' bereitgestellt wird, obwohl das Atom für 'wmStateMinimized' vom Fenstermanager bereitgestellt wird.
EDIT 2: Ok, die xcb_property_notify_event_t liefert das Atom, das Veränderung gewesen ist, nicht der Wert selbst ein. die Also, wenn sollte wie diese dann aussehen:
if(data->atom == wmState->atom)
Muss ich herauszufinden, wie der Wert richtig abzurufen.
Es gibt kein bestimmtes Ereignis zum Maximieren/Minimieren. Um nach Änderungen der Eigenschaften zu suchen, müssen Sie PropertyNotify-Ereignisse abonnieren. Dies wird von der PropertyChangeMask gesteuert. –
Danke, habe es auch herausgefunden, indem ich die Ereigniscodes druckte, die meine Anwendung bekommen würde. – Julien
AFAIK, in X11 wurde die Maximierung-Minimierung durch den Fenstermanager gehandhabt. In einigen X11-Apps, die ich geschrieben habe, habe ich es nie explizit behandelt. Diese [SO post] (http://stackoverflow.com/questions/4530786/xlib-create-window-in-mimized-or-maximized-state) könnte für Sie interessant sein. – user3078414