diff options
-rw-r--r-- | mail/ChangeLog | 9 | ||||
-rw-r--r-- | mail/mail-display.c | 87 | ||||
-rw-r--r-- | mail/message-list.c | 1 |
3 files changed, 92 insertions, 5 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index f7ab2519fd..55015025bf 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,12 @@ +2001-02-06 Iain Holmes <iain@ximian.com> + + * mail-display.c (pixbuf_gen_idle): Set the size of the icon to 24x24 + always. + (button_press): Function to toggle the disposition of an attachment. + (on_object_requested): New way to indicate functions on attachments. + + * message-list.c (hide_load_state): Free the olduid. + 2001-02-06 Jeffrey Stedfast <fejj@ximian.com> * mail-config-druid.c (set_defaults): Updated to checkfor diff --git a/mail/mail-display.c b/mail/mail-display.c index fbca3bc8c1..404dc9f3ed 100644 --- a/mail/mail-display.c +++ b/mail/mail-display.c @@ -264,8 +264,27 @@ inline_cb (GtkWidget *widget, gpointer user_data) mail_display_queue_redisplay (md); } +static void +button_press (GtkWidget *widget, CamelMimePart *part) +{ + MailDisplay *md; + + md = gtk_object_get_data (GTK_OBJECT (widget), "MailDisplay"); + if (md == NULL) { + g_warning ("No MailDisplay on button!"); + return; + } + + if (mail_part_is_inline (part)) + camel_mime_part_set_disposition (part, "attachment"); + else + camel_mime_part_set_disposition (part, "inline"); + + mail_display_queue_redisplay (md); +} + static gboolean -pixmap_press (GtkWidget *ebox, GdkEventButton *event, EScrollFrame *user_data) +pixmap_press (GtkWidget *widget, GdkEventButton *event, EScrollFrame *user_data) { EPopupMenu menu[] = { { N_("Save to Disk..."), NULL, @@ -280,14 +299,16 @@ pixmap_press (GtkWidget *ebox, GdkEventButton *event, EScrollFrame *user_data) MailMimeHandler *handler; int mask = 0; +#ifdef USE_OLD_DISPLAY_STYLE if (event->button != 3) { gtk_propagate_event (GTK_WIDGET (user_data), (GdkEvent *)event); return TRUE; } +#endif - part = gtk_object_get_data (GTK_OBJECT (ebox), "CamelMimePart"); - handler = mail_lookup_handler (gtk_object_get_data (GTK_OBJECT (ebox), + part = gtk_object_get_data (GTK_OBJECT (widget), "CamelMimePart"); + handler = mail_lookup_handler (gtk_object_get_data (GTK_OBJECT (widget), "mime_type")); /* Save item */ @@ -332,7 +353,7 @@ pixmap_press (GtkWidget *ebox, GdkEventButton *event, EScrollFrame *user_data) mask |= 2; } - e_popup_menu_run (menu, (GdkEvent *)event, mask, 0, ebox); + e_popup_menu_run (menu, (GdkEvent *)event, mask, 0, widget); g_free (menu[1].name); g_free (menu[2].name); return TRUE; @@ -478,7 +499,7 @@ pixbuf_gen_idle (struct _PixbufLoader *pbl) /* Add the pixbuf to the cache */ g_hash_table_insert (pbl->md->thumbnail_cache, pbl->cid, mini); - gtk_widget_set_usize (pbl->pixmap, width, height); + gtk_widget_set_usize (pbl->pixmap, 24, 24); gtk_signal_disconnect (GTK_OBJECT (pbl->eb), pbl->destroy_id); if (pbl->loader) { @@ -613,7 +634,12 @@ on_object_requested (GtkHTML *html, GtkHTMLEmbedded *eb, gpointer data) if (cid != eb->classid) { /* This is a part wrapper */ +#ifdef USE_OLD_DISPLAY_STYLE GtkWidget *ebox; +#else + GtkWidget *button, *mainbox, *hbox, *arrow, *popup; + MailMimeHandler *handler; +#endif struct _PixbufLoader *pbl; pbl = g_new0 (struct _PixbufLoader, 1); @@ -640,6 +666,7 @@ on_object_requested (GtkHTML *html, GtkHTMLEmbedded *eb, gpointer data) g_idle_add_full (G_PRIORITY_LOW, (GSourceFunc)pixbuf_gen_idle, pbl, NULL); +#ifdef USE_OLD_DISPLAY_STYLE ebox = gtk_event_box_new (); gtk_widget_set_sensitive (GTK_WIDGET (ebox), TRUE); gtk_widget_add_events (GTK_WIDGET (ebox), @@ -657,6 +684,56 @@ on_object_requested (GtkHTML *html, GtkHTMLEmbedded *eb, gpointer data) gtk_container_add (GTK_CONTAINER (ebox), pbl->pixmap); gtk_widget_show_all (ebox); gtk_container_add (GTK_CONTAINER (eb), ebox); +#else + mainbox = gtk_hbox_new (FALSE, 0); + + button = gtk_button_new (); + gtk_object_set_data (GTK_OBJECT (button), "MailDisplay", md); + + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (button_press), medium); + + hbox = gtk_hbox_new (FALSE, 2); + gtk_container_set_border_width (GTK_CONTAINER (hbox), 2); + + if (mail_part_is_inline (medium)) { + arrow = gnome_stock_new_with_icon (GNOME_STOCK_PIXMAP_DOWN); + } else { + arrow = gnome_stock_new_with_icon (GNOME_STOCK_PIXMAP_FORWARD); + } + gtk_box_pack_start (GTK_BOX (hbox), arrow, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (hbox), pbl->pixmap, TRUE, TRUE, 0); + gtk_container_add (GTK_CONTAINER (button), hbox); + + popup = gtk_button_new (); + gtk_container_add (GTK_CONTAINER (popup), + gtk_arrow_new (GTK_ARROW_DOWN, + GTK_SHADOW_ETCHED_IN)); + + gtk_object_set_data (GTK_OBJECT (popup), "MailDisplay", md); + gtk_object_set_data (GTK_OBJECT (popup), "CamelMimePart", + medium); + gtk_object_set_data_full (GTK_OBJECT (popup), "mime_type", + g_strdup (eb->type), + (GDestroyNotify)g_free); + + gtk_signal_connect (GTK_OBJECT (popup), "button_press_event", + GTK_SIGNAL_FUNC (pixmap_press), md->scroll); + + gtk_box_pack_start (GTK_BOX (mainbox), button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (mainbox), popup, TRUE, TRUE, 0); + gtk_widget_show_all (mainbox); + + handler = mail_lookup_handler (eb->type); + if (handler && handler->builtin) { + gtk_widget_set_sensitive (button, TRUE); + } else { + gtk_widget_set_sensitive (button, FALSE); + } + + gtk_container_add (GTK_CONTAINER (eb), mainbox); +#endif + return TRUE; } diff --git a/mail/message-list.c b/mail/message-list.c index 5c2904d795..7ffc21aa95 100644 --- a/mail/message-list.c +++ b/mail/message-list.c @@ -2396,6 +2396,7 @@ static void hide_load_state(MessageList *ml) if (camel_folder_summary_decode_string(in, &olduid) != -1) { uid = e_mempool_strdup(ml->hidden_pool, olduid); + g_free (olduid); g_hash_table_insert(ml->hidden, uid, uid); } } |