diff options
author | Matthew Barnes <mbarnes@redhat.com> | 2009-05-28 12:47:04 +0800 |
---|---|---|
committer | Matthew Barnes <mbarnes@redhat.com> | 2009-05-28 12:47:04 +0800 |
commit | 71db41ef693bb3444cb9b459ef73fb5bdb0d4764 (patch) | |
tree | 2efdf42db136980c34afb58d92633786e2ce203a | |
parent | 948235c3d1076dbe6ed2e57a24c16a083bbd9f01 (diff) | |
download | gsoc2013-evolution-71db41ef693bb3444cb9b459ef73fb5bdb0d4764.tar.gz gsoc2013-evolution-71db41ef693bb3444cb9b459ef73fb5bdb0d4764.tar.zst gsoc2013-evolution-71db41ef693bb3444cb9b459ef73fb5bdb0d4764.zip |
Get the mailer's URI popup menu working.
Except for "Add to Address Book", which looks like a project unto
itself. This also kills off another plugin (copy-tool).
-rw-r--r-- | configure.ac | 5 | ||||
-rw-r--r-- | mail/e-mail-display.c | 489 | ||||
-rw-r--r-- | mail/e-mail-display.h | 16 | ||||
-rw-r--r-- | mail/e-mail-reader.c | 183 | ||||
-rw-r--r-- | mail/em-folder-browser.c | 62 | ||||
-rw-r--r-- | mail/em-folder-view.c | 190 | ||||
-rw-r--r-- | plugins/copy-tool/ChangeLog | 67 | ||||
-rw-r--r-- | plugins/copy-tool/Makefile.am | 20 | ||||
-rw-r--r-- | plugins/copy-tool/copy-tool.c | 71 | ||||
-rw-r--r-- | plugins/copy-tool/org-gnome-copy-tool.eplug.xml | 24 | ||||
-rw-r--r-- | ui/evolution-mail-reader.ui | 8 |
11 files changed, 717 insertions, 418 deletions
diff --git a/configure.ac b/configure.ac index 6a4826cd49..12650c47ed 100644 --- a/configure.ac +++ b/configure.ac @@ -1807,7 +1807,7 @@ plugins_base_always="calendar-file calendar-http $CALENDAR_WEATHER itip-formatte plugins_base="$plugins_base_always $SA_JUNK_PLUGIN $BF_JUNK_PLUGIN $EXCHANGE_PLUGIN $MONO_PLUGIN " all_plugins_base="$plugins_base_always sa-junk-plugin bogo-junk-plugin exchange-operations mono" -plugins_standard_always="bbdb subject-thread save-calendar copy-tool mail-to-task audio-inline mailing-list-actions default-mailer prefer-plain mail-notification attachment-reminder face backup-restore email-custom-header templates pst-import vcard-inline" +plugins_standard_always="bbdb subject-thread save-calendar mail-to-task audio-inline mailing-list-actions default-mailer prefer-plain mail-notification attachment-reminder face backup-restore email-custom-header templates pst-import vcard-inline" plugins_standard="$plugins_standard_always" all_plugins_standard="$plugins_standard" @@ -1817,7 +1817,7 @@ plugins_experimental="$plugins_experimental_always $IPOD_SYNC $TNEF_ATTACHMENTS all_plugins_experimental="$plugins_experimental_always ipod-sync tnef-attachments" dnl Temporary KILL-BONOBO hack -enable_plugins="attachment-reminder addressbook-file audio-inline bbdb bogo-junk-plugin caldav calendar-file calendar-http copy-tool default-source external-editor google-account-setup hula-account-setup imap-features mail-notification mark-all-read plugin-manager profiler sa-junk-plugin save-calendar subject-thread $TNEF_ATTACHMENTS vcard-inline webdav-account-setup" +enable_plugins="attachment-reminder addressbook-file audio-inline bbdb bogo-junk-plugin caldav calendar-file calendar-http default-source external-editor google-account-setup hula-account-setup imap-features mail-notification mark-all-read plugin-manager profiler sa-junk-plugin save-calendar subject-thread $TNEF_ATTACHMENTS vcard-inline webdav-account-setup" dnl PLUGINS NOT BUILDING YET dnl ------------------------ @@ -2132,7 +2132,6 @@ plugins/caldav/Makefile plugins/calendar-file/Makefile plugins/calendar-http/Makefile plugins/calendar-weather/Makefile -plugins/copy-tool/Makefile plugins/default-mailer/Makefile plugins/default-source/Makefile plugins/email-custom-header/Makefile diff --git a/mail/e-mail-display.c b/mail/e-mail-display.c index 95073305af..3719dc09f1 100644 --- a/mail/e-mail-display.c +++ b/mail/e-mail-display.c @@ -21,10 +21,14 @@ #include "e-mail-display.h" +#include <config.h> #include <string.h> #include <glib/gi18n.h> #include "e-util/e-util.h" +#include "e-util/e-plugin-ui.h" +#include "mail/em-composer-utils.h" +#include "mail/em-utils.h" #define E_MAIL_DISPLAY_GET_PRIVATE(obj) \ (G_TYPE_INSTANCE_GET_PRIVATE \ @@ -32,13 +36,16 @@ struct _EMailDisplayPrivate { EMFormatHTML *formatter; + GtkUIManager *ui_manager; + gchar *selected_uri; }; enum { PROP_0, PROP_ANIMATE, PROP_CARET_MODE, - PROP_FORMATTER + PROP_FORMATTER, + PROP_SELECTED_URI }; enum { @@ -50,6 +57,188 @@ enum { static gpointer parent_class; static guint signals[LAST_SIGNAL]; +static const gchar *ui = +"<ui>" +" <popup name='context'>" +" <menuitem action='http-open'/>" +" <menuitem action='send-message'/>" +" <menuitem action='uri-copy'/>" +" <menuitem action='add-to-address-book'/>" +" <menuitem action='mailto-copy'/>" +" <menu action='search-folder-menu'>" +" <menuitem action='search-folder-sender'/>" +" <menuitem action='search-folder-recipient'/>" +" </menu>" +" </popup>" +"</ui>"; + +static void +action_add_to_address_book_cb (GtkAction *action, + EMailDisplay *display) +{ + CamelURL *curl; + const gchar *uri; + gpointer parent; + + parent = gtk_widget_get_toplevel (GTK_WIDGET (display)); + parent = GTK_WIDGET_TOPLEVEL (parent) ? parent : NULL; + + uri = e_mail_display_get_selected_uri (display); + g_return_if_fail (uri != NULL); + + /* This should work because we checked it in update_actions(). */ + curl = camel_url_new (uri, NULL); + g_return_if_fail (curl != NULL); + + if (curl->path != NULL && *curl->path != '\0') + em_utils_add_address (parent, curl->path); + + camel_url_free (curl); +} + +static void +action_http_open_cb (GtkAction *action, + EMailDisplay *display) +{ + const gchar *uri; + gpointer parent; + + parent = gtk_widget_get_toplevel (GTK_WIDGET (display)); + parent = GTK_WIDGET_TOPLEVEL (parent) ? parent : NULL; + + uri = e_mail_display_get_selected_uri (display); + g_return_if_fail (uri != NULL); + + e_show_uri (parent, uri); +} + +static void +action_mailto_copy_cb (GtkAction *action, + EMailDisplay *display) +{ + CamelURL *curl; + CamelInternetAddress *inet_addr; + GtkClipboard *clipboard; + const gchar *uri; + gchar *text; + + clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD); + uri = e_mail_display_get_selected_uri (display); + g_return_if_fail (uri != NULL); + + /* This should work because we checked it in update_actions(). */ + curl = camel_url_new (uri, NULL); + g_return_if_fail (curl != NULL); + + inet_addr = camel_internet_address_new (); + camel_address_decode (CAMEL_ADDRESS (inet_addr), curl->path); + text = camel_address_encode (CAMEL_ADDRESS (inet_addr)); + if (text == NULL || *text == '\0') + text = g_strdup (uri + strlen ("mailto:")); + + camel_object_unref (inet_addr); + camel_url_free (curl); + + gtk_clipboard_set_text (clipboard, text, -1); + gtk_clipboard_store (clipboard); + + g_free (text); +} + +static void +action_send_message_cb (GtkAction *action, + EMailDisplay *display) +{ + const gchar *uri; + + uri = e_mail_display_get_selected_uri (display); + g_return_if_fail (uri != NULL); + + em_utils_compose_new_message_with_mailto (uri, NULL); +} + +static void +action_uri_copy_cb (GtkAction *action, + EMailDisplay *display) +{ + GtkClipboard *clipboard; + const gchar *uri; + + clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD); + uri = e_mail_display_get_selected_uri (display); + g_return_if_fail (uri != NULL); + + gtk_clipboard_set_text (clipboard, uri, -1); + gtk_clipboard_store (clipboard); +} + +static GtkActionEntry uri_entries[] = { + + { "uri-copy", + GTK_STOCK_COPY, + N_("_Copy Link Location"), + NULL, + NULL, /* XXX Add a tooltip! */ + G_CALLBACK (action_uri_copy_cb) }, +}; + +static GtkActionEntry http_entries[] = { + + { "http-open", + "emblem-web", + N_("_Open Link in Browser"), + NULL, + NULL, /* XXX Add a tooltip! */ + G_CALLBACK (action_http_open_cb) }, +}; + +static GtkActionEntry mailto_entries[] = { + + { "add-to-address-book", + "contact-new", + N_("_Add to Address Book"), + NULL, + NULL, /* XXX Add a tooltip! */ + G_CALLBACK (action_add_to_address_book_cb) }, + + { "mailto-copy", + GTK_STOCK_COPY, + N_("_Copy Email Address"), + NULL, + NULL, /* XXX Add a tooltip! */ + G_CALLBACK (action_mailto_copy_cb) }, + + { "search-folder-recipient", + NULL, + N_("_To This Address"), + NULL, + NULL, /* XXX Add a tooltip! */ + NULL /* Handled by EMailReader */ }, + + { "search-folder-sender", + NULL, + N_("_From This Address"), + NULL, + NULL, /* XXX Add a tooltip! */ + NULL /* Handled by EMailReader */ }, + + { "send-message", + "mail-message-new", + N_("_Send New Message To..."), + NULL, + NULL, /* XXX Add a tooltip! */ + G_CALLBACK (action_send_message_cb) }, + + /*** Menus ***/ + + { "search-folder-menu", + "folder-saved-search", + N_("Create Search _Folder"), + NULL, + NULL, + NULL } +}; + static gboolean mail_display_emit_popup_event (EMailDisplay *display, GdkEventButton *event, @@ -78,16 +267,15 @@ mail_display_emit_status_message (EMailDisplay *display, static void mail_display_get_uri_puri (EMailDisplay *display, GdkEventButton *event, + GtkHTML *html, gchar **uri, EMFormatPURI **puri) { EMFormat *formatter; - GtkHTML *html; gchar *text_uri; gchar *image_uri; gboolean is_cid; - html = GTK_HTML (display); formatter = EM_FORMAT (display->priv->formatter); if (event != NULL) { @@ -107,7 +295,7 @@ mail_display_get_uri_puri (EMailDisplay *display, temp = g_strconcat ("file://", image_uri, NULL); g_free (image_uri); - temp = image_uri; + image_uri = temp; } } @@ -139,6 +327,35 @@ mail_display_get_uri_puri (EMailDisplay *display, g_free (image_uri); } +static gboolean +mail_display_button_press_event_cb (EMailDisplay *display, + GdkEventButton *event, + GtkHTML *html) +{ + EMFormatPURI *puri = NULL; + gboolean finished = TRUE; + gchar *uri = NULL; + + /* The GtkHTML object may be the EMailDisplay itself + * or an inner iframe. */ + + if (event->button != 3) + return FALSE; + + mail_display_get_uri_puri (display, event, html, &uri, &puri); + + if (uri == NULL || g_str_has_prefix (uri, "##")) { + g_free (uri); + return FALSE; + } + + finished = mail_display_emit_popup_event (display, event, uri, puri); + + g_free (uri); + + return finished; +} + static void mail_display_update_formatter_colors (EMailDisplay *display) { @@ -204,6 +421,12 @@ mail_display_set_property (GObject *object, E_MAIL_DISPLAY (object), g_value_get_object (value)); return; + + case PROP_SELECTED_URI: + e_mail_display_set_selected_uri ( + E_MAIL_DISPLAY (object), + g_value_get_string (value)); + return; } G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); @@ -233,6 +456,12 @@ mail_display_get_property (GObject *object, value, e_mail_display_get_formatter ( E_MAIL_DISPLAY (object))); return; + + case PROP_SELECTED_URI: + g_value_set_string ( + value, e_mail_display_get_selected_uri ( + E_MAIL_DISPLAY (object))); + return; } G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); @@ -250,6 +479,11 @@ mail_display_dispose (GObject *object) priv->formatter = NULL; } + if (priv->ui_manager) { + g_object_unref (priv->ui_manager); + priv->ui_manager = NULL; + } + /* Chain up to parent's dispose() method. */ G_OBJECT_CLASS (parent_class)->dispose (object); } @@ -282,24 +516,11 @@ static gboolean mail_display_button_press_event (GtkWidget *widget, GdkEventButton *event) { - if (event->button == 3) { - EMailDisplay *display; - EMFormatPURI *puri = NULL; - gboolean stop_handlers = TRUE; - gchar *uri = NULL; - - display = E_MAIL_DISPLAY (widget); - mail_display_get_uri_puri (display, event, &uri, &puri); - - if (uri == NULL || !g_str_has_prefix (uri, "##")) - stop_handlers = mail_display_emit_popup_event ( - display, event, uri, puri); - - g_free (uri); + EMailDisplay *display = E_MAIL_DISPLAY (widget); + GtkHTML *html = GTK_HTML (widget); - if (stop_handlers) - return TRUE; - } + if (mail_display_button_press_event_cb (display, event, html)) + return TRUE; /* Chain up to parent's button_press_event() method. */ return GTK_WIDGET_CLASS (parent_class)-> @@ -437,7 +658,19 @@ mail_display_iframe_created (GtkHTML *html, { g_signal_connect_swapped ( iframe, "button-press-event", - G_CALLBACK (mail_display_button_press_event), html); + G_CALLBACK (mail_display_button_press_event_cb), html); +} + +static gboolean +mail_display_popup_event (EMailDisplay *display, + GdkEventButton *event, + const gchar *uri, + EMFormatPURI *puri) +{ + e_mail_display_set_selected_uri (display, uri); + e_mail_display_show_popup_menu (display, event, NULL, NULL); + + return TRUE; } static void @@ -466,6 +699,8 @@ mail_display_class_init (EMailDisplayClass *class) html_class->on_url = mail_display_on_url; html_class->iframe_created = mail_display_iframe_created; + class->popup_event = mail_display_popup_event; + g_object_class_install_property ( object_class, PROP_ANIMATE, @@ -496,6 +731,16 @@ mail_display_class_init (EMailDisplayClass *class) EM_TYPE_FORMAT_HTML, G_PARAM_READWRITE)); + g_object_class_install_property ( + object_class, + PROP_SELECTED_URI, + g_param_spec_string ( + "selected-uri", + "Selected URI", + NULL, + NULL, + G_PARAM_READWRITE)); + signals[POPUP_EVENT] = g_signal_new ( "popup-event", G_TYPE_FROM_CLASS (class), @@ -522,7 +767,44 @@ mail_display_class_init (EMailDisplayClass *class) static void mail_display_init (EMailDisplay *display) { + GtkUIManager *ui_manager; + GtkActionGroup *action_group; + const gchar *id; + GError *error = NULL; + display->priv = E_MAIL_DISPLAY_GET_PRIVATE (display); + + ui_manager = gtk_ui_manager_new (); + display->priv->ui_manager = ui_manager; + + action_group = e_mail_display_add_action_group (display, "uri"); + + gtk_action_group_add_actions ( + action_group, uri_entries, + G_N_ELEMENTS (uri_entries), display); + + action_group = e_mail_display_add_action_group (display, "http"); + + gtk_action_group_add_actions ( + action_group, http_entries, + G_N_ELEMENTS (http_entries), display); + + action_group = e_mail_display_add_action_group (display, "mailto"); + + gtk_action_group_add_actions ( + action_group, mailto_entries, + G_N_ELEMENTS (mailto_entries), display); + + /* Because we are loading from a hard-coded string, there is + * no chance of I/O errors. Failure here implies a malformed + * UI definition. Full stop. */ + gtk_ui_manager_add_ui_from_string (ui_manager, ui, -1, &error); + if (error != NULL) + g_error ("%s", error->message); + + id = "org.gnome.evolution.mail.display"; + e_plugin_ui_register_manager (ui_manager, id, display); + e_plugin_ui_enable_manager (ui_manager, id); } GType @@ -625,3 +907,166 @@ e_mail_display_set_formatter (EMailDisplay *display, g_object_notify (G_OBJECT (display), "formatter"); } + +const gchar * +e_mail_display_get_selected_uri (EMailDisplay *display) +{ + g_return_val_if_fail (E_IS_MAIL_DISPLAY (display), NULL); + + return display->priv->selected_uri; +} + +void +e_mail_display_set_selected_uri (EMailDisplay *display, + const gchar *selected_uri) +{ + g_return_if_fail (E_IS_MAIL_DISPLAY (display)); + + g_free (display->priv->selected_uri); + display->priv->selected_uri = g_strdup (selected_uri); + + g_object_notify (G_OBJECT (display), "selected-uri"); +} + +GtkAction * +e_mail_display_get_action (EMailDisplay *display, + const gchar *action_name) +{ + GtkUIManager *ui_manager; + + g_return_val_if_fail (E_IS_MAIL_DISPLAY (display), NULL); + g_return_val_if_fail (action_name != NULL, NULL); + + ui_manager = e_mail_display_get_ui_manager (display); + + return e_lookup_action (ui_manager, action_name); +} + +GtkActionGroup * +e_mail_display_add_action_group (EMailDisplay *display, + const gchar *group_name) +{ + GtkActionGroup *action_group; + GtkUIManager *ui_manager; + const gchar *domain; + + g_return_val_if_fail (E_IS_MAIL_DISPLAY (display), NULL); + g_return_val_if_fail (group_name != NULL, NULL); + + ui_manager = e_mail_display_get_ui_manager (display); + domain = GETTEXT_PACKAGE; + + action_group = gtk_action_group_new (group_name); + gtk_action_group_set_translation_domain (action_group, domain); + gtk_ui_manager_insert_action_group (ui_manager, action_group, 0); + g_object_unref (action_group); + + return action_group; +} + +GtkActionGroup * +e_mail_display_get_action_group (EMailDisplay *display, + const gchar *group_name) +{ + GtkUIManager *ui_manager; + + g_return_val_if_fail (E_IS_MAIL_DISPLAY (display), NULL); + g_return_val_if_fail (group_name != NULL, NULL); + + ui_manager = e_mail_display_get_ui_manager (display); + + return e_lookup_action_group (ui_manager, group_name); +} + +GtkWidget * +e_mail_display_get_popup_menu (EMailDisplay *display) +{ + GtkUIManager *ui_manager; + GtkWidget *menu; + + g_return_val_if_fail (E_IS_MAIL_DISPLAY (display), NULL); + + ui_manager = e_mail_display_get_ui_manager (display); + menu = gtk_ui_manager_get_widget (ui_manager, "/context"); + g_return_val_if_fail (GTK_IS_MENU (menu), NULL); + + return menu; +} + +GtkUIManager * +e_mail_display_get_ui_manager (EMailDisplay *display) +{ + EMailDisplayPrivate *priv; + + g_return_val_if_fail (E_IS_MAIL_DISPLAY (display), NULL); + + priv = E_MAIL_DISPLAY_GET_PRIVATE (display); + + return priv->ui_manager; +} + +void +e_mail_display_show_popup_menu (EMailDisplay *display, + GdkEventButton *event, + GtkMenuPositionFunc func, + gpointer user_data) +{ + GtkWidget *menu; + + g_return_if_fail (E_IS_MAIL_DISPLAY (display)); + + e_mail_display_update_actions (display); + + menu = e_mail_display_get_popup_menu (display); + + if (event != NULL) + gtk_menu_popup ( + GTK_MENU (menu), NULL, NULL, func, + user_data, event->button, event->time); + else + gtk_menu_popup ( + GTK_MENU (menu), NULL, NULL, func, + user_data, 0, gtk_get_current_event_time ()); +} + +void +e_mail_display_update_actions (EMailDisplay *display) +{ + CamelURL *curl; + GtkActionGroup *action_group; + gboolean scheme_is_http; + gboolean scheme_is_mailto; + gboolean uri_is_valid; + gboolean visible; + const gchar *uri; + + g_return_if_fail (E_IS_MAIL_DISPLAY (display)); + + uri = e_mail_display_get_selected_uri (display); + g_return_if_fail (uri != NULL); + + /* Parse the URI early so we know if the actions will work. */ + curl = camel_url_new (uri, NULL); + uri_is_valid = (curl != NULL); + camel_url_free (curl); + + scheme_is_http = + (g_ascii_strncasecmp (uri, "http:", 5) == 0) || + (g_ascii_strncasecmp (uri, "https:", 6) == 0); + + scheme_is_mailto = + (g_ascii_strncasecmp (uri, "mailto:", 7) == 0); + + /* Allow copying the URI even if it's malformed. */ + visible = !scheme_is_mailto; + action_group = e_mail_display_get_action_group (display, "uri"); + gtk_action_group_set_visible (action_group, visible); + + visible = uri_is_valid && scheme_is_http; + action_group = e_mail_display_get_action_group (display, "http"); + gtk_action_group_set_visible (action_group, visible); + + visible = uri_is_valid && scheme_is_mailto; + action_group = e_mail_display_get_action_group (display, "mailto"); + gtk_action_group_set_visible (action_group, visible); +} diff --git a/mail/e-mail-display.h b/mail/e-mail-display.h index 815fd45f3e..9f273fb26f 100644 --- a/mail/e-mail-display.h +++ b/mail/e-mail-display.h @@ -77,6 +77,22 @@ void e_mail_display_set_caret_mode (EMailDisplay *display, EMFormatHTML * e_mail_display_get_formatter (EMailDisplay *display); void e_mail_display_set_formatter (EMailDisplay *display, EMFormatHTML *formatter); +const gchar * e_mail_display_get_selected_uri (EMailDisplay *display); +void e_mail_display_set_selected_uri (EMailDisplay *display, + const gchar *uri); +GtkAction * e_mail_display_get_action (EMailDisplay *display, + const gchar *action_name); +GtkActionGroup *e_mail_display_add_action_group (EMailDisplay *display, + const gchar *group_name); +GtkActionGroup *e_mail_display_get_action_group (EMailDisplay *display, + const gchar *group_name); +GtkWidget * e_mail_display_get_popup_menu (EMailDisplay *display); +GtkUIManager * e_mail_display_get_ui_manager (EMailDisplay *display); +void e_mail_display_show_popup_menu (EMailDisplay *display, + GdkEventButton *event, + GtkMenuPositionFunc func, + gpointer user_data); +void e_mail_display_update_actions (EMailDisplay *display); G_END_DECLS diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 1cf9ff983e..edea7cfa6f 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -38,6 +38,7 @@ #include "widgets/misc/e-popup-action.h" #include "mail/e-mail-browser.h" +#include "mail/e-mail-display.h" #include "mail/e-mail-reader-utils.h" #include "mail/e-mail-shell-backend.h" #include "mail/em-composer-utils.h" @@ -48,6 +49,7 @@ #include "mail/mail-autofilter.h" #include "mail/mail-config.h" #include "mail/mail-ops.h" +#include "mail/mail-vfolder.h" enum { CHANGED, @@ -942,38 +944,6 @@ action_mail_undelete_cb (GtkAction *action, } static void -action_mail_uri_copy_cb (GtkAction *action, - EMailReader *reader) -{ - /* FIXME */ - g_print ("Action: %s\n", gtk_action_get_name (GTK_ACTION (action))); -} - -static void -action_mail_uri_copy_address_cb (GtkAction *action, - EMailReader *reader) -{ - /* FIXME */ - g_print ("Action: %s\n", gtk_action_get_name (GTK_ACTION (action))); -} - -static void -action_mail_uri_to_search_folder_recipient_cb (GtkAction *action, - EMailReader *reader) -{ - /* FIXME */ - g_print ("Action: %s\n", gtk_action_get_name (GTK_ACTION (action))); -} - -static void -action_mail_uri_to_search_folder_sender_cb (GtkAction *action, - EMailReader *reader) -{ - /* FIXME */ - g_print ("Action: %s\n", gtk_action_get_name (GTK_ACTION (action))); -} - -static void action_mail_zoom_100_cb (GtkAction *action, EMailReader *reader) { @@ -1012,6 +982,88 @@ action_mail_zoom_out_cb (GtkAction *action, gtk_html_zoom_out (html); } +static void +action_search_folder_recipient_cb (GtkAction *action, + EMailReader *reader) +{ + EMFormatHTMLDisplay *html_display; + MessageList *message_list; + EMailDisplay *display; + CamelURL *curl; + const gchar *uri; + + /* This action is defined in EMailDisplay. */ + + html_display = e_mail_reader_get_html_display (reader); + message_list = e_mail_reader_get_message_list (reader); + + display = E_MAIL_DISPLAY (EM_FORMAT_HTML (html_display)->html); + + uri = e_mail_display_get_selected_uri (display); + g_return_if_fail (uri != NULL); + + curl = camel_url_new (uri, NULL); + g_return_if_fail (curl != NULL); + + if (curl->path != NULL && *curl->path != '\0') { + CamelInternetAddress *inet_addr; + const gchar *folder_uri; + + /* Ensure vfolder is running. */ + vfolder_load_storage (); + + folder_uri = message_list->folder_uri; + + inet_addr = camel_internet_address_new (); + camel_address_decode (CAMEL_ADDRESS (inet_addr), curl->path); + vfolder_gui_add_from_address (inet_addr, AUTO_TO, folder_uri); + camel_object_unref (inet_addr); + } + + camel_url_free (curl); +} + +static void +action_search_folder_sender_cb (GtkAction *action, + EMailReader *reader) +{ + EMFormatHTMLDisplay *html_display; + MessageList *message_list; + EMailDisplay *display; + CamelURL *curl; + const gchar *uri; + + /* This action is defined in EMailDisplay. */ + + html_display = e_mail_reader_get_html_display (reader); + message_list = e_mail_reader_get_message_list (reader); + + display = E_MAIL_DISPLAY (EM_FORMAT_HTML (html_display)->html); + + uri = e_mail_display_get_selected_uri (display); + g_return_if_fail (uri != NULL); + + curl = camel_url_new (uri, NULL); + g_return_if_fail (curl != NULL); + + if (curl->path != NULL && *curl->path != '\0') { + CamelInternetAddress *inet_addr; + const gchar *folder_uri; + + /* Ensure vfolder is running. */ + vfolder_load_storage (); + + folder_uri = message_list->folder_uri; + + inet_addr = camel_internet_address_new (); + camel_address_decode (CAMEL_ADDRESS (inet_addr), curl->path); + vfolder_gui_add_from_address (inet_addr, AUTO_FROM, folder_uri); + camel_object_unref (inet_addr); + } + + camel_url_free (curl); +} + static GtkActionEntry mail_reader_entries[] = { { "mail-add-sender", @@ -1371,34 +1423,6 @@ static GtkActionEntry mail_reader_entries[] = { N_("Undelete the selected messages"), G_CALLBACK (action_mail_undelete_cb) }, - { "mail-uri-copy", - NULL, - N_("_Copy Link Location"), - NULL, - NULL, /* XXX Add a tooltip! */ - G_CALLBACK (action_mail_uri_copy_cb) }, - - { "mail-uri-copy-address", - GTK_STOCK_COPY, - N_("Copy _Email Address"), - NULL, - NULL, /* XXX Add a tooltip! */ - G_CALLBACK (action_mail_uri_copy_address_cb) }, - - { "mail-uri-to-search-folder-recipient", - NULL, - N_("_To This Address"), - NULL, - NULL, /* XXX Add a tooltip! */ - G_CALLBACK (action_mail_uri_to_search_folder_recipient_cb) }, - - { "mail-uri-to-search-folder-sender", - NULL, - N_("_From This Address"), - NULL, - NULL, /* XXX Add a tooltip! */ - G_CALLBACK (action_mail_uri_to_search_folder_sender_cb) }, - { "mail-zoom-100", GTK_STOCK_ZOOM_100, N_("_Normal Size"), @@ -1464,13 +1488,6 @@ static GtkActionEntry mail_reader_entries[] = { NULL, NULL }, - { "mail-uri-to-search-folder-menu", - NULL, - N_("Create _Search Folder"), - NULL, - NULL, - NULL }, - { "mail-zoom-menu", NULL, N_("_Zoom"), @@ -1570,9 +1587,9 @@ static GtkToggleActionEntry mail_reader_toggle_entries[] = { }; static gboolean -mail_reader_html_button_release_event_cb (EMailReader *reader, - GdkEventButton *button, - GtkHTML *html) +mail_reader_button_release_event_cb (EMailReader *reader, + GdkEventButton *button, + GtkHTML *html) { GtkAction *action; const gchar *action_name; @@ -1984,11 +2001,11 @@ e_mail_reader_init (EMailReader *reader) EShellBackend *shell_backend; EShellSettings *shell_settings; EMFormatHTMLDisplay *html_display; + EMailDisplay *display; GtkActionGroup *action_group; MessageList *message_list; GConfBridge *bridge; GtkAction *action; - GtkHTML *html; const gchar *action_name; const gchar *key; @@ -2002,7 +2019,7 @@ e_mail_reader_init (EMailReader *reader) shell = e_shell_backend_get_shell (shell_backend); shell_settings = e_shell_get_shell_settings (shell); - html = EM_FORMAT_HTML (html_display)->html; + display = E_MAIL_DISPLAY (EM_FORMAT_HTML (html_display)->html); gtk_action_group_add_actions ( action_group, mail_reader_entries, @@ -2052,6 +2069,18 @@ e_mail_reader_init (EMailReader *reader) action = e_mail_reader_get_action (reader, action_name); g_object_set (action, "short-label", _("Reply"), NULL); + action_name = "search-folder-recipient"; + action = e_mail_display_get_action (display, action_name); + g_signal_connect ( + action, "activate", + G_CALLBACK (action_search_folder_recipient_cb), reader); + + action_name = "search-folder-sender"; + action = e_mail_display_get_action (display, action_name); + g_signal_connect ( + action, "activate", + G_CALLBACK (action_search_folder_sender_cb), reader); + /* Bind properties. */ e_binding_new_full ( @@ -2070,7 +2099,7 @@ e_mail_reader_init (EMailReader *reader) e_binding_new ( G_OBJECT (shell_settings), "mail-show-animated-images", - G_OBJECT (html), "animate"); + G_OBJECT (display), "animate"); e_binding_new ( G_OBJECT (shell_settings), "mail-show-sender-photo", @@ -2081,16 +2110,16 @@ e_mail_reader_init (EMailReader *reader) e_mutual_binding_new ( G_OBJECT (action), "active", - G_OBJECT (html), "caret-mode"); + G_OBJECT (display), "caret-mode"); /* Connect signals. */ g_signal_connect_swapped ( - html, "button-release-event", - G_CALLBACK (mail_reader_html_button_release_event_cb), reader); + display, "button-release-event", + G_CALLBACK (mail_reader_button_release_event_cb), reader); g_signal_connect_swapped ( - html, "key-press-event", + display, "key-press-event", G_CALLBACK (mail_reader_key_press_event_cb), reader); g_signal_connect_swapped ( diff --git a/mail/em-folder-browser.c b/mail/em-folder-browser.c index b72ce28722..cb45194c59 100644 --- a/mail/em-folder-browser.c +++ b/mail/em-folder-browser.c @@ -852,27 +852,27 @@ static BonoboUIVerb emfb_verbs[] = { BONOBO_UI_VERB_END }; -static gboolean -emfb_select_all_daemon (MessageList *ml) -{ - message_list_select_all(ml); - gtk_widget_grab_focus ((GtkWidget *)ml); - return FALSE; -} - -static void -emfb_hide_deleted(BonoboUIComponent *uic, const gchar *path, Bonobo_UIComponent_EventType type, const gchar *state, gpointer data) -{ - GConfClient *gconf; - EMFolderView *emfv = data; - - if (type != Bonobo_UIComponent_STATE_CHANGED) - return; - - gconf = mail_config_get_gconf_client (); - gconf_client_set_bool(gconf, "/apps/evolution/mail/display/show_deleted", state[0] == '0', NULL); - em_folder_view_set_hide_deleted(emfv, state[0] != '0'); -} +//static gboolean +//emfb_select_all_daemon (MessageList *ml) +//{ +// message_list_select_all(ml); +// gtk_widget_grab_focus ((GtkWidget *)ml); +// return FALSE; +//} + +//static void +//emfb_hide_deleted(BonoboUIComponent *uic, const gchar *path, Bonobo_UIComponent_EventType type, const gchar *state, gpointer data) +//{ +// GConfClient *gconf; +// EMFolderView *emfv = data; +// +// if (type != Bonobo_UIComponent_STATE_CHANGED) +// return; +// +// gconf = mail_config_get_gconf_client (); +// gconf_client_set_bool(gconf, "/apps/evolution/mail/display/show_deleted", state[0] == '0', NULL); +// em_folder_view_set_hide_deleted(emfv, state[0] != '0'); +//} static void emfb_set_search_folder(EMFolderView *emfv, CamelFolder *folder, const gchar *uri) @@ -1057,16 +1057,16 @@ emfb_activate(EMFolderView *emfv, BonoboUIComponent *uic, gint act) state = mail_msg_active((unsigned int)-1); bonobo_ui_component_set_prop(uic, "/commands/MailStop", "sensitive", state?"1":"0", NULL); - /* HideDeleted */ - state = !gconf_client_get_bool(gconf, "/apps/evolution/mail/display/show_deleted", NULL); - if (emfv->folder && (emfv->folder->folder_flags & CAMEL_FOLDER_IS_TRASH)) { - state = FALSE; - bonobo_ui_component_set_prop(uic, "/commands/HideDeleted", "sensitive", "0", NULL); - } else - bonobo_ui_component_set_prop(uic, "/commands/HideDeleted", "sensitive", "1", NULL); - bonobo_ui_component_set_prop(uic, "/commands/HideDeleted", "state", state ? "1" : "0", NULL); - bonobo_ui_component_add_listener(uic, "HideDeleted", emfb_hide_deleted, emfv); - em_folder_view_set_hide_deleted(emfv, state); /* <- not sure if this optimal, but it'll do */ +// /* HideDeleted */ +// state = !gconf_client_get_bool(gconf, "/apps/evolution/mail/display/show_deleted", NULL); +// if (emfv->folder && (emfv->folder->folder_flags & CAMEL_FOLDER_IS_TRASH)) { +// state = FALSE; +// bonobo_ui_component_set_prop(uic, "/commands/HideDeleted", "sensitive", "0", NULL); +// } else +// bonobo_ui_component_set_prop(uic, "/commands/HideDeleted", "sensitive", "1", NULL); +// bonobo_ui_component_set_prop(uic, "/commands/HideDeleted", "state", state ? "1" : "0", NULL); +// bonobo_ui_component_add_listener(uic, "HideDeleted", emfb_hide_deleted, emfv); +// em_folder_view_set_hide_deleted(emfv, state); /* <- not sure if this optimal, but it'll do */ } } diff --git a/mail/em-folder-view.c b/mail/em-folder-view.c index 9c56d84f4f..5e2f88ae99 100644 --- a/mail/em-folder-view.c +++ b/mail/em-folder-view.c @@ -243,11 +243,11 @@ emfv_init(GObject *o) //#ifdef ENABLE_PROFILING // g_signal_connect(emfv->preview, "complete", G_CALLBACK (emfv_format_complete), emfv); //#endif - p->invisible = gtk_invisible_new(); - g_signal_connect(p->invisible, "selection_get", G_CALLBACK(emfv_selection_get), emfv); - g_signal_connect(p->invisible, "selection_clear_event", G_CALLBACK(emfv_selection_clear_event), emfv); - gtk_selection_add_target(p->invisible, GDK_SELECTION_PRIMARY, GDK_SELECTION_TYPE_STRING, 0); - gtk_selection_add_target(p->invisible, GDK_SELECTION_CLIPBOARD, GDK_SELECTION_TYPE_STRING, 1); +// p->invisible = gtk_invisible_new(); +// g_signal_connect(p->invisible, "selection_get", G_CALLBACK(emfv_selection_get), emfv); +// g_signal_connect(p->invisible, "selection_clear_event", G_CALLBACK(emfv_selection_clear_event), emfv); +// gtk_selection_add_target(p->invisible, GDK_SELECTION_PRIMARY, GDK_SELECTION_TYPE_STRING, 0); +// gtk_selection_add_target(p->invisible, GDK_SELECTION_CLIPBOARD, GDK_SELECTION_TYPE_STRING, 1); emfv->async = mail_async_event_new(); } @@ -298,27 +298,27 @@ emfv_class_init(GObjectClass *klass) 0); } -static void -emfv_selection_get(GtkWidget *widget, GtkSelectionData *data, guint info, guint time_stamp, EMFolderView *emfv) -{ - struct _EMFolderViewPrivate *p = emfv->priv; - - if (p->selection_uri == NULL) - return; - - gtk_selection_data_set(data, data->target, 8, (guchar *)p->selection_uri, strlen(p->selection_uri)); -} - -static void -emfv_selection_clear_event(GtkWidget *widget, GdkEventSelection *event, EMFolderView *emfv) -{ -#if 0 /* do i care? */ - struct _EMFolderViewPrivate *p = emfv->priv; - - g_free(p->selection_uri); - p->selection_uri = NULL; -#endif -} +//static void +//emfv_selection_get(GtkWidget *widget, GtkSelectionData *data, guint info, guint time_stamp, EMFolderView *emfv) +//{ +// struct _EMFolderViewPrivate *p = emfv->priv; +// +// if (p->selection_uri == NULL) +// return; +// +// gtk_selection_data_set(data, data->target, 8, (guchar *)p->selection_uri, strlen(p->selection_uri)); +//} + +//static void +//emfv_selection_clear_event(GtkWidget *widget, GdkEventSelection *event, EMFolderView *emfv) +//{ +//#if 0 /* do i care? */ +// struct _EMFolderViewPrivate *p = emfv->priv; +// +// g_free(p->selection_uri); +// p->selection_uri = NULL; +//#endif +//} /* ********************************************************************** */ @@ -367,61 +367,61 @@ emfv_edit_paste(BonoboUIComponent *uid, gpointer data, const gchar *path) message_list_paste(emfv->list); } -static void -emp_uri_popup_vfolder_sender(EPopup *ep, EPopupItem *pitem, gpointer data) -{ - EMFolderView *emfv = data; - EMPopupTargetURI *t = (EMPopupTargetURI *)ep->target; - CamelURL *url; - CamelInternetAddress *addr; - - url = camel_url_new(t->uri, NULL); - if (url == NULL) { - g_warning("cannot parse url '%s'", t->uri); - return; - } - - if (url->path && url->path[0]) { - /* ensures vfolder is running */ - vfolder_load_storage (); - - addr = camel_internet_address_new (); - camel_address_decode (CAMEL_ADDRESS (addr), url->path); - vfolder_gui_add_from_address (addr, AUTO_FROM, emfv->folder_uri); - camel_object_unref (addr); - } - - camel_url_free(url); - -} - - -static void -emp_uri_popup_vfolder_recipient(EPopup *ep, EPopupItem *pitem, gpointer data) -{ - EMFolderView *emfv = data; - EMPopupTargetURI *t = (EMPopupTargetURI *)ep->target; - CamelURL *url; - CamelInternetAddress *addr; - - url = camel_url_new(t->uri, NULL); - if (url == NULL) { - g_warning("cannot parse url '%s'", t->uri); - return; - } - - if (url->path && url->path[0]) { - /* ensures vfolder is running */ - vfolder_load_storage (); +//static void +//emp_uri_popup_vfolder_sender(EPopup *ep, EPopupItem *pitem, gpointer data) +//{ +// EMFolderView *emfv = data; +// EMPopupTargetURI *t = (EMPopupTargetURI *)ep->target; +// CamelURL *url; +// CamelInternetAddress *addr; +// +// url = camel_url_new(t->uri, NULL); +// if (url == NULL) { +// g_warning("cannot parse url '%s'", t->uri); +// return; +// } +// +// if (url->path && url->path[0]) { +// /* ensures vfolder is running */ +// vfolder_load_storage (); +// +// addr = camel_internet_address_new (); +// camel_address_decode (CAMEL_ADDRESS (addr), url->path); +// vfolder_gui_add_from_address (addr, AUTO_FROM, emfv->folder_uri); +// camel_object_unref (addr); +// } +// +// camel_url_free(url); +// +//} - addr = camel_internet_address_new (); - camel_address_decode (CAMEL_ADDRESS (addr), url->path); - vfolder_gui_add_from_address (addr, AUTO_TO, emfv->folder_uri); - camel_object_unref (addr); - } - camel_url_free(url); -} +//static void +//emp_uri_popup_vfolder_recipient(EPopup *ep, EPopupItem *pitem, gpointer data) +//{ +// EMFolderView *emfv = data; +// EMPopupTargetURI *t = (EMPopupTargetURI *)ep->target; +// CamelURL *url; +// CamelInternetAddress *addr; +// +// url = camel_url_new(t->uri, NULL); +// if (url == NULL) { +// g_warning("cannot parse url '%s'", t->uri); +// return; +// } +// +// if (url->path && url->path[0]) { +// /* ensures vfolder is running */ +// vfolder_load_storage (); +// +// addr = camel_internet_address_new (); +// camel_address_decode (CAMEL_ADDRESS (addr), url->path); +// vfolder_gui_add_from_address (addr, AUTO_TO, emfv->folder_uri); +// camel_object_unref (addr); +// } +// +// camel_url_free(url); +//} /* ********************************************************************** */ @@ -744,25 +744,25 @@ emfv_popup_menu (GtkWidget *widget) return TRUE; } -static void -emp_uri_popup_link_copy(EPopup *ep, EPopupItem *pitem, gpointer data) -{ - EMFolderView *emfv = data; - struct _EMFolderViewPrivate *p = emfv->priv; - - g_free(p->selection_uri); - p->selection_uri = em_utils_url_unescape_amp(pitem->user_data); - - gtk_selection_owner_set(p->invisible, GDK_SELECTION_PRIMARY, gtk_get_current_event_time()); - gtk_selection_owner_set(p->invisible, GDK_SELECTION_CLIPBOARD, gtk_get_current_event_time()); -} +//static void +//emp_uri_popup_link_copy(EPopup *ep, EPopupItem *pitem, gpointer data) +//{ +// EMFolderView *emfv = data; +// struct _EMFolderViewPrivate *p = emfv->priv; +// +// g_free(p->selection_uri); +// p->selection_uri = em_utils_url_unescape_amp(pitem->user_data); +// +// gtk_selection_owner_set(p->invisible, GDK_SELECTION_PRIMARY, gtk_get_current_event_time()); +// gtk_selection_owner_set(p->invisible, GDK_SELECTION_CLIPBOARD, gtk_get_current_event_time()); +//} static EPopupItem emfv_uri_popups[] = { - { E_POPUP_ITEM, (gchar *) "00.uri.15", (gchar *) N_("_Copy Link Location"), emp_uri_popup_link_copy, NULL, (gchar *) "edit-copy", EM_POPUP_URI_NOT_MAILTO }, +// { E_POPUP_ITEM, (gchar *) "00.uri.15", (gchar *) N_("_Copy Link Location"), emp_uri_popup_link_copy, NULL, (gchar *) "edit-copy", EM_POPUP_URI_NOT_MAILTO }, - { E_POPUP_SUBMENU, (gchar *) "99.uri.00", (gchar *) N_("Create _Search Folder"), NULL, NULL, NULL, EM_POPUP_URI_MAILTO }, - { E_POPUP_ITEM, (gchar *) "99.uri.00/00.10", (gchar *) N_("_From this Address"), emp_uri_popup_vfolder_sender, NULL, NULL, EM_POPUP_URI_MAILTO }, - { E_POPUP_ITEM, (gchar *) "99.uri.00/00.00", (gchar *) N_("_To this Address"), emp_uri_popup_vfolder_recipient, NULL, NULL, EM_POPUP_URI_MAILTO }, +// { E_POPUP_SUBMENU, (gchar *) "99.uri.00", (gchar *) N_("Create _Search Folder"), NULL, NULL, NULL, EM_POPUP_URI_MAILTO }, +// { E_POPUP_ITEM, (gchar *) "99.uri.00/00.10", (gchar *) N_("_From this Address"), emp_uri_popup_vfolder_sender, NULL, NULL, EM_POPUP_URI_MAILTO }, +// { E_POPUP_ITEM, (gchar *) "99.uri.00/00.00", (gchar *) N_("_To this Address"), emp_uri_popup_vfolder_recipient, NULL, NULL, EM_POPUP_URI_MAILTO }, }; static void diff --git a/plugins/copy-tool/ChangeLog b/plugins/copy-tool/ChangeLog deleted file mode 100644 index 5fab320dc8..0000000000 --- a/plugins/copy-tool/ChangeLog +++ /dev/null @@ -1,67 +0,0 @@ -2008-08-27 Sankar P <psankar@novell.com> - -License Changes - - * copy-tool.c: - -2008-08-12 Bharath Acharya <abharath@novell.com> - - * Makefile.am: Use NO_UNDEFINED. Link with more libraries. To generate - dlls on Windows. - -2007-04-02 Sankar P <psankar@novell.com> - - * Committed on behalf of Gilles Dartiguelongue <dartigug@esiee.fr> - - * org-gnome-copy-tool.eplug.xml: - Cleanup. - Fixes part of #301149 - -2006-05-19 Hiroyuki Ikezoe <poincare@ikezoe.net> - - ** Fixes bug #322771 - * copy-tool.c: Use GtkClipboard instead of GtkInvisible. - -2005-11-30 Simon Zheng <Simon.Zheng@Sun.Com> - - Fix for 322733. - - * copy-tool.c: (ct_selection_get): Removed printf() statement - in order to avoid printing NULL point. - (org_gnome_copy_tool_copy_address): Removed printf() statement. - (ct_selection_clear_event): Removed printf() statement. - -2005-05-11 Not Zed <NotZed@Ximian.com> - - * Makefile.am: added built_sources/cleanfiles. - -2005-05-06 Not Zed <NotZed@Ximian.com> - - * Makefile.am: - * org-gnome-copy-tool.eplug.xml: s/.in/.xml/ & i18n. - -2005-02-24 Björn Torkelsson <torkel@acc.umu.se> - - * org-gnome-copy-tool.eplug.in: Added a . to the end of description. - -2004-11-03 Not Zed <NotZed@Ximian.com> - - * org-gnome-copy-tool.eplug.in: gave it a better name and fixed - the description and author tags. - -2004-11-01 JP Rosevear <jpr@novell.com> - - * Makefile.am: dist .eplug.in file - -2004-10-28 Not Zed <NotZed@Ximian.com> - - * org-gnome-copy-tool.eplug.in: fix folderview popup hook id. - -2004-10-21 JP Rosevear <jpr@novell.com> - - * org-gnome-copy-tool.eplug.in: s/image/icon/ - -2004-10-20 Not Zed <NotZed@Ximian.com> - - * implemented a copy-utils plugin. - diff --git a/plugins/copy-tool/Makefile.am b/plugins/copy-tool/Makefile.am deleted file mode 100644 index 5f9e3bb463..0000000000 --- a/plugins/copy-tool/Makefile.am +++ /dev/null @@ -1,20 +0,0 @@ -INCLUDES = \ - -I$(top_srcdir) \ - $(EVOLUTION_MAIL_CFLAGS) - -@EVO_PLUGIN_RULE@ - -plugin_DATA = org-gnome-copy-tool.eplug -plugin_LTLIBRARIES = liborg-gnome-copy-tool.la - -liborg_gnome_copy_tool_la_SOURCES = copy-tool.c -liborg_gnome_copy_tool_la_LDFLAGS = -module -avoid-version $(NO_UNDEFINED) -liborg_gnome_copy_tool_la_LIBADD = \ - $(EVOLUTION_MAIL_LIBS) - -EXTRA_DIST = org-gnome-copy-tool.eplug.xml - -BUILT_SOURCES = $(plugin_DATA) -CLEANFILES = $(BUILT_SOURCES) - --include $(top_srcdir)/git.mk diff --git a/plugins/copy-tool/copy-tool.c b/plugins/copy-tool/copy-tool.c deleted file mode 100644 index 769bd00431..0000000000 --- a/plugins/copy-tool/copy-tool.c +++ /dev/null @@ -1,71 +0,0 @@ -/* - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * - * Authors: - * Michael Zucchi <notzed@novell.com> - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -/* Add 'copy to clipboard' things to various menu's. - - Uh, so far only to copy mail addresses from mail content */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <glib/gi18n-lib.h> -#include <string.h> - -#include "mail/em-popup.h" - -#include <gtk/gtk.h> - -#include "camel/camel-internet-address.h" -#include "camel/camel-url.h" - -void org_gnome_copy_tool_copy_address(gpointer ep, EMPopupTargetURI *t); - -void -org_gnome_copy_tool_copy_address(gpointer ep, EMPopupTargetURI *t) -{ - if (t->uri) { - CamelInternetAddress *cia = camel_internet_address_new(); - CamelURL *curl; - GtkClipboard *clipboard; - gchar *addr; - const gchar *tmp; - - curl = camel_url_new(t->uri, NULL); - camel_address_decode((CamelAddress *)cia, curl->path); - /* should it perhaps use address format? */ - addr = camel_address_encode((CamelAddress *)cia); - tmp = addr && addr[0] ? addr : t->uri + 7; - - clipboard = gtk_clipboard_get (GDK_SELECTION_PRIMARY); - - gtk_clipboard_set_text (clipboard, tmp, strlen (tmp)); - - clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD); - gtk_clipboard_set_text (clipboard, tmp, strlen (tmp)); - - g_free(addr); - camel_url_free(curl); - camel_object_unref(cia); - } -} diff --git a/plugins/copy-tool/org-gnome-copy-tool.eplug.xml b/plugins/copy-tool/org-gnome-copy-tool.eplug.xml deleted file mode 100644 index 3b6a30752d..0000000000 --- a/plugins/copy-tool/org-gnome-copy-tool.eplug.xml +++ /dev/null @@ -1,24 +0,0 @@ -<?xml version="1.0"?> -<e-plugin-list> - <e-plugin - type="shlib" - id="org.gnome.evolution.plugin.copyTool" - location="@PLUGINDIR@/liborg-gnome-copy-tool@SOEXT@" - _name="Copy Tool"> - <_description>Copy things to the clipboard.</_description> - <author name="Michael Zucchi" email="notzed@ximian.com"/> - - <!-- hook into the uri popup menu --> - <hook class="org.gnome.evolution.mail.popup:1.0"> - <menu id="org.gnome.evolution.mail.folderview.popup" target="uri"> - <item - type="item" - path="80.test" - icon="gtk-copy" - _label="Copy _Email Address" - visible="mailto" - activate="org_gnome_copy_tool_copy_address"/> - </menu> - </hook> - </e-plugin> -</e-plugin-list> diff --git a/ui/evolution-mail-reader.ui b/ui/evolution-mail-reader.ui index 4aaca319ec..1000fe5e2c 100644 --- a/ui/evolution-mail-reader.ui +++ b/ui/evolution-mail-reader.ui @@ -133,12 +133,4 @@ <menuitem action='mail-popup-print'/> </placeholder> </popup> - <popup name='mail-uri-popup'> - <menuitem action='mail-uri-copy'/> - <menuitem action='mail-uri-copy-address'/> - <menu action='mail-uri-to-search-folder-menu'> - <menuitem action='mail-uri-to-search-folder-sender'/> - <menuitem action='mail-uri-to-search-folder-recipient'/> - </menu> - </popup> </ui> |