2009-03-02 2 views
3

XCreateWindow를 사용하여 창을 만드는 프로그램을 만들었습니다. 이것은 내 시스템과 다른 많은 시스템에서 완벽하게 작동하지만 많은 사람들에게 이상한 문제가 발생합니다. 예 : 내가 얻은 ID는 프로그램이 시작된 터미널의 ID와 충돌합니다. 그런 경우에 gnome-terminal은 또한 윈도우 ID가 0x2400001 (부모는 루트)이고 내 프로그램의 윈도우 ID는 0x2400001입니다 (부모도 루트입니다). 무엇이 잘못 될지에 대한 제안이 있습니까?XCreateWindow는 기존 창과 충돌하는 창 ID를 제공합니다.

+1

단말기의 창 ID를 얻는 방법에 대해 자세히 설명해 주시겠습니까? 또한 코드 스 니펫 (snippet)을 사용하면 자신이하는 일을 스케치하는 것이 도움이 될 수 있습니다. – EFraim

답변

0

윈도우 ID는 X 서버에 연결될 때마다 고유합니다 (즉, X 서버에 연결하는 다른 프로세스는 동일한 윈도우 ID를 얻을 수 있으며 X 서버는 연결 AND 윈도우 ID를 사용하여 내부적으로 구분합니다).

X는 창 ID에 대해 X가 약속하지 않는다고 생각합니다. 그것들은 프로세스 나 다른 것들에 걸쳐 유일하기 때문에 다른 용도로 사용하지 않는 것이 좋습니다.

각 연결에 대해 동일한 값 (예 : 1)으로 시작하는 창 숫자로 연속 숫자를 반환하는 X 구현을 보니 놀라지 않을 것입니다. 모든 클라이언트의 첫 번째 창은 해당 X 구현에서 동일한 창 ID를 가진 것처럼 보입니다.

+1

창 ID는 X 디스플레이에서 고유합니다. 그렇지 않으면 X 클라이언트가 서로의 창을 참조 할 수 없습니다. – daf

0

Xserver는 모든 창에 대해 고유 한 불투명 ID를 만듭니다. 창 ID를 식별하는 데 사용하는 방법이 잘못되었을 수 있습니다.

귀하의 질문은 다른 문제에 대한 증상입니다. 정말 어떤 문제를 해결하려고합니까?

+0

창 ID는 X 서버가 아닌 X 클라이언트에 의해 생성됩니다. – daf

0

기타 대답 외에도 : xwininfo -root -all (자세한 내용은 매뉴얼 페이지 참조)을 실행하십시오. 그놈 터미널 창 ID와 앱의 창 ID를 확인하십시오.