int i;
// set global data
+ default_config();
default_timeout();
default_systray();
memset(&server, 0, sizeof(Server_global));
+#ifdef ENABLE_BATTERY
default_battery();
+#endif
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();
cleanup_panel();
cleanup_tooltip();
cleanup_clock();
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();
case UnmapNotify:
case DestroyNotify:
if (e.xany.window == server.composite_manager) {
- // TODO: Stop real_transparency
- //signal_pending = SIGUSR2;
+ // Stop real_transparency
+ signal_pending = SIGUSR1;
break;
}
if (e.xany.window == g_tooltip.window || !systray.area.on_screen)
ev = &e.xclient;
if (ev->data.l[1] == server.atom._NET_WM_CM_S0) {
if (ev->data.l[2] == None)
- // TODO: Stop real_transparency
- //signal_pending = SIGUSR2;
- ;
+ // Stop real_transparency
+ signal_pending = SIGUSR1;
else
- // TODO: Start real_transparency
- //signal_pending = SIGUSR2;
- ;
+ // Start real_transparency
+ signal_pending = SIGUSR1;
}
if (!systray.area.on_screen) break;
if (e.xclient.message_type == server.atom._NET_SYSTEM_TRAY_OPCODE && e.xclient.format == 32 && e.xclient.window == net_sel_win) {
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); // not sure if needed
+ goto start;
+ }
+ else {
+ // SIGINT, SIGTERM, SIGHUP
+ return 0;
+ }
}
}
}