Re: [evolution-patches] Patch for 72275 (Can't use Shift+F10 to popup context menu for link in message)



Not Zed,
��� Yes, that was my first attempt. I tried to connect to the "popup_menu" signal of the gtkhtml, but end up with two menus popup (one for link and one for the thread). It seemes the signal is not stopped by the first successful hanlding.
��� As I investigaged, there are some problem in gtkhtml.c:key_press_event(). The retval is FALSE even if the key press is hanlded in the line:
��� ��� GTK_WIDGET_CLASS (parent_class)->key_press_event (widget, event);

��� I tried to fix it but failed. If I use the retval from the above line, I cannot use TAB to change focus from one link to another link. It seemed TAB was handled in the parent_class' key_press_event so the focus signal won't be sent out. The key bindings and key press handlings in gtkhtml is a mess for me.
��� I will try to look at this problem after my holiday vacations for about a week.

��� �� Harry

Not Zed wrote:

You shouldn't need to change the popup handler in em-folder-view.� This is pretty busted, you're calling a lower-level object to then proxy a call back to the higher level one(s).

Can't you just hook onto the 'popup' signal of the gtkhtml from within em-format-html-display and do this?

On Mon, 2005-02-07 at 16:06 +0800, Harry Lu wrote:
 Hi, NotZed, 
      Here is a patch for 72275. Please review it. 
      Thanks! 
         Harry 

    
text/plain attachment (popupmenu2.diff)
 Index: ChangeLog 
 =================================================================== 
 RCS file: /cvs/gnome/evolution/mail/ChangeLog,v 
 retrieving revision 1.3569 
 diff -u -r1.3569 ChangeLog 
 --- ChangeLog	4 Feb 2005 04:14:22 -0000	1.3569 
 +++ ChangeLog	7 Feb 2005 07:58:04 -0000 
 @@ -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 
 Index: em-folder-view.c 
 =================================================================== 
 RCS file: /cvs/gnome/evolution/mail/em-folder-view.c,v 
 retrieving revision 1.104 
 diff -u -r1.104 em-folder-view.c 
 --- em-folder-view.c	1 Feb 2005 19:30:49 -0000	1.104 
 +++ em-folder-view.c	7 Feb 2005 07:58:27 -0000 
 @@ -2160,9 +2160,15 @@ 
  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 */ 
 +	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 +2294,10 @@ 
  	} 
   
  	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; 
  } 
 Index: em-format-html-display.c 
 =================================================================== 
 RCS file: /cvs/gnome/evolution/mail/em-format-html-display.c,v 
 retrieving revision 1.61 
 diff -u -r1.61 em-format-html-display.c 
 --- em-format-html-display.c	21 Jan 2005 06:38:29 -0000	1.61 
 +++ em-format-html-display.c	7 Feb 2005 07:58:52 -0000 
 @@ -612,6 +612,41 @@ 
  	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 = "" != NULL 
 +		 || (url = "" 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) 
  { 
 Index: em-format-html-display.h 
 =================================================================== 
 RCS file: /cvs/gnome/evolution/mail/em-format-html-display.h,v 
 retrieving revision 1.3 
 diff -u -r1.3 em-format-html-display.h 
 --- em-format-html-display.h	7 Jan 2004 14:29:06 -0000	1.3 
 +++ em-format-html-display.h	7 Feb 2005 07:58:53 -0000 
 @@ -58,6 +58,8 @@ 
  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 *); 

    


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]