voglio creare un'applicazione in cui attingo su una finestra, sia in finestra o pieno schermo, dove ho il mouse afferrato ma senza intercettare eventuali scorciatoie da tastiera WM, come Alt + Tab, e ho anche bisogno di essere notificate ogni volta che l'utente entra/esce dallo stato attivo.Come creare programmi compatibili a schermo intero Alt + Tab (come i giochi) in Linux?
Le applicazioni comuni come Google Chrome, Firefox o gnome-terminal possono gestirlo correttamente (andando a schermo intero con F11, ma hanno ancora Alt + Tab), ma non afferrano il mouse.
SDL ha una notoria cattiva gestione di questo caso d'uso: SDL_WM_GrabInput cattura il mouse ma intercetta anche le scorciatoie WM; e SDL_FULLSCREEN sembra avere una sorta di automatico automatico da solo (non chiedermi il motivo).
Una soluzione potrebbe essere scrivere codice per Alt + Tab, ma questo fa schifo (e non aiuta per altre scorciatoie WM, come cambiare in un altro spazio di lavoro).
Un'altra soluzione è quella di non chiamare SDL_WM_GrabInput, ma invece finto una gru a benna: basta nascondere il puntatore del mouse (con SDL_ShowCursor) e spostare di nuovo al centro ogni volta che l'utente si muove. Il che è brutto, ma in pratica funziona - tranne ovviamente per SDL_FULLSCREEN, perché cattura automaticamente (a differenza di implementazioni sensate). Una soluzione SDL fullscreen-capable è questa, ma non è ancora quello che voglio. Non voglio avere hack per abilitare e disabilitare Grab, voglio afferrare il mouse ma non afferrare la tastiera.
Quindi sono arrabbiato con SDL e voglio vedere le alternative. I vorrebbe per utilizzare SDL ma questo non è necessario.
This question sembra indicare che ciò che SDL fa effettivamente è utilizzare XGrabKeyboard. Leggendo la pagina man non mi è immediatamente chiaro se puoi afferrare il mouse senza afferrare la tastiera (non ho mai usato Xlib da solo).
So come creare "falsi schermo intero" con GTK (ovvero, della varietà gnome-terminal Alt + Tab friendly). Immagino che fare questo, accoppiato con il mouse che si nasconde e spostarlo di nuovo al centro ("falso afferrare") potrebbe fare fare il trucco, ma questo sembra troppo nastro adesivo. Ci deve essere un modo più semplice. (Inoltre, non voglio aggiungere GTK come dipendenza, ma non sono nemmeno sicuro che effettuare chiamate Xlib non elaborate sia una buona idea).
Qual è una buona soluzione per questo?
Ho bisogno di una soluzione Linux/X11 ma sarebbe bello che fosse multipiattaforma - so che questo può essere risolto senza problemi su Windows, quindi forse c'è una libreria che fa esattamente questo. (Anche, io rendo con OpenGL, ma questo è irrilevante)
PS: Forse sto avendo una cattiva comprensione di questo problema e non sto chiedendo il diritto domanda, quindi sentitevi liberi di segnalare approcci Mi rifugio' t considerato.
La [domanda che ho citato] (http://stackoverflow.com/questions/10916997/alt-tab-from-fullscreen-sdl), a mio parere, non è proprio un duplicato, dal momento che non sto guardando specificamente per una soluzione SDL. SDL è semplicemente la libreria che sto usando * adesso *. – darque
Ho appena visto su Xlib API la funzione [XGrabPointer] (http://tronche.com/gui/x/xlib/input/XGrabPointer.html). Quindi, a quanto pare, Xlib ha abbastanza funzionalità per afferrare * solo * il mouse, senza dover afferrare la tastiera. – darque