From 9b7e022676582feadfcce349d66a52be88121ac7 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Mon, 22 Mar 2010 11:40:35 +0000 Subject: [PATCH] Add wxUSE_UIACTIONSIMULATOR and turn it off by default. Disable the recently added wxUIActionSimulator class until the issues with it mentioned at http://article.gmane.org/gmane.comp.lib.wxwidgets.devel/119792/ are fixed. Also use "" around wx headers instead of <> in wx code itself. See #11801. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63736 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- configure | 53 ++++++++++++++++++++++++ configure.in | 6 +++ include/wx/chkconf.h | 8 ++++ include/wx/motif/setup0.h | 5 +++ include/wx/msw/setup0.h | 5 +++ include/wx/msw/wince/setup.h | 5 +++ include/wx/os2/setup0.h | 5 +++ include/wx/osx/setup0.h | 5 +++ include/wx/palmos/setup0.h | 5 +++ include/wx/setup_inc.h | 5 +++ include/wx/uiaction.h | 29 +++++++------ include/wx/univ/setup0.h | 5 +++ interface/wx/uiaction.h | 78 ++++++++++++++++++----------------- samples/uiaction/uiaction.cpp | 4 ++ setup.h.in | 2 + src/common/uiactioncmn.cpp | 20 +++++---- src/msw/uiaction.cpp | 11 +++-- src/osx/uiaction_osx.cpp | 28 +++++++------ src/unix/uiactionx11.cpp | 32 +++++++------- 19 files changed, 222 insertions(+), 89 deletions(-) diff --git a/configure b/configure index ee0c8da219..048e3b291b 100755 --- a/configure +++ b/configure @@ -1883,6 +1883,7 @@ Optional Features: --enable-metafiles use wxMetaFile (Win32 only) --enable-dragimage use wxDragImage --enable-accessibility enable accessibility support + --enable-uiactionsim use wxUIActionSimulator (experimental) --enable-palette use wxPalette class --enable-image use wxImage class --enable-gif use gif images (GIF file format) @@ -2969,6 +2970,7 @@ DEFAULT_wxUSE_LIBSDL=no DEFAULT_wxUSE_ACCESSIBILITY=no DEFAULT_wxUSE_IPV6=no DEFAULT_wxUSE_GSTREAMER8=no +DEFAULT_wxUSE_UIACTIONSIMULATOR=no DEFAULT_wxUSE_UNICODE_UTF8=auto DEFAULT_wxUSE_OPENGL=auto @@ -13557,6 +13559,50 @@ fi echo "${ECHO_T}$result" >&6; } + enablestring= + defaultval=$wxUSE_ALL_FEATURES + if test -z "$defaultval"; then + if test x"$enablestring" = xdisable; then + defaultval=yes + else + defaultval=no + fi + fi + + { echo "$as_me:$LINENO: checking for --${enablestring:-enable}-uiactionsim" >&5 +echo $ECHO_N "checking for --${enablestring:-enable}-uiactionsim... $ECHO_C" >&6; } + # Check whether --enable-uiactionsim was given. +if test "${enable_uiactionsim+set}" = set; then + enableval=$enable_uiactionsim; + if test "$enableval" = yes; then + wx_cv_use_uiactionsim='wxUSE_UIACTIONSIMULATOR=yes' + else + wx_cv_use_uiactionsim='wxUSE_UIACTIONSIMULATOR=no' + fi + +else + + wx_cv_use_uiactionsim='wxUSE_UIACTIONSIMULATOR=${'DEFAULT_wxUSE_UIACTIONSIMULATOR":-$defaultval}" + +fi + + + eval "$wx_cv_use_uiactionsim" + + if test x"$enablestring" = xdisable; then + if test $wxUSE_UIACTIONSIMULATOR = no; then + result=yes + else + result=no + fi + else + result=$wxUSE_UIACTIONSIMULATOR + fi + + { echo "$as_me:$LINENO: result: $result" >&5 +echo "${ECHO_T}$result" >&6; } + + enablestring= @@ -46306,6 +46352,13 @@ _ACEOF fi +if test "$wxUSE_UIACTIONSIMULATOR" = "yes" ; then + cat >>confdefs.h <<\_ACEOF +#define wxUSE_UIACTIONSIMULATOR 1 +_ACEOF + +fi + USES_CONTROLS=0 if test "$wxUSE_CONTROLS" = "yes"; then diff --git a/configure.in b/configure.in index ae00631622..631465a688 100644 --- a/configure.in +++ b/configure.in @@ -387,6 +387,7 @@ dnl features disabled by default DEFAULT_wxUSE_ACCESSIBILITY=no DEFAULT_wxUSE_IPV6=no DEFAULT_wxUSE_GSTREAMER8=no +DEFAULT_wxUSE_UIACTIONSIMULATOR=no dnl automatic features DEFAULT_wxUSE_UNICODE_UTF8=auto @@ -1013,6 +1014,7 @@ WX_ARG_FEATURE(joystick, [ --enable-joystick use wxJoystick], wxUSE_JO WX_ARG_FEATURE(metafile, [ --enable-metafiles use wxMetaFile (Win32 only)], wxUSE_METAFILE) WX_ARG_FEATURE(dragimage, [ --enable-dragimage use wxDragImage], wxUSE_DRAGIMAGE) WX_ARG_FEATURE(accessibility,[ --enable-accessibility enable accessibility support], wxUSE_ACCESSIBILITY) +WX_ARG_FEATURE(uiactionsim, [ --enable-uiactionsim use wxUIActionSimulator (experimental)], wxUSE_UIACTIONSIMULATOR) dnl --------------------------------------------------------------------------- dnl support for image formats that do not rely on external library @@ -6719,6 +6721,10 @@ if test "$wxUSE_MOUSEWHEEL" = "yes" ; then AC_DEFINE(wxUSE_MOUSEWHEEL) fi +if test "$wxUSE_UIACTIONSIMULATOR" = "yes" ; then + AC_DEFINE(wxUSE_UIACTIONSIMULATOR) +fi + dnl --------------------------------------------------------------------------- dnl GUI controls dnl --------------------------------------------------------------------------- diff --git a/include/wx/chkconf.h b/include/wx/chkconf.h index eb67a29a56..38210b3e75 100644 --- a/include/wx/chkconf.h +++ b/include/wx/chkconf.h @@ -1065,6 +1065,14 @@ # endif #endif /* !defined(wxUSE_TREECTRL) */ +#ifndef wxUSE_UIACTIONSIMULATOR +# ifdef wxABORT_ON_CONFIG_ERROR +# error "wxUSE_UIACTIONSIMULATOR must be defined, please read comment near the top of this file." +# else +# define wxUSE_UIACTIONSIMULATOR 0 +# endif +#endif /* !defined(wxUSE_UIACTIONSIMULATOR) */ + #ifndef wxUSE_VALIDATORS # ifdef wxABORT_ON_CONFIG_ERROR # error "wxUSE_VALIDATORS must be defined, please read comment near the top of this file." diff --git a/include/wx/motif/setup0.h b/include/wx/motif/setup0.h index 04353f0718..22177951f1 100644 --- a/include/wx/motif/setup0.h +++ b/include/wx/motif/setup0.h @@ -1214,6 +1214,11 @@ #define wxUSE_MOUSEWHEEL 1 // Include mouse wheel support +// Compile wxUIActionSimulator class? +// +// This is experimental code subject to change. It's not fully implemented yet. +#define wxUSE_UIACTIONSIMULATOR 0 + // ---------------------------------------------------------------------------- // wxDC classes for various output formats // ---------------------------------------------------------------------------- diff --git a/include/wx/msw/setup0.h b/include/wx/msw/setup0.h index 97783379d8..0391162f33 100644 --- a/include/wx/msw/setup0.h +++ b/include/wx/msw/setup0.h @@ -1214,6 +1214,11 @@ #define wxUSE_MOUSEWHEEL 1 // Include mouse wheel support +// Compile wxUIActionSimulator class? +// +// This is experimental code subject to change. It's not fully implemented yet. +#define wxUSE_UIACTIONSIMULATOR 0 + // ---------------------------------------------------------------------------- // wxDC classes for various output formats // ---------------------------------------------------------------------------- diff --git a/include/wx/msw/wince/setup.h b/include/wx/msw/wince/setup.h index 79c6855a1c..615d2fa542 100644 --- a/include/wx/msw/wince/setup.h +++ b/include/wx/msw/wince/setup.h @@ -1214,6 +1214,11 @@ #define wxUSE_MOUSEWHEEL 1 // Include mouse wheel support +// Compile wxUIActionSimulator class? +// +// This is experimental code subject to change. It's not fully implemented yet. +#define wxUSE_UIACTIONSIMULATOR 0 + // ---------------------------------------------------------------------------- // wxDC classes for various output formats // ---------------------------------------------------------------------------- diff --git a/include/wx/os2/setup0.h b/include/wx/os2/setup0.h index 77c87b7770..b3d9ee1af8 100644 --- a/include/wx/os2/setup0.h +++ b/include/wx/os2/setup0.h @@ -1214,6 +1214,11 @@ #define wxUSE_MOUSEWHEEL 1 // Include mouse wheel support +// Compile wxUIActionSimulator class? +// +// This is experimental code subject to change. It's not fully implemented yet. +#define wxUSE_UIACTIONSIMULATOR 0 + // ---------------------------------------------------------------------------- // wxDC classes for various output formats // ---------------------------------------------------------------------------- diff --git a/include/wx/osx/setup0.h b/include/wx/osx/setup0.h index 87a34d35f9..53c43ce100 100644 --- a/include/wx/osx/setup0.h +++ b/include/wx/osx/setup0.h @@ -1215,6 +1215,11 @@ #define wxUSE_MOUSEWHEEL 1 // Include mouse wheel support +// Compile wxUIActionSimulator class? +// +// This is experimental code subject to change. It's not fully implemented yet. +#define wxUSE_UIACTIONSIMULATOR 0 + // ---------------------------------------------------------------------------- // wxDC classes for various output formats // ---------------------------------------------------------------------------- diff --git a/include/wx/palmos/setup0.h b/include/wx/palmos/setup0.h index 3d2bcaccb2..5a235c70e1 100644 --- a/include/wx/palmos/setup0.h +++ b/include/wx/palmos/setup0.h @@ -1214,6 +1214,11 @@ #define wxUSE_MOUSEWHEEL 1 // Include mouse wheel support +// Compile wxUIActionSimulator class? +// +// This is experimental code subject to change. It's not fully implemented yet. +#define wxUSE_UIACTIONSIMULATOR 0 + // ---------------------------------------------------------------------------- // wxDC classes for various output formats // ---------------------------------------------------------------------------- diff --git a/include/wx/setup_inc.h b/include/wx/setup_inc.h index 0cac75e3be..fbeb660e29 100644 --- a/include/wx/setup_inc.h +++ b/include/wx/setup_inc.h @@ -1210,6 +1210,11 @@ #define wxUSE_MOUSEWHEEL 1 // Include mouse wheel support +// Compile wxUIActionSimulator class? +// +// This is experimental code subject to change. It's not fully implemented yet. +#define wxUSE_UIACTIONSIMULATOR 0 + // ---------------------------------------------------------------------------- // wxDC classes for various output formats // ---------------------------------------------------------------------------- diff --git a/include/wx/uiaction.h b/include/wx/uiaction.h index ebce484040..a11bb347eb 100644 --- a/include/wx/uiaction.h +++ b/include/wx/uiaction.h @@ -9,19 +9,22 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifndef _UIACTIONSIMULATOR_H_ -#define _UIACTIONSIMULATOR_H_ +#ifndef _WX_UIACTIONSIMULATOR_H_ +#define _WX_UIACTIONSIMULATOR_H_ -#include -#include -#include +#include "wx/defs.h" + +#if wxUSE_UIACTIONSIMULATOR + +#include "wx/event.h" +#include "wx/dynarray.h" class WXDLLIMPEXP_CORE wxUIActionSimulator { public: wxUIActionSimulator(); ~wxUIActionSimulator(); - + // Mouse related bool MouseMove(long x, long y); bool MouseDown(int button = wxMOUSE_BTN_LEFT); @@ -29,23 +32,25 @@ public: bool MouseClick(int button = wxMOUSE_BTN_LEFT); bool MouseDblClick(int button = wxMOUSE_BTN_LEFT); bool MouseDragDrop(long x1, long y1, long x2, long y2, int button = wxMOUSE_BTN_LEFT); - + // Keyboard related: bool KeyDown(int keycode, bool shiftDown=false, bool cmdDown=false, bool altDown=false) { return Key(keycode, true, shiftDown, cmdDown, altDown); } - + bool KeyUp(int keycode, bool shiftDown=false, bool cmdDown=false, bool altDown=false) { return Key(keycode, false, shiftDown, cmdDown, altDown); } - + bool Char(int keycode, bool shiftDown=false, bool cmdDown=false, bool altDown=false); protected: // Implementation-wise, since key events take more code to set up on GTK and Mac, it makes // sense to handle both key down and key up in one method. However, I wanted the API for pressing - // and releasing the mouse and keyboard to be consistent, and I don't really like using a bool - // for pressed state, so I'm leaving this as an implementation detail. + // and releasing the mouse and keyboard to be consistent, and I don't really like using a bool + // for pressed state, so I'm leaving this as an implementation detail. bool Key(int keycode, bool isDown=true, bool shiftDown=false, bool cmdDown=false, bool altDown=false); }; -#endif +#endif // wxUSE_UIACTIONSIMULATOR + +#endif // _WX_UIACTIONSIMULATOR_H_ diff --git a/include/wx/univ/setup0.h b/include/wx/univ/setup0.h index 2e7d33f3fa..de3c88b727 100644 --- a/include/wx/univ/setup0.h +++ b/include/wx/univ/setup0.h @@ -1213,6 +1213,11 @@ #define wxUSE_MOUSEWHEEL 1 // Include mouse wheel support +// Compile wxUIActionSimulator class? +// +// This is experimental code subject to change. It's not fully implemented yet. +#define wxUSE_UIACTIONSIMULATOR 0 + // ---------------------------------------------------------------------------- // wxDC classes for various output formats // ---------------------------------------------------------------------------- diff --git a/interface/wx/uiaction.h b/interface/wx/uiaction.h index cc8ad98e31..83eb71bdcb 100644 --- a/interface/wx/uiaction.h +++ b/interface/wx/uiaction.h @@ -10,18 +10,22 @@ @class wxUIActionSimulator wxUIActionSimulator is a class used to simulate user interface actions - such as a mouse click or a key press. - + such as a mouse click or a key press. + + @note that this class is currently experimental and disabled by default, + you must set @c wxUSE_UIACTIONSIMULATOR to 1 in your setup.h file or use + configure @c --enable-uiactionsim option to enable it. + Common usages for this class would be to provide playback and record (aka macro recording) functionality for users, or to drive unit tests by simulating user sessions. - + See the uiaction sample for example usage of this class. - + NOTE: For keyboard operations, currently you must pass the keycode of the actual key on the keyboard. To simulate, e.g. IME actions, you'd need to simulate the actual keypresses needed to active the IME, then the keypresses needed to type and select the desired character. - + @library{wxcore} */ @@ -33,43 +37,43 @@ class wxUIActionSimulator */ wxUIActionSimulator(); ~wxUIActionSimulator(); - + /** Move the mouse to the specified coordinates. - + @param x x coordinate to move to, in screen coordinates. - + @param y y coordinate to move to, in screen coordinates. */ bool MouseMove(long x, long y); - + /** Press a mouse button. - + @param button Button to press. Valid constants are wxMOUSE_BTN_LEFT, wxMOUSE_BTN_MIDDLE, and wxMOUSE_BTN_RIGHT. */ bool MouseDown(int button = wxMOUSE_BTN_LEFT); - + /** Release a mouse button. - + @param button Button to press. See wxUIActionSimulator::MouseDown for a list of valid constants. */ bool MouseUp(int button = wxMOUSE_BTN_LEFT); /** Click a mouse button. - + @param button Button to press. See wxUIActionSimulator::MouseDown for a list of valid constants. */ bool MouseClick(int button = wxMOUSE_BTN_LEFT); /** Double-click a mouse button. - + @param button Button to press. See wxUIActionSimulator::MouseDown for a list of valid constants. */ @@ -77,70 +81,70 @@ class wxUIActionSimulator /** Perform a drag and drop operation. - + @param x1 x start coordinate, in screen coordinates. - + @param y1 y start coordinate, in screen coordinates. - + @param x2 x desintation coordinate, in screen coordinates. - + @param y2 y destination coordinate, in screen coordinates. - + @param button Button to press. See wxUIActionSimulator::MouseDown for a list of valid constants. */ bool MouseDragDrop(long x1, long y1, long x2, long y2, int button = wxMOUSE_BTN_LEFT); - + /** - Press a key. - + Press a key. + @param keycode key to operate on, as an integer. - + @param shiftDown true if the shift key should be pressed, false otherwise. - + @param cmdDown true if the cmd key should be pressed, false otherwise. - + @param altDown true if the alt key should be pressed, false otherwise. */ bool KeyDown(int keycode, bool shiftDown=false, bool cmdDown=false, bool altDown=false); - + /** - Release a key. - + Release a key. + @param keycode key to operate on, as an integer. - + @param shiftDown true if the shift key should be pressed, false otherwise. - + @param cmdDown true if the cmd key should be pressed, false otherwise. - + @param altDown true if the alt key should be pressed, false otherwise. */ bool KeyUp(int keycode, bool shiftDown=false, bool cmdDown=false, bool altDown=false); - + /** - Press and release a key. - + Press and release a key. + @param keycode key to operate on, as an integer. - + @param shiftDown true if the shift key should be pressed, false otherwise. - + @param cmdDown true if the cmd key should be pressed, false otherwise. - + @param altDown true if the alt key should be pressed, false otherwise. */ diff --git a/samples/uiaction/uiaction.cpp b/samples/uiaction/uiaction.cpp index 86a6729d40..b08767fdd3 100644 --- a/samples/uiaction/uiaction.cpp +++ b/samples/uiaction/uiaction.cpp @@ -24,6 +24,8 @@ #pragma hdrstop #endif +#if wxUSE_UIACTIONSIMULATOR + // for all others, include the necessary headers (this file is usually all you // need because it includes almost all "standard" wxWidgets headers) #ifndef WX_PRECOMP @@ -164,3 +166,5 @@ void MyFrame::OnButtonPressed(wxCommandEvent&) { m_buttonPressed = true; } + +#endif // wxUSE_UIACTIONSIMULATOR diff --git a/setup.h.in b/setup.h.in index 74d7911cf9..9ce60367b4 100644 --- a/setup.h.in +++ b/setup.h.in @@ -520,6 +520,8 @@ #define wxUSE_MOUSEWHEEL 0 +#define wxUSE_UIACTIONSIMULATOR 0 + #define wxUSE_POSTSCRIPT 0 diff --git a/src/common/uiactioncmn.cpp b/src/common/uiactioncmn.cpp index 52747d1284..20c4141cab 100644 --- a/src/common/uiactioncmn.cpp +++ b/src/common/uiactioncmn.cpp @@ -11,6 +11,8 @@ #include "wx/wxprec.h" +#if wxUSE_UIACTIONSIMULATOR + #include "wx/uiaction.h" wxUIActionSimulator::wxUIActionSimulator() @@ -22,21 +24,21 @@ wxUIActionSimulator::~wxUIActionSimulator() } -bool wxUIActionSimulator::MouseClick(int button) +bool wxUIActionSimulator::MouseClick(int button) { MouseDown(button); MouseUp(button); - + return true; } -bool wxUIActionSimulator::MouseDblClick(int button) +bool wxUIActionSimulator::MouseDblClick(int button) { MouseDown(button); MouseUp(button); MouseDown(button); MouseUp(button); - + return true; } @@ -44,9 +46,9 @@ bool wxUIActionSimulator::MouseDragDrop(long x1, long y1, long x2, long y2, int { MouseMove(x1, y1); MouseDown(button); - MouseMove(x2, y2); + MouseMove(x2, y2); MouseUp(button); - + return true; } @@ -54,6 +56,8 @@ bool wxUIActionSimulator::Char(int keycode, bool shiftDown, bool cmdDown, bool { Key(keycode, false, shiftDown, cmdDown, altDown); Key(keycode, true, shiftDown, cmdDown, altDown); - + return true; -} +} + +#endif // wxUSE_UIACTIONSIMULATOR diff --git a/src/msw/uiaction.cpp b/src/msw/uiaction.cpp index 6bbbf1abdc..d421b9a18f 100644 --- a/src/msw/uiaction.cpp +++ b/src/msw/uiaction.cpp @@ -11,13 +11,11 @@ #include "wx/wxprec.h" -#ifndef WX_PRECOMP -#include "wx/defs.h" -#endif +#if wxUSE_UIACTIONSIMULATOR #include "wx/uiaction.h" -#include +#include "wx/msw/wrapwin.h" DWORD EventTypeForMouseButton(int button, bool isDown) { @@ -38,7 +36,7 @@ DWORD EventTypeForMouseButton(int button, bool isDown) return MOUSEEVENTF_MIDDLEDOWN; else return MOUSEEVENTF_MIDDLEUP; - + default: wxFAIL_MSG("Unsupported button passed in."); return -1; @@ -54,7 +52,7 @@ bool wxUIActionSimulator::MouseDown(int button) } bool wxUIActionSimulator::MouseMove(long x, long y) -{ +{ mouse_event(MOUSEEVENTF_MOVE, x, y, 0, 0); return true; } @@ -76,3 +74,4 @@ bool wxUIActionSimulator::Key(int keycode, bool isDown, bool shiftDown, bool cmd return true; } +#endif // wxUSE_UIACTIONSIMULATOR diff --git a/src/osx/uiaction_osx.cpp b/src/osx/uiaction_osx.cpp index bd4afa12c1..603b303977 100644 --- a/src/osx/uiaction_osx.cpp +++ b/src/osx/uiaction_osx.cpp @@ -9,8 +9,11 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#include -#include +#include "wx/defs.h" + +#if wxUSE_UIACTIONSIMULATOR + +#include "wx/uiaction.h" #include @@ -30,9 +33,9 @@ CGEventType CGEventTypeForMouseButton(int button, bool isDown) return kCGEventRightMouseDown; else return kCGEventRightMouseUp; - - // Apparently all other buttons use the constant OtherMouseDown - + + // Apparently all other buttons use the constant OtherMouseDown + default: if (isDown) return kCGEventOtherMouseDown; @@ -55,13 +58,13 @@ bool wxUIActionSimulator::MouseDown(int button) { CGPoint pos; int x, y; - wxGetMousePosition(&x, &y); + wxGetMousePosition(&x, &y); pos.x = x; pos.y = y; CGEventType type = CGEventTypeForMouseButton(button, true); CGEventRef event = CGEventCreateMouseEvent(NULL, type, pos, button); CGEventSetType(event, type); - + if (event) { CGEventPost(tap, event); @@ -78,13 +81,13 @@ bool wxUIActionSimulator::MouseMove(long x, long y) CGEventType type = kCGEventMouseMoved; CGEventRef event = CGEventCreateMouseEvent(NULL, type, pos, kCGMouseButtonLeft); CGEventSetType(event, type); - + if (event) { CGEventPost(tap, event); } CFRelease(event); - + return true; } @@ -92,13 +95,13 @@ bool wxUIActionSimulator::MouseUp(int button) { CGPoint pos; int x, y; - wxGetMousePosition(&x, &y); + wxGetMousePosition(&x, &y); pos.x = x; pos.y = y; CGEventType type = CGEventTypeForMouseButton(button, false); CGEventRef event = CGEventCreateMouseEvent(NULL, type, pos, button); CGEventSetType(event, type); - + if (event) { CGEventPost(tap, event); @@ -125,8 +128,9 @@ bool wxUIActionSimulator::Key(int keycode, bool isDown, bool shiftDown, bool cmd SendCharCode((CGCharCode)58, false); if (cmdDown) SendCharCode((CGCharCode)55, false); - + return true; } +#endif // wxUSE_UIACTIONSIMULATOR diff --git a/src/unix/uiactionx11.cpp b/src/unix/uiactionx11.cpp index 05497efa03..778e9bbc38 100644 --- a/src/unix/uiactionx11.cpp +++ b/src/unix/uiactionx11.cpp @@ -9,8 +9,11 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#include -#include +#include "wx/defs.h" + +#if wxUSE_UIACTIONSIMULATOR + +#include "wx/uiaction.h" #include #include @@ -35,12 +38,12 @@ void SendButtonEvent(int button, bool isDown) } XEvent event; - + Display *display = XOpenDisplay(0); wxASSERT_MSG(display, "No display available!"); - + memset(&event, 0x00, sizeof(event)); - + if (isDown) event.type = ButtonPress; else @@ -48,16 +51,16 @@ void SendButtonEvent(int button, bool isDown) event.xbutton.button = xbutton; event.xbutton.same_screen = True; - + XQueryPointer(display, RootWindow(display, DefaultScreen(display)), &event.xbutton.root, &event.xbutton.window, &event.xbutton.x_root, &event.xbutton.y_root, &event.xbutton.x, &event.xbutton.y, &event.xbutton.state); event.xbutton.subwindow = event.xbutton.window; - + while (event.xbutton.subwindow) { event.xbutton.window = event.xbutton.subwindow; XQueryPointer(display, event.xbutton.window, &event.xbutton.root, &event.xbutton.subwindow, &event.xbutton.x_root, &event.xbutton.y_root, &event.xbutton.x, &event.xbutton.y, &event.xbutton.state); } - + XSendEvent(display, PointerWindow, True, 0xfff, &event); XFlush(display); XCloseDisplay(display); @@ -70,7 +73,7 @@ bool wxUIActionSimulator::MouseDown(int button) } bool wxUIActionSimulator::MouseMove(long x, long y) -{ +{ Display *display = XOpenDisplay(0); wxASSERT_MSG(display, "No display available!"); Window root = DefaultRootWindow(display); @@ -90,11 +93,11 @@ bool wxUIActionSimulator::Key(int keycode, bool isDown, bool WXUNUSED(shiftDown) { Display *display = XOpenDisplay(0); wxASSERT_MSG(display, "No display available!"); - + XKeyEvent event; int mask = 0xfff; memset(&event, 0x00, sizeof(event)); - + if (isDown) { event.type = KeyPress; mask = KeyPressMask; @@ -104,16 +107,16 @@ bool wxUIActionSimulator::Key(int keycode, bool isDown, bool WXUNUSED(shiftDown) mask = KeyReleaseMask; } event.same_screen = True; - + XQueryPointer(display, RootWindow(display, DefaultScreen(display)), &event.root, &event.window, &event.x_root, &event.y_root, &event.x, &event.y, &event.state); event.subwindow = event.window; - + while (event.subwindow) { event.window = event.subwindow; XQueryPointer(display, event.window, &event.root, &event.subwindow, &event.x_root, &event.y_root, &event.x, &event.y, &event.state); } - + XSendEvent(display, PointerWindow, True, mask, (XEvent*) &event); XFlush(display); XCloseDisplay(display); @@ -121,3 +124,4 @@ bool wxUIActionSimulator::Key(int keycode, bool isDown, bool WXUNUSED(shiftDown) return true; } +#endif // wxUSE_UIACTIONSIMULATOR -- 2.47.2