1

以下にリストされている小さなアプリケーションがあります。これは、x ウィンドウとその中に小さなウィンドウを作成するだけです。後で、すべてのツールバーとメニューがサブウィンドウであり、それらを管理したいウィンドウ マネージャーを選択できる実験的な IDE を作成する予定です。

私がやりたいのは、xmonad インスタンスを起動し、ルート ウィンドウからウィンドウを再親化して制御するのではなく、アプリケーションのウィンドウ内でウィンドウを再親化して制御することです。

これは可能ですか?

PS アプリはこちらです。

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

1 に答える 1

1

原則として、xmonad内のすべてのハードコードされたルートウィンドウ参照を、起動時に指定できるウィンドウIDに置き換えるだけの問題です。ただし、xmonadにその機能がすでに備わっていない限り、xmonadコードをハックして追加する必要があります。

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

別のアプローチは、xmonadからコードをヤンクしてアプリに貼り付けることです...

于 2012-02-17T18:22:25.753 に答える