diff --git a/Makefile.in b/Makefile.in index e0b858d..4414ee5 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1,14 +1,14 @@ -obj = spnavcfg.o front_gtk.o back.o cfgfile.o -dep = $(obj:.o=.d) +src = $(wildcard src/*.c) +obj = $(src:.c=.o) +dep = $(src:.c=.d) bin = spnavcfg -warn = -Wall +warn = -pedantic -Wall -CC = gcc +CC ?= gcc SED = sed -INSTALL = install -CFLAGS = -pedantic $(warn) $(dbg) $(opt) `pkg-config --cflags gtk+-2.0 gmodule-export-2.0` \ - $(add_cflags) +CFLAGS = $(warn) $(dbg) $(opt) `pkg-config --cflags gtk+-2.0 gmodule-export-2.0` \ + $(add_cflags) -MMD LDFLAGS = `pkg-config --libs gtk+-2.0 gmodule-export-2.0` -lX11 $(add_ldflags) $(bin): $(obj) @@ -16,23 +16,26 @@ $(bin): $(obj) -include $(dep) -%.o: $(srcdir)/%.c | $(srcdir)/ui.h +src/main.o: src/main.c src/ui.h $(CC) $(CFLAGS) -c $< -o $@ - $(CPP) $(CFLAGS) $< -MM -MT $@ >$(@:.o=.d) -$(srcdir)/ui.h: $(srcdir)/ui/ui.xml +src/ui.h: ui/ui.xml echo 'static const char *ui_xml =' >$@ $(SED) 's/"/\\"/g; s/^.*$$/ "&\\n"/' $< >>$@ echo ';' >>$@ .PHONY: clean clean: - rm -f $(obj) $(bin) $(srcdir)/ui.h + rm -f $(obj) $(bin) src/ui.h + +.PHONY: cleandep +cleandep: + rm -f $(dep) .PHONY: install install: - $(INSTALL) -d $(DESTDIR)$(PREFIX)/bin - $(INSTALL) -m 4775 $(bin) $(DESTDIR)$(PREFIX)/bin/$(bin) + mkdir -p $(DESTDIR)$(PREFIX)/bin + cp $(bin) $(DESTDIR)$(PREFIX)/bin/$(bin) for i in 48 128 256; do \ destdir=$(DESTDIR)$(PREFIX)/share/icons/hicolor/$${i}x$${i}/apps; \ mkdir -p $$destdir; \ diff --git a/back.c b/back.c deleted file mode 100644 index f364e31..0000000 --- a/back.c +++ /dev/null @@ -1,138 +0,0 @@ -/* -spnavcfg - an interactive GUI configurator for the spacenavd daemon. -Copyright (C) 2007-2009 John Tsiombikas - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program 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 General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ -#include -#include -#include -#include -#include -#include -#include -#include "cfgfile.h" -#include "cmd.h" - -#define CFGFILE "/etc/spnavrc" -#define PIDFILE "/var/run/spnavd.pid" - -int get_daemon_pid(void); -static int update_cfg(void); -static void sig(int s); - -static struct cfg cfg; -static int dpid = -1; - -int backend(int pfd) -{ - signal(SIGTERM, sig); - - for(;;) { - ssize_t res; - int cmd, tmp; - - /* get command */ - cmd = 0; - if(read(pfd, &cmd, 1) == -1 && errno != EINTR) { - perror("pipe read blew up in my face! wtf"); - return -1; - } - - switch(cmd) { - case CMD_PING: - tmp = (dpid = get_daemon_pid()) != -1; - write(pfd, &tmp, 1); - break; - - case CMD_CFG: - { - char *buf = (char*)&cfg; - int sz = sizeof cfg; - - while(sz && (res = read(pfd, buf, sz)) > 0) { - buf += res; - sz -= res; - } - update_cfg(); - } - break; - - case CMD_STARTX: - case CMD_STOPX: - if(dpid == -1) { - if((dpid = get_daemon_pid()) == -1) { - return -1; - } - } - if(kill(dpid, cmd == CMD_STARTX ? SIGUSR1 : SIGUSR2) == -1) { - if(errno != EPERM) { - dpid = -1; - kill(getppid(), SIGUSR2); - } - } - break; - - default: - fprintf(stderr, "unknown CMD: %d\n", (int)cmd); - break; - } - } - - return 0; -} - -int get_daemon_pid(void) -{ - FILE *fp; - char buf[64]; - - if(!(fp = fopen(PIDFILE, "r"))) { - fprintf(stderr, "no spacenav pid file, can't find daemon\n"); - return -1; - } - if(!fgets(buf, sizeof buf, fp) || !isdigit(buf[0])) { - fprintf(stderr, "corrupted pidfile, can't find the daemon\n"); - fclose(fp); - return -1; - } - fclose(fp); - return atoi(buf); -} - -static int update_cfg(void) -{ - if(write_cfg(CFGFILE, &cfg) == -1) { - fprintf(stderr, "failed to update config file\n"); - return -1; - } - - if(dpid == -1) { - if((dpid = get_daemon_pid()) == -1) { - return -1; - } - } - - if(kill(dpid, SIGHUP) == -1 && errno != EPERM) { - dpid = -1; /* invalidate pid, will be searched again next time */ - return -1; - } - - return 0; -} - -static void sig(int s) -{ - _exit(0); -} diff --git a/cfgfile.c b/cfgfile.c deleted file mode 100644 index 5a9c502..0000000 --- a/cfgfile.c +++ /dev/null @@ -1,473 +0,0 @@ -/* -spnavcfg - an interactive GUI configurator for the spacenavd daemon. -Copyright (C) 2007-2019 John Tsiombikas - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program 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 General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#include -#include -#include -#include -#include -#include -#include "cfgfile.h" - -enum {TX, TY, TZ, RX, RY, RZ}; - -static const int def_axmap[] = {0, 2, 1, 3, 5, 4}; -static const int def_axinv[] = {0, 1, 1, 0, 1, 1}; - -void default_cfg(struct cfg *cfg) -{ - int i; - - memset(cfg, 0, sizeof *cfg); - - cfg->sensitivity = 1.0; - for(i=0; i<3; i++) { - cfg->sens_trans[i] = cfg->sens_rot[i] = 1.0; - } - - for(i=0; i<6; i++) { - cfg->dead_threshold[i] = 2; - } - - cfg->led = LED_ON; - cfg->grab_device = 1; - - for(i=0; i<6; i++) { - cfg->invert[i] = def_axinv[i]; - cfg->map_axis[i] = def_axmap[i]; - } - - for(i=0; imap_button[i] = i; - cfg->kbmap_str[i] = 0; - cfg->kbmap[i] = 0; - } - - cfg->repeat_msec = -1; - - for(i=0; idevname[i] = 0; - cfg->devid[i][0] = cfg->devid[i][1] = -1; - } -} - -#define EXPECT(cond) \ - do { \ - if(!(cond)) { \ - fprintf(stderr, "%s: invalid value for %s\n", __func__, key_str); \ - continue; \ - } \ - } while(0) - -int read_cfg(const char *fname, struct cfg *cfg) -{ - FILE *fp; - char buf[512]; - struct flock flk; - int num_devid = 0; - /*int num_devnames = 0;*/ - - default_cfg(cfg); - - printf("reading config file: %s\n", fname); - if(!(fp = fopen(fname, "r"))) { - fprintf(stderr, "failed to open config file %s: %s. using defaults.\n", fname, strerror(errno)); - return -1; - } - - /* acquire shared read lock */ - flk.l_type = F_RDLCK; - flk.l_start = flk.l_len = 0; - flk.l_whence = SEEK_SET; - while(fcntl(fileno(fp), F_SETLKW, &flk) == -1); - - while(fgets(buf, sizeof buf, fp)) { - int isint, isfloat, ival, i, bnidx, axisidx; - float fval; - char *endp, *key_str, *val_str, *line = buf; - while(*line == ' ' || *line == '\t') line++; - - if(!*line || *line == '\n' || *line == '\r' || *line == '#') { - continue; - } - - if(!(key_str = strtok(line, " =\n\t\r"))) { - fprintf(stderr, "invalid config line: %s, skipping.\n", line); - continue; - } - if(!(val_str = strtok(0, " =\n\t\r"))) { - fprintf(stderr, "missing value for config key: %s\n", key_str); - continue; - } - - ival = strtol(val_str, &endp, 10); - isint = (endp > val_str); - - fval = strtod(val_str, &endp); - isfloat = (endp > val_str); - - if(strcmp(key_str, "repeat-interval") == 0) { - EXPECT(isint); - cfg->repeat_msec = ival; - - } else if(strcmp(key_str, "dead-zone") == 0) { - EXPECT(isint); - for(i=0; i<6; i++) { - cfg->dead_threshold[i] = ival; - } - - } else if(strcmp(key_str, "dead-zone-translation-x") == 0) { - EXPECT(isint); - cfg->dead_threshold[0] = ival; - - } else if(strcmp(key_str, "dead-zone-translation-y") == 0) { - EXPECT(isint); - cfg->dead_threshold[1] = ival; - - } else if(strcmp(key_str, "dead-zone-translation-z") == 0) { - EXPECT(isint); - cfg->dead_threshold[2] = ival; - - } else if(strcmp(key_str, "dead-zone-rotation-x") == 0) { - EXPECT(isint); - cfg->dead_threshold[3] = ival; - - } else if(strcmp(key_str, "dead-zone-rotation-y") == 0) { - EXPECT(isint); - cfg->dead_threshold[4] = ival; - - } else if(strcmp(key_str, "dead-zone-rotation-z") == 0) { - EXPECT(isint); - cfg->dead_threshold[5] = ival; - - } else if(strcmp(key_str, "sensitivity") == 0) { - EXPECT(isfloat); - cfg->sensitivity = fval; - - } else if(strcmp(key_str, "sensitivity-translation") == 0) { - EXPECT(isfloat); - cfg->sens_trans[0] = cfg->sens_trans[1] = cfg->sens_trans[2] = fval; - - } else if(strcmp(key_str, "sensitivity-translation-x") == 0) { - EXPECT(isfloat); - cfg->sens_trans[0] = fval; - - } else if(strcmp(key_str, "sensitivity-translation-y") == 0) { - EXPECT(isfloat); - cfg->sens_trans[1] = fval; - - } else if(strcmp(key_str, "sensitivity-translation-z") == 0) { - EXPECT(isfloat); - cfg->sens_trans[2] = fval; - - } else if(strcmp(key_str, "sensitivity-rotation") == 0) { - EXPECT(isfloat); - cfg->sens_rot[0] = cfg->sens_rot[1] = cfg->sens_rot[2] = fval; - - } else if(strcmp(key_str, "sensitivity-rotation-x") == 0) { - EXPECT(isfloat); - cfg->sens_rot[0] = fval; - - } else if(strcmp(key_str, "sensitivity-rotation-y") == 0) { - EXPECT(isfloat); - cfg->sens_rot[1] = fval; - - } else if(strcmp(key_str, "sensitivity-rotation-z") == 0) { - EXPECT(isfloat); - cfg->sens_rot[2] = fval; - - } else if(strcmp(key_str, "invert-rot") == 0) { - if(strchr(val_str, 'x')) { - cfg->invert[RX] = !def_axinv[RX]; - } - if(strchr(val_str, 'y')) { - cfg->invert[RY] = !def_axinv[RY]; - } - if(strchr(val_str, 'z')) { - cfg->invert[RZ] = !def_axinv[RZ]; - } - - } else if(strcmp(key_str, "invert-trans") == 0) { - if(strchr(val_str, 'x')) { - cfg->invert[TX] = !def_axinv[TX]; - } - if(strchr(val_str, 'y')) { - cfg->invert[TY] = !def_axinv[TY]; - } - if(strchr(val_str, 'z')) { - cfg->invert[TZ] = !def_axinv[TZ]; - } - - } else if(strcmp(key_str, "swap-yz") == 0) { - int i, swap_yz = 0; - - if(isint) { - swap_yz = ival; - } else { - if(strcmp(val_str, "true") == 0 || strcmp(val_str, "on") == 0 || strcmp(val_str, "yes") == 0) { - swap_yz = 1; - } else if(strcmp(val_str, "false") == 0 || strcmp(val_str, "off") == 0 || strcmp(val_str, "no") == 0) { - swap_yz = 0; - } else { - fprintf(stderr, "invalid configuration value for %s, expected a boolean value.\n", key_str); - continue; - } - } - - for(i=0; i<6; i++) { - cfg->map_axis[i] = swap_yz ? i : def_axmap[i]; - } - - } else if(sscanf(key_str, "axismap%d", &axisidx) == 1) { - EXPECT(isint); - if(axisidx < 0 || axisidx >= MAX_AXES) { - fprintf(stderr, "invalid option %s, valid input axis numbers 0 - %d\n", key_str, MAX_AXES - 1); - continue; - } - if(ival < 0 || ival >= 6) { - fprintf(stderr, "invalid config value for %s, expected a number from 0 to 6\n", key_str); - continue; - } - cfg->map_axis[axisidx] = ival; - - } else if(sscanf(key_str, "bnmap%d", &bnidx) == 1) { - EXPECT(isint); - if(bnidx < 0 || bnidx >= MAX_BUTTONS || ival < 0 || ival >= MAX_BUTTONS) { - fprintf(stderr, "invalid configuration value for %s, expected a number from 0 to %d\n", key_str, MAX_BUTTONS); - continue; - } - if(cfg->map_button[bnidx] != bnidx) { - fprintf(stderr, "warning: multiple mappings for button %d\n", bnidx); - } - cfg->map_button[bnidx] = ival; - - } else if(sscanf(key_str, "kbmap%d", &bnidx) == 1) { - if(bnidx < 0 || bnidx >= MAX_BUTTONS) { - fprintf(stderr, "invalid configuration value for %s, expected a number from 0 to %d\n", key_str, MAX_BUTTONS); - continue; - } - if(cfg->kbmap_str[bnidx]) { - fprintf(stderr, "warning: multiple keyboard mappings for button %d: %s -> %s\n", bnidx, cfg->kbmap_str[bnidx], val_str); - free(cfg->kbmap_str[bnidx]); - } - cfg->kbmap_str[bnidx] = strdup(val_str); - - } else if(strcmp(key_str, "led") == 0) { - if(isint) { - cfg->led = ival; - } else { - if(strcmp(val_str, "auto") == 0) { - cfg->led = LED_AUTO; - } else if(strcmp(val_str, "true") == 0 || strcmp(val_str, "on") == 0 || strcmp(val_str, "yes") == 0) { - cfg->led = LED_ON; - } else if(strcmp(val_str, "false") == 0 || strcmp(val_str, "off") == 0 || strcmp(val_str, "no") == 0) { - cfg->led = LED_OFF; - } else { - fprintf(stderr, "invalid configuration value for %s, expected a boolean value.\n", key_str); - continue; - } - } - - } else if(strcmp(key_str, "grab") == 0) { - if(isint) { - cfg->grab_device = ival; - } else { - if(strcmp(val_str, "true") == 0 || strcmp(val_str, "on") == 0 || strcmp(val_str, "yes") == 0) { - cfg->grab_device = 1; - } else if(strcmp(val_str, "false") == 0 || strcmp(val_str, "off") == 0 || strcmp(val_str, "no") == 0) { - cfg->grab_device = 0; - } else { - fprintf(stderr, "invalid configuration value for %s, expected a boolean value.\n", key_str); - continue; - } - } - - } else if(strcmp(key_str, "serial") == 0) { - strncpy(cfg->serial_dev, val_str, PATH_MAX - 1); - - } else if(strcmp(key_str, "device-id") == 0) { - unsigned int vendor, prod; - if(sscanf(val_str, "%x:%x", &vendor, &prod) == 2) { - cfg->devid[num_devid][0] = (int)vendor; - cfg->devid[num_devid][1] = (int)prod; - num_devid++; - } else { - fprintf(stderr, "invalid configuration value for %s, expected a vendorid:productid pair\n", key_str); - continue; - } - - } else { - fprintf(stderr, "unrecognized config option: %s\n", key_str); - } - } - - /* unlock */ - flk.l_type = F_UNLCK; - flk.l_start = flk.l_len = 0; - flk.l_whence = SEEK_SET; - fcntl(fileno(fp), F_SETLK, &flk); - - fclose(fp); - return 0; -} - -int write_cfg(const char *fname, struct cfg *cfg) -{ - int i, wrote_comment; - FILE *fp; - struct flock flk; - - if(!(fp = fopen(fname, "w"))) { - fprintf(stderr, "failed to write config file %s: %s\n", fname, strerror(errno)); - return -1; - } - - /* acquire exclusive write lock */ - flk.l_type = F_WRLCK; - flk.l_start = flk.l_len = 0; - flk.l_whence = SEEK_SET; - while(fcntl(fileno(fp), F_SETLKW, &flk) == -1); - - fprintf(fp, "# sensitivity is multiplied with every motion (1.0 normal).\n"); - fprintf(fp, "sensitivity = %.3f\n\n", cfg->sensitivity); - - fprintf(fp, "# separate sensitivity for rotation and translation.\n"); - - if(cfg->sens_trans[0] == cfg->sens_trans[1] && cfg->sens_trans[1] == cfg->sens_trans[2]) { - fprintf(fp, "sensitivity-translation = %.3f\n", cfg->sens_trans[0]); - } else { - fprintf(fp, "sensitivity-translation-x = %.3f\n", cfg->sens_trans[0]); - fprintf(fp, "sensitivity-translation-y = %.3f\n", cfg->sens_trans[1]); - fprintf(fp, "sensitivity-translation-z = %.3f\n", cfg->sens_trans[2]); - } - - if(cfg->sens_rot[0] == cfg->sens_rot[1] && cfg->sens_rot[1] == cfg->sens_rot[2]) { - fprintf(fp, "sensitivity-rotation = %.3f\n", cfg->sens_rot[0]); - } else { - fprintf(fp, "sensitivity-rotation-x = %.3f\n", cfg->sens_rot[0]); - fprintf(fp, "sensitivity-rotation-y = %.3f\n", cfg->sens_rot[1]); - fprintf(fp, "sensitivity-rotation-z = %.3f\n", cfg->sens_rot[2]); - } - fputc('\n', fp); - - fprintf(fp, "# dead zone; any motion less than this number, is discarded as noise.\n"); - - if(cfg->dead_threshold[0] == cfg->dead_threshold[1] && cfg->dead_threshold[1] == cfg->dead_threshold[2] && cfg->dead_threshold[2] == cfg->dead_threshold[3] && cfg->dead_threshold[3] == cfg->dead_threshold[4] && cfg->dead_threshold[4] == cfg->dead_threshold[5]) { - fprintf(fp, "dead-zone = %d\n", cfg->dead_threshold[0]); - } else { - fprintf(fp, "dead-zone-translation-x = %d\n", cfg->dead_threshold[0]); - fprintf(fp, "dead-zone-translation-y = %d\n", cfg->dead_threshold[1]); - fprintf(fp, "dead-zone-translation-z = %d\n", cfg->dead_threshold[2]); - fprintf(fp, "dead-zone-rotation-x = %d\n", cfg->dead_threshold[3]); - fprintf(fp, "dead-zone-rotation-y = %d\n", cfg->dead_threshold[4]); - fprintf(fp, "dead-zone-rotation-z = %d\n", cfg->dead_threshold[5]); - } - fputc('\n', fp); - - fprintf(fp, "# repeat interval; non-deadzone events are repeated every so many milliseconds (-1 to disable)\n"); - fprintf(fp, "repeat-interval = %d\n", cfg->repeat_msec); - - if(cfg->invert[0] != def_axinv[0] || cfg->invert[1] != def_axinv[1] || cfg->invert[2] != def_axinv[2]) { - fprintf(fp, "# invert translations on some axes.\n"); - fprintf(fp, "invert-trans = "); - if(cfg->invert[0] != def_axinv[0]) fputc('x', fp); - if(cfg->invert[1] != def_axinv[1]) fputc('y', fp); - if(cfg->invert[2] != def_axinv[2]) fputc('z', fp); - fputs("\n\n", fp); - } - - if(cfg->invert[3] != def_axinv[3] || cfg->invert[4] != def_axinv[4] || cfg->invert[5] != def_axinv[5]) { - fprintf(fp, "# invert rotations around some axes.\n"); - fprintf(fp, "invert-rot = "); - if(cfg->invert[3] != def_axinv[3]) fputc('x', fp); - if(cfg->invert[4] != def_axinv[4]) fputc('y', fp); - if(cfg->invert[5] != def_axinv[5]) fputc('z', fp); - fputs("\n\n", fp); - } - - fprintf(fp, "# swap translation along Y and Z axes\n"); - fprintf(fp, "swap-yz = %s\n\n", cfg->map_axis[1] == def_axmap[1] ? "false" : "true"); - - wrote_comment = 0; - for(i=0; imap_button[i] != i) { - if(!wrote_comment) { - fprintf(fp, "# button mappings\n"); - wrote_comment = 1; - } - fprintf(fp, "bnmap%d = %d\n", i, cfg->map_button[i]); - } - } - if(wrote_comment) { - fputc('\n', fp); - } - - wrote_comment = 0; - for(i=0; ikbmap_str[i]) { - if(!wrote_comment) { - fprintf(fp, "# button to key mappings\n"); - wrote_comment = 1; - } - fprintf(fp, "kbmap%d = %s\n", i, cfg->kbmap_str[i]); - } - } - if(wrote_comment) { - fputc('\n', fp); - } - - fprintf(fp, "# led status: on, off, or auto (turn on when a client is connected)\n"); - fprintf(fp, "led = %s\n\n", (cfg->led ? (cfg->led == LED_AUTO ? "auto" : "on") : "off")); - - if(!cfg->grab_device) { - fprintf(fp, "# Don't grab USB device\n"); - fprintf(fp, "# Grabbing the device ensures that other programs won't be able to use it without\n"); - fprintf(fp, "# talking to spacenavd. For instance some versions of Xorg will use the device to move\n"); - fprintf(fp, "# the mouse pointer if we don't grab it.\n"); - fprintf(fp, "# Set this to false if you want to use programs that try to talk to the device directly\n"); - fprintf(fp, "# such as google earth, then follow FAQ 11 http://spacenav.sourceforge.net/faq.html#faq11\n"); - fprintf(fp, "# to force the X server to ignore the device\n"); - fprintf(fp, "grab = false\n\n"); - } - - fprintf(fp, "# serial device\n"); - fprintf(fp, "# Set this only if you have a serial device, and make sure you specify the\n"); - fprintf(fp, "# correct device file (On linux usually: /dev/ttyS0, /dev/ttyS1, /dev/ttyUSB0 ... etc).\n"); - if(cfg->serial_dev[0]) { - fprintf(fp, "serial = %s\n\n", cfg->serial_dev); - } else { - fprintf(fp, "#serial = /dev/ttyS0\n\n"); - } - - fprintf(fp, "List of additional USB devices to use (multiple devices can be listed)"); - for(i=0; idevid[i][0] != -1 && cfg->devid[i][1] != -1) { - fprintf(fp, "device-id = %x:%x\n", cfg->devid[i][0], cfg->devid[i][1]); - } - } - fprintf(fp, "\n"); - - /* unlock */ - flk.l_type = F_UNLCK; - flk.l_start = flk.l_len = 0; - flk.l_whence = SEEK_SET; - fcntl(fileno(fp), F_SETLK, &flk); - - fclose(fp); - return 0; -} diff --git a/cfgfile.h b/cfgfile.h deleted file mode 100644 index dfed8c9..0000000 --- a/cfgfile.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -spnavcfg - an interactive GUI configurator for the spacenavd daemon. -Copyright (C) 2007-2019 John Tsiombikas - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program 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 General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef CFGFILE_H_ -#define CFGFILE_H_ - -#include - -#define MAX_AXES 64 -#define MAX_BUTTONS 64 -#define MAX_CUSTOM 64 - -enum { - LED_OFF = 0, - LED_ON = 1, - LED_AUTO = 2 -}; - -struct cfg { - float sensitivity, sens_trans[3], sens_rot[3]; - int dead_threshold[MAX_AXES]; - int invert[MAX_AXES]; - int map_axis[MAX_AXES]; - int map_button[MAX_BUTTONS]; - int kbmap[MAX_BUTTONS]; - char *kbmap_str[MAX_BUTTONS]; - int led, grab_device; - char serial_dev[PATH_MAX]; - int repeat_msec; - - char *devname[MAX_CUSTOM]; /* custom USB device name list */ - int devid[MAX_CUSTOM][2]; /* custom USB vendor/product id list */ -}; - -void default_cfg(struct cfg *cfg); -int read_cfg(const char *fname, struct cfg *cfg); -int write_cfg(const char *fname, struct cfg *cfg); - -#endif /* CFGFILE_H_ */ diff --git a/cmd.h b/cmd.h deleted file mode 100644 index e63ae67..0000000 --- a/cmd.h +++ /dev/null @@ -1,28 +0,0 @@ -/* -spnavcfg - an interactive GUI configurator for the spacenavd daemon. -Copyright (C) 2007-2009 John Tsiombikas - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program 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 General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ -#ifndef CMD_H_ -#define CMD_H_ - -enum { - CMD_PING, /* check daemon status */ - CMD_CFG, /* update configuration (and HUP daemon) */ - CMD_STARTX, /* signal daemon to enable X protocol */ - CMD_STOPX /* yada yada stop X protocol */ -}; - -#endif /* CMD_H_ */ diff --git a/configure b/configure index 3ffbbb9..5260d42 100755 --- a/configure +++ b/configure @@ -7,8 +7,6 @@ OPT=yes DBG=yes X11=yes -srcdir="`dirname "$0"`" - for arg; do case "$arg" in --prefix=*) @@ -48,7 +46,6 @@ echo # create Makefile echo 'creating Makefile ...' echo "PREFIX = $PREFIX" >Makefile -echo "srcdir = $srcdir" >>Makefile if [ "$DBG" = 'yes' ]; then echo 'dbg = -g' >>Makefile @@ -65,7 +62,7 @@ if [ -n "$LDFLAGS" ]; then echo "add_ldflags = $LDFLAGS" >>Makefile fi -cat "$srcdir/Makefile.in" >>Makefile +cat "Makefile.in" >>Makefile echo '' echo 'Done. You can now type make (or gmake) to compile spnavcfg.' diff --git a/spnavcfg.c b/spnavcfg.c deleted file mode 100644 index d1077b9..0000000 --- a/spnavcfg.c +++ /dev/null @@ -1,59 +0,0 @@ -/* -spnavcfg - an interactive GUI configurator for the spacenavd daemon. -Copyright (C) 2007-2009 John Tsiombikas - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program 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 General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ -#include -#include -#include -#include -#include -#include -#include - -void frontend(int pfd); -void backend(int pfd); - -static void sig(int s); - -int main(int argc, char **argv) -{ - int cpid; - int pipefd[2]; - - signal(SIGCHLD, sig); - - /*pipe(pipefd);*/ - socketpair(AF_UNIX, SOCK_STREAM, 0, pipefd); - if((cpid = fork()) == 0) { - /* child should be the setuid-root backend, write cfg and kill */ - close(pipefd[1]); - backend(pipefd[0]); - _exit(0); - } else { - /* parent, GUI frontend */ - close(pipefd[0]); - frontend(pipefd[1]); - kill(cpid, SIGTERM); - } - return 0; -} - -static void sig(int s) -{ - if(s == SIGCHLD) { - wait(0); - } -} diff --git a/front_gtk.c b/src/main.c similarity index 55% rename from front_gtk.c rename to src/main.c index e4c2cd7..e6ad8a8 100644 --- a/front_gtk.c +++ b/src/main.c @@ -1,6 +1,6 @@ /* spnavcfg - an interactive GUI configurator for the spacenavd daemon. -Copyright (C) 2007-2009 John Tsiombikas +Copyright (C) 2007-2022 John Tsiombikas This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -24,12 +24,8 @@ along with this program. If not, see . #include #include #include -#include "cfgfile.h" -#include "cmd.h" #include "ui.h" -#define CFGFILE "/etc/spnavrc" - #define CHK_AXINV_TRANS_X "axinv_trans_x" #define CHK_AXINV_TRANS_Y "axinv_trans_y" #define CHK_AXINV_TRANS_Z "axinv_trans_z" @@ -67,22 +63,16 @@ along with this program. If not, see . -int get_daemon_pid(void); /* back.c */ - enum {TX, TY, TZ, RX, RY, RZ}; static const int def_axinv[] = {0, 1, 1, 0, 1, 1}; -static void update_cfg(void); static void create_ui(void); G_MODULE_EXPORT void chk_handler(GtkToggleButton *bn, gpointer data); G_MODULE_EXPORT void slider_handler(GtkRange *rng, gpointer data); G_MODULE_EXPORT void bn_handler(GtkButton *bn, gpointer data); -static struct cfg cfg; -static int pipe_fd; - struct widgets { GtkWidget *win; @@ -105,23 +95,9 @@ static struct widgets widgets; - -void frontend(int pfd) +int main(int argc, char **argv) { - int argc = 0; - int ruid = getuid(); -#ifdef __linux__ - int setresuid(uid_t ruid, uid_t euid, uid_t suid); - setresuid(ruid, ruid, ruid); -#else - seteuid(ruid); -#endif - - pipe_fd = pfd; - - gtk_init(&argc, 0); - - read_cfg(CFGFILE, &cfg); + gtk_init(&argc, argv); create_ui(); @@ -130,13 +106,6 @@ void frontend(int pfd) gtk_main(); } -static void update_cfg(void) -{ - int cmd = CMD_CFG; - write(pipe_fd, &cmd, 1); - write(pipe_fd, &cfg, sizeof cfg); -} - static int query_x11(void) { Display *dpy; @@ -174,12 +143,8 @@ static int query_x11(void) XCloseDisplay(dpy); /* found a magellan window, still it might belong to the 3dxsrv driver */ - if(get_daemon_pid() == -1) { - return 0; - } - - /* this could still mean that the daemon crashed and left behind the pidfile... */ - return 1; /* ... but wtf */ + /* XXX ping daemon */ + return 1; } static void create_ui(void) @@ -192,70 +157,70 @@ static void create_ui(void) widgets.win = GTK_WIDGET(gtk_builder_get_object(gtk_builder, "main")); - obj = gtk_builder_get_object (gtk_builder, CHK_AXINV_TRANS_X); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(obj), cfg.invert[TX] != def_axinv[TX]); - obj = gtk_builder_get_object (gtk_builder, CHK_AXINV_TRANS_Y); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(obj), cfg.invert[TY] != def_axinv[TY]); - obj = gtk_builder_get_object (gtk_builder, CHK_AXINV_TRANS_Z); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(obj), cfg.invert[TZ] != def_axinv[TZ]); - obj = gtk_builder_get_object (gtk_builder, CHK_AXINV_ROT_X); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(obj), cfg.invert[RX] != def_axinv[RX]); - obj = gtk_builder_get_object (gtk_builder, CHK_AXINV_ROT_Y); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(obj), cfg.invert[RY] != def_axinv[RY]); - obj = gtk_builder_get_object (gtk_builder, CHK_AXINV_ROT_Z); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(obj), cfg.invert[RZ] != def_axinv[RZ]); + obj = gtk_builder_get_object(gtk_builder, CHK_AXINV_TRANS_X); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(obj), 0);//cfg.invert[TX] != def_axinv[TX]); + obj = gtk_builder_get_object(gtk_builder, CHK_AXINV_TRANS_Y); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(obj), 0);//cfg.invert[TY] != def_axinv[TY]); + obj = gtk_builder_get_object(gtk_builder, CHK_AXINV_TRANS_Z); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(obj), 0);//cfg.invert[TZ] != def_axinv[TZ]); + obj = gtk_builder_get_object(gtk_builder, CHK_AXINV_ROT_X); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(obj), 0);//cfg.invert[RX] != def_axinv[RX]); + obj = gtk_builder_get_object(gtk_builder, CHK_AXINV_ROT_Y); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(obj), 0);//cfg.invert[RY] != def_axinv[RY]); + obj = gtk_builder_get_object(gtk_builder, CHK_AXINV_ROT_Z); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(obj), 0);//cfg.invert[RZ] != def_axinv[RZ]); - obj = gtk_builder_get_object (gtk_builder, CHK_SWAP_YZ); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(obj), cfg.map_axis[1] == 1); + obj = gtk_builder_get_object(gtk_builder, CHK_SWAP_YZ); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(obj), 0);//cfg.map_axis[1] == 1); - obj = gtk_builder_get_object (gtk_builder, SLIDER_SENS_GLOBAL); - gtk_range_set_value(GTK_RANGE(obj), cfg.sensitivity); + obj = gtk_builder_get_object(gtk_builder, SLIDER_SENS_GLOBAL); + gtk_range_set_value(GTK_RANGE(obj), 1);//cfg.sensitivity); - obj = gtk_builder_get_object (gtk_builder, SLIDER_SENS_TRANS); - gtk_range_set_value(GTK_RANGE(obj), cfg.sens_trans[0]); + obj = gtk_builder_get_object(gtk_builder, SLIDER_SENS_TRANS); + gtk_range_set_value(GTK_RANGE(obj), 1);//cfg.sens_trans[0]); - widgets.slider_sens_trans_x = gtk_builder_get_object (gtk_builder, SLIDER_SENS_TRANS_X); - gtk_range_set_value(GTK_RANGE(widgets.slider_sens_trans_x), cfg.sens_trans[0]); - widgets.slider_sens_trans_y = gtk_builder_get_object (gtk_builder, SLIDER_SENS_TRANS_Y); - gtk_range_set_value(GTK_RANGE(widgets.slider_sens_trans_y), cfg.sens_trans[1]); - widgets.slider_sens_trans_z = gtk_builder_get_object (gtk_builder, SLIDER_SENS_TRANS_Z); - gtk_range_set_value(GTK_RANGE(widgets.slider_sens_trans_z), cfg.sens_trans[2]); + widgets.slider_sens_trans_x = gtk_builder_get_object(gtk_builder, SLIDER_SENS_TRANS_X); + gtk_range_set_value(GTK_RANGE(widgets.slider_sens_trans_x), 1);//cfg.sens_trans[0]); + widgets.slider_sens_trans_y = gtk_builder_get_object(gtk_builder, SLIDER_SENS_TRANS_Y); + gtk_range_set_value(GTK_RANGE(widgets.slider_sens_trans_y), 1);//cfg.sens_trans[1]); + widgets.slider_sens_trans_z = gtk_builder_get_object(gtk_builder, SLIDER_SENS_TRANS_Z); + gtk_range_set_value(GTK_RANGE(widgets.slider_sens_trans_z), 1);//cfg.sens_trans[2]); - obj = gtk_builder_get_object (gtk_builder, SLIDER_SENS_ROT); - gtk_range_set_value(GTK_RANGE(obj), cfg.sens_rot[0]); + obj = gtk_builder_get_object(gtk_builder, SLIDER_SENS_ROT); + gtk_range_set_value(GTK_RANGE(obj), 1);//cfg.sens_rot[0]); - widgets.slider_sens_rot_x = gtk_builder_get_object (gtk_builder, SLIDER_SENS_ROT_X); - gtk_range_set_value(GTK_RANGE(widgets.slider_sens_rot_x), cfg.sens_rot[0]); - widgets.slider_sens_rot_y = gtk_builder_get_object (gtk_builder, SLIDER_SENS_ROT_Y); - gtk_range_set_value(GTK_RANGE(widgets.slider_sens_rot_y), cfg.sens_rot[1]); - widgets.slider_sens_rot_z = gtk_builder_get_object (gtk_builder, SLIDER_SENS_ROT_Z); - gtk_range_set_value(GTK_RANGE(widgets.slider_sens_rot_z), cfg.sens_rot[2]); + widgets.slider_sens_rot_x = gtk_builder_get_object(gtk_builder, SLIDER_SENS_ROT_X); + gtk_range_set_value(GTK_RANGE(widgets.slider_sens_rot_x), 1);//cfg.sens_rot[0]); + widgets.slider_sens_rot_y = gtk_builder_get_object(gtk_builder, SLIDER_SENS_ROT_Y); + gtk_range_set_value(GTK_RANGE(widgets.slider_sens_rot_y), 1);//cfg.sens_rot[1]); + widgets.slider_sens_rot_z = gtk_builder_get_object(gtk_builder, SLIDER_SENS_ROT_Z); + gtk_range_set_value(GTK_RANGE(widgets.slider_sens_rot_z), 1);//cfg.sens_rot[2]); - obj = gtk_builder_get_object (gtk_builder, SLIDER_DEADZONE); - gtk_range_set_value(GTK_RANGE(obj), cfg.dead_threshold[TX]); + obj = gtk_builder_get_object(gtk_builder, SLIDER_DEADZONE); + gtk_range_set_value(GTK_RANGE(obj), 0);//cfg.dead_threshold[TX]); - widgets.slider_deadzone_trans_x = gtk_builder_get_object (gtk_builder, SLIDER_DEADZONE_TRANS_X); - gtk_range_set_value(GTK_RANGE(widgets.slider_deadzone_trans_x), cfg.dead_threshold[TX]); - widgets.slider_deadzone_trans_y = gtk_builder_get_object (gtk_builder, SLIDER_DEADZONE_TRANS_Y); - gtk_range_set_value(GTK_RANGE(widgets.slider_deadzone_trans_y), cfg.dead_threshold[TY]); - widgets.slider_deadzone_trans_z = gtk_builder_get_object (gtk_builder, SLIDER_DEADZONE_TRANS_Z); - gtk_range_set_value(GTK_RANGE(widgets.slider_deadzone_trans_z), cfg.dead_threshold[TZ]); - widgets.slider_deadzone_rot_x = gtk_builder_get_object (gtk_builder, SLIDER_DEADZONE_ROT_X); - gtk_range_set_value(GTK_RANGE(widgets.slider_deadzone_rot_x), cfg.dead_threshold[RX]); - widgets.slider_deadzone_rot_y = gtk_builder_get_object (gtk_builder, SLIDER_DEADZONE_ROT_Y); - gtk_range_set_value(GTK_RANGE(widgets.slider_deadzone_rot_y), cfg.dead_threshold[RY]); - widgets.slider_deadzone_rot_z = gtk_builder_get_object (gtk_builder, SLIDER_DEADZONE_ROT_Z); - gtk_range_set_value(GTK_RANGE(widgets.slider_deadzone_rot_z), cfg.dead_threshold[RZ]); + widgets.slider_deadzone_trans_x = gtk_builder_get_object(gtk_builder, SLIDER_DEADZONE_TRANS_X); + gtk_range_set_value(GTK_RANGE(widgets.slider_deadzone_trans_x), 0);//cfg.dead_threshold[TX]); + widgets.slider_deadzone_trans_y = gtk_builder_get_object(gtk_builder, SLIDER_DEADZONE_TRANS_Y); + gtk_range_set_value(GTK_RANGE(widgets.slider_deadzone_trans_y), 0);//cfg.dead_threshold[TY]); + widgets.slider_deadzone_trans_z = gtk_builder_get_object(gtk_builder, SLIDER_DEADZONE_TRANS_Z); + gtk_range_set_value(GTK_RANGE(widgets.slider_deadzone_trans_z), 0);//cfg.dead_threshold[TZ]); + widgets.slider_deadzone_rot_x = gtk_builder_get_object(gtk_builder, SLIDER_DEADZONE_ROT_X); + gtk_range_set_value(GTK_RANGE(widgets.slider_deadzone_rot_x), 0);//cfg.dead_threshold[RX]); + widgets.slider_deadzone_rot_y = gtk_builder_get_object(gtk_builder, SLIDER_DEADZONE_ROT_Y); + gtk_range_set_value(GTK_RANGE(widgets.slider_deadzone_rot_y), 0);//cfg.dead_threshold[RY]); + widgets.slider_deadzone_rot_z = gtk_builder_get_object(gtk_builder, SLIDER_DEADZONE_ROT_Z); + gtk_range_set_value(GTK_RANGE(widgets.slider_deadzone_rot_z), 0);//cfg.dead_threshold[RZ]); - obj = gtk_builder_get_object (gtk_builder, CHK_GRAB_DEVICE); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(obj), cfg.grab_device); + obj = gtk_builder_get_object(gtk_builder, CHK_GRAB_DEVICE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(obj), 1);//cfg.grab_device); - obj = gtk_builder_get_object (gtk_builder, CHK_ENABLE_LED); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(obj), cfg.led); + obj = gtk_builder_get_object(gtk_builder, CHK_ENABLE_LED); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(obj), 1);//cfg.led); - gtk_builder_connect_signals (gtk_builder, NULL); + gtk_builder_connect_signals(gtk_builder, NULL); - g_object_unref (G_OBJECT (gtk_builder)); + g_object_unref(G_OBJECT(gtk_builder)); } @@ -266,37 +231,14 @@ G_MODULE_EXPORT void chk_handler(GtkToggleButton *bn, gpointer data) const gchar* ctrlname = gtk_buildable_get_name(GTK_BUILDABLE(bn)); if(strcmp(ctrlname, CHK_AXINV_TRANS_X) == 0) { - cfg.invert[TX] = !cfg.invert[TX]; - update_cfg(); } else if(strcmp(ctrlname, CHK_AXINV_TRANS_Y) == 0) { - cfg.invert[TY] = !cfg.invert[TY]; - update_cfg(); } else if(strcmp(ctrlname, CHK_AXINV_TRANS_Z) == 0) { - cfg.invert[TZ] = !cfg.invert[TZ]; - update_cfg(); } else if(strcmp(ctrlname, CHK_AXINV_ROT_X) == 0) { - cfg.invert[RX] = !cfg.invert[RX]; - update_cfg(); } else if(strcmp(ctrlname, CHK_AXINV_ROT_Y) == 0) { - cfg.invert[RY] = !cfg.invert[RY]; - update_cfg(); } else if(strcmp(ctrlname, CHK_AXINV_ROT_Z) == 0) { - cfg.invert[RZ] = !cfg.invert[RZ]; - update_cfg(); } else if(strcmp(ctrlname, CHK_GRAB_DEVICE) == 0) { - cfg.grab_device = state; - update_cfg(); } else if(strcmp(ctrlname, CHK_ENABLE_LED) == 0) { - cfg.led = state; - update_cfg(); } else if(strcmp(ctrlname, CHK_SWAP_YZ) == 0) { - tmp = cfg.map_axis[TY]; - cfg.map_axis[TY] = cfg.map_axis[TZ]; - cfg.map_axis[TZ] = tmp; - tmp = cfg.map_axis[RY]; - cfg.map_axis[RY] = cfg.map_axis[RZ]; - cfg.map_axis[RZ] = tmp; - update_cfg(); } } @@ -308,69 +250,34 @@ G_MODULE_EXPORT void slider_handler(GtkRange *rng, gpointer data) gdouble value = gtk_range_get_value(rng); if(strcmp(ctrlname, SLIDER_SENS_GLOBAL) == 0) { - cfg.sensitivity = gtk_range_get_value(rng); - update_cfg(); } else if(strcmp(ctrlname, SLIDER_SENS_TRANS) == 0) { - cfg.sens_trans[0] = cfg.sens_trans[1] = cfg.sens_trans[2] = value; gtk_range_set_value(GTK_RANGE(widgets.slider_sens_trans_x), value); gtk_range_set_value(GTK_RANGE(widgets.slider_sens_trans_y), value); gtk_range_set_value(GTK_RANGE(widgets.slider_sens_trans_z), value); - update_cfg(); } else if(strcmp(ctrlname, SLIDER_SENS_TRANS_X) == 0) { - cfg.sens_trans[0] = value; - update_cfg(); } else if(strcmp(ctrlname, SLIDER_SENS_TRANS_Y) == 0) { - cfg.sens_trans[1] = value; - update_cfg(); } else if(strcmp(ctrlname, SLIDER_SENS_TRANS_Z) == 0) { - cfg.sens_trans[2] = value; - update_cfg(); } else if(strcmp(ctrlname, SLIDER_SENS_ROT) == 0) { - cfg.sens_rot[0] = cfg.sens_rot[1] = cfg.sens_rot[2] = value; gtk_range_set_value(GTK_RANGE(widgets.slider_sens_rot_x), value); gtk_range_set_value(GTK_RANGE(widgets.slider_sens_rot_y), value); gtk_range_set_value(GTK_RANGE(widgets.slider_sens_rot_z), value); - update_cfg(); } else if(strcmp(ctrlname, SLIDER_SENS_ROT_X) == 0) { - cfg.sens_rot[0] = value; - update_cfg(); } else if(strcmp(ctrlname, SLIDER_SENS_ROT_Y) == 0) { - cfg.sens_rot[1] = value; - update_cfg(); } else if(strcmp(ctrlname, SLIDER_SENS_ROT_Z) == 0) { - cfg.sens_rot[2] = value; - update_cfg(); } else if(strcmp(ctrlname, SLIDER_DEADZONE) == 0) { - for(i=0; i<6; i++) { - cfg.dead_threshold[i] = value; - } gtk_range_set_value(GTK_RANGE(widgets.slider_deadzone_trans_x), value); gtk_range_set_value(GTK_RANGE(widgets.slider_deadzone_trans_y), value); gtk_range_set_value(GTK_RANGE(widgets.slider_deadzone_trans_z), value); gtk_range_set_value(GTK_RANGE(widgets.slider_deadzone_rot_x), value); gtk_range_set_value(GTK_RANGE(widgets.slider_deadzone_rot_y), value); gtk_range_set_value(GTK_RANGE(widgets.slider_deadzone_rot_z), value); - update_cfg(); } else if(strcmp(ctrlname, SLIDER_DEADZONE_TRANS_X) == 0) { - cfg.dead_threshold[TX] = value; - update_cfg(); } else if(strcmp(ctrlname, SLIDER_DEADZONE_TRANS_Y) == 0) { - cfg.dead_threshold[TY] = value; - update_cfg(); } else if(strcmp(ctrlname, SLIDER_DEADZONE_TRANS_Z) == 0) { - cfg.dead_threshold[TZ] = value; - update_cfg(); } else if(strcmp(ctrlname, SLIDER_DEADZONE_ROT_X) == 0) { - cfg.dead_threshold[RX] = value; - update_cfg(); } else if(strcmp(ctrlname, SLIDER_DEADZONE_ROT_Y) == 0) { - cfg.dead_threshold[RY] = value; - update_cfg(); } else if(strcmp(ctrlname, SLIDER_DEADZONE_ROT_Z) == 0) { - cfg.dead_threshold[RZ] = value; - update_cfg(); } - } G_MODULE_EXPORT void bn_handler(GtkButton *bn, gpointer data) @@ -380,10 +287,6 @@ G_MODULE_EXPORT void bn_handler(GtkButton *bn, gpointer data) const gchar* ctrlname = gtk_buildable_get_name(GTK_BUILDABLE(bn)); if(strcmp(ctrlname, BTN_PING) == 0) { - tmp = CMD_PING; - write(pipe_fd, &tmp, 1); - read(pipe_fd, &tmp, 1); - if(tmp) { /* daemon alive */ dlg = gtk_message_dialog_new(GTK_WINDOW(widgets.win), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, "The spacenavd driver is running fine."); @@ -397,6 +300,4 @@ G_MODULE_EXPORT void bn_handler(GtkButton *bn, gpointer data) g_signal_connect_swapped(dlg, "response", G_CALLBACK(gtk_widget_destroy), dlg); } } - } -