2011-02-27 8 views
7

다음 코드는 윈도우 테두리를 어떻게 제거합니까? Xlib 어떻게 (창 장식 제거) 작동합니까?

//note the struct is declared elsewhere, is here just for clarity. 
//code is from [http://tonyobryan.com/index.php?article=9][1] 
typedef struct Hints 
{ 
    unsigned long flags; 
    unsigned long functions; 
    unsigned long decorations; 
    long   inputMode; 
    unsigned long status; 
} Hints; 

//code to remove decoration 
Hints hints; 
Atom property; 
hints.flags = 2; 
hints.decorations = 0; 
property = XInternAtom(display, "_MOTIF_WM_HINTS", true); 
XChangeProperty(display,window,property,property,32,PropModeReplace,(unsigned char *)&hints,5); 
XMapWindow(display, window); 

지금까지 나는 아톰이 창 및 디스플레이와 유사한 식별자의 일종이다 것을 수집했지만 힌트 구조 또는 "_MOTIF_WM_HINTS는"어디에서 왔는지 나는 알아낼 수 없습니다. 누구든지 나를 위해이 코드를 모두 설명 할 수 있습니까? 미리 감사드립니다.

+0

이것은 귀하의 출처 또는 귀하의 목적지입니다. http://tonyobryan.com/index.php?article=9 – xanatos

+0

이것은 내 근원의 약간 발췌입니다. 힌트 구조는 다른 곳에서 선언되었지만 명확성을 위해 여기에 표시됩니다. 그리고 그 기사를 읽었을 때 힌트 구조를 설명하지 못했습니다 ("이 구조는 Motif에서 비롯된 것 같지만 확실하지는 않습니다 ...") – Ell

+0

그래, 사실 내 소스가 아니라 좋은 지적이야. – Ell

답변

9

(당신 그 :-) 추측, 확인)은 "공식적인"-looking 표준 또는 모든 종류의에 의해 와서 열심히, 그러나 는 속성이 ... 모티프 툴킷에서 온 것처럼 보인다 _MOTIF_WM_HINTS. the MotifZone site을 참조하십시오.

경고 : 다음은 불완전하지만 약간의 빛을 비춰 줘야한다. XmNmwmDecorations, XmNmwmFunctions 및 XmNmwmInputMode위한

문서는 툴킷 기능은 재산권, 함수 (크기 조절, 이동, ...)와 입력 모드 모양을 제어하는데 사용되는 각종 값의 비트 마스크 인 것을 나타내는 것을 창 관리자는 창을 제공/제공해야합니다. man vendorshell 또는 Oreilly Motif reference books, Vol6a chapter 16을 참조하십시오.

속성은 전체 X11 항목의 일부입니다. 창에는 임의의 수의 속성이 정의되어있을 수 있습니다. 속성에는 이름이 있지만 속성을 설정/가져 오는 것은 모든 get/set 호출에 대해 전체 문자열을 으로 보내는 것을 피하기 위해 "아톰"(정렬 식별자)을 통해 수행됩니다. Properties and Atoms

현재 창 관리자 (있는 경우)를 참조하십시오 적절한 이벤트 필터를 설정하고 PropertyNotify에 작용하는 이벤트를, 또는 단순히 매핑됩니다 때 윈도우가 가지고있는 속성을 검사하여 윈도우 속성에 변화를 반응 (또는 이동 , 또는 무엇이든). 창 관리자가 _MOTIF_WM_HINT 속성을 알고 있으면 이이를 해석하고 원하는대로 수행 할 것입니다. (참고 :.. 다른 창 그 "PropertyNotify"이벤트를 수신 할 수 있다면 나는 그 특권이 창 관리자에게 위임 된 경우 확인 entierly, 또는 아니에요 있는지 그 질문에 실제로 관련이 없음 )

그래서 창 관리자가 _MOTIF_WM_HINTS 속성에 대해 속성을 알고있는 한 잘 작동합니다.

창을 실제로 것 일 당신이 만약 확실하지 MapWindow() (을 통해 그려 전에 XInternAtom와의 원자 (식별자/바로 가기)를 받고, 그리고 XChangeProperty() 를 통해 그 값을 설정하여 시작 MapWindow()를 실행 한 후, 창문에 따라 달라질 수 있습니다. 관리자).

[편집 :. 제로로 .decorations 부분을 설정하면 모든 장식 비트를 삭제하므로이 창 관리자가 기본적으로, 혼자 국경 지옥을 떠날 것을 요청]

나는 "어딘가에 가지고 올 수 없습니다 공식 "에 해당 구조체의 정의가 포함되어 있습니다. openmotif-2.3.3 배포판의 lib/X11/MwmUtils.h에 정의되어 있습니다. .flags 항목을 사용하는 방법을 모르면 (내 인생의 코드를 찾을 수 없음 : - /)하지만 {decor, function, inputMode} 중 "하위 속성"중 어느 것을 표시했는지는 의심 스럽습니다. 에 연기. (그 말을하지 마십시오.)

_MOTIF_WM_HINTS를 (를) 사용하는 것이 최상의 옵션이 아닐 수도 있습니다. 바로 . freedesktop에서 Extended Window Manager hints specification 및 기타 정보/표준/초안을 살펴 보셨습니까? 대부분의 "현대적인"창 관리자/데스크탑 환경/부엌 싱크대는 Motif와의 하위 호환성을 유지하는 대신에이를 준수하는 경향이 있습니다. 모두는 내가 추측하기에 당신이 코딩하고있는 것에 달려 있습니다.

읽어 주셔서 감사합니다 .-)

+0

이 모든 힌트를 주셔서 감사 드리며, 저에게 준 링크를 모두 살펴 보겠습니다! – Ell

+1

+1 아주 좋은 설명! – Venemo