diff options
Diffstat (limited to 'baobab')
| -rw-r--r-- | baobab/src/baobab-chart.c | 38 | ||||
| -rw-r--r-- | baobab/src/baobab-prefs.c | 1 |
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); } |
