merge with dev
This commit is contained in:
commit
f7a3e96900
@ -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!
|
||||||
|
|
||||||
@ -782,16 +783,20 @@ void FileBrowser::menuItemActivated (Gtk::MenuItem* m)
|
|||||||
{
|
{
|
||||||
MYWRITERLOCK(l, entryRW);
|
MYWRITERLOCK(l, entryRW);
|
||||||
|
|
||||||
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) {
|
||||||
tbl->copyMoveRequested (mselected, false);
|
tbl->copyMoveRequested (mselected, false);
|
||||||
}
|
}
|
||||||
@ -1438,12 +1443,12 @@ void FileBrowser::applyFilter (const BrowserFilter& filter)
|
|||||||
}
|
}
|
||||||
|
|
||||||
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])) {
|
||||||
numFiltered++;
|
numFiltered++;
|
||||||
} else if (fd[i]->selected ) {
|
} else if (fd[i]->selected) {
|
||||||
fd[i]->selected = false;
|
fd[i]->selected = false;
|
||||||
std::vector<ThumbBrowserEntryBase*>::iterator j = std::find (selected.begin(), selected.end(), fd[i]);
|
std::vector<ThumbBrowserEntryBase*>::iterator j = std::find(selected.begin(), selected.end(), fd[i]);
|
||||||
selected.erase (j);
|
selected.erase(j);
|
||||||
|
|
||||||
if (lastClicked == fd[i]) {
|
if (lastClicked == fd[i]) {
|
||||||
lastClicked = nullptr;
|
lastClicked = nullptr;
|
||||||
@ -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) {
|
||||||
|
@ -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;
|
||||||
@ -162,30 +162,31 @@ 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 (selected.empty()) {
|
if (!anchor) {
|
||||||
addToSelection(clicked, selected);
|
anchor = clicked;
|
||||||
return;
|
if (selected.empty()) {
|
||||||
|
addToSelection(clicked, selected);
|
||||||
|
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);
|
||||||
@ -196,7 +197,7 @@ void ThumbBrowserBase::selectRange (ThumbBrowserEntryBase* clicked, bool additio
|
|||||||
} else {
|
} else {
|
||||||
// Add an additional range w.r.t. the last clicked entry.
|
// Add an additional range w.r.t. the last clicked entry.
|
||||||
ThumbIterator last = std::find(fd.begin(), fd.end(), lastClicked);
|
ThumbIterator last = std::find(fd.begin(), fd.end(), lastClicked);
|
||||||
ThumbIterator current = std::find (fd.begin(), fd.end(), clicked);
|
ThumbIterator current = std::find(fd.begin(), fd.end(), clicked);
|
||||||
|
|
||||||
if (last > current) {
|
if (last > current) {
|
||||||
std::swap(last, current);
|
std::swap(last, current);
|
||||||
@ -210,13 +211,14 @@ void ThumbBrowserBase::selectRange (ThumbBrowserEntryBase* clicked, bool additio
|
|||||||
|
|
||||||
void ThumbBrowserBase::selectSet (ThumbBrowserEntryBase* clicked)
|
void ThumbBrowserBase::selectSet (ThumbBrowserEntryBase* clicked)
|
||||||
{
|
{
|
||||||
const ThumbIterator iterator = std::find (selected.begin (), selected.end (), clicked);
|
const ThumbIterator iterator = std::find(selected.begin(), selected.end(), clicked);
|
||||||
|
|
||||||
if (iterator != selected.end ()) {
|
if (iterator != selected.end()) {
|
||||||
removeFromSelection (iterator, selected);
|
removeFromSelection(iterator, selected);
|
||||||
} 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)
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user