X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fhildon2%2Fmodest-maemo-utils.c;h=573c78f3f6b84e979bf8b357db55f93e5b8fd944;hb=3e55e9c5905639698baacfbf5072a40874b66bc4;hp=453be778d0089ec29dbfca3b6d9690691d423194;hpb=7c1afddeef34ee1fe24f4fb2a67b3d67b5ba7c47;p=modest diff --git a/src/hildon2/modest-maemo-utils.c b/src/hildon2/modest-maemo-utils.c index 453be77..573c78f 100644 --- a/src/hildon2/modest-maemo-utils.c +++ b/src/hildon2/modest-maemo-utils.c @@ -31,7 +31,6 @@ #define DBUS_API_SUBJECT_TO_CHANGE #endif /*DBUS_API_SUBJECT_TO_CHANGE*/ -#include #include #include #include @@ -55,21 +54,6 @@ #include "modest-ui-constants.h" #include -/* - * For getting and tracking the Bluetooth name - */ -#define BTNAME_SERVICE "org.bluez" -#define BTNAME_REQUEST_IF "org.bluez.Adapter" -#define BTNAME_SIGNAL_IF "org.bluez.Adapter" -#define BTNAME_REQUEST_PATH "/org/bluez/hci0" -#define BTNAME_SIGNAL_PATH "/org/bluez/hci0" - -#define BTNAME_REQ_GET "GetName" -#define BTNAME_SIG_CHANGED "NameChanged" - -#define BTNAME_MATCH_RULE "type='signal',interface='" BTNAME_SIGNAL_IF \ - "',member='" BTNAME_SIG_CHANGED "'" - /* Label child of a captioned */ #define CAPTIONED_LABEL_CHILD "captioned-label" @@ -80,7 +64,7 @@ osso_context_t * modest_maemo_utils_get_osso_context (void) { if (!__osso_context) - g_warning ("%s: __osso_context == NULL", __FUNCTION__); + g_debug ("%s: __osso_context == NULL", __FUNCTION__); return __osso_context; } @@ -92,18 +76,132 @@ modest_maemo_utils_set_osso_context (osso_context_t *osso_context) __osso_context = osso_context; } -void -modest_maemo_utils_get_device_name (void) +static void +get_properties_cb (DBusMessage *message) { - struct utsname name; + DBusMessageIter iter; + DBusMessageIter dict_iter; + DBusMessageIter dict_entry_iter; + DBusError err; + gchar *bt_name = NULL; + int key_type, array_type, msg_type; + + dbus_error_init(&err); + if (dbus_set_error_from_message (&err, message)) { + g_warning ("%s: %s", __FUNCTION__, err.message); + } + + /* Get msg type */ + dbus_message_iter_init (message, &iter); + msg_type = dbus_message_iter_get_arg_type (&iter); + dbus_message_iter_recurse (&iter, &dict_iter); + + while ((array_type = dbus_message_iter_get_arg_type (&dict_iter)) == DBUS_TYPE_DICT_ENTRY) { + + dbus_message_iter_recurse (&dict_iter, &dict_entry_iter); + + while ((key_type = dbus_message_iter_get_arg_type (&dict_entry_iter)) == DBUS_TYPE_STRING) { + DBusMessageIter dict_entry_content_iter; + char *key; + char *value; + int dict_entry_type; + int dict_entry_content_type; + + dbus_message_iter_get_basic (&dict_entry_iter, &key); + dbus_message_iter_next (&dict_entry_iter); + dict_entry_type = dbus_message_iter_get_arg_type (&dict_entry_iter); + dbus_message_iter_recurse (&dict_entry_iter, &dict_entry_content_iter); + dict_entry_content_type = dbus_message_iter_get_arg_type (&dict_entry_content_iter); + + if (dict_entry_content_type == DBUS_TYPE_STRING) { + dbus_message_iter_get_basic ( &dict_entry_content_iter, &value ); - if (uname (&name) == 0) { + if (strcmp (key, "Name") == 0 ) { + g_debug ("-------------Name %s", value); + bt_name = value; + break; + } + } + dbus_message_iter_next (&dict_entry_iter); + } + + if (key_type != DBUS_TYPE_INVALID) + break; + + dbus_message_iter_next (&dict_iter); + } + + /* Save device name */ + if (bt_name) { + g_debug ("Setting the device name %s", bt_name); modest_conf_set_string (modest_runtime_get_conf(), - MODEST_CONF_DEVICE_NAME, name.nodename, + MODEST_CONF_DEVICE_NAME, bt_name, NULL); } } +static void +get_default_adapter_cb (DBusConnection *conn, + DBusMessage *message) +{ + DBusMessageIter iter; + gchar* path = NULL; + DBusError error; + DBusMessage *msg, *adapterMsg; + + dbus_message_iter_init (message, &iter); + dbus_message_iter_get_basic (&iter, &path); + + if (!path) + return; + + adapterMsg = dbus_message_new_method_call ("org.bluez", path, + "org.bluez.Adapter", + "GetProperties"); + + dbus_error_init (&error); + msg = dbus_connection_send_with_reply_and_block (conn, adapterMsg, -1, &error); + if (msg) { + g_debug ("Getting the properties"); + get_properties_cb (msg); + dbus_message_unref (msg); + } + dbus_message_unref (adapterMsg); +} + +void +modest_maemo_utils_get_device_name (void) +{ + static DBusConnection *conn = NULL; + DBusMessage *request; + DBusError error; + DBusMessage *msg; + + dbus_error_init (&error); + if (!conn) { + conn = dbus_bus_get (DBUS_BUS_SYSTEM, &error); + if (!conn) { + g_printerr ("modest: cannot get on the dbus: %s: %s\n", + error.name, error.message); + dbus_error_free (&error); + return; + } + } + + /* Get the default adapter */ + request = dbus_message_new_method_call ("org.bluez", "/" , + "org.bluez.Manager", + "DefaultAdapter"); + + msg = dbus_connection_send_with_reply_and_block (conn, request, -1, &error); + if (msg) { + g_debug ("Getting the default adapter"); + get_default_adapter_cb (conn, msg); + dbus_message_unref (msg); + } + dbus_message_unref (request); +} + void modest_maemo_utils_setup_images_filechooser (GtkFileChooser *chooser) { @@ -241,7 +339,7 @@ modest_maemo_utils_create_captioned_with_size_type (GtkSizeGroup *title_size_ label = gtk_label_new (title); } align = gtk_alignment_new (0.0, 0.0, 1.0, 1.0); - gtk_alignment_set_padding (GTK_ALIGNMENT (align), 0, 0, MODEST_MARGIN_DOUBLE, MODEST_MARGIN_TRIPLE); + gtk_alignment_set_padding (GTK_ALIGNMENT (align), 0, 0, MODEST_MARGIN_DOUBLE, MODEST_MARGIN_DOUBLE); gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); hildon_gtk_widget_set_theme_size (label, HILDON_SIZE_FINGER_HEIGHT); @@ -292,6 +390,28 @@ modest_maemo_utils_captioned_set_label (GtkWidget *captioned, } /** + * modest_maemo_utils_captioned_get_label_widget: + * @captioned: a #GtkWidget built as captioned + * + * obtains the label widget for the captioned + * + * Returns: a #GtkLabel + */ +GtkWidget * +modest_maemo_utils_captioned_get_label_widget (GtkWidget *captioned) +{ + GtkWidget *label; + + g_return_val_if_fail (GTK_IS_WIDGET (captioned), NULL); + + label = g_object_get_data (G_OBJECT (captioned), CAPTIONED_LABEL_CHILD); + g_return_val_if_fail (GTK_IS_LABEL (label), NULL); + + return label; + +} + +/** * modest_maemo_utils_set_hbutton_layout: * @title_sizegroup: a #GtkSizeGroup, or %NULL * @value_sizegroup: a #GtkSizeGroup, or %NULL @@ -388,21 +508,22 @@ modest_maemo_utils_select_attachments (GtkWindow *window, TnyList *att_list, gbo if (TNY_IS_MSG (part)) { TnyHeader *header = tny_msg_get_header (TNY_MSG (part)); filename = tny_header_dup_subject (header); - if ((filename == NULL) || (filename[0] == '\0')) { - g_free (filename); - filename = g_strdup (_("mail_va_no_subject")); - } g_object_unref (header); } else { filename = g_strdup (tny_mime_part_get_filename (part)); } + if ((filename == NULL) || (filename[0] == '\0')) { + g_free (filename); + filename = g_strdup (_("mail_va_no_subject")); + } gtk_list_store_append (GTK_LIST_STORE (model), &iter); gtk_list_store_set (GTK_LIST_STORE (model), &iter, 0, filename, 1, part, -1); attachments_added ++; g_free (filename); - g_object_unref (part); } + g_object_unref (part); } + g_object_unref (iterator); selector = GTK_WIDGET (hildon_touch_selector_new ()); renderer = gtk_cell_renderer_text_new (); @@ -436,6 +557,9 @@ modest_maemo_utils_select_attachments (GtkWindow *window, TnyList *att_list, gbo } if (tny_list_get_length (att_list) == 0) result = FALSE; + + g_list_foreach (selected_rows, (GFunc) gtk_tree_path_free, NULL); + g_list_free (selected_rows); } else { result = FALSE; }