]> Dogcows Code - chaz/tint2/blobdiff - src/tint.c
*add* tooltips
[chaz/tint2] / src / tint.c
index 70c6f5bd314dd83df088f987c39211695c4a73d1..c23f115aa6c6333ba63436d2da2e5848d49addaa 100644 (file)
@@ -37,6 +37,7 @@
 #include "taskbar.h"
 #include "systraybar.h"
 #include "panel.h"
+#include "tooltip.h"
 
 
 void signal_handler(int sig)
@@ -72,6 +73,7 @@ void init (int argc, char *argv[])
        signal(SIGTERM, signal_handler);
        signal(SIGHUP, signal_handler);
        signal(SIGCHLD, SIG_IGN);               // don't have to wait() after fork()
+       signal(SIGALRM, tooltip_sighandler);
 
        // set global data
        memset(&server, 0, sizeof(Server_global));
@@ -134,25 +136,26 @@ void cleanup()
 
 Taskbar *click_taskbar (Panel *panel, int x, int y)
 {
-       GSList *l0;
-       Taskbar *tskbar = NULL;
+       Taskbar *tskbar;
+       int i;
+
        if (panel_horizontal) {
-               for (l0 = panel->area.list; l0 ; l0 = l0->next) {
-                       tskbar = l0->data;
+               for (i=0; i < panel->nb_desktop ; i++) {
+                       tskbar = &panel->taskbar[i];
                        if (!tskbar->area.on_screen) continue;
                        if (x >= tskbar->area.posx && x <= (tskbar->area.posx + tskbar->area.width))
-                               break;
+                               return tskbar;
                }
        }
        else {
-               for (l0 = panel->area.list; l0 ; l0 = l0->next) {
-                       tskbar = l0->data;
+               for (i=0; i < panel->nb_desktop ; i++) {
+                       tskbar = &panel->taskbar[i];
                        if (!tskbar->area.on_screen) continue;
                        if (y >= tskbar->area.posy && y <= (tskbar->area.posy + tskbar->area.height))
-                               break;
+                               return tskbar;
                }
        }
-       return tskbar;
+       return NULL;
 }
 
 
@@ -586,12 +589,15 @@ void event_property_notify (XEvent *e)
 
 void event_expose (XEvent *e)
 {
-       Panel *panel;
-
-       panel = get_panel(e->xany.window);
-       if (!panel) return;
-       // TODO : one panel_refresh per panel ?
-       panel_refresh = 1;
+       if (e->xany.window == g_tooltip.window)
+               tooltip_update();
+       else {
+               Panel *panel;
+               panel = get_panel(e->xany.window);
+               if (!panel) return;
+               // TODO : one panel_refresh per panel ?
+               panel_refresh = 1;
+       }
 }
 
 
@@ -708,7 +714,6 @@ int main (int argc, char *argv[])
        GSList *it;
 
        init (argc, argv);
-
 load_config:
        i = 0;
        init_config();
@@ -748,6 +753,7 @@ load_config:
 
                                switch (e.type) {
                                        case ButtonPress:
+                                               tooltip_hide();
                                                event_button_press (&e);
                                                break;
 
@@ -755,6 +761,20 @@ load_config:
                                                event_button_release(&e);
                                                break;
 
+                                       case MotionNotify: {
+                                               Panel* panel = get_panel(e.xmotion.window);
+                                               Task* task = click_task(panel, e.xmotion.x, e.xmotion.y);
+                                               if (task)
+                                                       tooltip_trigger_show(task, e.xmotion.x_root, e.xmotion.y_root);
+                                               else
+                                                       tooltip_trigger_hide();
+                                               break;
+                                       }
+
+                                       case LeaveNotify:
+                                               tooltip_trigger_hide();
+                                               break;
+
                                        case Expose:
                                                event_expose(&e);
                                                break;
This page took 0.025799 seconds and 4 git commands to generate.