[sysprof] libsysprof-ui: allow double click to select mark range



commit 259aa9ba93d8bb86e9e8898ec73a09a39bdaaadf
Author: Christian Hergert <chergert redhat com>
Date:   Fri Mar 13 17:00:17 2020 -0700

    libsysprof-ui: allow double click to select mark range

 src/libsysprof-ui/sysprof-display.c    | 14 +++++++++++++
 src/libsysprof-ui/sysprof-display.h    |  4 ++++
 src/libsysprof-ui/sysprof-marks-page.c | 38 ++++++++++++++++++++++++++++++++++
 3 files changed, 56 insertions(+)
---
diff --git a/src/libsysprof-ui/sysprof-display.c b/src/libsysprof-ui/sysprof-display.c
index 835e3ea..87a0f97 100644
--- a/src/libsysprof-ui/sysprof-display.c
+++ b/src/libsysprof-ui/sysprof-display.c
@@ -1248,3 +1248,17 @@ _sysprof_display_reload_page (SysprofDisplay *self,
                            priv->filter,
                            NULL, NULL, NULL);
 }
+
+void
+sysprof_display_add_to_selection (SysprofDisplay *self,
+                                  gint64          begin_time,
+                                  gint64          end_time)
+{
+  SysprofDisplayPrivate *priv = sysprof_display_get_instance_private (self);
+  SysprofSelection *selection;
+
+  g_return_if_fail (SYSPROF_IS_DISPLAY (self));
+
+  selection = sysprof_visualizers_frame_get_selection (priv->visualizers);
+  sysprof_selection_select_range (selection, begin_time, end_time);
+}
diff --git a/src/libsysprof-ui/sysprof-display.h b/src/libsysprof-ui/sysprof-display.h
index 7f0ea9c..b228179 100644
--- a/src/libsysprof-ui/sysprof-display.h
+++ b/src/libsysprof-ui/sysprof-display.h
@@ -88,5 +88,9 @@ SYSPROF_AVAILABLE_IN_ALL
 gboolean            sysprof_display_get_can_replay   (SysprofDisplay          *self);
 SYSPROF_AVAILABLE_IN_ALL
 SysprofDisplay     *sysprof_display_replay           (SysprofDisplay          *self);
+SYSPROF_AVAILABLE_IN_3_38
+void                sysprof_display_add_to_selection (SysprofDisplay          *self,
+                                                      gint64                   begin_time,
+                                                      gint64                   end_time);
 
 G_END_DECLS
diff --git a/src/libsysprof-ui/sysprof-marks-page.c b/src/libsysprof-ui/sysprof-marks-page.c
index 7574d55..a24fbd3 100644
--- a/src/libsysprof-ui/sysprof-marks-page.c
+++ b/src/libsysprof-ui/sysprof-marks-page.c
@@ -384,6 +384,38 @@ sysprof_marks_page_set_size_group (SysprofPage  *page,
   gtk_size_group_add_widget (size_group, GTK_WIDGET (priv->details_box));
 }
 
+static void
+sysprof_marks_page_tree_view_row_activated_cb (SysprofMarksPage  *self,
+                                               GtkTreePath       *path,
+                                               GtkTreeViewColumn *column,
+                                               GtkTreeView       *tree_view)
+{
+  GtkTreeModel *model;
+  GtkTreeIter iter;
+
+  g_assert (SYSPROF_IS_MARKS_PAGE (self));
+  g_assert (path != NULL);
+  g_assert (GTK_IS_TREE_VIEW_COLUMN (column));
+  g_assert (GTK_IS_TREE_VIEW (tree_view));
+
+  model = gtk_tree_view_get_model (tree_view);
+
+  if (gtk_tree_model_get_iter (model, &iter, path))
+    {
+      SysprofDisplay *display;
+      gint64 begin_time;
+      gint64 end_time;
+
+      gtk_tree_model_get (model, &iter,
+                          SYSPROF_MARKS_MODEL_COLUMN_BEGIN_TIME, &begin_time,
+                          SYSPROF_MARKS_MODEL_COLUMN_END_TIME, &end_time,
+                          -1);
+
+      display = SYSPROF_DISPLAY (gtk_widget_get_ancestor (GTK_WIDGET (self), SYSPROF_TYPE_DISPLAY));
+      sysprof_display_add_to_selection (display, begin_time, end_time);
+    }
+}
+
 static void
 sysprof_marks_page_finalize (GObject *object)
 {
@@ -518,6 +550,12 @@ sysprof_marks_page_init (SysprofMarksPage *self)
                            self,
                            G_CONNECT_SWAPPED);
 
+  g_signal_connect_object (priv->tree_view,
+                           "row-activated",
+                           G_CALLBACK (sysprof_marks_page_tree_view_row_activated_cb),
+                           self,
+                           G_CONNECT_SWAPPED);
+
   g_signal_connect_object (priv->tree_view,
                            "query-tooltip",
                            G_CALLBACK (sysprof_marks_page_tree_view_query_tooltip_cb),


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]