如何不将用户文本(密码)条目显示到文本框中(如su命令一样)

时间:2012-10-19 17:52:48

标签: c gtk

我有GtkEntry,用户必须在其中提供密码。

我做了

gtk_entry_set_visibility(GTK_ENTRY(password_entry), FALSE);

在纯文本中使用另一个符号而不是真实密码,但我希望GtkEtry在用户输入密码时不显示文本,就像su程序一样。

我该怎么做?

2 个答案:

答案 0 :(得分:3)

docsgtk_entry_set_visibility下方,有 gtk_entry_set_invisible_char ,其中包含以下注释:

  

[...]如果将隐形字符设置为0,则用户将不会收到任何反馈   一点都没键入时屏幕上没有文字。

答案 1 :(得分:1)

如果找不到更好的东西,可以这样做:

将信号连接到“insert_text”上的gtk_entry(或任何gtk_editable),获取char类型,存储它,最后使用g_signal_stop_emission_by_name(G_OBJECT(editable),“insert_text”);隐藏字符

例如,此代码丢弃非数字字符:

g_signal_connect(G_OBJECT(form->field[i].control), "insert_text", G_CALLBACK(insert_text_handler), GINT_TO_POINTER(form->field[i].type_of));

void insert_text_handler(GtkEditable *editable, const gchar *text, gint length, gint *position, gpointer data)
{
    gint i;

    switch(GPOINTER_TO_INT(data)) {
        case TYPE_DIGIT:
            for (i = 0; i < length; i++) {
                if (!isdigit(text[i])) {
                    g_signal_stop_emission_by_name(G_OBJECT(editable), "insert_text");
                    return;
                }

...