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

📄 gtkwidget.c

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 C
📖 第 1 页 / 共 5 页
字号:
      break;    case ARG_COMPOSITE_CHILD:      GTK_VALUE_BOOL (*arg) = (GTK_WIDGET_COMPOSITE_CHILD (widget) != FALSE);      break;    case ARG_STYLE:      GTK_VALUE_BOXED (*arg) = (gpointer) gtk_widget_get_style (widget);      break;    case ARG_EVENTS:      eventp = gtk_object_get_data_by_id (GTK_OBJECT (widget), event_key_id);      if (!eventp)	GTK_VALUE_FLAGS (*arg) = 0;      else	GTK_VALUE_FLAGS (*arg) = *eventp;      break;    case ARG_EXTENSION_EVENTS:      modep = gtk_object_get_data_by_id (GTK_OBJECT (widget), extension_event_key_id);      if (!modep)	GTK_VALUE_FLAGS (*arg) = 0;      else	GTK_VALUE_FLAGS (*arg) = *modep;      break;    default:      arg->type = GTK_TYPE_INVALID;      break;    }}/***************************************** * gtk_widget_init: * *   arguments: * *   results: *****************************************/static voidgtk_widget_init (GtkWidget *widget){  GdkColormap *colormap;  GdkVisual *visual;    GTK_PRIVATE_FLAGS (widget) = 0;  widget->state = GTK_STATE_NORMAL;  widget->saved_state = GTK_STATE_NORMAL;  widget->name = NULL;  widget->requisition.width = 0;  widget->requisition.height = 0;  widget->allocation.x = -1;  widget->allocation.y = -1;  widget->allocation.width = 1;  widget->allocation.height = 1;  widget->window = NULL;  widget->parent = NULL;  GTK_WIDGET_SET_FLAGS (widget,			GTK_SENSITIVE |			GTK_PARENT_SENSITIVE |			(composite_child_stack ? GTK_COMPOSITE_CHILD : 0));  widget->style = gtk_widget_peek_style ();  gtk_style_ref (widget->style);    colormap = gtk_widget_peek_colormap ();  visual = gtk_widget_peek_visual ();    if (colormap != gtk_widget_get_default_colormap ())    gtk_widget_set_colormap (widget, colormap);  if (visual != gtk_widget_get_default_visual ())    gtk_widget_set_visual (widget, visual);}/***************************************** * gtk_widget_new: * *   arguments: * *   results: *****************************************/GtkWidget*gtk_widget_new (GtkType      widget_type,		const gchar *first_arg_name,		...){  GtkObject *object;  va_list var_args;  GSList *arg_list = NULL;  GSList *info_list = NULL;  gchar *error;    g_return_val_if_fail (gtk_type_is_a (widget_type, GTK_TYPE_WIDGET), NULL);    object = gtk_type_new (widget_type);    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_widget_new(): %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);    }    if (!GTK_OBJECT_CONSTRUCTED (object))    gtk_object_default_construct (object);  return GTK_WIDGET (object);}/***************************************** * gtk_widget_newv: * *   arguments: * *   results: *****************************************/GtkWidget*gtk_widget_newv (GtkType type,		 guint	 nargs,		 GtkArg *args){  g_return_val_if_fail (gtk_type_is_a (type, GTK_TYPE_WIDGET), NULL);    return GTK_WIDGET (gtk_object_newv (type, nargs, args));}/***************************************** * gtk_widget_get: * *   arguments: * *   results: *****************************************/voidgtk_widget_get (GtkWidget	*widget,		GtkArg		*arg){  g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_WIDGET (widget));  g_return_if_fail (arg != NULL);    gtk_object_getv (GTK_OBJECT (widget), 1, arg);}/***************************************** * gtk_widget_getv: * *   arguments: * *   results: *****************************************/voidgtk_widget_getv (GtkWidget	*widget,		 guint           nargs,		 GtkArg         *args){  g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_WIDGET (widget));  gtk_object_getv (GTK_OBJECT (widget), nargs, args);}/***************************************** * gtk_widget_set: * *   arguments: * *   results: *****************************************/voidgtk_widget_set (GtkWidget   *widget,		const gchar *first_arg_name,		...){  GtkObject *object;  va_list var_args;  GSList *arg_list = NULL;  GSList *info_list = NULL;  gchar *error;  g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_WIDGET (widget));  object = GTK_OBJECT (widget);  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_widget_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);    }}/***************************************** * gtk_widget_setv: * *   arguments: * *   results: *****************************************/voidgtk_widget_setv (GtkWidget *widget,		 guint	    nargs,		 GtkArg	   *args){  g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_WIDGET (widget));  gtk_object_setv (GTK_OBJECT (widget), nargs, args);}static inline void	   gtk_widget_queue_clear_child (GtkWidget *widget){  GtkWidget *parent;  /* We check for GTK_WIDGET_IS_OFFSCREEN (widget),    * and queue_clear_area(parent...) will check the rest of   * way up the tree with gtk_widget_is_offscreen (parent)   */  parent = widget->parent;  if (parent && GTK_WIDGET_DRAWABLE (parent) &&      !GTK_WIDGET_IS_OFFSCREEN (widget))    gtk_widget_queue_clear_area (parent,				 widget->allocation.x,				 widget->allocation.y,				 widget->allocation.width,				 widget->allocation.height);}voidgtk_widget_unparent (GtkWidget *widget){  GtkWidget *toplevel;  GtkWidget *old_parent;    g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_WIDGET (widget));  if (widget->parent == NULL)    return;    /* keep this function in sync with gtk_menu_detach()   */  /* unset focused and default children properly, this code   * should eventually move into some gtk_window_unparent_branch() or   * similar function.   */    toplevel = gtk_widget_get_toplevel (widget);  if (GTK_CONTAINER (widget->parent)->focus_child == widget)    {      gtk_container_set_focus_child (GTK_CONTAINER (widget->parent), NULL);      if (GTK_IS_WINDOW (toplevel))	{	  GtkWidget *child;      	  child = GTK_WINDOW (toplevel)->focus_widget;	  	  while (child && child != widget)	    child = child->parent;	  	  if (child == widget)	    gtk_window_set_focus (GTK_WINDOW (toplevel), NULL);	}    }  if (GTK_IS_WINDOW (toplevel))    {      GtkWidget *child;            child = GTK_WINDOW (toplevel)->default_widget;            while (child && child != widget)	child = child->parent;            if (child == widget)	gtk_window_set_default (GTK_WINDOW (toplevel), NULL);    }  if (GTK_WIDGET_REDRAW_PENDING (widget))    gtk_widget_redraw_queue_remove (widget);  if (GTK_IS_RESIZE_CONTAINER (widget))    gtk_container_clear_resize_widgets (GTK_CONTAINER (widget));    /* Remove the widget and all its children from any ->resize_widgets list   * of all the parents in our branch. This code should move into gtkcontainer.c   * somwhen, since we mess around with ->resize_widgets, which is   * actually not of our business.   *   * Two ways to make this prettier:   *   Write a g_slist_conditional_remove (GSList, gboolean (*)(gpointer))   *   Change resize_widgets to a GList   */  toplevel = widget->parent;  while (toplevel)    {      GSList *slist;      GSList *prev;      if (!GTK_CONTAINER (toplevel)->resize_widgets)	{	  toplevel = toplevel->parent;	  continue;	}      prev = NULL;      slist = GTK_CONTAINER (toplevel)->resize_widgets;      while (slist)	{	  GtkWidget *child;	  GtkWidget *parent;	  GSList *last;	  last = slist;	  slist = last->next;	  child = last->data;	  	  parent = child;	  while (parent && (parent != widget))	    parent = parent->parent;	  	  if (parent == widget)	    {	      GTK_PRIVATE_UNSET_FLAG (child, GTK_RESIZE_NEEDED);	      	      if (prev)		prev->next = slist;	      else		GTK_CONTAINER (toplevel)->resize_widgets = slist;	      	      g_slist_free_1 (last);	    }	  else	    prev = last;	}      toplevel = toplevel->parent;    }  gtk_widget_queue_clear_child (widget);  /* Reset the width and height here, to force reallocation if we   * get added back to a new parent. This won't work if our new   * allocation is smaller than 1x1 and we actually want a size of 1x1...   * (would 0x0 be OK here?)   */  widget->allocation.width = 1;  widget->allocation.height = 1;    if (GTK_WIDGET_REALIZED (widget) && !GTK_WIDGET_IN_REPARENT (widget))    gtk_widget_unrealize (widget);  old_parent = widget->parent;  widget->parent = NULL;  gtk_widget_set_parent_window (widget, NULL);  gtk_signal_emit (GTK_OBJECT (widget), widget_signals[PARENT_SET], old_parent);    gtk_widget_unref (widget);}/***************************************** * gtk_widget_destroy: * *   arguments: * *   results: *****************************************/voidgtk_widget_destroy (GtkWidget *widget){  g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_WIDGET (widget));  g_return_if_fail (GTK_OBJECT_CONSTRUCTED (widget));  gtk_object_destroy ((GtkObject*) widget);}/***************************************** * gtk_widget_destroyed: *   Utility function: sets widget_pointer  *   to NULL when widget is destroyed. * *   arguments: * *   results: *****************************************/voidgtk_widget_destroyed (GtkWidget      *widget,		      GtkWidget      **widget_pointer){  /* Don't make any assumptions about the   *  value of widget!   *  Even check widget_pointer.   */  if (widget_pointer)    *widget_pointer = NULL;}/***************************************** * gtk_widget_show: * *   arguments: * *   results: *****************************************/voidgtk_widget_show (GtkWidget *widget){  g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_WIDGET (widget));    if (!GTK_WIDGET_VISIBLE (widget))    {      if (!GTK_WIDGET_TOPLEVEL (widget))	gtk_widget_queue_resize (widget);      gtk_signal_emit (GTK_OBJECT (widget), widget_signals[SHOW]);    }}static voidgtk_widget_real_show (GtkWidget *widget){  g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_WIDGET (widget));    if (!GTK_WIDGET_VISIBLE (widget))    {      GTK_WIDGET_SET_FLAGS (widget, GTK_VISIBLE);

⌨️ 快捷键说明

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