Как связать сигнал с "gtk_entry" при завершении ввода? - PullRequest
0 голосов
/ 19 июня 2020

Для входа из gtk_entry_new, как я могу подключить сигнал, когда пользователь вводит sh? finish inputing означает:

  1. пользовательский пу sh Enter ключ. или
  2. пользователи отводят мышь от области ввода

Для 1) мы можем использовать сигнал activate для входа. Я не уверен в этом на 100%. Но для 2) какой сигнал можно подключить? Похоже, запись теряет фокус или что-то в этом роде.

Есть подсказки? Спасибо.

Редактировать 1 : После Google и чтения руководства Gtk + я обнаружил, что сигнал focus-out-event - это то, что я хотел. В сигнале он излучал сигнал activate.

gtk_signal_connect(GTK_OBJECT(entry), "focus-out-event", G_CALLBACK(span_focus_out_event), frame);
gtk_signal_connect(GTK_OBJECT(entry), "activate", G_CALLBACK(span_input_finish), frame);

Функция span_focus_out_event:

gboolean span_focus_out_event (GtkWidget *entry, GdkEvent  *event, gpointer data)
{
  gtk_signal_emit_by_name(GTK_OBJECT(entry), "activate");

  return FALSE;
}

Функция span_input_finish:

gboolean span_input_finish (GtkWidget *entry, gpointer data)
{
  /* do whatever */

  return FALSE;
}

Примечание:

  • Возвращение обоих span_focus_out_event и span_input_finish должно быть FALSE; в противном случае вы получите предупреждение: GtkEntry - did not receive focus-out-event. If you connect a handler to this signal, it must return FALSE so the entry gets the event as well.

  • В span_input_finish вы можете потерять фукус entry не по своему намерению, что означает, что сигнал focus-out-event излучается неоднократно. Позаботьтесь об этом.

...