GtkEntry和“editing_done”信号

时间:2013-09-10 21:40:48

标签: c gtk gtkentry

我有在gtk输入字段中设置DEVICE的功能:

gboolean device_entry_activate_cb (GtkWidget *widget, gpointer data)
{
    const gchar *text;

    text = gtk_entry_get_text (GTK_ENTRY (entry));

    if (!strcmp( DEVICE, text )
        return FALSE;

    if ( DEVICE )
        g_free( DEVICE );

    DEVICE = g_strdup( text );

    if (0 == strcmp(DEVICE, "auto"))

    /* do something: start printer for example */

    return FALSE;
}

void device_entry_auto_activate_cb(GtkEntry* entry, const gchar* text, gpointer data)
{
    GtkEditable *editable = GTK_EDITABLE (entry);

    text = gtk_entry_get_text (GTK_ENTRY ( entry));

    if (0 == strcmp(text, ""))
        g_signal_emit_by_name(G_OBJECT (editable), "activate");

}

并与“隐藏”和“激活”信号连接

我想在输入字段中输入“自动”文字后自动激活而不按回车键。在输入中输入最后一个字符“o”后激活。 我现在正在做的是:在小部件上激活Gtk信号“editing_done”。 但它似乎不起作用,我从来没有得到我的回调函数。

    g_signal_connect(G_OBJECT(entry), "hide", G_CALLBACK(device_entry_activate_cb), app);
    g_signal_connect(G_OBJECT(entry), "activate", G_CALLBACK(device_entry_activate_cb), NULL);
    g_signal_connect(G_OBJECT(entry), "changed", G_CALLBACK(device_entry_auto_activate_cb), NULL);

如果gtk_entry包含文本,我不想要“输入”以“激活”:auto

我使用的更新代码。

1 个答案:

答案 0 :(得分:0)

您需要连接到 GtkEditable:已更改信号,当条目中的文字为自动时,请使用 g_signal_emit_by_name 假冒 - 发送 GtkEntry:激活信号。