2012-02-15 53 views
1

我有一個小應用程序,下面列出了它只是一個x窗口和一個小窗口。我後來打算做一個實驗性的IDE,其中所有的工具欄和菜單都是子窗口,並且可以選擇任何想要管理它們的窗口管理器。如何更改窗口xmonad補救?

我想這樣做是啓動一個xmonad實例,使其不能重新設置父級和控制窗口,從根窗口,但要重新設置父級和控制窗口我的應用程序的窗口中。

這可能嗎?

P.S. 這是應用程序。

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() 

回答

1

原則上「只是」將xmonad中的所有硬編碼根窗口引用替換爲可在啓動時指定的窗口ID。但是除非xmonad已經具備了這個功能,否則你肯定必須破解xmonad代碼才能添加它。

你可以運行你自己的整個X服務器,假裝你的窗口是一個根窗口 - 像Xephyr或Xnes​​t的。這肯定比添加xmonad功能來使用非root用戶窗口困難得多,但它的優點是可以與任何窗口管理器一起使用。

另一種方法可能是剛剛抽出碼出xmonad,並將其粘貼到您的應用程序...

+0

更重要的是,我會看到如果我可以直接使用Xephyr。 – 2012-02-22 02:38:58