Handle NULL models.
authorSoeren Sandmann <sandmann@redhat.com>
Fri, 3 Mar 2006 03:55:04 +0000 (03:55 +0000)
committerSøren Sandmann Pedersen <ssp@src.gnome.org>
Fri, 3 Mar 2006 03:55:04 +0000 (03:55 +0000)
Thu Mar  2 22:54:37 2006  Soeren Sandmann  <sandmann@redhat.com>

        * treeviewutils.c (tree_view_foreach_visible): Handle NULL models.

        * sysprof.glade, sysprof.c: Revert back to three pane layout.

ChangeLog
TODO
sysprof.c
sysprof.glade
treeviewutils.c

index 2316d32..6af1a4d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Thu Mar  2 22:54:37 2006  Soeren Sandmann  <sandmann@redhat.com>
+
+       * treeviewutils.c (tree_view_foreach_visible): Handle NULL models.
+
+       * sysprof.glade, sysprof.c: Revert back to three pane layout.
+
 2006-02-17  Bastien Nocera  <hadess@hadess.net>
 
        * configure.ac:
diff --git a/TODO b/TODO
index 1646e36..7f5210f 100644 (file)
--- a/TODO
+++ b/TODO
@@ -244,8 +244,6 @@ http://www.linuxbase.org/spec/booksets/LSB-Embedded/LSB-Embedded/ehframe.html
          the details of a function are not that interesting 
          together with a tree. (Could add radio buttons somewhere in
          in the right pane).
-       - CVS head now has two radio buttons in the right pane, and
-         caller pane is gone.
 
 - rethink caller list, not terribly useful at the moment. Federico suggested
   listing all ancestors.
@@ -468,6 +466,10 @@ Later:
 
 DONE:
 
+- CVS head now has two radio buttons in the right pane, and
+  caller pane is gone. (This turned out to be a bad idea, because it
+  is often useful to click on ancestors to move up the tree).
+
 * Don't build the GUI if gtk+ is not installed
 
 * Find out why we sometimes get reports of time spent by [pid 0].
index 2d1bfc9..a6e3bda 100644 (file)
--- a/sysprof.c
+++ b/sysprof.c
@@ -55,10 +55,6 @@ struct Application
     GtkTreeView *      object_view;
     GtkTreeView *      callers_view;
     GtkTreeView *      descendants_view;
-
-    GtkWidget *                ancestors_radiobutton;
-    GtkWidget *                descendants_radiobutton;
-    GtkWidget *                view_notebook;
     
     GtkWidget *                start_button;
     GtkWidget *                profile_button;
@@ -239,9 +235,6 @@ update_sensitivity (Application *app)
     gtk_widget_set_sensitive (GTK_WIDGET (app->callers_view), sensitive_tree_views);
     gtk_widget_set_sensitive (GTK_WIDGET (app->descendants_view), sensitive_tree_views);
     gtk_widget_set_sensitive (GTK_WIDGET (app->samples_label), sensitive_samples_label);
-
-    gtk_widget_set_sensitive (GTK_WIDGET (app->descendants_radiobutton), sensitive_tree_views);
-    gtk_widget_set_sensitive (GTK_WIDGET (app->ancestors_radiobutton), sensitive_tree_views);
     
     if (app->screenshot_window_visible)
        gtk_widget_show (app->screenshot_window);
@@ -312,10 +305,6 @@ delete_data (Application *app)
        gtk_tree_view_set_model (GTK_TREE_VIEW (app->callers_view), NULL);
        gtk_tree_view_set_model (GTK_TREE_VIEW (app->descendants_view), NULL);
     }
-
-    /* Show descendants by default for new profiles */
-    gtk_toggle_button_set_active (
-       GTK_TOGGLE_BUTTON (app->descendants_radiobutton), TRUE);
     
     collector_reset (app->collector);
     
@@ -1298,24 +1287,10 @@ on_screenshot_close_button_clicked (GtkWidget *widget,
 }
 
 static void
-switch_views (GtkWidget *widget,
-             Application *app)
-{
-    if (gtk_toggle_button_get_active (
-           GTK_TOGGLE_BUTTON (app->ancestors_radiobutton)))
-    {
-       gtk_notebook_set_current_page (GTK_NOTEBOOK (app->view_notebook), 1);
-    }
-    else
-    {
-       gtk_notebook_set_current_page (GTK_NOTEBOOK (app->view_notebook), 0);
-    }
-}
-
-static void
 set_sizes (GtkWindow *window,
           GtkWindow *screenshot_window,
-          GtkWidget *hpaned)
+          GtkWidget *hpaned,
+          GtkWidget *vpaned)
 {
     GdkScreen *screen;
     int monitor_num;
@@ -1333,6 +1308,7 @@ set_sizes (GtkWindow *window,
     
     gtk_window_resize (window, width, height);
     
+    gtk_paned_set_position (GTK_PANED (vpaned), height / 2);
     gtk_paned_set_position (GTK_PANED (hpaned), width * 3 / 8);
     
     width = monitor.width * 5 / 8;
@@ -1493,14 +1469,6 @@ build_gui (Application *app)
     g_signal_connect (app->descendants_view, "row_collapsed",
                      G_CALLBACK (on_descendants_row_expanded_or_collapsed), app);
     gtk_tree_view_column_set_expand (col, TRUE);
-
-    /* view notebook */
-    app->view_notebook = glade_xml_get_widget (xml, "view_notebook");
-    app->ancestors_radiobutton = glade_xml_get_widget (xml, "ancestors_radiobutton");
-    app->descendants_radiobutton = glade_xml_get_widget (xml, "descendants_radiobutton");
-
-    g_signal_connect (app->ancestors_radiobutton, "toggled", G_CALLBACK (switch_views), app);
-    g_signal_connect (app->descendants_radiobutton, "toggled", G_CALLBACK (switch_views), app);
     
     /* screenshot window */
     app->screenshot_window = glade_xml_get_widget (xml, "screenshot_window");
@@ -1516,7 +1484,8 @@ build_gui (Application *app)
     /* set sizes */
     set_sizes (GTK_WINDOW (app->main_window),
               GTK_WINDOW (app->screenshot_window),
-              glade_xml_get_widget (xml, "hpaned"));
+              glade_xml_get_widget (xml, "hpaned"),
+              glade_xml_get_widget (xml, "vpaned"));
     
     /* hide/show widgets */
     gtk_widget_show_all (app->main_window);
index 1190f71..f9210e7 100644 (file)
              <property name="border_width">3</property>
              <property name="visible">True</property>
              <property name="can_focus">True</property>
-             <property name="position">0</property>
 
              <child>
-               <widget class="GtkScrolledWindow" id="scrolledwindow7">
+               <widget class="GtkVPaned" id="vpaned">
                  <property name="visible">True</property>
                  <property name="can_focus">True</property>
-                 <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-                 <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-                 <property name="shadow_type">GTK_SHADOW_IN</property>
-                 <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
 
                  <child>
-                   <widget class="GtkTreeView" id="object_view">
+                   <widget class="GtkScrolledWindow" id="scrolledwindow1">
                      <property name="visible">True</property>
                      <property name="can_focus">True</property>
-                     <property name="headers_visible">True</property>
-                     <property name="rules_hint">True</property>
-                     <property name="reorderable">False</property>
-                     <property name="enable_search">True</property>
-                     <property name="fixed_height_mode">False</property>
-                     <property name="hover_selection">False</property>
-                     <property name="hover_expand">False</property>
-                   </widget>
-                 </child>
-               </widget>
-               <packing>
-                 <property name="shrink">True</property>
-                 <property name="resize">False</property>
-               </packing>
-             </child>
-
-             <child>
-               <widget class="GtkVBox" id="vbox5">
-                 <property name="visible">True</property>
-                 <property name="homogeneous">False</property>
-                 <property name="spacing">0</property>
-
-                 <child>
-                   <widget class="GtkNotebook" id="view_notebook">
-                     <property name="visible">True</property>
-                     <property name="show_tabs">False</property>
-                     <property name="show_border">False</property>
-                     <property name="tab_pos">GTK_POS_TOP</property>
-                     <property name="scrollable">False</property>
-                     <property name="enable_popup">False</property>
+                     <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+                     <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+                     <property name="shadow_type">GTK_SHADOW_IN</property>
+                     <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
 
                      <child>
-                       <widget class="GtkScrolledWindow" id="scrolledwindow6">
+                       <widget class="GtkTreeView" id="object_view">
                          <property name="visible">True</property>
                          <property name="can_focus">True</property>
-                         <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-                         <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-                         <property name="shadow_type">GTK_SHADOW_IN</property>
-                         <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
-                         <child>
-                           <widget class="GtkTreeView" id="descendants_view">
-                             <property name="visible">True</property>
-                             <property name="can_focus">True</property>
-                             <property name="headers_visible">True</property>
-                             <property name="rules_hint">True</property>
-                             <property name="reorderable">False</property>
-                             <property name="enable_search">True</property>
-                             <property name="fixed_height_mode">False</property>
-                             <property name="hover_selection">False</property>
-                             <property name="hover_expand">False</property>
-                           </widget>
-                         </child>
-                       </widget>
-                       <packing>
-                         <property name="tab_expand">False</property>
-                         <property name="tab_fill">True</property>
-                       </packing>
-                     </child>
-
-                     <child>
-                       <widget class="GtkLabel" id="label2">
-                         <property name="visible">True</property>
-                         <property name="label" translatable="yes">Descendants</property>
-                         <property name="use_underline">False</property>
-                         <property name="use_markup">False</property>
-                         <property name="justify">GTK_JUSTIFY_LEFT</property>
-                         <property name="wrap">False</property>
-                         <property name="selectable">False</property>
-                         <property name="xalign">0.5</property>
-                         <property name="yalign">0.5</property>
-                         <property name="xpad">0</property>
-                         <property name="ypad">0</property>
-                         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-                         <property name="width_chars">-1</property>
-                         <property name="single_line_mode">False</property>
-                         <property name="angle">0</property>
-                       </widget>
-                       <packing>
-                         <property name="type">tab</property>
-                       </packing>
-                     </child>
-
-                     <child>
-                       <widget class="GtkScrolledWindow" id="scrolledwindow5">
-                         <property name="visible">True</property>
-                         <property name="can_focus">True</property>
-                         <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-                         <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-                         <property name="shadow_type">GTK_SHADOW_IN</property>
-                         <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
-                         <child>
-                           <widget class="GtkTreeView" id="callers_view">
-                             <property name="visible">True</property>
-                             <property name="can_focus">True</property>
-                             <property name="headers_visible">True</property>
-                             <property name="rules_hint">True</property>
-                             <property name="reorderable">False</property>
-                             <property name="enable_search">True</property>
-                             <property name="fixed_height_mode">False</property>
-                             <property name="hover_selection">False</property>
-                             <property name="hover_expand">False</property>
-                           </widget>
-                         </child>
-                       </widget>
-                       <packing>
-                         <property name="tab_expand">False</property>
-                         <property name="tab_fill">True</property>
-                       </packing>
-                     </child>
-
-                     <child>
-                       <widget class="GtkLabel" id="label3">
-                         <property name="visible">True</property>
-                         <property name="label" translatable="yes">Ancestors</property>
-                         <property name="use_underline">False</property>
-                         <property name="use_markup">False</property>
-                         <property name="justify">GTK_JUSTIFY_LEFT</property>
-                         <property name="wrap">False</property>
-                         <property name="selectable">False</property>
-                         <property name="xalign">0.5</property>
-                         <property name="yalign">0.5</property>
-                         <property name="xpad">0</property>
-                         <property name="ypad">0</property>
-                         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-                         <property name="width_chars">-1</property>
-                         <property name="single_line_mode">False</property>
-                         <property name="angle">0</property>
+                         <property name="headers_visible">True</property>
+                         <property name="rules_hint">True</property>
+                         <property name="reorderable">False</property>
+                         <property name="enable_search">True</property>
+                         <property name="fixed_height_mode">False</property>
+                         <property name="hover_selection">False</property>
+                         <property name="hover_expand">False</property>
                        </widget>
-                       <packing>
-                         <property name="type">tab</property>
-                       </packing>
                      </child>
                    </widget>
                    <packing>
-                     <property name="padding">0</property>
-                     <property name="expand">True</property>
-                     <property name="fill">True</property>
+                     <property name="shrink">True</property>
+                     <property name="resize">False</property>
                    </packing>
                  </child>
 
                  <child>
-                   <widget class="GtkHBox" id="hbox2">
+                   <widget class="GtkScrolledWindow" id="scrolledwindow3">
                      <property name="visible">True</property>
-                     <property name="homogeneous">False</property>
-                     <property name="spacing">12</property>
-
-                     <child>
-                       <widget class="GtkRadioButton" id="descendants_radiobutton">
-                         <property name="visible">True</property>
-                         <property name="can_focus">True</property>
-                         <property name="label" translatable="yes">_Descendants</property>
-                         <property name="use_underline">True</property>
-                         <property name="relief">GTK_RELIEF_NORMAL</property>
-                         <property name="focus_on_click">True</property>
-                         <property name="active">False</property>
-                         <property name="inconsistent">False</property>
-                         <property name="draw_indicator">True</property>
-                       </widget>
-                       <packing>
-                         <property name="padding">0</property>
-                         <property name="expand">False</property>
-                         <property name="fill">False</property>
-                         <property name="pack_type">GTK_PACK_END</property>
-                       </packing>
-                     </child>
+                     <property name="can_focus">True</property>
+                     <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+                     <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+                     <property name="shadow_type">GTK_SHADOW_IN</property>
+                     <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
 
                      <child>
-                       <widget class="GtkRadioButton" id="ancestors_radiobutton">
+                       <widget class="GtkTreeView" id="callers_view">
                          <property name="visible">True</property>
                          <property name="can_focus">True</property>
-                         <property name="label" translatable="yes">_Ancestors</property>
-                         <property name="use_underline">True</property>
-                         <property name="relief">GTK_RELIEF_NORMAL</property>
-                         <property name="focus_on_click">True</property>
-                         <property name="active">False</property>
-                         <property name="inconsistent">False</property>
-                         <property name="draw_indicator">True</property>
-                         <property name="group">descendants_radiobutton</property>
+                         <property name="headers_visible">True</property>
+                         <property name="rules_hint">True</property>
+                         <property name="reorderable">False</property>
+                         <property name="enable_search">True</property>
+                         <property name="fixed_height_mode">False</property>
+                         <property name="hover_selection">False</property>
+                         <property name="hover_expand">False</property>
                        </widget>
-                       <packing>
-                         <property name="padding">0</property>
-                         <property name="expand">False</property>
-                         <property name="fill">False</property>
-                         <property name="pack_type">GTK_PACK_END</property>
-                       </packing>
                      </child>
                    </widget>
                    <packing>
-                     <property name="padding">0</property>
-                     <property name="expand">False</property>
-                     <property name="fill">False</property>
-                     <property name="pack_type">GTK_PACK_END</property>
+                     <property name="shrink">True</property>
+                     <property name="resize">True</property>
                    </packing>
                  </child>
                </widget>
                <packing>
                  <property name="shrink">True</property>
+                 <property name="resize">False</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkScrolledWindow" id="scrolledwindow2">
+                 <property name="visible">True</property>
+                 <property name="can_focus">True</property>
+                 <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+                 <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+                 <property name="shadow_type">GTK_SHADOW_IN</property>
+                 <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+                 <child>
+                   <widget class="GtkTreeView" id="descendants_view">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="headers_visible">True</property>
+                     <property name="rules_hint">True</property>
+                     <property name="reorderable">False</property>
+                     <property name="enable_search">True</property>
+                     <property name="fixed_height_mode">False</property>
+                     <property name="hover_selection">False</property>
+                     <property name="hover_expand">False</property>
+                   </widget>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="shrink">True</property>
                  <property name="resize">True</property>
                </packing>
              </child>
index 8f8f2c8..65f9b73 100644 (file)
@@ -265,6 +265,6 @@ tree_view_foreach_visible (GtkTreeView *view,
        GtkTreeModel *model = gtk_tree_view_get_model (view);
        GtkTreeIter iter;
        
-       if (gtk_tree_model_get_iter_first (model, &iter))
+       if (model && gtk_tree_model_get_iter_first (model, &iter))
                process_iter (view, &iter, callback, data);
 }