Ignore:
Timestamp:
Jan 9, 2017, 11:09:38 AM (3 years ago)
Author:
jrpelegrina
Message:

Update new version: 3.15.02

File:
1 edited

Legend:

Unmodified
Added
Removed
  • filezilla/trunk/fuentes/src/interface/filelistctrl.cpp

    r130 r3185  
    261261#endif
    262262
    263 #if defined __WXGTK__ && !defined(__WXGTK3__)
     263#if defined(__WXGTK__) && !defined(__WXGTK3__)
    264264        m_gtkEventCallbackProxy.reset(new CGtkEventCallbackProxy<CFileData>(this));
    265265
     
    285285        CancelLabelEdit();
    286286
    287         if (column != -1)
    288         {
     287        if (column != -1) {
    289288                if (column != m_sortColumn)
    290289                {
     
    301300
    302301        int newVisibleColumn = GetColumnVisibleIndex(column);
    303         if (newVisibleColumn == -1)
    304         {
     302        if (newVisibleColumn == -1) {
    305303                newVisibleColumn = 0;
    306304                column = 0;
     
    311309        // Remember which files are selected
    312310        bool *selected = 0;
    313         int focused = -1;
    314         if (updateSelections)
    315         {
    316                 selected = new bool[m_fileData.size()];
    317                 memset(selected, 0, sizeof(bool) * m_fileData.size());
    318 
     311        int focused_item = -1;
     312        unsigned int focused_index{};
     313
     314        if (updateSelections) {
    319315#ifndef __WXMSW__
    320316                // GetNextItem is O(n) if nothing is selected, GetSelectedItemCount() is O(1)
     
    322318#endif
    323319                {
    324                         int item = -1;
    325                         while ((item = GetNextItem(item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED)) != -1)
    326                                 selected[m_indexMapping[item]] = 1;
    327                 }
    328                 focused = GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_FOCUSED);
    329                 if (focused != -1)
    330                         focused = m_indexMapping[focused];
     320                        int item = GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
     321                        if (item != -1) {
     322                                selected = new bool[m_fileData.size()];
     323                                memset(selected, 0, sizeof(bool) * m_fileData.size());
     324                       
     325                                do {
     326                                        selected[m_indexMapping[item]] = 1;
     327                                        item = GetNextItem(item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
     328                                } while (item != -1);
     329                        }
     330                }
     331                focused_item = GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_FOCUSED);
     332                if (focused_item != -1)
     333                        focused_index = m_indexMapping[focused_item];
    331334        }
    332335
     
    344347                std::reverse(start, m_indexMapping.end());
    345348
    346                 if (updateSelections)
    347                 {
    348                         SortList_UpdateSelections(selected, focused);
     349                if (updateSelections) {
     350                        SortList_UpdateSelections(selected, focused_item, focused_index);
    349351                        delete [] selected;
    350352                }
     
    357359
    358360        const unsigned int minsize = m_hasParent ? 3 : 2;
    359         if (m_indexMapping.size() < minsize)
    360         {
    361                 if (updateSelections)
    362                         delete [] selected;
     361        if (m_indexMapping.size() < minsize) {
     362                delete [] selected;
    363363                return;
    364364        }
     
    371371        object.Destroy();
    372372
    373         if (updateSelections)
    374         {
    375                 SortList_UpdateSelections(selected, focused);
     373        if (updateSelections) {
     374                SortList_UpdateSelections(selected, focused_item, focused_index);
    376375                delete [] selected;
    377376        }
    378377}
    379378
    380 template<class CFileData> void CFileListCtrl<CFileData>::SortList_UpdateSelections(bool* selections, int focus)
    381 {
    382         for (unsigned int i = m_hasParent ? 1 : 0; i < m_indexMapping.size(); i++)
    383         {
    384                 const int state = GetItemState(i, wxLIST_STATE_SELECTED | wxLIST_STATE_FOCUSED);
    385                 const bool selected = (state & wxLIST_STATE_SELECTED) != 0;
    386                 const bool focused = (state & wxLIST_STATE_FOCUSED) != 0;
    387 
    388                 int item = m_indexMapping[i];
    389                 if (selections[item] != selected)
    390                         SetSelection(i, selections[item]);
    391                 if (focused)
    392                 {
    393                         if (item != focus)
    394                                 SetItemState(i, 0, wxLIST_STATE_FOCUSED);
    395                 }
    396                 else
    397                 {
    398                         if (item == focus)
    399                                 SetItemState(i, wxLIST_STATE_FOCUSED, wxLIST_STATE_FOCUSED);
     379template<class CFileData> void CFileListCtrl<CFileData>::SortList_UpdateSelections(bool* selections, int focused_item, unsigned int focused_index)
     380{
     381        if (focused_item >= 0) {
     382                if (m_indexMapping[focused_item] != focused_index) {
     383                        SetItemState(focused_item, 0, wxLIST_STATE_FOCUSED);
     384
     385                        for (unsigned int i = m_hasParent ? 1 : 0; i < m_indexMapping.size(); ++i) {
     386                                if (m_indexMapping[i] == focused_index) {
     387                                        SetItemState(i, wxLIST_STATE_FOCUSED, wxLIST_STATE_FOCUSED);
     388                                }
     389                        }
     390                }
     391        }
     392       
     393        if (selections) {
     394                for (unsigned int i = m_hasParent ? 1 : 0; i < m_indexMapping.size(); ++i) {
     395                        const int state = GetItemState(i, wxLIST_STATE_SELECTED);
     396                        const bool selected = (state & wxLIST_STATE_SELECTED) != 0;
     397
     398                        int item = m_indexMapping[i];
     399                        if (selections[item] != selected)
     400                                SetSelection(i, selections[item]);
    400401                }
    401402        }
     
    486487
    487488        int pos = file.Find('.', true);
    488         if (pos > 0 && file[pos + 1] != 0) // Does neither starts nor end with dot
     489        if (pos > 0 && (static_cast<size_t>(pos) + 1) < file.size()) // Does neither starts nor end with dot
    489490                ret = file.Mid(pos + 1);
    490491
     
    514515        SHFILEINFO shFinfo;
    515516        memset(&shFinfo, 0, sizeof(SHFILEINFO));
    516         if (SHGetFileInfo(name,
     517        if (SHGetFileInfo(name.wc_str(),
    517518                dir ? FILE_ATTRIBUTE_DIRECTORY : FILE_ATTRIBUTE_NORMAL,
    518519                &shFinfo,
Note: See TracChangeset for help on using the changeset viewer.