X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Ftint.c;h=7388035bdb41169907abf8d2b1e12fd495fac2ef;hb=5c73d8e6fca08157fa70cdb30069dd09c3619afb;hp=35141b06829593afece63cfed2a2b55b03c5960b;hpb=f8bebb561d52fa25b320904bb0c6a08347d05611;p=chaz%2Ftint2 diff --git a/src/tint.c b/src/tint.c index 35141b0..7388035 100644 --- a/src/tint.c +++ b/src/tint.c @@ -55,14 +55,17 @@ void init (int argc, char *argv[]) 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) { @@ -86,6 +89,7 @@ void init (int argc, char *argv[]) } } // Set signal handler + signal_pending = 0; struct sigaction sa = { .sa_handler = signal_handler }; sigaction(SIGUSR1, &sa, 0); sigaction(SIGINT, &sa, 0); @@ -126,6 +130,8 @@ void init_X11() XSelectInput (server.dsp, server.root_win, PropertyChangeMask|StructureNotifyMask); setlocale (LC_ALL, ""); + // config file use '.' as decimal separator + setlocale(LC_NUMERIC, "POSIX"); // load default icon gchar *path; @@ -147,10 +153,8 @@ void init_X11() void cleanup() { -printf("*** cleanup()\n"); cleanup_timeout(); cleanup_systray(); - stop_net(); cleanup_panel(); cleanup_tooltip(); cleanup_clock(); @@ -163,6 +167,7 @@ printf("*** cleanup()\n"); imlib_context_set_image(default_icon); imlib_free_image(); } + imlib_context_disconnect_display(); cleanup_server(); if (server.dsp) XCloseDisplay(server.dsp); @@ -191,7 +196,6 @@ void get_snapshot(const char *path) } imlib_save_image(path); imlib_free_image(); - XFreePixmap(server.dsp, panel->temp_pmap); } @@ -624,11 +628,7 @@ void event_configure_notify (Window win) { // 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; } @@ -704,8 +704,8 @@ int main (int argc, char *argv[]) GSList *it; struct timeval* timeout; +start: init (argc, argv); - init_config(); init_X11(); i = 0; @@ -720,7 +720,6 @@ int main (int argc, char *argv[]) } init_panel(); - cleanup_config(); if (snapshot_path) { get_snapshot(snapshot_path); cleanup(); @@ -843,8 +842,8 @@ int main (int argc, char *argv[]) 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) @@ -861,13 +860,11 @@ int main (int argc, char *argv[]) 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) { @@ -899,19 +896,18 @@ int main (int argc, char *argv[]) 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; + } } } }