|
@@ -70,7 +70,7 @@ const char * OS_X11::get_video_driver_name(int p_driver) const {
|
|
|
}
|
|
}
|
|
|
OS::VideoMode OS_X11::get_default_video_mode() const {
|
|
OS::VideoMode OS_X11::get_default_video_mode() const {
|
|
|
|
|
|
|
|
- return OS::VideoMode(0,0,800,600,false);
|
|
|
|
|
|
|
+ return OS::VideoMode(800,600,false);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
int OS_X11::get_audio_driver_count() const {
|
|
int OS_X11::get_audio_driver_count() const {
|
|
@@ -162,17 +162,6 @@ void OS_X11::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi
|
|
|
// maybe contextgl wants to be in charge of creating the window
|
|
// maybe contextgl wants to be in charge of creating the window
|
|
|
//print_line("def videomode "+itos(current_videomode.width)+","+itos(current_videomode.height));
|
|
//print_line("def videomode "+itos(current_videomode.width)+","+itos(current_videomode.height));
|
|
|
#if defined(OPENGL_ENABLED) || defined(LEGACYGL_ENABLED)
|
|
#if defined(OPENGL_ENABLED) || defined(LEGACYGL_ENABLED)
|
|
|
- if( current_videomode.x > current_videomode.width ||
|
|
|
|
|
- current_videomode.y > current_videomode.height ||
|
|
|
|
|
- current_videomode.width==0 ||
|
|
|
|
|
- current_videomode.height==0) {
|
|
|
|
|
-
|
|
|
|
|
- current_videomode.x = 0;
|
|
|
|
|
- current_videomode.y = 0;
|
|
|
|
|
- current_videomode.width = 640;
|
|
|
|
|
- current_videomode.height = 480;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
|
|
|
|
|
context_gl = memnew( ContextGL_X11( x11_display, x11_window,current_videomode, false ) );
|
|
context_gl = memnew( ContextGL_X11( x11_display, x11_window,current_videomode, false ) );
|
|
|
context_gl->initialize();
|
|
context_gl->initialize();
|
|
@@ -516,7 +505,7 @@ void OS_X11::set_wm_border(bool p_enabled) {
|
|
|
property = XInternAtom(x11_display, "_MOTIF_WM_HINTS", True);
|
|
property = XInternAtom(x11_display, "_MOTIF_WM_HINTS", True);
|
|
|
XChangeProperty(x11_display, x11_window, property, property, 32, PropModeReplace, (unsigned char *)&hints, 5);
|
|
XChangeProperty(x11_display, x11_window, property, property, 32, PropModeReplace, (unsigned char *)&hints, 5);
|
|
|
XMapRaised(x11_display, x11_window);
|
|
XMapRaised(x11_display, x11_window);
|
|
|
- XMoveResizeWindow(x11_display, x11_window, current_videomode.x, current_videomode.y, current_videomode.width, current_videomode.height);
|
|
|
|
|
|
|
+ XMoveResizeWindow(x11_display, x11_window, 0, 0, current_videomode.width, current_videomode.height);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void OS_X11::set_wm_fullscreen(bool p_enabled) {
|
|
void OS_X11::set_wm_fullscreen(bool p_enabled) {
|
|
@@ -537,26 +526,65 @@ void OS_X11::set_wm_fullscreen(bool p_enabled) {
|
|
|
XSendEvent(x11_display, DefaultRootWindow(x11_display), False, SubstructureNotifyMask, &xev);
|
|
XSendEvent(x11_display, DefaultRootWindow(x11_display), False, SubstructureNotifyMask, &xev);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-void OS_X11::set_fullscreen(bool p_enabled,int p_screen) {
|
|
|
|
|
|
|
+Point2 OS_X11::get_window_position() const {
|
|
|
|
|
+ int x,y;
|
|
|
|
|
+ XWindowAttributes xwa;
|
|
|
|
|
+ Window child;
|
|
|
|
|
+ XTranslateCoordinates( x11_display, x11_window, DefaultRootWindow(x11_display), 0, 0, &x, &y, &child);
|
|
|
|
|
+ XGetWindowAttributes(x11_display, x11_window, &xwa);
|
|
|
|
|
|
|
|
- if(p_enabled) {
|
|
|
|
|
- XWindowAttributes xwa;
|
|
|
|
|
- XGetWindowAttributes(x11_display, x11_window, &xwa);
|
|
|
|
|
|
|
+ return Point2i(x,y);
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
- print_line(itos(xwa.x));
|
|
|
|
|
- print_line(itos(xwa.y));
|
|
|
|
|
- print_line(itos(xwa.width));
|
|
|
|
|
- print_line(itos(xwa.height));
|
|
|
|
|
-
|
|
|
|
|
- current_videomode.x = xwa.x;
|
|
|
|
|
- current_videomode.y = xwa.y;
|
|
|
|
|
- current_videomode.width = xwa.width;
|
|
|
|
|
- current_videomode.height = xwa.height;
|
|
|
|
|
-
|
|
|
|
|
|
|
+void OS_X11::set_window_position(const Point2& p_position) {
|
|
|
|
|
+ // _NET_FRAME_EXTENTS
|
|
|
|
|
|
|
|
|
|
+ Atom property = XInternAtom(x11_display,"_NET_FRAME_EXTENTS", True);
|
|
|
|
|
+ Atom type;
|
|
|
|
|
+ int format;
|
|
|
|
|
+ unsigned long len;
|
|
|
|
|
+ unsigned long remaining;
|
|
|
|
|
+ unsigned char *data = NULL;
|
|
|
|
|
+ //long *extends;
|
|
|
|
|
+ int result;
|
|
|
|
|
+
|
|
|
|
|
+ result = XGetWindowProperty(
|
|
|
|
|
+ x11_display,
|
|
|
|
|
+ x11_window,
|
|
|
|
|
+ property,
|
|
|
|
|
+ 0,
|
|
|
|
|
+ 32,
|
|
|
|
|
+ False,
|
|
|
|
|
+ AnyPropertyType,
|
|
|
|
|
+ &type,
|
|
|
|
|
+ &format,
|
|
|
|
|
+ &len,
|
|
|
|
|
+ &remaining,
|
|
|
|
|
+ &data
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ long left = 0L;
|
|
|
|
|
+ long top = 0L;
|
|
|
|
|
+
|
|
|
|
|
+ if( result == Success ) {
|
|
|
|
|
+ long *extends = (long *) data;
|
|
|
|
|
+
|
|
|
|
|
+ left = extends[0];
|
|
|
|
|
+ top = extends[2];
|
|
|
|
|
+
|
|
|
|
|
+ XFree(data);
|
|
|
|
|
+ data = NULL;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ XMoveWindow(x11_display,x11_window,p_position.x - left,p_position.y - top);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void OS_X11::set_fullscreen(bool p_enabled,int p_screen) {
|
|
|
|
|
+
|
|
|
|
|
+ if(p_enabled) {
|
|
|
pre_videomode = current_videomode;
|
|
pre_videomode = current_videomode;
|
|
|
|
|
|
|
|
- // Get Desktop resolutuion
|
|
|
|
|
|
|
+ XWindowAttributes xwa;
|
|
|
XGetWindowAttributes(x11_display, DefaultRootWindow(x11_display), &xwa);
|
|
XGetWindowAttributes(x11_display, DefaultRootWindow(x11_display), &xwa);
|
|
|
|
|
|
|
|
current_videomode.fullscreen = True;
|
|
current_videomode.fullscreen = True;
|
|
@@ -567,8 +595,6 @@ void OS_X11::set_fullscreen(bool p_enabled,int p_screen) {
|
|
|
set_wm_fullscreen(true);
|
|
set_wm_fullscreen(true);
|
|
|
} else {
|
|
} else {
|
|
|
current_videomode.fullscreen = False;
|
|
current_videomode.fullscreen = False;
|
|
|
- current_videomode.x = pre_videomode.x;
|
|
|
|
|
- current_videomode.y = pre_videomode.y;
|
|
|
|
|
current_videomode.width = pre_videomode.width;
|
|
current_videomode.width = pre_videomode.width;
|
|
|
current_videomode.height = pre_videomode.height;
|
|
current_videomode.height = pre_videomode.height;
|
|
|
|
|
|