Ok, so I have a custom GObject to handle Input events, to notify connected handlers I cerated a signal in the class_init_function:
static void sample_input_manager_class_init (SampleInputManagerClass *klass)
{
sample_input_manager_signals[KEY_EVENT] = g_signal_new(
"key-event",
G_TYPE_FROM_CLASS(klass),
G_SIGNAL_RUN_LAST,
0,
NULL,
NULL,
NULL,
G_TYPE_NONE,
1,
G_TYPE_INT /* Keycode */
);
}
Might usefull (at the top of the source file):
enum SAMPLE_INPUT_MANAGER_SIGNALS
{
KEY_EVENT = 0,
N_SIGNALS
};
static guint ssample_input_manager_signals[N_SIGNALS] = { 0 };
Now, I want to trigger the signal with the following call:
int key = 42;
g_signal_emit(manager, sample_input_manager_signals[KEY_EVENT], 0, key);
(Where manager is a valid instance, and key is an integer to represet characters) However, in my registered callback (g_signal_connect
) I get totally random values like -2073417152
(for any input integer, constant during runtime)
Am I missing anything to get this to work?
Edit #1:
Signal handler connection:
SampleInputHandler *input = sample_input_handler_new();
g_signal_connect(input, "key-event", G_CALLBACK(test_cb), NULL);
Callback:
void testcb(int key, gpointer data)
{
printf("(%d)",key);
}
Ok, so after a too-long time, i figured that the default callback signature in GLib is simmilar to this:
<ReturnType> callback (YourType *object[, <your arguments> ], gpointer data);
So in my issue I simply forgot the first parameter, so that instead of reading my integer, I actually read the memory pointer address of my object.