2010-07-27 2 views
2

컨텍스트 메뉴를 표시하기 위해 GTK 코드의 결함으로 작업하고 있습니다. 여러 메뉴 항목이있는 메뉴를 만든 후에는 gtk_menu_popup()을 사용하여 메뉴를 표시합니다. 이 함수는 GtkMenuPositionFunc 유형의 함수 포인터를 사용하여 메뉴 위치를 지정할 수 있습니다. GTK에게 현재 위치를 유지하라는 것을 제외하고는 아무 것도하지 않고 메뉴의 일부가 모니터 외부에있는 경우 (함수의 네 번째 인수 사용) 메뉴를 누르십시오. 내 문제는 GTK가 메뉴를 밀어 넣을 때 메뉴 항목의 절대 위치가 바뀌지 않는다는 것이다. 따라서 스크롤 위치가 변경되어 메뉴에 스크롤 막대가 생깁니다. 메뉴 항목의 상대적 위치를 고정 된 채로 유지하려고합니다. 내가 할 수있는 방법이 있니? GTK 문서는이 문제에 대해 경고하지만 수정 방법에 대해서는 언급하지 않습니다. 참조 할 수 있도록 링크가 있습니다 :GTK : 컨텍스트 메뉴 항목 위치 지정

http://library.gnome.org/devel/gtk/unstable/GtkMenu.html#GtkMenuPositionFunc

편집 : 나는 몇 가지 코드를 포함 좋았을 것이지만, 논리도이 흩어져있다.

답변

0

메뉴를 밀어 넣었을 때 메뉴 항목의 스크롤 오프셋을 재조정 할 수있는 방법을 찾지 못했습니다. 따라서 사용 된 임시 해결책은 GTK가 메뉴를 수직으로 누르는 것을 피하는 것이 었습니다. 따라서 원래의 요청은 위치가 (x,y) 인 메뉴를 만들었지 만 메뉴의 길이가 L이되어 화면 밖으로 나왔습니다. 메뉴 위치를 내 위치 기능의 (x,y-L)으로 변경합니다. 마찬가지로 y<0을 변경하면 (x,0)으로 설정됩니다. 나는 여전히 GTK에게 화면 밖의 메뉴를 밀어 넣어 왼쪽 및 오른쪽 여백을 넘는 메뉴를 처리하도록 지시합니다.

0

기본 동작 만 원한다면 위치 지정 기능을 제공 할 필요가 없습니다. 기본 동작은 현재 위치를 유지하면서 메뉴가 모니터에 맞는지 확인하는 것이므로 NULL을 위치 지정 기능으로 전달할 수 있습니다.

또한 기본 위치 기능이 작성 방법을 살펴 수 있습니다 http://git.gnome.org/browse/gtk+/tree/gtk/gtkmenu.c, gtk_menu_position() 현재 라인 4288.

PS에서. 논리가 코드 샘플을 게시하기에 너무 흩어져 있으면 정리를 고려해야합니다.

+0

'NULL '을 건네주는 것은 어떤 경우에는 사용되므로 실제로 옵션이 아닙니다. 이 특정 사례에 대해 'NULL'을 전달하려고 시도했지만 문제가 해결되었습니다. 그렇다면 GTK에 메뉴의 위치를 ​​변경하고 화면 밖으로 나가면 메뉴를 밀어 넣으라고 요청할 수는 없습니까? 그럴 가능성은 희박합니다. – 341008

+0

기본 위치 지정 기능을 복사하여 거기에서 시작할 수 있도록 소스 코드에 대한 링크가 포함되었습니다. GTK가 원하는 것을 할 수 있다면, 그렇게 할 수 있습니다. – ptomato

관련 문제