2010-02-25 3 views
1

Je suis actuellement en train d'implémenter un programme en X11 en utilisant C. J'ai eu le programme pour gérer les événements de clic droit et gauche, cependant le clic du milieu pose un problème. Il semble que mon gestionnaire de fenêtres (Gnome sur Ubuntu 9.10) pense que c'est mieux si, au lieu d'avoir un seul clic du milieu, je devrais avoir une série d'autres clics à la place. Je suppose que cela a quelque chose à voir avec le clic du milieu utilisé pour copier-coller. Je ne veux vraiment pas cela, cependant, car je fais une application en plein écran avec OpenGL, et de telles choses ne sont pas appropriées. Est-il possible d'avoir le bouton du milieu de la souris qui fonctionne comme n'importe quel autre bouton?Comment désactiver les événements automatiques de la souris du clic du milieu dans X (Xlib)?

Mon code actuel ressemble à ceci:

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; 
     } 
} 

Ma difficulté est qu'il se comporte comme leftMouseButton() a été pressé. Des idées?

Répondre

1

Pour ce faire, vous devez saisir les commandes du serveur. Ensuite, le gestionnaire de fenêtres est exclu de la chaîne de traitement. Le moyen le plus confortable est d'utiliser libSDL. Il crée le contexte approprié pour une application OpenGL en plein écran et est plus facile à gérer que Xlib + GLX.

+1

Merci pour votre réponse. Je préférerais ne pas ajouter une autre bibliothèque considérant que la plupart du code pour travailler avec X a déjà été écrit. Je voudrais savoir comment saisir les commandes. J'ai précédemment fait des appels comme: XGrabKeyboard (affichage, fenêtre, vrai, GrabModeAsync, GrabModeAsync, CurrentTime); XGrabPointer (affichage, fenêtre, true, masques, GrabModeAsync, GrabModeAsync, fenêtre, None, CurrentTime); Y a-t-il autre chose que je devrais ajouter? – Warpspace

+0

Ça a l'air bien. Je ne vois rien d'autre à faire, assurez-vous que votre event_mask est correctement défini. En cas de doute, vous pouvez trouver d'autres indices en regardant le code libSDL. Je n'ai pas fait le grabbing moi-même, donc c'est toute l'aide que je peux fournir. p.s .: Si vous aimez ma réponse, vous devriez lui donner un upvote. Vous êtes nouveau sur stackoverflow, c'est pourquoi je vous le dis - le vote est une chose essentielle qui fait fonctionner stackoverflow. – ypnos

+0

Il ne me laissera pas upvote (je suis trop nouveau), mais merci pour la réponse. Tu as raison, ça fonctionne presque comme je l'ai, et le code libSDL aura le reste si j'en ai besoin. Merci. – Warpspace

Questions connexes