gtkentry фокус поведение

Има ли съществуващ механизъм за GtkEntry просто да позиционира курсора в края на текста, когато е фокусиран, вместо да избира съдържанието му да бъде презаписано от следващия клавиш? Изглежда странно да трябва да добавя манипулатор на сигнали, за да направя нещо толкова основно, но не мога да намеря нищо в свойствата.

Редактиране: Манипулаторът на сигнала не работи; каквото и да правя, поведението по подразбиране се задейства след като манипулаторът ми се изпълни. Ето моя gtkd код; имайте предвид, че добавям някакъв текст в манипулатора за фокусиране в събитие и добавеният текст също се избира:

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);
  }
}

Методът addOnFocusIn е в gtkd Gtk.Widget API; той извиква g_signal_connect_data вътрешно, което на теория трябва да зачита флага G_CONNECT_AFTER, който го подавам, но изглежда не е така.

Edit2: Решено - манипулаторът grab-focus извършваше избора на текст и се обработваше след focus-in-event


person Martin DeMello    schedule 28.04.2012    source източник


Отговори (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);   
  }
}
person Martin DeMello    schedule 28.04.2012

Не мога да намеря нищо в документите.

Предполагам, че са разбрали, че отклонението от поведението по подразбиране е толкова необичайно, че просто позволяват на хората да го правят със сигнали, вместо да предоставят свойство за това.

Помислете за създаване на подклас на GtkEntry, който показва поведението, от което се нуждаете.

person Michael Slade    schedule 28.04.2012