FIX: crash in page down and home of a listbox with categories, trying to create an item_proxy {cat, npos} and select it
This commit is contained in:
parent
d4d1a79af8
commit
7863dcdba6
@ -1598,17 +1598,17 @@ namespace nana
|
|||||||
|
|
||||||
cat_proxy cpx{ess_,cat};
|
cat_proxy cpx{ess_,cat};
|
||||||
for (item_proxy &it : cpx )
|
for (item_proxy &it : cpx )
|
||||||
{
|
{
|
||||||
if (it.selected() != sel)
|
if (it.selected() != sel)
|
||||||
changed = true;
|
changed = true;
|
||||||
it.select(sel);
|
it.select(sel);
|
||||||
|
|
||||||
if (sel) // not check for single_selection_
|
if (sel) // not check for single_selection_
|
||||||
last_selected_abs = it->pos();
|
last_selected_abs = it->pos();
|
||||||
|
|
||||||
else if (last_selected_abs == it->pos())
|
else if (last_selected_abs == it->pos())
|
||||||
last_selected_abs.set_both(npos);
|
last_selected_abs.set_both(npos);
|
||||||
}
|
}
|
||||||
last_selected_abs = index_pair{cat,npos};
|
last_selected_abs = index_pair{cat,npos};
|
||||||
return changed;
|
return changed;
|
||||||
}
|
}
|
||||||
@ -1653,7 +1653,7 @@ namespace nana
|
|||||||
index_pair first_displ() const
|
index_pair first_displ() const
|
||||||
{
|
{
|
||||||
return absolute ( first() );
|
return absolute ( first() );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool good(size_type cat) const
|
bool good(size_type cat) const
|
||||||
{
|
{
|
||||||
@ -1676,7 +1676,7 @@ namespace nana
|
|||||||
if (0 == pos.cat) // but for cat 0 return first item
|
if (0 == pos.cat) // but for cat 0 return first item
|
||||||
item.item = 0; // let check this is good
|
item.item = 0; // let check this is good
|
||||||
else
|
else
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto i = _m_at(pos.cat); // pos is not a cat and i point to it cat
|
auto i = _m_at(pos.cat); // pos is not a cat and i point to it cat
|
||||||
@ -1738,7 +1738,7 @@ namespace nana
|
|||||||
/// all arg are relative to display order, or all are absolute, but not mixed
|
/// all arg are relative to display order, or all are absolute, but not mixed
|
||||||
bool forward(index_pair from, size_type offs, index_pair& item) const
|
bool forward(index_pair from, size_type offs, index_pair& item) const
|
||||||
{
|
{
|
||||||
if(!good_item(from, from))
|
if(!good_item(from, from))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if(offs == 0)
|
if(offs == 0)
|
||||||
@ -3378,21 +3378,35 @@ namespace nana
|
|||||||
if (! scrl.make_page_scroll(!up))
|
if (! scrl.make_page_scroll(!up))
|
||||||
return;
|
return;
|
||||||
essence_->lister.select_for_all(false);
|
essence_->lister.select_for_all(false);
|
||||||
if (up)
|
|
||||||
item_proxy {essence_, essence_->scroll_y_abs()}.select(true);
|
index_pair idx{essence_->scroll_y_dpl()};
|
||||||
else
|
if (!up)
|
||||||
{
|
|
||||||
index_pair idx{essence_->scroll_y_dpl()};
|
|
||||||
essence_->lister.forward(idx, scrl.range()-1, idx);
|
essence_->lister.forward(idx, scrl.range()-1, idx);
|
||||||
item_proxy::from_display(essence_,idx).select(true);
|
|
||||||
}
|
if (idx.is_item())
|
||||||
|
item_proxy::from_display(essence_, idx).select(true);
|
||||||
|
else
|
||||||
|
if(!essence_->lister.single_selection())
|
||||||
|
essence_->lister.categ_selected(idx.cat, true);
|
||||||
|
|
||||||
|
essence_->trace_last_selected_item ();
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case keyboard::os_home:
|
case keyboard::os_home:
|
||||||
|
{
|
||||||
essence_->lister.select_for_all(false);
|
essence_->lister.select_for_all(false);
|
||||||
item_proxy::from_display(essence_, {0,0}).select(true);
|
|
||||||
|
index_pair frst{essence_->lister.first()};
|
||||||
|
if (frst.is_item())
|
||||||
|
item_proxy::from_display(essence_, frst).select(true);
|
||||||
|
else
|
||||||
|
if(!essence_->lister.single_selection())
|
||||||
|
essence_->lister.categ_selected(frst.cat, true);
|
||||||
|
|
||||||
essence_->trace_last_selected_item ();
|
essence_->trace_last_selected_item ();
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case keyboard::os_end:
|
case keyboard::os_end:
|
||||||
essence_->lister.select_for_all(false);
|
essence_->lister.select_for_all(false);
|
||||||
item_proxy::from_display(essence_, essence_->lister.last()).select(true);
|
item_proxy::from_display(essence_, essence_->lister.last()).select(true);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user