diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bd361d4 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/motif-2.3.4-src.tgz diff --git a/.motif.metadata b/.motif.metadata new file mode 100644 index 0000000..1296973 --- /dev/null +++ b/.motif.metadata @@ -0,0 +1 @@ +49ecfe2a0939232ca78ce318d938044e7f751b6d SOURCES/motif-2.3.4-src.tgz diff --git a/SOURCES/motif-2.3.4-Fix-issues-with-Werror-format-security.patch b/SOURCES/motif-2.3.4-Fix-issues-with-Werror-format-security.patch new file mode 100644 index 0000000..f0ff860 --- /dev/null +++ b/SOURCES/motif-2.3.4-Fix-issues-with-Werror-format-security.patch @@ -0,0 +1,815 @@ +From 4783fb4cec8624311bb87b2eb4a2ac94a5c7d849 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20=C5=A0abata?= +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 +--- + 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 ; ndxcnt ; ndx++ ) + { + clsobj = (WmlClassDefPtr) wml_obj_class_ptr->hvec[ndx].objptr; +@@ -244,7 +244,7 @@ for ( ndx=0 ; ndxcnt ; ndx++ ) + /* + * Define the sym_k_..._reason literals + */ +-fprintf (outfil, canned3); ++fprintf (outfil, "%s", canned3); + for ( ndx=0 ; ndxcnt ; ndx++ ) + { + resobj = (WmlResourceDefPtr) wml_obj_reason_ptr->hvec[ndx].objptr; +@@ -258,7 +258,7 @@ for ( ndx=0 ; ndxcnt ; ndx++ ) + /* + * Define the sym_k_..._arg literals + */ +-fprintf (outfil, canned4); ++fprintf (outfil, "%s", canned4); + for ( ndx=0 ; ndxcnt ; ndx++ ) + { + resobj = (WmlResourceDefPtr) wml_obj_arg_ptr->hvec[ndx].objptr; +@@ -272,7 +272,7 @@ for ( ndx=0 ; ndxcnt ; ndx++ ) + /* + * Define the sym_k_..._enumset structs and literals + */ +-fprintf (outfil, canned5); ++fprintf (outfil, "%s", canned5); + for ( ndx=0 ; ndxcnt ; ndx++ ) + { + enumsetobj = (WmlEnumSetDefPtr) wml_obj_enumset_ptr->hvec[ndx].objptr; +@@ -286,7 +286,7 @@ for ( ndx=0 ; ndxcnt ; ndx++ ) + /* + * Define the sym_k_..._enumval literals + */ +-fprintf (outfil, canned6); ++fprintf (outfil, "%s", canned6); + for ( ndx=0 ; ndxcnt ; ndx++ ) + { + enumvalobj = (WmlEnumValueDefPtr) wml_obj_enumval_ptr->hvec[ndx].objptr; +@@ -301,7 +301,7 @@ for ( ndx=0 ; ndxcnt ; ndx++ ) + * Define the sym_k_..._charsize literals + * Define the sym_k_..._charset literals + */ +-fprintf (outfil, canned7); ++fprintf (outfil, "%s", canned7); + for ( ndx=0 ; ndxcnt ; ndx++ ) + { + charsetobj = (WmlCharSetDefPtr) wml_obj_charset_ptr->hvec[ndx].objptr; +@@ -315,7 +315,7 @@ for ( ndx=0 ; ndxcnt ; ndx++ ) + /* + * Define the sym_k_..._child literals + */ +-fprintf (outfil, canned8); ++fprintf (outfil, "%s", canned8); + for ( ndx=0 ; ndxcnt ; 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 ; ndxcnt ; ndx++ ) + { + childobj = (WmlChildDefPtr) wml_obj_child_ptr->hvec[ndx].objptr; +@@ -392,7 +392,7 @@ for ( ndx=0 ; ndxcnt ; 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 ; ndxcnt ; ndx++ ) + { + resobj = (WmlResourceDefPtr) wml_obj_arg_ptr->hvec[ndx].objptr; +@@ -459,7 +459,7 @@ for ( ndx=0 ; ndxcnt ; 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 ; ndxcnt ; 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 ; ndxcnt ; ndx++ ) + { + clsobj = (WmlClassDefPtr) wml_obj_class_ptr->hvec[ndx].objptr; +@@ -637,7 +637,7 @@ for ( ndx=0 ; ndxcnt ; 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 ; ndxcnt ; ndx++ ) + synobj->name); + } + } +-fprintf (outfil, canned3); ++fprintf (outfil, "%s", canned3); + + /* + * Write entries for non-dialog widgets +@@ -685,7 +685,7 @@ for ( ndx=0 ; ndxcnt ; 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 ; ndxcnt ; 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 ; ndxcnt ; 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 ; ndxcnt ; 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 ; ndxcnt ; ndx++ ) + { +@@ -805,7 +805,7 @@ for ( ndx=0 ; ndxcnt ; 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 ; resndxcnt ; 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 ; resndxcnt ; 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 ; resndxcnt ; 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 ; resndxcnt ; 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 ; childndxcnt ; 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 ; childndxcnt ; 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 ; ctlndxcnt ; 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 ; ctlndxcnt ; 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 ; ndxcnt ; 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 ; ndxcnt ; ndx++ ) + { + enumsetobj = (WmlEnumSetDefPtr) wml_obj_enumset_ptr->hvec[ndx].objptr; +@@ -1637,13 +1637,13 @@ for ( ndx=0 ; ndxcnt ; 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 ; ndxcnt ; ndx++ ) + { + enumsetobj = (WmlEnumSetDefPtr) wml_obj_enumset_ptr->hvec[ndx].objptr; +@@ -1655,7 +1655,7 @@ for ( ndx=0 ; ndxcnt ; ndx++ ) + /* + * Create enumset table entries for arguments, similar to writing sym_k... + */ +-fprintf (outfil, canned4); ++fprintf (outfil, "%s", canned4); + for ( ndx=0 ; ndxcnt ; ndx++ ) + { + resobj = (WmlResourceDefPtr) wml_obj_arg_ptr->hvec[ndx].objptr; +@@ -1669,13 +1669,13 @@ for ( ndx=0 ; ndxcnt ; ndx++ ) + /* + * Create the enumval values table. + */ +-fprintf (outfil, canned5); ++fprintf (outfil, "%s", canned5); + for ( ndx=0 ; ndxcnt ; 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 ; ndxcnt ; ndx++ ) + { + csobj = (WmlCharSetDefPtr) wml_obj_charset_ptr->hvec[ndx].objptr; +@@ -1836,7 +1836,7 @@ for ( ndx=0 ; ndxcnt ; ndx++ ) + /* + * Generate the writing direction table + */ +-fprintf (outfil, canned2); ++fprintf (outfil, "%s", canned2); + for ( ndx=0 ; ndxcnt ; ndx++ ) + { + csobj = (WmlCharSetDefPtr) wml_obj_charset_ptr->hvec[ndx].objptr; +@@ -1858,7 +1858,7 @@ for ( ndx=0 ; ndxcnt ; ndx++ ) + /* + * Generate the parsing direction table + */ +-fprintf (outfil, canned3); ++fprintf (outfil, "%s", canned3); + for ( ndx=0 ; ndxcnt ; ndx++ ) + { + csobj = (WmlCharSetDefPtr) wml_obj_charset_ptr->hvec[ndx].objptr; +@@ -1880,7 +1880,7 @@ for ( ndx=0 ; ndxcnt ; ndx++ ) + /* + * Generate the character size table + */ +-fprintf (outfil, canned4); ++fprintf (outfil, "%s", canned4); + for ( ndx=0 ; ndxcnt ; ndx++ ) + { + csobj = (WmlCharSetDefPtr) wml_obj_charset_ptr->hvec[ndx].objptr; +@@ -1906,7 +1906,7 @@ for ( ndx=0 ; ndxcnt ; ndx++ ) + /* + * Generate the $LANG name recognition table + */ +-fprintf (outfil, canned5); ++fprintf (outfil, "%s", canned5); + lang_max = 0; + for ( ndx=0 ; ndxcnt ; ndx++ ) + { +@@ -1936,7 +1936,7 @@ for ( ndx=0 ; ndxcnt ; ndx++ ) + /* + * Generate the $LANG code lookup table, in upper case + */ +-fprintf (outfil, canned6); ++fprintf (outfil, "%s", canned6); + for ( ndx=0 ; ndxcnt ; 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 ( rsnndxcnt || ctlndxcnt ) + { + if ( ctlndx < mm_ctl_ptr->cnt ) +@@ -275,7 +275,7 @@ while ( rsnndxcnt || ctlndxcnt ) + ctlndx += 1; + } + else +- fprintf (outfil, "@"); ++ fprintf (outfil, "%s", "@"); + + if ( rsnndx < mm_rsn_ptr->cnt ) + { +@@ -285,9 +285,9 @@ while ( rsnndxcnt || ctlndxcnt ) + 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 ; ndxcnt ; 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 ; ndxcnt ; ndx++ ) + { + ctrlobj = (WmlClassDefPtr) wml_obj_class_ptr->hvec[ndx].objptr; +@@ -1512,10 +1512,10 @@ for ( ndx=0 ; ndxcnt ; 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 ; ndxcnt ; 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 + diff --git a/SOURCES/motif-2.3.4-bindings.patch b/SOURCES/motif-2.3.4-bindings.patch new file mode 100644 index 0000000..baaa573 --- /dev/null +++ b/SOURCES/motif-2.3.4-bindings.patch @@ -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" diff --git a/SOURCES/motif-2.3.4-motifzone_1564-88bdce1.patch b/SOURCES/motif-2.3.4-motifzone_1564-88bdce1.patch new file mode 100644 index 0000000..c2f533a --- /dev/null +++ b/SOURCES/motif-2.3.4-motifzone_1564-88bdce1.patch @@ -0,0 +1,449 @@ +commit 88bdce139baf89839b6e13d698576fc56211e845 +Author: Oleksiy Chernyavskyy +Date: Wed Mar 16 00:46:49 2016 +0200 + + Reimplemented bugfix 1565 + + Signed-off-by: Oleksiy Chernyavskyy + +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 + #include + #include ++#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 ++#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 + #endif ++#ifdef FIX_1565 ++#include ++#include ++#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 ********/ + diff --git a/SOURCES/motif-2.3.4-mwmrc_dir.patch b/SOURCES/motif-2.3.4-mwmrc_dir.patch new file mode 100644 index 0000000..e6a42dc --- /dev/null +++ b/SOURCES/motif-2.3.4-mwmrc_dir.patch @@ -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 diff --git a/SOURCES/motif-2.3.4-no_demos.patch b/SOURCES/motif-2.3.4-no_demos.patch new file mode 100644 index 0000000..bf1b926 --- /dev/null +++ b/SOURCES/motif-2.3.4-no_demos.patch @@ -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 . diff --git a/SOURCES/motif-2.3.5-motifzone_1654.patch b/SOURCES/motif-2.3.5-motifzone_1654.patch new file mode 100644 index 0000000..2d5a21e --- /dev/null +++ b/SOURCES/motif-2.3.5-motifzone_1654.patch @@ -0,0 +1,39 @@ +commit 33e0b7fd58ec8ce9fd23d3a66a91e9b4b7c2b928 +Author: Oleksiy Chernyavskyy +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 + #endif + #define FIX_1517 ++#define FIX_1654 + + #include + #include +@@ -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); diff --git a/SOURCES/motifzone_1612.patch b/SOURCES/motifzone_1612.patch new file mode 100644 index 0000000..bdea0ef --- /dev/null +++ b/SOURCES/motifzone_1612.patch @@ -0,0 +1,104 @@ +From 6aff3a819cb69235594124d7b252d1ee8c04f2b0 Mon Sep 17 00:00:00 2001 +From: Mykola Vshyvkov +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 + diff --git a/SOURCES/motifzone_1660.patch b/SOURCES/motifzone_1660.patch new file mode 100644 index 0000000..c6d9b7c --- /dev/null +++ b/SOURCES/motifzone_1660.patch @@ -0,0 +1,27 @@ +From e5c51cda449ea3544fddcdb84c6809757477035b Mon Sep 17 00:00:00 2001 +From: Oleksiy Chernyavskyy +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 + diff --git a/SOURCES/openMotif-2.2.3-uil_lib.patch b/SOURCES/openMotif-2.2.3-uil_lib.patch new file mode 100644 index 0000000..fc3a0ce --- /dev/null +++ b/SOURCES/openMotif-2.2.3-uil_lib.patch @@ -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 diff --git a/SOURCES/openMotif-2.3.0-no_X11R6.patch b/SOURCES/openMotif-2.3.0-no_X11R6.patch new file mode 100644 index 0000000..24d1c56 --- /dev/null +++ b/SOURCES/openMotif-2.3.0-no_X11R6.patch @@ -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 diff --git a/SOURCES/openMotif-2.3.0-rgbtxt.patch b/SOURCES/openMotif-2.3.0-rgbtxt.patch new file mode 100644 index 0000000..6c5ff15 --- /dev/null +++ b/SOURCES/openMotif-2.3.0-rgbtxt.patch @@ -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 diff --git a/SOURCES/openmotif-2.3.1-rhbz_997241.patch b/SOURCES/openmotif-2.3.1-rhbz_997241.patch new file mode 100644 index 0000000..6a2183f --- /dev/null +++ b/SOURCES/openmotif-2.3.1-rhbz_997241.patch @@ -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); + } diff --git a/SOURCES/revert-of-motifzone_1565.patch b/SOURCES/revert-of-motifzone_1565.patch new file mode 100644 index 0000000..1e6cc29 --- /dev/null +++ b/SOURCES/revert-of-motifzone_1565.patch @@ -0,0 +1,427 @@ +From 18de86345d5e455b815fe0395d2992b9a2f1195f Mon Sep 17 00:00:00 2001 +From: Oleksiy Chernyavskyy +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 +-#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 + #endif +-#ifdef FIX_1565 +-#include +-#include +-#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 + diff --git a/SOURCES/xmbind b/SOURCES/xmbind new file mode 100644 index 0000000..832ce12 --- /dev/null +++ b/SOURCES/xmbind @@ -0,0 +1,6 @@ +#! /bin/sh + +if [ -x /usr/bin/xmbind ] ; then + /usr/bin/xmbind +fi + diff --git a/SPECS/motif.spec b/SPECS/motif.spec new file mode 100644 index 0000000..be53d86 --- /dev/null +++ b/SPECS/motif.spec @@ -0,0 +1,540 @@ +Summary: Run-time libraries and programs +Name: motif +Version: 2.3.4 +Release: 17%{?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 + +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 + + +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 + +%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 +* Fri Apr 08 2022 Mika Penttila - 2.3.4-17 +- Added forgotten patches and corrected release number + +* Tue Sep 11 2018 Carlos Soriano - 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 - 2.3.4-15 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 2.3.4-14 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Thu Jun 08 2017 Petr Šabata - 2.3.4-13 +- Fix issues with -Werror=format-security (#1448819) + +* Fri Feb 10 2017 Fedora Release Engineering - 2.3.4-12 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Thu Feb 04 2016 Fedora Release Engineering - 2.3.4-11 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Wed Jun 17 2015 Fedora Release Engineering - 2.3.4-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Sun Aug 17 2014 Fedora Release Engineering - 2.3.4-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Sat Jun 07 2014 Fedora Release Engineering - 2.3.4-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Sat Aug 03 2013 Fedora Release Engineering - 2.3.4-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Tue May 28 2013 Michael Schwendt - 2.3.4-6 +- fix missing BuildRequires flex-static (RHBZ#889175) + +* Thu Feb 14 2013 Fedora Release Engineering - 2.3.4-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Mon Jan 21 2013 Adam Tkac - 2.3.4-4 +- rebuild due to "jpeg8-ABI" feature drop + +* Fri Oct 26 2012 Thomas Woerner 2.3.4-3 +- do not use _isa for build requires + +* Fri Oct 26 2012 Thomas Woerner 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 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 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 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 2.3.3-3 +- fixed regression introduced with upstream FIX #1521 (rhbz#729346) + +* Mon Aug 1 2011 Thomas Woerner 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 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 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 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 - 2.3.1-3.1 +- Rebuilt for RHEL 6 + +* Wed Sep 23 2009 Dennis Gregorovic - 2.3.1-3 +- update the bindings patch + +* Wed Nov 12 2008 Thomas Woerner 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 2.3.1-1 +- using final 2.3.1 dist archive + +* Wed Sep 17 2008 Thomas Woerner 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 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 2.3.0-0.4 +- fixed title bar problem using XmNdialogTitle (MotifZone bug fix #1380) + Resolves: rhbz#353251 + +* Fri Dec 1 2006 Thomas Woerner 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 - 2.3.0-0.2.1 +- rebuild + +* Tue Jun 6 2006 Thomas Woerner 2.3.0-0.2 +- new CVS version 2006-06-06 +- new buildprereq for pkgconfig + +* Fri Feb 10 2006 Jesse Keating - 2.3.0-0.1.9.2 +- bump again for double-long bug on ppc(64) + +* Tue Feb 07 2006 Jesse Keating - 2.3.0-0.1.9.1 +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Thu Feb 2 2006 Thomas Woerner 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 2.3.0-0.1.2 +- Rebuilt on new gcc + +* Fri Dec 9 2005 Thomas Woerner 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 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 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 2.2.3-15 +- moved man pages to /usr/share/man (#173604) + +* Wed Nov 16 2005 Jeremy Katz - 2.2.3-14 +- X11R6 stuff is gone + +* Wed Nov 16 2005 Jeremy Katz - 2.2.3-13 +- also buildrequire xbitmaps + +* Wed Nov 16 2005 Thomas Woerner 2.2.3-12 +- rebuild for modular X + +* Fri Sep 2 2005 Thomas Woerner 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 2.2.3-10 +- fixed possible libXpm overflows (#151642) + +* Mon Feb 28 2005 Thomas Woerner 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 2.2.3-8.1 +- allow to write XPM files with absolute path names again (#140815) + +* Wed Nov 24 2004 Miloslav Trmac 2.2.3-8 +- Convert man pages to UTF-8 + +* Mon Nov 22 2004 Thomas Woerner 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 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 2.2.3-5.2 +- replaced libtoolize and autofoo* calls with a patch (autofoo) + +* Wed Sep 29 2004 Thomas Woerner 2.2.3-5.1 +- use new autofoo + +* Wed Sep 1 2004 Thomas Woerner 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 2.2.3-4.3 +- devel package: added requires for XFree86-devel (#131202) + +* Thu Jun 17 2004 Thomas Woerner 2.2.3-4.2 +- rebuilt for fc3 + +* Wed Jun 16 2004 Thomas Woerner 2.2.3-4.1 +- renamed xmbind script to xmbind.sh (#126116) + +* Tue Jun 15 2004 Elliot Lee +- rebuilt + +* Tue Jun 8 2004 Thomas Woerner 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 2.2.3-2 +- 2.2.3 final version + +* Tue Mar 23 2004 Thomas Woerner 2.2.3-1.9.2 +- final CVS version + +* Wed Mar 17 2004 Thomas Woerner 2.2.3-1.9.1 +- new openmotif 2.2.3 beta version + +* Mon Mar 8 2004 Thomas Woerner 2.2.2-17 +- fixed popdown problem in ToolTip (#75730) + +* Tue Mar 02 2004 Elliot Lee +- rebuilt + +* Thu Feb 19 2004 Thomas Woerner 2.2.2-16.3 +- rebuilt + +* Thu Dec 18 2003 Thomas Woerner +- added missing BuildRequires for XFree86-devel + +* Thu Nov 27 2003 Thomas Woerner 2.2.2-16.2 +- removed rpath + +* Mon Aug 27 2003 Thomas Woerner 2.2.2-16 +- fixed ToggleBG (#101159) + +* Thu Jul 31 2003 2.2.2-15.2 +- rebuild for RHEL + +* Wed Jul 30 2003 Thomas Woerner 2.2.2-15 +- fixed ToggleB (#101159) + +* Wed Jan 22 2003 Tim Powers +- rebuilt + +* Tue Jan 21 2003 Thomas Woerner 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 2.2.2-12.2 +- add buildprereq byacc and flex (bug #77860) + +* Fri Nov 8 2002 Than Ngo 2.2.2-12.1 +- fix some build problem + +* Mon Aug 27 2002 Than Ngo 2.2.2-12 +- Fixed a segmentation fault in mkcatdefs (bug #71955) + +* Wed Jul 24 2002 Than Ngo 2.2.2-11 +- Added missing symlinks (bug #69117) + +* Tue Jul 23 2002 Tim Powers 2.2.2-10 +- build using gcc-3.2-0.1 + +* Tue Jun 25 2002 Than Ngo 2.2.2-9 +- fix to build openmotif (bug #64176) + +* Thu Jun 13 2002 Than Ngo 2.2.2-8 +- rebuild in new enviroment + +* Sun May 26 2002 Tim Powers +- automated rebuild + +* Thu May 23 2002 Harald Hoyer 2.2.2-6 +- patched ltmain.sh to link properly + +* Wed May 22 2002 Harald Hoyer 2.2.2-6 +- specified libraries by full name in files section + (libMrm was missing on alpha) + +* Tue Mar 26 2002 Than Ngo 2.2.2-5 +- update new 2.2.2 from ICS + +* Sun Mar 24 2002 Than Ngo 2.2.2-4 +- add missing uil + +* Fri Mar 22 2002 Tim Powers +- rebuilt to try and shake some broken deps in the devel package + +* Thu Mar 21 2002 Than Ngo 2.2.2-2 +- rebuild + +* Thu Mar 21 2002 Than Ngo 2.2.2-1 +- update to 2.2.2 release + +* Mon Feb 22 2002 Than Ngo 2.2.1-3 +- conflict with older lesstif + +* Mon Feb 22 2002 Than Ngo 2.2.1-2 +- fix bug #60816 + +* Fri Feb 22 2002 Than Ngo 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 +- rebuilt in new environment + +* Fri Jan 25 2002 Tim Powers +- don't obsolete lesstif anymore, play nicely together +- rebuild against new toolchain + +* Wed Jan 21 2002 Than Ngo 2.1.30-11 +- add some patches from Darrell Commander (supporting largefile) +- fix to build on s390 + +* Thu Jan 17 2002 Than Ngo 2.1.30-10 +- rebuild in 8.0 + +* Wed Sep 6 2001 Than Ngo +- rebuild for ExtraBinge 7.2 + +* Thu May 03 2001 Than Ngo +- 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 +- don't build static debug libraries + +* Mon Dec 18 2000 Than Ngo +- bzip2 source + +* Mon Jul 24 2000 Than Ngo +- rebuilt against gcc-2.96-44 + +* Wed Jul 12 2000 Than Ngo +- rebuilt + +* Sun Jun 11 2000 Than Ngo +- 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 +- Update to patchlevel 2 +- remove bindings patch, it's included in pl2 + +* Tue May 16 2000 Matt Wilson +- use -fPIC on sparc +- fixed Ngo's "fixes" + +* Mon May 15 2000 Ngo Than +- added description. +- fixed spec, added uil stuff. + +* Mon May 15 2000 Matt Wilson +- initialization of spec file.