2

次のキーで上書きする内容を選択するのではなく、フォーカスされたときにGtkEntryがテキストの最後にカーソルを置くだけの既存のメカニズムはありますか?この基本的なことを行うためにシグナルハンドラーを追加する必要があるのは奇妙に思えますが、プロパティに何も見つかりません。

編集:シグナルハンドラーは機能しません。私が行うことは何でも、ハンドラーの実行後にデフォルトの動作がトリガーされます。これが私のgtkdコードです。focus-in-eventハンドラーにテキストを追加していることに注意してください。追加されたテキストも選択されます。

class NoteView : Entry
{
  this(string text) {
    if (text) {
      setText(text);
    }
    setEditable(true);
    setCanFocus(true);

    addOnFocusIn(delegate bool(GdkEventFocus* f, Widget w) {
        // clear selection
        selectRegion(0, 0);
        // test to see whether the appended text gets selected too
        appendText("hello");
        setPosition(-1);
        // don't let any other handlers run
        return 1;
      }, ConnectFlags.AFTER);
  }
}

メソッドはaddOnFocusIngtkdGtk.Widgetapiにあります。それはg_signal_connect_data内部的に呼び出します、それは理論的にG_CONNECT_AFTERは私がそれを渡すフラグを尊重するはずですが、そうではないようです。

Edit2:解決済み-grab-focusハンドラーはテキスト選択を行っていて、その後処理されていましたfocus-in-event

4

2 に答える 2

2

GtkEntryはgrab-focus、ではなく信号のテキストを選択していたことがわかりましたfocus-in-event。作業コード:

class NoteView : Entry
{
  this(string text) {
    if (text) {
      setText(text);
    }
    setEditable(true);
    setCanFocus(true);
    setHasFrame(false);

    addOnGrabFocus(delegate void(Widget w) {
        selectRegion(0, 0);
        setPosition(-1);
      }, ConnectFlags.AFTER);   
  }
}
于 2012-04-28T07:46:06.673 に答える
0

ドキュメントに何も見つかりません。

彼らは、デフォルトの振る舞いから逸脱することは、プロパティを提供するのではなく、人々にシグナルを使ってそれを行わせるという珍しいことだと考えたと思います。

GtkEntry必要な動作を示すサブクラスを作成することを検討してください。

于 2012-04-28T04:44:48.003 に答える