summaryrefslogtreecommitdiff
path: root/gtk/gtksignal.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/gtksignal.c')
-rw-r--r--gtk/gtksignal.c519
1 files changed, 259 insertions, 260 deletions
diff --git a/gtk/gtksignal.c b/gtk/gtksignal.c
index df68aadb75..b578917b54 100644
--- a/gtk/gtksignal.c
+++ b/gtk/gtksignal.c
@@ -38,19 +38,19 @@ typedef void (*GtkSignalMarshaller0) (GtkObject *object,
struct _GtkSignalInfo
{
gchar *name;
- gint object_type;
- gint signal_type;
+ GtkType object_type;
+ guint signal_type;
};
struct _GtkSignal
{
GtkSignalInfo info;
- gint function_offset;
+ guint function_offset;
GtkSignalRunType run_type;
GtkSignalMarshaller marshaller;
GtkType return_val;
GtkType *params;
- gint nparams;
+ guint nparams;
};
struct _GtkHandler
@@ -77,21 +77,21 @@ struct _GtkHandlerInfo
GtkType *param_types;
GtkType return_val;
GtkSignalRunType run_type;
- gint nparams;
- gint signal_type;
+ guint nparams;
+ guint signal_type;
};
struct _GtkEmission
{
GtkObject *object;
- gint signal_type;
+ guint signal_type;
};
static void gtk_signal_init (void);
-static guint gtk_signal_hash (gint *key);
-static gint gtk_signal_compare (gint *a,
- gint *b);
+static guint gtk_signal_hash (guint *key);
+static gint gtk_signal_compare (guint *a,
+ guint *b);
static guint gtk_signal_info_hash (GtkSignalInfo *a);
static gint gtk_signal_info_compare (GtkSignalInfo *a,
GtkSignalInfo *b);
@@ -102,12 +102,12 @@ static void gtk_signal_handler_unref (GtkHandler *handler,
static void gtk_signal_handler_insert (GtkObject *object,
GtkHandler *handler);
static void gtk_signal_real_emit (GtkObject *object,
- gint signal_type,
+ guint signal_type,
va_list args);
static GtkHandler* gtk_signal_get_handlers (GtkObject *object,
- gint signal_type);
-static gint gtk_signal_connect_by_type (GtkObject *object,
- gint signal_type,
+ guint signal_type);
+static guint gtk_signal_connect_by_type (GtkObject *object,
+ guint signal_type,
GtkSignalFunc func,
gpointer func_data,
GtkSignalDestroy destroy_func,
@@ -118,18 +118,18 @@ static GtkEmission* gtk_emission_new (void);
static void gtk_emission_destroy (GtkEmission *emission);
static void gtk_emission_add (GList **emissions,
GtkObject *object,
- gint signal_type);
+ guint signal_type);
static void gtk_emission_remove (GList **emissions,
GtkObject *object,
- gint signal_type);
+ guint signal_type);
static gint gtk_emission_check (GList *emissions,
GtkObject *object,
- gint signal_type);
+ guint signal_type);
static gint gtk_handlers_run (GtkHandler *handlers,
GtkHandlerInfo *info,
gint after);
static void gtk_params_get (GtkArg *params,
- gint nparams,
+ guint nparams,
GtkType *param_types,
GtkType return_val,
va_list args);
@@ -154,37 +154,37 @@ static GtkSignalMarshal marshal = NULL;
static GtkSignalDestroy destroy = NULL;
-gint
+guint
gtk_signal_new (const gchar *name,
GtkSignalRunType run_type,
- gint object_type,
- gint function_offset,
+ GtkType object_type,
+ guint function_offset,
GtkSignalMarshaller marshaller,
GtkType return_val,
- gint nparams,
+ guint nparams,
...)
{
GtkType *params;
guint i;
va_list args;
- gint return_id;
-
+ guint return_id;
+
g_return_val_if_fail (nparams < 16, 0);
-
+
if (nparams > 0)
{
params = g_new (GtkType, nparams);
-
+
va_start (args, nparams);
-
+
for (i = 0; i < nparams; i++)
params[i] = va_arg (args, GtkType);
-
+
va_end (args);
}
else
params = NULL;
-
+
return_id = gtk_signal_newv (name,
run_type,
object_type,
@@ -193,39 +193,39 @@ gtk_signal_new (const gchar *name,
return_val,
nparams,
params);
-
+
g_free (params);
-
+
return return_id;
}
-gint
+guint
gtk_signal_newv (const gchar *name,
GtkSignalRunType run_type,
- gint object_type,
- gint function_offset,
+ GtkType object_type,
+ guint function_offset,
GtkSignalMarshaller marshaller,
GtkType return_val,
- gint nparams,
+ guint nparams,
GtkType *params)
{
GtkSignal *signal;
GtkSignalInfo info;
- gint *type;
+ guint *type;
guint i;
-
+
g_return_val_if_fail (name != NULL, 0);
g_return_val_if_fail (marshaller != NULL, 0);
g_return_val_if_fail (nparams < 16, 0);
if (nparams)
g_return_val_if_fail (params != NULL, 0);
-
+
if (initialize)
gtk_signal_init ();
-
+
info.name = (char*)name;
info.object_type = object_type;
-
+
type = g_hash_table_lookup (signal_info_hash_table, &info);
if (type)
{
@@ -233,7 +233,7 @@ gtk_signal_newv (const gchar *name,
name, gtk_type_name (object_type));
return 0;
}
-
+
signal = g_new (GtkSignal, 1);
signal->info.name = g_strdup (name);
signal->info.object_type = object_type;
@@ -243,35 +243,38 @@ gtk_signal_newv (const gchar *name,
signal->marshaller = marshaller;
signal->return_val = return_val;
signal->nparams = nparams;
-
+
if (nparams > 0)
{
signal->params = g_new (GtkType, nparams);
-
+
for (i = 0; i < nparams; i++)
signal->params[i] = params[i];
}
else
signal->params = NULL;
-
+
g_hash_table_insert (signal_hash_table, &signal->info.signal_type, signal);
g_hash_table_insert (signal_info_hash_table, &signal->info, &signal->info.signal_type);
-
+
return signal->info.signal_type;
}
GtkSignalQuery*
-gtk_signal_query (gint signal_num)
+gtk_signal_query (guint signal_id)
{
GtkSignalQuery *query;
GtkSignal *signal;
-
- signal = g_hash_table_lookup (signal_hash_table, &signal_num);
+
+ g_return_val_if_fail (signal_id >= 1, NULL);
+
+ signal = g_hash_table_lookup (signal_hash_table, &signal_id);
if (signal)
{
query = g_new (GtkSignalQuery, 1);
-
+
query->object_type = signal->info.object_type;
+ query->signal_id = signal_id;
query->signal_name = signal->info.name;
query->is_user_signal = signal->function_offset == 0;
query->run_type = signal->run_type;
@@ -281,66 +284,71 @@ gtk_signal_query (gint signal_num)
}
else
query = NULL;
-
+
return query;
}
-gint
+guint
gtk_signal_lookup (const gchar *name,
- gint object_type)
+ GtkType object_type)
{
GtkSignalInfo info;
- gint *type;
-
+
g_return_val_if_fail (name != NULL, 0);
-
+ g_return_val_if_fail (gtk_type_is_a (object_type, GTK_TYPE_OBJECT), 0);
+
if (initialize)
gtk_signal_init ();
-
+
info.name = (char*)name;
-
+
while (object_type)
{
+ guint *type;
+
info.object_type = object_type;
-
+
type = g_hash_table_lookup (signal_info_hash_table, &info);
if (type)
return *type;
-
+
object_type = gtk_type_parent (object_type);
}
-
+
return 0;
}
gchar*
-gtk_signal_name (gint signal_num)
+gtk_signal_name (guint signal_id)
{
GtkSignal *signal;
-
- signal = g_hash_table_lookup (signal_hash_table, &signal_num);
+
+ g_return_val_if_fail (signal_id >= 1, NULL);
+
+ signal = g_hash_table_lookup (signal_hash_table, &signal_id);
if (signal)
return signal->info.name;
-
+
return NULL;
}
void
gtk_signal_emit (GtkObject *object,
- gint signal_type,
+ guint signal_id,
...)
{
va_list args;
-
+
g_return_if_fail (object != NULL);
-
+ g_return_if_fail (signal_id >= 1);
+
if (initialize)
gtk_signal_init ();
-
- va_start (args, signal_type);
-
- gtk_signal_real_emit (object, signal_type, args);
-
+
+ va_start (args, signal_id);
+
+ gtk_signal_real_emit (object, signal_id, args);
+
va_end (args);
}
@@ -349,22 +357,23 @@ gtk_signal_emit_by_name (GtkObject *object,
const gchar *name,
...)
{
- gint type;
+ guint type;
va_list args;
-
+
g_return_if_fail (object != NULL);
-
+ g_return_if_fail (name != NULL);
+
if (initialize)
gtk_signal_init ();
-
+
type = gtk_signal_lookup (name, GTK_OBJECT_TYPE (object));
-
- if (type)
+
+ if (type >= 1)
{
va_start (args, name);
-
+
gtk_signal_real_emit (object, type, args);
-
+
va_end (args);
}
else
@@ -376,33 +385,33 @@ gtk_signal_emit_by_name (GtkObject *object,
void
gtk_signal_emit_stop (GtkObject *object,
- gint signal_type)
+ guint signal_id)
{
g_return_if_fail (object != NULL);
- g_return_if_fail (signal_type >= 1);
-
+ g_return_if_fail (signal_id >= 1);
+
if (initialize)
gtk_signal_init ();
-
- if (gtk_emission_check (current_emissions, object, signal_type))
- gtk_emission_add (&stop_emissions, object, signal_type);
+
+ if (gtk_emission_check (current_emissions, object, signal_id))
+ gtk_emission_add (&stop_emissions, object, signal_id);
else
- g_warning ("gtk_signal_emit_stop(): no current emission (%d) for object `%s'",
- signal_type, gtk_type_name (GTK_OBJECT_TYPE (object)));
+ g_warning ("gtk_signal_emit_stop(): no current emission (%u) for object `%s'",
+ signal_id, gtk_type_name (GTK_OBJECT_TYPE (object)));
}
void
gtk_signal_emit_stop_by_name (GtkObject *object,
const gchar *name)
{
- gint type;
-
+ guint type;
+
g_return_if_fail (object != NULL);
g_return_if_fail (name != NULL);
-
+
if (initialize)
gtk_signal_init ();
-
+
type = gtk_signal_lookup (name, GTK_OBJECT_TYPE (object));
if (type)
gtk_signal_emit_stop (object, type);
@@ -411,19 +420,19 @@ gtk_signal_emit_stop_by_name (GtkObject *object,
name, gtk_type_name (GTK_OBJECT_TYPE (object)));
}
-gint
+guint
gtk_signal_connect (GtkObject *object,
const gchar *name,
GtkSignalFunc func,
gpointer func_data)
{
- gint type;
-
+ guint type;
+
g_return_val_if_fail (object != NULL, 0);
-
+
if (initialize)
gtk_signal_init ();
-
+
type = gtk_signal_lookup (name, GTK_OBJECT_TYPE (object));
if (!type)
{
@@ -431,25 +440,25 @@ gtk_signal_connect (GtkObject *object,
name, gtk_type_name (GTK_OBJECT_TYPE (object)));
return 0;
}
-
+
return gtk_signal_connect_by_type (object, type,
func, func_data, NULL,
FALSE, FALSE, FALSE);
}
-gint
+guint
gtk_signal_connect_after (GtkObject *object,
const gchar *name,
GtkSignalFunc func,
gpointer func_data)
{
- gint type;
-
+ guint type;
+
g_return_val_if_fail (object != NULL, 0);
-
+
if (initialize)
gtk_signal_init ();
-
+
type = gtk_signal_lookup (name, GTK_OBJECT_TYPE (object));
if (!type)
{
@@ -457,15 +466,15 @@ gtk_signal_connect_after (GtkObject *object,
name, gtk_type_name (GTK_OBJECT_TYPE (object)));
return 0;
}
-
+
return gtk_signal_connect_by_type (object, type,
func, func_data, NULL,
FALSE, TRUE, FALSE);
}
-gint
+guint
gtk_signal_connect_full (GtkObject *object,
- gchar *name,
+ const gchar *name,
GtkSignalFunc func,
GtkCallbackMarshal marshal,
gpointer func_data,
@@ -473,13 +482,13 @@ gtk_signal_connect_full (GtkObject *object,
gint object_signal,
gint after)
{
- gint type;
-
+ guint type;
+
g_return_val_if_fail (object != NULL, 0);
-
+
if (initialize)
gtk_signal_init ();
-
+
type = gtk_signal_lookup (name, GTK_OBJECT_TYPE (object));
if (!type)
{
@@ -487,7 +496,7 @@ gtk_signal_connect_full (GtkObject *object,
name, gtk_type_name (GTK_OBJECT_TYPE (object)));
return 0;
}
-
+
if (marshal)
return gtk_signal_connect_by_type (object, type, (GtkSignalFunc) marshal,
func_data, destroy_func,
@@ -498,9 +507,9 @@ gtk_signal_connect_full (GtkObject *object,
object_signal, after, FALSE);
}
-gint
+guint
gtk_signal_connect_interp (GtkObject *object,
- gchar *name,
+ const gchar *name,
GtkCallbackMarshal func,
gpointer func_data,
GtkDestroyNotify destroy_func,
@@ -510,20 +519,20 @@ gtk_signal_connect_interp (GtkObject *object,
func_data, destroy_func, FALSE, after);
}
-gint
+guint
gtk_signal_connect_object (GtkObject *object,
const gchar *name,
GtkSignalFunc func,
GtkObject *slot_object)
{
- gint type;
-
+ guint type;
+
g_return_val_if_fail (object != NULL, 0);
/* slot_object needs to be treated as ordinary pointer */
-
+
if (initialize)
gtk_signal_init ();
-
+
type = gtk_signal_lookup (name, GTK_OBJECT_TYPE (object));
if (!type)
{
@@ -531,25 +540,25 @@ gtk_signal_connect_object (GtkObject *object,
name, gtk_type_name (GTK_OBJECT_TYPE (object)));
return 0;
}
-
+
return gtk_signal_connect_by_type (object, type,
func, slot_object, NULL,
TRUE, FALSE, FALSE);
}
-gint
+guint
gtk_signal_connect_object_after (GtkObject *object,
const gchar *name,
GtkSignalFunc func,
GtkObject *slot_object)
{
- gint type;
-
+ guint type;
+
g_return_val_if_fail (object != NULL, 0);
-
+
if (initialize)
gtk_signal_init ();
-
+
type = gtk_signal_lookup (name, GTK_OBJECT_TYPE (object));
if (!type)
{
@@ -557,7 +566,7 @@ gtk_signal_connect_object_after (GtkObject *object,
name, gtk_type_name (GTK_OBJECT_TYPE (object)));
return 0;
}
-
+
return gtk_signal_connect_by_type (object, type,
func, slot_object, NULL,
TRUE, TRUE, FALSE);
@@ -567,22 +576,22 @@ typedef struct _GtkDisconnectInfo GtkDisconnectInfo;
struct _GtkDisconnectInfo
{
GtkObject *object1;
- gint disconnect_handler1;
- gint signal_handler;
+ guint disconnect_handler1;
+ guint signal_handler;
GtkObject *object2;
- gint disconnect_handler2;
+ guint disconnect_handler2;
};
-static gint
+static guint
gtk_alive_disconnecter (GtkDisconnectInfo *info)
{
g_return_val_if_fail (info != NULL, 0);
-
+
gtk_signal_disconnect (info->object1, info->disconnect_handler1);
gtk_signal_disconnect (info->object1, info->signal_handler);
gtk_signal_disconnect (info->object2, info->disconnect_handler2);
g_free (info);
-
+
return 0;
}
@@ -594,18 +603,18 @@ gtk_signal_connect_while_alive (GtkObject *object,
GtkObject *alive_object)
{
GtkDisconnectInfo *info;
-
+
g_return_if_fail (object != NULL);
g_return_if_fail (GTK_IS_OBJECT (object));
g_return_if_fail (signal != NULL);
g_return_if_fail (func != NULL);
g_return_if_fail (alive_object != NULL);
g_return_if_fail (GTK_IS_OBJECT (alive_object));
-
+
info = g_new (GtkDisconnectInfo, 1);
info->object1 = object;
info->object2 = alive_object;
-
+
info->signal_handler = gtk_signal_connect (object, signal, func, func_data);
info->disconnect_handler1 = gtk_signal_connect_object (info->object1,
"destroy",
@@ -624,18 +633,18 @@ gtk_signal_connect_object_while_alive (GtkObject *object,
GtkObject *alive_object)
{
GtkDisconnectInfo *info;
-
+
g_return_if_fail (object != NULL);
g_return_if_fail (GTK_IS_OBJECT (object));
g_return_if_fail (signal != NULL);
g_return_if_fail (func != NULL);
g_return_if_fail (alive_object != NULL);
g_return_if_fail (GTK_IS_OBJECT (alive_object));
-
+
info = g_new (GtkDisconnectInfo, 1);
info->object1 = object;
info->object2 = alive_object;
-
+
info->signal_handler = gtk_signal_connect_object (object, signal, func, alive_object);
info->disconnect_handler1 = gtk_signal_connect_object (info->object1,
"destroy",
@@ -649,18 +658,18 @@ gtk_signal_connect_object_while_alive (GtkObject *object,
void
gtk_signal_disconnect (GtkObject *object,
- gint an_id)
+ guint handler_id)
{
GtkHandler *handler;
-
+
g_return_if_fail (object != NULL);
- g_return_if_fail (an_id > 0);
-
+ g_return_if_fail (handler_id > 0);
+
handler = gtk_object_get_data (object, handler_key);
-
+
while (handler)
{
- if (handler->id == an_id)
+ if (handler->id == handler_id)
{
handler->id = 0;
handler->blocked = TRUE;
@@ -669,8 +678,8 @@ gtk_signal_disconnect (GtkObject *object,
}
handler = handler->next;
}
-
- g_warning ("gtk_signal_disconnect(): could not find handler (%d)", an_id);
+
+ g_warning ("gtk_signal_disconnect(): could not find handler (%u)", handler_id);
}
void
@@ -679,16 +688,16 @@ gtk_signal_disconnect_by_data (GtkObject *object,
{
GtkHandler *handler;
gint found_one;
-
+
g_return_if_fail (object != NULL);
-
+
found_one = FALSE;
handler = gtk_object_get_data (object, handler_key);
-
+
while (handler)
{
GtkHandler *handler_next;
-
+
handler_next = handler->next;
if (handler->func_data == data &&
handler->id > 0)
@@ -700,34 +709,34 @@ gtk_signal_disconnect_by_data (GtkObject *object,
}
handler = handler_next;
}
-
+
if (!found_one)
g_warning ("gtk_signal_disconnect_by_data(): could not find handler containing data (0x%0lX)", (long) data);
}
void
gtk_signal_handler_block (GtkObject *object,
- gint an_id)
+ guint handler_id)
{
GtkHandler *tmp;
-
+
g_return_if_fail (object != NULL);
- g_return_if_fail (an_id > 0);
-
+ g_return_if_fail (handler_id > 0);
+
tmp = gtk_object_get_data (object, handler_key);
-
+
while (tmp)
{
- if (tmp->id == an_id)
+ if (tmp->id == handler_id)
{
tmp->blocked = TRUE;
return;
}
-
+
tmp = tmp->next;
}
-
- g_warning ("gtk_signal_handler_block(): could not find handler (%d)", an_id);
+
+ g_warning ("gtk_signal_handler_block(): could not find handler (%u)", handler_id);
}
void
@@ -736,15 +745,15 @@ gtk_signal_handler_block_by_data (GtkObject *object,
{
GtkHandler *handler;
gint found_one;
-
+
g_return_if_fail (object != NULL);
-
+
if (initialize)
gtk_signal_init ();
-
+
found_one = FALSE;
handler = gtk_object_get_data (object, handler_key);
-
+
while (handler)
{
if (handler->func_data == data &&
@@ -753,40 +762,40 @@ gtk_signal_handler_block_by_data (GtkObject *object,
found_one = TRUE;
handler->blocked = TRUE;
}
-
+
handler = handler->next;
}
-
+
if (!found_one)
g_warning ("gtk_signal_handler_block_by_data(): could not find handler containing data (0x%0lX)", (long) data);
}
void
gtk_signal_handler_unblock (GtkObject *object,
- gint an_id)
+ guint handler_id)
{
GtkHandler *handler;
-
+
g_return_if_fail (object != NULL);
- g_return_if_fail (an_id > 0);
-
+ g_return_if_fail (handler_id > 0);
+
if (initialize)
gtk_signal_init ();
-
+
handler = gtk_object_get_data (object, handler_key);
-
+
while (handler)
{
- if (handler->id == an_id)
+ if (handler->id == handler_id)
{
handler->blocked = FALSE;
return;
}
-
+
handler = handler->next;
}
-
- g_warning ("gtk_signal_handler_unblock(): could not find handler (%d)", an_id);
+
+ g_warning ("gtk_signal_handler_unblock(): could not find handler (%u)", handler_id);
}
void
@@ -795,15 +804,15 @@ gtk_signal_handler_unblock_by_data (GtkObject *object,
{
GtkHandler *handler;
gint found_one;
-
+
g_return_if_fail (object != NULL);
-
+
if (initialize)
gtk_signal_init ();
-
+
found_one = FALSE;
handler = gtk_object_get_data (object, handler_key);
-
+
while (handler)
{
if (handler->func_data == data &&
@@ -812,10 +821,10 @@ gtk_signal_handler_unblock_by_data (GtkObject *object,
found_one = TRUE;
handler->blocked = FALSE;
}
-
+
handler = handler->next;
}
-
+
if (!found_one)
g_warning ("gtk_signal_handler_unblock_by_data(): could not find handler containing data (0x%0lX)", (long) data);
}
@@ -824,12 +833,12 @@ void
gtk_signal_handlers_destroy (GtkObject *object)
{
GtkHandler *handler;
-
+
/* we make the "optimization" of destroying the first handler in the last
* place, since we don't want gtk_signal_handler_unref() to reset the objects
* handler_key data on each removal
*/
-
+
handler = gtk_object_get_data (object, handler_key);
if (handler)
{
@@ -837,7 +846,7 @@ gtk_signal_handlers_destroy (GtkObject *object)
while (handler)
{
GtkHandler *next;
-
+
next = handler->next;
gtk_signal_handler_unref (handler, object);
handler = next;
@@ -854,9 +863,9 @@ gtk_signal_default_marshaller (GtkObject *object,
GtkArg *params)
{
GtkSignalMarshaller0 rfunc;
-
+
rfunc = (GtkSignalMarshaller0) func;
-
+
(* rfunc) (object, func_data);
}
@@ -883,14 +892,14 @@ gtk_signal_init ()
}
static guint
-gtk_signal_hash (gint *key)
+gtk_signal_hash (guint *key)
{
- return (guint) *key;
+ return *key;
}
static gint
-gtk_signal_compare (gint *a,
- gint *b)
+gtk_signal_compare (guint *a,
+ guint *b)
{
return (*a == *b);
}
@@ -913,13 +922,13 @@ static GtkHandler*
gtk_signal_handler_new ()
{
GtkHandler *handler;
-
+
if (!handler_mem_chunk)
handler_mem_chunk = g_mem_chunk_new ("handler mem chunk", sizeof (GtkHandler),
1024, G_ALLOC_AND_FREE);
-
+
handler = g_chunk_new (GtkHandler, handler_mem_chunk);
-
+
handler->id = 0;
handler->ref_count = 1;
handler->signal_type = 0;
@@ -932,7 +941,7 @@ gtk_signal_handler_new ()
handler->destroy_func = NULL;
handler->prev = NULL;
handler->next = NULL;
-
+
return handler;
}
@@ -948,11 +957,11 @@ gtk_signal_handler_unref (GtkHandler *handler,
{
if (!handler->ref_count)
{
- /* FIXME: i wanna get removed some when (maybe at gtk+-1.0?) */
+ /* FIXME: i wanna get removed some when */
g_warning ("gtk_signal_handler_unref(): handler with ref_count==0!");
return;
}
-
+
handler->ref_count -= 1;
if (handler->ref_count == 0)
{
@@ -960,15 +969,15 @@ gtk_signal_handler_unref (GtkHandler *handler,
(* destroy) (handler->func_data);
else if (handler->destroy_func)
(* handler->destroy_func) (handler->func_data);
-
-
+
+
if (handler->prev)
handler->prev->next = handler->next;
else
gtk_object_set_data (object, handler_key, handler->next);
if (handler->next)
handler->next->prev = handler->prev;
-
+
g_mem_chunk_free (handler_mem_chunk, handler);
}
}
@@ -1001,7 +1010,7 @@ gtk_signal_handler_insert (GtkObject *object,
handler->next = tmp;
break;
}
-
+
if (!tmp->next)
{
tmp->next = handler;
@@ -1014,7 +1023,7 @@ gtk_signal_handler_insert (GtkObject *object,
static void
gtk_signal_real_emit (GtkObject *object,
- gint signal_type,
+ guint signal_type,
va_list args)
{
GtkSignal *signal;
@@ -1023,9 +1032,6 @@ gtk_signal_real_emit (GtkObject *object,
guchar **signal_func_offset;
GtkArg params[MAX_PARAMS];
- g_return_if_fail (object != NULL);
- g_return_if_fail (signal_type >= 1);
-
signal = g_hash_table_lookup (signal_hash_table, &signal_type);
g_return_if_fail (signal != NULL);
g_return_if_fail (gtk_type_is_a (GTK_OBJECT_TYPE (object),
@@ -1103,40 +1109,40 @@ done:
static GtkHandler*
gtk_signal_get_handlers (GtkObject *object,
- gint signal_type)
+ guint signal_type)
{
GtkHandler *handlers;
-
+
g_return_val_if_fail (object != NULL, NULL);
g_return_val_if_fail (signal_type >= 1, NULL);
-
+
handlers = gtk_object_get_data (object, handler_key);
-
+
while (handlers)
{
if (handlers->signal_type == signal_type)
return handlers;
handlers = handlers->next;
}
-
+
return NULL;
}
guint
gtk_signal_handler_pending (GtkObject *object,
- gint signal_type,
+ guint signal_id,
gboolean may_be_blocked)
{
GtkHandler *handlers;
guint handler_id;
g_return_val_if_fail (object != NULL, 0);
- g_return_val_if_fail (signal_type >= 1, 0);
+ g_return_val_if_fail (signal_id >= 1, 0);
- handlers = gtk_signal_get_handlers (object, signal_type);
+ handlers = gtk_signal_get_handlers (object, signal_id);
handler_id = 0;
- while (handlers && handlers->signal_type == signal_type)
+ while (handlers && handlers->signal_type == signal_id)
{
if (handlers->id > 0 &&
(may_be_blocked ||
@@ -1152,9 +1158,9 @@ gtk_signal_handler_pending (GtkObject *object,
return handler_id;
}
-static gint
+static guint
gtk_signal_connect_by_type (GtkObject *object,
- gint signal_type,
+ guint signal_type,
GtkSignalFunc func,
gpointer func_data,
GtkSignalDestroy destroy_func,
@@ -1165,10 +1171,10 @@ gtk_signal_connect_by_type (GtkObject *object,
GtkObjectClass *class;
GtkHandler *handler;
gint found_it;
-
+
g_return_val_if_fail (object != NULL, 0);
g_return_val_if_fail (object->klass != NULL, 0);
-
+
/* Search through the signals for this object and make
* sure the one we are adding is valid. We need to perform
* the lookup on the objects parents as well. If it isn't
@@ -1180,7 +1186,7 @@ gtk_signal_connect_by_type (GtkObject *object,
{
GtkType parent;
gint *object_signals;
- gint nsignals;
+ guint nsignals;
guint i;
object_signals = class->signals;
@@ -1202,12 +1208,12 @@ gtk_signal_connect_by_type (GtkObject *object,
if (!found_it)
{
- g_warning ("gtk_signal_connect_by_type(): could not find signal type (%d) in signal list of `%s'",
+ g_warning ("gtk_signal_connect_by_type(): could not find signal id (%u) in the `%s' class ancestry",
signal_type,
gtk_type_name (class->type));
return 0;
}
-
+
handler = gtk_signal_handler_new ();
handler->id = next_handler_id++;
handler->signal_type = signal_type;
@@ -1217,7 +1223,7 @@ gtk_signal_connect_by_type (GtkObject *object,
handler->destroy_func = destroy_func;
handler->after = after != FALSE;
handler->no_marshal = no_marshal;
-
+
gtk_signal_handler_insert (object, handler);
return handler->id;
}
@@ -1226,16 +1232,16 @@ static GtkEmission*
gtk_emission_new ()
{
GtkEmission *emission;
-
+
if (!emission_mem_chunk)
emission_mem_chunk = g_mem_chunk_new ("emission mem chunk", sizeof (GtkEmission),
1024, G_ALLOC_AND_FREE);
-
+
emission = g_chunk_new (GtkEmission, emission_mem_chunk);
-
+
emission->object = NULL;
emission->signal_type = 0;
-
+
return emission;
}
@@ -1248,36 +1254,35 @@ gtk_emission_destroy (GtkEmission *emission)
static void
gtk_emission_add (GList **emissions,
GtkObject *object,
- gint signal_type)
+ guint signal_type)
{
GtkEmission *emission;
-
+
g_return_if_fail (emissions != NULL);
g_return_if_fail (object != NULL);
-
+
emission = gtk_emission_new ();
emission->object = object;
emission->signal_type = signal_type;
-
+
*emissions = g_list_prepend (*emissions, emission);
}
static void
gtk_emission_remove (GList **emissions,
GtkObject *object,
- gint signal_type)
+ guint signal_type)
{
GtkEmission *emission;
GList *tmp;
-
+
g_return_if_fail (emissions != NULL);
- g_return_if_fail (object != NULL);
-
+
tmp = *emissions;
while (tmp)
{
emission = tmp->data;
-
+
if ((emission->object == object) &&
(emission->signal_type == signal_type))
{
@@ -1286,7 +1291,7 @@ gtk_emission_remove (GList **emissions,
g_list_free (tmp);
break;
}
-
+
tmp = tmp->next;
}
}
@@ -1294,19 +1299,17 @@ gtk_emission_remove (GList **emissions,
static gint
gtk_emission_check (GList *emissions,
GtkObject *object,
- gint signal_type)
+ guint signal_type)
{
GtkEmission *emission;
GList *tmp;
-
- g_return_val_if_fail (object != NULL, FALSE);
-
+
tmp = emissions;
while (tmp)
{
emission = tmp->data;
tmp = tmp->next;
-
+
if ((emission->object == object) &&
(emission->signal_type == signal_type))
return TRUE;
@@ -1319,17 +1322,11 @@ gtk_handlers_run (GtkHandler *handlers,
GtkHandlerInfo *info,
gint after)
{
- while (handlers)
+ while (handlers && handlers->signal_type == info->signal_type)
{
GtkHandler *handlers_next;
-
- gtk_signal_handler_ref (handlers);
- if (handlers->signal_type != info->signal_type)
- {
- gtk_signal_handler_unref (handlers, info->object);
- return 0;
- }
+ gtk_signal_handler_ref (handlers);
if (!handlers->blocked && (handlers->after == after))
{
@@ -1392,18 +1389,18 @@ gtk_handlers_run (GtkHandler *handlers,
static void
gtk_params_get (GtkArg *params,
- gint nparams,
+ guint nparams,
GtkType *param_types,
GtkType return_val,
va_list args)
{
- int i;
-
+ gint i;
+
for (i = 0; i < nparams; i++)
{
params[i].type = param_types[i];
params[i].name = NULL;
-
+
switch (GTK_FUNDAMENTAL_TYPE (param_types[i]))
{
case GTK_TYPE_INVALID:
@@ -1470,25 +1467,27 @@ gtk_params_get (GtkArg *params,
GTK_VALUE_C_CALLBACK(params[i]).func_data = va_arg (args, gpointer);
break;
case GTK_TYPE_ARGS:
- GTK_VALUE_ARGS(params[i]).n_args = va_arg (args, int);
+ GTK_VALUE_ARGS(params[i]).n_args = va_arg (args, gint);
GTK_VALUE_ARGS(params[i]).args = va_arg (args, GtkArg*);
break;
case GTK_TYPE_OBJECT:
GTK_VALUE_OBJECT(params[i]) = va_arg (args, GtkObject*);
- g_assert (GTK_VALUE_OBJECT(params[i]) == NULL ||
- GTK_CHECK_TYPE (GTK_VALUE_OBJECT(params[i]),
- params[i].type));
+ if (GTK_VALUE_OBJECT(params[i]) != NULL &&
+ !GTK_CHECK_TYPE (GTK_VALUE_OBJECT(params[i]), params[i].type))
+ g_warning ("signal arg `%s' is not of type `%s'",
+ gtk_type_name (GTK_OBJECT_TYPE (GTK_VALUE_OBJECT(params[i]))),
+ gtk_type_name (params[i].type));
break;
default:
- g_error ("unsupported type %s in signal arg",
+ g_error ("unsupported type `%s' in signal arg",
gtk_type_name (params[i].type));
break;
}
}
-
+
params[i].type = return_val;
params[i].name = NULL;
-
+
switch (GTK_FUNDAMENTAL_TYPE (return_val))
{
case GTK_TYPE_INVALID:
@@ -1543,7 +1542,7 @@ gtk_params_get (GtkArg *params,
case GTK_TYPE_C_CALLBACK:
case GTK_TYPE_ARGS:
default:
- g_error ("unsupported type %s in signal return",
+ g_error ("unsupported type `%s' in signal return",
gtk_type_name (return_val));
break;
}