LINUX.ORG.RU

Сигналы GTK+


0

0

Есть два виджета. Один получает события от клавиатуры и обрабатывает их. Необходимо передавать их другому виджету (не имеющему фокуса).

Deleted

Re: Сигналы GTK+

Может подменить указатель на виджет и вызвать второй обработчик напрямую?

YesSSS ★★★ ()
Ответ на: Re: Сигналы GTK+ от YesSSS

Re: Сигналы GTK+

Я тоже так подумал. Но при этом, насколько я понимаю, не посылается сигнал присодиненным обработчикам. Я пробовал так:

gboolean gtouch_window_on_trainer_key_press_event(GtkWidget *widget,
					      GdkEventKey *event,
					      gpointer user_data)
{
  GTouchWindow *self;
  GTouchWindowPrivate *priv;
  gboolean result;

  self = GTOUCH_WINDOW(user_data);
  priv = GTOUCH_WINDOW_GET_PRIVATE(user_data);

  g_signal_emit_by_name((gpointer)priv->keyboard,
			"key_press_event",
			event,
			&result);
  (* GTK_WIDGET_CLASS(G_OBJECT_GET_CLASS(G_OBJECT(priv->keyboard)))->key_press_event
)(priv->keyboard, event);

  return FALSE;
}

но почему-то не работает.

Deleted ()
Ответ на: Re: Сигналы GTK+ от Deleted

Re: Сигналы GTK+

А, понял. Сигнал-то передается, однако виджет, который его принимает, обрабатывает его не сам, а должен передавать виджету, который он содержит - а он этого не делает.

Deleted ()
Ответ на: Re: Сигналы GTK+ от Deleted

Re: Сигналы GTK+

Я имел в виду такое:

gboolean gtouch_window_on_trainer_key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer user_data) { GTouchWindow *self; GTouchWindowPrivate *priv; gboolean result;

self = GTOUCH_WINDOW(user_data); priv = GTOUCH_WINDOW_GET_PRIVATE(user_data);

return second_key_press_event(SecondWidget, event, user_data); }

YesSSS ★★★ ()
Ответ на: Re: Сигналы GTK+ от YesSSS

Re: Сигналы GTK+

> second_key_press_event(SecondWidget, event, user_data); А если у класса second нету такого метода? Вообщем, я остановился на предыдущем.

Deleted ()
Ответ на: Re: Сигналы GTK+ от Deleted

Re: Сигналы GTK+

А вообще, спасибо, конечно, за ответ.

Deleted ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.