2017-04-12 16 views
0

아주 작은 창에 사용 가능한 RAM의 양과 같은 몇 가지 통계를 표시하는 간단한 리소스 표시 프로그램을 작성했습니다. 나는 그 (것)들 사이에서 전환 할 때, 그것을 달성하는 방법 그것을 어떤 탁상든지에 눈에 보이는 원하는가?모든 데스크탑에 스틱 C 응용 프로그램

는 UPDATE

: 여기 내가 지금까지 가지고 내가 바른 길 (희망) 오전 n.m.-

감사입니다 :

unsigned int ints[2]; 
ints[0] = 0xFFFFFFFF; 
ints[1] = 2; 
XChangeProperty(d, w, XInternAtom(d, "_NET_WM_DESKTOP", 1), 
      XA_ATOM, 
      32, 
      PropModeReplace, 
      (unsigned char*)ints, 
      2); 

그것은 컴파일,하지만 아무것도하지 않습니다 , 즉 창은 원래 시작된 바탕 화면에서만 볼 수 있습니다. 내 코드에 무슨 문제가 있습니까?

답변

2

X11 또는 Xlib 자체로는 데스크톱 개념이나 데스크톱 간 개념이 없습니다. 창 관리자의 모든 것입니다. 일반적으로 윈도우는 WM에 대해 window properties을 통해 필요하다고 알려줍니다.

현대의 Freedesktop 호환 창 관리자는 _NET_WM_DESKTOP 속성을 사용합니다. 윈도우를 매핑하기 전에 0xFFFFFFFD로 설정하십시오.

편집 올바른 주문은

unsigned long prop = 0xFFFFFFFF; // note long! even if long is 64 bit 

XChangeProperty(d, w, XInternAtom(d, "_NET_WM_DESKTOP", 1), 
       XA_CARDINAL, // note CARDINAL not ATOM 
       32, 
       PropModeReplace, 
       (unsigned char*)&prop, 
       1); // note 1 

XMapWindow(d, w); // map after changing the property 

당신은 속성이 올바르게 설정되어 있는지 확인합니다 xprop 명령 행 유틸리티를 사용할 수 있습니다.

+0

최신 우분투 X11 헤더'_NET_WM_DESKTOP'는 어디에도 선언되지 않았기 때문에 어느 곳에서나 동일한 숫자를 찾을 수 없습니다. – exebook

+1

@exebook 그것은 선언 된 것이 아니고, 문자열이며, XInternAtom (display, "_NET_WM_DESKTOP", False)'을 호출합니다. 구글이 호출. –

+0

내 업데이트 된 질문을 볼 수 있습니까? 올바르게 할 수는 없습니다. – exebook