Re: [evolution-patches] Re: [Evolution-hackers] Status bar
- From: Jeffrey Stedfast <fejj ximian com>
- To: ERDI Gergo <cactus cactus rulez org>
- Cc: Not Zed <notzed ximian com>, evolution-patches ximian com
- Subject: Re: [evolution-patches] Re: [Evolution-hackers] Status bar
- Date: Wed, 07 Jan 2004 09:20:27 -0500
sure, looks ok.
just remove the merge conflict stuff from the ChangeLog before
committing.
thanks,
Jeff
On Tue, 2004-01-06 at 19:05, ERDI Gergo wrote:
> On Wed, 7 Jan 2004, Not Zed wrote:
>
> > You obviosly want your patch to be looked at in a hurry with comments
> > like that!
>
> this was a pretty petty and unnecessary comment, especially considering
> how I played by all the "anal" formatting rules without saying a word.
>
> > Apart from some minor syntactical issues below, i'd say the patch is
> > about ready. Can you post the final to evolution-patches please?
>
> sure, here it is: (and to be true, I _am_ itching to check it in finally:)
>
> bye,
> Gergo
>
>
> Index: mail/ChangeLog
> ===================================================================
> RCS file: /cvs/gnome/evolution/mail/ChangeLog,v
> retrieving revision 1.2972
> diff -u -r1.2972 ChangeLog
> --- mail/ChangeLog 6 Jan 2004 04:13:06 -0000 1.2972
> +++ mail/ChangeLog 7 Jan 2004 00:01:27 -0000
> @@ -1,3 +1,20 @@
> +<<<<<<< ChangeLog
> +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-05 Jeffrey Stedfast <fejj ximian com>
>
> * em-folder-tree-model.c (folder_renamed_cb): Clone the
> @@ -49,6 +66,7 @@
> * em-format.c (em_format_find_handler): make virtual, rename to
> emf_find_handler.
>
> +>>>>>>> 1.2972
> 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.20
> diff -u -r1.20 em-folder-view.c
> --- mail/em-folder-view.c 5 Jan 2004 16:11:02 -0000 1.20
> +++ mail/em-folder-view.c 7 Jan 2004 00:01:33 -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) {
> + if (emfv->uic) {
> + bonobo_ui_component_set_status (emfv->uic, nice_uri, NULL);
> + /* Make sure the node keeps existing if nice_url == NULL */
> + 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 = NULL;
> +
> + 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);
> + }
> +
> + 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 7 Jan 2004 00:01:34 -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? */
> };
>
> 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.17
> diff -u -r1.17 em-format-html-display.c
> --- mail/em-format-html-display.c 5 Jan 2004 11:16:08 -0000 1.17
> +++ mail/em-format-html-display.c 7 Jan 2004 00:01:38 -0000
> @@ -106,6 +106,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;
> @@ -140,6 +141,7 @@
> enum {
> EFHD_LINK_CLICKED,
> EFHD_POPUP_EVENT,
> + EFHD_ON_URL,
> EFHD_LAST_SIGNAL,
> };
>
> @@ -290,6 +292,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);
> }
>
> @@ -324,6 +336,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;
> @@ -593,6 +606,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 7 Jan 2004 00:01:38 -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 7 Jan 2004 00:01:41 -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 7 Jan 2004 00:01:45 -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 7 Jan 2004 00:01:46 -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 7 Jan 2004 00:01:46 -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 7 Jan 2004 00:01:47 -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 7 Jan 2004 00:01:47 -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,
--
Jeffrey Stedfast
Evolution Hacker - Ximian, Inc.
fejj ximian com - www.ximian.com
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]