Code cleanup in platform/x11

This commit is contained in:
Mario Schlack 2016-07-21 21:11:34 +02:00
parent b623acb718
commit 503f9ab9d9
4 changed files with 37 additions and 156 deletions

View File

@ -62,7 +62,6 @@ def get_opts():
('use_leak_sanitizer','Use llvm compiler sanitize memory leaks','no'), ('use_leak_sanitizer','Use llvm compiler sanitize memory leaks','no'),
('pulseaudio','Detect & Use pulseaudio','yes'), ('pulseaudio','Detect & Use pulseaudio','yes'),
('udev','Use udev for gamepad connection callbacks','no'), ('udev','Use udev for gamepad connection callbacks','no'),
('new_wm_api', 'Use experimental window management API','no'),
('debug_release', 'Add debug symbols to release version','no'), ('debug_release', 'Add debug symbols to release version','no'),
] ]
@ -204,10 +203,6 @@ def configure(env):
env.Append( BUILDERS = { 'GLSL120GLES' : env.Builder(action = methods.build_gles2_headers, suffix = 'glsl.h',src_suffix = '.glsl') } ) env.Append( BUILDERS = { 'GLSL120GLES' : env.Builder(action = methods.build_gles2_headers, suffix = 'glsl.h',src_suffix = '.glsl') } )
#env.Append( BUILDERS = { 'HLSL9' : env.Builder(action = methods.build_hlsl_dx9_headers, suffix = 'hlsl.h',src_suffix = '.hlsl') } ) #env.Append( BUILDERS = { 'HLSL9' : env.Builder(action = methods.build_hlsl_dx9_headers, suffix = 'hlsl.h',src_suffix = '.hlsl') } )
if(env["new_wm_api"]=="yes"):
env.Append(CPPFLAGS=['-DNEW_WM_API'])
env.ParseConfig('pkg-config xinerama --cflags --libs')
if (env["use_static_cpp"]=="yes"): if (env["use_static_cpp"]=="yes"):
env.Append(LINKFLAGS=['-static-libstdc++']) env.Append(LINKFLAGS=['-static-libstdc++'])

View File

@ -259,7 +259,7 @@ void joystick_linux::close_joystick(int p_id) {
attached_devices.remove(attached_devices.find(joy.devpath)); attached_devices.remove(attached_devices.find(joy.devpath));
input->joy_connection_changed(p_id, false, ""); input->joy_connection_changed(p_id, false, "");
}; };
}; }
static String _hex_str(uint8_t p_byte) { static String _hex_str(uint8_t p_byte) {
@ -271,7 +271,7 @@ static String _hex_str(uint8_t p_byte) {
ret[1] = dict[p_byte & 0xF]; ret[1] = dict[p_byte & 0xF];
return ret; return ret;
}; }
void joystick_linux::setup_joystick_properties(int p_id) { void joystick_linux::setup_joystick_properties(int p_id) {

View File

@ -197,6 +197,7 @@ unsigned int KeyMappingX11::get_keycode(KeySym p_keysym) {
return 0; return 0;
} }
KeySym KeyMappingX11::get_keysym(unsigned int p_code) { KeySym KeyMappingX11::get_keysym(unsigned int p_code) {
// kinda bruteforce.. could optimize. // kinda bruteforce.. could optimize.

View File

@ -216,8 +216,6 @@ void OS_X11::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi
visual_server =memnew(VisualServerWrapMT(visual_server,get_render_thread_mode()==RENDER_SEPARATE_THREAD)); visual_server =memnew(VisualServerWrapMT(visual_server,get_render_thread_mode()==RENDER_SEPARATE_THREAD));
} }
#if 1
// NEW_WM_API
// borderless fullscreen window mode // borderless fullscreen window mode
if (current_videomode.fullscreen) { if (current_videomode.fullscreen) {
// needed for lxde/openbox, possibly others // needed for lxde/openbox, possibly others
@ -267,22 +265,6 @@ void OS_X11::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi
XSetWMNormalHints(x11_display, x11_window, xsh); XSetWMNormalHints(x11_display, x11_window, xsh);
XFree(xsh); XFree(xsh);
} }
#else
capture_idle = 0;
minimized = false;
maximized = false;
if (current_videomode.fullscreen) {
//set_wm_border(false);
set_wm_fullscreen(true);
}
if (!current_videomode.resizable) {
int screen = get_current_screen();
Size2i screen_size = get_screen_size(screen);
set_window_size(screen_size);
set_window_resizable(false);
}
#endif
AudioDriverManagerSW::get_driver(p_audio_driver)->set_singleton(); AudioDriverManagerSW::get_driver(p_audio_driver)->set_singleton();
@ -440,7 +422,6 @@ void OS_X11::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi
XFreeGC(x11_display, gc); XFreeGC(x11_display, gc);
if (cursor == None) if (cursor == None)
{ {
ERR_PRINT("FAILED CREATING CURSOR"); ERR_PRINT("FAILED CREATING CURSOR");
@ -579,7 +560,7 @@ void OS_X11::set_mouse_mode(MouseMode p_mode) {
ButtonPressMask | ButtonReleaseMask | ButtonPressMask | ButtonReleaseMask |
PointerMotionMask, GrabModeAsync, GrabModeAsync, PointerMotionMask, GrabModeAsync, GrabModeAsync,
x11_window, None, CurrentTime) != x11_window, None, CurrentTime) !=
GrabSuccess) { GrabSuccess) {
ERR_PRINT("NO GRAB"); ERR_PRINT("NO GRAB");
} }
@ -643,22 +624,6 @@ OS::VideoMode OS_X11::get_video_mode(int p_screen) const {
void OS_X11::get_fullscreen_mode_list(List<VideoMode> *p_list,int p_screen) const { void OS_X11::get_fullscreen_mode_list(List<VideoMode> *p_list,int p_screen) const {
} }
//#ifdef NEW_WM_API
#if 0
// Just now not needed. Can be used for a possible OS.set_border(bool) method
void OS_X11::set_wm_border(bool p_enabled) {
// needed for lxde/openbox, possibly others
Hints hints;
Atom property;
hints.flags = 2;
hints.decorations = p_enabled ? 1L : 0L;
property = XInternAtom(x11_display, "_MOTIF_WM_HINTS", True);
XChangeProperty(x11_display, x11_window, property, property, 32, PropModeReplace, (unsigned char *)&hints, 5);
XMapRaised(x11_display, x11_window);
//XMoveResizeWindow(x11_display, x11_window, 0, 0, 800, 800);
}
#endif
void OS_X11::set_wm_fullscreen(bool p_enabled) { void OS_X11::set_wm_fullscreen(bool p_enabled) {
// Using EWMH -- Extened Window Manager Hints // Using EWMH -- Extened Window Manager Hints
XEvent xev; XEvent xev;
@ -811,54 +776,7 @@ Point2 OS_X11::get_window_position() const {
} }
void OS_X11::set_window_position(const Point2& p_position) { void OS_X11::set_window_position(const Point2& p_position) {
// Using EWMH -- Extended Window Manager Hints
// to get the size of the decoration
#if 0
Atom property = XInternAtom(x11_display,"_NET_FRAME_EXTENTS", True);
Atom type;
int format;
unsigned long len;
unsigned long remaining;
unsigned char *data = NULL;
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);
}
int screen = get_current_screen();
Point2i screen_position = get_screen_position(screen);
left -= screen_position.x;
top -= screen_position.y;
XMoveWindow(x11_display,x11_window,p_position.x - left,p_position.y - top);
#else
XMoveWindow(x11_display,x11_window,p_position.x,p_position.y); XMoveWindow(x11_display,x11_window,p_position.x,p_position.y);
#endif
} }
Size2 OS_X11::get_window_size() const { Size2 OS_X11::get_window_size() const {
@ -902,20 +820,19 @@ bool OS_X11::is_window_resizable() const {
} }
void OS_X11::set_window_minimized(bool p_enabled) { void OS_X11::set_window_minimized(bool p_enabled) {
// Using ICCCM -- Inter-Client Communication Conventions Manual // Using ICCCM -- Inter-Client Communication Conventions Manual
XEvent xev; XEvent xev;
Atom wm_change = XInternAtom(x11_display, "WM_CHANGE_STATE", False); Atom wm_change = XInternAtom(x11_display, "WM_CHANGE_STATE", False);
memset(&xev, 0, sizeof(xev)); memset(&xev, 0, sizeof(xev));
xev.type = ClientMessage; xev.type = ClientMessage;
xev.xclient.window = x11_window; xev.xclient.window = x11_window;
xev.xclient.message_type = wm_change; xev.xclient.message_type = wm_change;
xev.xclient.format = 32; xev.xclient.format = 32;
xev.xclient.data.l[0] = p_enabled ? WM_IconicState : WM_NormalState; xev.xclient.data.l[0] = p_enabled ? WM_IconicState : WM_NormalState;
XSendEvent(x11_display, DefaultRootWindow(x11_display), False, SubstructureRedirectMask | SubstructureNotifyMask, &xev); XSendEvent(x11_display, DefaultRootWindow(x11_display), False, SubstructureRedirectMask | SubstructureNotifyMask, &xev);
//XEvent xev;
Atom wm_state = XInternAtom(x11_display, "_NET_WM_STATE", False); Atom wm_state = XInternAtom(x11_display, "_NET_WM_STATE", False);
Atom wm_hidden = XInternAtom(x11_display, "_NET_WM_STATE_HIDDEN", False); Atom wm_hidden = XInternAtom(x11_display, "_NET_WM_STATE_HIDDEN", False);
@ -979,47 +896,33 @@ void OS_X11::set_window_maximized(bool p_enabled) {
xev.xclient.data.l[2] = wm_max_vert; xev.xclient.data.l[2] = wm_max_vert;
XSendEvent(x11_display, DefaultRootWindow(x11_display), False, SubstructureRedirectMask | SubstructureNotifyMask, &xev); XSendEvent(x11_display, DefaultRootWindow(x11_display), False, SubstructureRedirectMask | SubstructureNotifyMask, &xev);
/* sorry this does not fix it, fails on multi monitor
XWindowAttributes xwa;
XGetWindowAttributes(x11_display,DefaultRootWindow(x11_display),&xwa);
current_videomode.width = xwa.width;
current_videomode.height = xwa.height;
//*/
// current_videomode.width = wm_max_horz;
// current_videomode.height = wm_max_vert;
//Size2 ss = get_screen_size(get_current_screen());
//current_videomode.width=ss.width;
//current_videomode.height=ss.height;
maximized = p_enabled; maximized = p_enabled;
} }
bool OS_X11::is_window_maximized() const { bool OS_X11::is_window_maximized() const {
// Using EWMH -- Extended Window Manager Hints // Using EWMH -- Extended Window Manager Hints
Atom property = XInternAtom(x11_display,"_NET_WM_STATE",False ); Atom property = XInternAtom(x11_display,"_NET_WM_STATE",False );
Atom type; Atom type;
int format; int format;
unsigned long len; unsigned long len;
unsigned long remaining; unsigned long remaining;
unsigned char *data = NULL; unsigned char *data = NULL;
int result = XGetWindowProperty( int result = XGetWindowProperty(
x11_display, x11_display,
x11_window, x11_window,
property, property,
0, 0,
1024, 1024,
False, False,
XA_ATOM, XA_ATOM,
&type, &type,
&format, &format,
&len, &len,
&remaining, &remaining,
&data &data
); );
if(result == Success) { if(result == Success) {
Atom *atoms = (Atom*) data; Atom *atoms = (Atom*) data;
@ -1363,11 +1266,6 @@ void OS_X11::process_xevents() {
} break; } break;
case FocusIn: case FocusIn:
minimized = false; minimized = false;
#ifdef NEW_WM_API
if(current_videomode.fullscreen) {
set_wm_fullscreen(true);
}
#endif
main_loop->notification(MainLoop::NOTIFICATION_WM_FOCUS_IN); main_loop->notification(MainLoop::NOTIFICATION_WM_FOCUS_IN);
if (mouse_mode==MOUSE_MODE_CAPTURED) { if (mouse_mode==MOUSE_MODE_CAPTURED) {
XGrabPointer(x11_display, x11_window, True, XGrabPointer(x11_display, x11_window, True,
@ -1378,12 +1276,6 @@ void OS_X11::process_xevents() {
break; break;
case FocusOut: case FocusOut:
#ifdef NEW_WM_API
if(current_videomode.fullscreen) {
set_wm_fullscreen(false);
set_window_minimized(true);
}
#endif
main_loop->notification(MainLoop::NOTIFICATION_WM_FOCUS_OUT); main_loop->notification(MainLoop::NOTIFICATION_WM_FOCUS_OUT);
if (mouse_mode==MOUSE_MODE_CAPTURED) { if (mouse_mode==MOUSE_MODE_CAPTURED) {
//dear X11, I try, I really try, but you never work, you do whathever you want. //dear X11, I try, I really try, but you never work, you do whathever you want.
@ -1527,13 +1419,6 @@ void OS_X11::process_xevents() {
Point2i rel = pos - last_mouse_pos; Point2i rel = pos - last_mouse_pos;
#ifdef NEW_WM_API
if (mouse_mode==MOUSE_MODE_CAPTURED) {
pos.x = current_videomode.width / 2;
pos.y = current_videomode.height / 2;
}
#endif
InputEvent motion_event; InputEvent motion_event;
motion_event.ID=++event_id; motion_event.ID=++event_id;
motion_event.type=InputEvent::MOUSE_MOTION; motion_event.type=InputEvent::MOUSE_MOTION;
@ -1816,7 +1701,7 @@ static String _get_clipboard(Atom p_source, Window x11_window, ::Display* x11_di
return ret; return ret;
}; }
String OS_X11::get_clipboard() const { String OS_X11::get_clipboard() const {
@ -1828,7 +1713,7 @@ String OS_X11::get_clipboard() const {
}; };
return ret; return ret;
}; }
String OS_X11::get_name() { String OS_X11::get_name() {
@ -2075,4 +1960,4 @@ OS_X11::OS_X11() {
minimized = false; minimized = false;
xim_style=0L; xim_style=0L;
mouse_mode=MOUSE_MODE_VISIBLE; mouse_mode=MOUSE_MODE_VISIBLE;
}; }