static void glade_eprop_model_data_add_row (GladeEditorProperty * eprop) { GladeEPropModelData *eprop_data = GLADE_EPROP_MODEL_DATA (eprop); GValue value = { 0, }; GNode *node = NULL; GList *columns = NULL; GladeProperty *property = glade_editor_property_get_property (eprop); glade_property_get (property, &node); glade_widget_property_get (glade_property_get_widget (property), "columns", &columns); if (!columns) return; clear_view (eprop); if (!node) node = g_node_new (NULL); else node = glade_model_data_tree_copy (node); append_row (node, columns); eprop_data->adding_row = TRUE; g_value_init (&value, GLADE_TYPE_MODEL_DATA_TREE); g_value_take_boxed (&value, node); glade_editor_property_commit (eprop, &value); g_value_unset (&value); eprop_data->adding_row = FALSE; }
static void update_icon_sources (GladeEditorProperty * eprop, GladeIconSources * icon_sources) { GValue value = { 0, }; g_value_init (&value, GLADE_TYPE_ICON_SOURCES); g_value_take_boxed (&value, icon_sources); glade_editor_property_commit (eprop, &value); g_value_unset (&value); }
static void sync_object (GladeEPropAttrs *eprop_attrs, gboolean use_command) { GList *attributes = NULL; GladeAttribute *gattr; GtkTreeIter iter; PangoAttrType type; AttrEditType edit_type; gchar *strval = NULL; gboolean valid; valid = gtk_tree_model_iter_children (eprop_attrs->model, &iter, NULL); while (valid) { if (!is_empty_row (eprop_attrs->model, &iter)) { gtk_tree_model_get (eprop_attrs->model, &iter, COLUMN_TYPE, &type, COLUMN_EDIT_TYPE, &edit_type, COLUMN_TEXT, &strval, -1); gattr = glade_gtk_attribute_from_string (type, (edit_type == EDIT_TOGGLE) ? "" : strval); strval = (g_free (strval), NULL); attributes = g_list_prepend (attributes, gattr); } valid = gtk_tree_model_iter_next (eprop_attrs->model, &iter); } if (use_command) { GValue value = { 0, }; g_value_init (&value, GLADE_TYPE_ATTR_GLIST); g_value_take_boxed (&value, g_list_reverse (attributes)); glade_editor_property_commit (GLADE_EDITOR_PROPERTY (eprop_attrs), &value); g_value_unset (&value); } else { GladeProperty *property = glade_editor_property_get_property (GLADE_EDITOR_PROPERTY (eprop_attrs)); glade_property_set (property, g_list_reverse (attributes)); glade_attr_list_free (attributes); } }
static gboolean update_string_list_idle (GladeEditorProperty * eprop) { GladeEPropStringList *eprop_string_list = GLADE_EPROP_STRING_LIST (eprop); GValue value = { 0, }; eprop_string_list->want_focus = TRUE; g_value_init (&value, GLADE_TYPE_STRING_LIST); g_value_take_boxed (&value, eprop_string_list->pending_string_list); glade_editor_property_commit (eprop, &value); g_value_unset (&value); eprop_string_list->want_focus = FALSE; eprop_string_list->pending_string_list = NULL; eprop_string_list->update_id = 0; return FALSE; }
static gboolean update_data_tree_idle (GladeEditorProperty * eprop) { GladeEPropModelData *eprop_data = GLADE_EPROP_MODEL_DATA (eprop); GladeProperty *property = glade_editor_property_get_property (eprop); GValue value = { 0, }; g_value_init (&value, GLADE_TYPE_MODEL_DATA_TREE); g_value_take_boxed (&value, eprop_data->pending_data_tree); /* Only commit the value if it changed, otherwise this * can trigger a load.. which we dont handle well in this * editor */ if (!glade_property_equals_value (property, &value)) glade_editor_property_commit (eprop, &value); g_value_unset (&value); eprop_data->pending_data_tree = NULL; return FALSE; }
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_show_dialog (GladeEditorProperty *eprop) { GladeEPropAccel *eprop_accel = GLADE_EPROP_ACCEL (eprop); GtkWidget *dialog, *parent, *vbox, *sw, *tree_view; GValue value = { 0, }; GList *accelerators = NULL; gint res; parent = gtk_widget_get_toplevel (GTK_WIDGET (eprop)); dialog = gtk_dialog_new_with_buttons (_("Choose accelerator keys..."), 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_accel_view (eprop); glade_eprop_accel_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) { gtk_tree_model_foreach (gtk_tree_view_get_model (GTK_TREE_VIEW (tree_view)), (GtkTreeModelForeachFunc) glade_eprop_accel_accum_accelerators, &accelerators); g_value_init (&value, GLADE_TYPE_ACCEL_GLIST); g_value_take_boxed (&value, accelerators); glade_editor_property_commit (eprop, &value); g_value_unset (&value); } else if (res == GLADE_RESPONSE_CLEAR) { g_value_init (&value, GLADE_TYPE_ACCEL_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_accel->model)); eprop_accel->model = NULL; if (eprop_accel->parent_iters) { g_list_foreach (eprop_accel->parent_iters, (GFunc) iter_tab_free, NULL); g_list_free (eprop_accel->parent_iters); eprop_accel->parent_iters = NULL; } }