]> Dogcows Code - chaz/tint2/blobdiff - src/tooltip/tooltip.c
added customised tintwizard
[chaz/tint2] / src / tooltip / tooltip.c
index 6826aae26e74c15e49dbc85b2ec58c174eed2a03..d7d4f2e1dc92f9f1196e4b82f878bb37ef6e39b7 100644 (file)
@@ -1,6 +1,6 @@
 /**************************************************************************
 *
-* Copyright (C) 2009 Andreas.Fink85 ()
+* Copyright (C) 2009 Andreas.Fink (Andreas.Fink85@gmail.com)
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License version 2
@@ -59,6 +59,26 @@ void init_tooltip()
 }
 
 
+void cleanup_tooltip()
+{
+       alarm(0);
+       tooltip_hide();
+       g_tooltip.enabled = False;
+       g_tooltip.current_state = TOOLTIP_ABOUT_TO_HIDE;
+       if (g_tooltip.task) {
+               g_tooltip.task = 0;
+       }
+       if (g_tooltip.window) {
+               XDestroyWindow(server.dsp, g_tooltip.window);
+               g_tooltip.window = 0;
+       }
+       if (g_tooltip.font_desc) {
+               pango_font_description_free(g_tooltip.font_desc);
+               g_tooltip.font_desc = 0;
+       }
+}
+
+
 void tooltip_sighandler(int sig)
 {
        if (g_tooltip.current_state == TOOLTIP_ABOUT_TO_SHOW)
@@ -82,8 +102,10 @@ void tooltip_trigger_show(Task* task, int x_root, int y_root)
                g_tooltip.current_state = TOOLTIP_ABOUT_TO_SHOW;
                g_tooltip.task = task;
                struct timeval t = g_tooltip.show_timeout.it_value;
-               if (t.tv_sec == 0 && t.tv_usec == 0)
+               if (t.tv_sec == 0 && t.tv_usec == 0) {
+                       alarm(0);
                        tooltip_show();
+               }
                else
                        setitimer(ITIMER_REAL, &g_tooltip.show_timeout, 0);
        }
@@ -95,7 +117,7 @@ void tooltip_show()
        if (!g_tooltip.mapped) {
                g_tooltip.mapped = True;
                XMapWindow(server.dsp, g_tooltip.window);
-               tooltip_update();
+               //tooltip_update();
                alarm(0);
        }
 }
@@ -124,7 +146,8 @@ void tooltip_update_geometry()
        else if (panel_position & LEFT)
                x = panel->posx + panel->area.width;
        else
-                       x = panel->posx - width;
+               x = panel->posx - width;
+
        g_object_unref(layout);
        cairo_destroy(c);
        cairo_surface_destroy(cs);
@@ -138,8 +161,8 @@ void tooltip_adjust_geometry()
 
        int min_x, min_y, max_width, max_height;
        Panel* panel = g_tooltip.task->area.panel;
-       int screen_width = server.monitor[panel->monitor].width;
-       int screen_height = server.monitor[panel->monitor].height;
+       int screen_width = server.monitor[panel->monitor].x + server.monitor[panel->monitor].width;
+       int screen_height = server.monitor[panel->monitor].y + server.monitor[panel->monitor].height;
        if ( x+width <= screen_width && y+height <= screen_height && x>=0 && y>=0)
                return;    // no adjustment needed
 
@@ -162,10 +185,10 @@ void tooltip_adjust_geometry()
                        min_x=0;
        }
 
-       if (x+width > server.monitor[panel->monitor].width)
-               x = server.monitor[panel->monitor].width-width;
-       if ( y+height>server.monitor[panel->monitor].height)
-               y = server.monitor[panel->monitor].height-height;
+       if (x+width > server.monitor[panel->monitor].x + server.monitor[panel->monitor].width)
+               x = server.monitor[panel->monitor].x + server.monitor[panel->monitor].width - width;
+       if ( y+height > server.monitor[panel->monitor].y + server.monitor[panel->monitor].height)
+               y = server.monitor[panel->monitor].y + server.monitor[panel->monitor].height - height;
 
        if (x<min_x)
                x=min_x;
@@ -184,6 +207,7 @@ void tooltip_update()
                return;
        }
 
+       //printf("tooltip_update\n");
        tooltip_update_geometry();
        tooltip_adjust_geometry();
        XMoveResizeWindow(server.dsp, g_tooltip.window, x, y, width, height);
@@ -229,8 +253,11 @@ void tooltip_trigger_hide(Tooltip* tooltip)
        if (g_tooltip.mapped) {
                g_tooltip.current_state = TOOLTIP_ABOUT_TO_HIDE;
                struct timeval t = g_tooltip.hide_timeout.it_value;
-               if (t.tv_sec == 0 && t.tv_usec == 0)
+               g_tooltip.task = 0;
+               if (t.tv_sec == 0 && t.tv_usec == 0) {
                        tooltip_hide();
+                       alarm(0);
+               }
                else
                        setitimer(ITIMER_REAL, &g_tooltip.hide_timeout, 0);
        }
@@ -247,5 +274,4 @@ void tooltip_hide()
                g_tooltip.mapped = False;
                XUnmapWindow(server.dsp, g_tooltip.window);
        }
-       g_tooltip.task = 0;
 }
This page took 0.028872 seconds and 4 git commands to generate.