static void GoToNewDir( FileMgrData * file_mgr_data, char * dir_name ) { ChangeDirData * change_dir_data; int i; Boolean found; XmString xm_dir_name; /* Clear out any selected portion of the old CWD string */ if (file_mgr_data->cd_select != NULL) { XtFree(file_mgr_data->cd_select); file_mgr_data->cd_select = NULL; } /* Update the internal copy of the dialog history list */ if (file_mgr_data->change_dir) { change_dir_data = (ChangeDirData *) file_mgr_data->change_dir->data; xm_dir_name = XmStringCreateLocalized(dir_name); /* Add the directory only if not already in the list */ for (i = 0, found = False; i < change_dir_data->list_count; i++) { if (XmStringCompare(xm_dir_name, change_dir_data->history_list[i])) { found = True; XmStringFree(xm_dir_name); break; } } if (!found) { change_dir_data->list_count++; change_dir_data->history_list = (XmStringTable) XtRealloc((char *)change_dir_data->history_list, sizeof(XmStringTable) * (change_dir_data->list_count + 1)); change_dir_data->history_list[change_dir_data->list_count - 1] = xm_dir_name; change_dir_data->history_list[change_dir_data->list_count] = NULL; } /* Update view to display the new directory */ ShowNewDirectory(file_mgr_data, change_dir_data->host_name, dir_name); } }
Tt_message FileCallback( Tt_message msg, Tttk_op op, char * file, void * clientdata, int trust, int self) { View *view = clientdata; char local_host[MAXHOSTNAMELEN]; extern char home_host_name[]; switch (op) { char *to_file; DialogData *dialog_data; int i; default: break; case TTDT_MOVED: if (view == 0) { break; } to_file = tt_message_arg_val(msg, 1); strcpy(local_host, home_host_name); dialog_data = (DialogData *)view->dialog_data; ShowNewDirectory( (FileMgrData *)dialog_data->data, local_host, to_file); /* Quit the old file, join the new */ ttdt_file_quit( view->pats, 0 ); view->pats = ttdt_file_join( to_file, TT_SESSION, 0, FileCallback, view ); if (tt_is_err( tt_ptr_error( view->pats ))) { view->pats = 0; } tt_free( to_file ); tttk_message_destroy( msg ); msg = 0; } tt_free( file ); return msg; }