Mercurial > emacs
view lwlib/lwlib-utils.c @ 56026:bb6720f21c54
Revision: miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-396
Tweak arch tagging to make build/install-in-place less annoying
Previously, autoconf-created Makefiles and the like would contain
duplicate taglines (unfortunately, autoconf doesn't seem to have a
`strip in generated file' comment mechanism) leading to conflicts, and
installing in place would create unknown directories and copies of
source directories (leading to conflicts with the source directories).
This changeset makes all autoconf-processed files use explicit id-tags
and adds .arch-inventory entries to ignore installation directories.
author | Miles Bader <miles@gnu.org> |
---|---|
date | Fri, 11 Jun 2004 02:39:51 +0000 |
parents | 695cf19ef79e |
children | 23a17af379b1 375f2633d815 |
line wrap: on
line source
/* Defines some widget utility functions. Copyright (C) 1992 Lucid, Inc. This file is part of the Lucid Widget Library. The Lucid Widget Library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version. The Lucid Widget Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Emacs; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H #include <config.h> #endif /* Definitions of these in config.h can cause declaration conflicts later on between declarations for index and declarations for strchr. This file doesn't use index and rindex, so cancel them. */ #undef index #undef rindex #include "../src/lisp.h" #include <X11/Xatom.h> #include <X11/IntrinsicP.h> #include <X11/ObjectP.h> #include "lwlib-utils.h" #include "lwlib.h" /* Redisplay the contents of the widget, without first clearing it. */ void XtNoClearRefreshWidget (widget) Widget widget; { XEvent event; event.type = Expose; event.xexpose.serial = 0; event.xexpose.send_event = 0; event.xexpose.display = XtDisplay (widget); event.xexpose.window = XtWindow (widget); event.xexpose.x = 0; event.xexpose.y = 0; event.xexpose.width = widget->core.width; event.xexpose.height = widget->core.height; event.xexpose.count = 0; (*widget->core.widget_class->core_class.expose) (widget, &event, (Region)NULL); } /* * Apply a function to all the subwidgets of a given widget recursively. */ void XtApplyToWidgets (w, proc, arg) Widget w; XtApplyToWidgetsProc proc; XtPointer arg; { if (XtIsComposite (w)) { CompositeWidget cw = (CompositeWidget) w; /* We have to copy the children list before mapping over it, because the procedure might add/delete elements, which would lose badly. */ int nkids = cw->composite.num_children; Widget *kids = (Widget *) malloc (sizeof (Widget) * nkids); int i; lwlib_bcopy ((char *) cw->composite.children, (char *) kids, sizeof (Widget) * nkids); for (i = 0; i < nkids; i++) /* This prevent us from using gadgets, why is it here? */ /* if (XtIsWidget (kids [i])) */ { /* do the kiddies first in case we're destroying */ XtApplyToWidgets (kids [i], proc, arg); proc (kids [i], arg); } free (kids); } } /* * Apply a function to all the subwidgets of a given widget recursively. * Stop as soon as the function returns non NULL and returns this as a value. */ void * XtApplyUntilToWidgets (w, proc, arg) Widget w; XtApplyUntilToWidgetsProc proc; XtPointer arg; { void* result; if (XtIsComposite (w)) { CompositeWidget cw = (CompositeWidget)w; int i; for (i = 0; i < cw->composite.num_children; i++) if (XtIsWidget (cw->composite.children [i])){ result = proc (cw->composite.children [i], arg); if (result) return result; result = XtApplyUntilToWidgets (cw->composite.children [i], proc, arg); if (result) return result; } } return NULL; } /* * Returns a copy of the list of all children of a composite widget */ Widget * XtCompositeChildren (widget, number) Widget widget; unsigned int* number; { CompositeWidget cw = (CompositeWidget)widget; Widget* result; int n; int i; if (!XtIsComposite (widget)) { *number = 0; return NULL; } n = cw->composite.num_children; result = (Widget*)XtMalloc (n * sizeof (Widget)); *number = n; for (i = 0; i < n; i++) result [i] = cw->composite.children [i]; return result; } Boolean XtWidgetBeingDestroyedP (widget) Widget widget; { return widget->core.being_destroyed; } void XtSafelyDestroyWidget (widget) Widget widget; { #if 0 /* this requires IntrinsicI.h (actually, InitialI.h) */ XtAppContext app = XtWidgetToApplicationContext(widget); if (app->dispatch_level == 0) { app->dispatch_level = 1; XtDestroyWidget (widget); /* generates an event so that the event loop will be called */ XChangeProperty (XtDisplay (widget), XtWindow (widget), XA_STRING, XA_STRING, 32, PropModeAppend, NULL, 0); app->dispatch_level = 0; } else XtDestroyWidget (widget); #else abort (); #endif } /* arch-tag: f21f0a1f-2a4e-44e1-8715-7f234fe2d159 (do not change this comment) */