+
+/* Update the Edit->Paste menuitem
+ If PAGE is not -1 , then it should be set to the current page of
+ the data editors notebook widget.
+ If -1, then it'll be queried.
+*/
+static void
+update_paste_menuitem (struct data_editor *de, gint page)
+{
+ GtkWidget * edit_paste = get_widget_assert (de->xml, "edit_paste");
+ GtkWidget *notebook = get_widget_assert (de->xml, "notebook");
+ GtkSheet * data_sheet ;
+ gint row, column;
+
+ if ( page < 0 )
+ page = gtk_notebook_get_current_page (GTK_NOTEBOOK(notebook));
+
+
+ if ( PAGE_VAR_SHEET == page )
+ {
+ /* We don't yet support pasting to the var sheet */
+ gtk_widget_set_sensitive (edit_paste, FALSE);
+ return;
+ }
+
+ data_sheet = GTK_SHEET (get_widget_assert (de->xml, "data_sheet"));
+
+ gtk_sheet_get_active_cell (data_sheet, &row, &column);
+
+ if ( row < 0 || column < 0 )
+ gtk_widget_set_sensitive (edit_paste, FALSE);
+ else
+ gtk_widget_set_sensitive (edit_paste, TRUE);
+}
+
+/* Update the Edit->Cut and Edit->Copy menuitems
+ If PAGE is not -1 , then it should be set to the current page of
+ the data editors notebook widget.
+ If -1, then it'll be queried.
+*/
+static void
+update_cut_copy_menuitem (struct data_editor *de, gint page)
+{
+ GtkWidget * edit_copy = get_widget_assert (de->xml, "edit_copy");
+ GtkWidget * edit_cut = get_widget_assert (de->xml, "edit_cut");
+ GtkWidget *notebook = get_widget_assert (de->xml, "notebook");
+ GtkSheet * data_sheet ;
+ gint row, column;
+
+ if ( page < 0 )
+ page = gtk_notebook_get_current_page (GTK_NOTEBOOK(notebook));
+
+
+ if ( PAGE_VAR_SHEET == page )
+ {
+ /* We don't yet support copying from the var sheet */
+ gtk_widget_set_sensitive (edit_copy, FALSE);
+ gtk_widget_set_sensitive (edit_cut, FALSE);
+ return;
+ }
+
+ data_sheet = GTK_SHEET (get_widget_assert (de->xml, "data_sheet"));
+
+ gtk_sheet_get_active_cell (data_sheet, &row, &column);
+
+ if ( row < 0 || column < 0 )
+ {
+ gtk_widget_set_sensitive (edit_copy, FALSE);
+ gtk_widget_set_sensitive (edit_cut, FALSE);
+ return;
+ }
+
+ gtk_widget_set_sensitive (edit_copy, TRUE);
+ gtk_widget_set_sensitive (edit_cut, TRUE);
+}
+
+
+/* Callback for when the datasheet's active cell becomes active/inactive */
+static gboolean
+on_data_sheet_activate_change (GtkSheet *sheet,
+ gint row, gint column, gpointer data)
+{
+ struct data_editor *de = data;
+
+ update_paste_menuitem (de, -1);
+ update_cut_copy_menuitem (de, -1);
+
+ return TRUE;
+}
+