X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Ftint.c;h=a91f8cc38267d1110376dfd61f3ed30b596fb20b;hb=35e206acc0a7b9dca7611fe4a7e17c7acc381ad0;hp=05d50f67c14e085d3c4ec6117c8ab29b77045d07;hpb=2cccd91fa633d9bfefd46073981276cb29fda5e7;p=chaz%2Ftint2 diff --git a/src/tint.c b/src/tint.c index 05d50f6..a91f8cc 100644 --- a/src/tint.c +++ b/src/tint.c @@ -58,7 +58,7 @@ void init (int argc, char *argv[]) exit(0); } if (!strcmp(argv[i], "-v") || !strcmp(argv[i], "--version")) { - printf("tint2 version 0.7.svn\n"); + printf("tint2 version 0.8\n"); exit(0); } if (!strcmp(argv[i], "-c")) { @@ -223,6 +223,20 @@ void window_action (Task *tsk, int action) windows_set_desktop(tsk->win, desk); if (desk == server.desktop) set_active(tsk->win); + break; + case NEXT_TASK: + if (task_active) { + Task *tsk1; + tsk1 = next_task(task_active); + set_active(tsk1->win); + } + break; + case PREV_TASK: + if (task_active) { + Task *tsk1; + tsk1 = prev_task(task_active); + set_active(tsk1->win); + } } } @@ -421,6 +435,8 @@ void event_property_notify (XEvent *e) else return; } + else + return; } } //printf("atom root_win = %s, %s\n", XGetAtomName(server.dsp, at), tsk->title); @@ -619,8 +635,7 @@ int main (int argc, char *argv[]) int x11_fd, i; Panel *panel; GSList *it; - GSList* timer_iter; - struct timer* timer; + const struct timespec* timeout; init (argc, argv); @@ -679,20 +694,17 @@ int main (int argc, char *argv[]) } // thanks to AngryLlama for the timer - // Create a File Description Set containing x11_fd, and every timer_fd + // Create a File Description Set containing x11_fd FD_ZERO (&fdset); FD_SET (x11_fd, &fdset); - int max_fd = x11_fd; - timer_iter = timer_list; - while (timer_iter) { - timer = timer_iter->data; - max_fd = timer->id > max_fd ? timer->id : max_fd; - FD_SET(timer->id, &fdset); - timer_iter = timer_iter->next; - } + update_next_timeout(); + if (next_timeout.tv_sec >= 0 && next_timeout.tv_nsec >= 0) + timeout = &next_timeout; + else + timeout = 0; // Wait for X Event or a Timer - if (pselect(max_fd+1, &fdset, 0, 0, 0, &empty_mask) > 0) { + if (pselect(x11_fd+1, &fdset, 0, 0, timeout, &empty_mask) > 0) { while (XPending (server.dsp)) { XNextEvent(server.dsp, &e); @@ -710,9 +722,8 @@ int main (int argc, char *argv[]) if (!g_tooltip.enabled) break; Panel* panel = get_panel(e.xmotion.window); Area* area = click_area(panel, e.xmotion.x, e.xmotion.y); - if (area->_get_tooltip_text) { + if (area->_get_tooltip_text) tooltip_trigger_show(area, panel, e.xmotion.x_root, e.xmotion.y_root); - } else tooltip_trigger_hide(); break; @@ -770,21 +781,10 @@ int main (int argc, char *argv[]) break; } } - - // we need to iterate over the whole timer list, since fd_set can only be checked with the - // brute force method FD_ISSET for every possible timer - timer_iter = timer_list; - while (timer_iter) { - timer = timer_iter->data; - if (FD_ISSET(timer->id, &fdset)) { - uint64_t dummy; - read(timer->id, &dummy, sizeof(uint64_t)); - timer->_callback(); - } - timer_iter = timer_iter->next; - } } + callback_timeout_expired(); + switch (signal_pending) { case SIGUSR1: // reload config file signal_pending = 0;