pspp-sheet-view: Edit cells on the first click by default.
[pspp] / src / ui / gui / pspp-sheet-view.c
index b836e3655354ec092e95f348c6117a5723592938..a777809cfcd3a908fb5699722e9d79658978efd0 100644 (file)
@@ -186,10 +186,6 @@ static gboolean pspp_sheet_view_button_release       (GtkWidget        *widget,
                                                    GdkEventButton   *event);
 static gboolean pspp_sheet_view_grab_broken          (GtkWidget          *widget,
                                                    GdkEventGrabBroken *event);
-#if 0
-static gboolean pspp_sheet_view_configure            (GtkWidget         *widget,
-                                                   GdkEventConfigure *event);
-#endif
 
 static void     pspp_sheet_view_set_focus_child      (GtkContainer     *container,
                                                    GtkWidget        *child);
@@ -697,13 +693,6 @@ pspp_sheet_view_class_init (PsppSheetViewClass *class)
                                                             0, G_MAXINT, 1,
                                                             GTK_PARAM_READABLE));
 
-  gtk_widget_class_install_style_property (widget_class,
-                                          g_param_spec_string ("grid-line-pattern",
-                                                               P_("Grid line pattern"),
-                                                               P_("Dash pattern used to draw the tree view grid lines"),
-                                                               "\1\1",
-                                                               GTK_PARAM_READABLE));
-
   gtk_widget_class_install_style_property (widget_class,
                                           g_param_spec_string ("tree-line-pattern",
                                                                P_("Tree line pattern"),
@@ -2169,8 +2158,9 @@ pspp_sheet_view_button_press (GtkWidget      *widget,
          else
            anchor = NULL;
 
-         if ((anchor && !gtk_tree_path_compare (anchor, path))
-             || !_pspp_sheet_view_column_has_editable_cell (column))
+         if (pspp_sheet_view_column_get_quick_edit (column)
+              || (anchor && !gtk_tree_path_compare (anchor, path))
+              || !_pspp_sheet_view_column_has_editable_cell (column))
            {
              GtkCellEditable *cell_editable = NULL;
 
@@ -2485,6 +2475,18 @@ pspp_sheet_view_button_release (GtkWidget      *widget,
 {
   PsppSheetView *tree_view = PSPP_SHEET_VIEW (widget);
 
+  if (tree_view->priv->edited_column &&
+      tree_view->priv->edited_column->editable_widget)
+    {
+      /* When a column is in quick-edit mode, the initial button press that
+       * starts editing implicitly grabs the pointer, so that the corresponding
+       * release doesn't get passed along to the GtkWidget created by the
+       * press.  Pass the release along explicitly. */
+      gtk_widget_event (GTK_WIDGET (tree_view->priv->edited_column->editable_widget),
+                        (GdkEvent *) event);
+      return FALSE;
+    }
+
   if (PSPP_SHEET_VIEW_FLAG_SET (tree_view, PSPP_SHEET_VIEW_IN_COLUMN_DRAG))
     return pspp_sheet_view_button_release_drag_column (widget, event);
 
@@ -2515,20 +2517,6 @@ pspp_sheet_view_grab_broken (GtkWidget          *widget,
   return TRUE;
 }
 
-#if 0
-static gboolean
-pspp_sheet_view_configure (GtkWidget *widget,
-                        GdkEventConfigure *event)
-{
-  PsppSheetView *tree_view;
-
-  tree_view = PSPP_SHEET_VIEW (widget);
-  tree_view->priv->search_position_func (tree_view, tree_view->priv->search_window);
-
-  return FALSE;
-}
-#endif
-
 /* GtkWidget::motion_event function set.
  */
 
@@ -3485,11 +3473,14 @@ pspp_sheet_view_draw_grid_lines (PsppSheetView    *tree_view,
   GList *list = tree_view->priv->columns;
   gint i = 0;
   gint current_x = 0;
+  gint height;
 
   if (tree_view->priv->grid_lines != PSPP_SHEET_VIEW_GRID_LINES_VERTICAL
       && tree_view->priv->grid_lines != PSPP_SHEET_VIEW_GRID_LINES_BOTH)
     return;
 
+  gdk_drawable_get_size (event->window, NULL, &height);
+
   /* Only draw the lines for visible rows and columns */
   for (list = tree_view->priv->columns; list; list = list->next, i++)
     {
@@ -3504,10 +3495,12 @@ pspp_sheet_view_draw_grid_lines (PsppSheetView    *tree_view,
 
       current_x += column->width;
 
-      gdk_draw_line (event->window,
-                    tree_view->priv->grid_line_gc,
-                    current_x - 1, 0,
-                    current_x - 1, tree_view->priv->height);
+      if (current_x - 1 >= event->area.x
+          && current_x - 1 < event->area.x + event->area.width)
+        gdk_draw_line (event->window,
+                       tree_view->priv->grid_line_gc,
+                       current_x - 1, 0,
+                       current_x - 1, height);
     }
 }
 
@@ -7741,10 +7734,7 @@ pspp_sheet_view_move_cursor_left_right (PsppSheetView *tree_view,
 
   if (found_column)
     {
-      if (!pspp_sheet_view_has_special_cell (tree_view))
-       _pspp_sheet_view_queue_draw_node (tree_view,
-                                          cursor_node,
-                                          NULL);
+      _pspp_sheet_view_queue_draw_node (tree_view, cursor_node, NULL);
       g_signal_emit (tree_view, tree_view_signals[CURSOR_CHANGED], 0);
       gtk_widget_grab_focus (GTK_WIDGET (tree_view));
     }
@@ -11880,22 +11870,13 @@ pspp_sheet_view_set_grid_lines (PsppSheetView           *tree_view,
          !priv->grid_line_gc)
        {
          gint line_width;
-         gint8 *dash_list;
 
          gtk_widget_style_get (widget,
                                "grid-line-width", &line_width,
-                               "grid-line-pattern", (gchar *)&dash_list,
                                NULL);
       
          priv->grid_line_gc = gdk_gc_new (widget->window);
          gdk_gc_copy (priv->grid_line_gc, widget->style->black_gc);
-         
-         gdk_gc_set_line_attributes (priv->grid_line_gc, line_width,
-                                     GDK_LINE_ON_OFF_DASH,
-                                     GDK_CAP_BUTT, GDK_JOIN_MITER);
-         gdk_gc_set_dashes (priv->grid_line_gc, 0, dash_list, 2);
-
-         g_free (dash_list);
        }      
     }