2012-05-09 2 views
5

위젯 중 일부는 편집 가능하고 초점을 맞추고 있으며 그 중 일부는 그렇지 않습니다. 편집 -> 복사 메뉴 항목을 구현하기 위해 현재 텍스트가 선택된 텍스트가 있는지 확인하고 싶습니다. gtk_editable_get_selection_bounds이 true를 반환 할 때까지 모든 위젯을 반복하는 것 이외의 다른 방법이 있습니까?어떤 gtk 위젯에 현재 선택 항목이 있는지 알아보십시오.

현재 gtk_clipboard_get(GDK_SELECTION_PRIMARY)을 호출하여 문제를 피하고 있습니다.하지만 이식성이 없으며 응용 프로그램 내에서뿐만 아니라 현재 디스플레이 내에서 선택된 텍스트를 선택합니다.

+0

위젯이 선택을 주장 할 때 신호가없는 것 같지만 각 항목에 대해 동일한 "selection-get"신호 처리기를 사용하고 선택 변환을 위조하여 호출 할 수 있습니다 선택이있는 항목 (있는 경우). – ergosys

+0

ergosys : 선택 전환을 위조하면 무엇을 의미합니까? –

+0

실제로 데이터를 수신하지 않고 선택 변환을 요청하십시오. 나는. gtk_selection_convert()를 호출하지만 "선택 수신"신호 처리기가 없습니다 (또는 스텁 일 수도 있음). – ergosys

답변

1

gtk_window_get_focus()을 사용해 보셨습니까? 사용자는 항목과 자주 상호 작용하므로 잘 작동합니다. 설명서에 "윈도우에서 현재 포커스가있는 위젯을 검색합니다." 너 혼자서 그것을 볼 수있다 here. 그런 다음 검색된 위젯이 항목 중 하나인지 비교하십시오.

집중된 항목을 얻었 으면 gtk_entry_get_text()을 사용하여 텍스트를 가져오고 싶지만 항목의 모든 텍스트를 가져올 수 있습니다. 이것이 귀하의 목적에 맞지 않는다면 솔루션은 gtk_editable_copy_clipboard()을 사용하고있을 것입니다.이 도구는 편집 가능한 현재 선택된 콘텐츠의 내용을 복사하고 (물론 편집 가능한 항목으로 캐스트) 클립 보드에 저장합니다. 그런 다음 적용되면 gtk_editable_paste_clipboard()을 사용하여 복사 한 내용을 붙여 넣습니다.

+0

'g_signal_emit_by_name (항목, "copy-clipboard", NULL)'도 복사에 사용됩니다. – ptomato

+0

내가 시도한 첫 번째 문제 였지만 초점이 맞춰진 항목이 반드시 텍스트 선택 항목이 아니기 때문에 작동하지 않았습니다. –

관련 문제