Fix T43128: Headerless panels are reorderable on Windows
authorjulianeisel <julian_eisel@web.de>
Tue, 13 Jan 2015 02:29:25 +0000 (03:29 +0100)
committerjulianeisel <julian_eisel@web.de>
Tue, 13 Jan 2015 02:29:25 +0000 (03:29 +0100)
Seems like a weird issue, but to sort panels "qsort" is used, which works slightly different on Windows. So all I had
to do was cleaning up the logic in find_highest_panel so that headerless panels are sorted, but that it absolutly not
allows headerless panels to be above normal panels.
I made sure it works fine on Linux as well.

source/blender/editors/interface/interface_panel.c

index 5ccfa4193e9ab7274b4e00eeddc8b7ee542d6d6c..e68c86353a3545b3f1c3029a203a5d0dd1382c05 100644 (file)
@@ -753,9 +753,13 @@ static int find_highest_panel(const void *a1, const void *a2)
        const PanelSort *ps1 = a1, *ps2 = a2;
        
        /* stick uppermost header-less panels to the top of the region -
-        * prevent them from being sorted */
-       if (ps1->pa->sortorder < ps2->pa->sortorder && ps1->pa->type->flag & PNL_NO_HEADER) return -1;
-       
+        * prevent them from being sorted (multiple header-less panels have to be sorted though) */
+       if (ps1->pa->type->flag & PNL_NO_HEADER && ps2->pa->type->flag & PNL_NO_HEADER) {
+               /* skip and check for ofs and sortorder below */
+       }
+       else if (ps1->pa->type->flag & PNL_NO_HEADER) return -1;
+       else if (ps2->pa->type->flag & PNL_NO_HEADER) return 1;
+
        if (ps1->pa->ofsy + ps1->pa->sizey < ps2->pa->ofsy + ps2->pa->sizey) return 1;
        else if (ps1->pa->ofsy + ps1->pa->sizey > ps2->pa->ofsy + ps2->pa->sizey) return -1;
        else if (ps1->pa->sortorder > ps2->pa->sortorder) return 1;