2012-05-09 10 views
5

私はGtkEntryウィジェットのコレクションを持っていますが、そのうちのいくつかは編集可能であり、フォーカス可能であり、一部はそうではありません。編集 - >コピーメニュー項目を実装するために、現在選択されているテキストがあるかどうか調べたいと思います。 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。次に、取り出されたウィジェットがあなたのエントリーの1つであるかどうかを比較します。

フォーカスを取得したら、おそらくgtk_entry_get_text()を使用してテキストを取得したいと思うかもしれませんが、エントリ内のすべてのテキストを取得します。これがあなたの目的に合わない場合、ソリューションはgtk_editable_copy_clipboard()を使用している可能性があります。これは編集可能で現在選択されているコンテンツの内容をコピーします(もちろん、その項目を編集可能にキャストします)。次に適用する場合は、コピーしたものをgtk_editable_paste_clipboard()で貼り付けます。

+0

'g_signal_emit_by_name(エントリ、" copy-clipboard "、NULL)'もコピーに使用されます。 – ptomato

+0

私が試した最初のことでしたが、それは機能しませんでした。なぜなら、フォーカスされたエントリは必ずしもテキスト選択のエントリではないからです –

関連する問題