int i;
// set global data
+ default_config();
default_timeout();
default_systray();
memset(&server, 0, sizeof(Server_global));
default_clock();
default_taskbar();
default_tooltip();
- default_config();
+ default_panel();
// read options
for (i = 1; i < argc; ++i) {
}
}
// Set signal handler
+ signal_pending = 0;
struct sigaction sa = { .sa_handler = signal_handler };
sigaction(SIGUSR1, &sa, 0);
sigaction(SIGINT, &sa, 0);
void cleanup()
{
-printf("*** cleanup()\n");
cleanup_timeout();
cleanup_systray();
stop_net();
imlib_context_set_image(default_icon);
imlib_free_image();
}
+ imlib_context_disconnect_display();
cleanup_server();
if (server.dsp) XCloseDisplay(server.dsp);
}
imlib_save_image(path);
imlib_free_image();
- XFreePixmap(server.dsp, panel->temp_pmap);
}
{
// change in root window (xrandr)
if (win == server.root_win) {
- get_monitors();
- init_config();
- config_read_file (config_path);
- init_panel();
- cleanup_config();
+ signal_pending = SIGUSR1;
return;
}
GSList *it;
struct timeval* timeout;
+start:
init (argc, argv);
- init_config();
init_X11();
i = 0;
}
init_panel();
- cleanup_config();
if (snapshot_path) {
get_snapshot(snapshot_path);
cleanup();
callback_timeout_expired();
- switch (signal_pending) {
- case SIGUSR1: // reload config file
- signal_pending = 0;
- init_config();
- config_read_file (config_path);
- init_panel();
- cleanup_config();
- break;
- case SIGINT:
- case SIGTERM:
- case SIGHUP:
- cleanup ();
- return 0;
+ if (signal_pending) {
+ cleanup();
+ if (signal_pending == SIGUSR1) {
+ // restart tint2
+ // SIGUSR1 used when : user's signal, composite manager stop/start or xrandr
+ FD_CLR (x11_fd, &fdset);
+ goto start;
+ }
+ else {
+ // SIGINT, SIGTERM, SIGHUP
+ return 0;
+ }
}
}
}