static gboolean treemodelfilter_visible_func (GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { _GladeAdaptorChooserWidgetPrivate *priv = GET_PRIVATE (data); GladeWidgetAdaptor *adaptor = NULL; gboolean visible = TRUE; gtk_tree_model_get (model, iter, COLUMN_ADAPTOR, &adaptor, -1); if (!adaptor) return priv->show_group_title && !priv->search_text; /* Skip classes not available in project target version */ if (priv->project) { const gchar *catalog = NULL; gint major, minor; catalog = glade_widget_adaptor_get_catalog (adaptor); glade_project_get_target_version (priv->project, catalog, &major, &minor); visible = GWA_VERSION_CHECK (adaptor, major, minor); } if (visible && priv->flags) { GType type = glade_widget_adaptor_get_object_type (adaptor); _GladeAdaptorChooserWidgetFlags flags = priv->flags; /* Skip adaptors according to flags */ if (flags & GLADE_ADAPTOR_CHOOSER_WIDGET_SKIP_DEPRECATED && GWA_DEPRECATED (adaptor)) visible = FALSE; else if (flags & GLADE_ADAPTOR_CHOOSER_WIDGET_SKIP_TOPLEVEL && GWA_IS_TOPLEVEL (adaptor)) visible = FALSE; else if (flags & GLADE_ADAPTOR_CHOOSER_WIDGET_WIDGET && !g_type_is_a (type, GTK_TYPE_WIDGET)) visible = FALSE; else if (flags & GLADE_ADAPTOR_CHOOSER_WIDGET_TOPLEVEL && !GWA_IS_TOPLEVEL (adaptor)) visible = FALSE; } if (visible && priv->search_text) visible = chooser_match_func (data, model, priv->search_text, iter); g_clear_object (&adaptor); return visible; }
/****************************************************** * Project Callbacks * ******************************************************/ static void project_targets_changed (GladeProject *project, GladeProjectProperties *properties) { GladeProjectPropertiesPrivate *priv = properties->priv; GList *list; GSList *radios, *l; priv->ignore_ui_cb = TRUE; /* For each catalog */ for (list = glade_app_get_catalogs (); list; list = g_list_next (list)) { GladeTargetableVersion *version; GladeCatalog *catalog = list->data; gint minor, major; /* Skip if theres only one option */ if (g_list_length (glade_catalog_get_targets (catalog)) <= 1) continue; /* Fetch the version for this project */ glade_project_get_target_version (priv->project, glade_catalog_get_name (catalog), &major, &minor); /* Fetch the radios for this catalog */ if (priv->target_radios && (radios = g_hash_table_lookup (priv->target_radios, glade_catalog_get_name (catalog))) != NULL) { for (l = radios; l; l = l->next) { GtkWidget *radio = l->data; /* Activate the appropriate button for the project/catalog */ version = g_object_get_data (G_OBJECT (radio), "version"); if (version->major == major && version->minor == minor) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), TRUE); break; } } } } priv->ignore_ui_cb = FALSE; }
static void target_version_box_fill (GladeProjectProperties *properties) { GladeProjectPropertiesPrivate *priv = properties->priv; GladeProject *project = priv->project; GtkWidget *vbox = priv->toolkit_box; GtkWidget *label, *active_radio, *target_radio, *hbox; GList *list, *targets; /* Add stuff to vbox */ for (list = glade_app_get_catalogs (); list; list = g_list_next (list)) { GladeCatalog *catalog = list->data; gint minor, major; /* Skip if theres only one option */ if (g_list_length (glade_catalog_get_targets (catalog)) <= 1) continue; glade_project_get_target_version (project, glade_catalog_get_name (catalog), &major, &minor); /* Special case to mark GTK+ in upper case */ if (strcmp (glade_catalog_get_name (catalog), "gtk+") == 0) label = gtk_label_new ("GTK+"); else label = gtk_label_new (glade_catalog_get_name (catalog)); gtk_misc_set_alignment (GTK_MISC (label), 0.0F, 0.5F); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 2); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); active_radio = target_radio = NULL; for (targets = glade_catalog_get_targets (catalog); targets; targets = targets->next) { GladeTargetableVersion *version = targets->data; gchar *name = g_strdup_printf ("%d.%d", version->major, version->minor); if (!target_radio) target_radio = gtk_radio_button_new_with_label (NULL, name); else target_radio = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (target_radio), name); g_free (name); g_signal_connect (G_OBJECT (target_radio), "clicked", G_CALLBACK (target_button_clicked), properties); g_object_set_data (G_OBJECT (target_radio), "version", version); g_object_set_data (G_OBJECT (target_radio), "catalog", (gchar *) glade_catalog_get_name (catalog)); gtk_widget_show (target_radio); gtk_box_pack_end (GTK_BOX (hbox), target_radio, TRUE, TRUE, 2); if (major == version->major && minor == version->minor) active_radio = target_radio; } if (active_radio) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (active_radio), TRUE); g_hash_table_insert (priv->target_radios, g_strdup (glade_catalog_get_name (catalog)), gtk_radio_button_get_group (GTK_RADIO_BUTTON (active_radio))); } else g_warning ("Corrupt catalog versions"); gtk_widget_show (hbox); gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 2); } }
void glade_gtk_entry_read_widget (GladeWidgetAdaptor * adaptor, GladeWidget * widget, GladeXmlNode * node) { GladeProperty *property; if (!(glade_xml_node_verify_silent (node, GLADE_XML_TAG_WIDGET) || glade_xml_node_verify_silent (node, GLADE_XML_TAG_TEMPLATE))) return; /* First chain up and read in all the normal properties.. */ GWA_GET_CLASS (GTK_TYPE_WIDGET)->read_widget (adaptor, widget, node); if (!glade_widget_property_original_default (widget, "text")) { property = glade_widget_get_property (widget, "text"); glade_widget_property_set (widget, "use-entry-buffer", FALSE); glade_property_sync (property); } else { gint target_minor, target_major; glade_project_get_target_version (glade_widget_get_project (widget), "gtk+", &target_major, &target_minor); property = glade_widget_get_property (widget, "buffer"); /* Only default to the buffer setting if the project version supports it. */ if (GPC_VERSION_CHECK (glade_property_get_class (property), target_major, target_minor)) { glade_widget_property_set (widget, "use-entry-buffer", TRUE); glade_property_sync (property); } else glade_widget_property_set (widget, "use-entry-buffer", FALSE); } if (!glade_widget_property_original_default (widget, "primary-icon-name")) { property = glade_widget_get_property (widget, "primary-icon-name"); glade_widget_property_set (widget, "primary-icon-mode", GLADE_IMAGE_MODE_ICON); } else if (!glade_widget_property_original_default (widget, "primary-icon-pixbuf")) { property = glade_widget_get_property (widget, "primary-icon-pixbuf"); glade_widget_property_set (widget, "primary-icon-mode", GLADE_IMAGE_MODE_FILENAME); } else /* if (glade_widget_property_original_default (widget, "stock") == FALSE) */ { property = glade_widget_get_property (widget, "primary-icon-stock"); glade_widget_property_set (widget, "primary-icon-mode", GLADE_IMAGE_MODE_STOCK); } glade_property_sync (property); if (!glade_widget_property_original_default (widget, "secondary-icon-name")) { property = glade_widget_get_property (widget, "secondary-icon-name"); glade_widget_property_set (widget, "secondary-icon-mode", GLADE_IMAGE_MODE_ICON); } else if (!glade_widget_property_original_default (widget, "secondary-icon-pixbuf")) { property = glade_widget_get_property (widget, "secondary-icon-pixbuf"); glade_widget_property_set (widget, "secondary-icon-mode", GLADE_IMAGE_MODE_FILENAME); } else /* if (glade_widget_property_original_default (widget, "stock") == FALSE) */ { property = glade_widget_get_property (widget, "secondary-icon-stock"); glade_widget_property_set (widget, "secondary-icon-mode", GLADE_IMAGE_MODE_STOCK); } glade_property_sync (property); if (!glade_widget_property_original_default (widget, "primary-icon-tooltip-markup")) glade_widget_property_set (widget, "glade-primary-tooltip-markup", TRUE); if (!glade_widget_property_original_default (widget, "secondary-icon-tooltip-markup")) glade_widget_property_set (widget, "glade-secondary-tooltip-markup", TRUE); }