From 06c32a523eab2c932cc87e18d64c039919f233fd Mon Sep 17 00:00:00 2001 From: Robert Soliday Date: Mon, 26 Jun 2017 15:52:28 -0500 Subject: [PATCH] Fixed a deiconization problem on macOS. Also implemented patches from Shuei Yamada (KEK) to fix two buffer overflows. --- medm/medm.c | 37 +++++++++++++++++++++++++++++++++++-- medm/medmRelatedDisplay.c | 2 +- medm/medmVersion.h | 6 +++--- medm/resourcePalette.c | 2 +- 4 files changed, 40 insertions(+), 7 deletions(-) diff --git a/medm/medm.c b/medm/medm.c index 878d3ed..d4c6a68 100644 --- a/medm/medm.c +++ b/medm/medm.c @@ -765,6 +765,32 @@ void requestDestroy(request_t *request) { #endif #endif + +void IconifyMe (dpy, win) + Display *dpy; + Window win; /* toplevel window to iconify */ +{ + Atom xa_WM_CHANGE_STATE; + XClientMessageEvent ev; + + xa_WM_CHANGE_STATE = XInternAtom (dpy, + "WM_CHANGE_STATE", False); + + ev.type = ClientMessage; + ev.display = dpy; + ev.message_type = xa_WM_CHANGE_STATE; + ev.format = 32; + ev.data.l[0] = IconicState; + ev.window = win; + + XSendEvent (dpy, + RootWindow (dpy, DefaultScreen(dpy)), + True, + (SubstructureRedirectMask | SubstructureNotifyMask), + &ev); + XFlush (dpy); +} + request_t * parseCommandLine(int argc, char *argv[]) { int i; int argsUsed = 0; @@ -3025,7 +3051,7 @@ DisplayInfo* parseDisplayFile(char *filename) { /**************************************************************************/ int main(int argc, char *argv[]) { - int i = 0, n = 0, index = 0; + int i = 0, n = 0, index = 0, iconify=0; Arg args[5]; FILE *filePtr; XColor color; @@ -3514,7 +3540,8 @@ int main(int argc, char *argv[]) } else if(request->opMode == EXECUTE) { globalDisplayListTraversalMode = DL_EXECUTE; if(request->fileCnt > 0) { /* assume .adl file names follow */ - XtVaSetValues(mainShell, XmNinitialState, IconicState, NULL); + //XtVaSetValues(mainShell, XmNinitialState, IconicState, NULL); + iconify=1; } /* Start the scheduler */ startMedmScheduler(); @@ -3747,6 +3774,12 @@ int main(int argc, char *argv[]) /* Get CDE workspace list */ GetWorkSpaceList(mainMW); #endif + if (iconify) { + //IconifyMe(display, XtWindow(mainShell)); + XIconifyWindow(display, XtWindow(mainShell), screenNum); + + } + /* Go into event loop * Normally just XtAppMainLoop(appContext) diff --git a/medm/medmRelatedDisplay.c b/medm/medmRelatedDisplay.c index 971ddcc..5b98601 100644 --- a/medm/medmRelatedDisplay.c +++ b/medm/medmRelatedDisplay.c @@ -468,7 +468,7 @@ void executeDlRelatedDisplay(DisplayInfo *displayInfo, DlElement *dlElement) dlRelatedDisplay->visual == RD_COL_OF_BTN) { /* Case 3 of 4 */ /* Rows or columns of buttons */ - Arg wargs[20]; + Arg wargs[MAX_RELATED_DISPLAYS+16]; int i = 0, maxChars = 0, usedWidth = 0, usedHeight = 0; XmFontList fontList; Pixel fg, bg; diff --git a/medm/medmVersion.h b/medm/medmVersion.h index 7100ed0..f6e140e 100644 --- a/medm/medmVersion.h +++ b/medm/medmVersion.h @@ -67,7 +67,7 @@ */ #define MEDM_VERSION 3 #define MEDM_REVISION 1 -#define MEDM_MODIFICATION 13 +#define MEDM_MODIFICATION 14 #define MEDM_PATCH_LEVEL 0 -#define MEDM_VERSION_STRING "MEDM Version 3.1.13" -#define MEDM_VERSION_DIGITS "MEDM030113" +#define MEDM_VERSION_STRING "MEDM Version 3.1.14" +#define MEDM_VERSION_DIGITS "MEDM030114" diff --git a/medm/resourcePalette.c b/medm/resourcePalette.c index a92fb1d..fab7e46 100644 --- a/medm/resourcePalette.c +++ b/medm/resourcePalette.c @@ -189,7 +189,7 @@ static void optionMenuSimpleCallback(Widget w, XtPointer cd, XtPointer cbs) { DisplayInfo *cdi = currentDisplayInfo; int buttonId = (intptr_t)cd; - int rcType; + long rcType; DlElement *elementPtr; UNREFERENCED(cbs);