2012-01-31 10 views
6

Piszę i aplikacja OpenGL na Linuksie (Ubuntu 11.10) używając Xlib (X11). Jaki jest najprostszy sposób implementacji przełączania między trybem okienkowym a trybem pełnoekranowym?X11 Pełnoekranowe okno (OpenGL)

Odpowiedz

4

na poziomie protokołu, patrz właściwość _NET_WM_STATE z towarzyszącą komunikatem klienta i flagą stanu pełnego ekranu. jest to określone w specyfikacji EWMH. dla punktów bonusowych możesz chcieć ręcznie wdrożyć tryb pełnoekranowy, jeśli WM nie zgłasza wsparcia dla oficjalnej wskazówki, specyfikacja EWMH umożliwia sprawdzenie, co jest obsługiwane. Możesz również wziąć wskaźnik myszy i/lub klawiaturę , jeśli nie chcesz, aby ludzie przypadkowo opuścili tryb pełnoekranowy.

lub, aby uniknąć nauki niskiego poziomu X gunge, wystarczy użyć SDL lub GTK lub Qt lub coś podobnego i wszyscy powinni mieć proste wywołanie metody, aby przełączyć na pełny ekran.

8

Oto implementacja what Havoc P suggested, aby zapisać następna osoba wysiłek:

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

proszę wyjaśnić dlaczego ta praca, a nie tylko daje odpowiedź – ArtB

+0

Um, gcc narzeka kiedy użyć tego fragmentu kodu. Zgodnie ze stroną podręcznika 'XChangeProperty', czy drugi do ostatniego argument powyższej funkcji nie powinien być łańcuchem, a nie tablicą atomów? – fouric

+0

'XChangeProperty' prawdopodobnie wprowadza w błąd' unsigned char * data', ale w rzeczywistości ma to być wskaźnik do tablicy atomów, jak w powyższym fragmencie. Co to jest skarga gcc? Jeśli próbujesz skompilować to jako kod C++, musisz użyć jawnej obsady, takiej jak '(unsigned char *) atoms'. –

Powiązane problemy