Я пытаюсь отправить и получить клиентское событие, используя GtkWidget на платформе win32.Код отправки выглядит следующим образом:
GtkWidget *Wnd;
GdkNativeWindow Hnd =
#ifdef WIN32
GDK_WINDOW_HWND(Wnd->window);
#else
GDK_WINDOW_XWINDOW(Wnd->window);
#endif
GdkEvent *Event = gdk_event_new(GDK_CLIENT_EVENT);
// fill out Event params
gdk_event_send_client_message(Event, Hnd);
Код получения выглядит следующим образом:
static gboolean MyClientEvent(GtkWidget *widget, GdkEventClient *ev, MyWnd *Wnd)
{
// breakpoint here...
return TRUE;
}
GtkWidget *Wnd = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect( G_OBJECT(Wnd),
"client-event",
G_CALLBACK(MyClientEvent),
this);
gtk_widget_add_events(Wnd, GDK_ALL_EVENTS_MASK);
Я использовал Spy ++, чтобы увидеть отправку сообщения, поэтому я знаю, что отправляющая сторона в порядке.Однако принимающая сторона не получает клиент-событие.Я ожидал, что моя точка останова в обратном вызове сработает ... но это не так.
Я даже не уверен, может ли GtkWindow получить клиентское событие ... из прошлого опыта в X11, я думалв этом отношении он был почти таким же, как и любой другой GtkWidget.Может быть, на платформе win32 все по-другому.Но все же я бы хотел, чтобы это работало.
Мне бы хотелось, чтобы это работало асинхронно и поточно-ориентированным образом, чтобы я мог отправлять события из рабочих потоков в графический интерфейснить.