On Thu, Aug 30, 2007 at 03:37:04AM -0700, eminemence wrote: > > Am a newbie to linux gtk programming.I want trying to send the mouse button > press event to my widget and so I tried this code: > Code: > ########################################### > guint signalid = g_signal_new("button_press_event", > G_TYPE_FUNDAMENTAL(0), > G_SIGNAL_RUN_FIRST, > NULL, > NULL, > NULL, > NULL, > G_TYPE_NONE,0); > g_signal_emit(GTK_OBJECT(gPage),signalid,0); > ########################################### > Can someone tell me what is wrong out there?
Several things: 1) g_signal_new() creates (registers) a new signal for a class -- a new `type' of signal. This is not what you want, you want to emit an existing signal "button-press-event" (though see below). 2) The g_signal_new() arguments are bogus, for instance if you actually registered a new signal for GtkWidget, you would pass GTK_TYPE_WIDGET, not G_TYPE_FUNDAMENTAL(0) (which makes little sense) as the instance type, but since you don't want to register a new signal, I will leave this. 3) Signal is emitted with g_signal_emit() -- or rather g_signal_emit_by_name() if done by code outside the class: g_signal_emit_by_name(button, "clicked"); (in practice a method to emit this signal is defined for most signal one wants to emit in application code, so you would use gtk_button_clicked() here). 4) Events are special and sending events is done by a different functions than normal signal emission: gtk_main_do_event() or gtk_widget_event(). First you synthetize the event by creating it with gdk_event_new() and filling the fields, then send it and free with gdk_event_free(). Now, forget all this because in almost all cases you think you need to send a synthetic an event to a widget, a better solution exists. So, tell what you want to achieve. Yeti -- http://gwyddion.net/ _______________________________________________ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list