2012-02-15 1 views
1

У меня есть небольшое приложение, перечисленное ниже, которое просто создает окно x и небольшое окно внутри него. Позже я планирую создать экспериментальную среду IDE, где все панели инструментов и меню являются подокнами, и каждый может выбрать любой оконный менеджер, которым он хочет управлять.Как я могу изменить окно xmonad reparents?

Что я хотел бы сделать, это запустить экземпляр 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 или Xnest. Это намного сложнее, чем добавление функции xmonad для использования окна без полномочий root, но это имеет то преимущество, что оно будет работать с любым оконным менеджером.

Другой подход может быть просто дергать код из xmonad и вставить его в приложение ...

+0

еще лучше, я буду видеть, если я могу просто использовать Xephyr непосредственно. –