static void chk_handler(GtkToggleButton *bn, void *data) { int which = (int)data; int state = gtk_toggle_button_get_active(bn); if(which < 6) { cfg.invert[which] = state; update_cfg(); } if(which == 10) { cfg.led = state; update_cfg(); } }
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; }
static void slider_handler(GtkRange *rng, void *data) { cfg.sensitivity = gtk_range_get_value(rng); update_cfg(); }