X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fhildon2%2Fmodest-maemo-utils.c;h=0ef4d777bfa939af305723938324fad3a82996de;hb=44143a5711bcd5af30f336d19d472077d7494f3a;hp=585f35b5d77eee4a5eaf67aa5aab5a627d5d96e0;hpb=00ae0c2e5c1602c2f8b83efbb753a7c174e0e19a;p=modest diff --git a/src/hildon2/modest-maemo-utils.c b/src/hildon2/modest-maemo-utils.c index 585f35b..0ef4d77 100644 --- a/src/hildon2/modest-maemo-utils.c +++ b/src/hildon2/modest-maemo-utils.c @@ -31,6 +31,7 @@ #define DBUS_API_SUBJECT_TO_CHANGE #endif /*DBUS_API_SUBJECT_TO_CHANGE*/ +#include #include #include #include @@ -52,6 +53,7 @@ #include "modest-text-utils.h" #include "modest-platform.h" #include "modest-ui-constants.h" +#include /* * For getting and tracking the Bluetooth name @@ -79,7 +81,7 @@ modest_maemo_utils_get_osso_context (void) { if (!__osso_context) g_warning ("%s: __osso_context == NULL", __FUNCTION__); - + return __osso_context; } @@ -90,111 +92,18 @@ modest_maemo_utils_set_osso_context (osso_context_t *osso_context) __osso_context = osso_context; } -static void -update_device_name_from_msg (DBusMessage *message) +void +modest_maemo_utils_get_device_name (void) { - DBusError error; - DBusMessageIter iter; + struct utsname name; - dbus_error_init (&error); - - if (dbus_set_error_from_message (&error, message)) { - g_printerr ("modest: failed to get bluetooth name: %s\n", error.message); - dbus_error_free (&error); - } else { - const gchar *device_name; - if (!dbus_message_iter_init (message, &iter)) { - g_printerr ("modest: message did not have argument\n"); - return; - } - dbus_message_iter_get_basic (&iter, &device_name); + if (uname (&name) == 0) { modest_conf_set_string (modest_runtime_get_conf(), - MODEST_CONF_DEVICE_NAME, device_name, + MODEST_CONF_DEVICE_NAME, name.nodename, NULL); } } - -static void -on_device_name_received (DBusPendingCall *call, void *user_data) -{ - DBusMessage *message; - - g_return_if_fail (dbus_pending_call_get_completed (call)); - - message = dbus_pending_call_steal_reply (call); - if (!message) { - g_printerr ("modest: no reply on device name query\n"); - return; - } - - update_device_name_from_msg (message); - dbus_message_unref (message); -} - - -static DBusHandlerResult -handle_dbus_signal (DBusConnection *conn, DBusMessage *msg, gpointer data) -{ - if (dbus_message_is_signal(msg, BTNAME_SIGNAL_IF, BTNAME_SIG_CHANGED)) - update_device_name_from_msg (msg); - - return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; -} - - -static void -get_device_name_from_dbus () -{ - static DBusConnection *conn = NULL; - DBusMessage *request; - DBusError error; - DBusPendingCall *call = NULL; - - 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; - } - } - - request = dbus_message_new_method_call (BTNAME_SERVICE, BTNAME_REQUEST_PATH, - BTNAME_REQUEST_IF, BTNAME_REQ_GET); - if (!request) { - /* should we free the connection? */ - g_printerr ("modest: dbus_message_new_method_call failed\n"); - return; - } - dbus_message_set_auto_start (request, TRUE); - if (dbus_connection_send_with_reply (conn, request, &call, -1)) { - dbus_pending_call_set_notify (call, on_device_name_received, - NULL, NULL); - dbus_pending_call_unref (call); - } - dbus_message_unref (request); - - dbus_connection_setup_with_g_main (conn, NULL); - dbus_bus_add_match (conn, BTNAME_MATCH_RULE, &error); - if (dbus_error_is_set(&error)) { - g_printerr ("modest: dbus_bus_add_match failed: %s\n", error.message); - dbus_error_free (&error); - } - - if (!dbus_connection_add_filter(conn, handle_dbus_signal, NULL, NULL)) - g_printerr ("modest: dbus_connection_add_filter failed\n"); -} - - -void -modest_maemo_utils_get_device_name (void) -{ - get_device_name_from_dbus (); -} - void modest_maemo_utils_setup_images_filechooser (GtkFileChooser *chooser) { @@ -241,30 +150,38 @@ modest_maemo_set_thumbable_scrollbar (GtkScrolledWindow *win, } FILE* -modest_maemo_open_mcc_mapping_file (void) +modest_maemo_open_mcc_mapping_file (gboolean *translated) { - FILE* result; - + FILE* result = NULL; const gchar* path; - const gchar* path1 = MODEST_OPERATOR_WIZARD_MCC_MAPPING; + gchar *path1 = g_strdup_printf ("%s.%s", MODEST_OPERATOR_WIZARD_MCC_MAPPING, getenv("LANG")); const gchar* path2 = MODEST_MCC_MAPPING; - - if (access(path1, R_OK) == 0) + + if (translated) + *translated = TRUE; + + if (access (path1, R_OK) == 0) { path = path1; - else if (access(path2, R_OK) == 0) + } else if (access (MODEST_OPERATOR_WIZARD_MCC_MAPPING, R_OK) == 0) { + path = MODEST_OPERATOR_WIZARD_MCC_MAPPING; + if (translated) + *translated = FALSE; + } else if (access (path2, R_OK) == 0) { path = path2; - else { + } else { g_warning ("%s: neither '%s' nor '%s' is a readable mapping file", __FUNCTION__, path1, path2); - return NULL; + goto end; } - + result = fopen (path, "r"); if (!result) { g_warning ("%s: error opening mapping file '%s': %s", __FUNCTION__, path, strerror(errno)); - return NULL; + goto end; } + end: + g_free (path1); return result; } @@ -343,6 +260,7 @@ modest_maemo_utils_create_captioned_with_size_type (GtkSizeGroup *title_size_ HildonSizeType size_type) { GtkWidget *label; + GtkWidget *align; GtkWidget *box; if (use_markup) { @@ -351,14 +269,18 @@ modest_maemo_utils_create_captioned_with_size_type (GtkSizeGroup *title_size_ } else { 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_label_set_line_wrap (GTK_LABEL (label), TRUE); hildon_gtk_widget_set_theme_size (label, HILDON_SIZE_FINGER_HEIGHT); gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); gtk_widget_show (label); - box = gtk_hbox_new (FALSE, MODEST_MARGIN_HALF); - gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, MODEST_MARGIN_HALF); - gtk_box_pack_start (GTK_BOX (box), control, TRUE, TRUE, MODEST_MARGIN_HALF); + gtk_widget_show (align); + box = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (align), label); + gtk_box_pack_start (GTK_BOX (box), align, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (box), control, TRUE, TRUE, 0); if (title_size_group) gtk_size_group_add_widget (title_size_group, label); if (value_size_group) @@ -459,3 +381,92 @@ modest_maemo_utils_create_group_box (const gchar *label_text, GtkWidget *content return box; } + +static gboolean match_all (TnyList *list, GObject *item, gpointer match_data) +{ + return TRUE; +} + +gboolean +modest_maemo_utils_select_attachments (GtkWindow *window, TnyList *att_list, gboolean include_msgs) +{ + GtkTreeModel *model; + TnyIterator *iterator; + GtkWidget *selector; + GtkCellRenderer *renderer; + GtkWidget *dialog; + gint response; + gboolean result = TRUE; + + model = GTK_TREE_MODEL (gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_OBJECT)); + for (iterator = tny_list_create_iterator (att_list); + !tny_iterator_is_done (iterator); + tny_iterator_next (iterator)) { + GtkTreeIter iter; + TnyMimePart *part; + gchar *label; + gchar *filename = NULL; + + part = (TnyMimePart *) tny_iterator_get_current (iterator); + + /* Ignore purged attachments and messages if ignore is + set to TRUE */ + if (!(tny_mime_part_is_purged (part) || + (TNY_IS_MSG (part) && !include_msgs))) { + + if (TNY_IS_MSG (part)) { + TnyHeader *header = tny_msg_get_header (TNY_MSG (part)); + filename = tny_header_dup_subject (header); + g_object_unref (header); + } else { + filename = g_strdup (tny_mime_part_get_filename (part)); + } + label = g_strconcat (filename, NULL); + gtk_list_store_append (GTK_LIST_STORE (model), &iter); + gtk_list_store_set (GTK_LIST_STORE (model), &iter, 0, label, 1, part, -1); + g_free (label); + g_object_unref (part); + } + } + + selector = GTK_WIDGET (hildon_touch_selector_new ()); + renderer = gtk_cell_renderer_text_new (); + hildon_touch_selector_append_column (HILDON_TOUCH_SELECTOR (selector), model, renderer, + "text", 0, NULL); + hildon_touch_selector_set_column_selection_mode (HILDON_TOUCH_SELECTOR (selector), + HILDON_TOUCH_SELECTOR_SELECTION_MODE_MULTIPLE); + + dialog = hildon_picker_dialog_new (window); + gtk_window_set_title (GTK_WINDOW (dialog), _("mcen_ti_select_attachment_title")); + hildon_picker_dialog_set_selector (HILDON_PICKER_DIALOG (dialog), HILDON_TOUCH_SELECTOR (selector)); + hildon_picker_dialog_set_done_label (HILDON_PICKER_DIALOG (dialog), _HL("wdgt_bd_done")); + + response = gtk_dialog_run (GTK_DIALOG (dialog)); + + if (response == GTK_RESPONSE_OK) { + GList *selected_rows, *node; + + tny_list_remove_matches (att_list, match_all, NULL); + selected_rows = hildon_touch_selector_get_selected_rows (HILDON_TOUCH_SELECTOR (selector), 0); + for (node = selected_rows; node != NULL; node = g_list_next (node)) { + GtkTreePath *path; + GObject *selected; + GtkTreeIter iter; + + path = (GtkTreePath *) node->data; + gtk_tree_model_get_iter (model, &iter, path); + gtk_tree_model_get (model, &iter, 1, &selected, -1); + tny_list_append (att_list, selected); + } + if (tny_list_get_length (att_list) == 0) + result = FALSE; + } else { + result = FALSE; + } + + gtk_widget_destroy (dialog); + + g_object_unref (model); + + return result; +}