rendered paste body$ cat 2.cpp
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xos.h>
#include <stdio.h>
#include <string.h>
#define X 0
#define Y 0
#define WIDTH 1024
#define HEIGHT 768
#define WIDTH_MIN 1024
#define HEIGHT_MIN 768
#define BORDER_WIDTH 0
int main(int argc, char *argv[])
{
Display * display; /* Указатель на структуру Display */
int ScreenNumber; /* Номер экрана */
GC gc; /* Графический контекст */
XEvent report;
Window window;
/* Устанавливаем связь с сервером */
if ( ( display = XOpenDisplay ( NULL ) ) == NULL )
{
puts ("Can not connect to the X server!\n");
return 1;
}
/* Получаем номер основного экрана */
ScreenNumber = DefaultScreen ( display );
/* Создаем окно */
window = XCreateSimpleWindow ( display,
RootWindow ( display, ScreenNumber ),
X, Y, WIDTH, HEIGHT, BORDER_WIDTH,
BlackPixel ( display, ScreenNumber ),
WhitePixel ( display, ScreenNumber ) );
/* Выбираем события, которые будет обрабатывать программа */
XSelectInput ( display, window, KeyPressMask );
/* Покажем окно */
XMapWindow ( display, window );
// развернем его на весь экран
Atom wmState = XInternAtom(display, "_NET_WM_STATE", false);
Atom atfullScreen = XInternAtom(display,"_NET_WM_STATE_FULLSCREEN", false);
XEvent xev;
xev.xclient.type=ClientMessage;
xev.xclient.serial = 0;
xev.xclient.send_event=True;
xev.xclient.window=window;
xev.xclient.message_type=wmState;
xev.xclient.format=32;
xev.xclient.data.l[0] = 1;//add
xev.xclient.data.l[1] = atfullScreen;
xev.xclient.data.l[2] = 0;
XSendEvent(display, DefaultRootWindow(display), false,
SubstructureRedirectMask | SubstructureNotifyMask, &xev);
XMoveResizeWindow(display, window, 0,0,WIDTH,HEIGHT);
//Спрячем курсор мыши
Pixmap bm_no;
Colormap cmap;
Cursor no_ptr;
XColor black, dummy;
static char bm_no_data[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
cmap = DefaultColormap(display, DefaultScreen(display));
XAllocNamedColor(display, cmap, "black", &black, &dummy);
bm_no = XCreateBitmapFromData(display, window, bm_no_data, 8, 8);
no_ptr = XCreatePixmapCursor(display, bm_no, bm_no, &black, &black, 0, 0);
XDefineCursor(display, window, no_ptr);
XFreeCursor(display, no_ptr);
if (bm_no != None)
XFreePixmap(display, bm_no);
XFreeColors(display, cmap, &black.pixel, 1, 0);
/* Создадим цикл получения и обработки ошибок */
while ( 1 )
{
XNextEvent ( display, &report );
switch ( report.type )
{
case KeyPress :
/* Выход нажатием клавиши клавиатуры */
XCloseDisplay ( display );
return 0;
}
}
}
Компиляем:
g++ 2.cpp -lX11 -lXrender -lXau -lXdmcp -ldl -lpthread -static
в результате после выхода по нажатию клавиши:
$ ./a.out
*** glibc detected *** double free or corruption (out): 0xb7c4a1c0 ***
Aborted
компиляем:
$ g++ 2.cpp -lX11 -lXrender -lXau -lXdmcp -ldl -lpthread
$ ./a.out
$