From d5b7d7a78c0fb2e41d5966a0778b08f8d8e35ea4 Mon Sep 17 00:00:00 2001 From: Havoc Pennington Date: Sun, 30 Jan 2005 23:29:50 +0000 Subject: 2005-01-30 Havoc Pennington * tools/dbus-names-model.c (have_names_notify): fix this * dbus/dbus-message.c (_dbus_message_iter_get_args_valist): clean up the string array handling a bit --- ChangeLog | 7 +++++ dbus/dbus-message.c | 49 +++++++++++++++++---------------- tools/dbus-names-model.c | 71 ++++++++---------------------------------------- tools/dbus-viewer.c | 13 ++++++--- 4 files changed, 53 insertions(+), 87 deletions(-) diff --git a/ChangeLog b/ChangeLog index dd4d1753..fe4fd043 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2005-01-30 Havoc Pennington + + * tools/dbus-names-model.c (have_names_notify): fix this + + * dbus/dbus-message.c (_dbus_message_iter_get_args_valist): clean + up the string array handling a bit + 2005-01-30 Havoc Pennington * glib/dbus-glib.c (dbus_g_pending_call_set_notify): new function diff --git a/dbus/dbus-message.c b/dbus/dbus-message.c index 0d816595..46a30b6f 100644 --- a/dbus/dbus-message.c +++ b/dbus/dbus-message.c @@ -1765,7 +1765,7 @@ _dbus_message_iter_get_args_valist (DBusMessageIter *iter, spec_element_type == DBUS_TYPE_OBJECT_PATH) { char ***str_array_p; - int i; + int n_elements; char **str_array; str_array_p = va_arg (var_args, char***); @@ -1777,14 +1777,14 @@ _dbus_message_iter_get_args_valist (DBusMessageIter *iter, /* Count elements in the array */ _dbus_type_reader_recurse (&real->u.reader, &array); - i = 0; - if (_dbus_type_reader_has_next (&array)) + n_elements = 0; + while (_dbus_type_reader_get_current_type (&array) != DBUS_TYPE_INVALID) { - while (_dbus_type_reader_next (&array)) - ++i; + ++n_elements; + _dbus_type_reader_next (&array); } - str_array = dbus_new0 (char*, i + 1); + str_array = dbus_new0 (char*, n_elements + 1); if (str_array == NULL) { _DBUS_SET_OOM (error); @@ -1795,29 +1795,32 @@ _dbus_message_iter_get_args_valist (DBusMessageIter *iter, _dbus_type_reader_recurse (&real->u.reader, &array); i = 0; - if (_dbus_type_reader_has_next (&array)) + while (i < n_elements) { - do + const char *s; + _dbus_type_reader_read_basic (&array, + &s); + + str_array[i] = _dbus_strdup (s); + if (str_array[i] == NULL) { - const char *s; - _dbus_type_reader_read_basic (&array, - &s); - - str_array[i] = _dbus_strdup (s); - if (str_array[i] == NULL) - { - dbus_free_string_array (str_array); - _DBUS_SET_OOM (error); - goto out; - } - - ++i; + dbus_free_string_array (str_array); + _DBUS_SET_OOM (error); + goto out; } - while (_dbus_type_reader_next (&array)); + + ++i; + + if (!_dbus_type_reader_next (&array)) + _dbus_assert (i == n_elements); } + _dbus_assert (_dbus_type_reader_get_current_type (&array) == DBUS_TYPE_INVALID); + _dbus_assert (i == n_elements); + _dbus_assert (str_array[i] == NULL); + *str_array_p = str_array; - *n_elements_p = i; + *n_elements_p = n_elements; } #ifndef DBUS_DISABLE_CHECKS else diff --git a/tools/dbus-names-model.c b/tools/dbus-names-model.c index 09f1236d..4353daa8 100644 --- a/tools/dbus-names-model.c +++ b/tools/dbus-names-model.c @@ -25,63 +25,11 @@ enum { - MODEL_COLUMN_NAME_DATA, + MODEL_COLUMN_NAME, MODEL_COLUMN_LAST }; -typedef struct -{ - int refcount; - char *name; -} NameData; - -static NameData* -name_data_new (const char *name) -{ - NameData *nd; - - nd = g_new0 (NameData, 1); - - nd->refcount = 1; - nd->name = g_strdup (name); - - return nd; -} - -static NameData* -name_data_ref (NameData *nd) -{ - nd->refcount += 1; - return nd; -} - -static void -name_data_unref (NameData *nd) -{ - nd->refcount -= 1; - if (nd->refcount == 0) - { - g_free (nd->name); - g_free (nd); - } -} - -static GType -name_data_get_gtype (void) -{ - static GType our_type = 0; - - if (our_type == 0) - our_type = g_boxed_type_register_static ("NameData", - (GBoxedCopyFunc) name_data_ref, - (GBoxedFreeFunc) name_data_unref); - - return our_type; -} - -#define NAME_DATA_TYPE (name_data_get_gtype()) - typedef struct NamesModel NamesModel; typedef struct NamesModelClass NamesModelClass; @@ -134,26 +82,29 @@ have_names_notify (DBusGPendingCall *call, g_assert (error != NULL); g_printerr (_("Failed to load names on the bus: %s\n"), error->message); + g_error_free (error); return; } i = 0; while (names[i]) { - NameData *nd; GtkTreeIter iter; - - nd = name_data_new (names[i]); + g_assert (i < n_elements); + +#if 0 + g_printerr ("%d of %d: %s\n", + i, n_elements, names[i]); +#endif + gtk_tree_store_append (GTK_TREE_STORE (names_model), &iter, NULL); gtk_tree_store_set (GTK_TREE_STORE (names_model), &iter, - MODEL_COLUMN_NAME_DATA, nd, + MODEL_COLUMN_NAME, names[i], -1); - - name_data_unref (nd); ++i; } @@ -315,7 +266,7 @@ names_model_init (NamesModel *names_model) tree_store = GTK_TREE_STORE (names_model); - types[0] = NAME_DATA_TYPE; + types[0] = G_TYPE_STRING; /* name */ gtk_tree_store_set_column_types (tree_store, MODEL_COLUMN_LAST, types); } diff --git a/tools/dbus-viewer.c b/tools/dbus-viewer.c index 524030c6..41660135 100644 --- a/tools/dbus-viewer.c +++ b/tools/dbus-viewer.c @@ -76,22 +76,27 @@ tree_window_new (DBusGConnection *connection, vbox = gtk_vbox_new (FALSE, 6); gtk_container_add (GTK_CONTAINER (w->window), vbox); - - hbox = gtk_hbox_new (FALSE, 6); - gtk_container_add (GTK_CONTAINER (vbox), hbox); - /* Create names option menu */ if (connection) { + GtkCellRenderer *cell; w->names_model = names_model; combo = gtk_combo_box_new_with_model (w->names_model); + cell = gtk_cell_renderer_text_new (); + gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), cell, TRUE); + gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), cell, + "text", 0, + NULL); + gtk_box_pack_start (GTK_BOX (vbox), combo, FALSE, FALSE, 0); } /* Create tree view */ + hbox = gtk_hbox_new (FALSE, 6); + gtk_container_add (GTK_CONTAINER (vbox), hbox); sw = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), -- cgit