2016-01-31 30 views
0

我目前正在研究一個小工具,這是我第一次使用X工程。該實用程序用於在鼠標指針周圍繪製一個小圓圈。我使用名爲Pinpoint的應用程序在我的Mac上執行相同的操作,它幫助我查找鼠標,因爲我的視覺受損。從X窗口傳播所有事件

該實用程序創建一個透明的X窗口並在其中繪製一個圓圈,然後使用鼠標指針移動該窗口,以便該圓圈跟隨鼠標。

它目前的作品,除了一個細節。鼠標事件不會傳播到基礎窗口。基本上,該實用程序使鼠標無用。

據我可以告訴從Xlib文檔,如果沒有另外指定,新窗口應傳播所有事件。我怎樣才能解決這個問題?

該代碼可以在GitHub上找到:https://github.com/blubber/circle-cursor目前它有點混亂,因爲它只是一個概念證明。

+0

那豈不是更容易簡單地替換光標(鼠標指針)主題與周圍繪製一個圓或至少是更大的?這將使X完成所有艱苦的工作。 (我仍然會查找如何讓你的程序工作,因爲我記得看到一個程序能夠在屏幕上畫畫並且不吸收事件。) –

+0

我嘗試了一個不同的鼠標光標主題,但是我找不到做這項工作的人。即使增加光標大小也無濟於事。問題是光標總是在變化,這使我很難找到。圈子是不變的,容易識別。我雖然關於如果我使用遊標主題添加一個圓,但我真的不知道如何。當然,我可以弄清楚,並編寫一個修改所有遊標文件的小腳本。 – Blubber

+0

@DanD。我很高興地讚揚你完美的語法,特別是與[2011](https://unix.stackexchange.com/questions/10214/how-to-set-per-process-swapiness-for-linux)相比。 – peterh

回答

1

我會建議通過光標圖像來做,當你不能接收鼠標事件時有許多方法,只有可能的來源是使用XQueryPointer進行輪詢。

隨着xfixes擴展,您可以訂閱所有cursor image changed事件,並獲得最新的光標的形狀,並且絲毫XRENDER你可以設置自己的(可能是動畫光標)

+0

我已經看過XRender和xfixes,據我可以告訴你建議監聽光標圖像更改事件,然後使用XRender的CreateCursor調用來創建一個新舊光標和舊形狀以及我的定製? – Blubber

+0

正確,而不是移動位於光標附近的透明窗口(這有很多自身的潛在問題:窗口位置滯後於光標,與wm和複合管理器等的交互)您更新當前光標形狀圖像,並且每次執行此操作時其他窗口/客戶端改變光標。 –

+0

感謝您的澄清,我搜索了一下,最終發現這個:https://github.com/dnschneid/crouton/blob/master/src/cursor.c這正是你在說什麼,只有他們複製光標移到不同的顯示器上,而不是改變它。我已經適應了我的需求,它的作用就像一個魅力,謝謝! – Blubber