⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gtkobject.c

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 C
📖 第 1 页 / 共 2 页
字号:
{  GtkObject *object;  GtkArg *max_args;    g_return_val_if_fail (GTK_FUNDAMENTAL_TYPE (object_type) == GTK_TYPE_OBJECT, NULL);  if (n_args)    g_return_val_if_fail (args != NULL, NULL);    object = gtk_type_new (object_type);    for (max_args = args + n_args; args < max_args; args++)    gtk_object_arg_set (object, args, NULL);    if (!GTK_OBJECT_CONSTRUCTED (object))    gtk_object_default_construct (object);  return object;}voidgtk_object_setv (GtkObject *object,		 guint      n_args,		 GtkArg    *args){  GtkArg *max_args;    g_return_if_fail (object != NULL);  g_return_if_fail (GTK_IS_OBJECT (object));  if (n_args)    g_return_if_fail (args != NULL);  for (max_args = args + n_args; args < max_args; args++)    gtk_object_arg_set (object, args, NULL);}voidgtk_object_getv (GtkObject           *object,		 guint		      n_args,		 GtkArg              *args){  GtkArg *max_args;    g_return_if_fail (object != NULL);  g_return_if_fail (GTK_IS_OBJECT (object));  if (n_args)    g_return_if_fail (args != NULL);    for (max_args = args + n_args; args < max_args; args++)    gtk_object_arg_get (object, args, NULL);}voidgtk_object_get (GtkObject   *object,		const gchar *first_arg_name,		...){  va_list var_args;  gchar *name;    g_return_if_fail (GTK_IS_OBJECT (object));    va_start (var_args, first_arg_name);  name = (gchar*) first_arg_name;  while (name)    {      gpointer value_pointer = va_arg (var_args, gpointer);      if (value_pointer)	{	  GtkArgInfo *info;	  gchar *error;	  GtkArg arg;	  	  error = gtk_arg_get_info (GTK_OBJECT_TYPE (object),				    object_arg_info_ht,				    name,				    &info);	  if (error)	    {	      g_warning ("gtk_object_get(): %s", error);	      g_free (error);	      return;	    }	  	  arg.name = name;	  gtk_object_arg_get (object, &arg, info);	  gtk_arg_to_valueloc (&arg, value_pointer);	}      name = va_arg (var_args, gchar*);    }}voidgtk_object_set (GtkObject *object,		const gchar    *first_arg_name,		...){  va_list var_args;  GSList *arg_list = NULL;  GSList *info_list = NULL;  gchar *error;    g_return_if_fail (object != NULL);  g_return_if_fail (GTK_IS_OBJECT (object));    va_start (var_args, first_arg_name);  error = gtk_object_args_collect (GTK_OBJECT_TYPE (object),				   &arg_list,				   &info_list,				   first_arg_name,				   var_args);  va_end (var_args);    if (error)    {      g_warning ("gtk_object_set(): %s", error);      g_free (error);    }  else    {      GSList *slist_arg;      GSList *slist_info;            slist_arg = arg_list;      slist_info = info_list;      while (slist_arg)	{	  gtk_object_arg_set (object, slist_arg->data, slist_info->data);	  slist_arg = slist_arg->next;	  slist_info = slist_info->next;	}      gtk_args_collect_cleanup (arg_list, info_list);    }}voidgtk_object_arg_set (GtkObject  *object,		    GtkArg     *arg,		    GtkArgInfo *info){  GtkObjectClass *oclass;  g_return_if_fail (object != NULL);  g_return_if_fail (GTK_IS_OBJECT (object));  g_return_if_fail (arg != NULL);  if (!info)    {      gchar *error;      error = gtk_arg_get_info (GTK_OBJECT_TYPE (object),				object_arg_info_ht,				arg->name,				&info);      if (error)	{	  g_warning ("gtk_object_arg_set(): %s", error);	  g_free (error);	  return;	}    }  if (info->arg_flags & GTK_ARG_CONSTRUCT_ONLY &&      GTK_OBJECT_CONSTRUCTED (object))    {      g_warning ("gtk_object_arg_set(): cannot set argument \"%s\" for constructed object",		 info->full_name);      return;    }  if (!(info->arg_flags & GTK_ARG_WRITABLE))    {      g_warning ("gtk_object_arg_set(): argument \"%s\" is not writable",		 info->full_name);      return;    }  if (info->type != arg->type)    {      g_warning ("gtk_object_arg_set(): argument \"%s\" has invalid type `%s'",		 info->full_name,		 gtk_type_name (arg->type));      return;    }    oclass = gtk_type_class (info->class_type);  g_assert (oclass->set_arg != NULL);  oclass->set_arg (object, arg, info->arg_id);  if (!GTK_OBJECT_CONSTRUCTED (object) &&      (info->arg_flags & GTK_ARG_CONSTRUCT_ONLY ||       info->arg_flags & GTK_ARG_CONSTRUCT))    {      GSList *slist;      slist = gtk_object_get_data_by_id (object, quark_carg_history);      gtk_object_set_data_by_id (object,				 quark_carg_history,				 g_slist_prepend (slist, info));    }}voidgtk_object_arg_get (GtkObject  *object,		    GtkArg     *arg,		    GtkArgInfo *info){  GtkObjectClass *oclass;    g_return_if_fail (object != NULL);  g_return_if_fail (GTK_IS_OBJECT (object));  g_return_if_fail (arg != NULL);  if (!info)    {      gchar *error;      error = gtk_arg_get_info (GTK_OBJECT_TYPE (object),				object_arg_info_ht,				arg->name,				&info);      if (error)	{	  g_warning ("gtk_object_arg_get(): %s", error);	  g_free (error);	  arg->type = GTK_TYPE_INVALID;	  return;	}    }    if (! (info->arg_flags & GTK_ARG_READABLE))    {      g_warning ("gtk_object_arg_get(): argument \"%s\" is not readable",		 info->full_name);      arg->type = GTK_TYPE_INVALID;      return;    }    oclass = gtk_type_class (info->class_type);  g_assert (oclass->get_arg != NULL);  arg->type = info->type;  oclass->get_arg (object, arg, info->arg_id);}voidgtk_object_default_construct (GtkObject *object){  GSList *slist;  g_return_if_fail (object != NULL);  g_return_if_fail (GTK_IS_OBJECT (object));  if (!GTK_OBJECT_CONSTRUCTED (object))    {      for (slist = object->klass->construct_args;	   slist && !GTK_OBJECT_CONSTRUCTED (object);	   slist = slist->next)	{	  GSList *history;	  GtkArgInfo *info;	  	  info = slist->data;	  history = gtk_object_get_data_by_id (object, quark_carg_history);	  if (!g_slist_find (history, info))	    {	      GtkArg arg;	      	      /* default application */	      arg.type = info->type;	      arg.name = info->name;	      switch (gtk_type_get_varargs_type (arg.type))		{		case GTK_TYPE_FLOAT:		  GTK_VALUE_FLOAT (arg) = 0.0;		  break;		case GTK_TYPE_DOUBLE:		  GTK_VALUE_DOUBLE (arg) = 0.0;		  break;		case GTK_TYPE_BOXED:		case GTK_TYPE_STRING:		case GTK_TYPE_POINTER:		case GTK_TYPE_OBJECT:		  GTK_VALUE_POINTER (arg) = NULL;		  break;		default:		  memset (&arg.d, 0, sizeof (arg.d));		  break;		}	      gtk_object_arg_set (object, &arg, info);	    }	}      if (!GTK_OBJECT_CONSTRUCTED (object))	gtk_object_constructed (object);    }}voidgtk_object_constructed (GtkObject *object){  g_return_if_fail (object != NULL);  g_return_if_fail (GTK_IS_OBJECT (object));  g_return_if_fail (GTK_OBJECT_CONSTRUCTED (object) == FALSE);    g_slist_free (gtk_object_get_data_by_id (object, quark_carg_history));  gtk_object_set_data_by_id (object, quark_carg_history, NULL);  GTK_OBJECT_FLAGS (object) |= GTK_CONSTRUCTED;}voidgtk_object_add_arg_type (const char *arg_name,			 GtkType     arg_type,			 guint	     arg_flags,			 guint	     arg_id){  GtkArgInfo *info;  g_return_if_fail (arg_name != NULL);  g_return_if_fail (arg_type > GTK_TYPE_NONE);  g_return_if_fail (arg_id > 0);  g_return_if_fail ((arg_flags & GTK_ARG_CHILD_ARG) == 0);  if (arg_flags & GTK_ARG_CONSTRUCT)    g_return_if_fail ((arg_flags & GTK_ARG_READWRITE) == GTK_ARG_READWRITE);  else    g_return_if_fail ((arg_flags & GTK_ARG_READWRITE) != 0);  if (arg_flags & GTK_ARG_CONSTRUCT_ONLY)    g_return_if_fail ((arg_flags & GTK_ARG_WRITABLE) == GTK_ARG_WRITABLE);      if (!object_arg_info_ht)    object_arg_info_ht = g_hash_table_new (gtk_arg_info_hash,					   gtk_arg_info_equal);  info = gtk_arg_type_new_static (GTK_TYPE_OBJECT,				  arg_name,				  GTK_STRUCT_OFFSET (GtkObjectClass, n_args),				  object_arg_info_ht,				  arg_type,				  arg_flags,				  arg_id);  if (info &&      (info->arg_flags & GTK_ARG_CONSTRUCT ||       info->arg_flags & GTK_ARG_CONSTRUCT_ONLY))    {      GtkObjectClass *class;      class = gtk_type_class (info->class_type);      if (info->arg_flags & GTK_ARG_CONSTRUCT_ONLY)	class->construct_args = g_slist_prepend (class->construct_args, info);      else	class->construct_args = g_slist_append (class->construct_args, info);    }}gchar*gtk_object_args_collect (GtkType      object_type,			 GSList      **arg_list_p,			 GSList      **info_list_p,			 const gchar  *first_arg_name,			 va_list       var_args){  return gtk_args_collect (object_type,			   object_arg_info_ht,			   arg_list_p,			   info_list_p,			   first_arg_name,			   var_args);}gchar*gtk_object_arg_get_info (GtkType      object_type,			 const gchar *arg_name,			 GtkArgInfo **info_p){  return gtk_arg_get_info (object_type,			   object_arg_info_ht,			   arg_name,			   info_p);}GtkArg*gtk_object_query_args (GtkType        class_type,		       guint32      **arg_flags,		       guint         *n_args){  g_return_val_if_fail (n_args != NULL, NULL);  *n_args = 0;  g_return_val_if_fail (GTK_FUNDAMENTAL_TYPE (class_type) == GTK_TYPE_OBJECT, NULL);  return gtk_args_query (class_type, object_arg_info_ht, arg_flags, n_args);}/***************************************** * GtkObject object_data mechanism * *****************************************/voidgtk_object_set_data_by_id (GtkObject        *object,			   GQuark	     data_id,			   gpointer          data){  g_return_if_fail (object != NULL);  g_return_if_fail (GTK_IS_OBJECT (object));    g_datalist_id_set_data (&object->object_data, data_id, data);}voidgtk_object_set_data (GtkObject        *object,		     const gchar      *key,		     gpointer          data){  g_return_if_fail (object != NULL);  g_return_if_fail (GTK_IS_OBJECT (object));  g_return_if_fail (key != NULL);    g_datalist_set_data (&object->object_data, key, data);}voidgtk_object_set_data_by_id_full (GtkObject        *object,				GQuark		  data_id,				gpointer          data,				GtkDestroyNotify  destroy){  g_return_if_fail (object != NULL);  g_return_if_fail (GTK_IS_OBJECT (object));  g_datalist_id_set_data_full (&object->object_data, data_id, data, destroy);}voidgtk_object_set_data_full (GtkObject        *object,			  const gchar      *key,			  gpointer          data,			  GtkDestroyNotify  destroy){  g_return_if_fail (object != NULL);  g_return_if_fail (GTK_IS_OBJECT (object));  g_return_if_fail (key != NULL);  g_datalist_set_data_full (&object->object_data, key, data, destroy);}gpointergtk_object_get_data_by_id (GtkObject   *object,			   GQuark       data_id){  g_return_val_if_fail (object != NULL, NULL);  g_return_val_if_fail (GTK_IS_OBJECT (object), NULL);  return g_datalist_id_get_data (&object->object_data, data_id);}gpointergtk_object_get_data (GtkObject   *object,		     const gchar *key){  g_return_val_if_fail (object != NULL, NULL);  g_return_val_if_fail (GTK_IS_OBJECT (object), NULL);  g_return_val_if_fail (key != NULL, NULL);  return g_datalist_get_data (&object->object_data, key);}voidgtk_object_remove_data_by_id (GtkObject   *object,			      GQuark       data_id){  g_return_if_fail (object != NULL);  g_return_if_fail (GTK_IS_OBJECT (object));  g_datalist_id_remove_data (&object->object_data, data_id);}voidgtk_object_remove_data (GtkObject   *object,			const gchar *key){  g_return_if_fail (object != NULL);  g_return_if_fail (GTK_IS_OBJECT (object));  g_return_if_fail (key != NULL);  g_datalist_remove_data (&object->object_data, key);}voidgtk_object_remove_no_notify_by_id (GtkObject      *object,				   GQuark          key_id){  g_return_if_fail (object != NULL);  g_return_if_fail (GTK_IS_OBJECT (object));  g_datalist_id_remove_no_notify (&object->object_data, key_id);}voidgtk_object_remove_no_notify (GtkObject       *object,			     const gchar     *key){  g_return_if_fail (object != NULL);  g_return_if_fail (GTK_IS_OBJECT (object));  g_return_if_fail (key != NULL);  g_datalist_remove_no_notify (&object->object_data, key);}voidgtk_object_set_user_data (GtkObject *object,			  gpointer   data){  g_return_if_fail (object != NULL);  g_return_if_fail (GTK_IS_OBJECT (object));  if (!quark_user_data)    quark_user_data = g_quark_from_static_string ("user_data");  g_datalist_id_set_data (&object->object_data, quark_user_data, data);}gpointergtk_object_get_user_data (GtkObject *object){  g_return_val_if_fail (object != NULL, NULL);  g_return_val_if_fail (GTK_IS_OBJECT (object), NULL);  return g_datalist_id_get_data (&object->object_data, quark_user_data);}/******************************************* * GtkObject referencing and unreferencing * *******************************************/#undef	gtk_object_ref#undef	gtk_object_unrefvoidgtk_object_ref (GtkObject *object){  g_return_if_fail (object != NULL);  g_return_if_fail (GTK_IS_OBJECT (object));  g_return_if_fail (object->ref_count > 0);  object->ref_count += 1;}voidgtk_object_unref (GtkObject *object){  g_return_if_fail (object != NULL);  g_return_if_fail (GTK_IS_OBJECT (object));  g_return_if_fail (object->ref_count > 0);    if (object->ref_count == 1)    {      gtk_object_destroy (object);        g_return_if_fail (object->ref_count > 0);    }  object->ref_count -= 1;  if (object->ref_count == 0)    {#ifdef G_ENABLE_DEBUG      if (gtk_debug_flags & GTK_DEBUG_OBJECTS)	{	  g_assert (g_hash_table_lookup (living_objs_ht, object) == object);	  g_hash_table_remove (living_objs_ht, object);	  obj_count--;	}#endif /* G_ENABLE_DEBUG */            object->klass->finalize (object);    }}static GtkObject *gtk_trace_object = NULL;voidgtk_trace_referencing (GtkObject   *object,		       const gchar *func,		       guint	   dummy,		       guint	   line,		       gboolean	   do_ref){  if (gtk_debug_flags & GTK_DEBUG_OBJECTS)    {      gboolean exists = TRUE;      g_return_if_fail (object != NULL);      g_return_if_fail (GTK_IS_OBJECT (object));#ifdef	G_ENABLE_DEBUG      exists = g_hash_table_lookup (living_objs_ht, object) != NULL;#endif	/* G_ENABLE_DEBUG */            if (exists &&	  (object == gtk_trace_object ||	   gtk_trace_object == (void*)42))	fprintf (stdout, "trace: object_%s: (%s:%p)->ref_count=%d %s (%s:%d)\n",		 do_ref ? "ref" : "unref",		 gtk_type_name (GTK_OBJECT_TYPE (object)),		 object,		 object->ref_count,		 do_ref ? "+ 1" : "- 1",		 func,		 line);      else if (!exists)	fprintf (stdout, "trace: object_%s(%p): no such object! (%s:%d)\n",		 do_ref ? "ref" : "unref",		 object,		 func,		 line);    }    if (do_ref)    gtk_object_ref (object);  else    gtk_object_unref (object);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -