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

📄 gtkwindow.c

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 C
📖 第 1 页 / 共 4 页
字号:
gintgtk_window_activate_default (GtkWindow      *window){  g_return_val_if_fail (window != NULL, FALSE);  g_return_val_if_fail (GTK_IS_WINDOW (window), FALSE);  if (window->default_widget)    {      gtk_widget_activate (window->default_widget);      return TRUE;    }  return FALSE;}voidgtk_window_set_modal (GtkWindow *window,		      gboolean   modal){  g_return_if_fail (window != NULL);  g_return_if_fail (GTK_IS_WINDOW (window));  window->modal = modal != FALSE;  /* adjust desired modality state */  if (GTK_WIDGET_VISIBLE (window) && window->modal)    gtk_grab_add (GTK_WIDGET (window));  else    gtk_grab_remove (GTK_WIDGET (window));}voidgtk_window_add_embedded_xid (GtkWindow *window, guint xid){  GList *embedded_windows;  g_return_if_fail (window != NULL);  g_return_if_fail (GTK_IS_WINDOW (window));  embedded_windows = gtk_object_get_data (GTK_OBJECT (window), "gtk-embedded");  if (embedded_windows)    gtk_object_remove_no_notify_by_id (GTK_OBJECT (window), 				       g_quark_from_static_string ("gtk-embedded"));  embedded_windows = g_list_prepend (embedded_windows,				     GUINT_TO_POINTER (xid));  gtk_object_set_data_full (GTK_OBJECT (window), "gtk-embedded", 			    embedded_windows,			    embedded_windows ?			      (GtkDestroyNotify) g_list_free : NULL);}voidgtk_window_remove_embedded_xid (GtkWindow *window, guint xid){  GList *embedded_windows;  GList *node;  g_return_if_fail (window != NULL);  g_return_if_fail (GTK_IS_WINDOW (window));    embedded_windows = gtk_object_get_data (GTK_OBJECT (window), "gtk-embedded");  if (embedded_windows)    gtk_object_remove_no_notify_by_id (GTK_OBJECT (window), 				       g_quark_from_static_string ("gtk-embedded"));  node = g_list_find (embedded_windows, GUINT_TO_POINTER (xid));  if (node)    {      embedded_windows = g_list_remove_link (embedded_windows, node);      g_list_free_1 (node);    }    gtk_object_set_data_full (GTK_OBJECT (window), 			    "gtk-embedded", embedded_windows,			    embedded_windows ?			      (GtkDestroyNotify) g_list_free : NULL);}void       gtk_window_reposition (GtkWindow *window,		       gint       x,		       gint       y){  GtkWindowGeometryInfo *info;    g_return_if_fail (window != NULL);  g_return_if_fail (GTK_IS_WINDOW (window));  /* keep this in sync with gtk_window_compute_reposition()   */  if (GTK_WIDGET_REALIZED (window))    {      info = gtk_window_get_geometry_info (window, TRUE);      if (!(info->last.flags & GDK_HINT_POS))	{	  info->last.flags |= GDK_HINT_POS;	  gdk_window_set_geometry_hints (GTK_WIDGET (window)->window,					 &info->last.geometry,					 info->last.flags);	}        gdk_window_move (GTK_WIDGET (window)->window, x, y);    }}static voidgtk_window_shutdown (GtkObject *object){  GtkWindow *window;  g_return_if_fail (object != NULL);  g_return_if_fail (GTK_IS_WINDOW (object));  window = GTK_WINDOW (object);  gtk_window_set_focus (window, NULL);  gtk_window_set_default (window, NULL);  GTK_OBJECT_CLASS (parent_class)->shutdown (object);}static voidgtk_window_transient_parent_realized (GtkWidget *parent,				      GtkWidget *window){  if (GTK_WIDGET_REALIZED (window))    gdk_window_set_transient_for (window->window, parent->window);}static voidgtk_window_transient_parent_unrealized (GtkWidget *parent,					GtkWidget *window){  if (GTK_WIDGET_REALIZED (window))    gdk_property_delete (window->window, 			 gdk_atom_intern ("WM_TRANSIENT_FOR", FALSE));}static void       gtk_window_unset_transient_for  (GtkWindow *window){  if (window->transient_parent)    {      gtk_signal_disconnect_by_func (GTK_OBJECT (window->transient_parent),				     GTK_SIGNAL_FUNC (gtk_window_transient_parent_realized),				     window);      gtk_signal_disconnect_by_func (GTK_OBJECT (window->transient_parent),				     GTK_SIGNAL_FUNC (gtk_window_transient_parent_unrealized),				     window);      gtk_signal_disconnect_by_func (GTK_OBJECT (window->transient_parent),				     GTK_SIGNAL_FUNC (gtk_widget_destroyed),				     &window->transient_parent);      window->transient_parent = NULL;    }}void       gtk_window_set_transient_for  (GtkWindow *window, 			       GtkWindow *parent){  g_return_if_fail (window != 0);  if (window->transient_parent)    {      if (GTK_WIDGET_REALIZED (window) && 	  GTK_WIDGET_REALIZED (window->transient_parent) && 	  (!parent || !GTK_WIDGET_REALIZED (parent)))	gtk_window_transient_parent_unrealized (GTK_WIDGET (window->transient_parent),						GTK_WIDGET (window));      gtk_window_unset_transient_for (window);    }  window->transient_parent = parent;  if (parent)    {      gtk_signal_connect (GTK_OBJECT (parent), "destroy",			  GTK_SIGNAL_FUNC (gtk_widget_destroyed),			  &window->transient_parent);      gtk_signal_connect (GTK_OBJECT (parent), "realize",			  GTK_SIGNAL_FUNC (gtk_window_transient_parent_realized),			  window);      gtk_signal_connect (GTK_OBJECT (parent), "unrealize",			  GTK_SIGNAL_FUNC (gtk_window_transient_parent_unrealized),			  window);      if (GTK_WIDGET_REALIZED (window) &&	  GTK_WIDGET_REALIZED (parent))	gtk_window_transient_parent_realized (GTK_WIDGET (parent),					      GTK_WIDGET (window));    }}static voidgtk_window_geometry_destroy (GtkWindowGeometryInfo *info){  if (info->widget)    gtk_signal_disconnect_by_func (GTK_OBJECT (info->widget),				   GTK_SIGNAL_FUNC (gtk_widget_destroyed),				   &info->widget);  g_free (info);}static GtkWindowGeometryInfo*gtk_window_get_geometry_info (GtkWindow *window,			      gboolean   create){  GtkWindowGeometryInfo *info;  info = gtk_object_get_data (GTK_OBJECT (window), "gtk-window-geometry");  if (!info && create)    {      info = g_new0 (GtkWindowGeometryInfo, 1);      info->width = 0;      info->height = 0;      info->last.width = -1;      info->last.height = -1;      info->widget = NULL;      info->mask = 0;      gtk_object_set_data_full (GTK_OBJECT (window), 				"gtk-window-geometry",				info, 				(GtkDestroyNotify) gtk_window_geometry_destroy);    }  return info;}void       gtk_window_set_geometry_hints (GtkWindow       *window,			       GtkWidget       *geometry_widget,			       GdkGeometry     *geometry,			       GdkWindowHints   geom_mask){  GtkWindowGeometryInfo *info;  g_return_if_fail (window != NULL);  info = gtk_window_get_geometry_info (window, TRUE);    if (info->widget)    gtk_signal_disconnect_by_func (GTK_OBJECT (info->widget),				   GTK_SIGNAL_FUNC (gtk_widget_destroyed),				   &info->widget);    info->widget = geometry_widget;  if (info->widget)    gtk_signal_connect (GTK_OBJECT (geometry_widget), "destroy",			GTK_SIGNAL_FUNC (gtk_widget_destroyed),			&info->widget);  if (geometry)    info->geometry = *geometry;  info->mask = geom_mask;  gtk_widget_queue_resize (GTK_WIDGET (window));}void       gtk_window_set_default_size (GtkWindow   *window,			     gint         width,			     gint         height){  GtkWindowGeometryInfo *info;  g_return_if_fail (GTK_IS_WINDOW (window));  info = gtk_window_get_geometry_info (window, TRUE);  if (width >= 0)    info->width = width;  if (height >= 0)    info->height = height;  gtk_widget_queue_resize (GTK_WIDGET (window));}  static voidgtk_window_destroy (GtkObject *object){  GtkWindow *window;    g_return_if_fail (object != NULL);  g_return_if_fail (GTK_IS_WINDOW (object));  window = GTK_WINDOW (object);    gtk_container_unregister_toplevel (GTK_CONTAINER (object));  if (window->transient_parent)    gtk_window_unset_transient_for (window);  GTK_OBJECT_CLASS (parent_class)->destroy (object);}static voidgtk_window_finalize (GtkObject *object){  GtkWindow *window;  g_return_if_fail (object != NULL);  g_return_if_fail (GTK_IS_WINDOW (object));  window = GTK_WINDOW (object);  g_free (window->title);  g_free (window->wmclass_name);  g_free (window->wmclass_class);  GTK_OBJECT_CLASS(parent_class)->finalize (object);}static voidgtk_window_show (GtkWidget *widget){  GtkWindow *window = GTK_WINDOW (widget);  GtkContainer *container = GTK_CONTAINER (window);  gboolean need_resize;  GTK_WIDGET_SET_FLAGS (widget, GTK_VISIBLE);  need_resize = container->need_resize || !GTK_WIDGET_REALIZED (widget);  container->need_resize = FALSE;  if (need_resize)    {      GtkWindowGeometryInfo *info = gtk_window_get_geometry_info (window, TRUE);      GtkAllocation allocation = { 0, 0 };      GdkGeometry new_geometry;      guint width, height, new_flags;      /* determine default size to initially show the window with */      gtk_widget_size_request (widget, NULL);      gtk_window_compute_default_size (window, &width, &height);      /* save away the last default size for later comparisions */      info->last.width = width;      info->last.height = height;      /* constrain size to geometry */      gtk_window_compute_hints (window, &new_geometry, &new_flags);      gtk_window_constrain_size (window,				 &new_geometry, new_flags,				 width, height,				 &width, &height);      /* and allocate the window */      allocation.width  = width;      allocation.height = height;      gtk_widget_size_allocate (widget, &allocation);            if (GTK_WIDGET_REALIZED (widget))	gdk_window_resize (widget->window, width, height);      else	gtk_widget_realize (widget);    }    gtk_container_check_resize (container);  gtk_widget_map (widget);  if (window->modal)    gtk_grab_add (widget);}static voidgtk_window_hide (GtkWidget *widget){  GtkWindow *window;  g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_WINDOW (widget));  window = GTK_WINDOW (widget);  GTK_WIDGET_UNSET_FLAGS (widget, GTK_VISIBLE);  gtk_widget_unmap (widget);  if (window->modal)    gtk_grab_remove (widget);}static voidgtk_window_map (GtkWidget *widget){  GtkWindow *window;  g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_WINDOW (widget));  GTK_WIDGET_SET_FLAGS (widget, GTK_MAPPED);  window = GTK_WINDOW (widget);  if (window->bin.child &&      GTK_WIDGET_VISIBLE (window->bin.child) &&      !GTK_WIDGET_MAPPED (window->bin.child))    gtk_widget_map (window->bin.child);  gdk_window_show (widget->window);}static voidgtk_window_unmap (GtkWidget *widget){  GtkWindow *window;  g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_WINDOW (widget));  GTK_WIDGET_UNSET_FLAGS (widget, GTK_MAPPED);  gdk_window_hide (widget->window);  window = GTK_WINDOW (widget);  window->use_uposition = TRUE;  window->resize_count = 0;  window->handling_resize = FALSE;}static voidgtk_window_realize (GtkWidget *widget){  GtkWindow *window;  GdkWindowAttr attributes;  gint attributes_mask;    g_return_if_fail (GTK_IS_WINDOW (widget));  window = GTK_WINDOW (widget);  /* ensure widget tree is properly size allocated */  if (widget->allocation.x == -1 &&      widget->allocation.y == -1 &&      widget->allocation.width == 1 &&      widget->allocation.height == 1)    {      GtkRequisition requisition;      GtkAllocation allocation = { 0, 0, 200, 200 };      gtk_widget_size_request (widget, &requisition);      if (requisition.width || requisition.height)	{	  /* non-empty window */	  allocation.width = requisition.width;	  allocation.height = requisition.height;	}      gtk_widget_size_allocate (widget, &allocation);            gtk_container_queue_resize (GTK_CONTAINER (widget));      g_return_if_fail (!GTK_WIDGET_REALIZED (widget));    }    GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);    switch (window->type)    {    case GTK_WINDOW_TOPLEVEL:      attributes.window_type = GDK_WINDOW_TOPLEVEL;      break;    case GTK_WINDOW_DIALOG:      attributes.window_type = GDK_WINDOW_DIALOG;      break;    case GTK_WINDOW_POPUP:      attributes.window_type = GDK_WINDOW_TEMP;      break;    }     attributes.title = window->title;  attributes.wmclass_name = window->wmclass_name;  attributes.wmclass_class = window->wmclass_class;  attributes.width = widget->allocation.width;  attributes.height = widget->allocation.height;  attributes.wclass = GDK_INPUT_OUTPUT;  attributes.visual = gtk_widget_get_visual (widget);  attributes.colormap = gtk_widget_get_colormap (widget);  attributes.event_mask = gtk_widget_get_events (widget);  attributes.event_mask |= (GDK_EXPOSURE_MASK |			    GDK_KEY_PRESS_MASK |			    GDK_ENTER_NOTIFY_MASK |			    GDK_LEAVE_NOTIFY_MASK |			    GDK_FOCUS_CHANGE_MASK |			    GDK_STRUCTURE_MASK);     attributes_mask = GDK_WA_VISUAL | GDK_WA_COLORMAP;  attributes_mask |= (window->title ? GDK_WA_TITLE : 0);  attributes_mask |= (window->wmclass_name ? GDK_WA_WMCLASS : 0);     widget->window = gdk_window_new (NULL, &attributes, attributes_mask);  gdk_window_set_user_data (widget->window, window);  widget->style = gtk_style_attach (widget->style, widget->window);  gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL);  gtk_window_paint (widget, NULL);  if (window->transient_parent &&      GTK_WIDGET_REALIZED (window->transient_parent))    gdk_window_set_transient_for (widget->window,				  GTK_WIDGET (window->transient_parent)->window);}static voidgtk_window_size_request (GtkWidget      *widget,			 GtkRequisition *requisition){  GtkWindow *window;  GtkBin *bin;  g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_WINDOW (widget));  g_return_if_fail (requisition != NULL);  window = GTK_WINDOW (widget);  bin = GTK_BIN (window);    requisition->width = GTK_CONTAINER (window)->border_width * 2;  requisition->height = GTK_CONTAINER (window)->border_width * 2;  if (bin->child && GTK_WIDGET_VISIBLE (bin->child))    {      GtkRequisition child_requisition;            gtk_widget_size_request (bin->child, &child_requisition);      requisition->width += child_requisition.width;

⌨️ 快捷键说明

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