summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlightdarkgreen <[email protected]>2026-03-21 14:21:28 -0500
committerVictor Kareh <[email protected]>2026-03-31 10:57:57 -0400
commit5b40c1c06de97eb1d20e40f31aea8f05d7d4d8a0 (patch)
tree8b17ad657af4ab087c59ead55084c34f79143165
parent796ebf6eb41e3dd77efc25eba2566b2c4c33c3a3 (diff)
downloadmate-utils-5b40c1c06de97eb1d20e40f31aea8f05d7d4d8a0.tar.bz2
mate-utils-5b40c1c06de97eb1d20e40f31aea8f05d7d4d8a0.tar.xz
baobab-chart: Fix tooltips not being displayed (#206)
-rw-r--r--baobab/src/baobab-chart.c56
1 files changed, 49 insertions, 7 deletions
diff --git a/baobab/src/baobab-chart.c b/baobab/src/baobab-chart.c
index d8350511..0b21078a 100644
--- a/baobab/src/baobab-chart.c
+++ b/baobab/src/baobab-chart.c
@@ -73,6 +73,7 @@ struct _BaobabChartPrivate
GList *first_item;
GList *last_item;
GList *highlighted_item;
+ GList *tooltip_item;
};
/* Signals */
@@ -153,6 +154,8 @@ static gint baobab_chart_scroll (GtkWidget *widget,
GdkEventScroll *event);
static gint baobab_chart_motion_notify (GtkWidget *widget,
GdkEventMotion *event);
+static gint baobab_chart_enter_notify (GtkWidget *widget,
+ GdkEventCrossing *event);
static gint baobab_chart_leave_notify (GtkWidget *widget,
GdkEventCrossing *event);
static inline void baobab_chart_disconnect_signals (GtkWidget *chart,
@@ -257,6 +260,7 @@ baobab_chart_init (BaobabChart *chart)
priv->first_item = NULL;
priv->last_item = NULL;
priv->highlighted_item = NULL;
+ priv->tooltip_item = NULL;
}
static void
@@ -325,7 +329,7 @@ baobab_chart_realize (GtkWidget *widget)
GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK |
GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK |
GDK_POINTER_MOTION_HINT_MASK | GDK_LEAVE_NOTIFY_MASK |
- GDK_SCROLL_MASK);
+ GDK_ENTER_NOTIFY_MASK | GDK_SCROLL_MASK);
}
static void
@@ -997,9 +1001,10 @@ baobab_chart_set_item_highlight (GtkWidget *chart,
&item->rect, TRUE);
}
-static gint
-baobab_chart_motion_notify (GtkWidget *widget,
- GdkEventMotion *event)
+static void
+baobab_chart_highlight_item_at_position (GtkWidget *widget,
+ gint x,
+ gint y)
{
BaobabChartPrivate *priv;
BaobabChartClass *class;
@@ -1016,7 +1021,7 @@ baobab_chart_motion_notify (GtkWidget *widget,
{
item = (BaobabChartItem *) node->data;
- if ((item->visible) && (class->is_point_over_item (widget, item, event->x, event->y)))
+ if ((item->visible) && (class->is_point_over_item (widget, item, x, y)))
{
if (priv->highlighted_item != node)
{
@@ -1039,6 +1044,20 @@ baobab_chart_motion_notify (GtkWidget *widget,
baobab_chart_set_item_highlight (widget, priv->highlighted_item, FALSE);
gtk_widget_set_has_tooltip (widget, FALSE);
}
+}
+
+static gint
+baobab_chart_motion_notify (GtkWidget *widget,
+ GdkEventMotion *event)
+{
+ BaobabChartPrivate *priv;
+
+ /* Highlight any item the pointer is over */
+ baobab_chart_highlight_item_at_position (widget, event->x, event->y);
+
+ /* Set the tooltip item to the highlighted item, if any */
+ priv = BAOBAB_CHART (widget)->priv;
+ priv->tooltip_item = priv->highlighted_item;
/* Continue receiving motion notifies */
gdk_event_request_motions (event);
@@ -1058,6 +1077,22 @@ baobab_chart_leave_notify (GtkWidget *widget,
return FALSE;
}
+static gint
+baobab_chart_enter_notify (GtkWidget *widget,
+ GdkEventCrossing *event)
+{
+ BaobabChartPrivate *priv;
+
+ /* Highlight any item the pointer is over */
+ baobab_chart_highlight_item_at_position (widget, event->x, event->y);
+
+ /* Set the tooltip item to the highlighted item, if any */
+ priv = BAOBAB_CHART (widget)->priv;
+ priv->tooltip_item = priv->highlighted_item;
+
+ return FALSE;
+}
+
static inline void
baobab_chart_connect_signals (GtkWidget *chart,
GtkTreeModel *model)
@@ -1095,6 +1130,10 @@ baobab_chart_connect_signals (GtkWidget *chart,
G_CALLBACK (baobab_chart_leave_notify),
chart);
g_signal_connect (chart,
+ "enter-notify-event",
+ G_CALLBACK (baobab_chart_enter_notify),
+ chart);
+ g_signal_connect (chart,
"button-release-event",
G_CALLBACK (baobab_chart_button_release),
chart);
@@ -1129,6 +1168,9 @@ baobab_chart_disconnect_signals (GtkWidget *chart,
baobab_chart_leave_notify,
chart);
g_signal_handlers_disconnect_by_func (chart,
+ baobab_chart_enter_notify,
+ chart);
+ g_signal_handlers_disconnect_by_func (chart,
baobab_chart_button_release,
chart);
}
@@ -1147,10 +1189,10 @@ baobab_chart_query_tooltip (GtkWidget *widget,
priv = BAOBAB_CHART (widget)->priv;
- if (priv->highlighted_item == NULL)
+ if (priv->tooltip_item == NULL)
return FALSE;
- item = (BaobabChartItem *) priv->highlighted_item->data;
+ item = (BaobabChartItem *) priv->tooltip_item->data;
if ( (item->name == NULL) || (item->size == NULL) )
return FALSE;