]> Dogcows Code - chaz/tint2/blobdiff - src/tooltip/tooltip.c
many fixed for SIGUSR1 signal
[chaz/tint2] / src / tooltip / tooltip.c
index 29552b0cdaf4bc18b71ce3ee8dc5a6f8bea7800d..ca6a5a29a4cb0ef3f2452ec12394eb386b93b1e7 100644 (file)
@@ -1,3 +1,20 @@
+/**************************************************************************
+*
+* 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
+* as published by the Free Software Foundation.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+**************************************************************************/
+
 #include <stdio.h>
 #include <unistd.h>
 #include <cairo.h>
@@ -42,6 +59,26 @@ void init_tooltip()
 }
 
 
+void cleanup_tooltip()
+{
+       tooltip_hide();
+       g_tooltip.enabled = False;
+       g_tooltip.current_state = TOOLTIP_ABOUT_TO_HIDE;
+       if (g_tooltip.task) {
+               alarm(0);
+               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)
@@ -65,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);
        }
@@ -212,8 +251,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);
        }
@@ -230,5 +272,4 @@ void tooltip_hide()
                g_tooltip.mapped = False;
                XUnmapWindow(server.dsp, g_tooltip.window);
        }
-       g_tooltip.task = 0;
 }
This page took 0.023518 seconds and 4 git commands to generate.