Re: [Evolution-hackers] Status bar



On Tue, 2004-01-06 at 13:46 +0100, ERDI Gergo wrote:
> On Tue, 6 Jan 2004, Not Zed wrote:
> 
> > Sure, why not?  Why is it any different to preview_active?
> 
> whatever you say... (I still think it's stupid to actively _remove_
> encapsulation).

You obviosly want your patch to be looked at in a hurry with comments
like that!

Anyway, its new code so nothing is being removed.

Apart from some minor syntactical issues below, i'd say the patch is
about ready.  Can you post the final to evolution-patches please?

 Michael

> Index: mail/ChangeLog
> ===================================================================
> RCS file: /cvs/gnome/evolution/mail/ChangeLog,v
> retrieving revision 1.2965
> diff -u -r1.2965 ChangeLog
> --- mail/ChangeLog	4 Jan 2004 19:18:19 -0000	1.2965
> +++ mail/ChangeLog	6 Jan 2004 12:42:47 -0000
> @@ -1,3 +1,18 @@
> +2004-01-04  ERDI Gergo  <cactus cactus rulez org>
> +
> +	* em-folder-view.c (emfv_on_url_cb): Emit a hover-url signal when
> +	the user mouses over a URL, ...
> +	(emfv_hover_url_impl): ... and use BonoboUI to change the status
> +	bar message...
> +	(em_folder_view_set_statusbar): ... unless we are asked not to, ...
> +
> +	* mail-component.c (impl_createControls): ... like in the case of
> +	the mail component, ...
> +	(view_hover_url_cb): ... that uses the ActivityHandler to do the
> +	same
> +
> +	Add these together, and #127536 is neatly solved.
> +
>  2004-01-04  David Woodhouse  <dwmw2 infradead org>
>  
>  	* em-format-html-display.c: Mail warning grammar typo fix.
> Index: mail/em-folder-view.c
> ===================================================================
> RCS file: /cvs/gnome/evolution/mail/em-folder-view.c,v
> retrieving revision 1.19
> diff -u -r1.19 em-folder-view.c
> --- mail/em-folder-view.c	11 Dec 2003 04:56:12 -0000	1.19
> +++ mail/em-folder-view.c	6 Jan 2004 12:42:54 -0000
> @@ -66,6 +66,7 @@
>  #include "em-message-browser.h"
>  #include "message-list.h"
>  #include "em-utils.h"
> +#include "em-marshal.h"
>  
>  #include <gtkhtml/gtkhtml.h>
>  #include <gtkhtml/htmlobject.h>
> @@ -103,6 +104,9 @@
>  
>  static void emfv_setting_setup(EMFolderView *emfv);
>  
> +static void emfv_on_url_cb(GObject *emitter, const char *url, EMFolderView *emfv);
> +static void emfv_on_url(EMFolderView *emfv, const char *uri, const char *nice_uri);
> +
>  static const EMFolderViewEnable emfv_enable_map[];
>  
>  struct _EMFolderViewPrivate {
> @@ -119,6 +123,13 @@
>  
>  static GtkVBoxClass *emfv_parent;
>  
> +enum {
> +	EMFV_ON_URL,
> +	LAST_SIGNAL
> +};
> +
> +static guint signals[LAST_SIGNAL];
> +
>  static void emfv_selection_get(GtkWidget *widget, GtkSelectionData *data, guint info, guint time_stamp, EMFolderView *emfv);
>  static void emfv_selection_clear_event(GtkWidget *widget, GdkEventSelection *event, EMFolderView *emfv);
>  
> @@ -132,6 +143,8 @@
>  
>  	p = emfv->priv = g_malloc0(sizeof(struct _EMFolderViewPrivate));
>  
> +	emfv->statusbar_active = TRUE;
> +	
>  	emfv->ui_files = g_slist_append(NULL, EVOLUTION_UIDIR "/evolution-mail-message.xml");
>  	emfv->ui_app_name = "evolution-mail";
>  
> @@ -148,6 +161,7 @@
>  	emfv->preview = (EMFormatHTMLDisplay *)em_format_html_display_new();
>  	g_signal_connect(emfv->preview, "link_clicked", G_CALLBACK(emfv_format_link_clicked), emfv);
>  	g_signal_connect(emfv->preview, "popup_event", G_CALLBACK(emfv_format_popup_event), emfv);
> +	g_signal_connect (emfv->preview, "on_url", G_CALLBACK (emfv_on_url_cb), emfv);
>  
>  	p->invisible = gtk_invisible_new();
>  	g_object_ref(p->invisible);
> @@ -229,6 +243,17 @@
>  	((EMFolderViewClass *)klass)->set_folder_uri = emfv_set_folder_uri;
>  	((EMFolderViewClass *)klass)->set_message = emfv_set_message;
>  	((EMFolderViewClass *)klass)->activate = emfv_activate;
> +
> +	((EMFolderViewClass *)klass)->on_url = emfv_on_url;
> +
> +	signals[EMFV_ON_URL] = g_signal_new ("on-url",
> +					     G_OBJECT_CLASS_TYPE (klass),
> +					     G_SIGNAL_RUN_LAST,
> +					     G_STRUCT_OFFSET (EMFolderViewClass, on_url),
> +					     NULL, NULL,
> +					     em_marshal_VOID__STRING_STRING,
> +					     G_TYPE_NONE,
> +					     2, G_TYPE_STRING, G_TYPE_STRING);
>  }
>  
>  GType
> @@ -1550,6 +1575,8 @@
>  		e_charset_picker_bonobo_ui_populate (uic, "/menu/View", _("Default"), emfv_charset_changed, emfv);
>  
>  		emfv_enable_menus(emfv);
> +		if (emfv->statusbar_active)
> +			bonobo_ui_component_set_translate (uic, "/", "<status><item name=\"main\"/></status>", NULL);
>  	} else {
>  		const BonoboUIVerb *v;
>  
> @@ -1628,6 +1655,18 @@
>  	return t;
>  }
>  
> +void
> +em_folder_view_set_statusbar (EMFolderView *emfv, gboolean statusbar)
> +{
> +	g_return_if_fail (emfv);
> +	
> +	emfv->statusbar_active = statusbar;
> +
> +	if (statusbar && emfv->uic)
> +		bonobo_ui_component_set_translate (emfv->uic, "/",
> +						   "<status><item name=\"main\"/></status>", NULL);
> +}
> +
>  /* ********************************************************************** */
>  
>  struct mst_t {
> @@ -2049,3 +2088,34 @@
>  								emfv, NULL, NULL);
>  	g_object_unref(gconf);
>  }
> +
> +static void
> +emfv_on_url (EMFolderView *emfv, const char *uri, const char *nice_uri)
> +{
> +	if (emfv->statusbar_active)
> +	{

use k&r braces.

> +		if (emfv->uic) {
> +			bonobo_ui_component_set_status (emfv->uic, nice_uri, NULL);
> +			/* Make sure the node keeps existing if nice_url == 0 */
> +			if (!nice_uri)
> +				bonobo_ui_component_set_translate (
> +					emfv->uic, "/", "<status><item name=\"main\"/></status>", NULL);
> +		}
> +	}
> +}
> +
> +static void
> +emfv_on_url_cb (GObject *emitter, const char *url, EMFolderView *emfv)
> +{
> +	char *nice_url = 0;

use NULL for consistency.

> +
> +	if (url)

> +		if (strncmp (url, "mailto:";, 7) == 0)
> +			nice_url = g_strdup_printf (_("Click to mail %s"), url + 7);
> +		else
> +			nice_url = g_strdup_printf (_("Click to open %s"), url);

put the second if inside a block.

> +
> +	g_signal_emit (emfv, signals[EMFV_ON_URL], 0, url, nice_url);
> +	
> +	g_free (nice_url);
> +}
> Index: mail/em-folder-view.h
> ===================================================================
> RCS file: /cvs/gnome/evolution/mail/em-folder-view.h,v
> retrieving revision 1.3
> diff -u -r1.3 em-folder-view.h
> --- mail/em-folder-view.h	19 Sep 2003 18:54:09 -0000	1.3
> +++ mail/em-folder-view.h	6 Jan 2004 12:42:55 -0000
> @@ -78,6 +78,7 @@
>  	int mark_seen_timeout;	/* local copy of gconf stuff */
>  	int mark_seen:1;
>  	int preview_active:1;	/* is preview being used */
> +	int statusbar_active : 1; /* should we manage the statusbar messages ourselves? */

follow the same code style, no spaces.

>  };
>  
>  struct _EMFolderViewClass {
> @@ -89,6 +90,9 @@
>  	void (*set_folder_uri)(EMFolderView *emfv, const char *uri);
>  	void (*set_folder)(EMFolderView *emfv, struct _CamelFolder *folder, const char *uri);
>  	void (*set_message)(EMFolderView *emfv, const char *uid);
> +
> +	/* Signals */
> +	void (*on_url)(EMFolderView *emfv, const char *uri, const char *nice_uri);
>  };
>  
>  GType em_folder_view_get_type(void);
> @@ -110,6 +114,8 @@
>  /* this could be on message-list */
>  guint32 em_folder_view_disable_mask(EMFolderView *emfv);
>  
> +void em_folder_view_set_statusbar (EMFolderView *emfv, gboolean statusbar);
> +
>  #ifdef __cplusplus
>  }
>  #endif /* __cplusplus */
> Index: mail/em-format-html-display.c
> ===================================================================
> RCS file: /cvs/gnome/evolution/mail/em-format-html-display.c,v
> retrieving revision 1.16
> diff -u -r1.16 em-format-html-display.c
> --- mail/em-format-html-display.c	4 Jan 2004 19:18:20 -0000	1.16
> +++ mail/em-format-html-display.c	6 Jan 2004 12:42:59 -0000
> @@ -105,6 +105,7 @@
>  
>  static int efhd_html_button_press_event (GtkWidget *widget, GdkEventButton *event, EMFormatHTMLDisplay *efh);
>  static void efhd_html_link_clicked (GtkHTML *html, const char *url, EMFormatHTMLDisplay *efhd);
> +static void efhd_html_on_url (GtkHTML *html, const char *url, EMFormatHTMLDisplay *efhd);
>  
>  struct _attach_puri {
>  	EMFormatPURI puri;
> @@ -135,6 +136,7 @@
>  enum {
>  	EFHD_LINK_CLICKED,
>  	EFHD_POPUP_EVENT,
> +	EFHD_ON_URL,
>  	EFHD_LAST_SIGNAL,
>  };
>  
> @@ -283,6 +285,16 @@
>  			     GDK_TYPE_EVENT | G_SIGNAL_TYPE_STATIC_SCOPE,
>  			     G_TYPE_POINTER, G_TYPE_POINTER);
>  
> +	efhd_signals[EFHD_ON_URL] = 
> +		g_signal_new("on_url",
> +			     G_TYPE_FROM_CLASS(klass),
> +			     G_SIGNAL_RUN_LAST,
> +			     G_STRUCT_OFFSET(EMFormatHTMLDisplayClass, on_url),
> +			     NULL, NULL,
> +			     gtk_marshal_VOID__STRING,
> +			     G_TYPE_NONE, 1,
> +			     G_TYPE_STRING);
> +
>  	efhd_builtin_init((EMFormatHTMLDisplayClass *)klass);
>  }
>  
> @@ -315,6 +327,7 @@
>  
>  	g_signal_connect(efhd->formathtml.html, "iframe_created", G_CALLBACK(efhd_iframe_created), efhd);
>  	g_signal_connect(efhd->formathtml.html, "link_clicked", G_CALLBACK(efhd_html_link_clicked), efhd);
> +	g_signal_connect(efhd->formathtml.html, "on_url", G_CALLBACK(efhd_html_on_url), efhd);
>  	g_signal_connect(efhd->formathtml.html, "button_press_event", G_CALLBACK(efhd_html_button_press_event), efhd);
>  
>  	return efhd;
> @@ -584,6 +597,13 @@
>  }
>  
>  static void
> +efhd_html_on_url (GtkHTML *html, const char *url, EMFormatHTMLDisplay *efhd)
> +{
> +	d(printf("on_url event '%s'\n", url));
> +	g_signal_emit((GObject *)efhd, efhd_signals[EFHD_ON_URL], 0, url);
> +}
> +
> +static void
>  efhd_complete(EMFormat *emf)
>  {
>  	EMFormatHTMLDisplay *efhd = (EMFormatHTMLDisplay *)emf;
> Index: mail/em-format-html-display.h
> ===================================================================
> RCS file: /cvs/gnome/evolution/mail/em-format-html-display.h,v
> retrieving revision 1.2
> diff -u -r1.2 em-format-html-display.h
> --- mail/em-format-html-display.h	17 Sep 2003 21:19:02 -0000	1.2
> +++ mail/em-format-html-display.h	6 Jan 2004 12:42:59 -0000
> @@ -35,6 +35,8 @@
>  	void (*link_clicked)(EMFormatHTMLDisplay *efhd, const char *uri);
>  	/* a part or a link button pressed event */
>  	int (*popup_event)(EMFormatHTMLDisplay *efhd, GdkEventButton *event, const char *uri, struct _CamelMimePart *part);
> +	/* the mouse is over a link */
> +	void (*on_url)(EMFormatHTMLDisplay *efhd, const char *uri);
>  };
>  
>  GType em_format_html_display_get_type(void);
> Index: mail/mail-component.c
> ===================================================================
> RCS file: /cvs/gnome/evolution/mail/mail-component.c,v
> retrieving revision 1.36
> diff -u -r1.36 mail-component.c
> --- mail/mail-component.c	10 Dec 2003 20:54:21 -0000	1.36
> +++ mail/mail-component.c	6 Jan 2004 12:43:02 -0000
> @@ -319,6 +319,13 @@
>  	(* G_OBJECT_CLASS (parent_class)->finalize) (object);
>  }
>  
> +static void
> +view_on_url (GObject *emitter, const char *url, const char *nice_url, MailComponent *mail_component)
> +{
> +	MailComponentPrivate *priv = mail_component->priv;
> +	
> +	e_activity_handler_set_message (priv->activity_handler, nice_url);
> +}
>  
>  /* Evolution::Component CORBA methods.  */
>  
> @@ -342,6 +349,9 @@
>  	tree_widget = (GtkWidget *) em_folder_tree_new_with_model (priv->model);
>  	em_folder_tree_enable_drag_and_drop ((EMFolderTree *) tree_widget);
>  	em_format_set_session ((EMFormat *) ((EMFolderView *) view_widget)->preview, session);
> +
> +	g_signal_connect (view_widget, "on-url", G_CALLBACK (view_on_url), mail_component);
> +	em_folder_view_set_statusbar ((EMFolderView*)view_widget, FALSE);
>  	
>  	statusbar_widget = e_task_bar_new ();
>  	e_activity_handler_attach_task_bar (priv->activity_handler, E_TASK_BAR (statusbar_widget));
> Index: shell/ChangeLog
> ===================================================================
> RCS file: /cvs/gnome/evolution/shell/ChangeLog,v
> retrieving revision 1.1361
> diff -u -r1.1361 ChangeLog
> --- shell/ChangeLog	30 Dec 2003 15:09:35 -0000	1.1361
> +++ shell/ChangeLog	6 Jan 2004 12:43:07 -0000
> @@ -1,3 +1,12 @@
> +2004-01-05  ERDI Gergo  <cactus cactus rulez org>
> +
> +	* e-task-bar.c (init): Create a separate label to the left of the
> +	progress messages...
> +	(e_task_bar_message): ...and allow components to set it...
> +
> +	* e-activity-handler.c (e_activity_handler_message): ...through
> +	this new ActivityHandler method
> +
>  2003-12-30  JP Rosevear <jpr ximian com>
>  
>  	* e-setup.[hc]: these just handle creating the ~/evolution dir and
> Index: shell/e-activity-handler.c
> ===================================================================
> RCS file: /cvs/gnome/evolution/shell/e-activity-handler.c,v
> retrieving revision 1.34
> diff -u -r1.34 e-activity-handler.c
> --- shell/e-activity-handler.c	3 Dec 2003 17:59:27 -0000	1.34
> +++ shell/e-activity-handler.c	6 Jan 2004 12:43:08 -0000
> @@ -279,6 +279,30 @@
>  	return g_object_new (e_activity_handler_get_type (), 0);
>  }
>  
> +void
> +e_activity_handler_set_message (EActivityHandler *activity_handler,
> +				const char       *message)
> +{
> +	EActivityHandlerPrivate *priv;
> +	GSList *i;
> +
> +	priv = activity_handler->priv;
> +
> +	for (i = priv->task_bars; i; i = i->next)
> +		e_task_bar_set_message (E_TASK_BAR (i->data), message);
> +}
> +
> +void
> +e_activity_handler_unset_message (EActivityHandler *activity_handler)
> +{
> +	EActivityHandlerPrivate *priv;
> +	GSList *i;
> +
> +	priv = activity_handler->priv;
> +
> +	for (i = priv->task_bars; i; i = i->next)
> +		e_task_bar_unset_message (E_TASK_BAR (i->data));
> +}
>  
>  void
>  e_activity_handler_attach_task_bar (EActivityHandler *activity_handler,
> Index: shell/e-activity-handler.h
> ===================================================================
> RCS file: /cvs/gnome/evolution/shell/e-activity-handler.h,v
> retrieving revision 1.8
> diff -u -r1.8 e-activity-handler.h
> --- shell/e-activity-handler.h	2 Dec 2003 03:41:33 -0000	1.8
> +++ shell/e-activity-handler.h	6 Jan 2004 12:43:08 -0000
> @@ -63,6 +63,11 @@
>  void  e_activity_handler_attach_task_bar  (EActivityHandler *activity_hanlder,
>  					   ETaskBar         *task_bar);
>  
> +void  e_activity_handler_set_message   (EActivityHandler *activity_handler,
> +				        const char       *message);
> +
> +void  e_activity_handler_unset_message (EActivityHandler *activity_handler);
> +
>  guint  e_activity_handler_operation_started  (EActivityHandler *activity_handler,
>  					      const char       *component_id,
>  					      GdkPixbuf        *icon_pixbuf,
> Index: shell/e-task-bar.c
> ===================================================================
> RCS file: /cvs/gnome/evolution/shell/e-task-bar.c,v
> retrieving revision 1.9
> diff -u -r1.9 e-task-bar.c
> --- shell/e-task-bar.c	2 Dec 2002 03:23:57 -0000	1.9
> +++ shell/e-task-bar.c	6 Jan 2004 12:43:09 -0000
> @@ -27,8 +27,15 @@
>  #include "e-task-bar.h"
>  
>  #include <gal/util/e-util.h>
> +#include <gtk/gtklabel.h>
>  
>  
> +struct _ETaskBarPrivate
> +{
> +	GtkLabel *message_label;
> +	GtkHBox  *hbox;
> +};
> +
>  #define PARENT_TYPE gtk_hbox_get_type ()
>  static GtkHBoxClass *parent_class = NULL;
>  
> @@ -46,7 +53,7 @@
>  
>  	component_ids_hash = g_hash_table_new (g_str_hash, g_str_equal);
>  
> -	box = GTK_BOX (task_bar);
> +	box = GTK_BOX (task_bar->priv->hbox);
>  
>  	for (p = box->children; p != NULL; p = p->next) {
>  		GtkBoxChild *child;
> @@ -90,7 +97,22 @@
>  static void
>  init (ETaskBar *task_bar)
>  {
> -	/* Nothing to do here.  */
> +	GtkWidget *label, *hbox;
> +	
> +	task_bar->priv = g_new (ETaskBarPrivate, 1);
> +
> +	gtk_box_set_spacing (GTK_BOX (task_bar), 10);
> +	
> +	label = gtk_label_new ("");
> +	gtk_widget_show (label);
> +	gtk_box_pack_start (GTK_BOX (task_bar), label, FALSE, TRUE, 0);
> +	gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); 
> +	task_bar->priv->message_label = GTK_LABEL (label);
> +
> +	hbox = gtk_hbox_new (0, FALSE);
> +	gtk_widget_show (hbox);
> +	gtk_container_add (GTK_CONTAINER (task_bar), hbox);	
> +	task_bar->priv->hbox = GTK_HBOX (hbox);
>  }
>  
>  
> @@ -115,6 +137,24 @@
>  }
>  
>  void
> +e_task_bar_set_message (ETaskBar   *task_bar,
> +			const char *message)
> +{
> +	if (message) {
> +		gtk_widget_show (GTK_WIDGET (task_bar->priv->message_label));
> +		gtk_label_set_text (task_bar->priv->message_label, message);
> +	} else {
> +		e_task_bar_unset_message (task_bar);
> +	}
> +}
> +
> +void
> +e_task_bar_unset_message (ETaskBar   *task_bar)
> +{
> +	gtk_widget_hide (GTK_WIDGET (task_bar->priv->message_label));
> +}
> +
> +void
>  e_task_bar_prepend_task (ETaskBar *task_bar,
>  			 ETaskWidget *task_widget)
>  {
> @@ -135,11 +175,11 @@
>  	child_info->fill = TRUE;
>  	child_info->pack = GTK_PACK_START;
>  
> -	box = GTK_BOX (task_bar);
> +	box = GTK_BOX (task_bar->priv->hbox);
>  
>  	box->children = g_list_prepend (box->children, child_info);
>  
> -	gtk_widget_set_parent (GTK_WIDGET (task_widget), GTK_WIDGET (task_bar));
> +	gtk_widget_set_parent (GTK_WIDGET (task_widget), GTK_WIDGET (task_bar->priv->hbox));
>  
>  	if (GTK_WIDGET_REALIZED (task_bar))
>  		gtk_widget_realize (GTK_WIDGET (task_widget));
> @@ -178,7 +218,7 @@
>  	g_return_val_if_fail (task_bar != NULL, NULL);
>  	g_return_val_if_fail (E_IS_TASK_BAR (task_bar), NULL);
>  
> -	child_info = (GtkBoxChild *) g_list_nth (GTK_BOX (task_bar)->children, n)->data;
> +	child_info = (GtkBoxChild *) g_list_nth (GTK_BOX (task_bar->priv->hbox)->children, n)->data;
>  
>  	return E_TASK_WIDGET (child_info->widget);
>  }
> Index: shell/e-task-bar.h
> ===================================================================
> RCS file: /cvs/gnome/evolution/shell/e-task-bar.h,v
> retrieving revision 1.3
> diff -u -r1.3 e-task-bar.h
> --- shell/e-task-bar.h	27 Oct 2001 01:09:28 -0000	1.3
> +++ shell/e-task-bar.h	6 Jan 2004 12:43:10 -0000
> @@ -44,7 +44,9 @@
>  typedef struct _ETaskBarClass   ETaskBarClass;
>  
>  struct _ETaskBar {
> -	GtkHBox parent;
> +	GtkHBox          parent;
> +	
> +	ETaskBarPrivate *priv;
>  };
>  
>  struct _ETaskBarClass {
> @@ -56,6 +58,10 @@
>  void         e_task_bar_construct        (ETaskBar    *task_bar);
>  GtkWidget   *e_task_bar_new              (void);
>  
> +void         e_task_bar_set_message      (ETaskBar    *task_bar,
> +					  const char  *message);
> +void         e_task_bar_unset_message    (ETaskBar    *task_bar);
> +
>  void         e_task_bar_prepend_task     (ETaskBar    *task_bar,
>  					  ETaskWidget *task_widget);
>  void         e_task_bar_remove_task      (ETaskBar    *task_bar,
> 
> -- 
>    .--= ULLA! =---------------------.   `We are not here to give users what
>    \     http://cactus.rulez.org     \   they want'  -- RMS, at GUADEC 2001
>     `---= cactus cactus rulez org =---'
> Gendo : Rei, you're a nude girl in a test tube. I like that.
> 
> 
> _______________________________________________
> evolution-hackers maillist  -  evolution-hackers lists ximian com
> http://lists.ximian.com/mailman/listinfo/evolution-hackers




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