X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmaemo%2Fmodest-platform.c;h=85c2833384a4fbf212d036ff8787bbdb687eed52;hp=cc30e487a948c5d39b4202790c3d311ab3957fe3;hb=964fa297ed3f4e25f31b46cd8e12235201684f2c;hpb=9d8de13bc46137931a2790969dcb1fb932c7bcc6 diff --git a/src/maemo/modest-platform.c b/src/maemo/modest-platform.c index cc30e48..85c2833 100644 --- a/src/maemo/modest-platform.c +++ b/src/maemo/modest-platform.c @@ -34,7 +34,7 @@ #include #include #include "maemo/modest-maemo-global-settings-dialog.h" - +#include "modest-widget-memory.h" #include #include #include @@ -48,6 +48,8 @@ #include #include +#define HILDON_OSSO_URI_ACTION "uri-action" +#define URI_ACTION_COPY "copy:" static osso_context_t *osso_context = NULL; @@ -216,22 +218,87 @@ modest_platform_get_file_icon_name (const gchar* name, const gchar* mime_type, return icon_name; } + + + +#ifdef MODEST_HILDON_VERSION_0 + gboolean modest_platform_activate_uri (const gchar *uri) { - gboolean result; + OssoURIAction *action; + gboolean result = FALSE; + GSList *actions, *iter = NULL; + const gchar *scheme; + + g_return_val_if_fail (uri, FALSE); + if (!uri) + return FALSE; -#ifdef MODEST_HILDON_VERSION_0 - result = osso_uri_open (uri, NULL, NULL); -#else - result = hildon_uri_open (uri, NULL, NULL); -#endif + /* the default action should be email */ + scheme = osso_uri_get_scheme_from_uri (uri, NULL); + actions = osso_uri_get_actions (scheme, NULL); + + for (iter = actions; iter; iter = g_slist_next (iter)) { + action = (OssoURIAction*) iter->data; + if (action && strcmp (hildon_uri_action_get_service (action), "com.nokia.modest") == 0) { + GError *err = NULL; + result = osso_uri_open (uri, action, &err); + if (!result && err) { + g_printerr ("modest: modest_platform_activate_uri : %s", + err->message ? err->message : "unknown error"); + g_error_free (err); + } + break; + } + } + + if (!result) + hildon_banner_show_information (NULL, NULL, _("mcen_ib_unsupported_link")); + return result; +} + +#else /* MODEST_HILDON_VERSION_0*/ + + +gboolean +modest_platform_activate_uri (const gchar *uri) +{ + HildonURIAction *action; + gboolean result = FALSE; + GSList *actions, *iter = NULL; + const gchar *scheme; + + g_return_val_if_fail (uri, FALSE); + if (!uri) + return FALSE; + /* the default action should be email */ + scheme = hildon_uri_get_scheme_from_uri (uri, NULL); + actions = hildon_uri_get_actions (scheme, NULL); + + for (iter = actions; iter; iter = g_slist_next (iter)) { + action = (HildonURIAction*) iter->data; + if (action && strcmp (hildon_uri_action_get_service (action), "com.nokia.modest") == 0) { + GError *err = NULL; + result = hildon_uri_open (uri, action, &err); + if (!result && err) { + g_printerr ("modest: modest_platform_activate_uri : %s", + err->message ? err->message : "unknown error"); + g_error_free (err); + } + break; + } + } + if (!result) hildon_banner_show_information (NULL, NULL, _("mcen_ib_unsupported_link")); return result; } + +#endif /* MODEST_HILDON_VERSION_0*/ + gboolean modest_platform_activate_file (const gchar *path, const gchar *mime_type) { @@ -269,8 +336,8 @@ modest_platform_activate_file (const gchar *path, const gchar *mime_type) } typedef struct { - GSList * actions; - gchar *uri; + GSList *actions; + gchar *uri; } ModestPlatformPopupInfo; static gboolean @@ -295,20 +362,38 @@ activate_uri_popup_item (GtkMenuItem *menu_item, { GSList *node; ModestPlatformPopupInfo *popup_info = (ModestPlatformPopupInfo *) userdata; - GtkWidget *label; + const gchar* action_name; - label = gtk_bin_get_child (GTK_BIN (menu_item)); + action_name = g_object_get_data (G_OBJECT(menu_item), HILDON_OSSO_URI_ACTION); + if (!action_name) { + g_printerr ("modest: no action name defined\n"); + return; + } + /* special handling for the copy menu item -- copy the uri to the clipboard */ + /* if it's a copy thingy, the uri will look like 'copy:http://slashdot.org' */ + if (g_str_has_prefix (action_name, URI_ACTION_COPY)) { + GtkClipboard *clipboard = gtk_clipboard_get (GDK_NONE); + action_name += strlen(URI_ACTION_COPY); /* jump past the prefix */ + + if (g_str_has_prefix (action_name, "mailto:")) /* ignore mailto: prefixes */ + action_name += strlen ("mailto:"); + + gtk_clipboard_set_text (clipboard, action_name, strlen (action_name)); + return; /* we're done */ + } + + /* now, the real uri-actions... */ for (node = popup_info->actions; node != NULL; node = g_slist_next (node)) { #ifdef MODEST_HILDON_VERSION_0 OssoURIAction *action = (OssoURIAction *) node->data; - if (strcmp (gtk_label_get_text (GTK_LABEL(label)), osso_uri_action_get_name (action))==0) { + if (strcmp (action_name, osso_uri_action_get_name (action))==0) { osso_uri_open (popup_info->uri, action, NULL); break; } #else HildonURIAction *action = (HildonURIAction *) node->data; - if (strcmp (gtk_label_get_text (GTK_LABEL(label)), hildon_uri_action_get_name (action))==0) { + if (strcmp (action_name, hildon_uri_action_get_name (action))==0) { hildon_uri_open (popup_info->uri, action, NULL); break; } @@ -324,6 +409,7 @@ modest_platform_show_uri_popup (const gchar *uri) if (uri == NULL) return FALSE; + #ifdef MODEST_HILDON_VERSION_0 scheme = osso_uri_get_scheme_from_uri (uri, NULL); actions_list = osso_uri_get_actions (scheme, NULL); @@ -341,13 +427,15 @@ modest_platform_show_uri_popup (const gchar *uri) for (node = actions_list; node != NULL; node = g_slist_next (node)) { GtkWidget *menu_item; - + const gchar* action_name; #ifdef MODEST_HILDON_VERSION_0 - OssoURIAction *action; - - action = (OssoURIAction *) node->data; - menu_item = gtk_menu_item_new_with_label (osso_uri_action_get_name (action)); - g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (activate_uri_popup_item), popup_info); + OssoURIAction *action = (OssoURIAction *) node->data; + action_name = osso_uri_action_get_name (action); + menu_item = gtk_menu_item_new_with_label (dgettext("osso-uri",action_name)); + g_object_set_data (G_OBJECT(menu_item), HILDON_OSSO_URI_ACTION, (gpointer)action_name); + /* hack, we add it as a gobject property*/ + g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (activate_uri_popup_item), + popup_info); if (osso_uri_is_default_action (action, NULL)) { gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), menu_item); @@ -355,28 +443,40 @@ modest_platform_show_uri_popup (const gchar *uri) gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); } #else - HildonURIAction *action; - - action = (HildonURIAction *) node->data; - menu_item = gtk_menu_item_new_with_label (hildon_uri_action_get_name (action)); - g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (activate_uri_popup_item), popup_info); - + HildonURIAction *action = (HildonURIAction *) node->data; + action_name = hildon_uri_action_get_name (action); + menu_item = gtk_menu_item_new_with_label (dgettext("osso-uri", action_name)); + g_object_set_data (G_OBJECT(menu_item), HILDON_OSSO_URI_ACTION, (gpointer)action_name); /* hack */ + g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (activate_uri_popup_item), + popup_info); + if (hildon_uri_is_default_action (action, NULL)) { gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), menu_item); } else { gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); } -#endif - +#endif gtk_widget_show (menu_item); } + + /* always add the copy item */ + GtkWidget* menu_item = gtk_menu_item_new_with_label (dgettext("osso-uri", "uri_link_copy_link_location")); + g_object_set_data_full (G_OBJECT(menu_item), HILDON_OSSO_URI_ACTION, + g_strconcat (URI_ACTION_COPY, uri, NULL), + g_free); + g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (activate_uri_popup_item),NULL); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); + gtk_widget_show (menu_item); + + + /* and what to do when the link is deleted */ g_signal_connect (G_OBJECT (menu), "delete-event", G_CALLBACK (delete_uri_popup), popup_info); gtk_menu_popup (GTK_MENU(menu), NULL, NULL, NULL, NULL, 1, gtk_get_current_event_time ()); } else { hildon_banner_show_information (NULL, NULL, _("mcen_ib_unsupported_link")); } - + g_free (scheme); return TRUE; } @@ -796,10 +896,30 @@ modest_platform_get_global_settings_dialog () void modest_platform_on_new_msg (void) { - /* TODO: play sound SR-SND-18 */ - /* TODO: LED lightning pattern */ - /* TODO: update the application icon in the task navigator */ - g_print ("--------------- NEW MESSAGE ARRIVED ---------------\n"); + return; /* TODO: Reenable this later. I disabled it to avoid having one notification per email. */ +#ifndef MODEST_HILDON_VERSION_0 + HildonNotification *not; + + /* Create a new notification. FIXME put the right values, need + some more specs */ + not = hildon_notification_new ("TODO: (new email) Summary", + "TODO: (new email) Description", + "qgn_contact_group_chat_invitation", + "system.note.dialog"); + + /* Play sound SR-SND-18. TODO: play the right file */ +/* hildon_notification_set_sound (not, "/usr/share/sounds/ui-new_email.wav"); */ + + /* Set the led pattern */ + notify_notification_set_hint_int32 (NOTIFY_NOTIFICATION (not), "led-pattern", 3); + + /* Notify. We need to do this in an idle because this function + could be called from a thread */ + if (!notify_notification_show (NOTIFY_NOTIFICATION (not), NULL)) + g_error ("Failed to send notification"); + + g_object_unref (not); +#endif /*MODEST_HILDON_VERSION_0*/ } @@ -840,3 +960,32 @@ modest_platform_show_search_messages (GtkWindow *parent_window) /* TODO: warning about error showing dialog */ } } + +void +modest_platform_show_addressbook (GtkWindow *parent_window) +{ + osso_return_t result = OSSO_ERROR; + + result = osso_rpc_run_with_defaults (osso_context, "osso_addressbook", "top_application", NULL, DBUS_TYPE_INVALID); + + if (result != OSSO_OK) { + /* TODO: warning about error showing dialog */ + } +} + +GtkWidget * +modest_platform_create_folder_view (TnyFolderStoreQuery *query) +{ + GtkWidget *widget = modest_folder_view_new (query); + + /* Show all accounts by default */ + modest_folder_view_set_style (MODEST_FOLDER_VIEW (widget), + MODEST_FOLDER_VIEW_STYLE_SHOW_ONE); + + /* Restore settings */ + modest_widget_memory_restore (modest_runtime_get_conf(), + G_OBJECT (widget), + MODEST_CONF_FOLDER_VIEW_KEY); + + return widget; +}