From fbc94880372140d376b0924092faffef1ee9984d Mon Sep 17 00:00:00 2001 From: hyousatsu Date: Mon, 9 Sep 2024 02:07:37 +0000 Subject: [PATCH] dtcreate: make pop-ups work properly. --- cde/programs/dtcreate/ErrorDialog.c | 3 +- cde/programs/dtcreate/cmncbs.c | 2 - cde/programs/dtcreate/icon_selection_dialog.c | 146 +++++++++++------- 3 files changed, 92 insertions(+), 59 deletions(-) diff --git a/cde/programs/dtcreate/ErrorDialog.c b/cde/programs/dtcreate/ErrorDialog.c index 677ee6003..fc20062b1 100644 --- a/cde/programs/dtcreate/ErrorDialog.c +++ b/cde/programs/dtcreate/ErrorDialog.c @@ -47,6 +47,7 @@ void activateCB_ErrorDialog_OkButton( Widget UxWidget, { XtDestroyWidget(XtParent(UxWidget)); + *(Widget **)UxClientData = NULL; } /******************************************************************************/ @@ -63,7 +64,7 @@ void display_error_message (Widget parent, char *message) XtAddCallback( ErrorDialog, XmNokCallback, (XtCallbackProc) activateCB_ErrorDialog_OkButton, - (XtPointer) NULL ); + (XtPointer) &ErrorDialog ); XtVaSetValues (ErrorDialog, RES_CONVERT(XmNdialogTitle, GETMESSAGE(6, 31, "Create Action - Error")), diff --git a/cde/programs/dtcreate/cmncbs.c b/cde/programs/dtcreate/cmncbs.c index b9fd1fb2d..90e32a57b 100644 --- a/cde/programs/dtcreate/cmncbs.c +++ b/cde/programs/dtcreate/cmncbs.c @@ -158,10 +158,8 @@ void activateCB_open_FindSet (Widget find_set_button, XtPointer cdata, XtFree(container_title); XtFree(directory_title); XtFree(dialog_title); - FreeIconSearchPathList(directories_list); XtVaSetValues (IconSelector, XmNuserData, cdata, NULL); UxPopupInterface (IconSelector, no_grab); - XmProcessTraversal(ISD_SelectedIconTextField, XmTRAVERSE_CURRENT); return; } diff --git a/cde/programs/dtcreate/icon_selection_dialog.c b/cde/programs/dtcreate/icon_selection_dialog.c index d60105025..f27862c7f 100644 --- a/cde/programs/dtcreate/icon_selection_dialog.c +++ b/cde/programs/dtcreate/icon_selection_dialog.c @@ -50,6 +50,7 @@ #include #include
+#include
#include "dtcreate.h" #include "UxXt.h" @@ -144,7 +145,7 @@ int myscandir(char *pszDirName, struct dirent ***NameList, int Select(), int Com errPtr = XtMalloc((strlen(msgPtr) + strlen(fmtPtr) + strlen(pszDirName) + 1) * sizeof(char)); sprintf(errPtr, fmtPtr, msgPtr, pszDirName); - display_error_message(CreateActionAppShell, errPtr); + display_error_message(IconSelector, errPtr); XtFree(errPtr); return(0); } @@ -245,7 +246,7 @@ struct dirent **build_dirent_list (char *filter, int *filecount) errPtr = XtMalloc((strlen(msgPtr) + strlen(fmtPtr) + strlen(dirname) + 1) * sizeof(char)); sprintf(errPtr, fmtPtr, msgPtr, dirname); - display_error_message(CreateActionAppShell, errPtr); + display_error_message(IconSelector, errPtr); XtFree(errPtr); namelist = NULL; } @@ -1327,13 +1328,94 @@ void resizeCB_clipWindow( Widget UxWidget, printf("icon_count = %d\n", icon_count); #endif - increment = (int)height / icon_count; + increment = icon_count > 0 ? (int)height / icon_count : height; XtVaSetValues(widvScrollbar, XmNincrement, increment, NULL); return; } +static void mapCB_icon_selection_dialog(Widget UxWidget, + XtPointer UxClientData, + XtPointer UxCallbackArg) +{ + DtWsmRemoveWorkspaceFunctions(UxDisplay, XtWindow(XtParent(UxWidget))); +} + +static void focusCB_icon_selection_dialog(Widget UxWidget, + XtPointer UxClientData, + XtPointer UxCallbackArg) +{ + char *initial_filter; + Widget descendant; + + XtRemoveCallback(UxWidget, XmNfocusCallback, focusCB_icon_selection_dialog, + NULL); + + TurnOnHourGlassAllWindows(); + + XmProcessTraversal(ISD_SelectedIconTextField, XmTRAVERSE_CURRENT); + + /******************************************************************/ + /* save file_filter */ + /******************************************************************/ + file_filter_global = (char *)calloc(strlen((char *)file_filter)+1, + sizeof(char)); + +#ifdef DEBUG + if (!file_filter_global) + printf("Calloc error for file_filter_global, in mapCB_icon_selection_dialog.\n"); +#endif + + if (file_filter[0] == '*') + file_filter_global = strcpy(file_filter_global, (char *)&file_filter[1]); + else + file_filter_global = strcpy(file_filter_global, (char *)file_filter); + + load_directories_list((char **)directories_list); + initial_filter = initialize_filter((char *)file_filter); + FreeIconSearchPathList((char **)directories_list); + + /******************************************************************/ + /* save main_filter */ + /******************************************************************/ + main_filter = (char *)calloc(strlen(initial_filter)+1, sizeof(char)); + +#ifdef DEBUG + if (!main_filter) + printf("Calloc error for main_filter, in mapCB_icon_selection_dialog.\n"); +#endif + + main_filter = strcpy(main_filter, initial_filter); + + icons_in_container = NULL; + icon_count = 0; + + update_container_contents (initial_filter); + + /******************************************************************/ + /* set selected_icon_name to first name in list */ + /******************************************************************/ +#if 0 + if (icons_in_container) { + XtVaGetValues (icons_in_container[0], XmNimageName, &icon_file_name, NULL); + XmTextFieldSetString (icon_name_text_field, icon_file_name); + selected_icon_name = XtMalloc(strlen(icon_file_name) + 1); + if (selected_icon_name) + selected_icon_name = strcpy(selected_icon_name, icon_file_name); + } +#endif + + load_filter_text_field(initial_filter); + + if (ErrorDialog && XtParent(ErrorDialog) == UxWidget) { + descendant = XtNameToWidget(ErrorDialog, "OK"); + XtSetKeyboardFocus(ErrorDialog, descendant ? descendant : ErrorDialog); + } + + TurnOffHourGlassAllWindows(); +} + /***************************************************************************/ /* */ /* _Uxbuild_icon_selection_dialog */ @@ -1391,6 +1473,11 @@ static Widget _Uxbuild_icon_selection_dialog(void) (XtCallbackProc) helpCB_general, (XtPointer) HELP_ICONSELECTOR ); + XtAddCallback(icon_selection_dialog, XmNmapCallback, + mapCB_icon_selection_dialog, NULL); + + XtAddCallback(icon_selection_dialog, XmNfocusCallback, + focusCB_icon_selection_dialog, NULL); /* Creation of bottom_button_form */ bottom_button_form = XtVaCreateManagedWidget( "bottom_button_form", @@ -1857,7 +1944,6 @@ Widget create_icon_selection_dialog(swidget _UxUxParent, { - char *initial_filter; char *icon_file_name; Widget rtrn; int lcv; @@ -1914,57 +2000,5 @@ Widget create_icon_selection_dialog(swidget _UxUxParent, XtUnmanageChild (icon_name_text_field); } - TurnOnHourGlassAllWindows(); - - /******************************************************************/ - /* save file_filter */ - /******************************************************************/ - file_filter_global = (char *)calloc(strlen((char *)file_filter)+1, sizeof(char)); - -#ifdef DEBUG - if (!file_filter_global) printf("Calloc error for file_filter_global, in create_icon_selection_dialog.\n"); -#endif - - if (file_filter[0] == '*') - file_filter_global = strcpy(file_filter_global, (char *)&file_filter[1]); - else - file_filter_global = strcpy(file_filter_global, (char *)file_filter); - - load_directories_list ((char **)directories_list); - initial_filter = initialize_filter ((char *)file_filter); - - /******************************************************************/ - /* save main_filter */ - /******************************************************************/ - main_filter = (char *)calloc(strlen(initial_filter)+1, sizeof(char)); - -#ifdef DEBUG - if (!main_filter) printf("Calloc error for main_filter, in create_icon_selection_dialog.\n"); -#endif - - main_filter = strcpy(main_filter, initial_filter);; - - icons_in_container = NULL; - icon_count = 0; - - update_container_contents (initial_filter); - - /******************************************************************/ - /* set selected_icon_name to first name in list */ - /******************************************************************/ -#if 0 - if (icons_in_container) { - XtVaGetValues (icons_in_container[0], XmNimageName, &icon_file_name, NULL); - XmTextFieldSetString (icon_name_text_field, icon_file_name); - selected_icon_name = XtMalloc(strlen(icon_file_name) + 1); - if (selected_icon_name) - selected_icon_name = strcpy(selected_icon_name, icon_file_name); - } -#endif - - load_filter_text_field (initial_filter); - - TurnOffHourGlassAllWindows(); - return(rtrn); }