我有在 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");
}
并与“隐藏”和“激活”信号连接
在输入字段中输入“自动”文本后,我想在不按 Enter 键的情况下自动激活。在输入最后一个字符“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
更新我使用的代码。