#include "panel.h"
#include "timer.h"
-static int x, y, width, height;
+static int x_original, y_original, x, y, width, height;
// the next functions are helper functions for tooltip handling
void start_show_timeout();
}
-void tooltip_trigger_show(Area* area, Panel* p, int x_root, int y_root)
+void tooltip_trigger_show(Area* area, Panel* p, XEvent *e)
{
- x = x_root;
- y = y_root;
+ // Position the tooltip in the center of the area
+ x = x_original = area->posx + area->width / 2 + e->xmotion.x_root - e->xmotion.x;
+ y = y_original = area->posy + area->height / 2 + e->xmotion.y_root - e->xmotion.y;
g_tooltip.panel = p;
if (g_tooltip.mapped && g_tooltip.area != area) {
tooltip_copy_text(area);
void tooltip_show(void* arg)
{
- int mx, my;
- Window w;
- XTranslateCoordinates( server.dsp, server.root_win, g_tooltip.panel->main_win, x, y, &mx, &my, &w);
- Area* area = click_area(g_tooltip.panel, mx, my);
+ int mx, my;
+ Window w;
+ XTranslateCoordinates( server.dsp, server.root_win, g_tooltip.panel->main_win, x, y, &mx, &my, &w);
+ Area* area = click_area(g_tooltip.panel, mx, my);
stop_tooltip_timeout();
if (!g_tooltip.mapped && area->_get_tooltip_text) {
tooltip_copy_text(area);
width = 2*g_tooltip.bg->border.width + 2*g_tooltip.paddingx + r2.width;
height = 2*g_tooltip.bg->border.width + 2*g_tooltip.paddingy + r2.height;
+ x = x_original;
+ y = y_original;
+
Panel* panel = g_tooltip.panel;
if (panel_horizontal && panel_position & BOTTOM)
y = panel->posy-height;
else
x = panel->posx - width;
+ if (!panel_horizontal)
+ y -= height/2;
+
g_object_unref(layout);
cairo_destroy(c);
cairo_surface_destroy(cs);