cdesktopenv/cde/programs/dtfile/dtcopy/copydialog.c

803 lines
24 KiB
C

/*
* CDE - Common Desktop Environment
*
* Copyright (c) 1993-2012, The Open Group. All rights reserved.
*
* These libraries and programs are free software; you can
* redistribute them and/or modify them under the terms of the GNU
* Lesser General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* These libraries and programs are distributed in the hope that
* they will be useful, but WITHOUT ANY WARRANTY; without even the
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with these libraries and programs; if not, write
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
* Floor, Boston, MA 02110-1301 USA
*/
/* $XConsortium: copydialog.c /main/6 1996/10/29 17:08:29 mustafa $ */
/************************************<+>*************************************
****************************************************************************
*
* FILE: copydialog.c
*
*
* DESCRIPTION: create dtcopy main dialog window
*
* FUNCTIONS: cancel_callback
* create_copydir_dialog
* create_error_text_window
* desensitize_copy_action_area
* display_cancel_warning
* get_icons
* ok_callback
* pause_callback
* sensitize_copy_action_area
* warning_no_callback
* warning_yes_callback
*
*
* (c) Copyright 1993, 1994, 1995 Hewlett-Packard Company
* (c) Copyright 1993, 1994, 1995 International Business Machines Corp.
* (c) Copyright 1993, 1994, 1995 Sun Microsystems, Inc.
* (c) Copyright 1993, 1994, 1995 Novell, Inc.
*
****************************************************************************
************************************<+>*************************************/
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <signal.h>
#include <sys/wait.h>
#include <time.h>
#include <X11/Intrinsic.h>
#include <X11/StringDefs.h>
#include <Xm/Xm.h>
#include <Xm/XmP.h>
#include <Xm/PushB.h>
#include <Xm/Label.h>
#include <Xm/Form.h>
#include <Xm/Frame.h>
#include <Xm/BulletinB.h>
#include <Xm/MessageB.h>
#include <Xm/Text.h>
#include <Xm/TextF.h>
#include <Xm/ScrolledW.h>
#include <Xm/Separator.h>
#include <Xm/XmStrDefs.h>
#include <Xm/ToggleB.h>
#include "dtcopy.h"
#include "sharedFuncs.h"
#define VERTICAL_SPACING 5
#define HORIZONTAL_SPACING 8
#define TOP_SPACING (VERTICAL_SPACING + 5)
#define INDENTED_SPACING (HORIZONTAL_SPACING + 5)
/* Cannot put into sharedFuncs.h due to conflict with FileManip.c */
extern int Check(
char *spth,
char *dpth,
int mode);
/*--------------------------------------------------------------------
* Global variables
*------------------------------------------------------------------*/
static Pixmap pxWorking;
static Pixmap pxStopped;
static int pxWorkingMargin;
static int pxStoppedMargin;
static Widget icon;
static void
get_icons(
Widget w)
{
Arg args[2];
Pixel background, foreground, top_shadow, bottom_shadow, select;
Colormap colormap;
unsigned int width1, width2, height, dummy;
/* get foreground and background colors */
XtSetArg (args[0], XmNbackground, &background);
XtSetArg (args[1], XmNcolormap, &colormap);
XtGetValues (w, args, 2);
XmGetColors ( XtScreen(w) , colormap, background,
&foreground, &top_shadow, &bottom_shadow, &select);
/* get "working" pixmap */
pxWorking = XmGetPixmapByDepth(XtScreen(w), "xm_working",
foreground, background, w->core.depth);
if (pxWorking == XmUNSPECIFIED_PIXMAP)
pxWorking = XmGetPixmapByDepth(XtScreen(w), "default_xm_working",
foreground, background, w->core.depth);
/* get "stopped/done" pixmap */
pxStopped = XmGetPixmapByDepth(XtScreen(w), "xm_information",
foreground, background, w->core.depth);
if (pxStopped == XmUNSPECIFIED_PIXMAP)
pxStopped = XmGetPixmapByDepth(XtScreen(w), "default_xm_information",
foreground, background, w->core.depth);
/* get the width of the two pixmaps */
XGetGeometry(XtDisplay(w), pxWorking,
(Window *) &dummy, /* returned root window */
(int *) &dummy, (int *) &dummy, /* x, y of pixmap */
&width1, &height, /* pixmap width, height */
&dummy, &dummy); /* border width, depth */
XGetGeometry(XtDisplay(w), pxStopped,
(Window *) &dummy, /* returned root window */
(int *) &dummy, (int *) &dummy, /* x, y of pixmap */
&width2, &height, /* pixmap width, height */
&dummy, &dummy); /* border width, depth */
/* Compute margins necessary to make the labels the same width */
if (width1 > width2)
{
pxWorkingMargin = 0;
pxStoppedMargin = width1 - width2;
}
else
{
pxWorkingMargin = width2 - width1;
pxStoppedMargin = 0;
}
}
/*--------------------------------------------------------------------
* sensitize & desensitize buttons in copy action area
*------------------------------------------------------------------*/
void
sensitize_copy_action_area(
Widget *pushbutton_array)
{
/* Change icon to "working" */
XtVaSetValues (icon,
XmNlabelPixmap, pxWorking,
XmNmarginLeft, pxWorkingMargin/2,
XmNmarginRight, (pxWorkingMargin + 1)/2,
NULL);
/* Desensitize the OK button */
XtVaSetValues (pushbutton_array[0],
XmNsensitive, FALSE,
NULL);
/* Sensitize the Pause button */
XtVaSetValues (pushbutton_array[1],
XmNsensitive, TRUE,
NULL);
/* Sensitize the Cancel button */
XtVaSetValues (pushbutton_array[2],
XmNsensitive, TRUE,
NULL);
}
void
desensitize_copy_action_area(
Widget *pushbutton_array)
{
/* Change icon to "stopped" */
XtVaSetValues (icon,
XmNlabelPixmap, pxStopped,
XmNmarginLeft, pxStoppedMargin/2,
XmNmarginRight, (pxStoppedMargin + 1)/2,
NULL);
/* Sensitize the OK button */
XtVaSetValues (pushbutton_array[0],
XmNsensitive, TRUE,
NULL);
/* Desensitize the Pause button */
XtVaSetValues (pushbutton_array[1],
XmNsensitive, FALSE,
NULL);
/* Desensitize the Cancel button */
XtVaSetValues (pushbutton_array[2],
XmNsensitive, FALSE,
NULL);
}
/*---------------------------------------------------------------------
*
* warning_yes_callback and warning_no_callback
*
* callback for the warning dialog displayed when user selects cancel
*
*---------------------------------------------------------------------*/
static void
warning_yes_callback(
Widget w,
XtPointer client_data,
XtPointer call_data)
{
G_do_copy=FALSE;
G_wait_on_input = FALSE;
if (G_over_dialog != NULL) {
G_overwrite_selection = G_SKIP;
XtDestroyWidget(G_over_dialog);
G_over_dialog = NULL;
}
if (G_error_dialog != NULL) {
XtDestroyWidget(G_error_dialog);
G_error_dialog = NULL;
}
G_dialog_closed = TRUE;
G_pause_copy = FALSE;
}
static void
warning_no_callback(
Widget w,
XtPointer client_data,
XtPointer call_data)
{
G_pause_copy = G_user_pause_copy;
}
/*-------------------------
*
* display_cancel_warning
*
*------------------------*/
void
display_cancel_warning(Widget parent)
{
XmString msg, dialogTitle, cancelMsg, resumeMsg;
int n;
Arg args[20];
Widget dialog;
String copyWarnMessage = "This will stop the copy process. Any files that have\n\
already been copied will remain in the destination folder.";
String moveWarnMessage = "This will stop the move process. Any files that have\n\
already been moved will remain in the destination folder.";
if (G_move)
{
dialogTitle = XmStringCreateLocalized (GETMESSAGE(3, 12, "Folder Move - Warning"));
msg = XmStringCreateLocalized (GETMESSAGE(3, 10, moveWarnMessage));
cancelMsg = XmStringCreateLocalized (GETMESSAGE(3, 15, "Cancel Move"));
resumeMsg = XmStringCreateLocalized (GETMESSAGE(3, 16, "Continue Move"));
}
else
{
dialogTitle = XmStringCreateLocalized (GETMESSAGE(3, 11, "Folder Copy - Warning"));
msg = XmStringCreateLocalized (GETMESSAGE(3, 7, copyWarnMessage));
cancelMsg = XmStringCreateLocalized (GETMESSAGE(3, 13, "Cancel Copy"));
resumeMsg = XmStringCreateLocalized (GETMESSAGE(3, 14, "Continue Copy"));
}
n = 0;
XtSetArg(args[n], XmNmessageString, msg); n++;
XtSetArg(args[n], XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL); n++;
XtSetArg(args[n], XmNdialogTitle, dialogTitle); n++;
dialog = (Widget) XmCreateWarningDialog(parent, "warnDialog", args, n);
XmStringFree(msg);
XmStringFree(dialogTitle);
n = 0;
XtSetArg(args[n], XmNlabelString, cancelMsg); n++;
XtSetValues((Widget) XmMessageBoxGetChild(dialog, XmDIALOG_OK_BUTTON), args, n);
XmStringFree(cancelMsg);
n = 0;
XtSetArg(args[n], XmNlabelString, resumeMsg); n++;
XtSetValues((Widget) XmMessageBoxGetChild(dialog, XmDIALOG_CANCEL_BUTTON), args, n);
XmStringFree(resumeMsg);
XtAddCallback((Widget) XmMessageBoxGetChild(dialog, XmDIALOG_OK_BUTTON),
XmNactivateCallback,
warning_yes_callback,
dialog);
XtAddCallback((Widget) XmMessageBoxGetChild(dialog, XmDIALOG_CANCEL_BUTTON),
XmNactivateCallback,
warning_no_callback,
dialog);
XtAddCallback((Widget) XmMessageBoxGetChild(dialog, XmDIALOG_HELP_BUTTON),
XmNactivateCallback,
help_callback,
(XtPointer) STOPW_HELP_DIALOG);
XtManageChild(dialog);
} /* end display_cancel_warning */
/*--------------------------------------------------------------------
* callbacks
*------------------------------------------------------------------*/
static void
ok_callback(
Widget w,
XtPointer client_data,
XtPointer call_data)
{
G_dialog_closed = TRUE;
G_do_copy = FALSE;
return;
}
void
cancel_callback(
Widget w,
XtPointer client_data,
XtPointer call_data)
{
display_cancel_warning(G_copy_dialog);
G_pause_copy = TRUE;
}
static void
pause_callback(Widget w, XtPointer client_data, XtPointer call_data)
{
XmString xm_string;
Pixmap px;
int margin;
G_pause_copy = !G_pause_copy;
G_user_pause_copy = !G_user_pause_copy;
if (G_user_pause_copy)
{
xm_string = XmStringCreateLocalized(GETMESSAGE(3, 1, "Resume"));
px = pxStopped;
margin = pxStoppedMargin;
}
else
{
xm_string = XmStringCreateLocalized(GETMESSAGE(3, 2, "Pause"));
px = pxWorking;
margin = pxWorkingMargin;
}
XtVaSetValues(w,
XmNlabelString, xm_string,
NULL);
XtVaSetValues(icon,
XmNlabelPixmap, px,
XmNmarginLeft, margin/2,
XmNmarginRight, (margin + 1)/2,
NULL);
return;
}
/*--------------------------------------------------------------------
* create dtcopy dialog
* these widgets are not managed until there is an error
*------------------------------------------------------------------*/
static Widget
create_error_text_window (
Widget parent_widget,
Widget top_widget,
Widget bottom_widget)
{
Widget scrolled_text;
Arg args[15];
int n;
n = 0;
/* set text to non-editable */
XtSetArg(args[n], XmNeditable, FALSE); n ++;
XtSetArg(args[n], XmNcursorPositionVisible, FALSE); n ++;
XtSetArg(args[n], XmNeditMode, XmMULTI_LINE_EDIT); n++;
XtSetArg(args[n], XmNrows, 5); n++;
XtSetArg(args[n], XmNscrollVertical, True); n++;
XtSetArg(args[n], XmNscrollHorizontal, True); n++;
/* create the scrolled_text_window */
scrolled_text = XmCreateScrolledText(parent_widget,"error_text", args, n);
/* perform top attachments */
XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNtopWidget,top_widget); n++;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNleftOffset, INDENTED_SPACING); n++;
XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNbottomWidget,bottom_widget); n++;
XtSetValues(XtParent(scrolled_text), args, n);
XtUnmanageChild(XtParent(scrolled_text));
return (scrolled_text);
}
Boolean
create_copydir_dialog(
Widget parent_widget,
char *source,
char *target)
{
Arg args[10];
int n;
XmString xm_string;
Widget form, form1, action_area, summary_label, separator2;
Widget source_label, source_text_field, target_label, target_text_field;
char target_folder[MAX_PATH], target_object[MAX_PATH];
Pixel background;
Pixel foreground;
char *ttarget,*tsource;
Dimension width_target, width_source;
static ActionAreaItem action_items[] = {
{"Ok", 6, 1, ok_callback, NULL},
{"Pause", 6, 2, pause_callback, NULL},
{"Cancel Copy", 6, 7, cancel_callback, NULL}, /* possibly changed below to Cancel Move*/
{"Help", 6, 4, help_callback, (XtPointer) HELP_DIR_COPY},
};
ActionAreaDefn copydirActions = {
XtNumber(action_items),
0, /* Ok is default action */
action_items
};
/* Save the name of the source directory in order to truncate the pathname */
/* displayed as the copy proceeds ... see function UpdateStatus. */
snprintf(G_source_dir, sizeof(G_source_dir), "%s", source);
tsource = (char * )get_path(source);
ttarget = (char * )get_path(target);
if(Check(tsource,ttarget,G_move))
return False;
split_path(ttarget,target_folder,target_object);
if (G_move)
{
action_items[2].label = "Cancel Move";
action_items[2].msg_num = 8;
}
/* create a frame around the dialog for better
separation from window border */
G_copy_dialog =
XtVaCreateWidget("outerFrame",
xmFrameWidgetClass,
parent_widget,
XmNshadowThickness, 3,
XmNshadowType, XmSHADOW_ETCHED_IN,
NULL);
/* Create the Manager Widget, form, for the copy dialog */
form = XtVaCreateManagedWidget ("dialog_form",
xmFormWidgetClass,
G_copy_dialog,
XmNverticalSpacing, VERTICAL_SPACING,
XmNwidth, 500,
XmNhorizontalSpacing, HORIZONTAL_SPACING,
NULL);
/* create the toggle button */
xm_string = XmStringCreateLocalized(GETMESSAGE(4, 2, "Pause for errors"));
G_toggle_main = XtVaCreateManagedWidget("toggle",
xmToggleButtonWidgetClass,
form,
XmNlabelString, xm_string,
XmNset, !G_ignore_errors,
XmNtopAttachment, XmATTACH_FORM,
XmNtopOffset, TOP_SPACING,
XmNrightAttachment, XmATTACH_FORM,
XmNrightOffset, INDENTED_SPACING,
XmNalignment, XmALIGNMENT_BEGINNING,
NULL);
XtAddCallback(G_toggle_main, XmNvalueChangedCallback, toggle_callback, NULL);
XmStringFree(xm_string);
/* Create a form for the working/stopped icon, from/to path names, and summary lines */
form1 = XtVaCreateWidget ("msg_form",
xmFormWidgetClass,
form,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, G_toggle_main,
XmNtopOffset, TOP_SPACING,
XmNleftAttachment, XmATTACH_FORM,
XmNrightAttachment, XmATTACH_FORM,
NULL);
/* Create the working/stopped icon */
get_icons(form1);
icon = XtVaCreateManagedWidget("working_icon",
xmLabelWidgetClass,
form1,
XmNlabelType, XmPIXMAP,
XmNlabelPixmap, pxWorking,
XmNmarginLeft, pxWorkingMargin/2,
XmNmarginRight, (pxWorkingMargin + 1)/2,
XmNtopAttachment, XmATTACH_FORM,
XmNbottomAttachment, XmATTACH_FORM,
XmNleftAttachment, XmATTACH_FORM,
NULL);
/* MJT Get color map from this particular spot in the
widget hierarchy. This is being done because of a strange
behavior found in the widget hierarchy. The behavior is
identified by a change of the background and forground color
making children widgets look somewhat odd. It is possible
that this is a bug that will be modified in the future.
*/
XtSetArg (args[0], XmNbackground, &background);
XtSetArg (args[1], XmNforeground, &foreground);
XtGetValues (form1, args, 2);
/* Create the Source Directory Widgets */
if (G_move)
xm_string = XmStringCreateLocalized(GETMESSAGE(3, 3, "Moving:"));
else
xm_string = XmStringCreateLocalized(GETMESSAGE(3, 4, "Copying:"));
source_label =
XtVaCreateManagedWidget("source_label",
xmLabelWidgetClass,
form1,
XmNlabelString, xm_string,
XmNalignment, XmALIGNMENT_BEGINNING,
XmNtopAttachment, XmATTACH_FORM,
XmNleftAttachment, XmATTACH_WIDGET,
XmNleftWidget, icon,
XmNleftOffset, HORIZONTAL_SPACING,
NULL);
XmStringFree(xm_string);
xm_string = XmStringCreateLocalized(tsource);
source_text_field =
XtVaCreateManagedWidget("source_text_field",
xmLabelWidgetClass,
form1,
XmNlabelString, xm_string,
XmNalignment, XmALIGNMENT_BEGINNING,
XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
XmNtopWidget, source_label,
XmNtopOffset, 0,
XmNleftAttachment, XmATTACH_WIDGET,
XmNleftWidget, source_label,
XmNrightAttachment, XmATTACH_FORM,
NULL);
XmStringFree(xm_string);
/* Create the Target Directory Widgets */
xm_string = XmStringCreateLocalized(GETMESSAGE(3, 5, "Into folder:"));
target_label =
XtVaCreateManagedWidget("target_label",
xmLabelWidgetClass,
form1,
XmNlabelString, xm_string,
XmNalignment, XmALIGNMENT_BEGINNING,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, source_label,
XmNleftAttachment, XmATTACH_WIDGET,
XmNleftWidget, icon,
XmNleftOffset, HORIZONTAL_SPACING,
NULL);
XmStringFree(xm_string);
/* modify width of shorter label so the labels are right-aligned */
XtVaGetValues(target_label,
XmNwidth, &width_target,
NULL);
XtVaGetValues(source_label,
XmNwidth, &width_source,
NULL);
if (width_target < width_source)
{
XtVaSetValues(target_label,
XmNwidth, width_source,
XmNalignment, XmALIGNMENT_END,
NULL);
}
else if (width_target > width_source) /* do nothing if widths are the same */
{
XtVaSetValues(source_label,
XmNwidth, width_target,
XmNalignment, XmALIGNMENT_END,
NULL);
}
xm_string = XmStringCreateLocalized(target_folder);
target_text_field =
XtVaCreateManagedWidget("target_text_field",
xmLabelWidgetClass,
form1,
XmNlabelString, xm_string,
XmNalignment, XmALIGNMENT_BEGINNING,
XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
XmNtopWidget, target_label,
XmNtopOffset, 0,
XmNleftAttachment, XmATTACH_WIDGET,
XmNleftWidget, target_label,
XmNrightAttachment, XmATTACH_FORM,
NULL);
/* create copy-summary text field */
if (G_move)
xm_string = XmStringCreateLocalized(GETMESSAGE(3, 17, "Moved"));
else
xm_string = XmStringCreateLocalized(GETMESSAGE(3, 18, "Copied"));
summary_label =
XtVaCreateManagedWidget("target_label",
xmLabelWidgetClass,
form1,
XmNlabelString, xm_string,
XmNalignment, XmALIGNMENT_END,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, target_label,
XmNtopOffset, TOP_SPACING,
XmNrightAttachment, XmATTACH_OPPOSITE_WIDGET,
XmNrightWidget, target_label,
XmNrightOffset, 0,
XmNleftAttachment, XmATTACH_WIDGET,
XmNleftWidget, icon,
NULL);
XmStringFree(xm_string);
G_summary_text =
XtVaCreateManagedWidget("copy_summary",
xmLabelWidgetClass,
form1,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, target_label,
XmNtopOffset, TOP_SPACING,
XmNleftAttachment, XmATTACH_WIDGET,
XmNleftWidget, summary_label,
XmNrightAttachment, XmATTACH_FORM,
XmNalignment, XmALIGNMENT_BEGINNING,
NULL);
/* that is all that goes in form1 */
XtManageChild(form1);
/* create the action area of the Copy Directory Dialog */
action_area =
Create_Action_Area(form, copydirActions, G_copy_action_area_pbuttons);
/* create the second separator widget */
separator2 =
XtVaCreateManagedWidget("separator",
xmSeparatorWidgetClass,
form,
XmNbottomAttachment, XmATTACH_WIDGET,
XmNbottomWidget, action_area,
XmNleftAttachment, XmATTACH_FORM,
XmNrightAttachment, XmATTACH_FORM,
NULL);
/* create copy-status text field */
G_status_text =
XtVaCreateManagedWidget("copy_status",
xmTextFieldWidgetClass,
form,
XmNbackground, background,
XmNforeground, foreground,
/*
XmNcolumns, 1,
*/
XmNresizeWidth, True,
XmNshadowThickness, 0,
XmNhighlightThickness, 0,
XmNtraversalOn, False,
XmNeditable, False,
XmNcursorPositionVisible, False,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, G_summary_text,
XmNtopOffset, TOP_SPACING,
XmNrightAttachment, XmATTACH_FORM,
XmNrightOffset, INDENTED_SPACING,
XmNleftAttachment, XmATTACH_FORM,
XmNleftOffset, INDENTED_SPACING,
XmNbottomAttachment, XmATTACH_WIDGET,
XmNbottomWidget, separator2,
NULL);
/* create copy-status text field */
/*
G_status_text2 =
XtVaCreateManagedWidget("copy_status",
xmTextFieldWidgetClass,
form,
XmNbackground, background,
XmNforeground, foreground,
XmNshadowThickness, 0,
XmNhighlightThickness, 0,
XmNtraversalOn, False,
XmNeditable, False,
XmNcursorPositionVisible, False,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, G_summary_text,
XmNtopOffset, TOP_SPACING,
XmNleftAttachment, XmATTACH_WIDGET,
XmNleftWidget, G_status_text,
XmNrightAttachment, XmATTACH_FORM,
XmNbottomAttachment, XmATTACH_WIDGET,
XmNbottomWidget, separator2,
NULL);
*/
/* create error-count text field ... not managed until there is an error */
G_error_count =
XtVaCreateWidget("error_count",
xmTextFieldWidgetClass,
form,
XmNbackground, background,
XmNforeground, foreground,
XmNshadowThickness, 0,
XmNhighlightThickness, 0,
XmNtraversalOn, False,
XmNeditable, False,
XmNcursorPositionVisible, False,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, G_status_text,
XmNtopOffset, TOP_SPACING,
XmNleftAttachment, XmATTACH_FORM,
XmNrightAttachment, XmATTACH_FORM,
NULL);
/* create error-message scroll window ... not managed until there is an error */
G_error_msgs = create_error_text_window (form,
G_error_count,
separator2);
/* set initial keyboard focus to the action button area */
XtSetArg (args[0], XmNinitialFocus, action_area);
XtSetValues(form, args, 1);
/* Manage the Copy Directory Dialog */
XtManageChild(G_copy_dialog);
free(ttarget);
free(tsource);
return True;
}