// -*- mode: C++; indent-tabs-mode: nil; -*-
-// main.cc for Epistory - a key handler for NETWM/EWMH window managers.
+// main.cc for Epistrophy - a key handler for NETWM/EWMH window managers.
// Copyright (c) 2002 - 2002 Ben Jansens <ben at orodu.net>
//
// Permission is hereby granted, free of charge, to any person obtaining a
#endif // HAVE_CONFIG_H
extern "C" {
-#include <X11/Xlib.h>
-
#ifdef HAVE_UNISTD_H
# include <sys/types.h>
# include <unistd.h>
#endif // HAVE_UNISTD_H
-#ifdef HAVE_SIGNAL_H
-# include <signal.h>
-#endif // HAVE_SIGNAL_H
-
-#ifdef HAVE_SYS_SIGNAL_H
-# include <sys/signal.h>
-#endif // HAVE_SYS_SIGNAL_H
+#ifdef HAVE_STDIO_H
+# include <stdio.h>
+#endif // HAVE_STDIO_H
-#ifdef HAVE_LIBGEN_H
-# include <libgen.h>
-#endif // HAVE_LIBGEN_H
+#ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+#endif // HAVE_STDLIB_H
}
#include <iostream>
+#include <string>
using std::cout;
using std::endl;
-
-bool _shutdown = false;
-char **_argv;
-char *_display_name = 0;
-Display *_display = 0;
-
-#ifdef HAVE_SIGACTION
-static void signalhandler(int sig)
-#else // HAVE_SIGACTION
-static RETSIGTYPE signalhandler(int sig)
-#endif // HAVE_SIGACTION
-{
- switch (sig) {
- case SIGSEGV:
- cout << "Segmentation fault. Aborting and dumping core.\n";
- abort();
- case SIGHUP:
- cout << "Restarting on request.\n";
- execvp(_argv[0], _argv);
- execvp(basename(_argv[0]), _argv);
- }
- _shutdown = true;
-
-#ifndef HAVE_SIGACTION
- // assume broken, braindead sysv signal semantics
- signal(sig, (RETSIGTYPE (*)(int)) signalhandler);
-#endif // HAVE_SIGACTION
-}
-
-
-int main(int, char **argv) {
- _argv = argv;
-
-#ifdef HAVE_SIGACTION
- struct sigaction action;
-
- action.sa_handler = signalhandler;
- action.sa_mask = sigset_t();
- action.sa_flags = SA_NOCLDSTOP | SA_NODEFER;
-
- sigaction(SIGPIPE, &action, NULL);
- sigaction(SIGSEGV, &action, NULL);
- sigaction(SIGFPE, &action, NULL);
- sigaction(SIGTERM, &action, NULL);
- sigaction(SIGINT, &action, NULL);
- sigaction(SIGHUP, &action, NULL);
-#else // !HAVE_SIGACTION
- signal(SIGPIPE, (RETSIGTYPE (*)(int)) signalhandler);
- signal(SIGSEGV, (RETSIGTYPE (*)(int)) signalhandler);
- signal(SIGFPE, (RETSIGTYPE (*)(int)) signalhandler);
- signal(SIGTERM, (RETSIGTYPE (*)(int)) signalhandler);
- signal(SIGINT, (RETSIGTYPE (*)(int)) signalhandler);
- signal(SIGHUP, (RETSIGTYPE (*)(int)) signalhandler);
-#endif // HAVE_SIGACTION
-
- _display = XOpenDisplay(_display_name);
- if (! _display) {
- cout << "Connection to X server '" << _display_name << "' failed.\n";
- return 1;
- }
-
- while (! _shutdown) {
- usleep(500);
+using std::string;
+
+#include "epist.hh"
+#include "../../src/i18n.hh"
+
+I18n i18n;
+
+int main(int argc, char **argv) {
+ i18n.openCatalog("openbox.cat");
+
+ // parse the command line
+ char *display_name = 0;
+ char *rc_file = 0;
+
+ for (int i = 1; i < argc; ++i) {
+ if (string(argv[i]) == "-display") {
+ if (++i >= argc) {
+ fprintf(stderr, i18n(mainSet, mainDISPLAYRequiresArg,
+ "error: '-display' requires an argument\n"));
+ exit(1);
+ }
+ display_name = argv[i];
+ } else if (string(argv[i]) == "-rc") {
+ if (++i >= argc) {
+ fprintf(stderr, i18n(mainSet, mainRCRequiresArg,
+ "error: '-rc' requires an argument\n"));
+ exit(1);
+ }
+ rc_file = argv[i];
+ }
}
-
- XCloseDisplay(_display);
+
+ epist ep(argv, display_name, rc_file);
+ ep.eventLoop();
return 0;
}