2012-02-15 55 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