*** gui-dialogs.c.orig	Wed May  4 23:26:28 1994
--- gui-dialogs.c	Sun Jun 26 20:31:16 1994
*************** mo_status mo_post_print_window (mo_windo
*** 955,960 ****
--- 955,964 ----
  
  static XmxCallback (source_win_cb)
  {
+   /* patch start */
+   XmTextPosition cpos, tpos;
+   /* patch end */
+ 
    mo_window *win = mo_fetch_window_by_id (XmxExtractUniqid ((int)client_data));
    switch (XmxExtractToken ((int)client_data))
      {
*************** static XmxCallback (source_win_cb)
*** 967,972 ****
--- 971,990 ----
           mo_assemble_help_url ("docview-menubar-file.html#documentsource"),
           NULL, NULL);
        break;
+     /* patch start */
+     case 2:
+       XtVaGetValues ( win->source_text, XmNcursorPosition, &cpos, XmNtopCharacter, &tpos, NULL );
+ 
+       free (win->current_node->texthead);
+       win->current_node->texthead = XmxTextGetString (win->source_text);
+       win->current_node->text = win->current_node->texthead;
+       mo_refresh_window_text (win);
+ 
+       /* it's necessary to keep the XtVaSetValues in this order */
+       XtVaSetValues ( win->source_text, XmNcursorPosition, cpos, NULL );
+       XtVaSetValues ( win->source_text, XmNtopCharacter, tpos, NULL );
+       break;
+      /* patch end */
      }
  
    return;
*************** mo_status mo_post_source_window (mo_wind
*** 1002,1009 ****
        /* Info window: text widget, not editable. */
        XmxSetArg (XmNscrolledWindowMarginWidth, 10);
        XmxSetArg (XmNscrolledWindowMarginHeight, 10);
!       XmxSetArg (XmNcursorPositionVisible, False);
!       XmxSetArg (XmNeditable, False);
        XmxSetArg (XmNeditMode, XmMULTI_LINE_EDIT);
        XmxSetArg (XmNrows, 15);
        XmxSetArg (XmNcolumns, 80);
--- 1020,1030 ----
        /* Info window: text widget, not editable. */
        XmxSetArg (XmNscrolledWindowMarginWidth, 10);
        XmxSetArg (XmNscrolledWindowMarginHeight, 10);
! 
!       /* patch start */
!       XmxSetArg (XmNcursorPositionVisible, True);
!       XmxSetArg (XmNeditable, True);
!       /* end patch */
        XmxSetArg (XmNeditMode, XmMULTI_LINE_EDIT);
        XmxSetArg (XmNrows, 15);
        XmxSetArg (XmNcolumns, 80);
*************** mo_status mo_post_source_window (mo_wind
*** 1011,1018 ****
        
        dialog_sep = XmxMakeHorizontalSeparator (source_form);
        
!       buttons_form = XmxMakeFormAndTwoButtonsSqueezed
!         (source_form, source_win_cb, "Dismiss", "Help...", 0, 1);
  
        /* Constraints for source_form. */
        XmxSetOffsets (label, 13, 0, 10, 0);
--- 1032,1041 ----
        
        dialog_sep = XmxMakeHorizontalSeparator (source_form);
        
!       /* patch start */
!       buttons_form = XmxMakeFormAndThreeButtonsSqueezed
!         (source_form, source_win_cb, "Dismiss", "Update", "Help...", 0, 2, 1);
!       /* end patch */
  
        /* Constraints for source_form. */
        XmxSetOffsets (label, 13, 0, 10, 0);
