2012-02-15 1 views
1

J'ai une petite application ci-dessous qui fait simplement une fenêtre x et une petite fenêtre à l'intérieur. Plus tard, je prévois de créer un IDE expérimental où toutes les barres d'outils et les menus sont des sous-fenêtres et où l'on peut choisir le gestionnaire de fenêtres que l'on veut gérer. Ce que je voudrais faire est de démarrer une instance de xmonad et de le rendre non-reparent et de contrôler les fenêtres de la fenêtre racine, mais de réparer et de contrôler les fenêtres dans la fenêtre de mon application.Comment puis-je modifier la fenêtre xmonad reparents?

Est-ce possible?

P.S. Voici l'application.

module Main where 
import Graphics.X11.Xlib 

y f = w where w = f w 

main = do 
display <- openDisplay "" 

let screen = defaultScreen display 

root <- rootWindow display screen 
mainWindow <- createSimpleWindow 
display 
root 
0 0 100 100 
1 
(blackPixel display screen) 
(whitePixel display screen) 
setTextProperty display mainWindow "Subwindows" wM_NAME 

subWindow <- createSimpleWindow 
    display 
    mainWindow 
    0 0 100 100 
    1 
    (whitePixel display screen) 
    (blackPixel display screen) 
    mapWindow display subWindow 

    mapWindow display mainWindow 

    y $ \loop -> allocaXEvent $ \eventPointer -> do 
    nextEvent display eventPointer 
    event <- get_EventType eventPointer 
    case() of 
    _ | event == expose -> loop 
    | otherwise -> return() 

Répondre

1

En principe « juste » une question de remplacer toutes les références de la fenêtre racine dans xmonad avec hardcoded un ID de fenêtre qui pourrait être spécifiée au démarrage. Mais à moins que xmonad n'ait déjà cette fonctionnalité, vous devrez sûrement pirater le code xmonad pour l'ajouter.

Vous pouvez exécuter votre propre serveur X et prétendre que votre fenêtre est une fenêtre racine - comme Xephyr ou Xnest. C'est certainement beaucoup plus difficile que d'ajouter la fonction xmonad pour utiliser une fenêtre non-root, mais elle a l'avantage de fonctionner avec n'importe quel gestionnaire de fenêtres.

Une autre approche pourrait être juste Yank le code de xmonad et le coller dans votre application ...

+0

Mieux encore, je vais voir si je peux utiliser Xephyr directement. –

Questions connexes