summaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
authorhurikhan <m4r10.5ch14ck@gmail.com>2015-02-12 15:58:00 +0100
committerhurikhan <m4r10.5ch14ck@gmail.com>2015-02-12 15:58:00 +0100
commitdf7d26ff5b89ce9852813abd370d1357aab1501b (patch)
tree91e81ae719b68b03000e2d488192e6b737ddcf36 /platform
parentf9489b7ff41f6ca609c4c5815bbee975285c0345 (diff)
cleanup + MouseGrab
Diffstat (limited to 'platform')
-rw-r--r--platform/x11/os_x11.cpp81
-rw-r--r--platform/x11/os_x11.h1
2 files changed, 34 insertions, 48 deletions
diff --git a/platform/x11/os_x11.cpp b/platform/x11/os_x11.cpp
index fa3701aeef..9fb2a4c64d 100644
--- a/platform/x11/os_x11.cpp
+++ b/platform/x11/os_x11.cpp
@@ -238,9 +238,11 @@ void OS_X11::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi
XFree(xsh);
}
#else
+ capture_idle = 0;
+ minimized = false;
+ maximized = false;
+
if (current_videomode.fullscreen) {
- minimized = false;
- maximized = false;
//set_wm_border(false);
set_wm_fullscreen(true);
}
@@ -494,8 +496,9 @@ void OS_X11::set_mouse_mode(MouseMode p_mode) {
center.y = current_videomode.height/2;
XWarpPointer(x11_display, None, x11_window,
0,0,0,0, (int)center.x, (int)center.y);
- }
+ input->set_mouse_pos(center);
+ }
}
void OS_X11::warp_mouse_pos(const Point2& p_to) {
@@ -724,44 +727,10 @@ void OS_X11::set_window_size(const Size2 p_size) {
}
void OS_X11::set_fullscreen(bool p_enabled) {
-
-#if 0
- if(p_enabled && current_videomode.fullscreen)
- return;
-
- if(!current_videomode.resizable)
- set_resizable(true);
-
- if(p_enabled) {
- window_data.size = get_window_size();
- window_data.position = get_window_position();
-
- int screen = get_screen();
- Size2i size = get_screen_size(screen);
- Point2i position = get_screen_position(screen);
-
- set_wm_border(false);
- set_wm_fullscreen(true);
- XMoveResizeWindow(x11_display, x11_window, position.x, position.y, size.x, size.y);
-
- current_videomode.fullscreen = True;
- } else {
- set_wm_fullscreen(false);
- set_wm_border(true);
- XMoveResizeWindow(x11_display, x11_window,
- window_data.position.x,
- window_data.position.y,
- window_data.size.width,
- window_data.size.height);
-
- current_videomode.fullscreen = False;
- }
-#endif
set_wm_fullscreen(p_enabled);
current_videomode.fullscreen = p_enabled;
visual_server->init();
-
}
bool OS_X11::is_fullscreen() const {
@@ -1209,7 +1178,7 @@ void OS_X11::process_xevents() {
event.xbutton.x=last_mouse_pos.x;
event.xbutton.y=last_mouse_pos.y;
}
-
+
InputEvent mouse_event;
mouse_event.ID=++event_id;
mouse_event.type = InputEvent::MOUSE_BUTTON;
@@ -1244,7 +1213,7 @@ void OS_X11::process_xevents() {
last_click_ms+=diff;
last_click_pos = Point2(event.xbutton.x,event.xbutton.y);
}
- }
+ }
input->parse_input_event( mouse_event);
@@ -1254,11 +1223,10 @@ void OS_X11::process_xevents() {
last_timestamp=event.xmotion.time;
-
+
// Motion is also simple.
// A little hack is in order
// to be able to send relative motion events.
-
Point2i pos( event.xmotion.x, event.xmotion.y );
if (mouse_mode==MOUSE_MODE_CAPTURED) {
@@ -1273,7 +1241,7 @@ void OS_X11::process_xevents() {
}
Point2i new_center = pos;
- pos = last_mouse_pos + ( pos-center );
+ pos = last_mouse_pos + ( pos - center );
center=new_center;
do_mouse_warp=true;
#else
@@ -1287,9 +1255,7 @@ void OS_X11::process_xevents() {
XWarpPointer(x11_display, None, x11_window,
0,0,0,0, (int)center.x, (int)center.y);
#endif
-
}
-
if (!last_mouse_pos_valid) {
@@ -1298,7 +1264,14 @@ void OS_X11::process_xevents() {
}
Point2i rel = pos - last_mouse_pos;
-
+
+#ifdef EXPERIMENTAL_WM_API
+ if (mouse_mode==MOUSE_MODE_CAPTURED) {
+ pos.x = current_videomode.width / 2;
+ pos.y = current_videomode.height / 2;
+ }
+#endif
+
InputEvent motion_event;
motion_event.ID=++event_id;
motion_event.type=InputEvent::MOUSE_MOTION;
@@ -1309,7 +1282,7 @@ void OS_X11::process_xevents() {
motion_event.mouse_motion.x=pos.x;
motion_event.mouse_motion.y=pos.y;
input->set_mouse_pos(pos);
- motion_event.mouse_motion.global_x=pos.x;
+ motion_event.mouse_motion.global_x=pos.y;
motion_event.mouse_motion.global_y=pos.y;
motion_event.mouse_motion.speed_x=input->get_mouse_speed().x;
motion_event.mouse_motion.speed_y=input->get_mouse_speed().y;
@@ -1318,6 +1291,8 @@ void OS_X11::process_xevents() {
motion_event.mouse_motion.relative_y=rel.y;
last_mouse_pos=pos;
+
+ // printf("rel: %d,%d\n", rel.x, rel.y );
input->parse_input_event( motion_event);
@@ -1392,8 +1367,18 @@ void OS_X11::process_xevents() {
if (do_mouse_warp) {
XWarpPointer(x11_display, None, x11_window,
- 0,0,0,0, (int)current_videomode.width/2, (int)current_videomode.height/2);
-
+ 0,0,0,0, (int)current_videomode.width/2, (int)current_videomode.height/2);
+
+ /*
+ Window root, child;
+ int root_x, root_y;
+ int win_x, win_y;
+ unsigned int mask;
+ XQueryPointer( x11_display, x11_window, &root, &child, &root_x, &root_y, &win_x, &win_y, &mask );
+
+ printf("Root: %d,%d\n", root_x, root_y);
+ printf("Win: %d,%d\n", win_x, win_y);
+ */
}
}
diff --git a/platform/x11/os_x11.h b/platform/x11/os_x11.h
index b47c5db069..7518c93562 100644
--- a/platform/x11/os_x11.h
+++ b/platform/x11/os_x11.h
@@ -160,6 +160,7 @@ class OS_X11 : public OS_Unix {
Joystick joysticks[JOYSTICKS_MAX];
#ifdef EXPERIMENTAL_WM_API
+ unsigned int capture_idle;
bool maximized;
//void set_wm_border(bool p_enabled);
void set_wm_fullscreen(bool p_enabled);