]> Dogcows Code - chaz/tint2/blobdiff - src/tooltip/tooltip.c
*add* autohide
[chaz/tint2] / src / tooltip / tooltip.c
index 7bfd7093f895ff710ad9d48713cbb95b7342ceb9..3eadda417c86aadf55a1955aeae9038f1ed04d8a 100644 (file)
@@ -62,15 +62,19 @@ void init_tooltip()
        XSetWindowAttributes attr;
        attr.override_redirect = True;
        attr.event_mask = StructureNotifyMask;
+       attr.colormap = server.colormap;
+       attr.background_pixel = 0;
+       attr.border_pixel = 0;
+       unsigned long mask = CWEventMask|CWColormap|CWBorderPixel|CWBackPixel|CWOverrideRedirect;
        if (g_tooltip.window) XDestroyWindow(server.dsp, g_tooltip.window);
-       g_tooltip.window = XCreateWindow(server.dsp, server.root_win, 0, 0, 100, 20, 0, server.depth, InputOutput, CopyFromParent, CWOverrideRedirect|CWEventMask, &attr);
+       g_tooltip.window = XCreateWindow(server.dsp, server.root_win, 0, 0, 100, 20, 0, server.depth, InputOutput, server.visual, mask, &attr);
 }
 
 
 void cleanup_tooltip()
 {
        stop_tooltip_timeout();
-       tooltip_hide();
+       tooltip_hide(0);
        g_tooltip.enabled = False;
        tooltip_copy_text(0);
        if (g_tooltip.window) {
@@ -100,7 +104,7 @@ void tooltip_trigger_show(Area* area, Panel* p, int x_root, int y_root)
 }
 
 
-void tooltip_show()
+void tooltip_show(void* arg)
 {
   int mx, my;
   Window w;
@@ -196,7 +200,7 @@ void tooltip_adjust_geometry()
 void tooltip_update()
 {
        if (!g_tooltip.tooltip_text) {
-               tooltip_hide();
+               tooltip_hide(0);
                return;
        }
 
@@ -211,13 +215,21 @@ void tooltip_update()
        cs = cairo_xlib_surface_create(server.dsp, g_tooltip.window, server.visual, width, height);
        c = cairo_create(cs);
        Color bc = g_tooltip.background_color;
-       cairo_rectangle(c, 0, 0, width, height);
-       cairo_set_source_rgb(c, bc.color[0], bc.color[1], bc.color[2]);
-       cairo_fill(c);
        Border b = g_tooltip.border;
-       cairo_set_source_rgba(c, b.color[0], b.color[1], b.color[2], b.alpha);
+       if (real_transparency) {
+               clear_pixmap(g_tooltip.window, 0, 0, width, height);
+               draw_rect(c, b.width, b.width, width-2*b.width, height-2*b.width, b.rounded-b.width/1.571);
+               cairo_set_source_rgba(c, bc.color[0], bc.color[1], bc.color[2], bc.alpha);
+       }
+       else {
+               cairo_rectangle(c, 0., 0, width, height);
+               cairo_set_source_rgb(c, bc.color[0], bc.color[1], bc.color[2]);
+       }
+       cairo_fill(c);
        cairo_set_line_width(c, b.width);
-       cairo_rectangle(c, b.width/2.0, b.width/2.0, width-b.width, height-b.width);
+       if (real_transparency) draw_rect(c, b.width/2.0, b.width/2.0, width - b.width, height - b.width, b.rounded);
+       else cairo_rectangle(c, b.width/2.0, b.width/2.0, width-b.width, height-b.width);
+       cairo_set_source_rgba(c, b.color[0], b.color[1], b.color[2], b.alpha);
        cairo_stroke(c);
 
        config_color fc = g_tooltip.font_color;
@@ -253,7 +265,7 @@ void tooltip_trigger_hide(Tooltip* tooltip)
 }
 
 
-void tooltip_hide()
+void tooltip_hide(void* arg)
 {
        stop_tooltip_timeout();
        if (g_tooltip.mapped) {
@@ -267,18 +279,18 @@ void tooltip_hide()
 void start_show_timeout()
 {
        if (g_tooltip.timeout)
-               change_timeout(g_tooltip.timeout, g_tooltip.show_timeout_msec, 0, tooltip_show);
+               change_timeout(g_tooltip.timeout, g_tooltip.show_timeout_msec, 0, tooltip_show, 0);
        else
-               g_tooltip.timeout = add_timeout(g_tooltip.show_timeout_msec, 0, tooltip_show);
+               g_tooltip.timeout = add_timeout(g_tooltip.show_timeout_msec, 0, tooltip_show, 0);
 }
 
 
 void start_hide_timeout()
 {
        if (g_tooltip.timeout)
-               change_timeout(g_tooltip.timeout, g_tooltip.hide_timeout_msec, 0, tooltip_hide);
+               change_timeout(g_tooltip.timeout, g_tooltip.hide_timeout_msec, 0, tooltip_hide, 0);
        else
-               g_tooltip.timeout = add_timeout(g_tooltip.hide_timeout_msec, 0, tooltip_hide);
+               g_tooltip.timeout = add_timeout(g_tooltip.hide_timeout_msec, 0, tooltip_hide, 0);
 }
 
 
This page took 0.022142 seconds and 4 git commands to generate.