Sto scrivendo e l'applicazione OpenGL su linux (Ubuntu 11.10) utilizzando Xlib (X11). Qual è il modo più semplice per implementare alternare tra la modalità a finestra e a schermo intero?X11 Finestra a schermo intero (OpenGL)
risposta
a livello di protocollo, vedere la proprietà _NET_WM_STATE con il messaggio del client di accompagnamento e il flag di stato a schermo intero. questo è specificato nelle specifiche EWMH. per i punti bonus potresti voler implementare manualmente a schermo intero se il WM non riporta il supporto per il suggerimento ufficiale, EWMH specifica un modo per verificare cosa è supportato. Si consiglia inoltre di afferrare il puntatore del mouse e/o la tastiera se non si desidera che le persone si lascino accidentalmente a schermo intero.
o, per evitare l'apprendimento di gunge X di basso livello, basta usare SDL o GTK o Qt o qualcosa e tutti dovrebbero avere una semplice chiamata di metodo per attivare a schermo intero.
Ecco un'implementazione di what Havoc P suggested, per salvare la prossima persona lo sforzo:
void fullscreen(Display* dpy, Window win) {
Atom atoms[2] = { XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN", False), None };
XChangeProperty(
dpy,
win,
XInternAtom(dpy, "_NET_WM_STATE", False),
XA_ATOM, 32, PropModeReplace, atoms, 1
);
}
Si prega di spiegare il motivo per cui questo lavoro invece di dare la risposta – ArtB
Um, gcc si lamenta quando uso questo frammento di codice. Secondo la manpage 'XChangeProperty', il secondo penultimo argomento della funzione summenzionata non dovrebbe essere una stringa, non una matrice di atomi? – fouric
'XChangeProperty' forse prende in modo errato' char unsigned dati ', ma in realtà è pensato per essere un puntatore a una matrice di atomi come nello snippet sopra. Qual è il reclamo di gcc? Se stai cercando di compilarlo come codice C++, devi usare un cast esplicito come '(unsigned char *) atoms'. –