XWarpPointer
X11 上で GTK+ や Qt といったツールキットを使ったプログラムでマウスポインタをあるウィンドウのある座標に移動させたいと思ったけど、こいつらには XWarpPointer(3X) をラップしてるメソッドが無い様でツールキット経由じゃできないのね。
とりあえず Display と Window が取得できれば自前で XWarpPointer(3X) を呼べば目的は達成できるので、どうやったら取得できるのか調べてみた。
- GTK+ 1.x の場合
- 可能
#include#include #include void gdk_window_set_pointer(GdkWindow *w, gint x, gint y) { GdkWindowPrivate *private; if (w == NULL) w = (GdkWindow *)&gdk_root_parent; private = (GdkWindowPrivate *)w; if (!private->destroyed) { XWarpPointer(private->xdisplay, None, private->xwindow, 0, 0, 0, 0, x, y); } }
- GTK+ 2.x の場合
- 可能
#include#include #include void gdk_window_set_pointer(GdkWindow *w, gint x, gint y) { if (w) { XWarpPointer(GDK_WINDOW_XDISPLAY(w), None GDK_WINDOW_XWINDOW(w), 0, 0, 0, 0, x, y); } }
- Qt の場合
- 可能。グローバル座標系で指定できる QCursor::setPos() を使用する。Widget 座標系からグローバル座標系への変換はQWidget::mapToGlobal() を使用する。
でも、誰も彼もがイベントだけを監視すれば良いアプリケーションを書いてる訳じゃないと思うんだけどなぁ。