gtkentry焦点行为

时间:2012-04-28 04:28:55

标签: gtk gtkd 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标志,但似乎不是。

编辑2:已解决 - grab-focus处理程序正在进行文本选择,并在focus-in-event

之后处理

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

在文档中找不到任何内容。

我猜他们认为偏离默认行为是不常见的,他们只是让人们用信号来做,而不是为它提供一个属性。

考虑创建展示您需要的行为的GtkEntry子类。