X11 window fullscreen mode

Рейтинг: 1Ответов: 1Опубликовано: 17.04.2015

Здравствуйте! Как создать полноэкранное окно в XLib? Вот как я создаю обычное:

if(!(_display = XOpenDisplay(NULL))){ std::cout << "Error opening display" << std::endl; }
int _screen = DefaultScreen(_display);
_vinfo = glXChooseVisual(_display, _screen, _attributes);
_cmap = XCreateColormap(_display, RootWindow(_display, _screen), _vinfo->visual, AllocNone);
_wattributes.colormap = _cmap;
_wattributes.event_mask = FocusChangeMask | PointerMotionMask | ButtonPressMask | ButtonReleaseMask | ExposureMask | KeyPressMask | KeyReleaseMask | StructureNotifyMask;

if(!(_window = XCreateWindow(_display, RootWindow(_display, _screen), _x, _y, _width, _height, 0, _vinfo->depth, InputOutput, _vinfo->visual, CWColormap | CWEventMask, &_wattributes))){ std::cout << "Error creating window" << std::endl; }
XMapWindow(_display, _window);
XStoreName(_display, _window, _title);
_close = XInternAtom(_display, "WM_DELETE_WINDOW", False);
XSetWMProtocols(_display, _window, &_close, 0);

_context = glXCreateContext(_display, _vinfo, NULL, GL_TRUE);
glXMakeCurrent(_display, _window, _context);

А как сделать его "fullscreen"?

Ответы

▲ 2Принят

Вам должен помочь сей код:

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, (const unsigned char*)atoms, 1
  );
}

См. X11 Fullscreen window.