[gnome-disk-utility/udisks2-port] GduVolumeGrid: highlight item when mouse pointer is above it (like TreeView)
- From: David Zeuthen <davidz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-disk-utility/udisks2-port] GduVolumeGrid: highlight item when mouse pointer is above it (like TreeView)
- Date: Thu, 24 Nov 2011 14:45:12 +0000 (UTC)
commit 123f03291ec93ac279a098cb950b75e83bf2fcf3
Author: David Zeuthen <davidz redhat com>
Date: Thu Nov 24 09:43:48 2011 -0500
GduVolumeGrid: highlight item when mouse pointer is above it (like TreeView)
Signed-off-by: David Zeuthen <davidz redhat com>
src/palimpsest/gduvolumegrid.c | 45 +++++++++++++++++++++++++++++++++++++++-
1 files changed, 44 insertions(+), 1 deletions(-)
---
diff --git a/src/palimpsest/gduvolumegrid.c b/src/palimpsest/gduvolumegrid.c
index c7651bf..2079aa8 100644
--- a/src/palimpsest/gduvolumegrid.c
+++ b/src/palimpsest/gduvolumegrid.c
@@ -102,6 +102,8 @@ struct _GduVolumeGrid
UDisksClient *client;
UDisksObject *block_object;
+ gboolean pointer_inside;
+
gboolean container_visible;
gchar *container_markup;
@@ -429,7 +431,8 @@ gdu_volume_grid_realize (GtkWidget *widget)
GDK_BUTTON_PRESS_MASK |
GDK_BUTTON_RELEASE_MASK |
GDK_ENTER_NOTIFY_MASK |
- GDK_LEAVE_NOTIFY_MASK;
+ GDK_LEAVE_NOTIFY_MASK |
+ GDK_POINTER_MOTION_MASK;
attributes.visual = gtk_widget_get_visual (widget);
attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL;
@@ -496,6 +499,36 @@ gdu_volume_grid_get_preferred_height (GtkWidget *widget,
*minimal_height = *natural_height = 120;
}
+static gboolean
+gdu_volume_grid_enter (GtkWidget *widget,
+ GdkEventCrossing *event)
+{
+ GduVolumeGrid *grid = GDU_VOLUME_GRID (widget);
+ grid->pointer_inside = TRUE;
+ gtk_widget_queue_draw (widget);
+ return TRUE;
+}
+
+static gboolean
+gdu_volume_grid_leave (GtkWidget *widget,
+ GdkEventCrossing *event)
+{
+ GduVolumeGrid *grid = GDU_VOLUME_GRID (widget);
+ grid->pointer_inside = FALSE;
+ gtk_widget_queue_draw (widget);
+ return TRUE;
+}
+
+static gboolean
+gdu_volume_grid_motion (GtkWidget *widget,
+ GdkEventMotion *event)
+{
+ GduVolumeGrid *grid = GDU_VOLUME_GRID (widget);
+ if (grid->pointer_inside)
+ gtk_widget_queue_draw (widget);
+ return TRUE;
+}
+
static void
gdu_volume_grid_class_init (GduVolumeGridClass *klass)
{
@@ -515,6 +548,9 @@ gdu_volume_grid_class_init (GduVolumeGridClass *klass)
gtkwidget_class->get_preferred_width = gdu_volume_grid_get_preferred_width;
gtkwidget_class->get_preferred_height = gdu_volume_grid_get_preferred_height;
gtkwidget_class->draw = gdu_volume_grid_draw;
+ gtkwidget_class->enter_notify_event = gdu_volume_grid_enter;
+ gtkwidget_class->leave_notify_event = gdu_volume_grid_leave;
+ gtkwidget_class->motion_notify_event = gdu_volume_grid_motion;
g_object_class_install_property (gobject_class,
PROP_CLIENT,
@@ -847,6 +883,13 @@ render_element (GduVolumeGrid *grid,
gtk_style_context_add_class (context, GTK_STYLE_CLASS_NOTEBOOK);
gtk_style_context_add_class (context, "gnome-disk-utility-grid");
state = gtk_widget_get_state_flags (GTK_WIDGET (grid));
+ if (grid->pointer_inside)
+ {
+ gint px, py;
+ gtk_widget_get_pointer (GTK_WIDGET (grid), &px, &py);
+ if (px >= x && px < x + w && py >= y && py < y + h)
+ state |= GTK_STATE_FLAG_PRELIGHT;
+ }
if (is_selected)
state |= GTK_STATE_FLAG_SELECTED;
if (is_grid_focused)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]