2010-02-25 23 views
1

我目前正在使用C在X11中實現一個程序。我得到了處理右鍵和左鍵點擊事件的程序,但是中點擊會帶來問題。看起來我的窗口管理器(Ubuntu 9.10上的Gnome)認爲,如果不是單擊中間點擊,而是應該有一系列其他點擊,這會更好。我認爲這與用於複製粘貼的中間點擊有關。不過,我真的不想要這個,因爲我正在用OpenGL製作全屏應用程序,而這樣的事情並不合適。有什麼辦法讓鼠標中鍵可以像任何其他按鈕一樣工作嗎?如何禁用X(Xlib)中的自動中鍵單擊鼠標事件?

我當前的代碼是這樣的:

switch(currentXEvent.type) { 
    case ButtonPress: 
     switch(currentXEvent.xbutton.button) { 
      case 1: 
       leftMouseButton(currentXEvent.xbutton.x, currentXEvent.xbutton.y); 
       break; 
      case 2: 
       middleMouseButton(currentXEvent.xbutton.x, currentXEvent.xbutton.y); 
       break; 
     } 
} 

我的困難是,它像leftMouseButton()已被按下。有任何想法嗎?

回答

1

爲此,您必須從服務器獲取控件。然後,窗口管理器被排除在處理鏈之外。最舒服的方式是使用libSDL。它爲全屏OpenGL應用程序創建適當的上下文,並且比Xlib + GLX更容易處理。

+1

感謝您的回覆。考慮到大多數使用X的代碼已經寫好了,我不想添加另一個庫。我想知道如何抓住控制。我以前打過電話,如: XGrabKeyboard(display,window,true,GrabModeAsync,GrabModeAsync,CurrentTime); XGrabPointer(display,window,true,masks,GrabModeAsync,GrabModeAsync,window,None,CurrentTime); 還有什麼我需要補充嗎? – Warpspace 2010-02-26 04:42:33

+0

看起來不錯。我沒有看到其他需要的東西,只要確保你的event_mask設置正確。有疑問的是,您可以通過查看libSDL代碼來找到更多提示。我沒有抓住自己,所以這是我能提供的所有幫助。 p.s .:如果你喜歡我的回答,你應該給它一個upvote。你是新來的stackoverflow,這就是爲什麼我告訴你 - 投票是一個重要的事情,使計算器工作。 – ypnos 2010-02-26 09:56:10

+0

它不會讓我upvote(我太新了),但謝謝你的答覆。你是對的,它幾乎按我的方式工作,如果我需要它,libSDL代碼將會有剩下的部分。謝謝。 – Warpspace 2010-02-26 16:18:19

相關問題