Пример #1
0
static void
XawVendorShellClassPartInit(WidgetClass cclass)
{
    CompositeClassExtension ext;
    VendorShellWidgetClass vsclass = (VendorShellWidgetClass)cclass;

    if ((ext = (CompositeClassExtension) 
	    XtGetClassExtension (cclass,
				 XtOffsetOf(CompositeClassRec, 
					    composite_class.extension),
				 NULLQUARK, 1L, (Cardinal) 0)) == NULL) {
	ext = (CompositeClassExtension) XtNew (CompositeClassExtensionRec);
	if (ext != NULL) {
	    ext->next_extension = vsclass->composite_class.extension;
	    ext->record_type = NULLQUARK;
	    ext->version = XtCompositeExtensionVersion;
	    ext->record_size = sizeof (CompositeClassExtensionRec);
	    ext->accepts_objects = TRUE;
	    ext->allows_change_managed_set = FALSE;
	    vsclass->composite_class.extension = (XtPointer) ext;
	}
    }
}
Пример #2
0
void XtChangeManagedSet(
    WidgetList unmanage_children,
    Cardinal num_unmanage,
    XtDoChangeProc do_change_proc,
    XtPointer client_data,
    WidgetList manage_children,
    Cardinal num_manage)
{
    WidgetList childp;
    Widget parent;
    int i;
    Cardinal some_unmanaged;
    Boolean call_out;
    CompositeClassExtension ext;
    XtAppContext app;
    Widget hookobj;
    XtChangeHookDataRec call_data;

    if (num_unmanage == 0 && num_manage == 0)
	return;

    /* specification doesn't state that library will check for NULL in list */

    childp = num_unmanage ? unmanage_children : manage_children;
    app = XtWidgetToApplicationContext(*childp);
    LOCK_APP(app);

    parent = XtParent(*childp);
    childp = unmanage_children;
    for (i = num_unmanage; --i >= 0 && XtParent(*childp) == parent; childp++);
    call_out = (i >= 0);
    childp = manage_children;
    for (i = num_manage;   --i >= 0 && XtParent(*childp) == parent; childp++);
    if (call_out || i >= 0) {
	XtAppWarningMsg(app, "ambiguousParent", XtNxtChangeManagedSet,
			XtCXtToolkitError, "Not all children have same parent",
			(String *)NULL, (Cardinal *)NULL);
    }
    if (! XtIsComposite(parent)) {
	UNLOCK_APP(app);
	XtAppErrorMsg(app, "invalidParent", XtNxtChangeManagedSet,
		      XtCXtToolkitError,
		      "Attempt to manage a child when parent is not Composite",
		      (String *) NULL, (Cardinal *) NULL);
    }
    if (parent->core.being_destroyed) {
	UNLOCK_APP(app);
	return;
    }

    call_out = False;
    if (do_change_proc) {
	ext = (CompositeClassExtension)
	    XtGetClassExtension(parent->core.widget_class,
				XtOffsetOf(CompositeClassRec,
					   composite_class.extension),
				NULLQUARK, XtCompositeExtensionVersion,
				sizeof(CompositeClassExtensionRec));
	if (!ext || !ext->allows_change_managed_set)
	    call_out = True;
    }

    UnmanageChildren(unmanage_children, num_unmanage, parent,
		     &some_unmanaged, call_out, XtNxtChangeManagedSet);

    hookobj = XtHooksOfDisplay(XtDisplay(parent));
    if (XtHasCallbacks(hookobj, XtNchangeHook) == XtCallbackHasSome) {
	call_data.type = XtHunmanageSet;
	call_data.widget = parent;
	call_data.event_data = (XtPointer) unmanage_children;
	call_data.num_event_data = num_unmanage;
	XtCallCallbackList(hookobj,
		((HookObject)hookobj)->hooks.changehook_callbacks,
		(XtPointer) &call_data);
    }

    if (do_change_proc)
	(*do_change_proc)(parent, unmanage_children, &num_unmanage,
			  manage_children, &num_manage, client_data);

    call_out = (some_unmanaged && !call_out);
    ManageChildren(manage_children, num_manage, parent, call_out,
		   XtNxtChangeManagedSet);

    if (XtHasCallbacks(hookobj, XtNchangeHook) == XtCallbackHasSome) {
	call_data.type = XtHmanageSet;
	call_data.event_data = (XtPointer) manage_children;
	call_data.num_event_data = num_manage;
	XtCallCallbackList(hookobj,
		((HookObject)hookobj)->hooks.changehook_callbacks,
		(XtPointer) &call_data);
    }
    UNLOCK_APP(app);
} /* XtChangeManagedSet */