psppire: Deal properly with inverted variable selections.
authorJohn Darrington <john@darrington.wattle.id.au>
Sun, 31 May 2020 11:31:45 +0000 (13:31 +0200)
committerJohn Darrington <john@darrington.wattle.id.au>
Sun, 31 May 2020 11:31:45 +0000 (13:31 +0200)
When deleting variables, if the start of a selected range is greater
than the end of the range, then swap the start and end.

src/ui/gui/psppire-data-editor.c
src/ui/gui/psppire-data-sheet.c
src/ui/gui/psppire-variable-sheet.c

index 7ddb0bff9c047ac000448ad30512aca6ca93bc9d..8bfb74df1601636f490b5e620918821f0ee5e357 100644 (file)
@@ -445,6 +445,13 @@ psppire_data_editor_var_delete_variables (PsppireDataEditor *de)
 {
   SswRange *range = SSW_SHEET(de->var_sheet)->selection;
 
+  if (range->start_x > range->end_x)
+    {
+      gint temp = range->start_x;
+      range->start_x = range->end_x;
+      range->end_x = temp;
+    }
+
   psppire_dict_delete_variables (de->dict, range->start_y,
                                 (range->end_y - range->start_y + 1));
 
index 3774bfbfd8a9ec1bdf3a8ccc17c7981fc1eb3f00..83bc892e15ceadcb54346de4d037ac81c1bb86bc 100644 (file)
@@ -273,6 +273,13 @@ psppire_data_sheet_delete_variables (PsppireDataSheet *sheet)
   PsppireDataStore *data_store = NULL;
   g_object_get (sheet, "data-model", &data_store, NULL);
 
+  if (range->start_x > range->end_x)
+    {
+      gint temp = range->start_x;
+      range->start_x = range->end_x;
+      range->end_x = temp;
+    }
+
   psppire_dict_delete_variables (data_store->dict, range->start_x,
                                 (range->end_x - range->start_x + 1));
 
index 41c428fffc2c2708f9e98331f182d72872863e5f..149403743aa16fe5404a1212b5ee02271708a5d2 100644 (file)
@@ -248,6 +248,13 @@ delete_variables (SswSheet *sheet)
   PsppireDict *dict = NULL;
   g_object_get (sheet, "data-model", &dict, NULL);
 
+  if (range->start_x > range->end_x)
+    {
+      gint temp = range->start_x;
+      range->start_x = range->end_x;
+      range->end_x = temp;
+    }
+
   psppire_dict_delete_variables (dict, range->start_y,
                                 (range->end_y - range->start_y + 1));