diff -up logjam-4.5.3/src/menu.c.BAD logjam-4.5.3/src/menu.c --- logjam-4.5.3/src/menu.c.BAD 2009-04-16 13:06:15.000000000 -0400 +++ logjam-4.5.3/src/menu.c 2009-04-16 13:09:12.000000000 -0400 @@ -274,6 +274,12 @@ static void menu_ljcut(JamWin *jw) { tools_ljcut(GTK_WINDOW(jw), jw->doc); } + +static void +menu_embedded_media(JamWin *jw) { + tools_embedded_media(GTK_WINDOW(jw), jw->doc); +} + static void menu_validate_xml(JamWin *jw) { tools_validate_xml(GTK_WINDOW(jw), jw->doc); @@ -415,6 +421,7 @@ static GtkItemFactoryEntry menu_items[] { N_("/Insert/_Image..."), NULL, menu_insert_image }, { N_("/Insert/_Journal Link..."), "L", menu_make_journal_link }, { N_("/Insert/lj-_cut..."), "X", menu_ljcut, 0, NULL }, +{ N_("/Insert/_Embedded Media..."), "E", menu_embedded_media }, { N_("/_View"), NULL, NULL, ACTION_VIEW, "" }, { N_("/View/_Security"), NULL, menu_view_cb, ACTION_VIEW_SECURITY, "" }, diff -up logjam-4.5.3/src/tools.c.BAD logjam-4.5.3/src/tools.c --- logjam-4.5.3/src/tools.c.BAD 2009-04-16 13:09:50.000000000 -0400 +++ logjam-4.5.3/src/tools.c 2009-04-16 14:42:17.000000000 -0400 @@ -322,6 +322,58 @@ tools_validate_xml(GtkWindow *win, JamDo g_free(str); } +/* FIXME: These two functions are practically identical. Abstract them to minimize code duplication. */ + +void +tools_embedded_media(GtkWindow *win, JamDoc *doc) { + GtkTextBuffer *buffer; + GtkWidget *dlg, *vbox, *hbox, *label, *entry; + char *text; + + dlg = gtk_dialog_new_with_buttons(_("Embedded Media"), win, + GTK_DIALOG_MODAL, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OK, GTK_RESPONSE_OK, + NULL); + gtk_dialog_set_default_response(GTK_DIALOG(dlg), GTK_RESPONSE_OK); + + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_set_border_width(GTK_CONTAINER(vbox), 10); + + entry = gtk_entry_new(); + gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE); + hbox = labelled_box_new(_("E_mbedded code:"), entry); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); + + label = gtk_label_new(NULL); + gtk_label_set_markup(GTK_LABEL(label), + _("This is where you paste the embedded code, e.g. for a YouTube video.")); + gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); + + jam_dialog_set_contents(GTK_DIALOG(dlg), vbox); + + if (gtk_dialog_run(GTK_DIALOG(dlg)) != GTK_RESPONSE_OK) { + gtk_widget_destroy(dlg); + return; + } + text = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1); + gtk_widget_destroy(dlg); + if (text[0] == 0) { + g_free(text); + text = NULL; + } + //xml_escape(&text); + buffer = jam_doc_get_text_buffer(doc); + + gtk_text_buffer_begin_user_action(buffer); /* start undo action */ + gtk_text_buffer_insert_at_cursor(buffer, "", -1); + gtk_text_buffer_insert_at_cursor(buffer, text, -1); + gtk_text_buffer_insert_at_cursor(buffer, "", -1); + g_free(text); + + gtk_text_buffer_end_user_action(buffer); +} + void tools_ljcut(GtkWindow *win, JamDoc *doc) { GtkTextBuffer *buffer; diff -up logjam-4.5.3/src/tools.h.BAD logjam-4.5.3/src/tools.h --- logjam-4.5.3/src/tools.h.BAD 2009-04-16 13:09:26.000000000 -0400 +++ logjam-4.5.3/src/tools.h 2009-04-16 13:09:45.000000000 -0400 @@ -16,5 +16,6 @@ void tools_insert_command_output (GtkWindow *win, JamDoc *doc); void tools_validate_xml (GtkWindow *win, JamDoc *doc); void tools_ljcut (GtkWindow *win, JamDoc *doc); +void tools_embedded_media (GtkWindow *win, JamDoc *doc); #endif /* tools_h */