merge with dev

This commit is contained in:
Desmis 2019-07-31 06:38:11 +02:00
commit f7a3e96900
3 changed files with 40 additions and 29 deletions

View File

@ -667,6 +667,7 @@ void FileBrowser::close ()
MYWRITERLOCK(l, entryRW); MYWRITERLOCK(l, entryRW);
selected.clear (); selected.clear ();
anchor = nullptr;
MYWRITERLOCK_RELEASE(l); // notifySelectionListener will need read access! MYWRITERLOCK_RELEASE(l); // notifySelectionListener will need read access!
@ -784,12 +785,16 @@ void FileBrowser::menuItemActivated (Gtk::MenuItem* m)
selected.clear(); selected.clear();
for (size_t i = 0; i < fd.size(); i++) for (size_t i = 0; i < fd.size(); ++i) {
if (checkFilter(fd[i])) { if (checkFilter(fd[i])) {
fd[i]->selected = true; fd[i]->selected = true;
selected.push_back(fd[i]); selected.push_back(fd[i]);
} }
} }
if (!anchor && !selected.empty()) {
anchor = selected[0];
}
}
queue_draw (); queue_draw ();
notifySelectionListener(); notifySelectionListener();
} else if( m == copyTo) { } else if( m == copyTo) {
@ -1452,6 +1457,9 @@ void FileBrowser::applyFilter (const BrowserFilter& filter)
selchanged = true; selchanged = true;
} }
} }
if (selected.empty() || (anchor && std::find(selected.begin(), selected.end(), anchor) == selected.end())) {
anchor = nullptr;
}
} }
if (selchanged) { if (selchanged) {

View File

@ -28,7 +28,7 @@
using namespace std; using namespace std;
ThumbBrowserBase::ThumbBrowserBase () ThumbBrowserBase::ThumbBrowserBase ()
: location(THLOC_FILEBROWSER), inspector(nullptr), isInspectorActive(false), eventTime(0), lastClicked(nullptr), previewHeight(options.thumbSize), numOfCols(1), arrangement(TB_Horizontal) : location(THLOC_FILEBROWSER), inspector(nullptr), isInspectorActive(false), eventTime(0), lastClicked(nullptr), anchor(nullptr), previewHeight(options.thumbSize), numOfCols(1), arrangement(TB_Horizontal)
{ {
inW = -1; inW = -1;
inH = -1; inH = -1;
@ -163,29 +163,30 @@ inline void removeFromSelection (const ThumbIterator& iterator, ThumbVector& sel
void ThumbBrowserBase::selectSingle (ThumbBrowserEntryBase* clicked) void ThumbBrowserBase::selectSingle (ThumbBrowserEntryBase* clicked)
{ {
clearSelection(selected); clearSelection(selected);
anchor = clicked;
if (clicked) if (clicked) {
addToSelection(clicked, selected); addToSelection(clicked, selected);
} }
}
void ThumbBrowserBase::selectRange (ThumbBrowserEntryBase* clicked, bool additional) void ThumbBrowserBase::selectRange (ThumbBrowserEntryBase* clicked, bool additional)
{ {
if (!anchor) {
anchor = clicked;
if (selected.empty()) { if (selected.empty()) {
addToSelection(clicked, selected); addToSelection(clicked, selected);
return; return;
} }
}
if (!additional || !lastClicked) { if (!additional || !lastClicked) {
// Extend the current range w.r.t to first selected entry. // Extend the current range w.r.t to first selected entry.
ThumbIterator front = std::find(fd.begin(), fd.end(), selected.front()); ThumbIterator back = std::find(fd.begin(), fd.end(), clicked);
ThumbIterator back; ThumbIterator front = anchor == clicked ? back : std::find(fd.begin(), fd.end(), anchor);
ThumbIterator current = std::find(fd.begin(), fd.end(), clicked);
if (front > current) { if (front > back) {
front = current; std::swap(front, back);
back = std::find(fd.begin(), fd.end(), selected.back());
} else {
back = current;
} }
clearSelection(selected); clearSelection(selected);
@ -217,6 +218,7 @@ void ThumbBrowserBase::selectSet (ThumbBrowserEntryBase* clicked)
} else { } else {
addToSelection(clicked, selected); addToSelection(clicked, selected);
} }
anchor = clicked;
} }
static void scrollToEntry (double& h, double& v, int iw, int ih, ThumbBrowserEntryBase* entry) static void scrollToEntry (double& h, double& v, int iw, int ih, ThumbBrowserEntryBase* entry)

View File

@ -171,6 +171,7 @@ protected:
std::vector<ThumbBrowserEntryBase*> fd; std::vector<ThumbBrowserEntryBase*> fd;
std::vector<ThumbBrowserEntryBase*> selected; std::vector<ThumbBrowserEntryBase*> selected;
ThumbBrowserEntryBase* lastClicked; ThumbBrowserEntryBase* lastClicked;
ThumbBrowserEntryBase* anchor;
int previewHeight; int previewHeight;
int numOfCols; int numOfCols;