Ventana de pantalla completa X11 (OpenGL)

I'm writing and OpenGL application on linux (Ubuntu 11.10) using Xlib (X11). What is the simplest way to implement toggle between windowed and fullscreen mode?

preguntado el 31 de enero de 12 a las 16:01

2 Respuestas

Aquí hay una implementación de what Havoc P suggested, to save the next person the effort:

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
  );
}

contestado el 23 de mayo de 17 a las 13:05

Please explain why this work instead of just giving the answer - Trineo

Um, gcc is complaining when I use this code snippet. According to the XChangeProperty manpage, shouldn't the second-to-last argument of the aforementioned function be a string, not an array of atoms? - fouric

XChangeProperty perhaps misleadingly takes unsigned char* data but it is indeed meant to be a pointer to an array of atoms like in the snippet above. What is gcc's complaint? If you're trying to compile this as C++ code, you need to use an explicit cast like (unsigned char *)atoms. - Emil Mikulic

T @ArtB Havoc already explained why it works. Like it says on the first line: this is just the implementation, which I'm posting so that other people can copy+paste. - Emil Mikulic

@EmilMikulic it was flagged by the review system, and SO are supposed to be self-contained... but that does lead to corner casese where it seems silly too. In this case I'd've either edit his answer to include your code (which you might not have rights to, or copied his answer into your own). Mind you, in review mode we don't see the question or any other answer, we just see your answer in isolation. - Trineo

on the protocol level, see the _NET_WM_STATE property with accompanying client message and the fullscreen state flag. this is specified in the EWMH spec. for bonus points you may want to manually implement fullscreen if the WM does not report support for the official hint, EWMH specs a way to check what is supported. You may also want to grab the mouse pointer and/or keyboard if you don't want people to accidentally leave fullscreen.

or, to avoid learning low level X gunge, just use SDL or GTK or Qt or something and they should all have a simple method call to toggle fullscreen.

Respondido el 31 de enero de 12 a las 20:01

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.