void glade_gtk_assistant_set_property (GladeWidgetAdaptor * adaptor, GObject * object, const gchar * property_name, const GValue * value) { if (strcmp (property_name, "n-pages") == 0) { GtkAssistant *assistant = GTK_ASSISTANT (object); gint size, i; for (i = gtk_assistant_get_n_pages (GTK_ASSISTANT (object)), size = g_value_get_int (value); i < size; i++) { g_message ("aaaa %d %d", i,size); gtk_assistant_append_page (assistant, glade_placeholder_new ()); } glade_gtk_assistant_update_page_type (assistant); return; } /* Chain Up */ GWA_GET_CLASS (GTK_TYPE_WINDOW)->set_property (adaptor, object, property_name, value); }
void glade_gtk_box_remove_child (GladeWidgetAdaptor * adaptor, GObject * object, GObject * child) { GladeWidget *gbox; gint size; gchar *special_child_type; g_return_if_fail (GTK_IS_BOX (object)); g_return_if_fail (GTK_IS_WIDGET (child)); gbox = glade_widget_get_from_gobject (object); special_child_type = g_object_get_data (child, "special-child-type"); if (special_child_type && !strcmp (special_child_type, "center")) { GtkWidget *w; w = glade_placeholder_new (); g_object_set_data (G_OBJECT (w), "special-child-type", "center"); gtk_box_set_center_widget (GTK_BOX (object), w); return; } gtk_container_remove (GTK_CONTAINER (object), GTK_WIDGET (child)); if (glade_widget_superuser () == FALSE) { glade_widget_property_get (gbox, "size", &size); glade_widget_property_set (gbox, "size", size); } fix_response_id_on_child (gbox, child, FALSE); }
void glade_gtk_action_bar_set_property (GladeWidgetAdaptor * adaptor, GObject * object, const gchar * id, const GValue * value) { if (!strcmp (id, "use-center-child")) { GtkWidget *child; if (g_value_get_boolean (value)) { child = gtk_action_bar_get_center_widget (GTK_ACTION_BAR (object)); if (!child) child = glade_placeholder_new (); g_object_set_data (G_OBJECT (child), "special-child-type", "center"); } else child = NULL; gtk_action_bar_set_center_widget (GTK_ACTION_BAR (object), child); } else if (!strcmp (id, "size")) glade_gtk_action_bar_set_size (object, value); else GWA_GET_CLASS (GTK_TYPE_CONTAINER)->set_property (adaptor, object, id, value); }
void glade_gtk_action_bar_remove_child (GladeWidgetAdaptor * adaptor, GObject * object, GObject * child) { GladeWidget *gbox; gint size; gchar *special_child_type; gbox = glade_widget_get_from_gobject (object); special_child_type = g_object_get_data (child, "special-child-type"); if (special_child_type && !strcmp (special_child_type, "center")) { GtkWidget *w; w = glade_placeholder_new (); g_object_set_data (G_OBJECT (w), "special-child-type", "center"); gtk_action_bar_set_center_widget (GTK_ACTION_BAR (object), w); return; } gtk_container_remove (GTK_CONTAINER (object), GTK_WIDGET (child)); if (!glade_widget_superuser ()) { glade_widget_property_get (gbox, "size", &size); glade_widget_property_set (gbox, "size", size); } }
static void glade_gtk_box_set_size (GObject * object, const GValue * value) { GtkBox *box; GList *child, *children; guint new_size, old_size, i; box = GTK_BOX (object); g_return_if_fail (GTK_IS_BOX (box)); if (glade_util_object_is_loading (object)) return; children = gtk_container_get_children (GTK_CONTAINER (box)); children = g_list_remove (children, gtk_box_get_center_widget (GTK_BOX (box))); old_size = g_list_length (children); new_size = g_value_get_int (value); if (old_size == new_size) { g_list_free (children); return; } /* Ensure placeholders first... */ for (i = 0; i < new_size; i++) { if (g_list_length (children) < (i + 1)) { GtkWidget *placeholder = glade_placeholder_new (); gint blank = glade_gtk_box_get_first_blank (box); gtk_container_add (GTK_CONTAINER (box), placeholder); gtk_box_reorder_child (box, placeholder, blank); } } /* The box has shrunk. Remove the widgets that are on those slots */ for (child = g_list_last (children); child && old_size > new_size; child = g_list_previous (child)) { GtkWidget *child_widget = child->data; /* Refuse to remove any widgets that are either GladeWidget objects * or internal to the hierarchic entity (may be a composite widget, * not all internal widgets have GladeWidgets). */ if (glade_widget_get_from_gobject (child_widget) || GLADE_IS_PLACEHOLDER (child_widget) == FALSE) continue; gtk_container_remove (GTK_CONTAINER (box), child_widget); old_size--; } g_list_free (children); }
void glade_gtk_overlay_post_create (GladeWidgetAdaptor *adaptor, GObject *object, GladeCreateReason reason) { GladeWidget *widget = glade_widget_get_from_gobject (object); if (reason == GLADE_CREATE_USER) gtk_container_add (GTK_CONTAINER (object), glade_placeholder_new ()); on_widget_project_notify (G_OBJECT (widget), NULL, NULL); }
void glade_gtk_tool_item_post_create (GladeWidgetAdaptor *adaptor, GObject *object, GladeCreateReason reason) { if (GTK_IS_SEPARATOR_TOOL_ITEM (object)) return; if (reason == GLADE_CREATE_USER && gtk_bin_get_child (GTK_BIN (object)) == NULL) gtk_container_add (GTK_CONTAINER (object), glade_placeholder_new ()); }
static void glade_gtk_header_bar_set_size (GObject * object, const GValue * value) { GList *l, *next, *children; GtkWidget *child; guint new_size, old_size, i; g_return_if_fail (GTK_IS_HEADER_BAR (object)); d(g_message ("Setting size to %d", g_value_get_int (value))); if (glade_util_object_is_loading (object)) return; children = gtk_container_get_children (GTK_CONTAINER (object)); l = children; while (l) { next = l->next; if (l->data == gtk_header_bar_get_custom_title (GTK_HEADER_BAR (object)) || (!glade_widget_get_from_gobject (l->data) && !GLADE_IS_PLACEHOLDER (l->data))) children = g_list_delete_link (children, l); l = next; } old_size = g_list_length (children); new_size = g_value_get_int (value); if (old_size == new_size) { g_list_free (children); return; } for (i = old_size; i < new_size; i++) { GtkWidget *placeholder = glade_placeholder_new (); gtk_header_bar_pack_start (GTK_HEADER_BAR (object), placeholder); } for (l = g_list_last (children); l && old_size > new_size; l = l->prev) { child = l->data; if (glade_widget_get_from_gobject (child) || !GLADE_IS_PLACEHOLDER (child)) continue; gtk_container_remove (GTK_CONTAINER (object), child); old_size--; } g_list_free (children); }
void glade_gtk_container_post_create (GladeWidgetAdaptor * adaptor, GObject * container, GladeCreateReason reason) { GList *children; g_return_if_fail (GTK_IS_CONTAINER (container)); if (reason == GLADE_CREATE_USER) { if ((children = gtk_container_get_children (GTK_CONTAINER (container))) == NULL) gtk_container_add (GTK_CONTAINER (container), glade_placeholder_new ()); else g_list_free (children); } }
void glade_gtk_button_set_property (GladeWidgetAdaptor * adaptor, GObject * object, const gchar * id, const GValue * value) { GladeWidget *widget = glade_widget_get_from_gobject (object); GladeProperty *property = glade_widget_get_property (widget, id); if (strcmp (id, "custom-child") == 0) { GtkWidget *child = gtk_bin_get_child (GTK_BIN (object)); gboolean custom_child = g_value_get_boolean (value); /* Avoid removing a child if we already have a custom child */ if (custom_child && (child && glade_widget_get_from_gobject (child))) return; if (custom_child) { if (child) gtk_container_remove (GTK_CONTAINER (object), child); gtk_container_add (GTK_CONTAINER (object), glade_placeholder_new ()); } else if (child && GLADE_IS_PLACEHOLDER (child)) gtk_container_remove (GTK_CONTAINER (object), child); } else if (strcmp (id, "stock") == 0) { gboolean use_stock = FALSE; glade_widget_property_get (widget, "use-stock", &use_stock); if (use_stock) gtk_button_set_label (GTK_BUTTON (object), g_value_get_string (value)); } else if (strcmp (id, "use-stock") == 0) { /* I guess its my bug in GTK+, we need to resync the appearance property * on GtkButton when the GtkButton:use-stock property changes. */ GWA_GET_CLASS (GTK_TYPE_CONTAINER)->set_property (adaptor, object, id, value); glade_gtk_sync_use_appearance (widget); } else if (GPC_VERSION_CHECK (glade_property_get_class (property), gtk_major_version, gtk_minor_version + 1)) GWA_GET_CLASS (GTK_TYPE_CONTAINER)->set_property (adaptor, object, id, value); }
void glade_gtk_header_bar_set_use_custom_title (GObject *object, gboolean use_custom_title) { GladeWidget *gwidget = glade_widget_get_from_gobject (object); GtkWidget *child; if (use_custom_title) { child = gtk_header_bar_get_custom_title (GTK_HEADER_BAR (object)); if (!child) { child = glade_placeholder_new (); g_object_set_data (G_OBJECT (child), "special-child-type", "title"); } } else child = NULL; gtk_header_bar_set_custom_title (GTK_HEADER_BAR (object), child); if (GLADE_IS_PLACEHOLDER (child)) { GList *list, *l; list = glade_placeholder_packing_actions (GLADE_PLACEHOLDER (child)); for (l = list; l; l = l->next) { GladeWidgetAction *gwa = l->data; if (!strcmp (glade_widget_action_get_class (gwa)->id, "remove_slot")) glade_widget_action_set_visible (gwa, FALSE); } } if (use_custom_title) { glade_widget_property_set_sensitive (gwidget, "title", FALSE, TITLE_DISABLED_MESSAGE); glade_widget_property_set_sensitive (gwidget, "subtitle", FALSE, TITLE_DISABLED_MESSAGE); glade_widget_property_set_sensitive (gwidget, "has-subtitle", FALSE, TITLE_DISABLED_MESSAGE); } else { glade_widget_property_set_sensitive (gwidget, "title", TRUE, NULL); glade_widget_property_set_sensitive (gwidget, "subtitle", TRUE, NULL); glade_widget_property_set_sensitive (gwidget, "has-subtitle", TRUE, NULL); } }
void glade_gtk_container_remove_child (GladeWidgetAdaptor * adaptor, GtkWidget * container, GtkWidget * child) { GList *children; gtk_container_remove (GTK_CONTAINER (container), child); /* If this is the last one, add a placeholder by default. */ if ((children = gtk_container_get_children (GTK_CONTAINER (container))) == NULL) { gtk_container_add (GTK_CONTAINER (container), glade_placeholder_new ()); } else g_list_free (children); }
void glade_gtk_window_set_property (GladeWidgetAdaptor * adaptor, GObject * object, const gchar * id, const GValue * value) { GladeWidget *gwidget = glade_widget_get_from_gobject (object); if (!strcmp (id, "glade-window-icon-name")) { glade_widget_property_set_sensitive (gwidget, "icon", FALSE, NOT_SELECTED_MSG); glade_widget_property_set_sensitive (gwidget, "icon-name", FALSE, NOT_SELECTED_MSG); if (g_value_get_boolean (value)) glade_widget_property_set_sensitive (gwidget, "icon-name", TRUE, NULL); else glade_widget_property_set_sensitive (gwidget, "icon", TRUE, NULL); } else if (!strcmp (id, "use-csd")) { if (g_value_get_boolean (value)) { GtkWidget *titlebar; titlebar = gtk_window_get_titlebar (GTK_WINDOW (object)); if (!titlebar) titlebar = glade_placeholder_new (); g_object_set_data (G_OBJECT (titlebar), "special-child-type", "titlebar"); gtk_window_set_titlebar (GTK_WINDOW (object), titlebar); glade_widget_property_set_sensitive (gwidget, "title", FALSE, CSD_DISABLED_MESSAGE); glade_widget_property_set_sensitive (gwidget, "decorated", FALSE, CSD_DISABLED_MESSAGE); glade_widget_property_set_sensitive (gwidget, "hide-titlebar-when-maximized", FALSE, CSD_DISABLED_MESSAGE); } else { gtk_window_set_titlebar (GTK_WINDOW (object), NULL); glade_widget_property_set_sensitive (gwidget, "title", TRUE, NULL); glade_widget_property_set_sensitive (gwidget, "decorated", TRUE, NULL); glade_widget_property_set_sensitive (gwidget, "hide-titlebar-when-maximized", TRUE, NULL); } } else GWA_GET_CLASS (GTK_TYPE_CONTAINER)->set_property (adaptor, object, id, value); }
void glade_gtk_window_post_create (GladeWidgetAdaptor * adaptor, GObject * object, GladeCreateReason reason) { GladeWidget *parent = glade_widget_get_from_gobject (object); GladeProject *project = glade_widget_get_project (parent); if (reason == GLADE_CREATE_LOAD) { g_signal_connect (project, "parse-finished", G_CALLBACK (glade_gtk_window_parse_finished), object); } else if (reason == GLADE_CREATE_USER) { gtk_container_add (GTK_CONTAINER (object), glade_placeholder_new ()); } }
void glade_gtk_overlay_remove_child (GladeWidgetAdaptor *adaptor, GObject *object, GObject *child) { gchar *special_type = g_object_get_data (child, "special-child-type"); if (special_type && !strcmp (special_type, "overlay")) { g_object_set_data (child, "special-child-type", NULL); gtk_widget_show (GTK_WIDGET (child)); } gtk_container_remove (GTK_CONTAINER (object), GTK_WIDGET (child)); if (gtk_bin_get_child (GTK_BIN (object)) == NULL) gtk_container_add (GTK_CONTAINER (object), glade_placeholder_new ()); }
static void glade_gtk_table_refresh_placeholders (GtkTable * table) { guint n_columns, n_rows, i, j; gchar *child_map; gpointer *placeholder_map; g_object_get (table, "n-columns", &n_columns, "n-rows", &n_rows, NULL); glade_gtk_table_build_occupation_maps (table, n_columns, n_rows, &child_map, &placeholder_map); for (i = 0; i < n_columns; i++) { for (j = 0; j < n_rows; j++) { gpointer placeholder = TABLE_OCCUPIED(placeholder_map, n_columns, i, j); if (TABLE_OCCUPIED(child_map, n_columns, i, j)) { if (placeholder) { gtk_container_remove (GTK_CONTAINER (table), GTK_WIDGET (placeholder)); } } else { if (!placeholder) { G_GNUC_BEGIN_IGNORE_DEPRECATIONS; gtk_table_attach_defaults (table, glade_placeholder_new (), i, i + 1, j, j + 1); G_GNUC_END_IGNORE_DEPRECATIONS; } } } } g_free(child_map); g_free(placeholder_map); if (gtk_widget_get_realized (GTK_WIDGET (table))) gtk_container_check_resize (GTK_CONTAINER (table)); }
static void glade_gtk_grid_refresh_placeholders (GtkGrid *grid, gboolean load_finished) { GladeWidget *widget; GladeProject *project; GtkContainer *container; GList *list, *children; guint n_columns, n_rows; gint i, j; widget = glade_widget_get_from_gobject (grid); project = glade_widget_get_project (widget); /* Wait for project to finish loading */ if ((project && glade_project_is_loading (project)) && !load_finished) return; glade_widget_property_get (widget, "n-columns", &n_columns); glade_widget_property_get (widget, "n-rows", &n_rows); container = GTK_CONTAINER (grid); children = gtk_container_get_children (container); for (list = children; list && list->data; list = list->next) { GtkWidget *child = list->data; if (GLADE_IS_PLACEHOLDER (child)) gtk_container_remove (container, child); } g_list_free (children); children = gtk_container_get_children (container); for (i = 0; i < n_columns; i++) for (j = 0; j < n_rows; j++) if (glade_gtk_grid_has_child (grid, children, i, j) == FALSE) gtk_grid_attach (grid, glade_placeholder_new (), i, j, 1, 1); if (gtk_widget_get_realized (GTK_WIDGET (grid))) gtk_container_check_resize (container); g_list_free (children); }
void glade_gtk_header_bar_post_create (GladeWidgetAdaptor *adaptor, GObject *container, GladeCreateReason reason) { GladeWidget *parent = glade_widget_get_from_gobject (container); GladeProject *project = glade_widget_get_project (parent); if (reason == GLADE_CREATE_LOAD) { g_signal_connect (project, "parse-finished", G_CALLBACK (glade_gtk_header_bar_parse_finished), container); } else if (reason == GLADE_CREATE_USER) { gtk_header_bar_pack_start (GTK_HEADER_BAR (container), glade_placeholder_new ()); } }
void glade_gtk_window_remove_child (GladeWidgetAdaptor * adaptor, GObject * object, GObject * child) { gchar *special_child_type; GtkWidget *placeholder; placeholder = glade_placeholder_new (); special_child_type = g_object_get_data (child, "special-child-type"); if (special_child_type && !strcmp (special_child_type, "titlebar")) { g_object_set_data (G_OBJECT (placeholder), "special-child-type", "titlebar"); gtk_window_set_titlebar (GTK_WINDOW (object), placeholder); } else { gtk_container_remove (GTK_CONTAINER (object), GTK_WIDGET (child)); gtk_container_add (GTK_CONTAINER (object), placeholder); } }
void glade_gtk_header_bar_remove_child (GladeWidgetAdaptor * adaptor, GObject * object, GObject * child) { GladeWidget *gbox; gint size; gchar *special_child_type; special_child_type = g_object_get_data (child, "special-child-type"); d(g_message ("Remove %s %p (special: %s)", GLADE_IS_PLACEHOLDER (child) ? "placeholder" : "child", child, special_child_type)); if (special_child_type && !strcmp (special_child_type, "title")) { GtkWidget *replacement = glade_placeholder_new (); g_object_set_data (G_OBJECT (replacement), "special-child-type", "title"); gtk_header_bar_set_custom_title (GTK_HEADER_BAR (object), replacement); return; } gtk_container_remove (GTK_CONTAINER (object), GTK_WIDGET (child)); /* Synchronize number of placeholders, this should trigger the set_property method with the * correct value (not the arbitrary number of children currently in the headerbar) */ gbox = glade_widget_get_from_gobject (object); if (!glade_widget_superuser ()) { glade_widget_property_get (gbox, "size", &size); glade_widget_property_set (gbox, "size", size); } }