]> Dogcows Code - chaz/tint2/commitdiff
fixed issue 46 and 59 : urgent task
authorThierry Lorthiois <lorthiois@bbsoft.fr>
Fri, 5 Jun 2009 18:53:49 +0000 (18:53 +0000)
committerThierry Lorthiois <lorthiois@bbsoft.fr>
Fri, 5 Jun 2009 18:53:49 +0000 (18:53 +0000)
ChangeLog
src/clock/clock.c
src/clock/clock.h
src/panel.c
src/panel.h
src/systray/systraybar.c
src/tint.c
src/tint2

index 34ab28fa38c654a99553f13b7c71855ce05629f4..07bbd861da2d7130f4dc15846ebeceeccfae0c51 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2009-06-05
+- fixed issue 46 and 59 : urgent task
+  limitation : just one urgent task at a time
+
 2009-06-04
 - patch by dmitry.medvinsky : right/left clic command
 
index eaaf69cb83e8a3c493f39151f4d5778c8be72899..a3061cb206919800ae04c1d4b0eb38c8e24b66d7 100644 (file)
@@ -44,6 +44,16 @@ static char buf_time[40];
 static char buf_date[40];
 
 
+void init_precision()
+{
+       if (!time1_format) time_precision = 60;
+       else if (strchr(time1_format, 'S')) time_precision = 1;
+       else if (strchr(time1_format, 'T')) time_precision = 1;
+       else if (strchr(time1_format, 'r')) time_precision = 1;
+       else time_precision = 60;
+}
+
+
 void init_clock()
 {
    Panel *panel;
@@ -58,13 +68,7 @@ void init_clock()
                clock->area.panel = panel;
                clock->area._draw_foreground = draw_clock;
                clock->area._resize = resize_clock;
-
-               if (!clock->area.on_screen) continue;
-
-               if (strchr(time1_format, 'S')) time_precision = 1;
-               else if (strchr(time1_format, 'T')) time_precision = 1;
-               else if (strchr(time1_format, 'r')) time_precision = 1;
-               else time_precision = 60;
+               init_precision();
 
                // update clock to force update (-time_precision)
                struct timeval stv;
@@ -72,6 +76,8 @@ void init_clock()
                time_clock.tv_sec = stv.tv_sec - time_precision;
                time_clock.tv_sec -= time_clock.tv_sec % time_precision;
 
+               if (!clock->area.on_screen) continue;
+
                clock->area.posy = panel->area.pix.border.width + panel->area.paddingy;
                clock->area.height = panel->area.height - (2 * clock->area.posy);
                clock->area.resize = 1;
index 7b28e854cf7758c4b81a790f6beb9a496c390615..f607f7284f53b1199f81a3782ec14bf0f28c71f7 100644 (file)
@@ -36,6 +36,7 @@ extern char *clock_rclick_command;
 
 // initialize clock : y position, precision, ...
 void init_clock();
+void init_precision();
 
 void draw_clock (void *obj, cairo_t *c, int active);
 
index 7d0fa90488c9de043d131f8d8f6613938aa331e4..4e8547e802e9a888a1d4285a0d4ba31adfb3100d 100644 (file)
@@ -43,8 +43,9 @@ int panel_mode;
 int panel_position;
 int panel_refresh;
 
-Task *task_active = 0;
-Task *task_drag = 0;
+Task *task_active;
+Task *task_drag;
+Task *task_urgent;
 
 Panel *panel1 = 0;
 int  nb_panel;
@@ -136,6 +137,9 @@ void cleanup_panel()
 {
        if (!panel1) return;
 
+       task_active = 0;
+       task_drag = 0;
+       task_urgent = 0;
        cleanup_systray();
    cleanup_taskbar();
 
index f7fc0ff66207d4306b8091a9bc24f6952b0353a7..8e0c3053a5ad7159ca16c36b20acfba92ecfc987 100644 (file)
@@ -43,6 +43,7 @@ extern int panel_refresh;
 
 extern Task *task_active;
 extern Task *task_drag;
+extern Task *task_urgent;
 
 
 typedef struct {
index ef1578fcf2791514fc868e474e2c87640ddfe5c6..4b1ac2033080fd85c2ab0a0f3143dbf7d5fcb9d7 100644 (file)
@@ -111,6 +111,7 @@ void draw_systray(void *obj, cairo_t *c, int active)
                XMoveResizeWindow(server.dsp, traywin->id, traywin->x, traywin->y, icon_size, icon_size);
                // ceci intervertie les fonds : le premier icone prend le fond du dernier
                // le dernier prend le fond de l'avant dernier, ...
+               XSetWindowBackgroundPixmap (server.dsp, panel->main_win, systray.area.pix.pmap);
 
                // resize our window so that the new window can fit in it
                //fix_geometry();
@@ -124,7 +125,6 @@ void draw_systray(void *obj, cairo_t *c, int active)
                // show the window
                XMapRaised(server.dsp, traywin->id);
        }
-       XSetWindowBackgroundPixmap (server.dsp, panel->main_win, systray.area.pix.pmap);
 }
 
 
index cfe0c70bd0df50fd38c76226b021df411eb64b44..ee6a8480b84eba192ec7ec629a74dcc2fdf2cf91 100644 (file)
@@ -302,6 +302,10 @@ void event_property_notify (XEvent *e)
                        }
          Window w1 = window_get_active ();
          Task *t = task_get_task(w1);
+                       if (task_urgent == t) {
+                               init_precision();
+                               task_urgent = 0;
+                       }
          if (!t) {
             Window w2;
             if (XGetTransientForHint(server.dsp, w1, &w2) != 0)
@@ -358,9 +362,8 @@ void event_property_notify (XEvent *e)
                // Demand attention
       else if (at == server.atom._NET_WM_STATE) {
          if (window_is_urgent (win)) {
-                               printf("  event_property_notify _NET_WM_STATE_DEMANDS_ATTENTION\n");
-                       }
-                       else {
+                               task_urgent = tsk;
+                               time_precision = 1;
                        }
                }
       else if (at == server.atom.WM_STATE) {
@@ -473,25 +476,31 @@ void event_configure_notify (Window win)
 void event_timer()
 {
    struct timeval stv;
-
-   if (!time1_format) return;
+       int i;
 
    if (gettimeofday(&stv, 0)) return;
 
    if (abs(stv.tv_sec - time_clock.tv_sec) < time_precision) return;
 
+       // urgent task
+       if (task_urgent) {
+               task_urgent->area.is_active = !task_urgent->area.is_active;
+               task_urgent->area.redraw = 1;
+       }
+
        // update battery
-       if (panel1[0].battery.area.on_screen)
+       if (panel1[0].battery.area.on_screen) {
                update_battery(&battery_state);
+               for (i=0 ; i < nb_panel ; i++)
+                       panel1[i].battery.area.resize = 1;
+       }
 
        // update clock
-       time_clock.tv_sec = stv.tv_sec;
-       time_clock.tv_sec -= time_clock.tv_sec % time_precision;
-
-       int i;
-       for (i=0 ; i < nb_panel ; i++) {
-          panel1[i].clock.area.resize = 1;
-               panel1[i].battery.area.resize = 1;
+   if (time1_format) {
+               time_clock.tv_sec = stv.tv_sec;
+               time_clock.tv_sec -= time_clock.tv_sec % time_precision;
+               for (i=0 ; i < nb_panel ; i++)
+               panel1[i].clock.area.resize = 1;
        }
        panel_refresh = 1;
 }
index 35eeffa37a5b9c1ad9b17a6681ae1c2b3d2f2d0d..353402382e9ba270c2594d0653e19a2a118f8777 100755 (executable)
Binary files a/src/tint2 and b/src/tint2 differ
This page took 0.030838 seconds and 4 git commands to generate.