static void glade_gtk_widget_write_atk_relation (GladeProperty * property, GladeXmlContext * context, GladeXmlNode * node) { GladeXmlNode *prop_node; GladePropertyClass *pclass; gchar *value, **split; gint i; if ((value = glade_widget_adaptor_string_from_value (glade_property_class_get_adaptor (glade_property_get_class (property)), glade_property_get_class (property), glade_property_inline_value (property))) != NULL) { if ((split = g_strsplit (value, GPC_OBJECT_DELIMITER, 0)) != NULL) { for (i = 0; split[i] != NULL; i++) { pclass = glade_property_get_class (property); prop_node = glade_xml_node_new (context, GLADE_TAG_A11Y_RELATION); glade_xml_node_append_child (node, prop_node); glade_xml_node_set_property_string (prop_node, GLADE_TAG_A11Y_TYPE, glade_property_class_id (pclass)); glade_xml_node_set_property_string (prop_node, GLADE_TAG_A11Y_TARGET, split[i]); } g_strfreev (split); } } }
void glade_gtk_write_accels (GladeWidget * widget, GladeXmlContext * context, GladeXmlNode * node, gboolean write_signal) { GladeXmlNode *accel_node; GladeProperty *property; GList *list; /* Some child widgets may have disabled the property */ if (!(property = glade_widget_get_property (widget, "accelerator"))) return; for (list = g_value_get_boxed (glade_property_inline_value (property)); list; list = list->next) { GladeAccelInfo *accel = list->data; accel_node = glade_accel_write (accel, context, write_signal); glade_xml_node_append_child (node, accel_node); } }
static gint glade_gtk_action_bar_get_first_blank (GtkActionBar * box) { GList *child, *children; GladeWidget *gwidget; gint position; children = gtk_container_get_children (GTK_CONTAINER (box)); for (child = children, position = 0; child && child->data; child = child->next, position++) { GtkWidget *widget = child->data; if (widget == gtk_action_bar_get_center_widget (GTK_ACTION_BAR (box))) continue; if ((gwidget = glade_widget_get_from_gobject (widget)) != NULL) { gint gwidget_position = 0; GladeProperty *property = glade_widget_get_pack_property (gwidget, "position"); /* property can be NULL here when project is closing */ if (property) gwidget_position = g_value_get_int (glade_property_inline_value (property)); if (gwidget_position > position) break; } } g_list_free (children); return position; }
static void glade_eprop_accel_load (GladeEditorProperty * eprop, GladeProperty * property) { GladeEditorPropertyClass *parent_class = g_type_class_peek_parent (GLADE_EDITOR_PROPERTY_GET_CLASS (eprop)); GladeEPropAccel *eprop_accel = GLADE_EPROP_ACCEL (eprop); gchar *accels; /* Chain up first */ parent_class->load (eprop, property); if (property == NULL) return; if ((accels = glade_accels_make_string (g_value_get_boxed (glade_property_inline_value (property)))) != NULL) { gtk_entry_set_text (GTK_ENTRY (eprop_accel->entry), accels); g_free (accels); } else gtk_entry_set_text (GTK_ENTRY (eprop_accel->entry), ""); }
static void glade_eprop_attrs_populate_view (GladeEditorProperty *eprop, GtkTreeView *view) { GList *attributes, *list; GtkListStore *model = (GtkListStore *) gtk_tree_view_get_model (view); GtkTreeIter *iter; GladeAttribute *gattr; GladeProperty *property; gchar *text; property = glade_editor_property_get_property (eprop); attributes = g_value_get_boxed (glade_property_inline_value (property)); append_empty_row (model, PANGO_ATTR_FONT_DESC); append_empty_row (model, PANGO_ATTR_STYLE); append_empty_row (model, PANGO_ATTR_WEIGHT); append_empty_row (model, PANGO_ATTR_VARIANT); append_empty_row (model, PANGO_ATTR_LANGUAGE); append_empty_row (model, PANGO_ATTR_STRETCH); append_empty_row (model, PANGO_ATTR_SCALE); append_empty_row (model, PANGO_ATTR_UNDERLINE); append_empty_row (model, PANGO_ATTR_STRIKETHROUGH); append_empty_row (model, PANGO_ATTR_FOREGROUND); append_empty_row (model, PANGO_ATTR_BACKGROUND); append_empty_row (model, PANGO_ATTR_UNDERLINE_COLOR); append_empty_row (model, PANGO_ATTR_STRIKETHROUGH_COLOR); append_empty_row (model, PANGO_ATTR_GRAVITY); append_empty_row (model, PANGO_ATTR_GRAVITY_HINT); append_empty_row (model, PANGO_ATTR_SIZE); append_empty_row (model, PANGO_ATTR_ABSOLUTE_SIZE); append_empty_row (model, PANGO_ATTR_SHAPE); /* XXX Populate here ... */ for (list = attributes; list; list = list->next) { gattr = list->data; if ((iter = get_row_by_type (GTK_TREE_MODEL (model), gattr->type))) { text = glade_gtk_string_from_attr (gattr); gtk_list_store_set (GTK_LIST_STORE (model), iter, COLUMN_NAME_WEIGHT, PANGO_WEIGHT_BOLD, COLUMN_TEXT, text, COLUMN_TEXT_STYLE, PANGO_STYLE_NORMAL, COLUMN_TEXT_FG, "Black", -1); if (gattr->type == PANGO_ATTR_UNDERLINE || gattr->type == PANGO_ATTR_STRIKETHROUGH) gtk_list_store_set (GTK_LIST_STORE (model), iter, COLUMN_TOGGLE_DOWN, g_value_get_boolean (&(gattr->value)), -1); g_free (text); gtk_tree_iter_free (iter); } } }
static void glade_eprop_attrs_show_dialog (GtkWidget *dialog_button, GladeEditorProperty *eprop) { GladeEPropAttrs *eprop_attrs = GLADE_EPROP_ATTRS (eprop); GtkWidget *dialog, *parent, *vbox, *sw, *tree_view; GladeProperty *property; GList *old_attributes; gint res; property = glade_editor_property_get_property (eprop); parent = gtk_widget_get_toplevel (GTK_WIDGET (eprop)); /* Keep a copy for commit time... */ old_attributes = g_value_dup_boxed (glade_property_inline_value (property)); dialog = gtk_dialog_new_with_buttons (_("Setup Text Attributes"), GTK_WINDOW (parent), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CLEAR, GLADE_RESPONSE_CLEAR, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); gtk_widget_show (vbox); gtk_container_set_border_width (GTK_CONTAINER (vbox), 6); gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), vbox, TRUE, TRUE, 0); sw = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (sw); gtk_box_pack_start (GTK_BOX (vbox), sw, TRUE, TRUE, 0); gtk_widget_set_size_request (sw, 400, 200); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_IN); tree_view = glade_eprop_attrs_view (eprop); glade_eprop_attrs_populate_view (eprop, GTK_TREE_VIEW (tree_view)); gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view)); gtk_widget_show (tree_view); gtk_container_add (GTK_CONTAINER (sw), tree_view); /* Run the dialog */ res = gtk_dialog_run (GTK_DIALOG (dialog)); if (res == GTK_RESPONSE_OK) { /* Update from old attributes so that there a property change * sitting on the undo stack. */ glade_property_set (property, old_attributes); sync_object (eprop_attrs, TRUE); } else if (res == GLADE_RESPONSE_CLEAR) { GValue value = { 0, }; g_value_init (&value, GLADE_TYPE_ATTR_GLIST); g_value_set_boxed (&value, NULL); glade_editor_property_commit (eprop, &value); g_value_unset (&value); } /* Clean up ... */ gtk_widget_destroy (dialog); g_object_unref (G_OBJECT (eprop_attrs->model)); eprop_attrs->model = NULL; glade_attr_list_free (old_attributes); }
static void glade_eprop_accel_populate_view (GladeEditorProperty * eprop, GtkTreeView * view) { GladeEPropAccel *eprop_accel = GLADE_EPROP_ACCEL (eprop); GladeSignalClass *sclass; GladePropertyClass *pclass = glade_editor_property_get_pclass (eprop); GladeProperty *property = glade_editor_property_get_property (eprop); GladeWidgetAdaptor *adaptor = glade_property_class_get_adaptor (pclass); GtkTreeStore *model = (GtkTreeStore *) gtk_tree_view_get_model (view); GtkTreeIter iter; GladeEpropIterTab *parent_tab; GladeAccelInfo *info; GList *l, *found, *accelerators; gchar *name, *accel_text; const GList *list; accelerators = g_value_get_boxed (glade_property_inline_value (property)); /* First make parent iters... */ for (list = glade_widget_adaptor_get_signals (adaptor); list; list = list->next) { sclass = list->data; /* Special case for GtkAction accelerators */ if (glade_widget_adaptor_get_object_type (adaptor) == GTK_TYPE_ACTION || g_type_is_a (glade_widget_adaptor_get_object_type (adaptor), GTK_TYPE_ACTION)) { if (g_strcmp0 (glade_signal_class_get_type (sclass), "GtkAction") != 0 || g_strcmp0 (glade_signal_class_get_name (sclass), "activate") != 0) continue; } /* Only action signals have accelerators. */ else if ((glade_signal_class_get_flags (sclass) & G_SIGNAL_ACTION) == 0) continue; if (g_list_find_custom (eprop_accel->parent_iters, glade_signal_class_get_type (sclass), (GCompareFunc) eprop_find_iter) == NULL) { gtk_tree_store_append (model, &iter, NULL); gtk_tree_store_set (model, &iter, ACCEL_COLUMN_SIGNAL, glade_signal_class_get_type (sclass), ACCEL_COLUMN_WEIGHT, PANGO_WEIGHT_BOLD, ACCEL_COLUMN_VISIBLE, FALSE, -1); parent_tab = g_new0 (GladeEpropIterTab, 1); parent_tab->name = glade_signal_class_get_type (sclass); parent_tab->iter = gtk_tree_iter_copy (&iter); eprop_accel->parent_iters = g_list_prepend (eprop_accel->parent_iters, parent_tab); } } /* Now we populate... */ for (list = glade_widget_adaptor_get_signals (adaptor); list; list = list->next) { sclass = list->data; /* Special case for GtkAction accelerators */ if (glade_widget_adaptor_get_object_type (adaptor) == GTK_TYPE_ACTION || g_type_is_a (glade_widget_adaptor_get_object_type (adaptor), GTK_TYPE_ACTION)) { if (g_strcmp0 (glade_signal_class_get_type (sclass), "GtkAction") != 0 || g_strcmp0 (glade_signal_class_get_name (sclass), "activate") != 0) continue; } /* Only action signals have accelerators. */ else if ((glade_signal_class_get_flags (sclass) & G_SIGNAL_ACTION) == 0) continue; if ((found = g_list_find_custom (eprop_accel->parent_iters, glade_signal_class_get_type (sclass), (GCompareFunc) eprop_find_iter)) != NULL) { parent_tab = found->data; name = g_strdup_printf (" %s", glade_signal_class_get_name (sclass)); /* Populate from accelerator list */ for (l = accelerators; l; l = l->next) { info = l->data; if (g_strcmp0 (info->signal, glade_signal_class_get_name (sclass))) continue; accel_text = gtk_accelerator_name (info->key, info->modifiers); gtk_tree_store_append (model, &iter, parent_tab->iter); gtk_tree_store_set (model, &iter, ACCEL_COLUMN_SIGNAL, name, ACCEL_COLUMN_REAL_SIGNAL, glade_signal_class_get_name (sclass), ACCEL_COLUMN_TEXT, accel_text, ACCEL_COLUMN_WEIGHT, PANGO_WEIGHT_NORMAL, ACCEL_COLUMN_STYLE, PANGO_STYLE_NORMAL, ACCEL_COLUMN_FOREGROUND, "Black", ACCEL_COLUMN_VISIBLE, TRUE, ACCEL_COLUMN_KEYCODE, info->key, ACCEL_COLUMN_MODIFIERS, info->modifiers, ACCEL_COLUMN_KEY_ENTERED, TRUE, -1); g_free (accel_text); } /* Special case for GtkAction accelerators */ if ((glade_widget_adaptor_get_object_type (adaptor) == GTK_TYPE_ACTION || g_type_is_a (glade_widget_adaptor_get_object_type (adaptor), GTK_TYPE_ACTION)) && g_list_length (accelerators) > 0) continue; /* Append a new empty slot at the end */ gtk_tree_store_append (model, &iter, parent_tab->iter); gtk_tree_store_set (model, &iter, ACCEL_COLUMN_SIGNAL, name, ACCEL_COLUMN_REAL_SIGNAL, glade_signal_class_get_name (sclass), ACCEL_COLUMN_TEXT, _("<choose a key>"), ACCEL_COLUMN_WEIGHT, PANGO_WEIGHT_NORMAL, ACCEL_COLUMN_STYLE, PANGO_STYLE_ITALIC, ACCEL_COLUMN_FOREGROUND, "Grey", ACCEL_COLUMN_VISIBLE, TRUE, ACCEL_COLUMN_KEYCODE, 0, ACCEL_COLUMN_MODIFIERS, 0, ACCEL_COLUMN_KEY_ENTERED, FALSE, -1); g_free (name); } } }