X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Ftint.c;h=a75b1b4d4117ec860665e17ac3b03e0cbb3e9973;hb=ee8eefd5400319f8ceafbe00c6ef9ae112306bb4;hp=ba79855190a3b512f9148eed3b44758a4e5e3124;hpb=ed39165e7908dda7b2c7581075ef71a6de669a59;p=chaz%2Ftint2 diff --git a/src/tint.c b/src/tint.c index ba79855..a75b1b4 100644 --- a/src/tint.c +++ b/src/tint.c @@ -46,8 +46,19 @@ void signal_handler(int sig) } -void init () +void init (int argc, char *argv[]) { + int c; + + // read options + c = getopt (argc, argv, "c:"); + if (c != -1) { + config_path = strdup (optarg); + c = getopt (argc, argv, "j:"); + if (c != -1) + thumbnail_path = strdup (optarg); + } + // Set signal handler signal(SIGUSR1, signal_handler); signal(SIGINT, signal_handler); @@ -105,6 +116,8 @@ void cleanup() #endif if (clock_lclick_command) g_free(clock_lclick_command); if (clock_rclick_command) g_free(clock_rclick_command); + if (config_path) g_free(config_path); + if (thumbnail_path) g_free(thumbnail_path); if (server.monitor) free(server.monitor); XFreeGC(server.dsp, server.gc); @@ -375,6 +388,35 @@ void event_property_notify (XEvent *e) // Change desktop else if (at == server.atom._NET_CURRENT_DESKTOP) { server.desktop = server_get_current_desktop (); + for (i=0 ; i < nb_panel ; i++) { + Panel *panel = &panel1[i]; + if (panel_mode == MULTI_DESKTOP && panel->g_taskbar.use_active) { + // redraw taskbar + panel_refresh = 1; + Taskbar *tskbar; + Task *tsk; + GSList *l; + for (j=0 ; j < panel->nb_desktop ; j++) { + tskbar = &panel->taskbar[j]; + if (tskbar->area.is_active) { + tskbar->area.is_active = 0; + tskbar->area.redraw = 1; + for (l = tskbar->area.list; l ; l = l->next) { + tsk = l->data; + tsk->area.redraw = 1; + } + } + if (j == server.desktop) { + tskbar->area.is_active = 1; + tskbar->area.redraw = 1; + for (l = tskbar->area.list; l ; l = l->next) { + tsk = l->data; + tsk->area.redraw = 1; + } + } + } + } + } if (panel_mode != MULTI_DESKTOP) { visible_object(); } @@ -618,35 +660,32 @@ int main (int argc, char *argv[]) { XEvent e; fd_set fd; - int x11_fd, i, c; + int x11_fd, i; struct timeval tv; Panel *panel; GSList *it; - init (); + init (argc, argv); load_config: i = 0; - c = getopt (argc, argv, "c:"); init_config(); - if (c != -1) { - i = config_read_file (optarg); - c = getopt (argc, argv, "j:"); - if (c != -1) { - // usage: tint2 [-c] -j for internal use - printf("file %s\n", optarg); - cleanup(); - exit(0); - } + if (config_path) + i = config_read_file (config_path); + else + i = config_read (); + if (!i) { + fprintf(stderr, "usage: tint2 [-c] \n"); + cleanup(); + exit(1); } - if (!i) - i = config_read (); - if (!i) { - fprintf(stderr, "usage: tint2 [-c] \n"); - cleanup(); - exit(1); - } config_finish(); + if (thumbnail_path) { + // usage: tint2 -j for internal use + printf("file %s\n", thumbnail_path); + cleanup(); + exit(0); + } x11_fd = ConnectionNumber(server.dsp); XSync(server.dsp, False);