mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2026-02-12 16:10:54 +00:00
libsysprof-gtk: allow chart to activate layer item on click
This commit is contained in:
@ -40,9 +40,15 @@ enum {
|
|||||||
N_PROPS
|
N_PROPS
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
ACTIVATE_LAYER_ITEM,
|
||||||
|
N_SIGNALS
|
||||||
|
};
|
||||||
|
|
||||||
G_DEFINE_TYPE_WITH_PRIVATE (SysprofChart, sysprof_chart, GTK_TYPE_WIDGET)
|
G_DEFINE_TYPE_WITH_PRIVATE (SysprofChart, sysprof_chart, GTK_TYPE_WIDGET)
|
||||||
|
|
||||||
static GParamSpec *properties [N_PROPS];
|
static GParamSpec *properties[N_PROPS];
|
||||||
|
static guint signals[N_SIGNALS];
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -137,6 +143,31 @@ sysprof_chart_snapshot (GtkWidget *widget,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
sysprof_chart_click_pressed_cb (SysprofChart *self,
|
||||||
|
int n_presses,
|
||||||
|
double x,
|
||||||
|
double y,
|
||||||
|
GtkGestureClick *click)
|
||||||
|
{
|
||||||
|
g_autoptr(GObject) item = NULL;
|
||||||
|
GtkWidget *pick;
|
||||||
|
gboolean ret = GDK_EVENT_PROPAGATE;
|
||||||
|
|
||||||
|
g_assert (SYSPROF_IS_CHART (self));
|
||||||
|
g_assert (GTK_IS_GESTURE_CLICK (click));
|
||||||
|
|
||||||
|
if (n_presses != 1)
|
||||||
|
return GDK_EVENT_PROPAGATE;
|
||||||
|
|
||||||
|
if ((pick = gtk_widget_pick (GTK_WIDGET (self), x, y, GTK_PICK_DEFAULT)) &&
|
||||||
|
SYSPROF_IS_CHART_LAYER (pick) &&
|
||||||
|
(item = sysprof_chart_layer_lookup_item (SYSPROF_CHART_LAYER (pick), x, y)))
|
||||||
|
g_signal_emit (self, signals[ACTIVATE_LAYER_ITEM], 0, pick, item, &ret);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
sysprof_chart_dispose (GObject *object)
|
sysprof_chart_dispose (GObject *object)
|
||||||
{
|
{
|
||||||
@ -223,6 +254,18 @@ sysprof_chart_class_init (SysprofChartClass *klass)
|
|||||||
(G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS));
|
(G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS));
|
||||||
|
|
||||||
g_object_class_install_properties (object_class, N_PROPS, properties);
|
g_object_class_install_properties (object_class, N_PROPS, properties);
|
||||||
|
|
||||||
|
signals[ACTIVATE_LAYER_ITEM] =
|
||||||
|
g_signal_new ("activate-layer-item",
|
||||||
|
G_TYPE_FROM_CLASS (klass),
|
||||||
|
G_SIGNAL_RUN_LAST,
|
||||||
|
G_STRUCT_OFFSET (SysprofChartClass, activate_layer_item),
|
||||||
|
g_signal_accumulator_true_handled, NULL,
|
||||||
|
NULL,
|
||||||
|
G_TYPE_BOOLEAN,
|
||||||
|
2,
|
||||||
|
SYSPROF_TYPE_CHART_LAYER,
|
||||||
|
G_TYPE_OBJECT);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -230,6 +273,7 @@ sysprof_chart_init (SysprofChart *self)
|
|||||||
{
|
{
|
||||||
SysprofChartPrivate *priv = sysprof_chart_get_instance_private (self);
|
SysprofChartPrivate *priv = sysprof_chart_get_instance_private (self);
|
||||||
GtkEventController *motion;
|
GtkEventController *motion;
|
||||||
|
GtkEventController *click;
|
||||||
|
|
||||||
priv->motion_x = -1;
|
priv->motion_x = -1;
|
||||||
priv->motion_y = -1;
|
priv->motion_y = -1;
|
||||||
@ -251,6 +295,14 @@ sysprof_chart_init (SysprofChart *self)
|
|||||||
self,
|
self,
|
||||||
G_CONNECT_SWAPPED);
|
G_CONNECT_SWAPPED);
|
||||||
gtk_widget_add_controller (GTK_WIDGET (self), g_steal_pointer (&motion));
|
gtk_widget_add_controller (GTK_WIDGET (self), g_steal_pointer (&motion));
|
||||||
|
|
||||||
|
click = GTK_EVENT_CONTROLLER (gtk_gesture_click_new ());
|
||||||
|
g_signal_connect_object (click,
|
||||||
|
"pressed",
|
||||||
|
G_CALLBACK (sysprof_chart_click_pressed_cb),
|
||||||
|
self,
|
||||||
|
G_CONNECT_SWAPPED);
|
||||||
|
gtk_widget_add_controller (GTK_WIDGET (self), g_steal_pointer (&click));
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
|
|||||||
@ -37,6 +37,10 @@ struct _SysprofChartClass
|
|||||||
{
|
{
|
||||||
GtkWidgetClass parent_class;
|
GtkWidgetClass parent_class;
|
||||||
|
|
||||||
|
gboolean (*activate_layer_item) (SysprofChart *self,
|
||||||
|
SysprofChartLayer *layer,
|
||||||
|
gpointer item);
|
||||||
|
|
||||||
/*< private >*/
|
/*< private >*/
|
||||||
gpointer _reserved[16];
|
gpointer _reserved[16];
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user