Improve reliability of active cell border display
[pspp-builds.git] / lib / gtksheet / gtksheet.c
index c638c9e7d1dbf96c6161c66ebf70bd754d3e6475..a60882bf2dd2fb512ac84cb5e5f877ec1b176ce0 100644 (file)
@@ -457,7 +457,7 @@ static void gtk_sheet_entry_changed          (GtkWidget *widget,
 static void gtk_sheet_hide_entry_widget                 (GtkSheet *sheet);
 static void change_active_cell          (GtkSheet *sheet,
                                          gint row, gint col);
-static void gtk_sheet_draw_active_cell          (GtkSheet *sheet);
+static gboolean gtk_sheet_draw_active_cell              (GtkSheet *sheet);
 static void gtk_sheet_show_entry_widget                 (GtkSheet *sheet);
 static gboolean gtk_sheet_click_cell            (GtkSheet *sheet,
                                                  gint row,
@@ -1062,9 +1062,6 @@ gtk_sheet_init (GtkSheet *sheet)
 
   sheet->motion_timer = 0;
 
-  sheet->columns_resizable = TRUE;
-  sheet->rows_resizable = TRUE;
-
   sheet->row_titles_visible = TRUE;
   sheet->row_title_area.width = DEFAULT_COLUMN_WIDTH;
 
@@ -1455,26 +1452,6 @@ gtk_sheet_moveto (GtkSheet *sheet,
 }
 
 
-static gboolean
-gtk_sheet_columns_resizable (GtkSheet *sheet)
-{
-  g_return_val_if_fail (sheet != NULL, FALSE);
-  g_return_val_if_fail (GTK_IS_SHEET (sheet), FALSE);
-
-  return sheet->columns_resizable;
-}
-
-
-static gboolean
-gtk_sheet_rows_resizable (GtkSheet *sheet)
-{
-  g_return_val_if_fail (sheet != NULL, FALSE);
-  g_return_val_if_fail (GTK_IS_SHEET (sheet), FALSE);
-
-  return sheet->rows_resizable;
-}
-
-
 void
 gtk_sheet_select_row (GtkSheet *sheet, gint row)
 {
@@ -1809,8 +1786,8 @@ gtk_sheet_realize (GtkWidget *widget)
   sheet->fg_gc = gdk_gc_new (widget->window);
   sheet->bg_gc = gdk_gc_new (widget->window);
 
-  values.foreground = widget->style->white;
-  values.function = GDK_INVERT;
+  values.foreground = widget->style->black;
+  values.function = GDK_COPY;
   values.subwindow_mode = GDK_INCLUDE_INFERIORS;
   values.line_width = BORDER_WIDTH;
 
@@ -2660,15 +2637,12 @@ gtk_sheet_show_entry_widget (GtkSheet *sheet)
   dispose_string (sheet, text);
 }
 
-static void
+static gboolean
 gtk_sheet_draw_active_cell (GtkSheet *sheet)
 {
   gint row, col;
   GtkSheetRange range;
 
-  if (!GTK_WIDGET_DRAWABLE (GTK_WIDGET (sheet))) return;
-  if (!GTK_WIDGET_REALIZED (GTK_WIDGET (sheet))) return;
-
   row = sheet->active_cell.row;
   col = sheet->active_cell.col;
 
@@ -2681,6 +2655,8 @@ gtk_sheet_draw_active_cell (GtkSheet *sheet)
   range.row0 = range.rowi = row;
 
   gtk_sheet_draw_border (sheet, range);
+
+  return FALSE;
 }
 
 
@@ -3130,7 +3106,7 @@ gtk_sheet_expose (GtkWidget *widget,
       if ((!GTK_SHEET_IN_XDRAG (sheet)) && (!GTK_SHEET_IN_YDRAG (sheet)))
        {
          if (sheet->state == GTK_SHEET_NORMAL)
-           gtk_sheet_draw_active_cell (sheet);
+           g_idle_add (gtk_sheet_draw_active_cell, sheet);
        }
     }
 
@@ -3200,8 +3176,7 @@ gtk_sheet_button_press (GtkWidget *widget,
 
 
   /* press on resize windows */
-  if (event->window == sheet->column_title_window &&
-      gtk_sheet_columns_resizable (sheet))
+  if (event->window == sheet->column_title_window)
     {
 #if 0
       gtk_widget_get_pointer (widget, &sheet->x_drag, NULL);
@@ -3227,7 +3202,7 @@ gtk_sheet_button_press (GtkWidget *widget,
        }
     }
 
-  if (event->window == sheet->row_title_window && gtk_sheet_rows_resizable (sheet))
+  if (event->window == sheet->row_title_window)
     {
       gtk_widget_get_pointer (widget, NULL, &sheet->y_drag);
 
@@ -3752,8 +3727,7 @@ gtk_sheet_motion (GtkWidget *widget,  GdkEventMotion *event)
        }
     }
 
-  if (event->window == sheet->column_title_window &&
-      gtk_sheet_columns_resizable (sheet))
+  if (event->window == sheet->column_title_window)
     {
       if (!GTK_SHEET_IN_SELECTION (sheet) &&
          on_column_boundary (sheet, x, &column))
@@ -3781,8 +3755,7 @@ gtk_sheet_motion (GtkWidget *widget,  GdkEventMotion *event)
        }
     }
 
-  if (event->window == sheet->row_title_window &&
-      gtk_sheet_rows_resizable (sheet))
+  if (event->window == sheet->row_title_window)
     {
 #if AXIS_TRANSITION
       if (!GTK_SHEET_IN_SELECTION (sheet) && POSSIBLE_YDRAG (sheet, y, &column))
@@ -4151,6 +4124,15 @@ step_sheet (GtkSheet *sheet, GtkScrollType dir)
     }
 
 
+  g_signal_emit (sheet, sheet_signals[TRAVERSE], 0,
+                &sheet->active_cell,
+                &new_cell,
+                &forbidden);
+
+  if (forbidden)
+    return;
+
+
   maximize_int (&new_cell.row, 0);
   maximize_int (&new_cell.col, 0);
 
@@ -4160,14 +4142,6 @@ step_sheet (GtkSheet *sheet, GtkScrollType dir)
   minimize_int (&new_cell.col,
                psppire_axis_unit_count (sheet->haxis) - 1);
 
-  g_signal_emit (sheet, sheet_signals[TRAVERSE], 0,
-                &sheet->active_cell,
-                &new_cell,
-               &forbidden);
-
-  if (forbidden)
-    return;
-
   change_active_cell (sheet, new_cell.row, new_cell.col);
 
 
@@ -4870,10 +4844,12 @@ update_adjustment (GtkAdjustment *adj, PsppireAxis *axis, gint page_size)
   adj->lower = 0;
   adj->page_size = page_size;
 
+#if 0
   adj->value = position * (adj->upper - adj->lower) - adj->page_size;
 
   if ( adj->value < adj->lower)
     adj->value = adj->lower;
+#endif
 
   gtk_adjustment_changed (adj);
 }