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

「だけ」起動時に指定することができ、ウィンドウのIDとxmonadのすべてのハードコーディングされたルートウィンドウへの参照を置き換えるの問題。しかし、xmonadに既にその機能がある場合を除いて、xmonadコードを追加するには、必ずそれをハックする必要があります。

Xサーバー全体を実行して、XephyrやXnestなどのウィンドウがルートウィンドウであるとふりまとうことができます。これは確かに非ルートウィンドウを使用するためにxmonad機能を追加するよりもはるかに難しいですが、それは任意のウィンドウマネージャで動作する利点があります。

別のアプローチは、ちょうどいっそ

+0

... xmonadの外にコードをヤンクし、あなたのアプリにペーストすることができ、私はちょうど直接Xephyrでを使用することができれば、私が表示されます。 –

関連する問題