+
+void
+modest_maemo_utils_setup_images_filechooser (GtkFileChooser *chooser)
+{
+ gchar *images_folder;
+ GtkFileFilter *file_filter;
+ GList *image_mimetypes_list;
+ GList *node;
+
+ g_return_if_fail (GTK_IS_FILE_CHOOSER (chooser));
+
+ /* Set the default folder to images folder */
+ images_folder = g_build_filename (g_get_home_dir (),
+ MODEST_MAEMO_UTILS_MYDOCS_FOLDER,
+ MODEST_MAEMO_UTILS_DEFAULT_IMAGE_FOLDER, NULL);
+ gtk_file_chooser_set_current_folder (chooser, images_folder);
+ g_free (images_folder);
+
+ /* Set the images mime filter */
+ file_filter = gtk_file_filter_new ();
+#ifdef MODEST_HAVE_HILDON0_WIDGETS
+ image_mimetypes_list = osso_mime_get_mime_types_for_category (OSSO_MIME_CATEGORY_IMAGES);
+#else
+ image_mimetypes_list = hildon_mime_get_mime_types_for_category (HILDON_MIME_CATEGORY_IMAGES);
+#endif
+ for (node = image_mimetypes_list; node != NULL; node = g_list_next (node)) {
+ gtk_file_filter_add_mime_type (file_filter, node->data);
+ }
+ gtk_file_chooser_set_filter (chooser, file_filter);
+#ifdef MODEST_HAVE_HILDON0_WIDGETS
+ osso_mime_types_list_free (image_mimetypes_list);
+#else
+ hildon_mime_types_list_free (image_mimetypes_list);
+#endif
+
+}
+
+static void
+on_response (GtkDialog *dialog, gint response, gpointer user_data)
+{
+ /* Just destroy the dialog: */
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+}
+
+void
+modest_maemo_show_information_note_and_forget (GtkWindow *parent_window, const gchar* message)
+{
+ GtkDialog *dialog = GTK_DIALOG (hildon_note_new_information (parent_window, message));
+
+ /* Destroy the dialog when it is closed: */
+ g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (on_response), NULL);
+ gtk_widget_show (GTK_WIDGET (dialog));
+}
+
+#if 0
+static void
+on_hide (GtkDialog *dialog, gpointer user_data)
+{
+ /* Just destroy the dialog: */
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+}
+#endif
+
+#if 0 /* Not used now. */
+/* user_data for the idle callback: */
+typedef struct
+{
+ GtkWindow *parent_window;
+ gchar *message;
+} ModestIdleNoteInfo;
+
+static gboolean
+on_idle_show_information(gpointer user_data)
+{
+ ModestIdleNoteInfo *info = (ModestIdleNoteInfo*)user_data;
+
+ modest_maemo_show_information_note_and_forget (info->parent_window, info->message);
+
+ g_free (info->message);
+ g_slice_free (ModestIdleNoteInfo, info);
+
+ return FALSE; /* Don't call this again. */
+}
+
+void modest_maemo_show_information_note_in_main_context_and_forget (GtkWindow *parent_window, const gchar* message)
+{
+ ModestIdleNoteInfo *info = g_slice_new (ModestIdleNoteInfo);
+ info->parent_window = parent_window;
+ info->message = g_strdup (message);
+
+ g_idle_add (on_idle_show_information, info);
+}
+#endif
+
+void modest_maemo_show_dialog_and_forget (GtkWindow *parent_window, GtkDialog *dialog)
+{
+ gtk_window_set_transient_for (GTK_WINDOW (dialog), parent_window);
+
+ /* Destroy the dialog when it is closed: */
+ g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (on_response), NULL);
+ gtk_widget_show (GTK_WIDGET (dialog));
+}
+
+
+
+void
+modest_maemo_set_thumbable_scrollbar (GtkScrolledWindow *win, gboolean thumbable)
+{
+ g_return_if_fail (GTK_IS_SCROLLED_WINDOW(win));
+#ifdef MODEST_HAVE_HILDON1_WIDGETS
+ hildon_helper_set_thumb_scrollbar (win, thumbable);
+#endif /* MODEST_HAVE_HILDON1_WIDGETS */
+}
+
+void
+modest_maemo_toggle_action_set_active_block_notify (GtkToggleAction *action, gboolean value)
+{
+ GSList *proxies = NULL;
+
+ g_return_if_fail (GTK_IS_TOGGLE_ACTION (action));
+
+ for (proxies = gtk_action_get_proxies (GTK_ACTION (action));
+ proxies != NULL; proxies = g_slist_next (proxies)) {
+ GtkWidget *widget = (GtkWidget *) proxies->data;
+ gtk_action_block_activate_from (GTK_ACTION (action), widget);
+ }
+
+ gtk_toggle_action_set_active (action, value);
+
+ for (proxies = gtk_action_get_proxies (GTK_ACTION (action));
+ proxies != NULL; proxies = g_slist_next (proxies)) {
+ GtkWidget *widget = (GtkWidget *) proxies->data;
+ gtk_action_unblock_activate_from (GTK_ACTION (action), widget);
+ }
+
+}