+ if((vid_resizable.integer < 2 || vid_isnetwmfullscreen) && (vid.width != event.xconfigure.width || vid.height != event.xconfigure.height))
+ {
+ vid.width = event.xconfigure.width;
+ vid.height = event.xconfigure.height;
+ if(vid_isnetwmfullscreen)
+ Con_Printf("NetWM fullscreen: actually using resolution %dx%d\n", vid.width, vid.height);
+ else
+ Con_DPrintf("Updating to ConfigureNotify resolution %dx%d\n", vid.width, vid.height);
+
+ DPSOFTRAST_Flush();
+
+ if(vid.softdepthpixels)
+ free(vid.softdepthpixels);
+
+ DestroyXImages();
+ XSync(vidx11_display, False);
+ if(!BuildXImages(vid.width, vid.height))
+ return;
+ XSync(vidx11_display, False);
+
+ vid.softpixels = (unsigned int *) vidx11_ximage[vidx11_ximage_pos]->data;
+ vid.softdepthpixels = (unsigned int *)calloc(4, vid.width * vid.height);
+ }
+ break;
+ case DestroyNotify:
+ // window has been destroyed
+ Sys_Quit(0);
+ break;
+ case ClientMessage:
+ // window manager messages
+ if ((event.xclient.format == 32) && ((unsigned int)event.xclient.data.l[0] == wm_delete_window_atom))
+ Sys_Quit(0);
+ break;
+ case MapNotify:
+ if (vid_isoverrideredirect)
+ break;
+ // window restored
+ vid_hidden = false;
+ VID_RestoreSystemGamma();
+
+ if(vid_isvidmodefullscreen)
+ {
+ // set our video mode
+ XF86VidModeSwitchToMode(vidx11_display, vidx11_screen, &game_vidmode);
+
+ // Move the viewport to top left
+ XF86VidModeSetViewPort(vidx11_display, vidx11_screen, 0, 0);
+ }
+
+ if(vid_isnetwmfullscreen)
+ {
+ // make sure it's fullscreen
+ XEvent event;
+ event.type = ClientMessage;
+ event.xclient.serial = 0;
+ event.xclient.send_event = True;
+ event.xclient.message_type = net_wm_state_atom;
+ event.xclient.window = win;
+ event.xclient.format = 32;
+ event.xclient.data.l[0] = 1;
+ event.xclient.data.l[1] = net_wm_state_fullscreen_atom;
+ event.xclient.data.l[2] = 0;
+ event.xclient.data.l[3] = 1;
+ event.xclient.data.l[4] = 0;
+ XSendEvent(vidx11_display, root, False, SubstructureRedirectMask | SubstructureNotifyMask, &event);
+ }
+
+ dowarp = true;
+
+ break;
+ case UnmapNotify:
+ if (vid_isoverrideredirect)
+ break;
+ // window iconified/rolledup/whatever
+ vid_hidden = true;
+ VID_RestoreSystemGamma();
+
+ if(vid_isvidmodefullscreen)
+ XF86VidModeSwitchToMode(vidx11_display, vidx11_screen, &init_vidmode);
+
+ break;
+ case FocusIn:
+ if (vid_isoverrideredirect)
+ break;
+ // window is now the input focus
+ vid_activewindow = true;
+ break;
+ case FocusOut:
+ if (vid_isoverrideredirect)
+ break;
+
+ if(vid_isnetwmfullscreen && event.xfocus.mode == NotifyNormal)
+ {
+ // iconify netwm fullscreen window when it loses focus
+ // when the user selects it in the taskbar, the window manager will map it again and send MapNotify
+ XEvent event;
+ event.type = ClientMessage;
+ event.xclient.serial = 0;
+ event.xclient.send_event = True;
+ event.xclient.message_type = net_wm_state_atom;
+ event.xclient.window = win;
+ event.xclient.format = 32;
+ event.xclient.data.l[0] = 1;
+ event.xclient.data.l[1] = net_wm_state_hidden_atom;
+ event.xclient.data.l[2] = 0;
+ event.xclient.data.l[3] = 1;
+ event.xclient.data.l[4] = 0;
+ XSendEvent(vidx11_display, root, False, SubstructureRedirectMask | SubstructureNotifyMask, &event);
+ }
+
+ // window is no longer the input focus
+ vid_activewindow = false;
+ VID_RestoreSystemGamma();
+
+ break;
+ case EnterNotify:
+ // mouse entered window
+ break;
+ case LeaveNotify:
+ // mouse left window
+ break;
+ default:
+ if(vidx11_shmevent >= 0 && event.type == vidx11_shmevent)
+ --vidx11_shmwait;