/* ** This function will consume form values and stuff them into an appointment. */ extern Boolean dssw_form_to_appt(DSSW *dssw, Dtcm_appointment *a, char *name, Tick t) { return dssw_form_flags_to_appt(dssw, a, name, t, (int *)NULL); }
void ApptDragStart( Widget widget, XEvent *event, Calendar *calendar, EditorType editor_type) { static XtCallbackRec convertCBRec[] = { {ApptConvertCB, NULL}, {NULL, NULL} }; static XtCallbackRec dragFinishCBRec[] = { {DragFinishCB, NULL}, {NULL, NULL} }; Display *display = XtDisplay(widget); DragContext *context = calloc(sizeof(DragContext), 1); Editor *e = (Editor *) calendar->editor; GEditor *ge = (GEditor *) calendar->geditor; ToDo *t = (ToDo *) calendar->todo; Dtcm_appointment *appt; char *apptstr; int preDsswFlags, preRfpFlags; context->calendar = calendar; context->editor_type = editor_type; if (editor_type == SingleEditorIcon) { context->editor = (caddr_t) e; appt = allocate_appt_struct(appt_write, DATAVER_ARCHIVE, NULL); load_appt_defaults(appt, (Props *) calendar->properties); preDsswFlags = e->dsswFlags; preRfpFlags = e->rfpFlags; if (!dssw_form_flags_to_appt(&e->dssw, appt, calendar->calname, now(), &e->dsswFlags) || !rfp_form_flags_to_appt(&e->rfp, appt, calendar->calname, &e->rfpFlags) || (preDsswFlags != e->dsswFlags) || (preRfpFlags != e->rfpFlags)) { e->doing_drag = False; free_appt_struct(&appt); free(context); return; } } else if (editor_type == GroupEditorIcon) { context->editor = (caddr_t) ge; appt = allocate_appt_struct(appt_write, DATAVER_ARCHIVE, NULL); load_appt_defaults(appt, (Props *) calendar->properties); preDsswFlags = ge->dsswFlags; preRfpFlags = ge->rfpFlags; if (!dssw_form_flags_to_appt(&ge->dssw, appt, calendar->calname, now(), &ge->dsswFlags) || !rfp_form_flags_to_appt(&ge->rfp, appt, calendar->calname, &ge->rfpFlags) || (preDsswFlags != ge->dsswFlags) || (preRfpFlags != ge->rfpFlags)) { ge->doing_drag = False; free_appt_struct(&appt); free(context); return; } } else if (editor_type == TodoEditorIcon) { context->editor = (caddr_t) t; if (t->cal->general->version < DATAVER4) appt = allocate_appt_struct(appt_write, DATAVER_ARCHIVE, CSA_ENTRY_ATTR_REFERENCE_IDENTIFIER_I, CSA_ENTRY_ATTR_LAST_UPDATE_I, CSA_ENTRY_ATTR_ORGANIZER_I, CSA_ENTRY_ATTR_START_DATE_I, CSA_ENTRY_ATTR_TYPE_I, CSA_ENTRY_ATTR_CLASSIFICATION_I, CSA_ENTRY_ATTR_END_DATE_I, CSA_X_DT_ENTRY_ATTR_SHOWTIME_I, CSA_ENTRY_ATTR_SUMMARY_I, CSA_ENTRY_ATTR_STATUS_I, CSA_X_DT_ENTRY_ATTR_REPEAT_TYPE_I, CSA_X_DT_ENTRY_ATTR_REPEAT_TIMES_I, CSA_X_DT_ENTRY_ATTR_REPEAT_INTERVAL_I, CSA_X_DT_ENTRY_ATTR_REPEAT_OCCURRENCE_NUM_I, CSA_ENTRY_ATTR_AUDIO_REMINDER_I, CSA_ENTRY_ATTR_FLASHING_REMINDER_I, CSA_ENTRY_ATTR_MAIL_REMINDER_I, CSA_ENTRY_ATTR_POPUP_REMINDER_I, NULL); else appt = allocate_appt_struct(appt_write, DATAVER_ARCHIVE, NULL); dssw_form_to_todo(&t->dssw, appt, calendar->calname, now()); preRfpFlags = t->rfpFlags; if (!rfp_form_flags_to_appt(&t->rfp, appt, calendar->calname, &t->rfpFlags) || (preRfpFlags != t->rfpFlags)) { t->doing_drag = False; free_appt_struct(&appt); free(context); return; } appt->type->value->item.sint32_value = CSA_TYPE_TODO; appt->show_time->value->item.sint32_value = True; t->completed_val = XmToggleButtonGadgetGetState(t->completed_toggle); appt->state->value->item.sint32_value = (t->completed_val) ? CSA_STATUS_COMPLETED : CSA_X_DT_STATUS_ACTIVE; } else { free(context); return; } apptstr = parse_attrs_to_string(appt, (Props *)calendar->properties, attrs_to_string(appt->attrs, appt->count)); free_appt_struct(&appt); context->data = apptstr; GetIcon(calendar); convertCBRec[0].closure = (XtPointer)context; dragFinishCBRec[0].closure = (XtPointer)context; if (e->drag_icon == NULL) { e->drag_icon = CreateDragSourceIcon(widget, e->drag_bitmap, e->drag_mask); } if (DtDndVaDragStart(widget, event, DtDND_BUFFER_TRANSFER, 1, XmDROP_COPY, convertCBRec, dragFinishCBRec, DtNsourceIcon, e->drag_icon, NULL) == NULL) { printf(catgets(calendar->DT_catd, 1, 239, "DragStart returned NULL.\n")); } }