X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fmaemo%2Fmodest-platform.c;h=e70eb05d67b49acd6bb204da2ef0a6418af4ac61;hb=7e7be75d6f353df4d1c605d5df3011457f51a926;hp=0456da6df9de848b51c3bf576cb158878ea349e4;hpb=6754695adb4d12d3c2db5f7f819d2d7a78c07334;p=modest diff --git a/src/maemo/modest-platform.c b/src/maemo/modest-platform.c index 0456da6..e70eb05 100644 --- a/src/maemo/modest-platform.c +++ b/src/maemo/modest-platform.c @@ -28,17 +28,24 @@ */ #include +#include #include #include #ifdef MODEST_HILDON_VERSION_0 #include +#include #else #include +#include #endif /*MODEST_HILDON_VERSION_0*/ -#include +#include #include +#include +#include +#include +#include gboolean modest_platform_init (void) @@ -56,7 +63,7 @@ modest_platform_init (void) TnyDevice* modest_platform_get_new_device (void) { - return TNY_DEVICE (tny_maemo_device_new ()); + return TNY_DEVICE (tny_maemo_conic_device_new ()); } @@ -130,6 +137,135 @@ modest_platform_get_file_icon_name (const gchar* name, const gchar* mime_type, return icon_name; } +gboolean +modest_platform_activate_uri (const gchar *uri) +{ + gboolean result; + +#ifdef MODEST_HILDON_VERSION_0 + result = osso_uri_open (uri, NULL, NULL); +#else + result = hildon_uri_open (uri, NULL, NULL); +#endif + + if (!result) + hildon_banner_show_information (NULL, NULL, _("mcen_ib_unsupported_link")); + return result; +} + +typedef struct { + GSList * actions; + gchar *uri; +} ModestPlatformPopupInfo; + +static gboolean +delete_uri_popup (GtkWidget *menu, + GdkEvent *event, + gpointer userdata) +{ + ModestPlatformPopupInfo *popup_info = (ModestPlatformPopupInfo *) userdata; + + g_free (popup_info->uri); +#ifdef MODEST_HILDON_VERSION_0 + osso_uri_free_actions (popup_info->actions); +#else + hildon_uri_free_actions (popup_info->actions); +#endif + return FALSE; +} + +static void +activate_uri_popup_item (GtkMenuItem *menu_item, + gpointer userdata) +{ + GSList *node; + ModestPlatformPopupInfo *popup_info = (ModestPlatformPopupInfo *) userdata; + GtkWidget *label; + + label = gtk_bin_get_child (GTK_BIN (menu_item)); + + 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) { + 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) { + hildon_uri_open (popup_info->uri, action, NULL); + break; + } +#endif + } +} + +gboolean +modest_platform_show_uri_popup (const gchar *uri) +{ + gchar *scheme; + GSList *actions_list; + + 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); +#else + scheme = hildon_uri_get_scheme_from_uri (uri, NULL); + actions_list = hildon_uri_get_actions (scheme, NULL); +#endif + if (actions_list != NULL) { + GSList *node; + GtkWidget *menu = gtk_menu_new (); + ModestPlatformPopupInfo *popup_info = g_new0 (ModestPlatformPopupInfo, 1); + + popup_info->actions = actions_list; + popup_info->uri = g_strdup (uri); + + for (node = actions_list; node != NULL; node = g_slist_next (node)) { + GtkWidget *menu_item; + +#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); + + if (osso_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); + } +#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); + + 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 + + gtk_widget_show (menu_item); + } + 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; +} + GdkPixbuf* modest_platform_get_icon (const gchar *name) @@ -152,4 +288,3 @@ modest_platform_get_icon (const gchar *name) return pixbuf; } -