static void gtk_form_realize_child(GtkForm *form, GtkFormChild *child) { gtk_form_attach_child_window(form, child); gtk_widget_realize(child->widget); if (child->window == NULL) /* might be already set, see above */ gtk_form_set_static_gravity(child->widget->window, TRUE); }
static void gtk_form_realize(GtkWidget *widget) { GList *tmp_list; GtkForm *form; GdkWindowAttr attributes; gint attributes_mask; g_return_if_fail(GTK_IS_FORM(widget)); form = GTK_FORM(widget); GTK_WIDGET_SET_FLAGS(form, GTK_REALIZED); attributes.window_type = GDK_WINDOW_CHILD; attributes.x = widget->allocation.x; attributes.y = widget->allocation.y; 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 = GDK_VISIBILITY_NOTIFY_MASK; attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; widget->window = gdk_window_new(gtk_widget_get_parent_window(widget), &attributes, attributes_mask); gdk_window_set_user_data(widget->window, widget); attributes.x = 0; attributes.y = 0; attributes.event_mask = gtk_widget_get_events(widget); form->bin_window = gdk_window_new(widget->window, &attributes, attributes_mask); gdk_window_set_user_data(form->bin_window, widget); gtk_form_set_static_gravity(form->bin_window, TRUE); widget->style = gtk_style_attach(widget->style, widget->window); gtk_style_set_background(widget->style, widget->window, GTK_STATE_NORMAL); gtk_style_set_background(widget->style, form->bin_window, GTK_STATE_NORMAL); gdk_window_add_filter(widget->window, gtk_form_main_filter, form); gdk_window_add_filter(form->bin_window, gtk_form_filter, form); for (tmp_list = form->children; tmp_list; tmp_list = tmp_list->next) { GtkFormChild *child = tmp_list->data; gtk_form_attach_child_window(form, child); if (GTK_WIDGET_VISIBLE(child->widget)) gtk_form_realize_child(form, child); } }
void gtk_form_put(GtkForm *form, GtkWidget *child_widget, gint x, gint y) { GtkFormChild *child; g_return_if_fail(GTK_IS_FORM(form)); /* LINTED: avoid warning: conversion to 'unsigned long' */ child = g_new(GtkFormChild, 1); if (child == NULL) return; child->widget = child_widget; child->window = NULL; child->x = x; child->y = y; #if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_size_request(child->widget, -1, -1); #else child->widget->requisition.width = 0; child->widget->requisition.height = 0; #endif child->mapped = FALSE; form->children = g_list_append(form->children, child); /* child->window must be created and attached to the widget _before_ * it has been realized, or else things will break with GTK2. Note * that gtk_widget_set_parent() realizes the widget if it's visible * and its parent is mapped. */ if (gtk_widget_get_realized(GTK_WIDGET(form))) gtk_form_attach_child_window(form, child); gtk_widget_set_parent(child_widget, GTK_WIDGET(form)); if (gtk_widget_get_realized(GTK_WIDGET(form)) && !gtk_widget_get_realized(child_widget)) gtk_form_realize_child(form, child); gtk_form_position_child(form, child, TRUE); }
static void gtk_form_realize_child(GtkForm *form, GtkFormChild *child) { gtk_form_attach_child_window(form, child); gtk_widget_realize(child->widget); }
static void gtk_form_realize(GtkWidget *widget) { GList *tmp_list; GtkForm *form; GdkWindowAttr attributes; gint attributes_mask; GtkAllocation allocation; g_return_if_fail(GTK_IS_FORM(widget)); form = GTK_FORM(widget); gtk_widget_set_realized(widget, TRUE); gtk_widget_get_allocation(widget, &allocation); attributes.window_type = GDK_WINDOW_CHILD; attributes.x = allocation.x; attributes.y = allocation.y; attributes.width = allocation.width; attributes.height = allocation.height; attributes.wclass = GDK_INPUT_OUTPUT; attributes.visual = gtk_widget_get_visual(widget); #if GTK_CHECK_VERSION(3,0,0) attributes.event_mask = GDK_EXPOSURE_MASK; #else attributes.colormap = gtk_widget_get_colormap(widget); attributes.event_mask = GDK_VISIBILITY_NOTIFY_MASK; #endif #if GTK_CHECK_VERSION(3,0,0) attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL; #else attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; #endif gtk_widget_set_window(widget, gdk_window_new(gtk_widget_get_parent_window(widget), &attributes, attributes_mask)); gdk_window_set_user_data(gtk_widget_get_window(widget), widget); attributes.x = 0; attributes.y = 0; attributes.event_mask = gtk_widget_get_events(widget); form->bin_window = gdk_window_new(gtk_widget_get_window(widget), &attributes, attributes_mask); gdk_window_set_user_data(form->bin_window, widget); #if GTK_CHECK_VERSION(3,0,0) { GtkStyleContext * const sctx = gtk_widget_get_style_context(widget); gtk_style_context_add_class(sctx, "gtk-form"); gtk_style_context_set_state(sctx, GTK_STATE_FLAG_NORMAL); # if !GTK_CHECK_VERSION(3,18,0) gtk_style_context_set_background(sctx, gtk_widget_get_window(widget)); gtk_style_context_set_background(sctx, form->bin_window); # endif } #else widget->style = gtk_style_attach(widget->style, widget->window); gtk_style_set_background(widget->style, widget->window, GTK_STATE_NORMAL); gtk_style_set_background(widget->style, form->bin_window, GTK_STATE_NORMAL); #endif for (tmp_list = form->children; tmp_list; tmp_list = tmp_list->next) { GtkFormChild *child = tmp_list->data; gtk_form_attach_child_window(form, child); if (gtk_widget_get_visible(child->widget)) gtk_form_realize_child(form, child); } }