In linux only read keyboard and mouse input when the emulator window has focus.
Also other code clean up. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5053 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
5e6eecf0af
commit
e5afde67ce
|
@ -404,6 +404,9 @@ THREAD_RETURN EmuThread(void *pArg)
|
||||||
// Load and init GCPadPlugin
|
// Load and init GCPadPlugin
|
||||||
SPADInitialize PADInitialize;
|
SPADInitialize PADInitialize;
|
||||||
PADInitialize.hWnd = g_pWindowHandle;
|
PADInitialize.hWnd = g_pWindowHandle;
|
||||||
|
#if defined(HAVE_X11) && HAVE_X11
|
||||||
|
PADInitialize.pXWindow = g_pXWindow;
|
||||||
|
#endif
|
||||||
PADInitialize.pLog = Callback_PADLog;
|
PADInitialize.pLog = Callback_PADLog;
|
||||||
// This is may be needed to avoid a SDL problem
|
// This is may be needed to avoid a SDL problem
|
||||||
//Plugins.FreeWiimote();
|
//Plugins.FreeWiimote();
|
||||||
|
|
|
@ -34,6 +34,9 @@ typedef void (*TLog)(const char* _pMessage);
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
HWND hWnd;
|
HWND hWnd;
|
||||||
|
#if defined HAVE_X11 && HAVE_X11
|
||||||
|
void *pXWindow;
|
||||||
|
#endif
|
||||||
TLog pLog;
|
TLog pLog;
|
||||||
} SPADInitialize;
|
} SPADInitialize;
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ typedef void (*TWiimoteInput)(int _number, u16 _channelID, const void* _pData, u
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
HWND hWnd;
|
HWND hWnd;
|
||||||
#ifdef __linux__
|
#if defined HAVE_X11 && HAVE_X11
|
||||||
void *pXWindow;
|
void *pXWindow;
|
||||||
#endif
|
#endif
|
||||||
u32 ISOId;
|
u32 ISOId;
|
||||||
|
|
|
@ -596,6 +596,17 @@ void UpdatePadState(CONTROLLER_MAPPING_GC &_GCiMapping)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(HAVE_X11) && HAVE_X11
|
||||||
|
bool HaveFocus (void)
|
||||||
|
{
|
||||||
|
Window GLWin = *(Window *)g_PADInitialize->pXWindow;
|
||||||
|
Window FocusWin;
|
||||||
|
int Revert;
|
||||||
|
XGetInputFocus(GCdisplay, &FocusWin, &Revert);
|
||||||
|
return (GLWin != 0 && GLWin == FocusWin);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// Multi System Input Status Check
|
// Multi System Input Status Check
|
||||||
bool IsKey(int Key)
|
bool IsKey(int Key)
|
||||||
{
|
{
|
||||||
|
@ -609,7 +620,7 @@ bool IsKey(int Key)
|
||||||
}
|
}
|
||||||
else if (MapKey < 0x1100)
|
else if (MapKey < 0x1100)
|
||||||
#elif defined HAVE_X11 && HAVE_X11
|
#elif defined HAVE_X11 && HAVE_X11
|
||||||
if (MapKey < 256 || MapKey > 0xf000)
|
if (HaveFocus() && (MapKey < 256 || MapKey > 0xf000))
|
||||||
{
|
{
|
||||||
char keys[32];
|
char keys[32];
|
||||||
KeyCode keyCode;
|
KeyCode keyCode;
|
||||||
|
|
|
@ -360,7 +360,7 @@ bool OpenGL_Create(SVideoInitialize &_VideoInitialize, int _iwidth, int _iheight
|
||||||
|
|
||||||
/* create a fullscreen window */
|
/* create a fullscreen window */
|
||||||
GLWin.attr.override_redirect = True;
|
GLWin.attr.override_redirect = True;
|
||||||
GLWin.attr.event_mask = ExposureMask | KeyPressMask | ButtonPressMask | KeyReleaseMask | ButtonReleaseMask | StructureNotifyMask;
|
GLWin.attr.event_mask = ExposureMask | KeyPressMask | KeyReleaseMask | StructureNotifyMask;
|
||||||
GLWin.win = XCreateWindow(GLWin.dpy, RootWindow(GLWin.dpy, vi->screen),
|
GLWin.win = XCreateWindow(GLWin.dpy, RootWindow(GLWin.dpy, vi->screen),
|
||||||
0, 0, dpyWidth, dpyHeight, 0, vi->depth, InputOutput, vi->visual,
|
0, 0, dpyWidth, dpyHeight, 0, vi->depth, InputOutput, vi->visual,
|
||||||
CWBorderPixel | CWColormap | CWEventMask | CWOverrideRedirect,
|
CWBorderPixel | CWColormap | CWEventMask | CWOverrideRedirect,
|
||||||
|
@ -368,7 +368,7 @@ bool OpenGL_Create(SVideoInitialize &_VideoInitialize, int _iwidth, int _iheight
|
||||||
XWarpPointer(GLWin.dpy, None, GLWin.win, 0, 0, 0, 0, 0, 0);
|
XWarpPointer(GLWin.dpy, None, GLWin.win, 0, 0, 0, 0, 0, 0);
|
||||||
XMapRaised(GLWin.dpy, GLWin.win);
|
XMapRaised(GLWin.dpy, GLWin.win);
|
||||||
XGrabKeyboard(GLWin.dpy, GLWin.win, True, GrabModeAsync, GrabModeAsync, CurrentTime);
|
XGrabKeyboard(GLWin.dpy, GLWin.win, True, GrabModeAsync, GrabModeAsync, CurrentTime);
|
||||||
XGrabPointer(GLWin.dpy, GLWin.win, True, ButtonPressMask,
|
XGrabPointer(GLWin.dpy, GLWin.win, True, NULL,
|
||||||
GrabModeAsync, GrabModeAsync, GLWin.win, None, CurrentTime);
|
GrabModeAsync, GrabModeAsync, GLWin.win, None, CurrentTime);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -388,7 +388,7 @@ bool OpenGL_Create(SVideoInitialize &_VideoInitialize, int _iwidth, int _iheight
|
||||||
//int Y = (rcdesktop.bottom-rcdesktop.top)/2 - (rc.bottom-rc.top)/2;
|
//int Y = (rcdesktop.bottom-rcdesktop.top)/2 - (rc.bottom-rc.top)/2;
|
||||||
|
|
||||||
// create a window in window mode
|
// create a window in window mode
|
||||||
GLWin.attr.event_mask = ExposureMask | KeyPressMask | ButtonPressMask | KeyReleaseMask | ButtonReleaseMask |
|
GLWin.attr.event_mask = ExposureMask | KeyPressMask | KeyReleaseMask |
|
||||||
StructureNotifyMask | ResizeRedirectMask;
|
StructureNotifyMask | ResizeRedirectMask;
|
||||||
GLWin.win = XCreateWindow(GLWin.dpy, RootWindow(GLWin.dpy, vi->screen),
|
GLWin.win = XCreateWindow(GLWin.dpy, RootWindow(GLWin.dpy, vi->screen),
|
||||||
0, 0, _twidth, _theight, 0, vi->depth, InputOutput, vi->visual,
|
0, 0, _twidth, _theight, 0, vi->depth, InputOutput, vi->visual,
|
||||||
|
|
|
@ -42,12 +42,11 @@
|
||||||
CWII_IPC_HLE_Device_usb_oh1_57e_305::Update()
|
CWII_IPC_HLE_Device_usb_oh1_57e_305::Update()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pluginspecs_wiimote.h"
|
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include "Common.h" // Common
|
#include "Common.h" // Common
|
||||||
|
#include "pluginspecs_wiimote.h"
|
||||||
#include "StringUtil.h" // for ArrayToString
|
#include "StringUtil.h" // for ArrayToString
|
||||||
|
|
||||||
#include "wiimote_hid.h" // Local
|
#include "wiimote_hid.h" // Local
|
||||||
|
|
|
@ -21,8 +21,8 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include "pluginspecs_wiimote.h"
|
|
||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
|
#include "pluginspecs_wiimote.h"
|
||||||
#include "wiimote_hid.h"
|
#include "wiimote_hid.h"
|
||||||
#include "EmuDefinitions.h"
|
#include "EmuDefinitions.h"
|
||||||
#include "Encryption.h"
|
#include "Encryption.h"
|
||||||
|
|
|
@ -196,6 +196,17 @@ void LoadRecordedMovements()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(HAVE_X11) && HAVE_X11
|
||||||
|
bool HaveFocus (void)
|
||||||
|
{
|
||||||
|
Window GLWin = *(Window *)g_WiimoteInitialize.pXWindow;
|
||||||
|
Window FocusWin;
|
||||||
|
int Revert;
|
||||||
|
XGetInputFocus(WMdisplay, &FocusWin, &Revert);
|
||||||
|
return (GLWin != 0 && GLWin == FocusWin);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Calibrate the mouse position to the emulation window. g_WiimoteInitialize.hWnd is the rendering window handle. */
|
/* Calibrate the mouse position to the emulation window. g_WiimoteInitialize.hWnd is the rendering window handle. */
|
||||||
void GetMousePos(float& x, float& y)
|
void GetMousePos(float& x, float& y)
|
||||||
{
|
{
|
||||||
|
@ -216,12 +227,13 @@ void GetMousePos(float& x, float& y)
|
||||||
float PictureWidth = WinWidth, PictureHeight = WinHeight;
|
float PictureWidth = WinWidth, PictureHeight = WinHeight;
|
||||||
#else
|
#else
|
||||||
#if defined(HAVE_X11) && HAVE_X11
|
#if defined(HAVE_X11) && HAVE_X11
|
||||||
|
Window GLWin = *(Window *)g_WiimoteInitialize.pXWindow;
|
||||||
float WinWidth = 0, WinHeight = 0;
|
float WinWidth = 0, WinHeight = 0;
|
||||||
float XOffset = 0, YOffset = 0;
|
float XOffset = 0, YOffset = 0;
|
||||||
int root_x, root_y, win_x, win_y;
|
int root_x, root_y, win_x, win_y;
|
||||||
Window GLWin = *(Window *)g_WiimoteInitialize.pXWindow;
|
if (HaveFocus())
|
||||||
if (GLWin != 0)
|
|
||||||
{
|
{
|
||||||
|
Window GLWin = *(Window *)g_WiimoteInitialize.pXWindow;
|
||||||
XWindowAttributes WinAttribs;
|
XWindowAttributes WinAttribs;
|
||||||
XGetWindowAttributes (WMdisplay, GLWin, &WinAttribs);
|
XGetWindowAttributes (WMdisplay, GLWin, &WinAttribs);
|
||||||
WinWidth = (float)WinAttribs.width;
|
WinWidth = (float)WinAttribs.width;
|
||||||
|
|
|
@ -42,9 +42,12 @@ void InterruptChannel(int _number, u16 _channelID, const void* _pData, u32 _Size
|
||||||
void ControlChannel(int _number, u16 _channelID, const void* _pData, u32 _Size) ;
|
void ControlChannel(int _number, u16 _channelID, const void* _pData, u32 _Size) ;
|
||||||
void Update(int _number);
|
void Update(int _number);
|
||||||
void DoState(PointerWrap &p);
|
void DoState(PointerWrap &p);
|
||||||
//void ReadLinuxKeyboard();
|
|
||||||
bool IsKey(int Key);
|
bool IsKey(int Key);
|
||||||
|
|
||||||
|
#if defined(HAVE_X11) && HAVE_X11
|
||||||
|
bool HaveFocus (void);
|
||||||
|
#endif
|
||||||
|
|
||||||
// Recordings
|
// Recordings
|
||||||
void LoadRecordedMovements();
|
void LoadRecordedMovements();
|
||||||
void GetMousePos(float& x, float& y);
|
void GetMousePos(float& x, float& y);
|
||||||
|
|
|
@ -17,8 +17,8 @@
|
||||||
// http://code.google.com/p/dolphin-emu/
|
// http://code.google.com/p/dolphin-emu/
|
||||||
|
|
||||||
|
|
||||||
#include "pluginspecs_wiimote.h"
|
|
||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
|
#include "pluginspecs_wiimote.h"
|
||||||
#include "Encryption.h"
|
#include "Encryption.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -310,7 +310,7 @@ bool IsKey(int Key)
|
||||||
}
|
}
|
||||||
else if (MapKey < 0x1100)
|
else if (MapKey < 0x1100)
|
||||||
#elif defined(HAVE_X11) && HAVE_X11
|
#elif defined(HAVE_X11) && HAVE_X11
|
||||||
if (MapKey < 256 || MapKey >= 0xf000)
|
if (HaveFocus() && (MapKey < 256 || MapKey >= 0xf000))
|
||||||
{
|
{
|
||||||
char keys[32];
|
char keys[32];
|
||||||
KeyCode keyCode;
|
KeyCode keyCode;
|
||||||
|
@ -346,23 +346,20 @@ bool IsKey(int Key)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#if defined(HAVE_X11) && HAVE_X11
|
#if defined(HAVE_X11) && HAVE_X11
|
||||||
if ((Key == EWM_SHAKE) || (Key == EWM_A) || (Key == EWM_B))
|
if ((Key == EWM_SHAKE || Key == EWM_A || Key == EWM_B) && HaveFocus())
|
||||||
{
|
{
|
||||||
Window GLWin = *(Window *)g_WiimoteInitialize.pXWindow;
|
Window GLWin = *(Window *)g_WiimoteInitialize.pXWindow;
|
||||||
if (GLWin != 0)
|
int root_x, root_y, win_x, win_y;
|
||||||
|
Window rootDummy, childWin;
|
||||||
|
unsigned int mask;
|
||||||
|
XQueryPointer(WMdisplay, GLWin, &rootDummy, &childWin, &root_x, &root_y, &win_x, &win_y, &mask);
|
||||||
|
if (((Key == EWM_A) && (mask & Button1Mask))
|
||||||
|
|| ((Key == EWM_B) && (mask & Button3Mask))
|
||||||
|
|| ((Key == EWM_SHAKE) && (mask & Button3Mask)))
|
||||||
{
|
{
|
||||||
int root_x, root_y, win_x, win_y;
|
float x, y;
|
||||||
Window rootDummy, childWin;
|
GetMousePos(x, y);
|
||||||
unsigned int mask;
|
Ret = !(x < 0 || x > 1 || y < 0 || y > 1);
|
||||||
XQueryPointer(WMdisplay, GLWin, &rootDummy, &childWin, &root_x, &root_y, &win_x, &win_y, &mask);
|
|
||||||
if (((Key == EWM_A) && (mask & Button1Mask))
|
|
||||||
|| ((Key == EWM_B) && (mask & Button3Mask))
|
|
||||||
|| ((Key == EWM_SHAKE) && (mask & Button3Mask)))
|
|
||||||
{
|
|
||||||
float x, y;
|
|
||||||
GetMousePos(x, y);
|
|
||||||
Ret = !(x < 0 || x > 1 || y < 0 || y > 1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue