首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gtkentry焦点行为

gtkentry焦点行为
EN

Stack Overflow用户
提问于 2012-04-28 04:28:54
回答 2查看 2.5K关注 0票数 2

是否有任何现有的机制可以让GtkEntry在聚焦时简单地将光标定位在文本的末尾,而不是选择要被下一个键覆盖的内容?需要添加一个信号处理程序来做这样基本的事情似乎很奇怪,但是我在属性中找不到任何东西。

编辑:信号处理程序不工作;无论我做什么,默认行为都会在我的处理程序运行后触发。下面是我的gtkd代码;请注意,我在事件焦点处理程序中附加了一些文本,并选择了附加的文本:

代码语言:javascript
复制
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之后进行处理。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-28 07:46:06

原来GtkEntry选择的是grab-focus信号上的文本,而不是focus-in-event。工作代码:

代码语言:javascript
复制
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);   
  }
}
票数 2
EN

Stack Overflow用户

发布于 2012-04-28 04:44:48

在文件里什么都找不到。

我猜他们认为,与默认行为不同的是,他们只允许人们用信号来做这件事,而不是为它提供一个属性,这是不寻常的。

考虑创建一个显示所需行为的GtkEntry子类。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10360574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档