개인적으로는 "항상 위" 인 윈도우는 X Window 시스템에서 본 적이 없어서,
저도 궁금하군요, 어떻게 만드는지. 혹시 그런 프로그램을 보신 적이 있으면
문제는 쉬워질 것 같구요.
제가 아는 것은 어떤 윈도우가 항상 특정한 윈도우 위에 존재하도록
만드는 겁니다. 아마도 원하시는 게, 어떠한 프로세스가 만든 윈도우가
뜨더라도, 항상 위에 존재하는 윈도우인 것 같은데, 이벤트 루프에서 억지로
항상 위가 되게 만드는 방법이 적용 가능할 지 모르겠습니다.
"always on top" 속성을 가지는 top level window를 만드는 것은 window manager에 따라 조금씩 다른 것으로 알고 있습니다. window manager hint에 관해 설정하고 하는 작업이 필요한 것으로 아는데.. 잘 알지는 못합니다. 대개의 경우 mwm (Motif Window manager) hint와 icewm이 지원하는 것을 쓴다고 하네요. gnome에서도 이런 작업을 하고 있는 것으로 압니다 (http://developers.gnome.org/doc/standards/wm/)
일단 가장 빠르게 보시려면 xmms 소스를 xmms.org에서 받아다가 hints.c의 내용을 훑어 보시기 바랍니다.
그게 애매한 이유가 아마도..
기반이 되는 xlib 안에는, 관계되는 사항이 명시되어 있지 않았던 듯 합니다.
정책의 차이인데.. xlib reference manual 보면..
"우리는 mechanism 을 제공하지, policy 를 제공하지는 않는다"
라는 말이 계속 나옵니다.
어플리케이션 타이틀, 레이아웃 같은 것은 전적으로 윈도 메니저 영역이고
(policy), xlib 는 그것을 구현할 수 있는 기능들(mechanism) 만을 제공한다..
라는 요지였던 것 같습니다.
반면에 MS-Windows 에서는, 윈도우메니저 자체가 윈도우시스템에 통합된
형태라서, win32api 써서 윈도우 만들 때 부터, 저런 추상적인 속성까지
지정 가능하구요..
X-Windows 에서는 저렇게 레이어를 분리 해 놓았기 때문에 사용자 입맛대로
윈도우 환경을 꾸미는 것은 쉽지만 (윈도메니저만 바꾸어도 완전히 다른 시스템같으니ㅡ.ㅡ)
윈도우 매니저 끼리의 표준이 win32 만큼 확실히 잡힌 게 아니여서 상대적으로
혼란스러운듯 합니다. (하긴 win32 는 하나밖에 없으니 비교 상대가 아닐수도..ㅡ.ㅡ)
window manager hint 를 통해서 전달하는 것도 모든 윈도우 매니저가
따른다는 보장도 없고..
Re: 특정 윈도우 창 맨앞에 위치시키기
개인적으로는 "항상 위" 인 윈도우는 X Window 시스템에서 본 적이 없어서,
저도 궁금하군요, 어떻게 만드는지. 혹시 그런 프로그램을 보신 적이 있으면
문제는 쉬워질 것 같구요.
제가 아는 것은 어떤 윈도우가 항상 특정한 윈도우 위에 존재하도록
만드는 겁니다. 아마도 원하시는 게, 어떠한 프로세스가 만든 윈도우가
뜨더라도, 항상 위에 존재하는 윈도우인 것 같은데, 이벤트 루프에서 억지로
항상 위가 되게 만드는 방법이 적용 가능할 지 모르겠습니다.
윈도우즈라면 쉬운일인데요...
Orion Project : http://orionids.org
Re: 특정 윈도우 창 맨앞에 위치시키기
위에 말씀 하신것에 관해 조언을 주시면 감사히 받겠습니다.
아, 그리고 모든창의 맨앞에 위치시키는건 가능한 것 같습니다.
제가 가능하다는 글을 봤는데, 그걸로 끝이더군요...더이상 언급이 없어서리..ㅡ.ㅡ.....계속 해보는 중인데, 궁금하시다니 알게되면 말씀드리겠습니다.
(단, 알게되면-.-)
항상 깨어있어라 ~~~
Re: 특정 윈도우 창 맨앞에 위치시키기
그것은 XSetTransientForHint 를 쓰면 됩니다.
항상 최상위 윈도우 만드는 것도 그렇고, X Window 에서 하나 더
궁금한게 윈도우즈처럼 임의 모양 윈도우를 만드는 게 가능한지 입니다.
Region 관련 함수는 동일하게 있는데, 각 윈도우 영역을 세밀하게
조정할 수 있는 지 모르겠네요.
xeyes 가 그랬는 줄로 알고 과거에 찾아본 기억이 있는데, 그것도
그냥 사각 윈도우에 눈이 그려 있었던 것 같구요.
기억이 잘 안나네요...
Orion Project : http://orionids.org
"always on top" 속성을 가지는 top level window
"always on top" 속성을 가지는 top level window를 만드는 것은 window manager에 따라 조금씩 다른 것으로 알고 있습니다. window manager hint에 관해 설정하고 하는 작업이 필요한 것으로 아는데.. 잘 알지는 못합니다. 대개의 경우 mwm (Motif Window manager) hint와 icewm이 지원하는 것을 쓴다고 하네요. gnome에서도 이런 작업을 하고 있는 것으로 압니다 (http://developers.gnome.org/doc/standards/wm/)
일단 가장 빠르게 보시려면 xmms 소스를 xmms.org에서 받아다가 hints.c의 내용을 훑어 보시기 바랍니다.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
Re: 특정 윈도우 창 맨앞에 위치시키기
XShape확장이 그렇게 해 주는 것으로 알고 있습니다.
많은 WindowMaker dock app가 그렇게 되는 것 같던데...
gkrellm도 모양이 사각은 아니니까 그걸 보셔도 도움이 되실듯...
--
익스펙토 페트로눔
명령은 잘 모르지만..
그놈 1.4시절.. 패널 속성에
다른 창보다 항상 위, 항상 밑 그런 것이 있었다고 기억납니다.
2.2에서는 어디로 갔는지 그 메뉴가 사라졌고요 -_-;
그 소스를 보시면 되지 않을까 하는 .. 쿨럭.
No Pain, No Gain.
그게 애매한 이유가 아마도..기반이 되는 xlib 안에는, 관계되는
그게 애매한 이유가 아마도..
기반이 되는 xlib 안에는, 관계되는 사항이 명시되어 있지 않았던 듯 합니다.
정책의 차이인데.. xlib reference manual 보면..
"우리는 mechanism 을 제공하지, policy 를 제공하지는 않는다"
라는 말이 계속 나옵니다.
어플리케이션 타이틀, 레이아웃 같은 것은 전적으로 윈도 메니저 영역이고
(policy), xlib 는 그것을 구현할 수 있는 기능들(mechanism) 만을 제공한다..
라는 요지였던 것 같습니다.
반면에 MS-Windows 에서는, 윈도우메니저 자체가 윈도우시스템에 통합된
형태라서, win32api 써서 윈도우 만들 때 부터, 저런 추상적인 속성까지
지정 가능하구요..
X-Windows 에서는 저렇게 레이어를 분리 해 놓았기 때문에 사용자 입맛대로
윈도우 환경을 꾸미는 것은 쉽지만 (윈도메니저만 바꾸어도 완전히 다른 시스템같으니ㅡ.ㅡ)
윈도우 매니저 끼리의 표준이 win32 만큼 확실히 잡힌 게 아니여서 상대적으로
혼란스러운듯 합니다. (하긴 win32 는 하나밖에 없으니 비교 상대가 아닐수도..ㅡ.ㅡ)
window manager hint 를 통해서 전달하는 것도 모든 윈도우 매니저가
따른다는 보장도 없고..
눼.~~
윗분이 말씀하신 xmms소스를 뒤졌습니다.(ㅡ,,-)
저도 윈도우 매니저에 대한 개념이 잘 안잡혀있는터라....
성공 했더이다...
관련 소스입니다.
Atom layer=XInternAtom(display,"_WIN_LAYER", False);
long data[1];
data[0]=10;(<--- 여기서 6인지 헷갈림)
XChangeProperty(display, window, layer, XA_CARDINAL , 32 , PropModeReplace,(unsigned char *) data,1)
이렇게 해주니, 항상 맨앞에 떠있더군요.....
문서 찾다가, 어디서, Xlib은 그런기능을 제공하지 않는다는 글을 읽어서 ...(영문이라 잘못읽었나....ㅎㅎ)
적용이 될까 의아해 했는데, 되더군요.....
참고하시길 바랍니다.
항상 깨어있어라 ~~~
댓글 달기