Re: [evolution-patches] Patch to add open menu to right click popup for attachment(s) in meetings.
- From: Srinivasa Ragavan <sragavan novell com>
- To: lviren <lviren novell com>
- Cc: evolution-patches lists ximian com
- Subject: Re: [evolution-patches] Patch to add open menu to right click popup for attachment(s) in meetings.
- Date: Tue, 26 Jul 2005 11:44:47 +0530
On Tue, 2005-07-26 at 10:40 +0530, lviren wrote:
> Index: gui/dialogs/comp-editor.c
> ===================================================================
> RCS file: /cvs/gnome/evolution/calendar/gui/dialogs/comp-editor.c,v
> retrieving revision 1.143
> diff -u -p -r1.143 comp-editor.c
> --- gui/dialogs/comp-editor.c 20 Jul 2005 11:18:54 -0000 1.143
> +++ gui/dialogs/comp-editor.c 26 Jul 2005 04:47:59 -0000
> @@ -1016,6 +1016,47 @@ attachment_bar_icon_clicked_cb (EAttachm
> }
>
> /* Callbacks. */
> +static void
> +cab_open(EPopup *ep, EPopupItem *item, void *data)
> +{
> + EAttachmentBar *bar = data;
> + CompEditor *editor = COMP_EDITOR (gtk_widget_get_toplevel
> (GTK_WIDGET (bar)));
> + GnomeIconList *icon_list;
> + GList *p;
> + int num;
> + char *attach_file_url;
> + GError *error = NULL;
> +
> + icon_list = GNOME_ICON_LIST (bar);
> + p = gnome_icon_list_get_selection (icon_list);
Hmm, since your flag is one/many im pretty sure that you can get more
than one attachments here. It is a glist of selected attachments.
But you use just one, the first one. NO
> + if (p) {
> + EAttachment *attachment;
> + GSList *list;
> + const char *comp_uid= NULL;
> + const char *local_store =
> e_cal_get_local_attachment_store (editor->priv->client);
> +
> + e_cal_component_get_uid (editor->priv->comp,
> &comp_uid);
> + num = GPOINTER_TO_INT (p->data);
> + list = e_attachment_bar_get_attachment (bar, num);
> + attachment = list->data;
When you get the attachment, it is ref'ed. You are not unreffing it. It
leaks a lot. Incase of multi selection everything selected is leaked.
> + g_slist_free (list);
> +
> + attach_file_url = g_strconcat (local_store,
> + comp_uid,
> + "-",
> +
> camel_mime_part_get_filename(attachment->body),
> + NULL);
> +
> + /* launch the url now */
> + /* TODO should send GError and handle error
> conditions
> + * here */
> + gnome_url_show (attach_file_url, &error);
> +
> + if (error)
> + g_message ("DEBUG: Launch failed :(\n");
> + g_free (attach_file_url);
> + }
> +}
>
> static void
> cab_add(EPopup *ep, EPopupItem *item, void *data)
> @@ -1056,10 +1097,11 @@ cab_remove(EPopup *ep, EPopupItem *item,
>
> /* Popup menu handling. */
> static EPopupItem cab_popups[] = {
> - { E_POPUP_ITEM, "10.attach", N_("_Remove"), cab_remove, NULL,
> GTK_STOCK_REMOVE, E_CAL_POPUP_ATTACHMENTS_MANY },
> - { E_POPUP_ITEM, "20.attach", N_("_Properties"),
> cab_properties, NULL, GTK_STOCK_PROPERTIES,
> E_CAL_POPUP_ATTACHMENTS_ONE },
> - { E_POPUP_BAR, "30.attach.00", NULL, NULL, NULL, NULL,
> E_CAL_POPUP_ATTACHMENTS_MANY|E_CAL_POPUP_ATTACHMENTS_ONE },
> - { E_POPUP_ITEM, "30.attach.01", N_("_Add attachment..."),
> cab_add, NULL, GTK_STOCK_ADD, 0 },
> + { E_POPUP_ITEM, "10.attach", N_("_Open"), cab_open, NULL,
> GTK_STOCK_OPEN, E_CAL_POPUP_ATTACHMENTS_ONE |
> E_CAL_POPUP_ATTACHMENTS_MANY },
cant we have the mailer way of 'open in foo app'. Ideally we should move
forward one OPEN and a submenu of Open With having other applications.
> + { E_POPUP_ITEM, "20.attach", N_("_Remove"), cab_remove, NULL,
> GTK_STOCK_REMOVE, E_CAL_POPUP_ATTACHMENTS_MANY },
> + { E_POPUP_ITEM, "30.attach", N_("_Properties"),
> cab_properties, NULL, GTK_STOCK_PROPERTIES,
> E_CAL_POPUP_ATTACHMENTS_ONE },
> + { E_POPUP_BAR, "40.attach.00", NULL, NULL, NULL, NULL,
> E_CAL_POPUP_ATTACHMENTS_MANY|E_CAL_POPUP_ATTACHMENTS_ONE },
> + { E_POPUP_ITEM, "40.attach.01", N_("_Add attachment..."),
> cab_add, NULL, GTK_STOCK_ADD, 0 },
> };
>
> static void
> @@ -1100,11 +1142,21 @@ cab_popup(EAttachmentBar *bar, GdkEventB
> ECalPopup *ecp;
> ECalPopupTargetAttachments *t;
> GtkMenu *menu;
> -
> + CompEditorFlags flags;
> + CompEditor *editor;
> +
> + editor = COMP_EDITOR (gtk_widget_get_toplevel (GTK_WIDGET
> (bar)));
> + flags = comp_editor_get_flags (editor);
> attachments = e_attachment_bar_get_attachment(bar, id);
>
> - for (i=0;i<sizeof(cab_popups)/sizeof(cab_popups[0]);i++)
> + for (i=0;i<sizeof(cab_popups)/sizeof(cab_popups[0]);i++) {
> + if (!(flags & COMP_EDITOR_USER_ORG) &&
> + (!strcmp (cab_popups[i].path,
> "20.attach") ||
> + !strcmp (cab_popups[i].path,
> "40.attach.01")))
This is wrong way of doing. Ideally this should have been a attachment
flag in e-cal-popup and it should be filtered there. Any body could
write a e-plugin and popup can take those attachments. Those are not
caught here.
> + continue;
> + else
> menus = g_slist_prepend(menus, &cab_popups[i]);
> + }
>
> /** @HookPoint-ECalPopup: Calendar Attachment Bar Context Menu
> * @Id: org.gnome.evolution.calendar.attachmentbar.popup
> Index: ChangeLog
> ===================================================================
> RCS file: /cvs/gnome/evolution/calendar/ChangeLog,v
> retrieving revision 1.2777
> diff -u -p -r1.2777 ChangeLog
> --- ChangeLog 22 Jul 2005 11:41:35 -0000 1.2777
> +++ ChangeLog 26 Jul 2005 04:48:06 -0000
> @@ -1,3 +1,8 @@
> +2005-07-26 Viren.l <lviren novell com>
> + * gui/dialogs/comp-editor.c: (cab_open), (cab_popup):
> + Added Open to right click popup and cab_open callback.
> + Append Remove and Add attachments menus to popup if user is
> organizer.
> +
> 2005-07-22 Chenthill Palanisamy <pchenthill novell com>
>
> Fixes #309991
>
> _______________________________________________
> evolution-patches mailing list
> evolution-patches lists ximian com
> http://lists.ximian.com/mailman/listinfo/evolution-patches
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]