gstreamer/subprojects/gst-plugins-good/sys/ximage/gst-ximage-navigation.c
Robert Ayrapetyan 3d807d4f6d ximagesrc: add navigation support
Add a basic navigation support:
- mouse events (buttons/move)
- keyboard events (keys)

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5273>
2023-10-13 23:34:54 +00:00

68 lines
2.2 KiB
C

/* GStreamer
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#include "gst-ximage-navigation.h"
#include <X11/extensions/XTest.h>
// Based on xtestlib: https://www.x.org/releases/X11R7.5/doc/Xext/xtestlib.html
void
gst_ximage_navigation_mouse_move_pointer (Display * display, int x, int y)
{
// If screen_number is -1, the current screen (that the pointer is on) is used
XTestFakeMotionEvent (display, -1, x, y, CurrentTime);
XSync (display, FALSE);
return;
}
void
gst_ximage_navigation_mouse_push_button (Display * display,
unsigned int button, Bool is_press)
{
/*
button values:
1 = left button
2 = middle button (pressing the scroll wheel)
3 = right button
4 = turn scroll wheel up
5 = turn scroll wheel down
6 = push scroll wheel left
7 = push scroll wheel right
8 = 4th button (aka browser backward button)
9 = 5th button (aka browser forward button)
*/
XTestFakeButtonEvent (display, button, is_press, CurrentTime);
XSync (display, FALSE);
return;
}
void
gst_ximage_navigation_key (Display * display, const char *keysym_name,
Bool is_press)
{
// keysym_name: one of X11 keysym names defined in https://www.cl.cam.ac.uk/~mgk25/ucs/keysyms.txt
unsigned int keysym, keycode;
keysym = (unsigned int) XStringToKeysym (keysym_name);
keycode = XKeysymToKeycode (display, keysym);
if (keycode == 0) // undefined KeySym
return;
XTestFakeKeyEvent (display, keycode, is_press, CurrentTime);
XSync (display, FALSE);
return;
}