r26: Started adding panel features.
[rox-filer/ma.git] / ROX-Filer / src / main.c
blobb80028c4d6dcd960a73ddd9ac0b99ae396e518ec
1 /* vi: set cindent:
2 * $Id$
4 * ROX-Filer, filer for the ROX desktop project
5 * By Thomas Leonard, <tal197@ecs.soton.ac.uk>.
6 */
8 #include <stdlib.h>
9 #include <stdio.h>
10 #include <signal.h>
11 #include <sys/wait.h>
13 #include <gtk/gtk.h>
14 #include <collection.h>
16 #include "gui_support.h"
17 #include "filer.h"
18 #include "mount.h"
19 #include "menu.h"
20 #include "dnd.h"
22 /* XXX: Maybe we shouldn't do so much work in a signal handler? */
23 static void child_died(int signum)
25 int status;
26 int child;
27 FilerWindow *filer_window;
29 /* Find out which children exited. This also has the effect of
30 * allowing the children to die.
34 child = waitpid(-1, &status, WNOHANG | WUNTRACED);
36 if (child == 0 || child == -1)
37 return;
39 filer_window = g_hash_table_lookup(child_to_filer,
40 (gpointer) child);
41 if (filer_window)
42 scan_dir(filer_window);
44 if (!WIFSTOPPED(status))
45 g_hash_table_remove(child_to_filer,
46 (gpointer) child);
48 } while (1);
51 int main(int argc, char **argv)
53 gtk_init(&argc, &argv);
55 gui_support_init();
56 menu_init();
57 dnd_init();
58 filer_init();
59 mount_init();
61 signal(SIGCHLD, child_died);
63 if (argc < 2)
64 filer_opendir(getenv("HOME"), FALSE, BOTTOM);
65 else
67 int i = 1;
68 gboolean panel = FALSE;
69 Side side = BOTTOM;
71 while (i < argc)
73 if (argv[i][0] == '-')
75 switch (argv[i][1] + (argv[i][2] << 8))
77 case 't': side = TOP; break;
78 case 'b': side = BOTTOM; break;
79 case 'l': side = LEFT; break;
80 case 'r': side = RIGHT; break;
81 default:
82 fprintf(stderr,
83 "Bad option.\n");
84 return EXIT_FAILURE;
86 panel = TRUE;
88 else
90 filer_opendir(argv[i], panel, side);
91 panel = FALSE;
92 side = BOTTOM;
94 i++;
98 gtk_main();
100 return EXIT_SUCCESS;