XDestroyWindow(display.get_display(), window);
display.remove_window(this);
+
+ if(options.fullscreen)
+ display.restore_mode();
}
void Window::set_title(const string &title)
display.check_error();
}
+void Window::reconfigure(const WindowOptions &opts)
+{
+ bool fullscreen_changed=(opts.fullscreen!=options.fullscreen);
+
+ options=opts;
+
+ ::Display *dpy=display.get_display();
+
+ XMoveResizeWindow(dpy, window, 0, 0, options.width, options.height);
+
+ if(fullscreen_changed)
+ {
+ hide();
+ XSetWindowAttributes attr;
+ attr.override_redirect=options.fullscreen;
+ XChangeWindowAttributes(dpy, window, CWOverrideRedirect, &attr);
+ show();
+ }
+
+ if(options.fullscreen)
+ display.set_mode(VideoMode(options.width, options.height));
+ else if(fullscreen_changed)
+ display.restore_mode();
+}
+
void Window::show()
{
XMapRaised(display.get_display(), window);
XSetWMProtocols(dpy, window, &wm_delete_window, 1);
+ if(options.fullscreen)
+ {
+ display.set_mode(VideoMode(options.width, options.height));
+ XWarpPointer(dpy, None, window, 0, 0, 0, 0, options.width/2, options.height/2);
+ }
+
display.add_window(this);
display.check_error();
}
case EnterNotify:
XSetInputFocus(display.get_display(), window, RevertToParent, CurrentTime);
break;
+ case MapNotify:
+ if(options.fullscreen)
+ XGrabPointer(display.get_display(), window, true, None, GrabModeAsync, GrabModeAsync, window, None, CurrentTime);
+ break;
default:;
}
}