Index: src/messageview.c =================================================================== RCS file: /cvsroot/sylpheed-claws/sylpheed-claws/src/messageview.c,v retrieving revision 1.38 diff -c -r1.38 messageview.c *** src/messageview.c 15 May 2002 07:43:27 -0000 1.38 --- src/messageview.c 18 May 2002 18:40:38 -0000 *************** *** 107,112 **** --- 107,113 ---- messageview->textview = textview; messageview->imageview = imageview; messageview->mimeview = mimeview; + messageview->plugview = gtk_socket_new(); return messageview; } *************** *** 423,430 **** textview_set_all_headers(messageview->textview, all_headers); textview_set_all_headers(messageview->mimeview->textview, all_headers); ! if (mimeinfo->mime_type != MIME_TEXT && ! mimeinfo->mime_type != MIME_TEXT_HTML) { messageview_change_view_type(messageview, MVIEW_MIME); mimeview_show_message(messageview->mimeview, mimeinfo, file); } else { --- 424,431 ---- textview_set_all_headers(messageview->textview, all_headers); textview_set_all_headers(messageview->mimeview->textview, all_headers); ! if (mimeinfo->mime_type != MIME_TEXT /*&& ! mimeinfo->mime_type != MIME_TEXT_HTML*/) { messageview_change_view_type(messageview, MVIEW_MIME); mimeview_show_message(messageview->mimeview, mimeinfo, file); } else { *************** *** 441,468 **** { TextView *textview = messageview->textview; MimeView *mimeview = messageview->mimeview; if (messageview->type == type) return; if (type == MVIEW_MIME) { ! gtkut_container_remove ! (GTK_CONTAINER(GTK_WIDGET_PTR(messageview)), ! GTK_WIDGET_PTR(textview)); gtk_box_pack_start(GTK_BOX(messageview->vbox), GTK_WIDGET_PTR(mimeview), TRUE, TRUE, 0); gtk_container_add(GTK_CONTAINER(mimeview->vbox), GTK_WIDGET_PTR(textview)); } else if (type == MVIEW_TEXT) { ! gtkut_container_remove ! (GTK_CONTAINER(GTK_WIDGET_PTR(messageview)), ! GTK_WIDGET_PTR(mimeview)); ! if (mimeview->vbox == GTK_WIDGET_PTR(textview)->parent) gtkut_container_remove(GTK_CONTAINER(mimeview->vbox), GTK_WIDGET_PTR(textview)); gtk_box_pack_start(GTK_BOX(messageview->vbox), GTK_WIDGET_PTR(textview), TRUE, TRUE, 0); } else return; --- 442,490 ---- { TextView *textview = messageview->textview; MimeView *mimeview = messageview->mimeview; + GtkWidget *plugview = messageview->plugview; if (messageview->type == type) return; if (type == MVIEW_MIME) { ! if (messageview->type == MVIEW_TEXT) ! gtkut_container_remove ! (GTK_CONTAINER(GTK_WIDGET_PTR(messageview)), ! GTK_WIDGET_PTR(textview)); ! else if (messageview->type == MVIEW_PLUG) ! gtkut_container_remove ! (GTK_CONTAINER(GTK_WIDGET_PTR(messageview)), ! GTK_WIDGET_PTR(plugview)); gtk_box_pack_start(GTK_BOX(messageview->vbox), GTK_WIDGET_PTR(mimeview), TRUE, TRUE, 0); gtk_container_add(GTK_CONTAINER(mimeview->vbox), GTK_WIDGET_PTR(textview)); } else if (type == MVIEW_TEXT) { ! if (messageview->type == MVIEW_MIME) ! gtkut_container_remove ! (GTK_CONTAINER(GTK_WIDGET_PTR(messageview)), ! GTK_WIDGET_PTR(mimeview)); ! else if (messageview->type == MVIEW_PLUG) ! gtkut_container_remove ! (GTK_CONTAINER(GTK_WIDGET_PTR(messageview)), ! GTK_WIDGET_PTR(plugview)); if (mimeview->vbox == GTK_WIDGET_PTR(textview)->parent) gtkut_container_remove(GTK_CONTAINER(mimeview->vbox), GTK_WIDGET_PTR(textview)); gtk_box_pack_start(GTK_BOX(messageview->vbox), GTK_WIDGET_PTR(textview), TRUE, TRUE, 0); + } else if (type == MVIEW_PLUG) { + if (messageview->type == MVIEW_MIME) + gtkut_container_remove + (GTK_CONTAINER(GTK_WIDGET_PTR(messageview)), + GTK_WIDGET_PTR(mimeview)); + else if (messageview->type == MVIEW_TEXT) + gtkut_container_remove + (GTK_CONTAINER(GTK_WIDGET_PTR(messageview)), + GTK_WIDGET_PTR(textview)); + gtk_box_pack_start(GTK_BOX(messageview->vbox), + GTK_WIDGET_PTR(plugview), TRUE, TRUE, 0); } else return; *************** *** 487,492 **** --- 509,515 ---- textview_destroy(messageview->textview); imageview_destroy(messageview->imageview); mimeview_destroy(messageview->mimeview); + gtk_widget_destroy(messageview->plugview); g_free(messageview); Index: src/messageview.h =================================================================== RCS file: /cvsroot/sylpheed-claws/sylpheed-claws/src/messageview.h,v retrieving revision 1.6 diff -c -r1.6 messageview.h *** src/messageview.h 25 Feb 2002 09:22:00 -0000 1.6 --- src/messageview.h 18 May 2002 18:40:38 -0000 *************** *** 35,41 **** typedef enum { MVIEW_TEXT, ! MVIEW_MIME } MessageType; struct _MessageView --- 35,42 ---- typedef enum { MVIEW_TEXT, ! MVIEW_MIME, ! MVIEW_PLUG } MessageType; struct _MessageView *************** *** 50,55 **** --- 51,57 ---- TextView *textview; ImageView *imageview; MimeView *mimeview; + GtkWidget *plugview; MainWindow *mainwin; }; Index: src/mimeview.c =================================================================== RCS file: /cvsroot/sylpheed-claws/sylpheed-claws/src/mimeview.c,v retrieving revision 1.32 diff -c -r1.32 mimeview.c *** src/mimeview.c 18 May 2002 15:18:03 -0000 1.32 --- src/mimeview.c 18 May 2002 18:40:38 -0000 *************** *** 25,30 **** --- 25,31 ---- #include #include + #include #include #include #include *************** *** 53,59 **** #include "prefs_common.h" #include "rfc2015.h" #include "pgptext.h" - typedef enum { COL_MIMETYPE = 0, --- 54,59 ---- *************** *** 216,221 **** --- 216,222 ---- mimeview->popupmenu = popupmenu; mimeview->popupfactory = popupfactory; mimeview->type = -1; + mimeview->plugview = NULL; return mimeview; } *************** *** 347,352 **** --- 348,357 ---- void mimeview_destroy(MimeView *mimeview) { procmime_mimeinfo_free_all(mimeview->mimeinfo); + if (mimeview->plugview) { + printf("MIMVIEW destroyg %08x\n", mimeview->plugview); + gtk_widget_destroy(mimeview->plugview); + } g_free(mimeview->file); g_free(mimeview); } *************** *** 473,485 **** g_free(filename); } static void mimeview_change_view_type(MimeView *mimeview, MimeViewType type) { TextView *textview = mimeview->textview; ImageView *imageview = mimeview->imageview; GList *children; ! if (mimeview->type == type) return; children = gtk_container_children(GTK_CONTAINER(mimeview->mime_vbox)); if (children) { --- 478,542 ---- g_free(filename); } + static gint plugview_destroyed(GtkObject *o, gpointer data) + { + MimeView *m = (MimeView *) data; + printf("Destroy thingie %08x (%08x)\n", m->plugview, o); + m->plugview = NULL; + return TRUE; + } + + static void mimeview_show_dillo_part(MimeView *mimeview, MimeInfo *partinfo) + { + gchar *filename; + + if (!partinfo) return; + + filename = procmime_get_tmp_file_name(partinfo); + + if (procmime_get_part(filename, mimeview->file, partinfo) < 0) + alertpanel_error + (_("Can't get the part of multipart message.")); + else { + gchar *cmd; + /* Workaround for the GTK+ bug with handling scroll adjustments + * in GtkViewport */ + if (mimeview->plugview) + if (GTK_SOCKET(mimeview->plugview)->plug_window) { + gtk_widget_destroy(mimeview->plugview); + printf("Destroyed %08x\n", mimeview->plugview); + mimeview->plugview = NULL; + } + if (!mimeview->plugview) { + mimeview->plugview = gtk_socket_new(); + printf("Created %08x\n", mimeview->plugview); + gtk_signal_connect(GTK_OBJECT(mimeview->plugview), + "destroy", + GTK_SIGNAL_FUNC(plugview_destroyed), + mimeview); + } + mimeview_change_view_type(mimeview, MIMEVIEW_PLUG); + printf("SHowing %08x\n", mimeview->plugview); + gtk_widget_show(mimeview->plugview); + gtk_widget_realize(mimeview->plugview); + + cmd = g_strdup_printf("dillo \"%s\" -f -l -xid %d", filename, + GDK_WINDOW_XWINDOW(mimeview->plugview->window)); + execute_command_line(cmd, TRUE); + /*unlink(filename);*/ + } + + g_free(filename); + } static void mimeview_change_view_type(MimeView *mimeview, MimeViewType type) { TextView *textview = mimeview->textview; ImageView *imageview = mimeview->imageview; + GtkWidget *plugview = mimeview->plugview; GList *children; ! if (mimeview->type == type && type != MIMEVIEW_PLUG) return; ! printf("Changing... to "); children = gtk_container_children(GTK_CONTAINER(mimeview->mime_vbox)); if (children) { *************** *** 490,499 **** --- 547,563 ---- switch (type) { case MIMEVIEW_IMAGE: + printf("Changing... to IMAGE\n"); gtk_container_add(GTK_CONTAINER(mimeview->mime_vbox), GTK_WIDGET_PTR(imageview)); break; + case MIMEVIEW_PLUG: + printf("Changing... to PLUG\n"); + gtk_container_add(GTK_CONTAINER(mimeview->mime_vbox), + mimeview->plugview); + break; case MIMEVIEW_TEXT: + printf("Changing... to TEXT\n"); gtk_container_add(GTK_CONTAINER(mimeview->mime_vbox), GTK_WIDGET_PTR(textview)); break; *************** *** 510,516 **** procmime_mimeinfo_free_all(mimeview->mimeinfo); mimeview->mimeinfo = NULL; ! gtk_clist_clear(clist); textview_clear(mimeview->textview); imageview_clear(mimeview->imageview); --- 574,584 ---- procmime_mimeinfo_free_all(mimeview->mimeinfo); mimeview->mimeinfo = NULL; ! ! printf("Clearing...\n"); ! if (mimeview->plugview) ! gtk_widget_destroy(mimeview->plugview); ! gtk_clist_clear(clist); textview_clear(mimeview->textview); imageview_clear(mimeview->imageview); *************** *** 544,550 **** switch (partinfo->mime_type) { case MIME_TEXT: ! case MIME_TEXT_HTML: case MIME_TEXT_ENRICHED: case MIME_MESSAGE_RFC822: case MIME_MULTIPART: --- 612,618 ---- switch (partinfo->mime_type) { case MIME_TEXT: ! /*case MIME_TEXT_HTML:*/ case MIME_TEXT_ENRICHED: case MIME_MESSAGE_RFC822: case MIME_MULTIPART: *************** *** 560,565 **** --- 628,636 ---- } break; #endif + case MIME_TEXT_HTML: + mimeview_show_dillo_part(mimeview, partinfo); + break; default: mimeview_change_view_type(mimeview, MIMEVIEW_TEXT); #if USE_GPGME Index: src/mimeview.h =================================================================== RCS file: /cvsroot/sylpheed-claws/sylpheed-claws/src/mimeview.h,v retrieving revision 1.3 diff -c -r1.3 mimeview.h *** src/mimeview.h 25 Feb 2002 09:22:00 -0000 1.3 --- src/mimeview.h 18 May 2002 18:40:38 -0000 *************** *** 35,41 **** typedef enum { MIMEVIEW_TEXT, ! MIMEVIEW_IMAGE } MimeViewType; struct _MimeView --- 35,42 ---- typedef enum { MIMEVIEW_TEXT, ! MIMEVIEW_IMAGE, ! MIMEVIEW_PLUG } MimeViewType; struct _MimeView *************** *** 57,62 **** --- 58,64 ---- TextView *textview; ImageView *imageview; + GtkWidget *plugview; MessageView *messageview;