1 /* $XConsortium: Menu.c /main/4 1995/11/02 14:41:53 rswiston $ */
2 /************************************<+>*************************************
3 ****************************************************************************
7 * COMPONENT_NAME: Desktop File Manager (dtfile)
9 * Description: Contains the menu creation code for the file manager
10 * main window, and the simpler callback functions.
12 * FUNCTIONS: ActivateMultipleSelect
14 * ActivateSingleSelect
22 * RestoreMenuSensitivity
28 * UnmanageAllActionItems
31 * (c) Copyright 1993, 1994, 1995 Hewlett-Packard Company
32 * (c) Copyright 1993, 1994, 1995 International Business Machines Corp.
33 * (c) Copyright 1993, 1994, 1995 Sun Microsystems, Inc.
34 * (c) Copyright 1993, 1994, 1995 Novell, Inc.
36 ****************************************************************************
37 ************************************<+>*************************************/
45 #include <Xm/CascadeBG.h>
46 #include <Xm/PushBG.h>
47 #include <Xm/RowColumn.h>
48 #include <Xm/SeparatoG.h>
49 #include <Xm/ToggleBG.h>
50 #include <Xm/MessageB.h>
51 #include <Xm/MenuShellP.h>
53 #include <X11/ShellP.h>
56 #include <Dt/DtNlUtils.h>
57 #include <Dt/Action.h>
58 #include <Dt/ActionP.h>
59 #include <Dt/Connect.h>
60 #include <Dt/Indicator.h>
64 #include "SharedProcs.h"
65 #include "MultiView.h"
71 #include "SharedMsgs.h"
74 #define INDICATOR_TIME 12
76 #if defined(ADD_SHOW_TRASH)
77 static int menuItemCount = 52;
79 static int menuItemCount = 51;
81 static MenuDesc * mainMenu = NULL;
82 static Widget * actionsPaneId = NULL;
83 static char * homeDir = NULL;
85 /******** Static Function Declarations ********/
86 static void GetMainMenuData (
88 XtPointer * mainRecordPtr,
89 MenuDesc ** menuDescPtr,
90 int * menuItemCountPtr,
91 unsigned int ** globalMenuStatesPtr,
92 unsigned int ** viewMenuStatesPtr) ;
93 static void RereadDirectoryMenu(
95 XtPointer client_data,
96 XtPointer call_data) ;
97 static void ShowTrash(
99 XtPointer client_data,
100 XtPointer call_data) ;
103 XtPointer client_data,
104 XtPointer call_data) ;
105 static void SetMenuSensitivity(
107 XtPointer client_data,
108 XtPointer call_data) ;
109 static void RestoreMenuSensitivity(
111 XtPointer client_data,
112 XtPointer call_data) ;
113 static void TerminalCWD (
115 XtPointer client_data,
116 XtPointer call_data) ;
118 /******** End Static Function Declarations ********/
121 /************************************************************************
124 * Create the pull down menuing system for the program.
126 ************************************************************************/
131 FileMgrRec *file_mgr_rec )
133 static Boolean createSharedComponents = True;
134 static Widget * actionsId;
135 static Widget * directoryBarBtn;
140 if (createSharedComponents)
142 mainMenu = (MenuDesc *)XtCalloc(sizeof(MenuDesc) * menuItemCount, 1);
145 for (i = 0; i < menuItemCount; i++)
147 mainMenu[i].helpCallback = HelpRequestCB;
148 mainMenu[i].helpData = NULL;
149 mainMenu[i].activateCallback = NULL;
150 mainMenu[i].activateData = NULL;
151 mainMenu[i].maskBit = NULL;
152 mainMenu[i].isHelpBtn = False;
153 mainMenu[i].label = NULL;
154 mainMenu[i].mnemonic = NULL;
158 /*************************************/
159 /* Create the 'File' menu components */
160 /*************************************/
162 mainMenu[j].type = MENU_PULLDOWN_BUTTON;
163 mainMenu[j].label = GETMESSAGE(20, 1, "File");
164 mainMenu[j].label = XtNewString(mainMenu[j].label);
165 mainMenu[j].mnemonic = GETMESSAGE(20, 2, "F");
166 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
167 mainMenu[j].name = "file";
168 mainMenu[j++].helpData = HELP_FILE_MENU_STR;
170 mainMenu[j].type = SHARED_MENU_PANE;
171 mainMenu[j].name = "fileMenu";
172 mainMenu[j++].helpData = HELP_FILE_MENU_STR;
174 create_directoryBtn = &(mainMenu[j].widget);
175 mainMenu[j].type = MENU_BUTTON;
176 mainMenu[j].maskBit = CREATE_DIR;
177 mainMenu[j].label = GETMESSAGE(20, 130, "New Folder...");
178 mainMenu[j].label = XtNewString(mainMenu[j].label);
179 mainMenu[j].mnemonic = GETMESSAGE(20, 131, "N");
180 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
181 mainMenu[j].helpData = HELP_FILE_MENU_STR;
182 mainMenu[j].name = "newFolder";
183 mainMenu[j++].activateCallback = ShowMakeFileDialog;
185 create_dataBtn = &(mainMenu[j].widget);
186 mainMenu[j].maskBit = CREATE_FILE;
187 mainMenu[j].type = MENU_BUTTON;
188 mainMenu[j].label = GETMESSAGE(20, 132, "New File...");
189 mainMenu[j].label = XtNewString(mainMenu[j].label);
190 mainMenu[j].mnemonic = GETMESSAGE(20, 133, "w");
191 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
192 mainMenu[j].helpData = HELP_FILE_MENU_STR;
193 mainMenu[j].name = "newFile";
194 mainMenu[j++].activateCallback = ShowMakeFileDialog;
196 mainMenu[j].type = MENU_SEPARATOR;
197 mainMenu[j].name = "separator";
198 mainMenu[j++].helpCallback = NULL;
200 homeBarBtn = &(mainMenu[j].widget);
201 mainMenu[j].type = MENU_BUTTON;
202 mainMenu[j].label = GETMESSAGE(20, 38, "Go Home");
203 mainMenu[j].label = XtNewString(mainMenu[j].label);
204 mainMenu[j].mnemonic = GETMESSAGE(20, 41, "H");
205 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
206 mainMenu[j].helpData = HELP_FILE_MENU_STR;
207 mainMenu[j].name = "goHome";
208 mainMenu[j++].activateCallback = ChangeToHome;
210 upBarBtn = &(mainMenu[j].widget);
211 mainMenu[j].type = MENU_BUTTON;
212 mainMenu[j].maskBit = MOVE_UP;
213 mainMenu[j].label = GETMESSAGE(20, 155, "Go Up");
214 mainMenu[j].label = XtNewString(mainMenu[j].label);
215 mainMenu[j].mnemonic = GETMESSAGE(20,94, "U");
216 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
217 mainMenu[j].helpData = HELP_FILE_MENU_STR;
218 mainMenu[j].name = "goUp";
219 mainMenu[j++].activateCallback = ChangeToParent;
221 change_directoryBtn = &(mainMenu[j].widget);
222 mainMenu[j].maskBit = CHANGEDIR;
223 mainMenu[j].type = MENU_BUTTON;
224 mainMenu[j].label = GETMESSAGE(20, 134, "Go To...");
225 mainMenu[j].label = XtNewString(mainMenu[j].label);
226 mainMenu[j].mnemonic = GETMESSAGE(20, 135, "G");
227 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
228 mainMenu[j].helpData = HELP_FILE_MENU_STR;
229 mainMenu[j].name = "changeTo";
230 mainMenu[j++].activateCallback = ShowChangeDirDialog;
232 findBtn = &(mainMenu[j].widget);
233 mainMenu[j].type = MENU_BUTTON;
234 mainMenu[j].maskBit = FIND;
235 mainMenu[j].label = GETMESSAGE(20, 18, "Find...");
236 mainMenu[j].label = XtNewString(mainMenu[j].label);
237 mainMenu[j].mnemonic = GETMESSAGE(20, 19, "F");
238 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
239 mainMenu[j].helpData = HELP_FILE_MENU_STR;
240 mainMenu[j].name = "find";
241 mainMenu[j++].activateCallback = ShowFindDialog;
243 mainMenu[j].type = MENU_SEPARATOR;
244 mainMenu[j].name = "separator";
245 mainMenu[j++].helpCallback = NULL;
247 #if defined(ADD_SHOW_TRASH)
248 mainMenu[j].type = MENU_BUTTON;
249 mainMenu[j].label = GETMESSAGE(20, 136, "Open Trash");
250 mainMenu[j].label = XtNewString(mainMenu[j].label);
251 mainMenu[j].mnemonic = GETMESSAGE(20, 112, "O");
252 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
253 mainMenu[j].helpData = HELP_FILE_MENU_STR;
254 mainMenu[j].name = "openTrash";
255 mainMenu[j++].activateCallback = ShowTrash;
259 terminalBtn = &(mainMenu[j].widget);
260 mainMenu[j].type = MENU_BUTTON;
261 mainMenu[j].label = GETMESSAGE(20,146, "Open Terminal");
262 mainMenu[j].label = XtNewString(mainMenu[j].label);
263 mainMenu[j].mnemonic = GETMESSAGE(20,147, "O");
264 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
265 mainMenu[j].helpData = HELP_FILE_MENU_STR;
266 mainMenu[j].name = "openTerminal";
267 mainMenu[j++].activateCallback = TerminalCWD;
272 mainMenu[j].type = MENU_SEPARATOR;
273 mainMenu[j].name = "separator";
274 mainMenu[j++].helpCallback = NULL;
276 mainMenu[j].type = MENU_BUTTON;
277 mainMenu[j].label = GETMESSAGE(20, 117, "Close");
278 mainMenu[j].label = XtNewString(mainMenu[j].label);
279 mainMenu[j].mnemonic = GETMESSAGE(20, 118, "C");
280 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
281 mainMenu[j].helpData = HELP_FILE_MENU_STR;
282 mainMenu[j].name = "close";
283 mainMenu[j++].activateCallback = Close;
285 /***************************************/
286 /* Create the 'Action' menu components */
287 /***************************************/
289 actionsId = &(mainMenu[j].widget);
290 mainMenu[j].type = MENU_PULLDOWN_BUTTON;
291 mainMenu[j].label = GETMESSAGE(20, 7, "Selected");
292 mainMenu[j].label = XtNewString(mainMenu[j].label);
293 mainMenu[j].mnemonic = GETMESSAGE(20, 8, "S");
294 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
295 mainMenu[j].name = "actions";
296 mainMenu[j++].helpData = HELP_SELECTED_MENU_STR;
298 actionsPaneId = &(mainMenu[j].widget);
299 mainMenu[j].type = SHARED_MENU_PANE;
300 mainMenu[j].name = "actionMenu";
301 mainMenu[j++].helpData = HELP_SELECTED_MENU_STR;
303 moveBtn = &(mainMenu[j].widget);
304 mainMenu[j].type = MENU_BUTTON;
305 mainMenu[j].maskBit = MOVE;
306 mainMenu[j].label = GETMESSAGE(20, 152, "Move to...");
307 mainMenu[j].label = XtNewString(mainMenu[j].label);
308 mainMenu[j].mnemonic = GETMESSAGE(20, 125, "M");
309 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
310 mainMenu[j].helpData = HELP_MOVE_AS_COMMAND_STR;
311 mainMenu[j].name = "move";
312 mainMenu[j++].activateCallback = ShowMoveFileDialog;
314 duplicateBtn = &(mainMenu[j].widget);
315 mainMenu[j].type = MENU_BUTTON;
316 mainMenu[j].maskBit = DUPLICATE;
317 mainMenu[j].label = GETMESSAGE(20, 153, "Copy to...");
318 mainMenu[j].label = XtNewString(mainMenu[j].label);
319 mainMenu[j].mnemonic = GETMESSAGE(20, 145, "C");
320 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
321 mainMenu[j].helpData = HELP_COPY_AS_COMMAND_STR;
322 mainMenu[j].name = "copy";
323 mainMenu[j++].activateCallback = ShowCopyFileDialog;
325 linkBtn = &(mainMenu[j].widget);
326 mainMenu[j].type = MENU_BUTTON;
327 mainMenu[j].maskBit = LINK;
328 mainMenu[j].label = GETMESSAGE(20, 154, "Copy As Link...");
329 mainMenu[j].label = XtNewString(mainMenu[j].label);
330 mainMenu[j].mnemonic = GETMESSAGE(20, 127, "L");
331 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
332 mainMenu[j].helpData = HELP_LINK_AS_COMMAND_STR;
333 mainMenu[j].name = "link";
334 mainMenu[j++].activateCallback = ShowLinkFileDialog;
336 mainMenu[j].type = MENU_SEPARATOR;
337 mainMenu[j].name = "separator";
338 mainMenu[j++].helpCallback = NULL;
340 mainMenu[j].maskBit = PUT_ON_DESKTOP;
341 mainMenu[j].type = MENU_BUTTON;
342 mainMenu[j].label = GETMESSAGE(20,84, "Put in Workspace");
343 mainMenu[j].label = XtNewString(mainMenu[j].label);
344 mainMenu[j].mnemonic = GETMESSAGE(20,85, "W");
345 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
346 mainMenu[j].helpData = HELP_PUT_ON_DT_COMMAND_STR;
347 mainMenu[j].name = "putInWorkspace";
348 mainMenu[j++].activateCallback = PutOnDTCB;
350 mainMenu[j].type = MENU_BUTTON;
351 mainMenu[j].maskBit = TRASH;
352 mainMenu[j].label = GETMESSAGE(20,151, "Put in Trash");
353 mainMenu[j].label = XtNewString(mainMenu[j].label);
354 mainMenu[j].mnemonic = GETMESSAGE(20, 91, "T");
355 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
356 mainMenu[j].helpData = HELP_TRASH_FILES_COMMAND_STR;
357 mainMenu[j].name = "putInTrash";
358 mainMenu[j++].activateCallback = TrashFiles;
360 renameBtn = &(mainMenu[j].widget);
361 mainMenu[j].type = MENU_BUTTON;
362 mainMenu[j].maskBit = RENAME;
363 mainMenu[j].label = GETMESSAGE(20, 137, "Rename...");
364 mainMenu[j].label = XtNewString(mainMenu[j].label);
365 mainMenu[j].mnemonic = GETMESSAGE(20, 110, "R");
366 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
367 mainMenu[j].helpData = HELP_RENAME_COMMAND_STR;
368 mainMenu[j].name = "rename";
369 mainMenu[j++].activateCallback = ShowRenameFileDialog;
371 mainMenu[j].type = MENU_BUTTON;
372 mainMenu[j].maskBit = MODIFY;
373 mainMenu[j].label = GETMESSAGE(20, 150, "Change Permissions...");
374 mainMenu[j].label = XtNewString(mainMenu[j].label);
375 mainMenu[j].mnemonic = GETMESSAGE(20, 17, "P");
376 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
377 mainMenu[j].helpData = HELP_PROPERTIES_COMMAND_STR;
378 mainMenu[j].name = "permissions";
379 mainMenu[j++].activateCallback = ShowModAttrDialog;
381 mainMenu[j].type = MENU_SEPARATOR;
382 mainMenu[j].name = "separator";
383 mainMenu[j++].helpCallback = NULL;
385 mainMenu[j].type = MENU_BUTTON;
386 mainMenu[j].label = GETMESSAGE(20, 48, "Select All");
387 mainMenu[j].label = XtNewString(mainMenu[j].label);
388 mainMenu[j].mnemonic = GETMESSAGE(20, 51, "S");
389 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
390 mainMenu[j].helpData = HELP_SELECT_ALL_COMMAND_STR;
391 mainMenu[j].name = "selectAll";
392 mainMenu[j++].activateCallback = SelectAll;
394 mainMenu[j].type = MENU_BUTTON;
395 mainMenu[j].label = GETMESSAGE(20, 52, "Deselect All");
396 mainMenu[j].label = XtNewString(mainMenu[j].label);
397 mainMenu[j].mnemonic = GETMESSAGE(20, 55, "D");
398 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
399 mainMenu[j].helpData = HELP_UNSELECT_ALL_COMMAND_STR;
400 mainMenu[j].name = "deselectAll";
401 mainMenu[j++].activateCallback = UnselectAll;
403 mainMenu[j].type = MENU_SEPARATOR;
404 mainMenu[j].name = "separator";
405 mainMenu[j++].helpCallback = NULL;
407 /*************************************/
408 /* Create the 'View' menu components */
409 /*************************************/
411 directoryBarBtn = &(mainMenu[j].widget);
412 mainMenu[j].type = MENU_PULLDOWN_BUTTON;
413 mainMenu[j].label = GETMESSAGE(20, 5, "View");
414 mainMenu[j].label = XtNewString(mainMenu[j].label);
415 mainMenu[j].mnemonic = GETMESSAGE(20, 6, "V");
416 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
417 mainMenu[j].name = "view";
418 mainMenu[j++].helpData = HELP_VIEW_MENU_STR;
420 mainMenu[j].type = SHARED_MENU_PANE;
421 mainMenu[j].name = "viewMenu";
422 mainMenu[j++].helpData = HELP_VIEW_MENU_STR;
424 if(openDirType == CURRENT)
426 newViewBtn = &(mainMenu[j].widget);
427 mainMenu[j].type = MENU_BUTTON;
428 mainMenu[j].label = GETMESSAGE(20, 138, "Open New View");
429 mainMenu[j].label = XtNewString(mainMenu[j].label);
430 mainMenu[j].mnemonic = GETMESSAGE(20, 139, "O");
431 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
432 mainMenu[j].helpData = HELP_NEW_VIEW_COMMAND_STR;
433 mainMenu[j].name = "new";
434 mainMenu[j++].activateCallback = NewView;
439 mainMenu[j].type = MENU_SEPARATOR;
440 mainMenu[j].name = "separator";
441 mainMenu[j++].helpCallback = NULL;
443 preferencesBtn = &(mainMenu[j].widget);
444 mainMenu[j].type = MENU_BUTTON;
445 mainMenu[j].maskBit = PREFERENCES;
446 mainMenu[j].label = GETMESSAGE(20, 141, "Set View Options...");
447 mainMenu[j].label = XtNewString(mainMenu[j].label);
448 mainMenu[j].mnemonic = GETMESSAGE(20, 6, "V");
449 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
450 mainMenu[j].helpData = HELP_PREFERENCES_COMMAND_STR;
451 mainMenu[j].name = "setViewOptions";
452 mainMenu[j++].activateCallback = ShowPreferencesDialog;
454 defaultEnvBtn = &(mainMenu[j].widget);
455 mainMenu[j].type = MENU_BUTTON;
456 mainMenu[j].maskBit = SETTINGS;
457 mainMenu[j].label = GETMESSAGE(20, 142, "Save As Default Options...");
458 mainMenu[j].label = XtNewString(mainMenu[j].label);
459 mainMenu[j].mnemonic = GETMESSAGE(20, 143, "S");
460 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
461 mainMenu[j].helpData = HELP_SAVE_SETTINGS_COMMAND_STR;
462 mainMenu[j].name = "saveViewOptions";
463 mainMenu[j++].activateCallback = SaveSettingsCB;
465 showHiddenMenu = &(mainMenu[j].widget);
466 mainMenu[j].type = MENU_TOGGLE_BUTTON;
467 mainMenu[j].label = GETMESSAGE(20,156, "Show Hidden Objects");
468 mainMenu[j].label = XtNewString(mainMenu[j].label);
469 mainMenu[j].mnemonic = GETMESSAGE(20,102, "H");
470 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
471 mainMenu[j].helpData = HELP_SHOW_HIDDEN_COMMAND_STR;
472 mainMenu[j].name = "showHiddenObjects";
473 mainMenu[j++].activateCallback = ShowHiddenFiles;
475 filterBtn = &(mainMenu[j].widget);
476 mainMenu[j].type = MENU_BUTTON;
477 mainMenu[j].maskBit = FILTER;
478 mainMenu[j].label = GETMESSAGE(20,144, "Set Filter Options...");
479 mainMenu[j].label = XtNewString(mainMenu[j].label);
480 mainMenu[j].mnemonic = GETMESSAGE(20, 104, "F");
481 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
482 mainMenu[j].helpData = HELP_FILTER_COMMAND_STR;
483 mainMenu[j].name = "setFilterOptions";
484 mainMenu[j++].activateCallback = ShowFilterDialog;
486 mainMenu[j].type = MENU_SEPARATOR;
487 mainMenu[j].name = "separator";
488 mainMenu[j++].helpCallback = NULL;
490 cleanUpBtn = &(mainMenu[j].widget);
491 mainMenu[j].type = MENU_BUTTON;
492 mainMenu[j].maskBit = CLEAN_UP;
493 mainMenu[j].label = GETMESSAGE(20,99, "Clean Up");
494 mainMenu[j].label = XtNewString(mainMenu[j].label);
495 mainMenu[j].mnemonic = GETMESSAGE(20,100, "C");
496 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
497 mainMenu[j].helpData = HELP_CLEAN_UP_COMMAND_STR;
498 mainMenu[j].name = "cleanUp";
499 mainMenu[j++].activateCallback = CleanUp;
501 mainMenu[j].type = MENU_BUTTON;
502 mainMenu[j].label = GETMESSAGE(20, 30, "Update");
503 mainMenu[j].label = XtNewString(mainMenu[j].label);
504 mainMenu[j].mnemonic = GETMESSAGE(20, 33, "U");
505 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
506 mainMenu[j].helpData = HELP_REREAD_COMMAND_STR;
507 mainMenu[j].name = "refresh";
508 mainMenu[j++].activateCallback = RereadDirectoryMenu;
510 /*************************************/
511 /* Create the 'Help' menu components */
512 /*************************************/
514 mainMenu[j].type = MENU_PULLDOWN_BUTTON;
515 mainMenu[j].isHelpBtn = True;
516 mainMenu[j].label = GETMESSAGE(20, 123, "Help");
517 mainMenu[j].label = XtNewString(mainMenu[j].label);
518 mainMenu[j].mnemonic = GETMESSAGE(20, 9, "H");
519 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
520 mainMenu[j].name = "help";
521 mainMenu[j++].helpData = HELP_HELP_MENU_STR;
523 mainMenu[j].type = SHARED_MENU_PANE;
524 mainMenu[j].name = "helpMenu";
525 mainMenu[j++].helpData = HELP_HELP_MENU_STR;
527 mainMenu[j].type = MENU_BUTTON;
528 mainMenu[j].label = GETMESSAGE(20, 105, "Overview");
529 mainMenu[j].label = XtNewString(mainMenu[j].label);
530 mainMenu[j].mnemonic = GETMESSAGE(20, 106, "v");
531 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
532 mainMenu[j].helpData = HELP_HELP_MENU_STR;
533 mainMenu[j].activateCallback = HelpRequestCB;
534 mainMenu[j].name = "introduction";
535 mainMenu[j++].activateData = HELP_HOME_TOPIC;
537 mainMenu[j].type = MENU_SEPARATOR;
538 mainMenu[j].name = "separator";
539 mainMenu[j++].helpCallback = NULL;
541 mainMenu[j].type = MENU_BUTTON;
542 mainMenu[j].label = GETMESSAGE(20, 148, "Table Of Contents");
543 mainMenu[j].label = XtNewString(mainMenu[j].label);
544 mainMenu[j].mnemonic = GETMESSAGE(20, 149, "C");
545 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
546 mainMenu[j].helpData = HELP_HELP_MENU_STR;
547 mainMenu[j].activateCallback = HelpRequestCB;
548 mainMenu[j].name = "toc";
549 mainMenu[j++].activateData = HELP_TOC_STR;
551 mainMenu[j].type = MENU_BUTTON;
552 mainMenu[j].label = GETMESSAGE(20, 107, "Tasks");
553 mainMenu[j].label = XtNewString(mainMenu[j].label);
554 mainMenu[j].mnemonic = GETMESSAGE(20, 108, "T");
555 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
556 mainMenu[j].helpData = HELP_HELP_MENU_STR;
557 mainMenu[j].activateCallback = HelpRequestCB;
558 mainMenu[j].name = "tasks";
559 mainMenu[j++].activateData = HELP_TASKS_STR;
561 mainMenu[j].type = MENU_BUTTON;
562 mainMenu[j].label = GETMESSAGE(20,109, "Reference");
563 mainMenu[j].label = XtNewString(mainMenu[j].label);
564 mainMenu[j].mnemonic = GETMESSAGE(20,110, "R");
565 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
566 mainMenu[j].helpData = HELP_HELP_MENU_STR;
567 mainMenu[j].activateCallback = HelpRequestCB;
568 mainMenu[j].name = "reference";
569 mainMenu[j++].activateData = HELP_REFERENCE_STR;
571 mainMenu[j].type = MENU_BUTTON;
572 mainMenu[j].label = GETMESSAGE(20,111, "On Item");
573 mainMenu[j].label = XtNewString(mainMenu[j].label);
574 mainMenu[j].mnemonic = GETMESSAGE(20,112, "O");
575 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
576 mainMenu[j].helpData = HELP_HELP_MENU_STR;
577 mainMenu[j].activateCallback = HelpRequestCB;
578 mainMenu[j].name = "onItem";
579 mainMenu[j++].activateData = HELP_HELP_MODE_STR;
581 mainMenu[j].type = MENU_SEPARATOR;
582 mainMenu[j].name = "separator";
583 mainMenu[j++].helpCallback = NULL;
585 usingHelp = &(mainMenu[j].widget);
586 mainMenu[j].type = MENU_BUTTON;
587 mainMenu[j].label = GETMESSAGE(20,113, "Using Help");
588 mainMenu[j].label = XtNewString(mainMenu[j].label);
589 mainMenu[j].mnemonic = GETMESSAGE(20,114, "U");
590 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
591 mainMenu[j].helpData = HELP_HELP_MENU_STR;
592 mainMenu[j].activateCallback = HelpRequestCB;
593 mainMenu[j].name = "usingHelp";
594 mainMenu[j++].activateData = HELP_HOME_TOPIC;
596 mainMenu[j].type = MENU_SEPARATOR;
597 mainMenu[j].name = "separator";
598 mainMenu[j++].helpCallback = NULL;
600 fileManagerHelp = &(mainMenu[j].widget);
601 mainMenu[j].type = MENU_BUTTON;
602 mainMenu[j].label = GETMESSAGE(20,115, "About File Manager");
603 mainMenu[j].label = XtNewString(mainMenu[j].label);
604 mainMenu[j].mnemonic = GETMESSAGE(20,116, "A");
605 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
606 mainMenu[j].helpData = HELP_HELP_MENU_STR;
607 mainMenu[j].activateCallback = HelpRequestCB;
608 mainMenu[j].name = "version";
609 mainMenu[j++].activateData = HELP_ABOUT_STR;
611 applicationManagerHelp = &(mainMenu[j].widget);
612 mainMenu[j].type = MENU_BUTTON;
613 mainMenu[j].label = GETMESSAGE(20,157, "About Application Manager");
614 mainMenu[j].label = XtNewString(mainMenu[j].label);
615 mainMenu[j].mnemonic = GETMESSAGE(20,116, "A");
616 mainMenu[j].mnemonic = XtNewString(mainMenu[j].mnemonic);
617 mainMenu[j].helpData = HELP_HELP_MENU_STR;
618 mainMenu[j].activateCallback = HelpRequestCB;
619 mainMenu[j].name = "version";
620 mainMenu[j++].activateData = HELP_ABOUT_STR;
623 menu_bar = _DtCreateMenuSystem(main, "mainMenu", HelpRequestCB,
624 HELP_HELP_MENU_STR, createSharedComponents,
625 mainMenu, menuItemCount, GetMainMenuData,
626 SetMenuSensitivity, RestoreMenuSensitivity);
628 /* Fine tune the menubar */
629 XtSetArg(args[0], XmNmarginWidth, 2);
630 XtSetArg(args[1], XmNmarginHeight, 2);
631 XtSetValues(menu_bar, args, 2);
633 file_mgr_rec->actions = *actionsId;
634 file_mgr_rec->action_pane = *actionsPaneId;
635 file_mgr_rec->directoryBarBtn = *directoryBarBtn;
637 file_mgr_rec->create_directoryBtn_child= NULL;
638 file_mgr_rec->create_dataBtn_child= NULL;
640 ActivateNoSelect (file_mgr_rec);
642 createSharedComponents = False;
651 XtPointer * mainRecordPtr,
652 MenuDesc ** menuDescPtr,
653 int * menuItemCountPtr,
654 unsigned int ** globalMenuStatesPtr,
655 unsigned int ** viewMenuStatesPtr )
659 FileMgrRec * fileMgrRec;
661 XtSetArg(args[0], XmNuserData, &fileMgrRec);
662 XtGetValues(mbar, args, 1);
663 *mainRecordPtr = (XtPointer) fileMgrRec;
664 *menuDescPtr = mainMenu;
665 *menuItemCountPtr = menuItemCount;
666 *globalMenuStatesPtr = ¤tMenuStates;
667 *viewMenuStatesPtr = &fileMgrRec->menuStates;
668 *actionsPaneId = fileMgrRec->action_pane;
675 struct passwd * pwInfo;
677 if( homeDir == NULL )
679 if ((homeDir = getenv("HOME_CLIENT")) == NULL)
681 if ((homeDir = getenv("HOME")) == NULL)
683 pwInfo = getpwuid (getuid());
684 homeDir = pwInfo->pw_dir;
691 /************************************************************************
693 * ActivateSingleSelect
694 * Activate the menu items that are to be active upon a
697 ************************************************************************/
700 ActivateSingleSelect(
701 FileMgrRec *file_mgr_rec,
704 DialogData * dialog_data;
705 FileMgrData * file_mgr_data;
707 if ((dialog_data = _DtGetInstanceData ((XtPointer)file_mgr_rec)) == NULL)
709 file_mgr_data = (FileMgrData *) dialog_data->data;
711 if ((strcmp(file_mgr_data->selection_list[0]->file_data->file_name, ".." ) == 0 )
712 || (strcmp(file_mgr_data->selection_list[0]->file_data->file_name, "." ) == 0 ) )
714 file_mgr_rec->menuStates |= TRASH | MODIFY | PUT_ON_DESKTOP;
715 file_mgr_rec->menuStates &= (~RENAME);
718 file_mgr_rec->menuStates |= RENAME | TRASH | MODIFY | PUT_ON_DESKTOP;
720 if ((strcmp(file_type, LT_BROKEN_LINK) != 0)
721 && (strcmp(file_type, LT_RECURSIVE_LINK) != 0)
723 && (file_mgr_data->selection_list[0]->file_data->physical_type !=
728 file_mgr_rec->menuStates |= MOVE | DUPLICATE | LINK;
731 file_mgr_rec->menuStates &= ~(MOVE | DUPLICATE | LINK);
733 /* Update the action menu pane defined for the file type */
734 /* of the selected file. */
736 UpdateActionMenuPane ((XtPointer)file_mgr_data, file_mgr_rec, file_type,
737 NOT_DESKTOP, 0, (Widget)NULL,
738 file_mgr_data->selection_list[0]->file_data->physical_type);
744 UnmanageAllActionItems(
745 FileMgrRec *file_mgr_rec )
747 register int i, children;
748 XmManagerWidget action_pane;
750 action_pane = (XmManagerWidget) file_mgr_rec->action_pane;
752 for (i = SELECTED_MENU_MAX; i < action_pane->composite.num_children; ++i)
754 XtUnmanageChild (action_pane->composite.children[i]);
758 /************************************************************************
760 * ActivateMultipleSelect
761 * Activate (deactivate) the appropriate menu items when multiple
762 * files are selected.
765 ************************************************************************/
768 ActivateMultipleSelect(
769 FileMgrRec *file_mgr_rec )
771 file_mgr_rec->menuStates |= TRASH | PUT_ON_DESKTOP;
772 file_mgr_rec->menuStates &= ~(RENAME | MOVE | DUPLICATE | LINK |
775 UnmanageAllActionItems (file_mgr_rec);
781 /************************************************************************
784 * Activate (deactivate) the appropriate menu items when no
785 * files are selected.
787 ************************************************************************/
791 FileMgrRec *file_mgr_rec )
793 file_mgr_rec->menuStates &= ~(RENAME | MOVE | DUPLICATE | LINK | TRASH |
794 MODIFY | PUT_ON_DESKTOP);
796 UnmanageAllActionItems (file_mgr_rec);
801 /************************************************************************
804 * Unselect all of the selected files.
806 ************************************************************************/
811 XtPointer client_data,
812 XtPointer call_data )
814 FileMgrRec * file_mgr_rec;
815 DialogData * dialog_data;
816 FileMgrData * file_mgr_data;
820 if ((int)client_data == FM_POPUP)
823 mbar = XmGetPostedFromWidget(XtParent(w));
826 XtSetArg(args[0], XmNuserData, &file_mgr_rec);
827 XtGetValues(mbar, args, 1);
829 /* Ignore accelerators received after we're unposted */
830 if ((dialog_data = _DtGetInstanceData ((XtPointer)file_mgr_rec)) == NULL)
832 file_mgr_data = (FileMgrData *) dialog_data->data;
834 DeselectAllFiles (file_mgr_data);
835 ActivateNoSelect (file_mgr_rec);
837 if( file_mgr_data == trashFileMgrData )
838 SensitizeTrashBtns();
844 /************************************************************************
847 * Select all of file displayed.
849 ************************************************************************/
854 XtPointer client_data,
855 XtPointer call_data )
857 FileMgrRec * file_mgr_rec;
858 DialogData * dialog_data;
859 FileMgrData * file_mgr_data;
863 if ((int)client_data == FM_POPUP)
866 mbar = XmGetPostedFromWidget(XtParent(w));
869 XtSetArg(args[0], XmNuserData, &file_mgr_rec);
870 XtGetValues(mbar, args, 1);
872 /* Ignore accelerators received after we're unposted */
873 if ((dialog_data = _DtGetInstanceData ((XtPointer)file_mgr_rec)) == NULL)
875 file_mgr_data = (FileMgrData *) dialog_data->data;
877 SelectAllFiles (file_mgr_data);
879 if( file_mgr_data == trashFileMgrData )
880 SensitizeTrashBtns();
886 /************************************************************************
888 * RereadDirectoryMenu
889 * Callback function invoked from the Reread Directory
890 * menu item. This function calls the file manager functions
891 * which rereads and processes the directory.
893 ************************************************************************/
898 XtPointer client_data,
899 XtPointer call_data )
902 Widget mbar = XmGetPostedFromWidget(XtParent(w));
903 FileMgrRec * file_mgr_rec;
904 DialogData * dialog_data;
908 XtSetArg(args[0], XmNuserData, &file_mgr_rec);
909 XtGetValues(mbar, args, 1);
911 /* Ignore accelerators received after we're unposted */
912 if ((dialog_data = _DtGetInstanceData ((XtPointer)file_mgr_rec)) == NULL)
915 UnpostTextPath( (FileMgrData *) dialog_data->data );
917 /* force this directory to be updated */
918 FileMgrReread (file_mgr_rec);
922 /************************************************************************
925 * Display the Trash can.
927 ************************************************************************/
928 #if defined(ADD_SHOW_TRASH)
933 XtPointer client_data,
934 XtPointer call_data )
938 TrashDisplayHandler (NULL, NULL, NULL, NULL, 0);
943 /************************************************************************
946 * Send the selected set of files to the trash.
948 ************************************************************************/
953 XtPointer client_data,
954 XtPointer call_data )
956 FileMgrRec * file_mgr_rec;
957 DialogData * dialog_data;
958 FileMgrData * file_mgr_data;
959 FileViewData * file_view_data;
962 DtActionArg * action_args;
966 if (!TrashIsInitialized())
970 title = XtNewString(GetSharedMessage(TRASH_ERROR_TITLE));
972 msg = XtMalloc( strlen( GETMESSAGE(27,95, "Unable to access the Trash directory:\n %s\n All trash operations will not be performed.\n The most common causes are:\n - Network authentication.\n - Insufficient disk space.\n - Wrong permissions.") )
973 + strlen( trash_dir )
976 sprintf( msg, GETMESSAGE(27, 95, "Unable to access the Trash directory:\n %s\n All trash operations will not be performed.\n The most common causes are:\n - Network authentication.\n - Insufficient disk space.\n - Wrong permissions."), trash_dir );
978 _DtMessage(toplevel, title, msg, NULL, HelpRequestCB);
986 if((int)client_data == NULL)
987 mbar = XmGetPostedFromWidget(XtParent(w));
991 XtSetArg(args[0], XmNuserData, &file_mgr_rec);
992 XtGetValues(mbar, args, 1);
994 /* Ignore accelerators when we're insensitive */
995 if(client_data == NULL)
996 if ((file_mgr_rec->menuStates & TRASH) == 0)
999 /* Ignore accelerators received after we're unposted */
1000 if ((dialog_data = _DtGetInstanceData ((XtPointer)file_mgr_rec)) == NULL)
1002 file_mgr_data = (FileMgrData *) dialog_data->data;
1004 /* 'widget_dragged' is set in InitiateIconDrag() and
1005 is never set to NULL. Because of this, after doing a desktop drag
1006 if you do a 'PutInTrash' on the File Manager window object, in
1007 TrashRemoveHandler() in Trash.c, it displays an incorrect message,
1008 So set it to NULL here. */
1010 widget_dragged = NULL;
1012 /* get the file_view_data object from which the menu was invoked */
1013 if (client_data == NULL)
1014 file_view_data = NULL;
1017 file_view_data = file_mgr_data->popup_menu_icon;
1018 /* The following test makes sure that the it is not the case of
1019 multiple selected files */
1020 if (!file_mgr_data->selected_file_count && file_view_data == NULL)
1021 /* the object has gone away (probably deleted) */
1024 file_mgr_data->popup_menu_icon = NULL;
1028 for(i = 0; i < file_mgr_data->selected_file_count; i++)
1030 if(file_mgr_data->selection_list[i] == file_view_data)
1032 file_view_data = NULL;
1040 _DtBuildActionArgsWithSelectedFiles(&file_view_data, 1,
1041 &action_args, &arg_count);
1043 _DtBuildActionArgsWithSelectedFiles(file_mgr_data->selection_list,
1044 file_mgr_data->selected_file_count,
1045 &action_args, &arg_count);
1047 DtActionInvoke(file_mgr_rec->shell, TRASH_ACTION,
1048 action_args, arg_count, NULL, NULL,
1049 trash_dir, True, NULL, NULL);
1051 _DtFreeActionArgs(action_args, arg_count);
1057 /************************************************************************
1060 * Create a new view of the currently display directory
1062 ************************************************************************/
1067 XtPointer client_data,
1068 XtPointer call_data )
1070 FileMgrRec * file_mgr_rec;
1071 DialogData * dialog_data;
1072 FileMgrData * file_mgr_data;
1074 Widget mbar = XmGetPostedFromWidget(XtParent(w));
1077 XmUpdateDisplay (w);
1078 XtSetArg(args[0], XmNuserData, &file_mgr_rec);
1079 XtGetValues(mbar, args, 1);
1081 /* Ignore accelerators received after we're unposted */
1082 if ((dialog_data = _DtGetInstanceData ((XtPointer)file_mgr_rec)) == NULL)
1084 file_mgr_data = (FileMgrData *) dialog_data->data;
1086 initiating_view = (XtPointer) file_mgr_data;
1087 if(file_mgr_data->restricted_directory != NULL)
1089 special_view = True;
1090 special_treeType = file_mgr_data->show_type;
1091 special_viewType = file_mgr_data->view;
1092 special_orderType = file_mgr_data->order;
1093 special_directionType = file_mgr_data->direction;
1094 special_randomType = file_mgr_data->positionEnabled;
1095 special_restricted = XtNewString(file_mgr_data->restricted_directory);
1096 if(file_mgr_data->title == NULL)
1097 special_title = NULL;
1099 special_title = XtNewString(file_mgr_data->title);
1100 special_helpVol = XtNewString(file_mgr_data->helpVol);
1102 if(file_mgr_data->toolbox)
1103 GetNewView (file_mgr_data->host, file_mgr_data->current_directory,
1104 file_mgr_data->restricted_directory, NULL, 0);
1106 GetNewView (file_mgr_data->host, file_mgr_data->current_directory,
1110 GetNewView (file_mgr_data->host, file_mgr_data->current_directory, NULL,
1112 initiating_view = (XtPointer) NULL;
1118 /************************************************************************
1121 * Update the current view to show the home directory.
1123 ************************************************************************/
1128 XtPointer client_data,
1129 XtPointer call_data )
1131 FileMgrRec * file_mgr_rec;
1132 DialogData * dialog_data;
1133 FileMgrData * file_mgr_data;
1137 Widget mbar = XmGetPostedFromWidget(XtParent(w));
1140 XmUpdateDisplay (w);
1141 if((int)client_data == FM_POPUP)
1144 mbar = XmGetPostedFromWidget(XtParent(w));
1146 XtSetArg(args[0], XmNuserData, &file_mgr_rec);
1147 XtGetValues(mbar, args, 1);
1149 /* Ignore accelerators when we're insensitive */
1150 if ((file_mgr_rec->menuStates & HOME) == 0)
1153 /* Ignore accelerators received after we're unposted */
1154 if ((dialog_data = _DtGetInstanceData ((XtPointer)file_mgr_rec)) == NULL)
1156 file_mgr_data = (FileMgrData *) dialog_data->data;
1160 if( homeDir == NULL )
1163 if((ptr = DtStrchr(homeDir, ':')) != NULL)
1165 ptr1 = DtStrchr(homeDir, '/');
1166 if(strlen(ptr) > strlen(ptr1))
1169 host = XtNewString(homeDir);
1177 host = home_host_name;
1180 host = home_host_name;
1182 if (file_mgr_data->cd_select != NULL)
1184 XtFree (file_mgr_data->cd_select);
1185 file_mgr_data->cd_select = NULL;
1188 ShowNewDirectory( file_mgr_data, host, homeDir );
1197 /************************************************************************
1200 * Update the current view to show the parent directory.
1202 ************************************************************************/
1207 XtPointer client_data,
1208 XtPointer call_data )
1210 FileMgrRec * file_mgr_rec;
1211 DialogData * dialog_data;
1212 FileMgrData * file_mgr_data;
1214 Widget mbar = XmGetPostedFromWidget(XtParent(w));
1215 char host_name[MAX_PATH];
1216 Widget focus_widget;
1218 XmUpdateDisplay (w);
1219 if((int)client_data == FM_POPUP)
1222 mbar = XmGetPostedFromWidget(XtParent(w));
1224 XtSetArg(args[0], XmNuserData, &file_mgr_rec);
1225 XtGetValues(mbar, args, 1);
1227 /* Ignore accelerators when we're insensitive */
1228 if ((file_mgr_rec->menuStates & MOVE_UP) == 0)
1231 /* Ignore accelerators received after we're unposted */
1232 if ((dialog_data = _DtGetInstanceData ((XtPointer)file_mgr_rec)) == NULL)
1235 focus_widget = XmGetFocusWidget(file_mgr_rec->file_window);
1238 if (focus_widget == file_mgr_rec->current_directory_text)
1240 XmTextFieldReplace(focus_widget,
1242 XmTextFieldGetInsertionPosition(focus_widget),
1246 else if (strcmp(focus_widget->core.name, "nameChangeT") == 0)
1248 XmTextReplace(focus_widget,
1250 XmTextFieldGetInsertionPosition(focus_widget),
1256 file_mgr_data = (FileMgrData *) dialog_data->data;
1258 if (strcmp (file_mgr_data->current_directory, "/") == 0)
1261 strcpy(host_name, file_mgr_data->host);
1263 if (file_mgr_data->cd_select != NULL)
1265 XtFree (file_mgr_data->cd_select);
1266 file_mgr_data->cd_select = NULL;
1269 ShowNewDirectory (file_mgr_data, host_name,
1270 _DtPName (file_mgr_data->current_directory));
1272 if(strcmp(file_mgr_data->current_directory,
1273 file_mgr_data->restricted_directory) == 0)
1275 _DtGlobalUpdateMenuItemState(*upBarBtn, MOVE_UP, False, ¤tMenuStates);
1276 file_mgr_rec->menuStates &= ~(MOVE_UP);
1280 file_mgr_rec->menuStates |= MOVE_UP;
1281 _DtGlobalUpdateMenuItemState(*upBarBtn, MOVE_UP, True, ¤tMenuStates);
1288 /************************************************************************
1290 * SetMenuSensitivity
1291 * Called before each menupane is posted; it will correctly set
1292 * the menu button sensitivity for the view from which the menu
1293 * is being posted; this is necessary because the menupanes are
1294 * shared. Only those buttons whose state is different than that
1295 * of the current menu will be changed.
1297 ************************************************************************/
1302 XtPointer client_data,
1303 XtPointer call_data )
1307 FileMgrRec * file_mgr_rec;
1308 XmMenuShellWidget mshell = (XmMenuShellWidget) w;
1309 DialogData * dialog_data;
1310 FileMgrData * file_mgr_data;
1312 _XmGetActiveTopLevelMenu(mshell->composite.children[0], &mbar);
1313 XtSetArg(args[0], XmNuserData, &file_mgr_rec);
1314 XtGetValues(mbar, args, 1);
1316 /* Enable the appropriate menu widgets based on the view type */
1317 if ((dialog_data = _DtGetInstanceData ((XtPointer)file_mgr_rec)) != NULL)
1319 struct stat file_info;
1321 file_mgr_data = (FileMgrData *) dialog_data->data;
1323 if( stat( file_mgr_data->current_directory, &file_info ) == 0 )
1325 if( ! (file_info.st_mode & S_IXUSR)
1326 || ! (file_info.st_mode & S_IWUSR) )
1328 file_mgr_rec->menuStates &= ~(CREATE_DIR) & ~(CREATE_FILE);
1329 _DtGlobalUpdateMenuItemState(*create_dataBtn, CREATE_FILE, False, ¤tMenuStates);
1330 _DtGlobalUpdateMenuItemState(*create_directoryBtn, CREATE_DIR, False, ¤tMenuStates);
1332 else if( ! ( file_mgr_data->toolbox ) ||
1333 ( file_mgr_data->toolbox && geteuid() == root_user ) )
1335 file_mgr_rec->menuStates |= CREATE_DIR | CREATE_FILE;
1336 _DtGlobalUpdateMenuItemState(*create_dataBtn, CREATE_FILE, True, ¤tMenuStates);
1337 _DtGlobalUpdateMenuItemState(*create_directoryBtn, CREATE_DIR, True, ¤tMenuStates);
1341 if (!PositioningEnabledInView(file_mgr_data))
1342 file_mgr_rec->menuStates &= ~(CLEAN_UP);
1344 file_mgr_rec->menuStates |= CLEAN_UP;
1346 XtManageChild(*defaultEnvBtn);
1347 if(file_mgr_data->restricted_directory == NULL)
1349 if(strcmp(file_mgr_data->current_directory, "/") == 0)
1351 file_mgr_rec->menuStates &= ~(MOVE_UP);
1352 _DtGlobalUpdateMenuItemState( *upBarBtn, MOVE_UP,
1353 False,¤tMenuStates);
1357 file_mgr_rec->menuStates |= MOVE_UP;
1358 _DtGlobalUpdateMenuItemState(*upBarBtn, MOVE_UP, True,¤tMenuStates);
1361 if( homeDir == NULL )
1365 && strcmp( homeDir, file_mgr_data->current_directory ) != 0 )
1367 file_mgr_rec->menuStates |= HOME;
1368 _DtGlobalUpdateMenuItemState(*homeBarBtn, HOME, True,
1369 ¤tMenuStates);
1373 file_mgr_rec->menuStates &= ~(HOME);
1374 _DtGlobalUpdateMenuItemState(*homeBarBtn, HOME, False,
1375 ¤tMenuStates);
1378 file_mgr_rec->menuStates |= CHANGE_DIR;
1379 _DtGlobalUpdateMenuItemState(*change_directoryBtn, CHANGE_DIR, True,
1380 ¤tMenuStates);
1381 XtManageChild(*change_directoryBtn);
1385 if(strcmp(file_mgr_data->current_directory,
1386 file_mgr_data->restricted_directory) == 0)
1388 _DtGlobalUpdateMenuItemState(*upBarBtn, MOVE_UP, False,
1389 ¤tMenuStates);
1390 file_mgr_rec->menuStates &= ~(MOVE_UP);
1394 file_mgr_rec->menuStates |= MOVE_UP;
1395 _DtGlobalUpdateMenuItemState(*upBarBtn, MOVE_UP, True,
1396 ¤tMenuStates);
1398 _DtGlobalUpdateMenuItemState(*homeBarBtn, HOME, False,¤tMenuStates);
1399 file_mgr_rec->menuStates &= ~(HOME);
1400 _DtGlobalUpdateMenuItemState(*change_directoryBtn, CHANGE_DIR, False,
1401 ¤tMenuStates);
1402 file_mgr_rec->menuStates &= ~(CHANGE_DIR);
1408 if(file_mgr_data->restricted_directory == NULL)
1411 _DtGlobalUpdateMenuItemState(*terminalBtn, TERMINAL, True,
1412 ¤tMenuStates);
1413 file_mgr_rec->menuStates |= TERMINAL;
1418 _DtGlobalUpdateMenuItemState(*terminalBtn, TERMINAL, False,
1419 ¤tMenuStates);
1420 file_mgr_rec->menuStates &= ~(TERMINAL);
1423 XtManageChild(*terminalBtn);
1426 XtManageChild(*preferencesBtn);
1427 XtManageChild(*filterBtn);
1428 if(openDirType == CURRENT)
1429 XtManageChild(*newViewBtn);
1430 XtManageChild(*showHiddenMenu);
1437 ptr = strrchr(users_home_dir, '/');
1439 if(strcmp(file_mgr_data->current_directory, users_home_dir) == 0)
1440 file_mgr_rec->menuStates &= ~(MOVE_UP);
1442 file_mgr_rec->menuStates |= MOVE_UP;
1447 XtManageChild(*findBtn);
1449 /* The problem is when users have 2 views
1450 and selected one file on one view and popup the
1451 'Selected' menu on the other view.
1452 The 'Selected' menu still show the other view action items.
1454 if( file_mgr_data->selected_file_count == 0 )
1455 ActivateNoSelect( file_mgr_rec );
1456 else if( file_mgr_data->selected_file_count == 1 )
1457 ActivateSingleSelect( file_mgr_rec,
1458 file_mgr_data->selection_list[0]->file_data->logical_type );
1460 ActivateMultipleSelect( file_mgr_rec );
1462 if( file_mgr_data->toolbox )
1464 if( geteuid() == root_user || access(file_mgr_data->current_directory,
1467 file_mgr_rec->menuStates |= CREATE_DIR
1469 _DtGlobalUpdateMenuItemState(*create_dataBtn, CREATE_FILE, True,
1470 ¤tMenuStates);
1471 _DtGlobalUpdateMenuItemState(*create_directoryBtn, CREATE_DIR, True,
1472 ¤tMenuStates);
1476 file_mgr_rec->menuStates &= ~(CREATE_DIR
1482 _DtGlobalUpdateMenuItemState(*create_dataBtn, CREATE_FILE, False,
1483 ¤tMenuStates);
1484 _DtGlobalUpdateMenuItemState(*create_directoryBtn, CREATE_DIR, False,
1485 ¤tMenuStates);
1486 _DtGlobalUpdateMenuItemState(*moveBtn, MOVE, False,
1487 ¤tMenuStates);
1488 _DtGlobalUpdateMenuItemState(*linkBtn, LINK, False,
1489 ¤tMenuStates);
1490 _DtGlobalUpdateMenuItemState(*renameBtn, RENAME, False,
1491 ¤tMenuStates);
1498 if (file_mgr_data->show_hid_enabled)
1499 XmToggleButtonGadgetSetState(*showHiddenMenu, True, False);
1501 XmToggleButtonGadgetSetState(*showHiddenMenu, False, False);
1504 if( file_mgr_data->toolbox )
1506 if( ! XtIsManaged( *applicationManagerHelp ) )
1507 XtManageChild( *applicationManagerHelp );
1508 if( XtIsManaged( *fileManagerHelp ) )
1509 XtUnmanageChild( *fileManagerHelp );
1513 if( ! XtIsManaged( *fileManagerHelp ) )
1514 XtManageChild( *fileManagerHelp );
1515 if( XtIsManaged( *applicationManagerHelp ) )
1516 XtUnmanageChild( *applicationManagerHelp );
1519 _DtGlobalSetMenuSensitivity(w, client_data, call_data);
1525 /************************************************************************
1527 * RestoreMenuSensitivity
1528 * Called after each menupane is unposted; it will restore the
1529 * sensitivity state of each menubutton to 'TRUE'; this is so that
1530 * accelerators will work correctly.
1532 ************************************************************************/
1535 RestoreMenuSensitivity(
1537 XtPointer client_data,
1538 XtPointer call_data )
1542 FileMgrRec * file_mgr_rec;
1543 XmMenuShellWidget mshell = (XmMenuShellWidget) w;
1544 DialogData * dialog_data;
1545 FileMgrData * file_mgr_data;
1548 _XmGetActiveTopLevelMenu(mshell->composite.children[0], &mbar);
1549 XtSetArg(args[0], XmNuserData, &file_mgr_rec);
1550 XtGetValues(mbar, args, 1);
1552 /* Enable the appropriate menu widgets based on the view type */
1553 dialog_data = _DtGetInstanceData ((XtPointer)file_mgr_rec);
1554 file_mgr_data = (FileMgrData *) dialog_data->data;
1556 _DtGlobalRestoreMenuSensitivity(w, client_data, call_data);
1562 ptr = strrchr(users_home_dir, '/');
1564 if(strcmp(file_mgr_data->current_directory, users_home_dir) == 0)
1566 _DtGlobalUpdateMenuItemState(*upBarBtn, MOVE_UP, False,
1567 ¤tMenuStates);
1571 _DtGlobalUpdateMenuItemState(*upBarBtn, MOVE_UP, True,
1572 ¤tMenuStates);
1577 if ((currentMenuStates & MOVE_UP) == 0)
1578 _DtGlobalUpdateMenuItemState(*upBarBtn, MOVE_UP, True,¤tMenuStates);
1580 if ((currentMenuStates & CLEAN_UP) == 0)
1581 _DtGlobalUpdateMenuItemState(*cleanUpBtn, CLEAN_UP, True,¤tMenuStates);
1587 /************************************************************************
1590 * Bring up a terminal with the current working directory the directory
1591 * of the dtfile view.
1593 ************************************************************************/
1598 XtPointer client_data,
1599 XtPointer call_data)
1601 FileMgrRec * file_mgr_rec;
1602 DialogData * dialog_data;
1603 FileMgrData * file_mgr_data;
1605 Widget mbar = XmGetPostedFromWidget(XtParent(w));
1606 char * pwd_host = NULL;
1607 char * pwd_dir = NULL;
1609 XmUpdateDisplay (w);
1610 XtSetArg(args[0], XmNuserData, &file_mgr_rec);
1611 XtGetValues(mbar, args, 1);
1613 /* Ignore accelerators received after we're unposted */
1614 if ((dialog_data = _DtGetInstanceData ((XtPointer)file_mgr_rec)) == NULL)
1616 file_mgr_data = (FileMgrData *) dialog_data->data;
1618 pwd_host = XtNewString(file_mgr_data->host);
1619 pwd_dir = XtNewString(file_mgr_data->current_directory);
1621 DtActionInvoke(file_mgr_rec->shell, "Terminal", NULL, 0, NULL,
1622 NULL, pwd_dir, True, NULL, NULL);