summaryrefslogtreecommitdiff
path: root/baobab
diff options
context:
space:
mode:
Diffstat (limited to 'baobab')
-rw-r--r--baobab/src/baobab-chart.c38
-rw-r--r--baobab/src/baobab-prefs.c1
2 files changed, 34 insertions, 5 deletions
diff --git a/baobab/src/baobab-chart.c b/baobab/src/baobab-chart.c
index d8350511..41642849 100644
--- a/baobab/src/baobab-chart.c
+++ b/baobab/src/baobab-chart.c
@@ -153,6 +153,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,
@@ -325,7 +327,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 +999,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,
+ gdouble x,
+ gdouble y)
{
BaobabChartPrivate *priv;
BaobabChartClass *class;
@@ -1016,7 +1019,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 +1042,14 @@ 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)
+{
+ /* Highlight any item the pointer is over */
+ baobab_chart_highlight_item_at_position (widget, event->x, event->y);
/* Continue receiving motion notifies */
gdk_event_request_motions (event);
@@ -1058,6 +1069,16 @@ baobab_chart_leave_notify (GtkWidget *widget,
return FALSE;
}
+static gint
+baobab_chart_enter_notify (GtkWidget *widget,
+ GdkEventCrossing *event)
+{
+ /* Highlight any item the pointer is over */
+ baobab_chart_highlight_item_at_position (widget, event->x, event->y);
+
+ return FALSE;
+}
+
static inline void
baobab_chart_connect_signals (GtkWidget *chart,
GtkTreeModel *model)
@@ -1095,6 +1116,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 +1154,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);
}
diff --git a/baobab/src/baobab-prefs.c b/baobab/src/baobab-prefs.c
index ef40e96f..fc8e997c 100644
--- a/baobab/src/baobab-prefs.c
+++ b/baobab/src/baobab-prefs.c
@@ -321,5 +321,6 @@ baobab_prefs_dialog (void)
G_CALLBACK (filechooser_response_cb), model);
gtk_widget_show_all (dlg);
+ g_object_unref (builder);
}