[Aptitude-svn-commit] r4139 - in branches/aptitude-0.3/aptitude: .
src/vscreen
Daniel Burrows
dburrows at costa.debian.org
Tue Sep 20 21:05:58 UTC 2005
Author: dburrows
Date: Tue Sep 20 21:05:55 2005
New Revision: 4139
Modified:
branches/aptitude-0.3/aptitude/ChangeLog
branches/aptitude-0.3/aptitude/src/vscreen/vs_tree.cc
Log:
Don't crash when a tree is emptied by setting its root to NULL.
Modified: branches/aptitude-0.3/aptitude/ChangeLog
==============================================================================
--- branches/aptitude-0.3/aptitude/ChangeLog (original)
+++ branches/aptitude-0.3/aptitude/ChangeLog Tue Sep 20 21:05:55 2005
@@ -1,5 +1,10 @@
2005-09-20 Daniel Burrows <dburrows at debian.org>
+ * src/vscreen/vs_tree.cc:
+
+ Be robust in the face of a totally empty tree (one with a NULL
+ root pointer).
+
* src/solution_screen.cc:
Display a list of the possible resolutions of the dependency
Modified: branches/aptitude-0.3/aptitude/src/vscreen/vs_tree.cc
==============================================================================
--- branches/aptitude-0.3/aptitude/src/vscreen/vs_tree.cc (original)
+++ branches/aptitude-0.3/aptitude/src/vscreen/vs_tree.cc Tue Sep 20 21:05:55 2005
@@ -295,12 +295,14 @@
bool vs_tree::get_cursorvisible()
{
- return (selected!=end && selected->get_selectable());
+ return (root != NULL && selected != end && selected->get_selectable());
}
point vs_tree::get_cursorloc()
{
- if(selected==end || !selected->get_selectable())
+ if(root == NULL)
+ return point(0, 0);
+ else if(selected==end || !selected->get_selectable())
return point(0,0);
else
return point(0, hierarchical?line_of(selected)-1:line_of(selected));
@@ -308,6 +310,9 @@
void vs_tree::line_down()
{
+ if(root == NULL)
+ return;
+
int width,height;
getmaxyx(height,width);
@@ -401,18 +406,21 @@
void vs_tree::highlight_current()
{
- if(selected != end)
+ if(root != NULL && selected != end)
selected->highlighted(this);
}
void vs_tree::unhighlight_current()
{
- if(selected != end)
+ if(root != NULL && selected != end)
selected->unhighlighted(this);
}
void vs_tree::line_up()
{
+ if(root == NULL)
+ return;
+
int width,height;
getmaxyx(height,width);
@@ -470,6 +478,9 @@
void vs_tree::page_down()
{
+ if(root == NULL)
+ return;
+
int width,height;
getmaxyx(height,width);
@@ -506,6 +517,9 @@
void vs_tree::page_up()
{
+ if(root == NULL)
+ return;
+
int width,height;
getmaxyx(height,width);
@@ -545,6 +559,9 @@
void vs_tree::jump_to_begin()
{
+ if(root == NULL)
+ return;
+
int width,height;
getmaxyx(height,width);
@@ -577,6 +594,9 @@
void vs_tree::jump_to_end()
{
+ if(root == NULL)
+ return;
+
int width,height;
getmaxyx(height,width);
@@ -625,6 +645,9 @@
void vs_tree::level_line_up()
{
+ if(root == NULL)
+ return;
+
vs_treeiterator tmp=selected;
tmp.move_backward_level();
if(tmp!=end)
@@ -633,6 +656,9 @@
void vs_tree::level_line_down()
{
+ if(root == NULL)
+ return;
+
vs_treeiterator tmp=selected;
tmp.move_forward_level();
if(tmp!=end)
@@ -647,12 +673,12 @@
if(selected!=vs_treeiterator(NULL))
{
- if(hierarchical && bindings->key_matches(k, "Parent"))
+ if(root != NULL && hierarchical && bindings->key_matches(k, "Parent"))
{
if(!selected.is_root())
set_selection(selected.get_up());
}
- else if(!hierarchical && prev_level && bindings->key_matches(k, "Left"))
+ else if(root != NULL && !hierarchical && prev_level && bindings->key_matches(k, "Left"))
{
selected->unhighlighted(this);
@@ -669,7 +695,7 @@
vscreen_update();
}
- else if(!hierarchical &&
+ else if(root != NULL && !hierarchical &&
selected!=end && selected->get_selectable() &&
selected->begin()!=selected->end() &&
(bindings->key_matches(k, "Right") ||
@@ -714,7 +740,7 @@
search_for("");*/
else
{
- if(selected!=end && selected->get_selectable() &&
+ if(root != NULL && selected!=end && selected->get_selectable() &&
selected->dispatch_key(k, this))
vscreen_update();
else
@@ -727,6 +753,9 @@
void vs_tree::search_for(vs_tree_search_func &matches)
{
+ if(root == NULL)
+ return;
+
vs_treeiterator curr((selected==vs_treeiterator(NULL))?begin:selected, hierarchical),
start(curr);
// Make an iterator that ignores all the rules >=)
@@ -765,6 +794,9 @@
void vs_tree::search_back_for(vs_tree_search_func &matches)
{
+ if(root == NULL)
+ return;
+
vs_treeiterator curr((selected == vs_treeiterator(NULL))
? begin : selected, hierarchical),
start(curr);
@@ -839,6 +871,9 @@
void vs_tree::paint(const style &st)
{
+ if(root == NULL)
+ return;
+
int width,height;
int selectedln=line_of(selected);
@@ -935,6 +970,9 @@
void vs_tree::dispatch_mouse(short id, int x, int y, int z, mmask_t bstate)
{
+ if(root == NULL)
+ return;
+
if(!hierarchical)
--y;
More information about the Aptitude-svn-commit
mailing list