私は ".xinitrc" に持っています:
xterm &
mywm
mywm では、 XQueryTreeを使用して、ルートのすべてのウィンドウの子のリストを取得します。xterm のウィンドウが表示されません。wmの前に開いたウィンドウにタイトルバーを追加するには、それを行う必要があります。
私の質問は、mywm がこのウィンドウをどのように検出できるかということです。
実際、XQueryTree はウィンドウを検出できますが、XQueryTree を呼び出す前に数秒のスリープを追加する必要があります。それはトリッキーです。mywm をしばらく強制的にスリープさせるよりも良い方法はありますか?
struct Client{
Window frame/*frame*/;
Client *next; // next client
Client *previous; // previous client
};
void addClient(...){
Client *client;
client = (Client *)malloc(sizeof(Client));
memset(c, 0, sizeof(Client));
.
.
.
client->next = head.next;
if(head.next != NULL) head.next = client;
client->previous = &head;
head.next = client;
}
int main(int argc, char *argv[]){
.
.
.
while(continue) {
.
.
.
while(XPending(display)==0){ // as long as I don't get an event
.
.
.
XQueryTree(display,rootwin,&qr,&qp,&qc,&nc); // we got the list of the windows
. // children of root
. -> call addclient()
.
}
.
.
.
XNextEvent(display, &e);
switch(e.type){
.
.
.
}
}
.
.
.
return 0;
}