diff options
-rw-r--r-- | mail/ChangeLog | 10 | ||||
-rw-r--r-- | mail/em-folder-view.c | 17 | ||||
-rw-r--r-- | mail/em-format-html-display.c | 35 | ||||
-rw-r--r-- | mail/em-format-html-display.h | 2 |
4 files changed, 62 insertions, 2 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index b3214b4a98..58d804e2b9 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,13 @@ +2005-02-07 Harry Lu <harry.lu@sun.com> + + Fix for 72275. + * em-folder-view.c: (emfv_popup_menu): try to bring up menu for + preivew html object. + (emfv_format_popup_event): handle event == NULL case. + * em-format-html-display.c: (em_format_html_display_popup_menu): + New function to popup context menu. + * em-format-html-display.h: add new function declaration. + 2005-02-04 Not Zed <NotZed@Ximian.com> * em-subscribe-editor.c (sub_folderinfo_get): reverted jeff's diff --git a/mail/em-folder-view.c b/mail/em-folder-view.c index a604b0a4bf..c0bb8f9cc5 100644 --- a/mail/em-folder-view.c +++ b/mail/em-folder-view.c @@ -2160,9 +2160,19 @@ emfv_list_key_press(ETree *tree, int row, ETreePath path, int col, GdkEvent *ev, static gboolean emfv_popup_menu (GtkWidget *widget) { + gboolean ret = FALSE; EMFolderView *emfv = (EMFolderView *)widget; - emfv_popup (emfv, NULL); + /* Try to bring up menu for preview html object. + Currently we cannot directly connect to html's "popup_menu" signal + since it doesn't work. + */ + + if (GTK_WIDGET_HAS_FOCUS (emfv->preview->formathtml.html)) + ret = em_format_html_display_popup_menu (emfv->preview); + + if (!ret) + emfv_popup (emfv, NULL); return TRUE; } @@ -2288,7 +2298,10 @@ emfv_format_popup_event(EMFormatHTMLDisplay *efhd, GdkEventButton *event, const } menu = e_popup_create_menu_once((EPopup *)emp, target, 0); - gtk_menu_popup(menu, NULL, NULL, NULL, NULL, event->button, event->time); + if (event == NULL) + gtk_menu_popup (menu, NULL, NULL, NULL, NULL, 0, gtk_get_current_event_time()); + else + gtk_menu_popup(menu, NULL, NULL, NULL, NULL, event->button, event->time); return TRUE; } diff --git a/mail/em-format-html-display.c b/mail/em-format-html-display.c index 8175b29df8..6f74fa0495 100644 --- a/mail/em-format-html-display.c +++ b/mail/em-format-html-display.c @@ -612,6 +612,41 @@ efhd_html_button_press_event (GtkWidget *widget, GdkEventButton *event, EMFormat return res; } +gboolean +em_format_html_display_popup_menu (EMFormatHTMLDisplay *efhd) +{ + GtkHTML *html; + HTMLEngine *e; + HTMLObject *obj; + const char *url; + gboolean res = FALSE; + gint offset; + EMFormatPURI *puri = NULL; + char *uri = NULL; + + html = efhd->formathtml.html; + e = html->engine; + if (!efhd->caret_mode) + obj = html_engine_get_focus_object (e, &offset); + else { + obj = e->cursor->object; + offset = e->cursor->offset; + } + + if ( obj != NULL + && ((url = html_object_get_src(obj)) != NULL + || (url = html_object_get_url(obj, offset)) != NULL)) { + uri = gtk_html_get_url_object_relative(html, obj, url); + puri = em_format_find_puri((EMFormat *)efhd, uri); + } + + g_signal_emit((GtkObject *)efhd, efhd_signals[EFHD_POPUP_EVENT], 0, NULL, uri, puri?puri->part:NULL, &res); + + g_free(uri); + + return res; +} + static void efhd_html_link_clicked (GtkHTML *html, const char *url, EMFormatHTMLDisplay *efhd) { diff --git a/mail/em-format-html-display.h b/mail/em-format-html-display.h index 1bf1b395d8..31a928ad5b 100644 --- a/mail/em-format-html-display.h +++ b/mail/em-format-html-display.h @@ -58,6 +58,8 @@ void em_format_html_display_zoom_in (EMFormatHTMLDisplay *efhd); void em_format_html_display_zoom_out (EMFormatHTMLDisplay *efhd); void em_format_html_display_zoom_reset (EMFormatHTMLDisplay *efhd); +gboolean em_format_html_display_popup_menu (EMFormatHTMLDisplay *efhd); + /* experimental */ struct _EPopupExtension; void em_format_html_display_set_popup(EMFormatHTMLDisplay *, struct _EPopupExtension *); |