]> Dogcows Code - chaz/tint2/blobdiff - src/tint.c
SIGUSR1 does now a full restat of tint2
[chaz/tint2] / src / tint.c
index 1042ce58e731119f451e4cc5973d4558b7b67edb..f88b57fd7f3cb7fb1e549d25fbca40f205ae45d2 100644 (file)
@@ -42,6 +42,7 @@
 #include "tooltip.h"
 #include "timer.h"
 
+
 void signal_handler(int sig)
 {
        // signal handler is light as it should be
@@ -53,6 +54,17 @@ void init (int argc, char *argv[])
 {
        int i;
 
+       // set global data
+       default_config();
+       default_timeout();
+       default_systray();
+       memset(&server, 0, sizeof(Server_global));
+       default_battery();
+       default_clock();
+       default_taskbar();
+       default_tooltip();
+       default_panel();
+
        // read options
        for (i = 1; i < argc; ++i) {
                if (!strcmp(argv[i], "-h") || !strcmp(argv[i], "--help"))       {
@@ -75,6 +87,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);
@@ -91,10 +104,6 @@ void init (int argc, char *argv[])
 //     sigaddset(&block_mask, SIGHUP);
 //     sigaddset(&block_mask, SIGUSR1);
 //     sigprocmask(SIG_BLOCK, &block_mask, 0);
-
-       // set global data
-       memset(&server, 0, sizeof(Server_global));
-       memset(&systray, 0, sizeof(Systraybar));
 }
 
 void init_X11()
@@ -140,7 +149,7 @@ void init_X11()
 
 void cleanup()
 {
-       stop_all_timeouts();
+       cleanup_timeout();
        cleanup_systray();
        stop_net();
        cleanup_panel();
@@ -149,13 +158,13 @@ void cleanup()
 #ifdef ENABLE_BATTERY
        cleanup_battery();
 #endif
+       cleanup_config();
 
        if (default_icon) {
                imlib_context_set_image(default_icon);
                imlib_free_image();
        }
-       if (config_path) g_free(config_path);
-       if (snapshot_path) g_free(snapshot_path);
+       imlib_context_disconnect_display();
 
        cleanup_server();
        if (server.dsp) XCloseDisplay(server.dsp);
@@ -170,7 +179,6 @@ void get_snapshot(const char *path)
                panel->area.width = server.monitor[0].width;
 
        panel->temp_pmap = XCreatePixmap(server.dsp, server.root_win, panel->area.width, panel->area.height, server.depth);
-
        refresh(&panel->area);
 
        Imlib_Image img = NULL;
@@ -178,6 +186,11 @@ void get_snapshot(const char *path)
        img = imlib_create_image_from_drawable(0, 0, 0, panel->area.width, panel->area.height, 0);
 
        imlib_context_set_image(img);
+       if (!panel_horizontal) {
+               // rotate 90° vertical panel
+               imlib_image_flip_horizontal();
+               imlib_image_flip_diagonal();
+       }
        imlib_save_image(path);
        imlib_free_image();
 }
@@ -612,11 +625,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;
        }
 
@@ -692,8 +701,8 @@ int main (int argc, char *argv[])
        GSList *it;
        struct timeval* timeout;
 
+start:
        init (argc, argv);
-       init_config();
        init_X11();
 
        i = 0;
@@ -708,7 +717,6 @@ int main (int argc, char *argv[])
        }
 
        init_panel();
-       cleanup_config();
        if (snapshot_path) {
                get_snapshot(snapshot_path);
                cleanup();
@@ -887,19 +895,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);
+                               goto start;
+                       }
+                       else {
+                               // SIGINT, SIGTERM, SIGHUP
+                               return 0;
+                       }
                }
        }
 }
This page took 0.024172 seconds and 4 git commands to generate.