/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2013 Razor team * Authors: * Kuzma Shapran * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include #include #include #include #include "meta_types.h" #include "core.h" #include #include #include #include #include #include #include #include // for basename() #define DEFAULT_CONFIG ".config/lxqt/globalkeyshortcuts.conf" int main(int argc, char *argv[]) { bool wrongArgs = false; bool printHelp = false; bool runAsDaemon = false; bool useSyslog = false; bool minLogLevelSet = false; int minLogLevel = LOG_NOTICE; bool multipleActionsBehaviourSet = false; MultipleActionsBehaviour multipleActionsBehaviour = MULTIPLE_ACTIONS_BEHAVIOUR_FIRST; QStringList configFiles; static struct option longOptions[] = { {"no-daemon", no_argument, 0, 'n'}, {"daemon", no_argument, 0, 'd'}, {"use-syslog", no_argument, 0, 's'}, {"log-level", required_argument, 0, 'l'}, {"multiple-actions-behaviour", required_argument, 0, 'm'}, {"config-file", required_argument, 0, 'f'}, {"help", no_argument, 0, 'h'}, {0, 0, 0, 0} }; for (;;) { int optionIndex = 0; int c = getopt_long(argc, argv, "h?", longOptions, &optionIndex); if (c == -1) { break; } switch (c) { case 'n': runAsDaemon = false; break; case 'd': runAsDaemon = true; break; case 's': useSyslog = true; break; case 'l': if (!strcmp(optarg, "error")) { minLogLevel = LOG_ERR; } else if (!strcmp(optarg, "warning")) { minLogLevel = LOG_WARNING; } else if (!strcmp(optarg, "notice")) { minLogLevel = LOG_NOTICE; } else if (!strcmp(optarg, "info")) { minLogLevel = LOG_INFO; } else if (!strcmp(optarg, "debug")) { minLogLevel = LOG_DEBUG; } else { fprintf(stderr, "Invalid minimal log level: %s\n", optarg); wrongArgs = true; printHelp = true; break; } minLogLevelSet = true; break; case 'm': if (!strcmp(optarg, "first")) { multipleActionsBehaviour = MULTIPLE_ACTIONS_BEHAVIOUR_FIRST; } else if (!strcmp(optarg, "last")) { multipleActionsBehaviour = MULTIPLE_ACTIONS_BEHAVIOUR_LAST; } else if (!strcmp(optarg, "all")) { multipleActionsBehaviour = MULTIPLE_ACTIONS_BEHAVIOUR_ALL; } else if (!strcmp(optarg, "none")) { multipleActionsBehaviour = MULTIPLE_ACTIONS_BEHAVIOUR_NONE; } else { fprintf(stderr, "Invalid multiple actions behaviour: %s\n", optarg); wrongArgs = true; printHelp = true; break; } multipleActionsBehaviourSet = true; break; case 'f': configFiles.push_back(QString::fromLocal8Bit(optarg)); break; case '?': case 'h': printHelp = true; break; default: wrongArgs = true; printHelp = true; } } if (printHelp) { printf("Global key shortcuts daemon\n" "\n" "Version: " LXQT_VERSION "\n" "License: GNU Lesser General Public License version 2.1 or later\n" "Copyright: (c) 2013 Razor team\n" "\n" "Usage %s [OPTIONS]\n" "\n" "Possible options are:\n" "\n" " --no-daemon\n" " Run as a usual application, not a daemon\n" " and print messages to stderr.\n" "\n" " --daemon\n" " Run as a daemon, not a usual application\n" " and print messages to syslog.\n" "\n" " --use-syslog\n" " Print messages to syslog if run as a usual application.\n" "\n" " --log-level=VALUE\n" " Set minimal log level.\n" " Possible values are:\n" " error\n" " warning\n" " notice (default)\n" " info\n" " debug .\n" "\n" " --multiple-actions-behaviour=VALUE\n" " Set the behaviour for the case of multiple actions\n" " assigned to the same shortcut.\n" " Possible values are:\n" " first (default)\n" " last\n" " all\n" " none .\n" "\n" " --config-file=FILENAME\n" " Use config file FILENAME. Can be used several times.\n" " The last loaded file is used to save settings.\n" " Default is: ${HOME}/" DEFAULT_CONFIG "\n" "\n" " --help\n" " -h\n" " -?\n" " This help.\n" , basename(argv[0])); return wrongArgs ? EXIT_FAILURE : EXIT_SUCCESS; } if (runAsDaemon) { if (daemon(0, 0) < 0) { fprintf(stderr, "Cannot become a daemon: %s\n", strerror(errno)); return EXIT_FAILURE; } } const char* home = getenv("HOME"); int ignoreIt = chdir((home && *home) ? home : "/"); (void)ignoreIt; if (configFiles.empty() && home && *home) { if( ! QFile::exists(QString::fromLocal8Bit(home) + "/" DEFAULT_CONFIG) ) //Load default settings configFiles.push_back("/etc/xdg/lxqt/globalkeyshortcuts.conf"); configFiles.push_back(QString::fromLocal8Bit(home) + "/" DEFAULT_CONFIG); } LXQt::Application app(argc, argv); Core core(runAsDaemon || useSyslog, minLogLevelSet, minLogLevel, configFiles, multipleActionsBehaviourSet, multipleActionsBehaviour); if (!core.ready()) { return EXIT_FAILURE; } return app.exec(); }