2 * CDE - Common Desktop Environment
4 * Copyright (c) 1993-2012, The Open Group. All rights reserved.
6 * These libraries and programs are free software; you can
7 * redistribute them and/or modify them under the terms of the GNU
8 * Lesser General Public License as published by the Free Software
9 * Foundation; either version 2 of the License, or (at your option)
12 * These libraries and programs are distributed in the hope that
13 * they will be useful, but WITHOUT ANY WARRANTY; without even the
14 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU Lesser General Public License for more
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with these librararies and programs; if not, write
20 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21 * Floor, Boston, MA 02110-1301 USA
23 /* $XConsortium: PrefsP.c /main/4 1995/11/02 14:43:38 rswiston $ */
24 /************************************<+>*************************************
25 ****************************************************************************
29 * COMPONENT_NAME: Desktop File Manager (dtfile)
31 * Description: Processing functions for the preferences dialog.
33 * FUNCTIONS: PreferencesChange
35 * ShowPreferencesDialog
37 * (c) Copyright 1993, 1994, 1995 Hewlett-Packard Company
38 * (c) Copyright 1993, 1994, 1995 International Business Machines Corp.
39 * (c) Copyright 1993, 1994, 1995 Sun Microsystems, Inc.
40 * (c) Copyright 1993, 1994, 1995 Novell, Inc.
42 ****************************************************************************
43 ************************************<+>*************************************/
46 #include <Xm/RowColumn.h>
50 #include "SharedProcs.h"
58 /******** Static Function Declarations ********/
60 static void PreferencesChange(
61 XtPointer client_data,
62 DialogData *old_dialog_data,
63 DialogData *new_dialog_data,
64 XtPointer call_data) ;
65 static void PreferencesClose(
66 XtPointer client_data,
67 DialogData *old_dialog_data,
68 DialogData *new_dialog_data) ;
70 /******** End Static Function Declarations ********/
73 /************************************************************************
75 * ShowPreferencesDialog
76 * Callback functions invoked from the Change Directory... menu
77 * item. This function displays the change directory dialog.
79 ************************************************************************/
82 ShowPreferencesDialog(
84 XtPointer client_data,
87 FileMgrRec * file_mgr_rec;
88 DialogData * dialog_data;
89 FileMgrData * file_mgr_data;
90 PreferencesRec *preferences_rec;
93 char *tmpStr, *tempStr;
97 /* Set the menu item to insensitive to prevent multiple */
98 /* dialogs from being posted and get the area under the */
99 /* menu pane redrawn. */
103 mbar = XmGetPostedFromWidget(XtParent(w));
105 XtSetArg(args[0], XmNuserData, &file_mgr_rec);
106 XtGetValues(mbar, args, 1);
108 /* Ignore accelerators when we're insensitive */
109 if ((file_mgr_rec->menuStates & PREFERENCES) == 0)
111 XSetInputFocus(XtDisplay(w),
112 XtWindow(file_mgr_rec->preferencesBtn_child),
113 RevertToParent, CurrentTime);
119 /* Done only during a restore session */
120 file_mgr_rec = (FileMgrRec *)client_data;
124 /* Ignore accelerators received after we're unposted */
125 if ((dialog_data = _DtGetInstanceData ((XtPointer)file_mgr_rec)) == NULL)
127 file_mgr_data = (FileMgrData *) dialog_data->data;
129 file_mgr_rec->menuStates &= ~ PREFERENCES;
131 _DtShowDialog (file_mgr_rec->shell, NULL, (XtPointer)file_mgr_rec,
132 file_mgr_data->preferences, PreferencesChange,
133 (XtPointer)file_mgr_rec, PreferencesClose,
134 (XtPointer)file_mgr_rec, NULL, False, False, NULL, NULL);
137 preferences_rec = (PreferencesRec *)_DtGetDialogInstance(
138 file_mgr_data->preferences);
140 if(file_mgr_data->title != NULL &&
141 (strcmp(file_mgr_data->helpVol, DTFILE_HELP_NAME) != 0 ||
142 strcmp(file_mgr_data->title, "Trash Can") == 0))
144 tmpStr = GETMESSAGE(23, 1, "Set View Options");
145 tempStr = (char *)XtMalloc(strlen(tmpStr) +
146 strlen(file_mgr_data->title) + 5);
147 sprintf(tempStr, "%s - %s", file_mgr_data->title, tmpStr);
151 tmpStr = (GETMESSAGE(23,22, "File Manager - Set View Options"));
152 tempStr = XtNewString(tmpStr);
154 XtSetArg (args[0], XmNtitle, tempStr);
155 XtSetValues (preferences_rec->shell, args, 1);
157 file_mgr_rec->preferencesBtn_child=preferences_rec->shell;
163 /************************************************************************
166 * Callback functions invoked from the current directory dialog's
167 * apply button being pressed. This function updates and redisplays
168 * the current directory information.
170 ************************************************************************/
174 XtPointer client_data,
175 DialogData *old_dialog_data,
176 DialogData *new_dialog_data,
177 XtPointer call_data )
179 FileMgrRec * file_mgr_rec = (FileMgrRec *) client_data;
180 DialogData * dialog_data;
181 FileMgrData * file_mgr_data;
183 PreferencesData * preferences_data;
184 unsigned char *viewP;
185 FileViewData *branch;
188 dialog_data = _DtGetInstanceData ((XtPointer)file_mgr_rec);
189 file_mgr_data = (FileMgrData *) dialog_data->data;
191 save_data = file_mgr_data->preferences->data;
192 file_mgr_data->preferences->data = new_dialog_data->data;
193 new_dialog_data->data = save_data;
194 _DtFreeDialogData (new_dialog_data);
197 preferences_data = (PreferencesData *) (file_mgr_data->preferences->data);
199 if (file_mgr_data->show_type != preferences_data->show_type ||
200 file_mgr_data->tree_files != preferences_data->tree_files ||
201 file_mgr_data->view_single != preferences_data->view_single ||
202 file_mgr_data->view_tree != preferences_data->view_tree ||
203 file_mgr_data->order != preferences_data->order ||
204 file_mgr_data->direction != preferences_data->direction ||
205 file_mgr_data->positionEnabled != preferences_data->positionEnabled ||
206 file_mgr_data->show_iconic_path != preferences_data->show_iconic_path ||
207 file_mgr_data->show_current_dir != preferences_data->show_current_dir ||
208 file_mgr_data->show_status_line != preferences_data->show_status_line)
211 * Depending upon which of the preferences values changed, positioning
212 * may need to be disabled, and the preferences dialog updated.
214 if (((file_mgr_data->order != preferences_data->order) ||
215 (file_mgr_data->direction != preferences_data->direction)) &&
216 (file_mgr_data->positionEnabled == RANDOM_ON))
218 /* Discard positioning info */
219 file_mgr_data->grid_height = 0;
220 file_mgr_data->grid_width = 0;
221 if(file_mgr_data->object_positions)
222 FreePositionInfo(file_mgr_data);
226 * In tree mode, if we switch from showing files "always" to "choose",
227 * change all branches from tsAll back to tsDirs.
229 if (file_mgr_data->tree_files == TREE_FILES_ALWAYS &&
230 preferences_data->tree_files == TREE_FILES_CHOOSE)
232 for (i = 0; i < file_mgr_data->directory_count; i++)
234 branch = file_mgr_data->directory_set[i]->sub_root;
235 if (branch->ts == tsAll)
238 UpdateBranchList(file_mgr_data, file_mgr_data->directory_set[i]);
243 if (preferences_data->show_type == MULTIPLE_DIRECTORY)
244 viewP = &preferences_data->view_tree;
246 viewP = &preferences_data->view_single;
247 if (file_mgr_data->view != *viewP)
249 file_mgr_data->newSize = True;
253 if (file_mgr_data->show_type != preferences_data->show_type)
254 file_mgr_data->newSize = True;
256 file_mgr_data->newSize = False;
258 file_mgr_data->show_type = preferences_data->show_type;
259 file_mgr_data->tree_files = preferences_data->tree_files;
260 file_mgr_data->view = *viewP;
261 file_mgr_data->view_single = preferences_data->view_single;
262 file_mgr_data->view_tree = preferences_data->view_tree;
263 file_mgr_data->order = preferences_data->order;
264 file_mgr_data->direction = preferences_data->direction;
265 file_mgr_data->show_iconic_path = preferences_data->show_iconic_path;
266 file_mgr_data->show_current_dir = preferences_data->show_current_dir;
267 file_mgr_data->show_status_line = preferences_data->show_status_line;
268 if (file_mgr_data->positionEnabled == preferences_data->positionEnabled)
269 FileMgrRedisplayFiles (file_mgr_rec, file_mgr_data, False);
272 file_mgr_data->positionEnabled = preferences_data->positionEnabled;
273 FileMgrRedisplayFiles (file_mgr_rec, file_mgr_data, True);
276 if(openDirType == NEW)
277 ForceMyIconOpen(file_mgr_data->host, NULL);
284 /************************************************************************
287 * Callback function invoked from the preferences dialog's close
288 * button. This function resensitizes the menu item.
290 ************************************************************************/
294 XtPointer client_data,
295 DialogData *old_dialog_data,
296 DialogData *new_dialog_data )
298 FileMgrRec * file_mgr_rec = (FileMgrRec *) client_data;
300 _DtFreeDialogData (new_dialog_data);
302 /* Resensitize the associated menu button */
303 file_mgr_rec->menuStates |= PREFERENCES;