Remove gtk_sheet_move_query function
[pspp-builds.git] / lib / gtksheet / gtksheet.c
index 4728891baa9ab46eccf4f34f25361987f40fcf6a..3743fe9bd4a14ff3d57fbd4e57a73fe493b16488 100644 (file)
@@ -119,7 +119,8 @@ default_row_height (const GtkSheet *sheet)
 {
   GtkWidget *widget = GTK_WIDGET (sheet);
 
-  if (!widget->style->font_desc) return 25;
+  if (! GTK_WIDGET_REALIZED (widget) || !widget->style->font_desc)
+    return 25;
   else
     {
       PangoContext *context = gtk_widget_get_pango_context (widget);
@@ -523,8 +524,6 @@ static void gtk_sheet_range_draw_selection   (GtkSheet *sheet,
 
 /* Selection */
 
-static gboolean gtk_sheet_move_query                    (GtkSheet *sheet,
-                                                 gint row, gint column);
 static void gtk_sheet_real_select_range         (GtkSheet *sheet,
                                                  const GtkSheetRange *range);
 static void gtk_sheet_real_unselect_range       (GtkSheet *sheet,
@@ -541,7 +540,7 @@ static void gtk_sheet_draw_border            (GtkSheet *sheet,
 static void gtk_sheet_entry_changed             (GtkWidget *widget,
                                                  gpointer data);
 static void gtk_sheet_hide_active_cell          (GtkSheet *sheet);
-static void activate_cell               (GtkSheet *sheet,
+static void change_active_cell          (GtkSheet *sheet,
                                          gint row, gint col);
 static void gtk_sheet_draw_active_cell          (GtkSheet *sheet);
 static void gtk_sheet_show_active_cell          (GtkSheet *sheet);
@@ -1103,6 +1102,7 @@ gtk_sheet_init (GtkSheet *sheet)
   sheet->sheet_window = NULL;
   sheet->entry_widget = NULL;
   sheet->entry_container = NULL;
+  sheet->entry_handler_id = 0;
   sheet->button = NULL;
 
   sheet->hadjustment = NULL;
@@ -1161,7 +1161,7 @@ columns_inserted_deleted_callback (GSheetModel *model, gint first_column,
   adjust_scrollbars (sheet);
 
   if (sheet->active_cell.col >= model_columns)
-    activate_cell (sheet, sheet->active_cell.row, model_columns - 1);
+    change_active_cell (sheet, sheet->active_cell.row, model_columns - 1);
 
   for (i = first_column; i <= max_visible_column (sheet); i++)
     gtk_sheet_column_title_button_draw (sheet, i);
@@ -1193,7 +1193,7 @@ rows_inserted_deleted_callback (GSheetModel *model, gint first_row,
   adjust_scrollbars (sheet);
 
   if (sheet->active_cell.row >= model_rows)
-    activate_cell (sheet, model_rows - 1, sheet->active_cell.col);
+    change_active_cell (sheet, model_rows - 1, sheet->active_cell.col);
 
   for (i = first_row; i <= max_visible_row (sheet); i++)
     gtk_sheet_row_title_button_draw (sheet, i);
@@ -1218,13 +1218,11 @@ range_update_callback (GSheetModel *m, gint row0, gint col0,
   range.rowi = rowi;
   range.coli = coli;
 
-  if ( max_visible_row (sheet) >
-       g_sheet_model_get_row_count (sheet->model)
+  if ( max_visible_row (sheet) > g_sheet_model_get_row_count (sheet->model)
        ||
-       max_visible_column (sheet) >
-       g_sheet_model_get_column_count (sheet->model))
+       max_visible_column (sheet) > g_sheet_model_get_column_count (sheet->model))
     {
-      gtk_sheet_move_query (sheet, 0, 0);
+      gtk_sheet_moveto (sheet, 0, 0, 0, 0);
     }
 
   if ( ( row0 < 0 && col0 < 0 ) || ( rowi < 0 && coli < 0 ) )
@@ -1370,11 +1368,8 @@ gtk_sheet_change_entry (GtkSheet *sheet, GtkType entry_type)
   if (state == GTK_SHEET_NORMAL)
     {
       gtk_sheet_show_active_cell (sheet);
-      g_signal_connect (gtk_sheet_get_entry (sheet),
-                       "changed",
-                       G_CALLBACK (gtk_sheet_entry_changed),
-                       sheet);
     }
+
 }
 
 void
@@ -2108,7 +2103,7 @@ gtk_sheet_map (GtkWidget *widget)
          gtk_widget_map (GTK_BIN (sheet->button)->child);
 
       gtk_sheet_range_draw (sheet, NULL);
-      activate_cell (sheet,
+      change_active_cell (sheet,
                     sheet->active_cell.row,
                     sheet->active_cell.col);
     }
@@ -2398,7 +2393,9 @@ gtk_sheet_set_cell (GtkSheet *sheet, gint row, gint col,
   old_text = g_sheet_model_get_string (model, row, col);
 
   if (0 != safe_strcmp (old_text, text))
-    changed = g_sheet_model_set_string (model, text, row, col);
+    {
+      changed = g_sheet_model_set_string (model, text, row, col);
+    }
 
   if ( g_sheet_model_free_strings (model))
     g_free (old_text);
@@ -2615,7 +2612,7 @@ gtk_sheet_set_active_cell (GtkSheet *sheet, gint row, gint col)
       return;
     }
 
-  activate_cell (sheet, row, col);
+  change_active_cell (sheet, row, col);
 }
 
 void
@@ -2698,10 +2695,11 @@ gtk_sheet_hide_active_cell (GtkSheet *sheet)
 }
 
 static void
-activate_cell (GtkSheet *sheet, gint row, gint col)
+change_active_cell (GtkSheet *sheet, gint row, gint col)
 {
   gint old_row, old_col;
-  g_return_if_fail (sheet != NULL);
+  glong old_handler_id = sheet->entry_handler_id;
+
   g_return_if_fail (GTK_IS_SHEET (sheet));
 
   if (row < 0 || col < 0)
@@ -2717,6 +2715,8 @@ activate_cell (GtkSheet *sheet, gint row, gint col)
       gtk_sheet_real_unselect_range (sheet, NULL);
     }
 
+  g_signal_handler_block   (sheet->entry_widget, sheet->entry_handler_id);
+
   old_row = sheet->active_cell.row;
   old_col = sheet->active_cell.col;
 
@@ -2733,13 +2733,12 @@ activate_cell (GtkSheet *sheet, gint row, gint col)
 
   gtk_sheet_show_active_cell (sheet);
 
-  g_signal_connect (gtk_sheet_get_entry (sheet),
-                   "changed",
-                   G_CALLBACK (gtk_sheet_entry_changed),
-                   sheet);
 
   g_signal_emit (sheet, sheet_signals [ACTIVATE], 0,
                 row, col, old_row, old_col);
+
+  if ( old_handler_id == sheet->entry_handler_id)
+    g_signal_handler_unblock   (sheet->entry_widget, sheet->entry_handler_id);
 }
 
 static void
@@ -2806,6 +2805,7 @@ gtk_sheet_show_active_cell (GtkSheet *sheet)
   gtk_widget_grab_focus (GTK_WIDGET (sheet_entry));
 
   dispose_string (sheet, text);
+
 }
 
 static void
@@ -3171,7 +3171,7 @@ gtk_sheet_unselect_range (GtkSheet *sheet)
   gtk_sheet_real_unselect_range (sheet, NULL);
   sheet->state = GTK_STATE_NORMAL;
 
-  activate_cell (sheet,
+  change_active_cell (sheet,
                 sheet->active_cell.row, sheet->active_cell.col);
 }
 
@@ -3329,10 +3329,12 @@ gtk_sheet_button_press (GtkWidget *widget,
                     sheet_signals[BUTTON_EVENT_COLUMN], 0,
                     column, event);
 
-      if ( event->type == GDK_2BUTTON_PRESS && event->button == 1)
-       g_signal_emit (sheet,
-                      sheet_signals[DOUBLE_CLICK_COLUMN], 0, column);
-
+      if (g_sheet_column_get_sensitivity (sheet->column_geometry, column))
+       {
+         if ( event->type == GDK_2BUTTON_PRESS && event->button == 1)
+           g_signal_emit (sheet,
+                          sheet_signals[DOUBLE_CLICK_COLUMN], 0, column);
+       }
     }
   else if (event->window == sheet->row_title_window)
     {
@@ -3340,11 +3342,14 @@ gtk_sheet_button_press (GtkWidget *widget,
                     sheet_signals[BUTTON_EVENT_ROW], 0,
                     row, event);
 
-      if ( event->type == GDK_2BUTTON_PRESS && event->button == 1)
-       g_signal_emit (sheet,
-                      sheet_signals[DOUBLE_CLICK_ROW], 0, row);
-    }
 
+      if (g_sheet_row_get_sensitivity (sheet->row_geometry, row))
+       {
+         if ( event->type == GDK_2BUTTON_PRESS && event->button == 1)
+           g_signal_emit (sheet,
+                          sheet_signals[DOUBLE_CLICK_ROW], 0, row);
+       }
+    }
 
   gdk_window_get_pointer (widget->window, NULL, NULL, &mods);
 
@@ -3550,7 +3555,7 @@ gtk_sheet_click_cell (GtkSheet *sheet, gint row, gint column)
       row = sheet->active_cell.row;
       column = sheet->active_cell.col;
 
-      activate_cell (sheet, row, column);
+      change_active_cell (sheet, row, column);
       return FALSE;
     }
 
@@ -3586,7 +3591,7 @@ gtk_sheet_click_cell (GtkSheet *sheet, gint row, gint column)
     }
   else
     {
-      activate_cell (sheet, row, column);
+      change_active_cell (sheet, row, column);
     }
 
   sheet->active_cell.row = row;
@@ -3704,7 +3709,7 @@ gtk_sheet_button_release (GtkWidget *widget,
     {
       GTK_SHEET_UNSET_FLAGS (sheet, GTK_SHEET_IN_SELECTION);
       gdk_display_pointer_ungrab (display, event->time);
-      activate_cell (sheet, sheet->active_cell.row,
+      change_active_cell (sheet, sheet->active_cell.row,
                               sheet->active_cell.col);
     }
 
@@ -4170,71 +4175,6 @@ gtk_sheet_crossing_notify (GtkWidget *widget,
   return TRUE;
 }
 
-
-static gboolean
-gtk_sheet_move_query (GtkSheet *sheet, gint row, gint column)
-{
-  gint height, width;
-  gint new_row = row;
-  gint new_col = column;
-
-  gint row_move = FALSE;
-  gint column_move = FALSE;
-  gfloat row_align = -1.0;
-  gfloat col_align = -1.0;
-
-  if (!GTK_WIDGET_REALIZED (GTK_WIDGET (sheet)))
-    return FALSE;
-
-  gdk_drawable_get_size (sheet->sheet_window, &width, &height);
-
-  if (row >= max_visible_row (sheet) &&
-      sheet->state != GTK_SHEET_COLUMN_SELECTED)
-    {
-      row_align = 1.;
-      new_row = MIN (g_sheet_row_get_row_count (sheet->row_geometry) - 1, row + 1);
-      row_move = TRUE;
-      if (max_visible_row (sheet) == g_sheet_row_get_row_count (sheet->row_geometry) - 1 &&
-         g_sheet_row_start_pixel (sheet->row_geometry, g_sheet_row_get_row_count (sheet->row_geometry) - 1) +
-         g_sheet_row_get_height (sheet->row_geometry, g_sheet_row_get_row_count (sheet->row_geometry) - 1) < height)
-       {
-         row_move = FALSE;
-         row_align = -1.;
-       }
-    }
-
-  if (row < min_visible_row (sheet) && sheet->state != GTK_SHEET_COLUMN_SELECTED)
-    {
-      row_align= 0.;
-      row_move = TRUE;
-    }
-  if (column >= max_visible_column (sheet) && sheet->state != GTK_SHEET_ROW_SELECTED)
-    {
-      col_align = 1.;
-      new_col = MIN (g_sheet_column_get_column_count (sheet->column_geometry) - 1, column + 1);
-      column_move = TRUE;
-      if (max_visible_column (sheet) == (g_sheet_column_get_column_count (sheet->column_geometry) - 1) &&
-         g_sheet_column_start_pixel (sheet->column_geometry, g_sheet_column_get_column_count (sheet->column_geometry) - 1) +
-         g_sheet_column_get_width (sheet->column_geometry, g_sheet_column_get_column_count (sheet->column_geometry) - 1) < width)
-       {
-         column_move = FALSE;
-         col_align = -1.;
-       }
-    }
-  if (column < min_visible_column (sheet) && sheet->state != GTK_SHEET_ROW_SELECTED)
-    {
-      col_align = 0.0;
-      column_move = TRUE;
-    }
-
-  if (row_move || column_move)
-    {
-      gtk_sheet_moveto (sheet, new_row, new_col, row_align, col_align);
-    }
-
-  return (row_move || column_move);
-}
-
 static void
 gtk_sheet_extend_selection (GtkSheet *sheet, gint row, gint column)
 {
@@ -4247,7 +4187,6 @@ gtk_sheet_extend_selection (GtkSheet *sheet, gint row, gint column)
 
   if (sheet->selection_mode == GTK_SELECTION_SINGLE) return;
 
-  gtk_sheet_move_query (sheet, row, column);
   gtk_widget_grab_focus (GTK_WIDGET (sheet));
 
   if (GTK_SHEET_IN_DRAG (sheet)) return;
@@ -4339,7 +4278,7 @@ page_vertical (GtkSheet *sheet, GtkScrollType dir)
 
   new_row =  yyy_row_ypixel_to_row (sheet, vpixel);
 
-  activate_cell (sheet, new_row,
+  change_active_cell (sheet, new_row,
                           sheet->active_cell.col);
 }
 
@@ -4389,7 +4328,7 @@ step_sheet (GtkSheet *sheet, GtkScrollType dir)
   if (forbidden)
     return;
 
-  activate_cell (sheet, new_row, new_col);
+  change_active_cell (sheet, new_row, new_col);
 
   if ( new_col > max_fully_visible_column (sheet))
     {
@@ -4471,7 +4410,7 @@ gtk_sheet_key_press (GtkWidget *widget,
       gtk_adjustment_set_value (sheet->vadjustment,
                                sheet->vadjustment->lower);
 
-      activate_cell (sheet,  0,
+      change_active_cell (sheet,  0,
                               sheet->active_cell.col);
 
       break;
@@ -4483,7 +4422,7 @@ gtk_sheet_key_press (GtkWidget *widget,
                                sheet->vadjustment->page_increment);
 
       /*
-       activate_cell (sheet,
+       change_active_cellx (sheet,
        g_sheet_row_get_row_count (sheet->row_geometry) - 1,
        sheet->active_cell.col);
       */
@@ -4799,6 +4738,12 @@ create_sheet_entry (GtkSheet *sheet)
                            G_CALLBACK (gtk_sheet_entry_key_press),
                            sheet);
 
+  sheet->entry_handler_id =
+    g_signal_connect (sheet->entry_widget,
+                     "changed",
+                     G_CALLBACK (gtk_sheet_entry_changed),
+                     sheet);
+
   gtk_widget_show (sheet->entry_widget);
 }