add a property editor for GtkTreeView and fix crashes with all peditors if
2007-05-18 Jens Granseuer <jensgr@gmx.net> * gconf-property-editor.c: (peditor_boolean_value_changed), (peditor_integer_value_changed), (peditor_string_value_changed), (peditor_color_value_changed), (peditor_select_menu_value_changed), (peditor_combo_box_value_changed), (peditor_select_radio_value_changed), (peditor_numeric_range_value_changed), (peditor_font_value_changed), (peditor_image_value_changed), (gconf_peditor_new_select_radio_with_enum), (peditor_tree_view_value_changed), (peditor_tree_view_widget_changed), (gconf_peditor_new_tree_view): * gconf-property-editor.h: add a property editor for GtkTreeView and fix crashes with all peditors if the requested key is not available svn path=/trunk/; revision=7636
This commit is contained in:
parent
c550a6de32
commit
9bc2394d4e
3 changed files with 129 additions and 30 deletions
|
@ -1,3 +1,19 @@
|
|||
2007-05-18 Jens Granseuer <jensgr@gmx.net>
|
||||
|
||||
* gconf-property-editor.c: (peditor_boolean_value_changed),
|
||||
(peditor_integer_value_changed), (peditor_string_value_changed),
|
||||
(peditor_color_value_changed), (peditor_select_menu_value_changed),
|
||||
(peditor_combo_box_value_changed),
|
||||
(peditor_select_radio_value_changed),
|
||||
(peditor_numeric_range_value_changed),
|
||||
(peditor_font_value_changed), (peditor_image_value_changed),
|
||||
(gconf_peditor_new_select_radio_with_enum),
|
||||
(peditor_tree_view_value_changed),
|
||||
(peditor_tree_view_widget_changed), (gconf_peditor_new_tree_view):
|
||||
* gconf-property-editor.h: add a property editor for GtkTreeView
|
||||
and fix crashes with all peditors if the requested key is not
|
||||
available
|
||||
|
||||
2007-05-09 Jens Granseuer <jensgr@gmx.net>
|
||||
|
||||
* gnome-theme-info.c: (gnome_theme_read_meta_theme):
|
||||
|
|
|
@ -440,9 +440,7 @@ peditor_boolean_value_changed (GConfClient *client,
|
|||
if (peditor->p->changeset != NULL)
|
||||
gconf_change_set_remove (peditor->p->changeset, peditor->p->key);
|
||||
|
||||
value = gconf_entry_get_value (entry);
|
||||
|
||||
if (value != NULL) {
|
||||
if (entry && (value = gconf_entry_get_value (entry))) {
|
||||
value_wid = peditor->p->conv_to_widget_cb (peditor, value);
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (peditor->p->ui_control), gconf_value_get_bool (value_wid));
|
||||
gconf_value_free (value_wid);
|
||||
|
@ -511,9 +509,7 @@ peditor_integer_value_changed (GConfClient *client,
|
|||
if (peditor->p->changeset != NULL)
|
||||
gconf_change_set_remove (peditor->p->changeset, peditor->p->key);
|
||||
|
||||
value = gconf_entry_get_value (entry);
|
||||
|
||||
if (value != NULL) {
|
||||
if (entry && (value = gconf_entry_get_value (entry))) {
|
||||
value_wid = peditor->p->conv_to_widget_cb (peditor, value);
|
||||
entry_current_text = gtk_entry_get_text (GTK_ENTRY (peditor->p->ui_control));
|
||||
entry_current_integer = strtol (entry_current_text, NULL, 10);
|
||||
|
@ -606,9 +602,7 @@ peditor_string_value_changed (GConfClient *client,
|
|||
if (peditor->p->changeset != NULL)
|
||||
gconf_change_set_remove (peditor->p->changeset, peditor->p->key);
|
||||
|
||||
value = gconf_entry_get_value (entry);
|
||||
|
||||
if (value != NULL) {
|
||||
if (entry && (value = gconf_entry_get_value (entry))) {
|
||||
value_wid = peditor->p->conv_to_widget_cb (peditor, value);
|
||||
entry_current_text = gtk_entry_get_text (GTK_ENTRY (peditor->p->ui_control));
|
||||
if (strcmp (entry_current_text, gconf_value_get_string (value)) != 0) {
|
||||
|
@ -724,9 +718,7 @@ peditor_color_value_changed (GConfClient *client,
|
|||
if (peditor->p->changeset != NULL)
|
||||
gconf_change_set_remove (peditor->p->changeset, peditor->p->key);
|
||||
|
||||
value = gconf_entry_get_value (entry);
|
||||
|
||||
if (value != NULL) {
|
||||
if (entry && (value = gconf_entry_get_value (entry))) {
|
||||
value_wid = peditor->p->conv_to_widget_cb (peditor, value);
|
||||
gdk_color_parse (gconf_value_get_string (value_wid), &color);
|
||||
gtk_color_button_set_color (
|
||||
|
@ -890,9 +882,7 @@ peditor_select_menu_value_changed (GConfClient *client,
|
|||
if (peditor->p->changeset != NULL)
|
||||
gconf_change_set_remove (peditor->p->changeset, peditor->p->key);
|
||||
|
||||
value = gconf_entry_get_value (entry);
|
||||
|
||||
if (value != NULL) {
|
||||
if (entry && (value = gconf_entry_get_value (entry))) {
|
||||
value_wid = peditor->p->conv_to_widget_cb (peditor, value);
|
||||
gtk_option_menu_set_history (GTK_OPTION_MENU (peditor->p->ui_control), gconf_value_get_int (value_wid));
|
||||
gconf_value_free (value_wid);
|
||||
|
@ -1008,9 +998,7 @@ peditor_combo_box_value_changed (GConfClient *client,
|
|||
if (peditor->p->changeset != NULL)
|
||||
gconf_change_set_remove (peditor->p->changeset, peditor->p->key);
|
||||
|
||||
value = gconf_entry_get_value (entry);
|
||||
|
||||
if (value != NULL) {
|
||||
if (entry && (value = gconf_entry_get_value (entry))) {
|
||||
value_wid = peditor->p->conv_to_widget_cb (peditor, value);
|
||||
gtk_combo_box_set_active (GTK_COMBO_BOX (peditor->p->ui_control), gconf_value_get_int (value_wid));
|
||||
gconf_value_free (value_wid);
|
||||
|
@ -1128,9 +1116,7 @@ peditor_select_radio_value_changed (GConfClient *client,
|
|||
if (peditor->p->changeset != NULL)
|
||||
gconf_change_set_remove (peditor->p->changeset, peditor->p->key);
|
||||
|
||||
value = gconf_entry_get_value (entry);
|
||||
|
||||
if (value != NULL) {
|
||||
if (entry && (value = gconf_entry_get_value (entry))) {
|
||||
value_wid = peditor->p->conv_to_widget_cb (peditor, value);
|
||||
group = g_slist_copy (gtk_radio_button_get_group (GTK_RADIO_BUTTON (peditor->p->ui_control)));
|
||||
group = g_slist_reverse (group);
|
||||
|
@ -1216,9 +1202,7 @@ peditor_numeric_range_value_changed (GConfClient *client,
|
|||
if (peditor->p->changeset != NULL)
|
||||
gconf_change_set_remove (peditor->p->changeset, peditor->p->key);
|
||||
|
||||
value = gconf_entry_get_value (entry);
|
||||
|
||||
if (value != NULL) {
|
||||
if (entry && (value = gconf_entry_get_value (entry))) {
|
||||
value_wid = peditor->p->conv_to_widget_cb (peditor, value);
|
||||
|
||||
switch (value_wid->type) {
|
||||
|
@ -1406,8 +1390,7 @@ peditor_font_value_changed (GConfClient *client,
|
|||
if (peditor->p->changeset != NULL)
|
||||
gconf_change_set_remove (peditor->p->changeset, peditor->p->key);
|
||||
|
||||
value = gconf_entry_get_value (entry);
|
||||
if (value != NULL) {
|
||||
if (entry && (value = gconf_entry_get_value (entry))) {
|
||||
const gchar *font;
|
||||
|
||||
value_wid = peditor->p->conv_to_widget_cb (peditor, value);
|
||||
|
@ -1789,9 +1772,7 @@ peditor_image_value_changed (GConfClient *client,
|
|||
if (peditor->p->changeset != NULL)
|
||||
gconf_change_set_remove (peditor->p->changeset, peditor->p->key);
|
||||
|
||||
value = gconf_entry_get_value (entry);
|
||||
|
||||
if (value != NULL) {
|
||||
if (entry && (value = gconf_entry_get_value (entry))) {
|
||||
const gchar *filename;
|
||||
|
||||
value_wid = peditor->p->conv_to_widget_cb (peditor, value);
|
||||
|
@ -1886,3 +1867,99 @@ gconf_peditor_new_select_radio_with_enum (GConfChangeSet *changeset,
|
|||
|
||||
return peditor;
|
||||
}
|
||||
|
||||
static void
|
||||
peditor_tree_view_value_changed (GConfClient *client,
|
||||
guint cnxn_id,
|
||||
GConfEntry *entry,
|
||||
GConfPropertyEditor *peditor)
|
||||
{
|
||||
GConfValue *value;
|
||||
|
||||
if (peditor->p->changeset != NULL)
|
||||
gconf_change_set_remove (peditor->p->changeset, peditor->p->key);
|
||||
|
||||
if (entry && (value = gconf_entry_get_value (entry))) {
|
||||
GtkTreeSelection *selection;
|
||||
GConfValue *value_wid;
|
||||
|
||||
selection = gtk_tree_view_get_selection (
|
||||
GTK_TREE_VIEW (peditor->p->ui_control));
|
||||
|
||||
value_wid = peditor->p->conv_to_widget_cb (peditor, value);
|
||||
|
||||
if (value_wid != NULL) {
|
||||
GtkTreePath *path = gtk_tree_path_new_from_string (
|
||||
gconf_value_get_string (value_wid));
|
||||
gtk_tree_selection_select_path (selection, path);
|
||||
gtk_tree_path_free (path);
|
||||
gconf_value_free (value_wid);
|
||||
} else {
|
||||
gtk_tree_selection_unselect_all (selection);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
peditor_tree_view_widget_changed (GConfPropertyEditor *peditor,
|
||||
GtkTreeView *tree_view)
|
||||
{
|
||||
GtkTreeSelection *selection;
|
||||
GtkTreeModel *model;
|
||||
GtkTreeIter iter;
|
||||
GConfValue *value, *value_wid;
|
||||
|
||||
if (!peditor->p->inited) return;
|
||||
|
||||
selection = gtk_tree_view_get_selection (tree_view);
|
||||
|
||||
/* we don't support GTK_SELECTION_MULTIPLE */
|
||||
if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
|
||||
gchar *path;
|
||||
|
||||
path = gtk_tree_model_get_string_from_iter (model, &iter);
|
||||
value_wid = gconf_value_new (GCONF_VALUE_STRING);
|
||||
gconf_value_set_string (value_wid, path);
|
||||
g_free (path);
|
||||
} else
|
||||
value_wid = NULL;
|
||||
|
||||
value = peditor->p->conv_from_widget_cb (peditor, value_wid);
|
||||
peditor_set_gconf_value (peditor, peditor->p->key, value);
|
||||
g_signal_emit (peditor, peditor_signals[VALUE_CHANGED], 0, peditor->p->key, value);
|
||||
gconf_value_free (value_wid);
|
||||
if (value)
|
||||
gconf_value_free (value);
|
||||
}
|
||||
|
||||
GObject *
|
||||
gconf_peditor_new_tree_view (GConfChangeSet *changeset,
|
||||
const gchar *key,
|
||||
GtkWidget *tree_view,
|
||||
const gchar *first_property_name,
|
||||
...)
|
||||
{
|
||||
GObject *peditor;
|
||||
va_list var_args;
|
||||
|
||||
g_return_val_if_fail (key != NULL, NULL);
|
||||
g_return_val_if_fail (tree_view != NULL, NULL);
|
||||
g_return_val_if_fail (GTK_IS_TREE_VIEW (tree_view), NULL);
|
||||
|
||||
va_start (var_args, first_property_name);
|
||||
|
||||
peditor = gconf_peditor_new
|
||||
(key,
|
||||
(GConfClientNotifyFunc) peditor_tree_view_value_changed,
|
||||
changeset,
|
||||
G_OBJECT (tree_view),
|
||||
first_property_name,
|
||||
var_args, NULL);
|
||||
|
||||
va_end (var_args);
|
||||
|
||||
g_signal_connect_swapped (G_OBJECT (tree_view), "cursor-changed",
|
||||
(GCallback) peditor_tree_view_widget_changed, peditor);
|
||||
|
||||
return peditor;
|
||||
}
|
||||
|
|
|
@ -52,7 +52,7 @@ struct _GConfPropertyEditorClass
|
|||
{
|
||||
GObjectClass g_object_class;
|
||||
|
||||
void (*value_changed) (GConfPropertyEditor *peditor, gchar *key, GConfValue *value);
|
||||
void (*value_changed) (GConfPropertyEditor *peditor, gchar *key, const GConfValue *value);
|
||||
};
|
||||
|
||||
GType gconf_property_editor_get_type (void);
|
||||
|
@ -158,6 +158,12 @@ GObject *gconf_peditor_new_image (GConfChangeSet *changeset,
|
|||
const gchar *first_property,
|
||||
...);
|
||||
|
||||
GObject *gconf_peditor_new_tree_view (GConfChangeSet *changeset,
|
||||
const gchar *key,
|
||||
GtkWidget *tree_view,
|
||||
const gchar *first_property_name,
|
||||
...);
|
||||
|
||||
void gconf_peditor_widget_set_guard (GConfPropertyEditor *peditor,
|
||||
GtkWidget *widget);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue