Compare commits

...

No commits in common. "c10s" and "c8" have entirely different histories.
c10s ... c8

28 changed files with 3650 additions and 1 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
SOURCES/motif-2.3.4-src.tgz

1
.motif.metadata Normal file
View File

@ -0,0 +1 @@
49ecfe2a0939232ca78ce318d938044e7f751b6d SOURCES/motif-2.3.4-src.tgz

View File

@ -0,0 +1,54 @@
From 591ae206f83a359a590090524c286cb03e5c2494 Mon Sep 17 00:00:00 2001
From: Olivier Fourdan <ofourdan@redhat.com>
Date: Tue, 6 Sep 2022 17:39:19 +0200
Subject: [PATCH] EditresCom: Fix build with modern systems.
The code in _XtGetStringValues() depends on the LONG_BIT define.
However, modern system require -D_XOPEN_SOURCE to set LONG_BIT, so with
the current code as it is, LONG_BIT is not defined (from limits.h) and
the build wrongly assumes this is a 32bit build.
Unfortunately, defining _XOPEN_SOURCE to have LONG_BIT set would disable
the definition of caddr_t, a deprecated definition inherited from BSD,
so we also need to replace that with a simple cast to (long *).
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
---
lib/Xm/EditresCom.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/lib/Xm/EditresCom.c b/lib/Xm/EditresCom.c
index 4114ff8b..c93d6844 100644
--- a/lib/Xm/EditresCom.c
+++ b/lib/Xm/EditresCom.c
@@ -43,6 +43,9 @@ in this Software without prior written authorization from the X Consortium.
#include <config.h>
#endif
+#ifndef _XOPEN_SOURCE
+#define _XOPEN_SOURCE 700
+#endif
#include <X11/IntrinsicP.h> /* To get into the composite and core widget
structures. */
@@ -59,6 +62,7 @@ in this Software without prior written authorization from the X Consortium.
#include <X11/Xmd.h>
#include <stdio.h>
+#include <limits.h>
#define _XEditResPutBool _XEditResPut8
#define _XEditResPutResourceType _XEditResPut8
@@ -1608,7 +1612,7 @@ _XtGetStringValues(Widget w, Arg *warg, int numargs)
old_handler = XtAppSetWarningMsgHandler(XtWidgetToApplicationContext(w),
EditResCvtWarningHandler);
from.size = res->resource_size;
- from.addr = (caddr_t)&value;
+ from.addr = (void *)&value;
to.addr = NULL;
to.size = 0;
to_color.addr = NULL;
--
2.37.3

View File

@ -0,0 +1,32 @@
From 2fa554b01ef6079a9b35df9332bdc4f139ed67e0 Mon Sep 17 00:00:00 2001
From: Alan Coopersmith <alan.coopersmith@oracle.com>
Date: Sat, 29 Apr 2023 17:50:39 -0700
Subject: [PATCH] Fix CVE-2023-43788: Out of bounds read in
XpmCreateXpmImageFromBuffer
When the test case for CVE-2022-46285 was run with the Address Sanitizer
enabled, it found an out-of-bounds read in ParseComment() when reading
from a memory buffer instead of a file, as it continued to look for the
closing comment marker past the end of the buffer.
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
---
lib/Xm/Xpmdata.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/Xm/Xpmdata.c b/lib/Xm/Xpmdata.c
index 7524e65..0b0f1f3 100644
--- a/lib/Xm/Xpmdata.c
+++ b/lib/Xm/Xpmdata.c
@@ -108,7 +108,7 @@ ParseComment(xpmData *data)
n++;
s2++;
} while (c == *s2 && *s2 != '\0' && c);
- if (*s2 == '\0') {
+ if (*s2 == '\0' || c == '\0') {
/* this is the end of the comment */
notend = 0;
mdata->cptr--;
--
2.41.0

View File

@ -0,0 +1,36 @@
From 7e21cb63b9a1ca760a06cc4cd9b19bbc3fcd8f51 Mon Sep 17 00:00:00 2001
From: Alan Coopersmith <alan.coopersmith@oracle.com>
Date: Sat, 29 Apr 2023 18:30:34 -0700
Subject: [PATCH] Fix CVE-2023-43789: Out of bounds read on XPM with corrupted
colormap
Found with clang's libfuzzer
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
---
lib/Xm/Xpmdata.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/Xm/Xpmdata.c b/lib/Xm/Xpmdata.c
index 0b0f1f3..6e87455 100644
--- a/lib/Xm/Xpmdata.c
+++ b/lib/Xm/Xpmdata.c
@@ -259,13 +259,13 @@ xpmNextWord(
int c;
if (!mdata->type || mdata->type == XPMBUFFER) {
- while (isspace(c = *mdata->cptr) && c != mdata->Eos)
+ while ((c = *mdata->cptr) && isspace(c) && (c != mdata->Eos))
mdata->cptr++;
do {
c = *mdata->cptr++;
*buf++ = c;
n++;
- } while (!isspace(c) && c != mdata->Eos && n < buflen);
+ } while (c && !isspace(c) && (c != mdata->Eos) && (n < buflen));
n--;
mdata->cptr--;
} else {
--
2.41.0

View File

@ -0,0 +1,61 @@
From 49791ea9aa84c64af114f564d4c46228263d1439 Mon Sep 17 00:00:00 2001
From: Olivier Fourdan <ofourdan@redhat.com>
Date: Tue, 19 Nov 2024 18:40:33 +0100
Subject: [PATCH 1/7] build: Check for Xinerama availability
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
---
configure.ac | 22 ++++++++++++++++++++++
lib/Xm/Makefile.am | 2 +-
2 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/configure.ac b/configure.ac
index d57f71e6..f0b2617d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -280,7 +280,29 @@ AC_SUBST(LIB_XP)
AC_FIND_XFT
AC_IMAGE_SUPPORT
+AC_ARG_ENABLE(xinerama,[ --enable-xinerama Enable Xinerama (default=yes)])
+if test "x$enable_xinerama" = "x"
+then
+ enable_xinerama="yes"
+fi
+
+if test "x$enable_xinerama" = "xyes"
+then
+ AC_MSG_CHECKING([for libXinerama])
+ AC_CHECK_HEADERS(X11/extensions/Xinerama.h,
+ AC_CHECK_LIB(Xinerama, XineramaQueryExtension, ,enable_xinerama="no"),
+ enable_xinerama="no")
+fi
+
+if test "x$enable_xinerama" = "xyes"
+then
+ LIB_XINERAMA=-lXinerama
+else
+ LIB_XINERAMA=
+fi
+AM_CONDITIONAL(XINERAMA, test "$enable_xinerama" = "yes")
+AC_SUBST(LIB_XINERAMA)
# AM_CONDITIONAL(Motif22Compatibility, test x$enable_motif22_compatibility = xyes)
diff --git a/lib/Xm/Makefile.am b/lib/Xm/Makefile.am
index a95fa2db..07b733f5 100644
--- a/lib/Xm/Makefile.am
+++ b/lib/Xm/Makefile.am
@@ -71,7 +71,7 @@ else
PRINTS_SRC =
endif
-libXm_la_LIBADD = ${X_LIBS} ${X_XMU} -lXt -lXext ${LIB_XP} -lX11 ${X_EXTRA_LIBS}
+libXm_la_LIBADD = ${X_LIBS} ${X_XMU} -lXt -lXext ${LIB_XP} ${LIB_XINERAMA} -lX11 ${X_EXTRA_LIBS}
noinst_HEADERS = BaseClassI.h \
BitmapsI.h \
--
2.47.1

View File

@ -0,0 +1,419 @@
From 011e62e69fb87e78a128487a043cc13b042bb8b5 Mon Sep 17 00:00:00 2001
From: Olivier Fourdan <ofourdan@redhat.com>
Date: Wed, 20 Nov 2024 10:26:28 +0100
Subject: [PATCH 2/7] Xm/Display: Add optional Xinerama support
Xinerama support is disabled by default, unless the Xresource
"enableXinerama" is set in the X resources database, e.g.:
*enableXinerama: True
This also provides an additional private Screen API to get the monitor
boundaries given a point on screen. This is meant to be used in the
following commits to implement Xinerama awareness in the relevant
widgets.
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
---
doc/man/man3/XmDisplay.3 | 2 +
lib/Xm/Display.c | 95 +++++++++++++++++++++++++++++
lib/Xm/DisplayP.h | 18 ++++++
lib/Xm/Screen.c | 128 +++++++++++++++++++++++++++++++++++++++
lib/Xm/ScreenP.h | 8 +++
lib/Xm/xmstring.list.in | 2 +
6 files changed, 253 insertions(+)
diff --git a/doc/man/man3/XmDisplay.3 b/doc/man/man3/XmDisplay.3
index a57ea089..ec360c80 100644
--- a/doc/man/man3/XmDisplay.3
+++ b/doc/man/man3/XmDisplay.3
@@ -158,6 +158,8 @@ XmNnoRenditionCallbackXmCCallbackXtCallbackListNULLC
_____
XmNuserDataXmCUserDataXtPointerNULLCSG
_____
+XmNenableXineramaXmCEnableXineramaBooleanFalseC
+_____
.TE
.IP "\fBXmNdefaultButtonEmphasis\fP" 10
Specifies whether to change the look of the PushButton widget and
diff --git a/lib/Xm/Display.c b/lib/Xm/Display.c
index 55fe4cd3..3ab047f2 100644
--- a/lib/Xm/Display.c
+++ b/lib/Xm/Display.c
@@ -35,6 +35,9 @@ static char rcsid[] = "$TOG: Display.c /main/23 1997/06/18 17:36:59 samborn $"
#include <X11/Intrinsic.h>
#include <X11/extensions/shape.h>
+#ifdef HAVE_LIBXINERAMA
+#include <X11/extensions/Xinerama.h>
+#endif
#include <X11/Xatom.h>
#include <Xm/AtomMgr.h>
@@ -273,6 +276,13 @@ static XtResource resources[] = {
XtOffsetOf(WMShellRec, wm.wm_hints.icon_pixmap),
XmRImmediate, NULL
},
+ /* Xinerama support */
+ {
+ XmNenableXinerama, XmCEnableXinerama,
+ XmRBoolean, sizeof(Boolean),
+ Offset(display.enable_xinerama),
+ XmRImmediate, (XtPointer) False
+ },
};
#undef Offset
@@ -388,6 +398,45 @@ DisplayClassInitialize( void )
XmMakeCanonicalString("_MOTIF_DRAG_AND_DROP_MESSAGE");
}
+static void
+DisplayInitializeXinerama( XmDisplay xmDisplay )
+{
+#ifdef HAVE_LIBXINERAMA
+ Display *display = XtDisplay(xmDisplay);
+ int dummy1, dummy2;
+ Status have_xinerama;
+
+ xmDisplay->display.monitors = NULL;
+ xmDisplay->display.n_monitors = 0;
+
+ /* Xinerama support is disabled by default, unless XmNenableXinerama is set */
+ if (!xmDisplay->display.enable_xinerama) {
+#ifdef DEBUG_XINERAMA
+ printf("XINERAMA support not enabled\n");
+#endif /* DEBUG_XINERAMA */
+ return;
+ }
+
+ if (!XineramaQueryExtension(display, &dummy1, &dummy2)) {
+#ifdef DEBUG_XINERAMA
+ printf("XINERAMA extension not available\n");
+#endif /* DEBUG_XINERAMA */
+ xmDisplay->display.enable_xinerama = False;
+ return;
+ }
+
+ if (!XineramaIsActive(display)) {
+#ifdef DEBUG_XINERAMA
+ printf("XINERAMA extension not activated\n");
+#endif /* DEBUG_XINERAMA */
+ xmDisplay->display.enable_xinerama = False;
+ return;
+ }
+
+ _XmDisplayUpdateXinerama(xmDisplay);
+#endif /* HAVE_LIBXINERAMA */
+}
+
/*ARGSUSED*/
static void
SetDragReceiverInfo(
@@ -553,6 +602,8 @@ DisplayInitialize(
XmDRAG_PREFER_PREREGISTER;
}
+ DisplayInitializeXinerama(xmDisplay);
+
_XmVirtKeysInitialize (new_widget);
_XmProcessLock();
@@ -672,6 +723,9 @@ DisplayDestroy(
_XmVirtKeysDestroy (w);
+#ifdef HAVE_LIBXINERAMA
+ XFree(dd->display.monitors);
+#endif /* HAVE_LIBXINERAMA */
XDeleteContext( XtDisplay( w), None, context) ;
}
@@ -1225,3 +1279,44 @@ _XmSetThicknessDefault0(
value->addr = (XPointer)&thickness;
}
+
+
+Boolean
+_XmDisplayUseXinerama(
+ XmDisplay xmDisplay )
+{
+ return xmDisplay && xmDisplay->display.enable_xinerama;
+}
+
+
+void
+_XmDisplayUpdateXinerama(
+ XmDisplay xmDisplay )
+{
+#ifdef HAVE_LIBXINERAMA
+#ifdef DEBUG_XINERAMA
+ int i;
+#endif /* DEBUG_XINERAMA */
+
+ if (!_XmDisplayUseXinerama(xmDisplay))
+ return;
+
+#ifdef DEBUG_XINERAMA
+ printf("Updating XINERAMA configuration\n");
+#endif /* DEBUG_XINERAMA */
+
+ if (xmDisplay->display.monitors)
+ XFree(xmDisplay->display.monitors);
+
+ xmDisplay->display.monitors =
+ XineramaQueryScreens (XtDisplay(xmDisplay), &xmDisplay->display.n_monitors);
+
+#ifdef DEBUG_XINERAMA
+ for (i = 0; i < xmDisplay->display.n_monitors; ++i) {
+ printf("XINERAMA Monitor %i: (%i,%i) [%ix%i]\n", i,
+ xmDisplay->display.monitors[i].x_org, xmDisplay->display.monitors[i].y_org,
+ xmDisplay->display.monitors[i].width, xmDisplay->display.monitors[i].height);
+ }
+#endif /* DEBUG_XINERAMA */
+#endif /* HAVE_LIBXINERAMA */
+}
diff --git a/lib/Xm/DisplayP.h b/lib/Xm/DisplayP.h
index 655c29b6..a2420f96 100644
--- a/lib/Xm/DisplayP.h
+++ b/lib/Xm/DisplayP.h
@@ -23,6 +23,14 @@
#ifndef _XmDisplayP_h
#define _XmDisplayP_h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_LIBXINERAMA
+#include <X11/extensions/Xinerama.h>
+#endif
+
#include <Xm/DesktopP.h>
#include <Xm/VendorSEP.h>
#include <Xm/DropSMgr.h>
@@ -115,6 +123,11 @@ typedef struct {
Boolean enable_unselectable_drag;
Boolean enable_thin_thickness;
Boolean enable_multi_key_bindings;
+ Boolean enable_xinerama;
+#ifdef HAVE_LIBXINERAMA
+ XineramaScreenInfo *monitors;
+ int n_monitors;
+#endif
} XmDisplayPart, *XmDisplayPartPtr;
typedef struct _XmDisplayInfo {
@@ -143,6 +156,11 @@ externalref XmDisplayClassRec xmDisplayClassRec;
externalref String _Xm_MOTIF_DRAG_AND_DROP_MESSAGE ;
+extern Boolean _XmDisplayUseXinerama(
+ XmDisplay xmDisplay ) ;
+
+extern void _XmDisplayUpdateXinerama(
+ XmDisplay xmDisplay ) ;
#ifdef __cplusplus
} /* Close scope of 'extern "C"' declaration which encloses file. */
diff --git a/lib/Xm/Screen.c b/lib/Xm/Screen.c
index 10ba8d2b..44abcfb3 100644
--- a/lib/Xm/Screen.c
+++ b/lib/Xm/Screen.c
@@ -396,7 +396,67 @@ GetUnitFromFont(
}
}
+#ifdef HAVE_LIBXINERAMA
+/* ARGSUSED */
+static void
+StructureNotifyHandler(
+ Widget wid,
+ XtPointer data,
+ XEvent *event,
+ Boolean *cont )
+{
+ Display *display = XtDisplay(wid);
+
+#ifdef DEBUG_XINERAMA
+ printf("Root event received\n");
+#endif /* DEBUG_XINERAMA */
+ if (event->type == ConfigureNotify)
+ _XmDisplayUpdateXinerama((XmDisplay) XmGetXmDisplay(display)) ;
+}
+
+/* ARGSUSED */
+static void
+InstallStructureNotifyHandler(
+ XmScreen xmScreen)
+{
+ Display *display = XtDisplay(xmScreen);
+ Window rootwindow;
+ XWindowAttributes rootattributes;
+
+ if (!_XmDisplayUseXinerama((XmDisplay) XmGetXmDisplay(display)))
+ return;
+
+ rootwindow = RootWindowOfScreen(XtScreen(xmScreen));
+ XGetWindowAttributes(display, rootwindow, &rootattributes);
+ XSelectInput(display,
+ rootwindow,
+ StructureNotifyMask | rootattributes.your_event_mask);
+ XtRegisterDrawable(display, rootwindow, (Widget)xmScreen);
+ XtAddEventHandler((Widget)xmScreen,
+ (EventMask) StructureNotifyMask, True,
+ StructureNotifyHandler, (XtPointer) NULL);
+}
+
+/* ARGSUSED */
+static void
+UninstallStructureNotifyHandler(
+ XmScreen xmScreen)
+{
+ Display *display = XtDisplay(xmScreen);
+ Window rootwindow;
+ XWindowAttributes rootattributes;
+
+ if (!_XmDisplayUseXinerama((XmDisplay) XmGetXmDisplay(display)))
+ return;
+
+ rootwindow = RootWindowOfScreen(XtScreen(xmScreen));
+ XtUnregisterDrawable(display, rootwindow);
+ XtRemoveEventHandler((Widget)xmScreen,
+ (EventMask) StructureNotifyMask, True,
+ StructureNotifyHandler, (XtPointer) NULL);
+}
+#endif /* HAVE_LIBXINERAMA */
/************************************************************************
*
@@ -413,6 +473,8 @@ Initialize(
{
XmScreen xmScreen = (XmScreen)new_widget;
Display *display = XtDisplay(new_widget);
+ Window rootwindow;
+ XWindowAttributes rootattributes;
xmScreen->screen.screenInfo = NULL;
@@ -474,6 +536,9 @@ Initialize(
}
#endif
+#ifdef HAVE_LIBXINERAMA
+ InstallStructureNotifyHandler(xmScreen);
+#endif /* HAVE_LIBXINERAMA */
}
/************************************************************************
@@ -672,6 +737,10 @@ Destroy(
/* need to remove pixmap and GC related to this screen */
_XmCleanPixmapCache (XtScreen(widget), NULL);
+
+#ifdef HAVE_LIBXINERAMA
+ UninstallStructureNotifyHandler(xmScreen);
+#endif /* HAVE_LIBXINERAMA */
}
static void
@@ -1447,3 +1516,62 @@ XmGetXmScreen(
_XmAppUnlock(app);
return widget;
}
+
+void
+_XmScreenGetBoundariesAtpoint(
+ Screen *screen,
+ Position pt_x,
+ Position pt_y,
+ Position *ret_x,
+ Position *ret_y,
+ Position *ret_max_x,
+ Position *ret_max_y )
+{
+ XmDisplay xmDisplay;
+ Position screen_x, screen_y;
+ Position screen_max_x, screen_max_y;
+#ifdef HAVE_LIBXINERAMA
+ Position tmp_x, tmp_y;
+ Position tmp_max_x, tmp_max_y;
+ int i;
+#endif /* HAVE_LIBXINERAMA */
+
+ xmDisplay = (XmDisplay) XmGetXmDisplay(DisplayOfScreen(screen));
+ screen_x = 0;
+ screen_y = 0;
+ screen_max_x = WidthOfScreen(screen);
+ screen_max_y = HeightOfScreen(screen);
+
+ if (!_XmDisplayUseXinerama(xmDisplay))
+ goto out;
+
+#ifdef HAVE_LIBXINERAMA
+ for (i = 0; i < xmDisplay->display.n_monitors; ++i) {
+ tmp_x = xmDisplay->display.monitors[i].x_org;
+ tmp_y = xmDisplay->display.monitors[i].y_org;
+ tmp_max_x = tmp_x + xmDisplay->display.monitors[i].width;
+ tmp_max_y = tmp_y + xmDisplay->display.monitors[i].height;
+
+ if (pt_x >= tmp_x && pt_x < tmp_max_x && pt_y >= tmp_y && pt_y < tmp_max_y) {
+ screen_x = tmp_x;
+ screen_y = tmp_y;
+ screen_max_x = tmp_max_x;
+ screen_max_y = tmp_max_y;
+ break; /* We have a match */
+ }
+ }
+#endif /* HAVE_LIBXINERAMA */
+out:
+#ifdef DEBUG_XINERAMA
+ printf("Point (%i,%i) constrained within (%i,%i) and (%i,%i)\n",
+ pt_x, pt_y, screen_x, screen_y, screen_max_x, screen_max_y);
+#endif /* DEBUG_XINERAMA */
+ if (ret_x)
+ *ret_x = screen_x;
+ if (ret_y)
+ *ret_y = screen_y;
+ if (ret_max_x)
+ *ret_max_x = screen_max_x;
+ if (ret_max_y)
+ *ret_max_y = screen_max_y;
+}
diff --git a/lib/Xm/ScreenP.h b/lib/Xm/ScreenP.h
index c870c19e..b4b95a6f 100644
--- a/lib/Xm/ScreenP.h
+++ b/lib/Xm/ScreenP.h
@@ -134,6 +134,14 @@ typedef struct _XmScreenRec {
XmScreenPart screen;
} XmScreenRec;
+extern void _XmScreenGetBoundariesAtpoint(
+ Screen *screen,
+ Position pt_x,
+ Position pt_y,
+ Position *ret_x,
+ Position *ret_y,
+ Position *ret_max_x,
+ Position *ret_max_y ) ;
#ifdef __cplusplus
} /* Close scope of 'extern "C"' declaration which encloses file. */
diff --git a/lib/Xm/xmstring.list.in b/lib/Xm/xmstring.list.in
index 8c0c4f9a..5887e7ad 100644
--- a/lib/Xm/xmstring.list.in
+++ b/lib/Xm/xmstring.list.in
@@ -1692,6 +1692,8 @@ CFontEncoding
NxftFont
CXftFont
SUTF8_STRING
+NenableXinerama
+CEnableXinerama
#file XmStrDefsI.h
#table _XmStringsI
--
2.47.1

View File

@ -0,0 +1,119 @@
From 10168aa7f16afb32e71d9e0a22fa8f90fb301bf4 Mon Sep 17 00:00:00 2001
From: Olivier Fourdan <ofourdan@redhat.com>
Date: Thu, 21 Nov 2024 11:52:22 +0100
Subject: [PATCH 3/7] Xm/MenuShell: Use Xinerama to place menus
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
---
lib/Xm/MenuShell.c | 34 +++++++++++++++++-----------------
1 file changed, 17 insertions(+), 17 deletions(-)
diff --git a/lib/Xm/MenuShell.c b/lib/Xm/MenuShell.c
index 483cc95a..1dea4a54 100644
--- a/lib/Xm/MenuShell.c
+++ b/lib/Xm/MenuShell.c
@@ -41,6 +41,7 @@ static char rcsid[] = "$TOG: MenuShell.c /main/24 1999/07/08 16:49:59 vipin $"
#include <Xm/LabelP.h>
#include <Xm/LayoutT.h>
#include <Xm/MenuT.h>
+#include <Xm/ScreenP.h>
#include <Xm/SpecRenderT.h>
#include <Xm/TraitP.h>
#include <Xm/TransltnsP.h>
@@ -913,7 +914,7 @@ ForceMenuPaneOnScreen(
register Position *y )
{
Position rightEdgeOfMenu, bottomEdgeOfMenu;
- Dimension dispWidth, dispHeight;
+ Position dispX, dispY, dispMaxX, dispMaxY;
Widget pulldown_button = RC_CascadeBtn(rowcol);
Dimension RowColBorderWidth = rowcol->core.border_width << 1;
Dimension CascadeBorderWidth = 0;
@@ -925,8 +926,7 @@ ForceMenuPaneOnScreen(
rightEdgeOfMenu = *x + RowColBorderWidth + rowcol->core.width;
bottomEdgeOfMenu = *y + RowColBorderWidth + rowcol->core.height;
- dispWidth = WidthOfScreen (XtScreen(rowcol));
- dispHeight = HeightOfScreen (XtScreen(rowcol));
+ _XmScreenGetBoundariesAtpoint(XtScreen(rowcol), *x, *y, &dispX, &dispY, &dispMaxX, &dispMaxY);
/*
* For OPTION menus, if the submenu is [partially] offscreen, offset it
@@ -937,9 +937,9 @@ ForceMenuPaneOnScreen(
(RC_Type(XtParent(pulldown_button)) == XmMENU_OPTION))
{
Position old_x = *x;
- if (bottomEdgeOfMenu >= (Position)dispHeight)
+ if (bottomEdgeOfMenu >= dispMaxY)
{
- *y = dispHeight - rowcol->core.height - RowColBorderWidth - 1;
+ *y = dispMaxY - rowcol->core.height - RowColBorderWidth - 1;
if (LayoutIsRtoLM(rowcol))
*x = old_x - rowcol->core.width - (rowcol->core.border_width <<1);
else
@@ -948,9 +948,9 @@ ForceMenuPaneOnScreen(
bottomEdgeOfMenu = *y + RowColBorderWidth + rowcol->core.height;
}
- if (*y < 0)
+ if (*y < dispY)
{
- *y = 0;
+ *y = dispY;
/* Consider CascadeBtn as well as RowCol width to allow multi
* column RowColumn
@@ -963,13 +963,13 @@ ForceMenuPaneOnScreen(
bottomEdgeOfMenu = *y + RowColBorderWidth + rowcol->core.height;
}
- if (rightEdgeOfMenu >= (Position)dispWidth)
+ if (rightEdgeOfMenu >= dispMaxX)
{
*x = old_x - rowcol->core.width + RowColBorderWidth;
rightEdgeOfMenu = *x + RowColBorderWidth + rowcol->core.width;
}
- if (*x < 0)
+ if (*x < dispX)
{
if (LayoutIsRtoLM(rowcol))
*x = old_x + pulldown_button->core.width + CascadeBorderWidth;
@@ -982,10 +982,10 @@ ForceMenuPaneOnScreen(
/*
* If the submenu is offscreen force it completely on.
*/
- if (rightEdgeOfMenu >= (Position)dispWidth)
- *x -= (rightEdgeOfMenu - dispWidth + 1);
+ if (rightEdgeOfMenu >= dispMaxX)
+ *x -= (rightEdgeOfMenu - dispMaxX + 1);
- if (bottomEdgeOfMenu >= (Position)dispHeight)
+ if (bottomEdgeOfMenu >= dispMaxY)
{
if (pulldown_button && XtParent(pulldown_button) &&
(RC_Type(XtParent(pulldown_button)) == XmMENU_BAR))
@@ -1005,15 +1005,15 @@ ForceMenuPaneOnScreen(
*y = y_temp;
}
else
- *y -= (bottomEdgeOfMenu - dispHeight + 1);
+ *y -= (bottomEdgeOfMenu - dispMaxY + 1);
}
/* Make sure that the top left corner os on screen! */
- if (*x < 0)
- *x = 0;
+ if (*x < dispX)
+ *x = dispX;
- if (*y < 0)
- *y = 0;
+ if (*y < dispY)
+ *y = dispY;
}
/*
--
2.47.1

View File

@ -0,0 +1,65 @@
From e21e7ffaa62df64be305326d24eca09c80129403 Mon Sep 17 00:00:00 2001
From: Olivier Fourdan <ofourdan@redhat.com>
Date: Thu, 21 Nov 2024 14:11:11 +0100
Subject: [PATCH 4/7] Xm/DropDown: Use Xinerama for placement
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
---
lib/Xm/DropDown.c | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/lib/Xm/DropDown.c b/lib/Xm/DropDown.c
index a25d1092..665e0e26 100644
--- a/lib/Xm/DropDown.c
+++ b/lib/Xm/DropDown.c
@@ -13,7 +13,7 @@
#include "XmI.h"
#include <Xm/VaSimpleP.h>
#include <Xm/DrawP.h>
-
+#include <Xm/ScreenP.h>
#include <Xm/DropDownP.h>
#include <X11/Shell.h>
@@ -2169,8 +2169,9 @@ PopupList(Widget w)
XmDropDownWidget cbw = (XmDropDownWidget) w;
Widget shell = XmDropDown_popup_shell(cbw);
Position x, y, temp;
+ Position dispX, dispY, dispMaxX, dispMaxY;
Dimension width;
- int ret, scr_width, scr_height;
+ int ret;
Arg args[10];
Cardinal num_args;
@@ -2209,21 +2210,20 @@ PopupList(Widget w)
*
* Lets start by getting the width and height of the screen.
*/
- scr_width = WidthOfScreen(XtScreen(shell));
- scr_height = HeightOfScreen(XtScreen(shell));
+ _XmScreenGetBoundariesAtpoint(XtScreen(shell), x, y, &dispX, &dispY, &dispMaxX, &dispMaxY);
- if( (int)(y + XtHeight(shell)) > scr_height )
+ if( (int)(y + XtHeight(shell)) > dispMaxY )
{
Position tmp;
XtTranslateCoords(w, 0, 0, &tmp, &y);
y -= ((int)XtHeight(shell));
}
- if( y < 0 ) y = 0;
- if( (int)(x + width) > scr_width )
+ if( y < dispY ) y = dispY;
+ if( (int)(x + width) > dispMaxX )
{
- x = scr_width - ((int)width);
+ x = dispMaxX - ((int)width);
}
- if( x < 0 ) x = 0;
+ if( x < dispX ) x = dispX;
XtSetArg(args[num_args], XmNx, x); num_args++;
XtSetArg(args[num_args], XmNy, y); num_args++;
--
2.47.1

View File

@ -0,0 +1,70 @@
From d97abbe6cf64a8bb0e331725c36caf5e0ac37b0f Mon Sep 17 00:00:00 2001
From: Olivier Fourdan <ofourdan@redhat.com>
Date: Thu, 21 Nov 2024 14:17:21 +0100
Subject: [PATCH 5/7] Xm/RCMenu: Use Xinerama for placement
Please note that when building with Xinerama enabled, the placement
logic changes, as the original location of the CascadeButton is not
taken into account when relocating the RCMenu widget.
Reason for that is because I reckon the current code is not correct, as
it moves the RCMenu way off the screen, yet it doesn't show without
Xinerama because there is another check later to make sure the widget
remains on the overall screen, hence hiding the problem.
With Xinerama, that breaks in-between monitors and the RCMenu ends up
completely misplaced, which is why I think the code was wrong, yet the
logic is preserved when building without XINERAMA support to preserve
the current behavior if needed.
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
---
lib/Xm/RCMenu.c | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/lib/Xm/RCMenu.c b/lib/Xm/RCMenu.c
index 2c698d4f..abd7a70e 100644
--- a/lib/Xm/RCMenu.c
+++ b/lib/Xm/RCMenu.c
@@ -537,6 +537,7 @@ LocatePulldown(
XEvent *event )
{
Position x, y, x1, y1;
+ Position dispX, dispMaxX;
if (root == NULL)
return;
@@ -617,17 +618,26 @@ LocatePulldown(
* window co-ords.
*/
XtTranslateCoords( (Widget) p, x, y, &x1, &y1);
+ _XmScreenGetBoundariesAtpoint(XtScreen(m), x1, y1, &dispX, NULL, &dispMaxX, NULL);
/* Oh no! we're going off screen. Let's try and do
something reasonable. We're only doing the cascade
off a menu case for now. (CR 6421) */
- if ((x1 + XtWidth(m)) > WidthOfScreen(XtScreen(m))) {
+ if ((x1 + XtWidth(m)) > dispMaxX) {
if (!IsOption(root) && (XmIsCascadeButton(p) || XmIsCascadeButtonGadget(p))) {
- x1 -= XtWidth(m) + x - XtX(p);
+ x1 -= XtWidth(m) + x;
+#ifndef HAVE_LIBXINERAMA
+ /* XXX: I don't think it's correct, but that's what the original code was doing… */
+ x1 -= XtX(p);
+#endif /* not HAVE_LIBXINERAMA */
}
- } else if (x1 < 0) { /* R to L case */
+ } else if (x1 < dispX) { /* R to L case */
if (!IsOption(root) && (XmIsCascadeButton(p) || XmIsCascadeButtonGadget(p))) {
- x1 += XtWidth(m) + x - XtX(p);
+ x1 += XtWidth(m) + x;
+#ifndef HAVE_LIBXINERAMA
+ /* XXX: I don't think it's correct, but that's what the original code was doing… */
+ x1 -= XtX(p);
+#endif /* not HAVE_LIBXINERAMA */
}
}
--
2.47.1

View File

@ -0,0 +1,53 @@
From af453aebd8e53a32369c792cf8d0e641b2b3a834 Mon Sep 17 00:00:00 2001
From: Olivier Fourdan <ofourdan@redhat.com>
Date: Thu, 21 Nov 2024 14:24:30 +0100
Subject: [PATCH 6/7] Xm/Tooltip: Use Xinerama for placement
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
---
lib/Xm/ToolTip.c | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/lib/Xm/ToolTip.c b/lib/Xm/ToolTip.c
index dc65071d..fdd32221 100644
--- a/lib/Xm/ToolTip.c
+++ b/lib/Xm/ToolTip.c
@@ -29,6 +29,7 @@
#include <Xm/VendorSEP.h>
#include <Xm/GadgetP.h>
#include <Xm/SlideC.h>
+#include <Xm/ScreenP.h>
#include <Xm/TraitP.h>
#include <Xm/ToolTipCT.h>
#include <Xm/ToolTipT.h>
@@ -153,6 +154,8 @@ ToolTipPost (XtPointer client_data,
XtWidgetGeometry geo;
Position destX,
destY;
+ Position dispMaxX,
+ dispMaxY;
XmToolTipConfigTrait ttp; /* ToolTip pointer */
@@ -197,12 +200,14 @@ ToolTipPost (XtPointer client_data,
Don't let the tip be off the right/bottom of the screen
*/
destX = rx + (XmIsGadget (w) ? XtX (w) : 0) - x + XtWidth (w) / 2;
- if (destX + geo.width > WidthOfScreen (XtScreen (w)))
+ destY = ry + (XmIsGadget (w) ? XtY (w) : 0) - y + XtHeight (w);
+ _XmScreenGetBoundariesAtpoint(XtScreen(w), destX, destY, NULL, NULL, &dispMaxX, &dispMaxY);
+
+ if (destX + geo.width > dispMaxX)
{
- destX = WidthOfScreen (XtScreen (w)) - geo.width;
+ destX = dispMaxX - geo.width;
}
- destY = ry + (XmIsGadget (w) ? XtY (w) : 0) - y + XtHeight (w);
- if (destY + geo.height > HeightOfScreen (XtScreen (w)))
+ if (destY + geo.height > dispMaxY)
{
destY = ry + (XmIsGadget (w) ? XtY (w) : 0) - y - geo.height;
}
--
2.47.1

View File

@ -0,0 +1,51 @@
From 8a026c2d1e94ab2a33a1bec55d703b229ce9daf7 Mon Sep 17 00:00:00 2001
From: Olivier Fourdan <ofourdan@redhat.com>
Date: Thu, 21 Nov 2024 14:30:23 +0100
Subject: [PATCH 7/7] Xm/ComboBox: Use Xinerama for placement
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
---
lib/Xm/ComboBox.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/lib/Xm/ComboBox.c b/lib/Xm/ComboBox.c
index 1472e458..0f49de50 100644
--- a/lib/Xm/ComboBox.c
+++ b/lib/Xm/ComboBox.c
@@ -43,6 +43,7 @@
#include <Xm/DisplayP.h>
#include <Xm/DrawP.h>
#include <Xm/GrabShellP.h>
+#include <Xm/ScreenP.h>
#include <Xm/List.h>
#include <Xm/TextF.h>
#include <Xm/TraitP.h>
@@ -1791,6 +1792,7 @@ CBDropDownList(Widget widget,
Cardinal n;
int tmp;
Position root_x, root_y, shell_x, shell_y;
+ Position dispX, dispY, dispMaxX, dispMaxY;
Dimension shell_width;
XtTranslateCoords((Widget)cb, XtX(cb), XtY(cb), &root_x, &root_y);
@@ -1801,12 +1803,13 @@ CBDropDownList(Widget widget,
XtY(cb);
/* Try to position the shell on the screen. */
- tmp = WidthOfScreen(XtScreen(cb)) - XtWidth(CB_ListShell(cb));
+ _XmScreenGetBoundariesAtpoint(XtScreen(cb), shell_x, shell_y, &dispX, &dispY, &dispMaxX, &dispMaxY);
+ tmp = dispMaxX - XtWidth(CB_ListShell(cb));
tmp = MIN(tmp, shell_x);
- shell_x = MAX(0, tmp);
- tmp = HeightOfScreen(XtScreen(cb)) - XtHeight(CB_ListShell(cb));
+ shell_x = MAX(dispX, tmp);
+ tmp = dispMaxY - XtHeight(CB_ListShell(cb));
tmp = MIN(tmp, shell_y);
- shell_y = MAX(0, tmp);
+ shell_y = MAX(dispY, tmp);
/* CR 8446: The shell width may have changed unexpectedly. */
shell_width = XtWidth(cb) - 2 * CB_HighlightThickness(cb);
--
2.47.1

View File

@ -0,0 +1,815 @@
From 4783fb4cec8624311bb87b2eb4a2ac94a5c7d849 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Petr=20=C5=A0abata?= <contyk@redhat.com>
Date: Thu, 8 Jun 2017 12:12:04 +0200
Subject: [PATCH] Fix issues with -Werror=format-security
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Petr Šabata <contyk@redhat.com>
---
lib/Mrm/Mrmhier.c | 4 +-
lib/Mrm/Mrmicon.c | 4 +-
lib/Mrm/Mrmlread.c | 2 +-
lib/Mrm/Mrmwcrw.c | 4 +-
tools/wml/wmldbcreate.c | 2 +-
tools/wml/wmlouth.c | 128 ++++++++++++++++++++++++------------------------
tools/wml/wmloutkey.c | 10 ++--
tools/wml/wmloutmm.c | 16 +++---
tools/wml/wmlresolve.c | 26 +++++-----
9 files changed, 98 insertions(+), 98 deletions(-)
diff --git a/lib/Mrm/Mrmhier.c b/lib/Mrm/Mrmhier.c
index 2712742..2a8703c 100644
--- a/lib/Mrm/Mrmhier.c
+++ b/lib/Mrm/Mrmhier.c
@@ -264,10 +264,10 @@ Urm__OpenHierarchy (MrmCount num_files,
case MrmSUCCESS:
break;
case MrmNOT_VALID:
- sprintf (err_stg, _MrmMMsg_0113);
+ sprintf (err_stg, "%s", _MrmMMsg_0113);
break;
default:
- sprintf (err_stg, _MrmMMsg_0114);
+ sprintf (err_stg, "%s", _MrmMMsg_0114);
break;
}
}
diff --git a/lib/Mrm/Mrmicon.c b/lib/Mrm/Mrmicon.c
index 95d4086..191e2d2 100644
--- a/lib/Mrm/Mrmicon.c
+++ b/lib/Mrm/Mrmicon.c
@@ -1176,7 +1176,7 @@ Urm__RealizeColorTable (Screen *screen,
}
break;
default:
- sprintf(err_msg, _MrmMMsg_0040);
+ sprintf(err_msg, "%s", _MrmMMsg_0040);
return Urm__UT_Error ("Urm__RelizeColorTable",
err_msg, NULL, NULL, MrmFAILURE) ;
}
@@ -1252,7 +1252,7 @@ Urm__RealizeColorTable (Screen *screen,
break;
default:
result = MrmFAILURE;
- sprintf (err_msg, _MrmMMsg_0040);
+ sprintf (err_msg, "%s", _MrmMMsg_0040);
Urm__UT_Error ("Urm__RelizeColorTable",
err_msg, NULL, NULL, MrmFAILURE) ;
}
diff --git a/lib/Mrm/Mrmlread.c b/lib/Mrm/Mrmlread.c
index c2fd94c..be433a3 100644
--- a/lib/Mrm/Mrmlread.c
+++ b/lib/Mrm/Mrmlread.c
@@ -698,7 +698,7 @@ MrmFetchColorLiteral (MrmHierarchy hierarchy_id,
XBlackPixelOfScreen(XDefaultScreenOfDisplay(display)));
break;
default:
- sprintf(err_msg, _MrmMMsg_0040);
+ sprintf(err_msg, "%s", _MrmMMsg_0040);
result = Urm__UT_Error ("MrmFetchColorLiteral",
err_msg, NULL, NULL, MrmFAILURE) ;
_MrmAppUnlock(app);
diff --git a/lib/Mrm/Mrmwcrw.c b/lib/Mrm/Mrmwcrw.c
index fe3db52..3c5857f 100644
--- a/lib/Mrm/Mrmwcrw.c
+++ b/lib/Mrm/Mrmwcrw.c
@@ -1390,7 +1390,7 @@ Urm__CW_CreateArglist (Widget parent,
}
break;
default:
- sprintf (err_msg, _MrmMMsg_0040);
+ sprintf (err_msg, "%s", _MrmMMsg_0040);
result = Urm__UT_Error ("Urm__CW_ConvertValue",
err_msg, NULL, NULL, MrmFAILURE) ;
};
@@ -2426,7 +2426,7 @@ Urm__CW_ConvertValue (Widget parent,
}
break;
default:
- sprintf(err_msg, _MrmMMsg_0040);
+ sprintf(err_msg, "%s", _MrmMMsg_0040);
return Urm__UT_Error ("Urm__CW_ConvertValue",
err_msg, NULL, NULL, MrmFAILURE) ;
};
diff --git a/tools/wml/wmldbcreate.c b/tools/wml/wmldbcreate.c
index 07c0a3c..6de585a 100644
--- a/tools/wml/wmldbcreate.c
+++ b/tools/wml/wmldbcreate.c
@@ -425,7 +425,7 @@ int table_id;
{
fprintf (afile, "%d, ", entry_vec[j]);
}
- fprintf (afile, "\n");
+ fprintf (afile, "%s", "\n");
}
}
}
diff --git a/tools/wml/wmlouth.c b/tools/wml/wmlouth.c
index d2330e3..a52843f 100644
--- a/tools/wml/wmlouth.c
+++ b/tools/wml/wmlouth.c
@@ -225,12 +225,12 @@ if ( outfil == (FILE *) NULL )
printf ("\nCouldn't open UilSymGen.h");
return;
}
-fprintf (outfil, canned_warn);
+fprintf (outfil, "%s", canned_warn);
/*
* Write the sym_k..._object literals
*/
-fprintf (outfil, canned1);
+fprintf (outfil, "%s", canned1);
for ( ndx=0 ; ndx<wml_obj_class_ptr->cnt ; ndx++ )
{
clsobj = (WmlClassDefPtr) wml_obj_class_ptr->hvec[ndx].objptr;
@@ -244,7 +244,7 @@ for ( ndx=0 ; ndx<wml_obj_class_ptr->cnt ; ndx++ )
/*
* Define the sym_k_..._reason literals
*/
-fprintf (outfil, canned3);
+fprintf (outfil, "%s", canned3);
for ( ndx=0 ; ndx<wml_obj_reason_ptr->cnt ; ndx++ )
{
resobj = (WmlResourceDefPtr) wml_obj_reason_ptr->hvec[ndx].objptr;
@@ -258,7 +258,7 @@ for ( ndx=0 ; ndx<wml_obj_reason_ptr->cnt ; ndx++ )
/*
* Define the sym_k_..._arg literals
*/
-fprintf (outfil, canned4);
+fprintf (outfil, "%s", canned4);
for ( ndx=0 ; ndx<wml_obj_arg_ptr->cnt ; ndx++ )
{
resobj = (WmlResourceDefPtr) wml_obj_arg_ptr->hvec[ndx].objptr;
@@ -272,7 +272,7 @@ for ( ndx=0 ; ndx<wml_obj_arg_ptr->cnt ; ndx++ )
/*
* Define the sym_k_..._enumset structs and literals
*/
-fprintf (outfil, canned5);
+fprintf (outfil, "%s", canned5);
for ( ndx=0 ; ndx<wml_obj_enumset_ptr->cnt ; ndx++ )
{
enumsetobj = (WmlEnumSetDefPtr) wml_obj_enumset_ptr->hvec[ndx].objptr;
@@ -286,7 +286,7 @@ for ( ndx=0 ; ndx<wml_obj_enumset_ptr->cnt ; ndx++ )
/*
* Define the sym_k_..._enumval literals
*/
-fprintf (outfil, canned6);
+fprintf (outfil, "%s", canned6);
for ( ndx=0 ; ndx<wml_obj_enumval_ptr->cnt ; ndx++ )
{
enumvalobj = (WmlEnumValueDefPtr) wml_obj_enumval_ptr->hvec[ndx].objptr;
@@ -301,7 +301,7 @@ for ( ndx=0 ; ndx<wml_obj_enumval_ptr->cnt ; ndx++ )
* Define the sym_k_..._charsize literals
* Define the sym_k_..._charset literals
*/
-fprintf (outfil, canned7);
+fprintf (outfil, "%s", canned7);
for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
{
charsetobj = (WmlCharSetDefPtr) wml_obj_charset_ptr->hvec[ndx].objptr;
@@ -315,7 +315,7 @@ for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
/*
* Define the sym_k_..._child literals
*/
-fprintf (outfil, canned8);
+fprintf (outfil, "%s", canned8);
for ( ndx=0 ; ndx<wml_obj_child_ptr->cnt ; ndx++ )
{
childobj = (WmlChildDefPtr) wml_obj_child_ptr->hvec[ndx].objptr;
@@ -379,12 +379,12 @@ if ( outfil == (FILE *) NULL )
printf ("\nCouldn't open UilSymChCL.h");
return;
}
-fprintf (outfil, canned_warn);
+fprintf (outfil, "%s", canned_warn);
/*
* Create table entries, similar to writing sym_k...
*/
-fprintf (outfil, canned1);
+fprintf (outfil, "%s", canned1);
for ( ndx=0 ; ndx<wml_obj_child_ptr->cnt ; ndx++ )
{
childobj = (WmlChildDefPtr) wml_obj_child_ptr->hvec[ndx].objptr;
@@ -392,7 +392,7 @@ for ( ndx=0 ; ndx<wml_obj_child_ptr->cnt ; ndx++ )
fprintf (outfil, " sym_k_%s_object,\n",
classobj->tkname);
}
-fprintf (outfil, canned1a);
+fprintf (outfil, "%s", canned1a);
/*
* close the output file
@@ -446,12 +446,12 @@ if ( outfil == (FILE *) NULL )
printf ("\nCouldn't open UilSymArTy.h");
return;
}
-fprintf (outfil, canned_warn);
+fprintf (outfil, "%s", canned_warn);
/*
* Create table entries, similar to writing sym_k...
*/
-fprintf (outfil, canned1);
+fprintf (outfil, "%s", canned1);
for ( ndx=0 ; ndx<wml_obj_arg_ptr->cnt ; ndx++ )
{
resobj = (WmlResourceDefPtr) wml_obj_arg_ptr->hvec[ndx].objptr;
@@ -459,7 +459,7 @@ for ( ndx=0 ; ndx<wml_obj_arg_ptr->cnt ; ndx++ )
fprintf (outfil, " sym_k_%s_value,\n",
datobj->tkname);
}
-fprintf (outfil, canned1a);
+fprintf (outfil, "%s", canned1a);
/*
* close the output file
@@ -509,19 +509,19 @@ if ( outfil == (FILE *) NULL )
printf ("\nCouldn't open UilSymRArg.h");
return;
}
-fprintf (outfil, canned_warn);
+fprintf (outfil, "%s", canned_warn);
/*
* Create table entries, similar to writing sym_k...
*/
-fprintf (outfil, canned1);
+fprintf (outfil, "%s", canned1);
for ( ndx=0 ; ndx<wml_obj_arg_ptr->cnt ; ndx++ )
{
resobj = (WmlResourceDefPtr) wml_obj_arg_ptr->hvec[ndx].objptr;
fprintf (outfil, " %d,\n",
resobj->related_code);
}
-fprintf (outfil, canned1a);
+fprintf (outfil, "%s", canned1a);
/*
* close the output file
@@ -621,12 +621,12 @@ if ( outfil == (FILE *) NULL )
printf ("\nCouldn't open UilUrmClas.h");
return;
}
-fprintf (outfil, canned_warn);
+fprintf (outfil, "%s", canned_warn);
/*
* Write entries for widgets
*/
-fprintf (outfil, canned1);
+fprintf (outfil, "%s", canned1);
for ( ndx=0 ; ndx<wml_obj_class_ptr->cnt ; ndx++ )
{
clsobj = (WmlClassDefPtr) wml_obj_class_ptr->hvec[ndx].objptr;
@@ -637,7 +637,7 @@ for ( ndx=0 ; ndx<wml_obj_class_ptr->cnt ; ndx++ )
else
fprintf (outfil, " \"%s\",\t\n", synobj->convfunc);
}
-fprintf (outfil, canned2);
+fprintf (outfil, "%s", canned2);
/*
* Write entries for gadget variants of widget classes
@@ -661,7 +661,7 @@ for ( ndx=0 ; ndx<wml_obj_class_ptr->cnt ; ndx++ )
synobj->name);
}
}
-fprintf (outfil, canned3);
+fprintf (outfil, "%s", canned3);
/*
* Write entries for non-dialog widgets
@@ -685,7 +685,7 @@ for ( ndx=0 ; ndx<wml_obj_class_ptr->cnt ; ndx++ )
synobj->name);
}
}
-fprintf (outfil, canned4);
+fprintf (outfil, "%s", canned4);
/*
* Write entries for the resource a widget's controls map to
@@ -701,7 +701,7 @@ for ( ndx=0 ; ndx<wml_obj_class_ptr->cnt ; ndx++ )
else
fprintf (outfil, " sym_k_%s_arg,\n", mapresobj->tkname);
}
-fprintf (outfil, canned5);
+fprintf (outfil, "%s", canned5);
/*
* Write entries for arguments
@@ -714,7 +714,7 @@ for ( ndx=0 ; ndx<wml_obj_arg_ptr->cnt ; ndx++ )
fprintf (outfil, " %s,\n",
synres->resliteral);
}
-fprintf (outfil, canned6);
+fprintf (outfil, "%s", canned6);
/*
* Write entries for reasons
@@ -727,7 +727,7 @@ for ( ndx=0 ; ndx<wml_obj_reason_ptr->cnt ; ndx++ )
fprintf (outfil, " %s,\n",
synres->resliteral);
}
-fprintf (outfil, canned7);
+fprintf (outfil, "%s", canned7);
/*
* close the output file
@@ -781,13 +781,13 @@ if ( outfil == (FILE *) NULL )
printf ("\nCouldn't open UilConst.h");
return;
}
-fprintf (outfil, canned_warn);
+fprintf (outfil, "%s", canned_warn);
/*
* Process the arguments in code order. We start with 1, and write out
* the mask after processing 8 codes.
*/
-fprintf (outfil, canned1);
+fprintf (outfil, "%s", canned1);
strcpy (maskbuf, "0");
for ( ndx=0 ; ndx<wml_obj_arg_ptr->cnt ; ndx++ )
{
@@ -805,7 +805,7 @@ for ( ndx=0 ; ndx<wml_obj_arg_ptr->cnt ; ndx++ )
}
if ( bitno != 8 )
fprintf (outfil, "%s", maskbuf);
-fprintf (outfil, canned1a);
+fprintf (outfil, "%s", canned1a);
/*
* close the output file
@@ -878,8 +878,8 @@ if ( outfil == (FILE *) NULL )
printf ("\nCouldn't open UilSymReas.h");
return;
}
-fprintf (outfil, canned_warn);
-fprintf (outfil, canned1);
+fprintf (outfil, "%s", canned_warn);
+fprintf (outfil, "%s", canned1);
/*
* Generate the bit vectors for each class. Outer loop on the reason code,
@@ -919,19 +919,19 @@ for ( resndx=0 ; resndx<wml_obj_reason_ptr->cnt ; resndx++ )
if ( itemno != 0 )
fprintf (outfil, "%s 0};\n", maskbuf);
else
- fprintf (outfil, "};\n");
+ fprintf (outfil, "%s", "};\n");
}
/*
* Write the vector of vectors.
*/
-fprintf (outfil, canned2);
+fprintf (outfil, "%s", canned2);
for ( resndx=0 ; resndx<wml_obj_reason_ptr->cnt ; resndx++ )
{
resobj = (WmlResourceDefPtr) wml_obj_reason_ptr->hvec[resndx].objptr;
fprintf (outfil, " reason_class_vec%d,\n", resobj->sym_code);
}
-fprintf (outfil, canned3);
+fprintf (outfil, "%s", canned3);
/*
* close the output file
@@ -1004,8 +1004,8 @@ if ( outfil == (FILE *) NULL )
printf ("\nCouldn't open UilSymArTa.h");
return;
}
-fprintf (outfil, canned_warn);
-fprintf (outfil, canned1);
+fprintf (outfil, "%s", canned_warn);
+fprintf (outfil, "%s", canned1);
/*
* Generate the bit vectors for each class. Outer loop on the argument code,
@@ -1045,19 +1045,19 @@ for ( resndx=0 ; resndx<wml_obj_arg_ptr->cnt ; resndx++ )
if ( itemno != 0 )
fprintf (outfil, "%s 0};\n", maskbuf);
else
- fprintf (outfil, "};\n");
+ fprintf (outfil, "%s", "};\n");
}
/*
* Write the vector of vectors.
*/
-fprintf (outfil, canned2);
+fprintf (outfil, "%s", canned2);
for ( resndx=0 ; resndx<wml_obj_arg_ptr->cnt ; resndx++ )
{
resobj = (WmlResourceDefPtr) wml_obj_arg_ptr->hvec[resndx].objptr;
fprintf (outfil, " arg_class_vec%d,\n", resobj->sym_code);
}
-fprintf (outfil, canned3);
+fprintf (outfil, "%s", canned3);
/*
* close the output file
@@ -1129,8 +1129,8 @@ if ( outfil == (FILE *) NULL )
printf ("\nCouldn't open UilSymChTa.h");
return;
}
-fprintf (outfil, canned_warn);
-fprintf (outfil, canned1);
+fprintf (outfil, "%s", canned_warn);
+fprintf (outfil, "%s", canned1);
/*
* Generate the bit vectors for each class. Outer loop on the child code,
@@ -1168,19 +1168,19 @@ for ( childndx=0 ; childndx<wml_obj_child_ptr->cnt ; childndx++ )
if ( itemno != 0 )
fprintf (outfil, "%s 0};\n", maskbuf);
else
- fprintf (outfil, "};\n");
+ fprintf (outfil, "%s", "};\n");
}
/*
* Write the vector of vectors.
*/
-fprintf (outfil, canned2);
+fprintf (outfil, "%s", canned2);
for ( childndx=0 ; childndx<wml_obj_child_ptr->cnt ; childndx++ )
{
childobj = (WmlChildDefPtr) wml_obj_child_ptr->hvec[childndx].objptr;
fprintf (outfil, " child_class_vec%d,\n", childobj->sym_code);
}
-fprintf (outfil, canned3);
+fprintf (outfil, "%s", canned3);
/*
* close the output file
@@ -1251,8 +1251,8 @@ if ( outfil == (FILE *) NULL )
printf ("\nCouldn't open UilSymCtl.h");
return;
}
-fprintf (outfil, canned_warn);
-fprintf (outfil, canned1);
+fprintf (outfil, "%s", canned_warn);
+fprintf (outfil, "%s", canned1);
/*
* Generate the bit vectors for each class. Outer loop on the class code,
@@ -1290,19 +1290,19 @@ for ( ctlndx=0 ; ctlndx<wml_obj_class_ptr->cnt ; ctlndx++ )
if ( itemno != 0 )
fprintf (outfil, "%s 0};\n", maskbuf);
else
- fprintf (outfil, "};\n");
+ fprintf (outfil, "%s", "};\n");
}
/*
* Write the vector of vectors.
*/
-fprintf (outfil, canned2);
+fprintf (outfil, "%s", canned2);
for ( ctlndx=0 ; ctlndx<wml_obj_class_ptr->cnt ; ctlndx++ )
{
clsobj = (WmlClassDefPtr) wml_obj_class_ptr->hvec[ctlndx].objptr;
fprintf (outfil, " object_class_vec%d,\n", clsobj->sym_code);
}
-fprintf (outfil, canned3);
+fprintf (outfil, "%s", canned3);
/*
* close the output file
@@ -1438,7 +1438,7 @@ if ( outfil == (FILE *) NULL )
printf ("\nCouldn't open UilSymNam.h");
return;
}
-fprintf (outfil, canned_warn);
+fprintf (outfil, "%s", canned_warn);
/*
* Write entries for widgets
@@ -1517,7 +1517,7 @@ for ( ndx=0 ; ndx<wml_obj_child_ptr->cnt ; ndx++ )
fprintf (outfil, " \"%s\",\n",
synch->name);
}
-fprintf (outfil, canned7);
+fprintf (outfil, "%s", canned7);
/*
* close the output file
@@ -1621,12 +1621,12 @@ if ( outfil == (FILE *) NULL )
printf ("\nCouldn't open UilSymEnum.h");
return;
}
-fprintf (outfil, canned_warn);
+fprintf (outfil, "%s", canned_warn);
/*
* Generate the enumeration value vectors for each enumeration set.
*/
-fprintf (outfil, canned1);
+fprintf (outfil, "%s", canned1);
for ( ndx=0 ; ndx<wml_obj_enumset_ptr->cnt ; ndx++ )
{
enumsetobj = (WmlEnumSetDefPtr) wml_obj_enumset_ptr->hvec[ndx].objptr;
@@ -1637,13 +1637,13 @@ for ( ndx=0 ; ndx<wml_obj_enumset_ptr->cnt ; ndx++ )
fprintf (outfil, " %d,\n",
evobj->sym_code);
}
- fprintf (outfil, " };\n");
+ fprintf (outfil, "%s", " };\n");
}
/*
* Generate the enumeration set tables
*/
-fprintf (outfil, canned3);
+fprintf (outfil, "%s", canned3);
for ( ndx=0 ; ndx<wml_obj_enumset_ptr->cnt ; ndx++ )
{
enumsetobj = (WmlEnumSetDefPtr) wml_obj_enumset_ptr->hvec[ndx].objptr;
@@ -1655,7 +1655,7 @@ for ( ndx=0 ; ndx<wml_obj_enumset_ptr->cnt ; ndx++ )
/*
* Create enumset table entries for arguments, similar to writing sym_k...
*/
-fprintf (outfil, canned4);
+fprintf (outfil, "%s", canned4);
for ( ndx=0 ; ndx<wml_obj_arg_ptr->cnt ; ndx++ )
{
resobj = (WmlResourceDefPtr) wml_obj_arg_ptr->hvec[ndx].objptr;
@@ -1669,13 +1669,13 @@ for ( ndx=0 ; ndx<wml_obj_arg_ptr->cnt ; ndx++ )
/*
* Create the enumval values table.
*/
-fprintf (outfil, canned5);
+fprintf (outfil, "%s", canned5);
for ( ndx=0 ; ndx<wml_obj_enumval_ptr->cnt ; ndx++ )
{
evobj = (WmlEnumValueDefPtr) wml_obj_enumval_ptr->hvec[ndx].objptr;
fprintf (outfil, " %s,\n", evobj->syndef->enumlit);
}
-fprintf (outfil, canned5a);
+fprintf (outfil, "%s", canned5a);
/*
* close the output file
@@ -1813,12 +1813,12 @@ if ( outfil == (FILE *) NULL )
printf ("\nCouldn't open UilSymCSet.h");
return;
}
-fprintf (outfil, canned_warn);
+fprintf (outfil, "%s", canned_warn);
/*
* Generate the standards name table
*/
-fprintf (outfil, canned1);
+fprintf (outfil, "%s", canned1);
for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
{
csobj = (WmlCharSetDefPtr) wml_obj_charset_ptr->hvec[ndx].objptr;
@@ -1836,7 +1836,7 @@ for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
/*
* Generate the writing direction table
*/
-fprintf (outfil, canned2);
+fprintf (outfil, "%s", canned2);
for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
{
csobj = (WmlCharSetDefPtr) wml_obj_charset_ptr->hvec[ndx].objptr;
@@ -1858,7 +1858,7 @@ for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
/*
* Generate the parsing direction table
*/
-fprintf (outfil, canned3);
+fprintf (outfil, "%s", canned3);
for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
{
csobj = (WmlCharSetDefPtr) wml_obj_charset_ptr->hvec[ndx].objptr;
@@ -1880,7 +1880,7 @@ for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
/*
* Generate the character size table
*/
-fprintf (outfil, canned4);
+fprintf (outfil, "%s", canned4);
for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
{
csobj = (WmlCharSetDefPtr) wml_obj_charset_ptr->hvec[ndx].objptr;
@@ -1906,7 +1906,7 @@ for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
/*
* Generate the $LANG name recognition table
*/
-fprintf (outfil, canned5);
+fprintf (outfil, "%s", canned5);
lang_max = 0;
for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
{
@@ -1936,7 +1936,7 @@ for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
/*
* Generate the $LANG code lookup table, in upper case
*/
-fprintf (outfil, canned6);
+fprintf (outfil, "%s", canned6);
for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
{
csobj = (WmlCharSetDefPtr) wml_obj_charset_ptr->hvec[ndx].objptr;
diff --git a/tools/wml/wmloutkey.c b/tools/wml/wmloutkey.c
index af42f22..4c14728 100644
--- a/tools/wml/wmloutkey.c
+++ b/tools/wml/wmloutkey.c
@@ -574,16 +574,16 @@ if ( outfil == NULL )
printf ("\nCouldn't open UilKeyTab.h");
return;
}
-fprintf (outfil, canned_warn);
+fprintf (outfil, "%s", canned_warn);
/*
* Print the case sensitive and insensitive tables
*/
-fprintf (outfil, canned1);
+fprintf (outfil, "%s", canned1);
wmlOutputUilKeyTabBody (outfil, wml_tok_sens_ptr, &maxlen, &maxkey);
fprintf (outfil, canned2, maxlen, maxkey);
wmlOutputUilKeyTabBody (outfil, wml_tok_insens_ptr, &maxlen, &maxkey);
-fprintf (outfil, canned3);
+fprintf (outfil, "%s", canned3);
/*
* close the output file
@@ -812,8 +812,8 @@ if ( outfil == NULL )
printf ("\nCouldn't open UilTokName.h");
return;
}
-fprintf (outfil, canned_warn);
-fprintf (outfil, canned1);
+fprintf (outfil, "%s", canned_warn);
+fprintf (outfil, "%s", canned1);
/*
* Print the token name entries
diff --git a/tools/wml/wmloutmm.c b/tools/wml/wmloutmm.c
index 84a97bb..dc8ec09 100644
--- a/tools/wml/wmloutmm.c
+++ b/tools/wml/wmloutmm.c
@@ -209,9 +209,9 @@ int ctlndx; /* to access ordered vector */
/*
* Write out header information
*/
-fprintf (outfil, canned1);
+fprintf (outfil, "%s", canned1);
fprintf (outfil, "%s\n", name);
-fprintf (outfil, canned2);
+fprintf (outfil, "%s", canned2);
/*
* Alphabetize the controls, reason, and argument lists
@@ -264,7 +264,7 @@ while ( ctlref != NULL )
rsnndx = 0;
ctlndx = 0;
if ( mm_ctl_ptr->cnt == 0 )
- fprintf (outfil, "No children are supported");
+ fprintf (outfil, "%s", "No children are supported");
while ( rsnndx<mm_rsn_ptr->cnt || ctlndx<mm_ctl_ptr->cnt )
{
if ( ctlndx < mm_ctl_ptr->cnt )
@@ -275,7 +275,7 @@ while ( rsnndx<mm_rsn_ptr->cnt || ctlndx<mm_ctl_ptr->cnt )
ctlndx += 1;
}
else
- fprintf (outfil, "@");
+ fprintf (outfil, "%s", "@");
if ( rsnndx < mm_rsn_ptr->cnt )
{
@@ -285,9 +285,9 @@ while ( rsnndx<mm_rsn_ptr->cnt || ctlndx<mm_ctl_ptr->cnt )
rsnndx += 1;
}
else
- fprintf (outfil, "\n");
+ fprintf (outfil, "%s", "\n");
}
-fprintf (outfil, canned3);
+fprintf (outfil, "%s", canned3);
/*
* Write out the argument table
@@ -319,11 +319,11 @@ while ( argndx < mm_arg_ptr->cnt )
argref->act_resource->syndef->dflt);
}
else
- fprintf (outfil, " \n");
+ fprintf (outfil, "%s", " \n");
}
argndx += 1;
}
-fprintf (outfil, canned4);
+fprintf (outfil, "%s", canned4);
}
diff --git a/tools/wml/wmlresolve.c b/tools/wml/wmlresolve.c
index 464ef29..3b8642c 100644
--- a/tools/wml/wmlresolve.c
+++ b/tools/wml/wmlresolve.c
@@ -1340,7 +1340,7 @@ for ( ndx=0 ; ndx<wml_obj_allclass_ptr->cnt ; ndx++ )
/*
* close the output file
*/
-fprintf (outfil, "\n\n");
+fprintf (outfil, "%s", "\n\n");
printf ("\nCreated report file wml.report");
fclose (outfil);
@@ -1369,14 +1369,14 @@ fprintf (outfil, "\n\n\nClass %s:", synobj->name);
switch ( synobj->type )
{
case WmlClassTypeMetaclass:
- fprintf (outfil, "\n Type: Metaclass\t");
+ fprintf (outfil, "%s", "\n Type: Metaclass\t");
if ( synobj->superclass != NULL )
fprintf (outfil, "Superclass: %s\t", synobj->superclass);
if ( synobj->parentclass != NULL )
fprintf (outfil, "Parentclass: %s\t", synobj->parentclass);
break;
case WmlClassTypeWidget:
- fprintf (outfil, "\n Type: Widget\t");
+ fprintf (outfil, "%s", "\n Type: Widget\t");
if ( synobj->superclass != NULL )
fprintf (outfil, "Superclass: %s\t", synobj->superclass);
if ( synobj->parentclass != NULL )
@@ -1388,7 +1388,7 @@ switch ( synobj->type )
fprintf (outfil, "Convenience function: %s", synobj->convfunc);
break;
case WmlClassTypeGadget:
- fprintf (outfil, "\n Type: Gadget\t");
+ fprintf (outfil, "%s", "\n Type: Gadget\t");
if ( synobj->superclass != NULL )
fprintf (outfil, "Superclass: %s\t", synobj->superclass);
if ( synobj->parentclass != NULL )
@@ -1414,19 +1414,19 @@ if ( clsobj->nondialog != NULL )
* is intended to match the way resources are printed in the toolkit manual,
* so that checking is as easy as possible.
*/
-fprintf (outfil, "\n Arguments:");
+fprintf (outfil, "%s", "\n Arguments:");
wmlResolvePrintClassArgs (outfil, clsobj);
/*
* Print the reasons valid in the class
*/
-fprintf (outfil, "\n Reasons:");
+fprintf (outfil, "%s", "\n Reasons:");
wmlResolvePrintClassReasons (outfil, clsobj);
/*
* Print the controls valid in the class
*/
-fprintf (outfil, "\n Controls:");
+fprintf (outfil, "%s", "\n Controls:");
for ( ndx=0 ; ndx<wml_obj_class_ptr->cnt ; ndx++ )
{
ctrlobj = (WmlClassDefPtr) wml_obj_class_ptr->hvec[ndx].objptr;
@@ -1512,10 +1512,10 @@ for ( ndx=0 ; ndx<wml_obj_arg_ptr->cnt ; ndx++ )
switch ( resref->exclude )
{
case WmlAttributeTrue:
- fprintf (outfil, "\n\tExclude = True;");
+ fprintf (outfil, "%s", "\n\tExclude = True;");
break;
case WmlAttributeFalse:
- fprintf (outfil, "\n\tExclude = False;");
+ fprintf (outfil, "%s", "\n\tExclude = False;");
break;
}
if ( resref->dflt != NULL )
@@ -1558,10 +1558,10 @@ if ( constr )
switch ( resref->exclude )
{
case WmlAttributeTrue:
- fprintf (outfil, "\n\tExclude = True;");
+ fprintf (outfil, "%s", "\n\tExclude = True;");
break;
case WmlAttributeFalse:
- fprintf (outfil, "\n\tExclude = False;");
+ fprintf (outfil, "%s", "\n\tExclude = False;");
break;
}
if ( resref->dflt != NULL )
@@ -1632,10 +1632,10 @@ for ( ndx=0 ; ndx<wml_obj_reason_ptr->cnt ; ndx++ )
switch ( resref->exclude )
{
case WmlAttributeTrue:
- fprintf (outfil, "\n\tExclude = True;");
+ fprintf (outfil, "%s", "\n\tExclude = True;");
break;
case WmlAttributeFalse:
- fprintf (outfil, "\n\tExclude = False;");
+ fprintf (outfil, "%s", "\n\tExclude = False;");
break;
}
resobj->ref_ptr = NULL;
--
2.13.0

View File

@ -0,0 +1,36 @@
diff -up openmotif-2.3.3/configure.ac.bindings openmotif-2.3.3/configure.ac
--- openmotif-2.3.3/configure.ac.bindings 2009-10-27 17:10:23.000000000 +0100
+++ openmotif-2.3.3/configure.ac 2010-03-19 11:12:39.000000000 +0100
@@ -185,7 +185,7 @@ AC_SUBST(MWMRCDIR)
INCDIR="${includedir}/X11"
AC_SUBST(INCDIR)
-XMBINDDIR_FALLBACK="${libdir}/X11/bindings"
+XMBINDDIR_FALLBACK="${datadir}/X11/bindings"
AC_SUBST(XMBINDDIR_FALLBACK)
RM="rm -f"
diff -up openmotif-2.3.3/doc/man/man3/VirtualBindings.3.bindings openmotif-2.3.3/doc/man/man3/VirtualBindings.3
--- openmotif-2.3.3/doc/man/man3/VirtualBindings.3.bindings 2005-07-20 13:47:21.000000000 +0200
+++ openmotif-2.3.3/doc/man/man3/VirtualBindings.3 2010-03-19 11:11:42.000000000 +0100
@@ -90,7 +90,7 @@ bindings contained in that file\&.
If it has found no bindings, Motif next looks for the file
\fBxmbind\&.alias\fP in the directory specified by the environment
variable \fBXMBINDDIR\fP, if \fBXMBINDDIR\fP is set, or in the directory
-\fB/usr/lib/Xm/bindings\fP if \fBXMBINDDIR\fP is not set\&.
+\fB/usr/share/X11/bindings\fP if \fBXMBINDDIR\fP is not set\&.
If this file exists Motif searches it for a pathname associated with the
vendor string or with the vendor string and vendor release\&.
If it finds such a pathname and if that file exists, Motif loads the
diff -up openmotif-2.3.3/lib/Xm/XmosP.h.bindings openmotif-2.3.3/lib/Xm/XmosP.h
--- openmotif-2.3.3/lib/Xm/XmosP.h.bindings 2002-06-17 22:36:30.000000000 +0200
+++ openmotif-2.3.3/lib/Xm/XmosP.h 2010-03-19 11:11:42.000000000 +0100
@@ -188,7 +188,7 @@ extern "C" {
#define XMBINDDIR "XMBINDDIR"
#ifndef XMBINDDIR_FALLBACK
-#define XMBINDDIR_FALLBACK "/usr/lib/Xm/bindings"
+#define XMBINDDIR_FALLBACK "/usr/share/X11/bindings"
#endif
#define XMBINDFILE "xmbind.alias"
#define MOTIFBIND ".motifbind"

View File

@ -0,0 +1,449 @@
commit 88bdce139baf89839b6e13d698576fc56211e845
Author: Oleksiy Chernyavskyy <ochern@ics.com>
Date: Wed Mar 16 00:46:49 2016 +0200
Reimplemented bugfix 1565
Signed-off-by: Oleksiy Chernyavskyy <ochern@ics.com>
diff --git a/lib/Xm/ComboBox.c b/lib/Xm/ComboBox.c
index 1472e45..cf507da 100644
--- a/lib/Xm/ComboBox.c
+++ b/lib/Xm/ComboBox.c
@@ -3164,6 +3164,9 @@ CreatePulldown(Widget parent,
Arg args[4];
ArgList merged_args;
Cardinal n;
+#ifdef FIX_1565
+ XmGrabShellWidget grabsh;
+#endif
n = 0;
XtSetArg(args[n], XmNlayoutDirection, LayoutM(parent)), n++;
@@ -3175,6 +3178,11 @@ CreatePulldown(Widget parent,
merged_args, n + *num_args);
XtFree((char*)merged_args);
+#ifdef FIX_1565
+ grabsh = (XmGrabShellWidget) shell;
+ grabsh->grab_shell.set_input_focus = False;
+#endif
+
return shell;
}
diff --git a/lib/Xm/DropDown.c b/lib/Xm/DropDown.c
index 37fec03..5cd15ca 100644
--- a/lib/Xm/DropDown.c
+++ b/lib/Xm/DropDown.c
@@ -2027,6 +2027,9 @@ CreatePopup(Widget w, ArgList args, Cardinal num_args)
Arg *new_list, largs[10];
Cardinal num_largs;
Widget sb;
+#ifdef FIX_1565
+ XmGrabShellWidget grabsh;
+#endif
num_largs = 0;
XtSetArg(largs[num_largs], XmNoverrideRedirect, True); num_largs++;
@@ -2040,6 +2043,10 @@ CreatePopup(Widget w, ArgList args, Cardinal num_args)
xmGrabShellWidgetClass, w,
new_list,
num_largs + num_args);
+#ifdef FIX_1565
+ grabsh = (XmGrabShellWidget) XmDropDown_popup_shell(cbw);
+ grabsh->grab_shell.set_input_focus = False;
+#endif
XtFree((char *) new_list);
#ifdef FIX_1446
diff --git a/lib/Xm/GrabShell.c b/lib/Xm/GrabShell.c
index 88f3154..af13e0b 100644
--- a/lib/Xm/GrabShell.c
+++ b/lib/Xm/GrabShell.c
@@ -283,6 +283,10 @@ Initialize(Widget req, /* unused */
/* CR 9920: Popdown may be requested before MapNotify. */
grabsh->grab_shell.mapped = False;
+
+#ifdef FIX_1565
+ grabsh->grab_shell.set_input_focus = True;
+#endif
}
/*
@@ -395,8 +399,16 @@ MapNotifyHandler(Widget shell, XtPointer client_data,
XGetInputFocus(XtDisplay(shell), &grabshell->grab_shell.old_focus,
&grabshell->grab_shell.old_revert_to);
old_handler = XSetErrorHandler(IgnoreXErrors);
- XSetInputFocus(XtDisplay(shell), XtWindow(shell), RevertToParent, time);
- XSync(XtDisplay(shell), False);
+#ifdef FIX_1565
+ if (! grabshell->grab_shell.set_input_focus) {
+ XmForceGrabKeyboard(shell, time);
+ } else {
+#endif
+ XSetInputFocus(XtDisplay(shell), XtWindow(shell), RevertToParent, time);
+ XSync(XtDisplay(shell), False);
+#ifdef FIX_1565
+ }
+#endif
XSetErrorHandler(old_handler);
}
diff --git a/lib/Xm/GrabShellP.h b/lib/Xm/GrabShellP.h
index 92fe508..025f001 100644
--- a/lib/Xm/GrabShellP.h
+++ b/lib/Xm/GrabShellP.h
@@ -30,6 +30,7 @@
#include <Xm/GrabShell.h>
#include <Xm/XmP.h>
#include <X11/ShellP.h>
+#include "XmI.h"
#ifdef __cplusplus
extern "C" {
@@ -55,6 +56,9 @@ typedef struct
Boolean mapped;
Window old_focus;
int old_revert_to;
+#ifdef FIX_1565
+ Boolean set_input_focus;
+#endif
} XmGrabShellPart;
diff --git a/lib/Xm/MenuShell.c b/lib/Xm/MenuShell.c
index 2ed3dd8..9887087 100644
--- a/lib/Xm/MenuShell.c
+++ b/lib/Xm/MenuShell.c
@@ -1514,9 +1514,7 @@ ChangeManaged(
/** the real grab ***/
_XmMenuGrabKeyboardAndPointer((Widget)rowcol, _time);
-#ifndef FIX_1565
_XmMenuFocus(XtParent(rowcol), XmMENU_BEGIN, _time);
-#endif
/* To support menu replay, keep the pointer in sync mode */
XAllowEvents(XtDisplay(rowcol), SyncPointer, CurrentTime);
diff --git a/lib/Xm/MenuUtil.c b/lib/Xm/MenuUtil.c
index 1d88390..2fb6a27 100644
--- a/lib/Xm/MenuUtil.c
+++ b/lib/Xm/MenuUtil.c
@@ -1053,11 +1053,7 @@ _XmMenuGrabKeyboardAndPointer(
register int status =
(_XmGrabKeyboard(widget,
-#ifdef FIX_1565
- False,
-#else
True,
-#endif
GrabModeSync,
GrabModeAsync,
time) != GrabSuccess);
diff --git a/lib/Xm/RCMenu.c b/lib/Xm/RCMenu.c
index 2c698d4..8b156da 100644
--- a/lib/Xm/RCMenu.c
+++ b/lib/Xm/RCMenu.c
@@ -85,6 +85,9 @@ static char *rcsid = "$TOG: RCMenu.c /main/25 1999/05/24 18:06:57 samborn $";
#include "TraversalI.h"
#include "UniqueEvnI.h"
#include "VendorSI.h"
+#ifdef FIX_1565
+#include <Xm/GrabShell.h>
+#endif
#define FIX_1535
@@ -943,6 +946,13 @@ _XmMenuFocus(
XmMenuState mst = _XmGetMenuState((Widget)w);
Window tmpWindow;
int tmpRevert;
+#ifdef FIX_1565
+ Widget shell;
+
+ shell = w;
+ while (! XtIsSubclass(shell, shellWidgetClass))
+ shell = XtParent(shell);
+#endif
if (_time == CurrentTime)
_time = XtLastTimestampProcessed(XtDisplay(w));
@@ -983,6 +993,11 @@ _XmMenuFocus(
shell.popped_up))
**/
{
+#ifdef FIX_1565
+ if (XtIsSubclass(shell, xmGrabShellWidgetClass) || XtIsSubclass(shell, xmMenuShellWidgetClass))
+ XmForceGrabKeyboard(w, _time);
+ else
+#endif
SetInputFocus(XtDisplay(w), mst->RC_menuFocus.oldFocus,
mst->RC_menuFocus.oldRevert,
mst->RC_menuFocus.oldTime);
@@ -996,6 +1011,11 @@ _XmMenuFocus(
*/
else
{
+#ifdef FIX_1565
+ if (XtIsSubclass(shell, xmGrabShellWidgetClass) || XtIsSubclass(shell, xmMenuShellWidgetClass))
+ XmForceGrabKeyboard(w, _time);
+ else
+#endif
SetInputFocus(XtDisplay(w), mst->RC_menuFocus.oldFocus,
mst->RC_menuFocus.oldRevert,
mst->RC_menuFocus.oldTime);
@@ -1014,6 +1034,11 @@ _XmMenuFocus(
RC_menuFocus.oldFocus);
mst->RC_menuFocus.oldTime = _time - 1;
+#ifdef FIX_1565
+ if (XtIsSubclass(shell, xmGrabShellWidgetClass) || XtIsSubclass(shell, xmMenuShellWidgetClass))
+ XmForceGrabKeyboard(w, _time);
+ else
+#endif
SetInputFocus(XtDisplay(w), XtWindow(w), mst->RC_menuFocus.oldRevert,
mst->RC_menuFocus.oldTime);
@@ -1027,6 +1052,11 @@ _XmMenuFocus(
XGetInputFocus(XtDisplay(w), &tmpWindow, &tmpRevert);
if (tmpWindow != XtWindow(w))
{
+#ifdef FIX_1565
+ if (XtIsSubclass(shell, xmGrabShellWidgetClass) || XtIsSubclass(shell, xmMenuShellWidgetClass))
+ XmForceGrabKeyboard(w, _time);
+ else
+#endif
SetInputFocus(XtDisplay(w), XtWindow(w), tmpRevert, _time);
mst->RC_menuFocus.oldRevert = tmpRevert;
@@ -1048,6 +1078,11 @@ _XmMenuFocus(
break;
case XmMENU_MIDDLE:
+#ifdef FIX_1565
+ if (XtIsSubclass(shell, xmGrabShellWidgetClass) || XtIsSubclass(shell, xmMenuShellWidgetClass))
+ XmForceGrabKeyboard(w, _time);
+ else
+#endif
SetInputFocus(XtDisplay(w), XtWindow(w),
mst->RC_menuFocus.oldRevert,
mst->RC_menuFocus.oldTime);
@@ -1062,6 +1097,11 @@ _XmMenuFocus(
if ((tmpWindow != XtWindow(w)) &&
(_time > mst->RC_menuFocus.oldTime))
{
+#ifdef FIX_1565
+ if (XtIsSubclass(shell, xmGrabShellWidgetClass) || XtIsSubclass(shell, xmMenuShellWidgetClass))
+ XmForceGrabKeyboard(w, _time);
+ else
+#endif
SetInputFocus(XtDisplay(w), XtWindow(w), tmpRevert, _time);
mst->RC_menuFocus.oldRevert = tmpRevert;
diff --git a/lib/Xm/Xm.c b/lib/Xm/Xm.c
index 3dfd794..45d48b6 100644
--- a/lib/Xm/Xm.c
+++ b/lib/Xm/Xm.c
@@ -40,6 +40,10 @@
#ifdef FIX_345
#include <X11/keysym.h>
#endif
+#ifdef FIX_1565
+#include <Xm/GrabShell.h>
+#include <Xm/MenuShell.h>
+#endif
/**************************************************************************
@@ -530,3 +534,173 @@ _XmAssignInsensitiveColor(Widget w)
return p;
}
#endif
+
+#ifdef FIX_1565
+
+typedef struct _GrabData GrabData;
+struct _GrabData {
+ Widget w;
+ GrabData *next;
+};
+
+static void _XmSendFocusEvent(Widget child, int type);
+static void _XmStartDispatcher(Display *display);
+static Boolean _XmEventDispatcher(XEvent *event);
+static void UnmapHandler(Widget w, XtPointer client_data, XEvent *event, Boolean *cont);
+static Boolean _UngrabKeyboard(Widget w);
+
+static GrabData *grabw_top = NULL;
+static int xm_dispatcher_on = 0;
+static XtEventDispatchProc saved_dispatcher_proc = NULL;
+static XtEventDispatchProc xt_dispatcher_proc = NULL;
+
+/*
+ XmForceGrabKeyboard function is defined to be a substitutor of XSetInputFocus calls
+ for popup and pulldown menus that should grab keyboard focus yet main window at the
+ same time should visually stay in focus for window manager. This resolves focus flip
+ issue when popup or pulldown menu is raised. ~ochern
+ */
+void XmForceGrabKeyboard(Widget w, Time time)
+{
+ GrabData *grabw;
+
+ if (!w)
+ return;
+
+ while (! XtIsSubclass(w, shellWidgetClass))
+ w = XtParent(w);
+
+ if (! (XtIsSubclass(w, xmGrabShellWidgetClass) || XtIsSubclass(w, xmMenuShellWidgetClass)))
+ return;
+
+ _XmStartDispatcher(XtDisplay(w));
+
+ _UngrabKeyboard(w);
+
+ grabw = (GrabData *) XtMalloc(sizeof(GrabData));
+ grabw->w = w;
+ _XmProcessLock();
+ grabw->next = grabw_top;
+ grabw_top = grabw;
+ _XmProcessUnlock();
+
+ XtInsertEventHandler(w, StructureNotifyMask, False, UnmapHandler, NULL, XtListHead);
+
+ _XmSendFocusEvent(w, FocusIn);
+
+ /* Following the XSetInputFocus behaviour we force sending FocusOut (see XGrabKeyboard(3))
+ event to a previous keyboard holder */
+ XtGrabKeyboard(w, True, GrabModeAsync, GrabModeAsync, time);
+}
+
+static void _XmStartDispatcher(Display *display)
+{
+ if (!display)
+ return;
+
+ _XmProcessLock();
+
+ if (xm_dispatcher_on) {
+ _XmProcessUnlock();
+ return;
+ }
+
+ saved_dispatcher_proc = XtSetEventDispatcher(display, KeyPress, _XmEventDispatcher);
+ if (! xt_dispatcher_proc)
+ xt_dispatcher_proc = saved_dispatcher_proc;
+ XtSetEventDispatcher(display, KeyRelease, _XmEventDispatcher);
+ xm_dispatcher_on = 1;
+
+ _XmProcessUnlock();
+}
+
+static Boolean _XmEventDispatcher(XEvent *event)
+{
+ _XmProcessLock();
+ if (grabw_top) {
+ if (event->type == KeyPress || event->type == KeyRelease)
+ event->xany.window = XtWindow(grabw_top->w);
+ }
+ _XmProcessUnlock();
+
+ if (saved_dispatcher_proc) {
+ return (*saved_dispatcher_proc)(event);
+ } else if (xt_dispatcher_proc) {
+ return (*xt_dispatcher_proc)(event);
+ } else {
+ if (grabw_top)
+ XtSetEventDispatcher(XtDisplay(grabw_top->w), event->type, NULL);
+ return XtDispatchEvent(event);
+ }
+}
+
+static void UnmapHandler(Widget w, XtPointer client_data, XEvent *event, Boolean *cont)
+{
+ if (event->type == UnmapNotify)
+ _UngrabKeyboard(w);
+ if (! grabw_top) {
+ XtSetEventDispatcher(XtDisplay(w), KeyPress, saved_dispatcher_proc);
+ XtSetEventDispatcher(XtDisplay(w), KeyRelease, saved_dispatcher_proc);
+ xm_dispatcher_on = 0;
+ }
+
+ /* we do not call XtUngrabKeyboard since X server automatically performs an
+ UngrabKeyboard request if the event window for an active keyboard grab becomes
+ not viewable. ~ochern */
+}
+
+static Boolean _UngrabKeyboard(Widget w)
+{
+ GrabData *grabw, *grabw_prev;
+
+ _XmProcessLock();
+ if (! grabw_top) {
+ _XmProcessUnlock();
+ return False;
+ }
+
+ grabw = grabw_top;
+ grabw_prev = NULL;
+ while(grabw && grabw->w != w) {
+ grabw_prev = grabw;
+ grabw = grabw->next;
+ }
+ if (grabw) {
+ if (grabw_prev)
+ grabw_prev->next = grabw->next;
+ else
+ grabw_top = grabw->next;
+ XtFree((char*) grabw);
+
+ _XmProcessUnlock();
+ return True;
+ }
+
+ _XmProcessUnlock();
+ return False;
+}
+
+static void _XmSendFocusEvent(Widget child, int type)
+{
+ child = XtIsWidget(child) ? child : _XtWindowedAncestor(child);
+ if (XtIsSensitive(child) && !child->core.being_destroyed
+ && XtIsRealized(child) && (XtBuildEventMask(child) & FocusChangeMask))
+ {
+ XFocusChangeEvent event;
+ Display* dpy = XtDisplay (child);
+
+ event.type = type;
+ event.serial = LastKnownRequestProcessed(dpy);
+ event.send_event = True;
+ event.display = dpy;
+ event.window = XtWindow(child);
+ event.mode = NotifyNormal;
+ event.detail = NotifyAncestor;
+ if (XFilterEvent((XEvent*)&event, XtWindow(child)))
+ return;
+ XtDispatchEventToWidget(child, (XEvent*)&event);
+ }
+}
+
+#endif
+
diff --git a/lib/Xm/XmI.h b/lib/Xm/XmI.h
index b4420d3..c2b819e 100644
--- a/lib/Xm/XmI.h
+++ b/lib/Xm/XmI.h
@@ -242,7 +242,9 @@ extern Boolean _XmIsISO10646(Display *dpy,
extern XChar2b* _XmUtf8ToUcs2(char *draw_text,
size_t seg_len,
size_t *ret_str_len);
-
+#ifdef FIX_1565
+extern void XmForceGrabKeyboard(Widget w, Time time);
+#endif
/******** End Private Function Declarations ********/

View File

@ -0,0 +1,93 @@
diff -up openmotif-2.3.3/clients/mwm/WmResParse.c.mwmrc_dir openmotif-2.3.3/clients/mwm/WmResParse.c
--- openmotif-2.3.3/clients/mwm/WmResParse.c.mwmrc_dir 2009-06-22 23:51:51.000000000 +0200
+++ openmotif-2.3.3/clients/mwm/WmResParse.c 2010-03-23 13:37:03.000000000 +0100
@@ -2403,7 +2403,7 @@ FILE *FopenConfigFile (void)
#endif /* PANELIST */
#ifndef MWMRCDIR
-#define MWMRCDIR "/usr/lib/X11"
+#define MWMRCDIR "/etc/X11/mwm"
#endif
if (LANG != NULL)
{
diff -up openmotif-2.3.3/configure.ac.mwmrc_dir openmotif-2.3.3/configure.ac
--- openmotif-2.3.3/configure.ac.mwmrc_dir 2009-10-27 17:10:23.000000000 +0100
+++ openmotif-2.3.3/configure.ac 2010-03-23 13:38:33.000000000 +0100
@@ -179,7 +179,7 @@ AC_SUBST(CDE_CONFIGURATION_TOP)
LIBDIR="${libdir}/X11"
AC_SUBST(LIBDIR)
-MWMRCDIR="${libdir}/X11"
+MWMRCDIR="/etc/X11/mwm"
AC_SUBST(MWMRCDIR)
INCDIR="${includedir}/X11"
diff -up openmotif-2.3.3/doc/man/man1/mwm.1.mwmrc_dir openmotif-2.3.3/doc/man/man1/mwm.1
--- openmotif-2.3.3/doc/man/man1/mwm.1.mwmrc_dir 2002-01-05 16:21:11.000000000 +0100
+++ openmotif-2.3.3/doc/man/man1/mwm.1 2010-03-23 13:37:03.000000000 +0100
@@ -678,8 +678,8 @@ is set, \fBmwm\fP looks for \fI$HOME/$LA
\fB$HOME\fP/\fBconfigFile\fP\&. If the \fIconfigFile\fP pathname does not begin with "~/" or "/", \fBmwm\fP considers it to be relative to the current working directory\&. If
the \fIconfigFile\fP resource is not specified
or if that file does not exist, \fBmwm\fP uses several default
-paths to find a configuration file\&. The order of the search is shown below: \fB/usr/X11R6/lib/X11/$LANG/system\&.mwmrc\fP\(dg
-\fB/usr/X11R6/lib/X11/system\&.mwmrc\fP\(dg Paths marked with \&'\(dg\&' are
+paths to find a configuration file\&. The order of the search is shown below: \fB/etc/X11/mwm/$LANG/system\&.mwmrc\fP\(dg
+\fB/etc/X11/mwm/system\&.mwmrc\fP\(dg Paths marked with \&'\(dg\&' are
implementation dependent\&.
.IP "\fIdeiconifyKeyFocus\fP\ (class\ \fIDeiconifyKeyFocus\fP)" 10
This resource applies only when the keyboard input focus policy is explicit\&.
@@ -1344,9 +1344,9 @@ the shell to use when executing commands
function\&.
.SS "Files"
.PP
-\fB/usr/X11R6/lib/X11/$LANG/system\&.mwmrc\fP
+\fB/etc/X11/mwm/$LANG/system\&.mwmrc\fP
.PP
-\fB/usr/X11R6/lib/X11/system\&.mwmrc\fP
+\fB/etc/X11/mwm/system\&.mwmrc\fP
.PP
\fB/usr/X11R6/lib/X11/app-defaults/Mwm\fP
.PP
diff -up openmotif-2.3.3/doc/man/man4/mwmrc.4.mwmrc_dir openmotif-2.3.3/doc/man/man4/mwmrc.4
--- openmotif-2.3.3/doc/man/man4/mwmrc.4.mwmrc_dir 2002-01-05 16:21:12.000000000 +0100
+++ openmotif-2.3.3/doc/man/man4/mwmrc.4 2010-03-23 13:37:03.000000000 +0100
@@ -57,7 +57,7 @@ file that controls much of the behavior
It contains descriptions of resources that cannot easily be
written using standard X Window System, Version 11 resource syntax\&. The resource
description file contains entries that are referred to by X resources in
-defaults files (for example, \fB/usr/X11R6/lib/X11/app-defaults/Mwm\fP)
+defaults files (for example, \fB/usr/share/X11/app-defaults/Mwm\fP)
or in the \fBRESOURCE_MANAGER\fP property on the
root window\&. For example, the resource description file enables you to specify
different types of window menus; however, an X resource is used to specify
@@ -72,8 +72,8 @@ on a per-user basis:
.nf
\f(CW$HOME/$LANG/\&.mwmrc
$HOME/\&.mwmrc
-/usr/X11R6/lib/X11/$LANG/system\&.mwmrc
-/usr/X11R6/lib/X11/system\&.mwmrc\fR
+/etc/X11/mwm/$LANG/system\&.mwmrc
+/etc/X11/mwm/system\&.mwmrc\fR
.fi
.PP
.PP
@@ -84,7 +84,7 @@ resource\&. The following shows how a di
be specified from the command line:
.PP
.nf
-\f(CW/usr/X11R6/bin/X11/mwm -xrm "mwm*configFile: mymwmrc"\fR
+\f(CW/usr/bin/mwm -xrm "mwm*configFile: mymwmrc"\fR
.fi
.PP
.SS "Resource Types"
@@ -626,8 +626,8 @@ is not what you expect\&.
.nf
\fB$HOME/$LANG/\&.mwmrc
$HOME/\&.mwmrc
-/usr/X11R6/lib/X11/$LANG/system\&.mwmrc
-/usr/X11R6/lib/X11/system\&.mwmrc\fP
+/etc/X11/mwm/$LANG/system\&.mwmrc
+/etc/X11/mwm/system\&.mwmrc\fP
.fi
.SH "RELATED INFORMATION"
.PP

View File

@ -0,0 +1,13 @@
diff -up openmotif-2.3.3/Makefile.am.no_demos openmotif-2.3.3/Makefile.am
--- openmotif-2.3.3/Makefile.am.no_demos 2008-09-19 16:38:05.000000000 +0200
+++ openmotif-2.3.3/Makefile.am 2010-03-23 13:53:13.000000000 +0100
@@ -29,7 +29,7 @@ SUBDIRS = bindings bitmaps \
include \
tools \
clients \
- doc \
- demos
+ doc
+
AUTOMAKE_OPTIONS = 1.4
ACLOCAL_AMFLAGS = -I .

View File

@ -0,0 +1,39 @@
commit 33e0b7fd58ec8ce9fd23d3a66a91e9b4b7c2b928
Author: Oleksiy Chernyavskyy <ochern@ics.com>
Date: Fri Jun 10 23:15:00 2016 +0300
bug 1654 fix
diff --git a/lib/Xm/LabelG.c b/lib/Xm/LabelG.c
index b674041..726b095 100644
--- a/lib/Xm/LabelG.c
+++ b/lib/Xm/LabelG.c
@@ -35,6 +35,7 @@ static char rcsid[] = "$TOG: LabelG.c /main/24 1999/01/26 15:31:18 mgreess $"
#include <config.h>
#endif
#define FIX_1517
+#define FIX_1654
#include <string.h>
#include <stdio.h>
@@ -2352,12 +2353,20 @@ LRectangle *background_box)
if (LabG_StringRect(lw).width < availW - marginal_width)
width = LabG_StringRect(lw).width;
else
+#ifdef FIX_1654
+ width = availW - marginal_width;
+#else
width = availW - marginal_width - x;
+#endif
if (LabG_StringRect(lw).height < availH - marginal_height)
height = LabG_StringRect(lw).height;
else
+#ifdef FIX_1654
+ height = availH - marginal_height;
+#else
height = availH - marginal_height - y;
+#endif
XFillRectangle(XtDisplay(lw), XtWindow(lw), LabG_BackgroundGC(lw),
x, y, width, height);

View File

@ -0,0 +1,104 @@
From 6aff3a819cb69235594124d7b252d1ee8c04f2b0 Mon Sep 17 00:00:00 2001
From: Mykola Vshyvkov <mvshyvk@softserveinc.com>
Date: Wed, 21 Aug 2013 11:49:00 +0300
Subject: [PATCH] Fixed bug #1612 (Label size computed wrong within a Form).
---
lib/Xm/Form.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 56 insertions(+), 2 deletions(-)
diff --git a/lib/Xm/Form.c b/lib/Xm/Form.c
index 74140af8..b95a7b1a 100644
--- a/lib/Xm/Form.c
+++ b/lib/Xm/Form.c
@@ -50,6 +50,7 @@ static char rcsid[] = "$TOG: Form.c /main/19 1998/03/25 12:24:56 csn $"
#include "GMUtilsI.h"
#define FIX_1299
+#define FIX_1612
#define MESSAGE1 _XmMMsgForm_0000
#define MESSAGE5 _XmMMsgForm_0002
@@ -285,6 +286,12 @@ static int GetFormOffset(
XmFormWidget fw,
int which,
XmFormAttachment a) ;
+#ifdef FIX_1612
+static Boolean IsWidgetAttachedOneHorizontalSide(
+ Widget w);
+static Boolean IsWidgetAttachedOneVerticalSide(
+ Widget w);
+#endif
/******** End Static Function Declarations ********/
@@ -1083,13 +1090,21 @@ GeometryManager(
} else {
/* the size the Form wants for the kid request is bigger than
its current or proposed size, return No to the kid */
-
/* backup the original Form size first */
fw->core.width = orig_form_width ;
fw->core.height = orig_form_height;
-
/* we haden't changed anything else, just return No */
reply = XtGeometryNo;
+
+#ifdef FIX_1612
+ if (((IsWidgetAttachedOneHorizontalSide(w)) &&
+ (desired->request_mode & CWWidth)) ||
+ ((IsWidgetAttachedOneVerticalSide(w)) &&
+ (desired->request_mode & CWHeight)))
+ { PlaceChildren (fw, w, desired);
+ reply = XtGeometryYes;
+ }
+#endif
}
} else {
/* ok, we got a Yes form the Form's parent, let's relayout
@@ -3477,3 +3492,42 @@ XmCreateFormDialog(
return XmeCreateClassDialog (xmFormWidgetClass,
parent, name, arglist, argcount) ;
}
+
+
+
+#ifdef FIX_1612
+/************************************************************************
+ *
+ * IsWidgetAttachedOneHorizontalSide
+ * Checking the attachments of widget in horizontal direction.
+ * Returns True if only one (left or right) side of widget is attached
+ *
+ ************************************************************************/
+static Boolean IsWidgetAttachedOneHorizontalSide(Widget w)
+ { if (w != NULL)
+ { XmFormConstraint c = GetFormConstraint(w);
+ if (((c->att[LEFT].type == XmATTACH_NONE) &&
+ (c->att[RIGHT].type != XmATTACH_NONE)) ||
+ ((c->att[LEFT].type != XmATTACH_NONE) &&
+ (c->att[RIGHT].type == XmATTACH_NONE)))
+ return True;
+
+ }
+ return False;
+ }
+
+
+static Boolean IsWidgetAttachedOneVerticalSide(Widget w)
+ { if (w != NULL)
+ { XmFormConstraint c = GetFormConstraint(w);
+ if (((c->att[TOP].type == XmATTACH_NONE) &&
+ (c->att[BOTTOM].type != XmATTACH_NONE)) ||
+ ((c->att[TOP].type != XmATTACH_NONE) &&
+ (c->att[BOTTOM].type == XmATTACH_NONE)))
+ return True;
+
+ }
+ return False;
+ }
+
+#endif
--
2.14.3

View File

@ -0,0 +1,27 @@
From e5c51cda449ea3544fddcdb84c6809757477035b Mon Sep 17 00:00:00 2001
From: Oleksiy Chernyavskyy <ochern@ics.com>
Date: Tue, 22 Aug 2017 03:27:36 +0300
Subject: [PATCH] Fixed bug 1660
---
lib/Xm/TextF.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/Xm/TextF.c b/lib/Xm/TextF.c
index 3323d2bd..f66076da 100644
--- a/lib/Xm/TextF.c
+++ b/lib/Xm/TextF.c
@@ -1768,8 +1768,8 @@ PaintCursor(XmTextFieldWidget tf)
}
if (cursor_width > 0 && cursor_height > 0)
XCopyArea(XtDisplay(tf), tf->text.ibeam_off, XtWindow(tf),
- tf->text.save_gc, 0, 0, cursor_width,
- cursor_height, x, y);
+ tf->text.save_gc, src_x, 0, cursor_width,
+ cursor_height, x, y);
}
}
}
--
2.13.5

View File

@ -0,0 +1,20 @@
--- openmotif/clients/uil/Makefile.am.uil_lib 2003-12-16 13:41:53.000000000 +0100
+++ openmotif/clients/uil/Makefile.am 2003-12-16 13:41:55.000000000 +0100
@@ -13,7 +13,7 @@
libUil_la_LIBADD = UilParser.lo ../../lib/Mrm/libMrm.la ../../lib/Xm/libXm.la
-uil_LDADD = ../../lib/Mrm/libMrm.la ../../lib/Xm/libXm.la
+uil_LDADD = libUil.la ../../lib/Mrm/libMrm.la ../../lib/Xm/libXm.la
INCLUDES = -DINCDIR=\"@INCDIR@\" \
-DLIBDIR=\"@LIBDIR@\" \
@@ -42,7 +42,7 @@
UilLstMac.c UilSemVal.c UilSemCSet.c UilDB.c
SRCS = $(COMMON_SRC)
-SRCS2 = $(COMMON_SRC) UilMain.c
+SRCS2 = UilMain.c
HEADERS_1 = Uil.h UilSymGl.h UilSymDef.h \
UilDef.h XmAppl.uil

View File

@ -0,0 +1,47 @@
--- openmotif-2.3.0/doc/man/man1/mwm.1.no_X11R6 2005-12-09 15:08:21.000000000 +0100
+++ openmotif-2.3.0/doc/man/man1/mwm.1 2005-12-09 15:09:06.000000000 +0100
@@ -366,7 +366,7 @@
database\&. This database is built from the following sources\&. They are listed
in order of precedence, low to high:
.PP
-\fB/usr/X11R6/lib/X11/app-defaults/Mwm\fP
+\fB/usr/share/X11/app-defaults/Mwm\fP
.PP
\fB$HOME/Mwm\fP
.PP
@@ -376,7 +376,7 @@
.PP
\fBmwm\fP command line options
.PP
-The file names \fB/usr/X11R6/lib/X11/app-defaults/Mwm\fP and \fB$HOME/Mwm\fP represent customary locations for these files\&. The actual
+The file names \fB/usr/share/X11/app-defaults/Mwm\fP and \fB$HOME/Mwm\fP represent customary locations for these files\&. The actual
location of the system-wide class resource file may depend on the \fBXFILESEARCHPATH\fP environment variable and the
current language environment\&. The actual location of the user-specific class
resource file may depend on the \fBXUSERFILESEARCHPATH\fP and \fBXAPPLRESDIR\fP
@@ -595,7 +595,7 @@
NameClassValue TypeDefault
autoKeyFocusAutoKeyFocusT/FT
autoRaiseDelayAutoRaiseDelaymillisec500
-bitmap-Bitmap-directory/usr/X11R6/include-
+bitmap-Bitmap-directory/usr/include-
DirectoryDirectory/X11/bitmaps
clientAutoPlaceClientAutoPlaceT/FT
colormapFocus-ColormapFocus-stringkeyboard
@@ -650,7 +650,7 @@
This resource identifies a directory to be searched for bitmaps referenced
by \fBmwm\fP resources\&. This directory is searched if a bitmap
is specified without an absolute pathname\&. The default value for this resource
-is \fB/usr/X11R6/include/X11/bitmaps\fP\&. The directory \fB/usr/X11R6/include/X11/bitmaps\fP
+is \fB/usr/include/X11/bitmaps\fP\&. The directory \fB/usr/include/X11/bitmaps\fP
represents the customary locations for this directory\&. The actual
location of this directory may vary on some systems\&. If the bitmap is not
found in the specified directory, \fBXBMLANGPATH\fP is searched\&.
@@ -1348,7 +1348,7 @@
.PP
\fB/etc/X11/mwm/system\&.mwmrc\fP
.PP
-\fB/usr/X11R6/lib/X11/app-defaults/Mwm\fP
+\fB/usr/share/X11/app-defaults/Mwm\fP
.PP
\fB$HOME/Mwm\fP
.PP

View File

@ -0,0 +1,22 @@
--- openmotif-2.3.0/lib/Xm/ColorS.c.rgbtxt 2004-07-07 14:24:07.000000000 +0200
+++ openmotif-2.3.0/lib/Xm/ColorS.c 2005-12-02 13:26:11.000000000 +0100
@@ -131,7 +131,7 @@
{
XmNrgbFile, XmCString, XmRString,
sizeof(String), XtOffsetOf(XmColorSelectorRec, cs.rgb_file),
- XmRString, (XtPointer) "/usr/lib/X11/rgb.txt"
+ XmRString, (XtPointer) "/usr/share/X11/rgb.txt"
},
#endif
{
--- openmotif-2.3.0/doc/man/man3/XmColorSelector.3.rgbtxt 2002-01-17 21:32:48.000000000 +0100
+++ openmotif-2.3.0/doc/man/man3/XmColorSelector.3 2005-12-02 13:25:26.000000000 +0100
@@ -34,7 +34,7 @@
noCellError%NoCellError%XmString%"No Color Cell
%%% Available"
redSliderLabel%SliderLabel%XmString%"Red"
-rgbFile%String%String%/usr/lib/X11/rgb.txt
+rgbFile%String%String%/usr/share/X11/rgb.txt
sliderTogLabel%TogLabel%XmString%"Color Sliders"
.TE
.PP

View File

@ -0,0 +1,11 @@
--- openmotif-2.3.1-old/clients/mwm/WmWinConf.c 2002-01-11 02:25:38.000000000 +0530
+++ openmotif-2.3.1-old/clients/mwm/WmWinConf.c 2013-08-23 12:47:45.000000000 +0530
@@ -1512,7 +1512,7 @@ DrawSegments (Display *dpy, Window win,
*************************************<->***********************************/
void MoveOutline (int x, int y, unsigned int width, unsigned int height)
{
- if (wmGD.freezeOnConfig)
+ if (wmGD.freezeOnConfig || !wmGD.pActiveSD->moveOpaque)
{
DrawOutline (x, y, width, height);
}

View File

@ -0,0 +1,427 @@
From 18de86345d5e455b815fe0395d2992b9a2f1195f Mon Sep 17 00:00:00 2001
From: Oleksiy Chernyavskyy <ochern@ics.com>
Date: Tue, 28 Mar 2017 01:11:59 +0300
Subject: [PATCH] removed bugfix 1565. See details on
http://bugs.motifzone.net/show_bug.cgi?id=1565
---
lib/Xm/ComboBox.c | 8 ---
lib/Xm/DropDown.c | 7 ---
lib/Xm/GrabShell.c | 15 +----
lib/Xm/GrabShellP.h | 3 -
lib/Xm/RCMenu.c | 40 ------------
lib/Xm/Xm.c | 173 ----------------------------------------------------
lib/Xm/XmI.h | 4 --
7 files changed, 2 insertions(+), 248 deletions(-)
diff --git a/lib/Xm/ComboBox.c b/lib/Xm/ComboBox.c
index cf507da4..1472e458 100644
--- a/lib/Xm/ComboBox.c
+++ b/lib/Xm/ComboBox.c
@@ -3164,9 +3164,6 @@ CreatePulldown(Widget parent,
Arg args[4];
ArgList merged_args;
Cardinal n;
-#ifdef FIX_1565
- XmGrabShellWidget grabsh;
-#endif
n = 0;
XtSetArg(args[n], XmNlayoutDirection, LayoutM(parent)), n++;
@@ -3178,11 +3175,6 @@ CreatePulldown(Widget parent,
merged_args, n + *num_args);
XtFree((char*)merged_args);
-#ifdef FIX_1565
- grabsh = (XmGrabShellWidget) shell;
- grabsh->grab_shell.set_input_focus = False;
-#endif
-
return shell;
}
diff --git a/lib/Xm/DropDown.c b/lib/Xm/DropDown.c
index 5cd15cae..37fec03f 100644
--- a/lib/Xm/DropDown.c
+++ b/lib/Xm/DropDown.c
@@ -2027,9 +2027,6 @@ CreatePopup(Widget w, ArgList args, Cardinal num_args)
Arg *new_list, largs[10];
Cardinal num_largs;
Widget sb;
-#ifdef FIX_1565
- XmGrabShellWidget grabsh;
-#endif
num_largs = 0;
XtSetArg(largs[num_largs], XmNoverrideRedirect, True); num_largs++;
@@ -2043,10 +2040,6 @@ CreatePopup(Widget w, ArgList args, Cardinal num_args)
xmGrabShellWidgetClass, w,
new_list,
num_largs + num_args);
-#ifdef FIX_1565
- grabsh = (XmGrabShellWidget) XmDropDown_popup_shell(cbw);
- grabsh->grab_shell.set_input_focus = False;
-#endif
XtFree((char *) new_list);
#ifdef FIX_1446
diff --git a/lib/Xm/GrabShell.c b/lib/Xm/GrabShell.c
index af13e0b7..a73f7cb9 100644
--- a/lib/Xm/GrabShell.c
+++ b/lib/Xm/GrabShell.c
@@ -284,9 +284,6 @@ Initialize(Widget req, /* unused */
/* CR 9920: Popdown may be requested before MapNotify. */
grabsh->grab_shell.mapped = False;
-#ifdef FIX_1565
- grabsh->grab_shell.set_input_focus = True;
-#endif
}
/*
@@ -399,16 +396,8 @@ MapNotifyHandler(Widget shell, XtPointer client_data,
XGetInputFocus(XtDisplay(shell), &grabshell->grab_shell.old_focus,
&grabshell->grab_shell.old_revert_to);
old_handler = XSetErrorHandler(IgnoreXErrors);
-#ifdef FIX_1565
- if (! grabshell->grab_shell.set_input_focus) {
- XmForceGrabKeyboard(shell, time);
- } else {
-#endif
- XSetInputFocus(XtDisplay(shell), XtWindow(shell), RevertToParent, time);
- XSync(XtDisplay(shell), False);
-#ifdef FIX_1565
- }
-#endif
+ XSetInputFocus(XtDisplay(shell), XtWindow(shell), RevertToParent, time);
+ XSync(XtDisplay(shell), False);
XSetErrorHandler(old_handler);
}
diff --git a/lib/Xm/GrabShellP.h b/lib/Xm/GrabShellP.h
index 025f0015..e2585540 100644
--- a/lib/Xm/GrabShellP.h
+++ b/lib/Xm/GrabShellP.h
@@ -56,9 +56,6 @@ typedef struct
Boolean mapped;
Window old_focus;
int old_revert_to;
-#ifdef FIX_1565
- Boolean set_input_focus;
-#endif
} XmGrabShellPart;
diff --git a/lib/Xm/RCMenu.c b/lib/Xm/RCMenu.c
index 8b156da5..2c698d4f 100644
--- a/lib/Xm/RCMenu.c
+++ b/lib/Xm/RCMenu.c
@@ -85,9 +85,6 @@ static char *rcsid = "$TOG: RCMenu.c /main/25 1999/05/24 18:06:57 samborn $";
#include "TraversalI.h"
#include "UniqueEvnI.h"
#include "VendorSI.h"
-#ifdef FIX_1565
-#include <Xm/GrabShell.h>
-#endif
#define FIX_1535
@@ -946,13 +943,6 @@ _XmMenuFocus(
XmMenuState mst = _XmGetMenuState((Widget)w);
Window tmpWindow;
int tmpRevert;
-#ifdef FIX_1565
- Widget shell;
-
- shell = w;
- while (! XtIsSubclass(shell, shellWidgetClass))
- shell = XtParent(shell);
-#endif
if (_time == CurrentTime)
_time = XtLastTimestampProcessed(XtDisplay(w));
@@ -993,11 +983,6 @@ _XmMenuFocus(
shell.popped_up))
**/
{
-#ifdef FIX_1565
- if (XtIsSubclass(shell, xmGrabShellWidgetClass) || XtIsSubclass(shell, xmMenuShellWidgetClass))
- XmForceGrabKeyboard(w, _time);
- else
-#endif
SetInputFocus(XtDisplay(w), mst->RC_menuFocus.oldFocus,
mst->RC_menuFocus.oldRevert,
mst->RC_menuFocus.oldTime);
@@ -1011,11 +996,6 @@ _XmMenuFocus(
*/
else
{
-#ifdef FIX_1565
- if (XtIsSubclass(shell, xmGrabShellWidgetClass) || XtIsSubclass(shell, xmMenuShellWidgetClass))
- XmForceGrabKeyboard(w, _time);
- else
-#endif
SetInputFocus(XtDisplay(w), mst->RC_menuFocus.oldFocus,
mst->RC_menuFocus.oldRevert,
mst->RC_menuFocus.oldTime);
@@ -1034,11 +1014,6 @@ _XmMenuFocus(
RC_menuFocus.oldFocus);
mst->RC_menuFocus.oldTime = _time - 1;
-#ifdef FIX_1565
- if (XtIsSubclass(shell, xmGrabShellWidgetClass) || XtIsSubclass(shell, xmMenuShellWidgetClass))
- XmForceGrabKeyboard(w, _time);
- else
-#endif
SetInputFocus(XtDisplay(w), XtWindow(w), mst->RC_menuFocus.oldRevert,
mst->RC_menuFocus.oldTime);
@@ -1052,11 +1027,6 @@ _XmMenuFocus(
XGetInputFocus(XtDisplay(w), &tmpWindow, &tmpRevert);
if (tmpWindow != XtWindow(w))
{
-#ifdef FIX_1565
- if (XtIsSubclass(shell, xmGrabShellWidgetClass) || XtIsSubclass(shell, xmMenuShellWidgetClass))
- XmForceGrabKeyboard(w, _time);
- else
-#endif
SetInputFocus(XtDisplay(w), XtWindow(w), tmpRevert, _time);
mst->RC_menuFocus.oldRevert = tmpRevert;
@@ -1078,11 +1048,6 @@ _XmMenuFocus(
break;
case XmMENU_MIDDLE:
-#ifdef FIX_1565
- if (XtIsSubclass(shell, xmGrabShellWidgetClass) || XtIsSubclass(shell, xmMenuShellWidgetClass))
- XmForceGrabKeyboard(w, _time);
- else
-#endif
SetInputFocus(XtDisplay(w), XtWindow(w),
mst->RC_menuFocus.oldRevert,
mst->RC_menuFocus.oldTime);
@@ -1097,11 +1062,6 @@ _XmMenuFocus(
if ((tmpWindow != XtWindow(w)) &&
(_time > mst->RC_menuFocus.oldTime))
{
-#ifdef FIX_1565
- if (XtIsSubclass(shell, xmGrabShellWidgetClass) || XtIsSubclass(shell, xmMenuShellWidgetClass))
- XmForceGrabKeyboard(w, _time);
- else
-#endif
SetInputFocus(XtDisplay(w), XtWindow(w), tmpRevert, _time);
mst->RC_menuFocus.oldRevert = tmpRevert;
diff --git a/lib/Xm/Xm.c b/lib/Xm/Xm.c
index 45d48b61..657f9041 100644
--- a/lib/Xm/Xm.c
+++ b/lib/Xm/Xm.c
@@ -40,10 +40,6 @@
#ifdef FIX_345
#include <X11/keysym.h>
#endif
-#ifdef FIX_1565
-#include <Xm/GrabShell.h>
-#include <Xm/MenuShell.h>
-#endif
/**************************************************************************
@@ -535,172 +531,3 @@ _XmAssignInsensitiveColor(Widget w)
}
#endif
-#ifdef FIX_1565
-
-typedef struct _GrabData GrabData;
-struct _GrabData {
- Widget w;
- GrabData *next;
-};
-
-static void _XmSendFocusEvent(Widget child, int type);
-static void _XmStartDispatcher(Display *display);
-static Boolean _XmEventDispatcher(XEvent *event);
-static void UnmapHandler(Widget w, XtPointer client_data, XEvent *event, Boolean *cont);
-static Boolean _UngrabKeyboard(Widget w);
-
-static GrabData *grabw_top = NULL;
-static int xm_dispatcher_on = 0;
-static XtEventDispatchProc saved_dispatcher_proc = NULL;
-static XtEventDispatchProc xt_dispatcher_proc = NULL;
-
-/*
- XmForceGrabKeyboard function is defined to be a substitutor of XSetInputFocus calls
- for popup and pulldown menus that should grab keyboard focus yet main window at the
- same time should visually stay in focus for window manager. This resolves focus flip
- issue when popup or pulldown menu is raised. ~ochern
- */
-void XmForceGrabKeyboard(Widget w, Time time)
-{
- GrabData *grabw;
-
- if (!w)
- return;
-
- while (! XtIsSubclass(w, shellWidgetClass))
- w = XtParent(w);
-
- if (! (XtIsSubclass(w, xmGrabShellWidgetClass) || XtIsSubclass(w, xmMenuShellWidgetClass)))
- return;
-
- _XmStartDispatcher(XtDisplay(w));
-
- _UngrabKeyboard(w);
-
- grabw = (GrabData *) XtMalloc(sizeof(GrabData));
- grabw->w = w;
- _XmProcessLock();
- grabw->next = grabw_top;
- grabw_top = grabw;
- _XmProcessUnlock();
-
- XtInsertEventHandler(w, StructureNotifyMask, False, UnmapHandler, NULL, XtListHead);
-
- _XmSendFocusEvent(w, FocusIn);
-
- /* Following the XSetInputFocus behaviour we force sending FocusOut (see XGrabKeyboard(3))
- event to a previous keyboard holder */
- XtGrabKeyboard(w, True, GrabModeAsync, GrabModeAsync, time);
-}
-
-static void _XmStartDispatcher(Display *display)
-{
- if (!display)
- return;
-
- _XmProcessLock();
-
- if (xm_dispatcher_on) {
- _XmProcessUnlock();
- return;
- }
-
- saved_dispatcher_proc = XtSetEventDispatcher(display, KeyPress, _XmEventDispatcher);
- if (! xt_dispatcher_proc)
- xt_dispatcher_proc = saved_dispatcher_proc;
- XtSetEventDispatcher(display, KeyRelease, _XmEventDispatcher);
- xm_dispatcher_on = 1;
-
- _XmProcessUnlock();
-}
-
-static Boolean _XmEventDispatcher(XEvent *event)
-{
- _XmProcessLock();
- if (grabw_top) {
- if (event->type == KeyPress || event->type == KeyRelease)
- event->xany.window = XtWindow(grabw_top->w);
- }
- _XmProcessUnlock();
-
- if (saved_dispatcher_proc) {
- return (*saved_dispatcher_proc)(event);
- } else if (xt_dispatcher_proc) {
- return (*xt_dispatcher_proc)(event);
- } else {
- if (grabw_top)
- XtSetEventDispatcher(XtDisplay(grabw_top->w), event->type, NULL);
- return XtDispatchEvent(event);
- }
-}
-
-static void UnmapHandler(Widget w, XtPointer client_data, XEvent *event, Boolean *cont)
-{
- if (event->type == UnmapNotify)
- _UngrabKeyboard(w);
- if (! grabw_top) {
- XtSetEventDispatcher(XtDisplay(w), KeyPress, saved_dispatcher_proc);
- XtSetEventDispatcher(XtDisplay(w), KeyRelease, saved_dispatcher_proc);
- xm_dispatcher_on = 0;
- }
-
- /* we do not call XtUngrabKeyboard since X server automatically performs an
- UngrabKeyboard request if the event window for an active keyboard grab becomes
- not viewable. ~ochern */
-}
-
-static Boolean _UngrabKeyboard(Widget w)
-{
- GrabData *grabw, *grabw_prev;
-
- _XmProcessLock();
- if (! grabw_top) {
- _XmProcessUnlock();
- return False;
- }
-
- grabw = grabw_top;
- grabw_prev = NULL;
- while(grabw && grabw->w != w) {
- grabw_prev = grabw;
- grabw = grabw->next;
- }
- if (grabw) {
- if (grabw_prev)
- grabw_prev->next = grabw->next;
- else
- grabw_top = grabw->next;
- XtFree((char*) grabw);
-
- _XmProcessUnlock();
- return True;
- }
-
- _XmProcessUnlock();
- return False;
-}
-
-static void _XmSendFocusEvent(Widget child, int type)
-{
- child = XtIsWidget(child) ? child : _XtWindowedAncestor(child);
- if (XtIsSensitive(child) && !child->core.being_destroyed
- && XtIsRealized(child) && (XtBuildEventMask(child) & FocusChangeMask))
- {
- XFocusChangeEvent event;
- Display* dpy = XtDisplay (child);
-
- event.type = type;
- event.serial = LastKnownRequestProcessed(dpy);
- event.send_event = True;
- event.display = dpy;
- event.window = XtWindow(child);
- event.mode = NotifyNormal;
- event.detail = NotifyAncestor;
- if (XFilterEvent((XEvent*)&event, XtWindow(child)))
- return;
- XtDispatchEventToWidget(child, (XEvent*)&event);
- }
-}
-
-#endif
-
diff --git a/lib/Xm/XmI.h b/lib/Xm/XmI.h
index ef6165c5..769e5f0a 100644
--- a/lib/Xm/XmI.h
+++ b/lib/Xm/XmI.h
@@ -237,9 +237,6 @@ extern Boolean _XmIsISO10646(Display *dpy,
extern XChar2b* _XmUtf8ToUcs2(char *draw_text,
size_t seg_len,
size_t *ret_str_len);
-#ifdef FIX_1565
-extern void XmForceGrabKeyboard(Widget w, Time time);
-#endif
/******** End Private Function Declarations ********/
@@ -294,7 +291,6 @@ extern Pixel _XmAssignInsensitiveColor(Widget w);
#define FIX_1501
#define FIX_1521
#define FIX_1505
-#define FIX_1565
#endif /* _XmI_h */
/* DON'T ADD ANYTHING AFTER THIS #endif */
--
2.13.5

6
SOURCES/xmbind Normal file
View File

@ -0,0 +1,6 @@
#! /bin/sh
if [ -x /usr/bin/xmbind ] ; then
/usr/bin/xmbind
fi

579
SPECS/motif.spec Normal file
View File

@ -0,0 +1,579 @@
Summary: Run-time libraries and programs
Name: motif
Version: 2.3.4
Release: 21%{?dist}
License: LGPLv2+
Group: System Environment/Libraries
Source: http://downloads.sf.net/motif/motif-%{version}-src.tgz
Source1: xmbind
URL: http://www.motifzone.net/
Obsoletes: openmotif < 2.3.4
Provides: openmotif = %{version}-%{release}
Requires: xorg-x11-xbitmaps
Requires: xorg-x11-xinit
BuildRequires: automake, libtool, autoconf, flex
# flex static libs have been part of flex for RHEL <= 6 and Fedora <= 12
%if 0%{?fedora} > 12 || 0%{?rhel} > 6
BuildRequires: flex-static
%endif
BuildRequires: byacc, pkgconfig
BuildRequires: libjpeg-devel libpng-devel
BuildRequires: libXft-devel libXmu-devel libXp-devel libXt-devel libXext-devel
BuildRequires: xorg-x11-xbitmaps
BuildRequires: perl-interpreter
BuildRequires: pkgconfig(xinerama)
Patch22: motif-2.3.4-no_demos.patch
Patch23: openMotif-2.2.3-uil_lib.patch
Patch43: openMotif-2.3.0-rgbtxt.patch
Patch45: motif-2.3.4-mwmrc_dir.patch
Patch46: motif-2.3.4-bindings.patch
Patch47: openMotif-2.3.0-no_X11R6.patch
# FTBFS #1448819
Patch48: motif-2.3.4-Fix-issues-with-Werror-format-security.patch
Patch49: openmotif-2.3.1-rhbz_997241.patch
Patch50: motif-2.3.5-motifzone_1654.patch
Patch51: motif-2.3.4-motifzone_1564-88bdce1.patch
Patch52: revert-of-motifzone_1565.patch
Patch53: motifzone_1660.patch
Patch54: motifzone_1612.patch
Patch55: 0001-EditresCom-Fix-build-with-modern-systems.patch
# CVE-2023-43788
Patch56: 0001-Fix-CVE-2023-43788-Out-of-bounds-read-in-XpmCreateXp.patch
# CVE-2023-43789
Patch57: 0001-Fix-CVE-2023-43789-Out-of-bounds-read-on-XPM-with-co.patch
# https://issues.redhat.com/browse/RHEL-67987
Patch58: 0001-build-Check-for-Xinerama-availability.patch
Patch59: 0002-Xm-Display-Add-optional-Xinerama-support.patch
Patch60: 0003-Xm-MenuShell-Use-Xinerama-to-place-menus.patch
Patch61: 0004-Xm-DropDown-Use-Xinerama-for-placement.patch
Patch62: 0005-Xm-RCMenu-Use-Xinerama-for-placement.patch
Patch63: 0006-Xm-Tooltip-Use-Xinerama-for-placement.patch
Patch64: 0007-Xm-ComboBox-Use-Xinerama-for-placement.patch
Conflicts: lesstif <= 0.92.32-6
%description
This is the Motif %{version} run-time environment. It includes the
Motif shared libraries, needed to run applications which are dynamically
linked against Motif and the Motif Window Manager mwm.
%package devel
Summary: Development libraries and header files
Group: Development/Libraries
Conflicts: lesstif-devel <= 0.92.32-6
Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: libjpeg-devel%{?_isa} libpng-devel%{?_isa}
Requires: libXft-devel%{?_isa} libXmu-devel%{?_isa} libXp-devel%{?_isa}
Requires: libXt-devel%{?_isa} libXext-devel%{?_isa}
Obsoletes: openmotif-devel < 2.3.4
Provides: openmotif-devel = %{version}-%{release}
%description devel
This is the Motif %{version} development environment. It includes the
header files and also static libraries necessary to build Motif applications.
%package static
Summary: Static libraries
Group: Development/Libraries
Conflicts: lesstif-devel <= 0.92.32-6
Requires: %{name}-devel%{?_isa} = %{version}-%{release}
%description static
This package contains the static Motif libraries.
%prep
%setup -q
%patch22 -p1 -b .no_demos
%patch23 -p1 -b .uil_lib
%patch43 -p1 -b .rgbtxt
%patch45 -p1 -b .mwmrc_dir
%patch46 -p1 -b .bindings
%patch47 -p1 -b .no_X11R6
%patch48 -p1 -b .format-security
%patch49 -p1 -b .rhbz_997241
%patch50 -p1 -b .motifzone_1654
%patch51 -p1 -b .motifzone_1564-88bdce1
%patch52 -p1 -b .revert-of-motifzone_1565
%patch53 -p1 -b .motifzone_1660
%patch54 -p1 -b .motifzone_1612
%patch55 -p1 -b .long_bit
%patch56 -p1 -b .cve-2023-43788
%patch57 -p1 -b .cve-2023-43789
%patch58 -p1 -b .xinerama
%patch59 -p1 -b .xinerama
%patch60 -p1 -b .xinerama
%patch61 -p1 -b .xinerama
%patch62 -p1 -b .xinerama
%patch63 -p1 -b .xinerama
%patch64 -p1 -b .xinerama
%build
CFLAGS="$RPM_OPT_FLAGS -D_FILE_OFFSET_BITS=64" \
./autogen.sh --libdir=%{_libdir} --enable-static --enable-xft --enable-jpeg \
--enable-png
%configure --libdir=%{_libdir} --enable-static --enable-xft --enable-jpeg \
--enable-png
make clean %{?_smp_mflags}
make -C include
make %{?_smp_mflags}
%install
make DESTDIR=%{buildroot} install
install -d %{buildroot}/etc/X11/xinit/xinitrc.d
install -m 755 %{SOURCE1} %{buildroot}/etc/X11/xinit/xinitrc.d/xmbind.sh
rm -f %{buildroot}%{_libdir}/*.la
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
%clean
rm -rf %{buildroot}
%files
%doc COPYING README RELEASE RELNOTES
/etc/X11/xinit/xinitrc.d/xmbind.sh
%dir /etc/X11/mwm
%config(noreplace) /etc/X11/mwm/system.mwmrc
%{_bindir}/mwm
%{_bindir}/xmbind
%{_includedir}/X11/bitmaps/*
%{_libdir}/libMrm.so.*
%{_libdir}/libUil.so.*
%{_libdir}/libXm.so.*
%{_datadir}/X11/bindings
%{_mandir}/man1/mwm*
%{_mandir}/man1/xmbind*
%{_mandir}/man4/mwmrc*
%files devel
%{_bindir}/uil
%{_includedir}/Mrm
%{_includedir}/Xm
%{_includedir}/uil
%{_libdir}/lib*.so
%{_mandir}/man1/uil.1*
%{_mandir}/man3/*
%{_mandir}/man5/*
%files static
%{_libdir}/lib*.a
%changelog
* Mon Nov 25 2024 Olivier Fourdan <ofourdan@redhat.com> - 2.3.4-21
- Add Xinerama support (RHEL-67987)
* Mon Nov 27 2023 José Expósito <jexposit@redhat.com> - 2.3.4-20
- Fix CVE-2023-43788: out of bounds read in XpmCreateXpmImageFromBuffer()
- Fix CVE-2023-43789: out of bounds read on XPM with corrupted colormap
* Mon Sep 26 2022 Olivier Fourdan <ofourdan@redhat.com> - 2.3.4-19
- Fix LONG_BIT definition missing (rhbz#2124810)
* Wed Sep 07 2022 Mika Penttila <mpenttil@redhat.com> - 2.3.4-18
- Version bump
* Fri Apr 08 2022 Mika Penttila <mpenttil@redhat.com> - 2.3.4-17
- Added forgotten patches and corrected release number
* Tue Sep 11 2018 Carlos Soriano <csoriano@redhat.com> - 2.3.4-16
- Fix hardened flags, make sure to always pass LDFLAGS on the spec
- Resolves: RHBZ#1624143
* Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.3.4-15
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.3.4-14
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
* Thu Jun 08 2017 Petr Šabata <contyk@redhat.com> - 2.3.4-13
- Fix issues with -Werror=format-security (#1448819)
* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.3.4-12
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
* Thu Feb 04 2016 Fedora Release Engineering <releng@fedoraproject.org> - 2.3.4-11
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
* Wed Jun 17 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.3.4-10
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
* Sun Aug 17 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.3.4-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.3.4-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
* Sat Aug 03 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.3.4-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
* Tue May 28 2013 Michael Schwendt <mschwendt@fedoraproject.org> - 2.3.4-6
- fix missing BuildRequires flex-static (RHBZ#889175)
* Thu Feb 14 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.3.4-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
* Mon Jan 21 2013 Adam Tkac <atkac redhat com> - 2.3.4-4
- rebuild due to "jpeg8-ABI" feature drop
* Fri Oct 26 2012 Thomas Woerner <twoerner@redhat.com> 2.3.4-3
- do not use _isa for build requires
* Fri Oct 26 2012 Thomas Woerner <twoerner@redhat.com> 2.3.4-2
- fixed requirements according to review (RHBZ#870049)
- flex-static has been renamed to flex-devel with Fedora-18 and RHEL-7
* Thu Oct 25 2012 Thomas Woerner <twoerner@redhat.com> 2.3.4-1
- new version 2.3.4 with LGPL license
- fixed some rpmlint warnings
- new sub package for static libraries
- added /etc/X11/mwm directory
- removed defattrs
* Fri May 25 2012 Thomas Woerner <twoerner@redhat.com> 2.3.3-5
- dropped file requires for /usr/share/X11/XKeysymDB, not needed and not
available anymore
- added flex-static build requirement, because of flex package split
* Mon Aug 15 2011 Thomas Woerner <twoerner@redhat.com> 2.3.3-4
- fixed Label draws Xft text over border of its parent (rhbz#584300#c3)
(MotifZone bug #1521 refixed)
* Wed Aug 10 2011 Thomas Woerner <twoerner@redhat.com> 2.3.3-3
- fixed regression introduced with upstream FIX #1521 (rhbz#729346)
* Mon Aug 1 2011 Thomas Woerner <twoerner@redhat.com> 2.3.3-2
- fixed LabelGadget draws background over border of its parent (rhbz#584300)
(MotifZone bug #1517)
- fixed LabelGadget draws Xft text over border of its parent (rhbz#584300#c3)
(MotifZone bug #1521)
* Tue Mar 23 2010 Thomas Woerner <twoerner@redhat.com> 2.3.3-1
- new version 2.3.3 (bugfix release)
see RELNOTES file for the list of the bug fixes
* Fri Feb 26 2010 Thomas Woerner <twoerner@redhat.com> 2.3.2-1.1
- fixes according to review:
- fixed buildroot
- removed dot from summary
- removed dist tag from changelog
- added source download link
* Wed Jan 13 2010 Thomas Woerner <twoerner@redhat.com> 2.3.2-1
- new version 2.3.2 with upstream bug fixes: #1212, #1277, #1473, #1476
- spec file cleanup
- make build work with libtool
- all man pages are utf-8, no need to convert them anymore
- enabled EditRes support with upstream fix
- fixed parallel build
- fixed patches for fuzz 0
Related: rhbz#543948
* Tue Dec 08 2009 Dennis Gregorovic <dgregor@redhat.com> - 2.3.1-3.1
- Rebuilt for RHEL 6
* Wed Sep 23 2009 Dennis Gregorovic <dgregor@redhat.com> - 2.3.1-3
- update the bindings patch
* Wed Nov 12 2008 Thomas Woerner <twoerner@redhat.com> 2.3.1-2
- more fixes for unreliable pasting into XmTextField (MotifZone bug #1321)
Resolves: rhbz#405941
- the fix for MotifZone bug #1400 is not working for remote displays
* Thu Oct 2 2008 Thomas Woerner <twoerner@redhat.com> 2.3.1-1
- using final 2.3.1 dist archive
* Wed Sep 17 2008 Thomas Woerner <twoerner@redhat.com> 2.3.1-0
- rebase to 2.3.1 (CVS dist release)
Resolves: rhbz#455736
- fixes OpenMotif XmList problem
Resolves: rhbz#405801
- fixes List.c/ReplaceItem() segfaults when item selected
Resolves: rhbz#431460
- fixes [motifzone 1400 ] openmotif/ BadFont on multiple display application
Resolves: rhbz#438910
- fixes applications dump core in non-UTF8 environment
Resolves: rhbz#453722
- fixes lots of additional bugs: see release notes
* Tue Apr 1 2008 Thomas Woerner <twoerner@redhat.com> 2.3.0-0.5
- fixed SEGV error moving mouse over window related to XmToolTipGetLabel
(MotifZone bug fix #1388)
Resolves: rhbz#277381
* Thu Nov 8 2007 Thomas Woerner <twoerner@redhat.com> 2.3.0-0.4
- fixed title bar problem using XmNdialogTitle (MotifZone bug fix #1380)
Resolves: rhbz#353251
* Fri Dec 1 2006 Thomas Woerner <twoerner@redhat.com> 2.3.0-0.3
- fixed path to xmbind in /etc/X11/xinit/xinitrc.d/xmbind.sh
Resolves: rhbz#218032
* Wed Jul 12 2006 Jesse Keating <jkeating@redhat.com> - 2.3.0-0.2.1
- rebuild
* Tue Jun 6 2006 Thomas Woerner <twoerner@redhat.com> 2.3.0-0.2
- new CVS version 2006-06-06
- new buildprereq for pkgconfig
* Fri Feb 10 2006 Jesse Keating <jkeating@redhat.com> - 2.3.0-0.1.9.2
- bump again for double-long bug on ppc(64)
* Tue Feb 07 2006 Jesse Keating <jkeating@redhat.com> - 2.3.0-0.1.9.1
- rebuilt for new gcc4.1 snapshot and glibc changes
* Thu Feb 2 2006 Thomas Woerner <twoerner@redhat.com> 2.3.0-0.1.9
- new CVS version 2006-02-02
- fixed CVE-2005-3964: libUil buffer overflows (#174814)
- fixed XmList out of bound accesses (#167701)
- fixed pasting into TextField (#179549)
* Tue Jan 3 2006 Jesse Keating <jkeating@redhat.coM> 2.3.0-0.1.2
- Rebuilt on new gcc
* Fri Dec 9 2005 Thomas Woerner <twoerner@redhat.com> 2.3.0-0.1.1
- moved mwmrc to /etc/X11/mwm
- moved bindings to /usr/share/X11
- fixed paths in man pages containing /usr/X11R6
* Thu Dec 8 2005 Thomas Woerner <twoerner@redhat.com> 2.3.0-0.1.1
- enabled Xft, jpeg and png support
- patch for missing xft-config
- dropped duplicate include path in devel package
* Fri Dec 2 2005 Thomas Woerner <twoerner@redhat.com> 2.3.0-0.1
- new 2.3.0 (beta1)
- patch for new rgb.txt location (#174210)
Thanks to Ville Skyttä for the patch
* Fri Nov 18 2005 Thomas Woerner <twoerner@redhat.com> 2.2.3-15
- moved man pages to /usr/share/man (#173604)
* Wed Nov 16 2005 Jeremy Katz <katzj@redhat.com> - 2.2.3-14
- X11R6 stuff is gone
* Wed Nov 16 2005 Jeremy Katz <katzj@redhat.com> - 2.2.3-13
- also buildrequire xbitmaps
* Wed Nov 16 2005 Thomas Woerner <twoerner@redhat.com> 2.2.3-12
- rebuild for modular X
* Fri Sep 2 2005 Thomas Woerner <twoerner@redhat.com> 2.2.3-11
- fixed mrm initialization error in MrmOpenHierarchyPerDisplay (#167094)
Thanks to Arjan van de Ven for the patch.
* Mon Apr 4 2005 Thomas Woerner <twoerner@redhat.com> 2.2.3-10
- fixed possible libXpm overflows (#151642)
* Mon Feb 28 2005 Thomas Woerner <twoerner@redhat.com> 2.2.3-9
- Upstream Fix: Multiscreen mode
- Upstream Fix: Crash when restarting by a session manager (motifzone#1193)
- Upstream Fix: Crash when duplicating a window menu containing f.circle_up
(motifzone#1202)
- fixed divide by zero error in ComputeVizCount() (#144420)
- Xpmcreate: define LONG64 on 64 bit architectures (#143689)
* Mon Nov 29 2004 Thomas Woerner <twoerner@redhat.com> 2.2.3-8.1
- allow to write XPM files with absolute path names again (#140815)
* Wed Nov 24 2004 Miloslav Trmac <mitr@redhat.com> 2.2.3-8
- Convert man pages to UTF-8
* Mon Nov 22 2004 Thomas Woerner <twoerner@redhat.com> 2.2.3-7
- latest Xpm patches: CAN-2004-0914 (#134631)
- new patch for tmpnam in imake (only used for build)
* Thu Sep 30 2004 Thomas Woerner <twoerner@redhat.com> 2.2.3-6
- fixed CAN-2004-0687 (integer overflows) and CAN-2004-0688 (stack overflows)
in embedded Xpm library
* Wed Sep 29 2004 Thomas Woerner <twoerner@redhat.com> 2.2.3-5.2
- replaced libtoolize and autofoo* calls with a patch (autofoo)
* Wed Sep 29 2004 Thomas Woerner <twoerner@redhat.com> 2.2.3-5.1
- use new autofoo
* Wed Sep 1 2004 Thomas Woerner <twoerner@redhat.com> 2.2.3-5
- libXp now moved to xorg-x11-deprecated-libs, therefore no compatibility
with XFree86 packages anymore.
* Mon Aug 30 2004 Thomas Woerner <twoerner@redhat.com> 2.2.3-4.3
- devel package: added requires for XFree86-devel (#131202)
* Thu Jun 17 2004 Thomas Woerner <twoerner@redhat.com> 2.2.3-4.2
- rebuilt for fc3
* Wed Jun 16 2004 Thomas Woerner <twoerner@redhat.com> 2.2.3-4.1
- renamed xmbind script to xmbind.sh (#126116)
* Tue Jun 15 2004 Elliot Lee <sopwith@redhat.com>
- rebuilt
* Tue Jun 8 2004 Thomas Woerner <twoerner@redhat.com> 2.2.3-3
- fixed popup menus fail on Tarantella/VNC (#123027)
- fixed character not supported problem (#124960)
- fixed data out of bounds bug (#124961)
* Wed Apr 14 2004 Thomas Woerner <twoerner@redhat.com> 2.2.3-2
- 2.2.3 final version
* Tue Mar 23 2004 Thomas Woerner <twoerner@redhat.com> 2.2.3-1.9.2
- final CVS version
* Wed Mar 17 2004 Thomas Woerner <twoerner@redhat.com> 2.2.3-1.9.1
- new openmotif 2.2.3 beta version
* Mon Mar 8 2004 Thomas Woerner <twoerner@redhat.com> 2.2.2-17
- fixed popdown problem in ToolTip (#75730)
* Tue Mar 02 2004 Elliot Lee <sopwith@redhat.com>
- rebuilt
* Thu Feb 19 2004 Thomas Woerner <twoerner@redhat.com> 2.2.2-16.3
- rebuilt
* Thu Dec 18 2003 Thomas Woerner <twoerner@redhat.com>
- added missing BuildRequires for XFree86-devel
* Thu Nov 27 2003 Thomas Woerner <twoerner@redhat.com> 2.2.2-16.2
- removed rpath
* Mon Aug 27 2003 Thomas Woerner <twoerner@redhat.com> 2.2.2-16
- fixed ToggleBG (#101159)
* Thu Jul 31 2003 <timp@redhat.com> 2.2.2-15.2
- rebuild for RHEL
* Wed Jul 30 2003 Thomas Woerner <twoerner@redhat.com> 2.2.2-15
- fixed ToggleB (#101159)
* Wed Jan 22 2003 Tim Powers <timp@redhat.com>
- rebuilt
* Tue Jan 21 2003 Thomas Woerner <twoerner@redhat.com> 2.2.2-13
- fix for Xmu/EditRes conflict (bug #80777)
- fix for wml and utf-8 (bug #80271)
- fix for Ext18List (bug #74502)
* Thu Nov 14 2002 Than Ngo <than@redhat.com> 2.2.2-12.2
- add buildprereq byacc and flex (bug #77860)
* Fri Nov 8 2002 Than Ngo <than@redhat.com> 2.2.2-12.1
- fix some build problem
* Mon Aug 27 2002 Than Ngo <than@redhat.com> 2.2.2-12
- Fixed a segmentation fault in mkcatdefs (bug #71955)
* Wed Jul 24 2002 Than Ngo <than@redhat.com> 2.2.2-11
- Added missing symlinks (bug #69117)
* Tue Jul 23 2002 Tim Powers <timp@redhat.com> 2.2.2-10
- build using gcc-3.2-0.1
* Tue Jun 25 2002 Than Ngo <than@redhat.com> 2.2.2-9
- fix to build openmotif (bug #64176)
* Thu Jun 13 2002 Than Ngo <than@redhat.com> 2.2.2-8
- rebuild in new enviroment
* Sun May 26 2002 Tim Powers <timp@redhat.com>
- automated rebuild
* Thu May 23 2002 Harald Hoyer <harald@redhat.de> 2.2.2-6
- patched ltmain.sh to link properly
* Wed May 22 2002 Harald Hoyer <harald@redhat.de> 2.2.2-6
- specified libraries by full name in files section
(libMrm was missing on alpha)
* Tue Mar 26 2002 Than Ngo <than@redhat.com> 2.2.2-5
- update new 2.2.2 from ICS
* Sun Mar 24 2002 Than Ngo <than@redhat.com> 2.2.2-4
- add missing uil
* Fri Mar 22 2002 Tim Powers <timp@redhat.com>
- rebuilt to try and shake some broken deps in the devel package
* Thu Mar 21 2002 Than Ngo <than@redhat.com> 2.2.2-2
- rebuild
* Thu Mar 21 2002 Than Ngo <than@redhat.com> 2.2.2-1
- update to 2.2.2 release
* Mon Feb 22 2002 Than Ngo <than@redhat.com> 2.2.1-3
- conflict with older lesstif
* Mon Feb 22 2002 Than Ngo <than@redhat.com> 2.2.1-2
- fix bug #60816
* Fri Feb 22 2002 Than Ngo <than@redhat.com> 2.2.1-1
- update to 2.2.1 release
- remove somme patches, which are included in 2.2.1
* Fri Feb 22 2002 Tim Powers <timp@redhat.com>
- rebuilt in new environment
* Fri Jan 25 2002 Tim Powers <timp@redhat.com>
- don't obsolete lesstif anymore, play nicely together
- rebuild against new toolchain
* Wed Jan 21 2002 Than Ngo <than@redhat.com> 2.1.30-11
- add some patches from Darrell Commander (supporting largefile)
- fix to build on s390
* Thu Jan 17 2002 Than Ngo <than@redhat.com> 2.1.30-10
- rebuild in 8.0
* Wed Sep 6 2001 Than Ngo <than@redhat.com>
- rebuild for ExtraBinge 7.2
* Thu May 03 2001 Than Ngo <than@redhat.com>
- add 3 official motif patches
- add rm -rf $RPM_BUILD_ROOT in install section
- remove some old patches which are now in official patches
* Fri Dec 29 2000 Than Ngo <than@redhat.com>
- don't build static debug libraries
* Mon Dec 18 2000 Than Ngo <than@redhat.com>
- bzip2 source
* Mon Jul 24 2000 Than Ngo <than@redhat.de>
- rebuilt against gcc-2.96-44
* Wed Jul 12 2000 Than Ngo <than@redhat.de>
- rebuilt
* Sun Jun 11 2000 Than Ngo <than@redhat.de>
- fix imake to built with gcc-2.96 (thanks Jakup)
- put bitmaps in /usr/X11R6/include/X11/bitmaps
- put bindings in /usr/X11R6/lib/Xm/bindings
- add define -D_GNU_SOURCE to build Motif
- gzip man pages
- cleanup specfile
* Mon May 29 2000 Bernhard Rosenkraenzer <bero@redhat.com>
- Update to patchlevel 2
- remove bindings patch, it's included in pl2
* Tue May 16 2000 Matt Wilson <msw@redhat.com>
- use -fPIC on sparc
- fixed Ngo's "fixes"
* Mon May 15 2000 Ngo Than <than@redhat.de>
- added description.
- fixed spec, added uil stuff.
* Mon May 15 2000 Matt Wilson <msw@redhat.com>
- initialization of spec file.

View File

@ -1 +0,0 @@
motif package is retired on branch c10s for BAKERY-412