Fixes from upstream

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/branches/gnucash-gnome2-dev@9705 57a11ea4-9604-0410-9ed3-97b8803252fd
zzzoldfeatures/g2-gog-integ
David Hampton 23 years ago
parent 413b02d77a
commit eeb680571f

@ -21,6 +21,8 @@
#include "eggtreemodelfilter.h"
#include <gtk/gtksignal.h>
#include <string.h>
/* FIXME: remove this when we move it to GTK+ */
#include "eggintl.h"
/* ITER FORMAT:
@ -979,14 +981,10 @@ egg_tree_model_filter_row_changed (GtkTreeModel *c_model,
gtk_tree_model_get_iter (c_model, &real_c_iter, c_path);
/* is this node above the virtual root? */
if (filter->virtual_root)
{
if (gtk_tree_path_get_depth (filter->virtual_root) >=
gtk_tree_path_get_depth (c_path))
{
goto done;
}
}
if (filter->virtual_root
&& (gtk_tree_path_get_depth (filter->virtual_root)
>= gtk_tree_path_get_depth (c_path)))
goto done;
/* what's the requested state? */
requested_state = egg_tree_model_filter_visible (filter, &real_c_iter);
@ -1102,8 +1100,8 @@ egg_tree_model_filter_row_inserted (GtkTreeModel *c_model,
gpointer data)
{
EggTreeModelFilter *filter = EGG_TREE_MODEL_FILTER (data);
GtkTreePath *path;
GtkTreePath *real_path;
GtkTreePath *path = NULL;
GtkTreePath *real_path = NULL;
GtkTreeIter iter;
GtkTreeIter real_c_iter;
@ -1282,14 +1280,19 @@ done_and_emit:
FALSE, TRUE);
if (!path)
return;
goto done;
egg_tree_model_filter_increment_stamp (filter);
gtk_tree_model_get_iter (GTK_TREE_MODEL (data), &iter, path);
gtk_tree_model_row_inserted (GTK_TREE_MODEL (data), path, &iter);
gtk_tree_path_free (path);
done:
if (real_path)
gtk_tree_path_free (real_path);
if (free_c_path)
gtk_tree_path_free (c_path);
}
@ -1393,89 +1396,80 @@ egg_tree_model_filter_row_deleted (GtkTreeModel *c_model,
c_path,
FALSE,
FALSE);
if (!path)
{
path = egg_real_tree_model_filter_convert_child_path_to_path (filter,
c_path,
FALSE,
TRUE);
if (!path)
{
/* fixup the offsets */
GtkTreePath *real_path;
if (!filter->root)
return;
/* fixup the offsets */
GtkTreePath *real_path;
level = FILTER_LEVEL (filter->root);
if (!filter->root)
return;
/* subtract vroot if necessary */
if (filter->virtual_root)
{
real_path = egg_tree_model_filter_remove_root (c_path,
filter->virtual_root);
/* we don't handle this */
if (!real_path)
return;
}
else
real_path = gtk_tree_path_copy (c_path);
level = FILTER_LEVEL (filter->root);
i = 0;
if (gtk_tree_path_get_depth (real_path) - 1 >= 1)
{
while (i < gtk_tree_path_get_depth (real_path) - 1)
{
gint j;
/* subtract vroot if necessary */
if (filter->virtual_root)
{
real_path = egg_tree_model_filter_remove_root (c_path,
filter->virtual_root);
/* we don't handle this */
if (!real_path)
return;
}
else
real_path = gtk_tree_path_copy (c_path);
if (!level)
{
/* we don't cover this */
gtk_tree_path_free (real_path);
return;
}
i = 0;
if (gtk_tree_path_get_depth (real_path) - 1 >= 1)
{
while (i < gtk_tree_path_get_depth (real_path) - 1)
{
gint j;
elt = bsearch_elt_with_offset (level->array,
gtk_tree_path_get_indices (real_path)[i],
&j);
if (!level)
{
/* we don't cover this */
gtk_tree_path_free (real_path);
return;
}
elt = bsearch_elt_with_offset (level->array,
gtk_tree_path_get_indices (real_path)[i],
&j);
if (!elt || !elt->children)
{
/* parent is filtered out, so no level */
gtk_tree_path_free (real_path);
return;
}
level = elt->children;
i++;
}
}
if (!elt || !elt->children)
{
/* parent is filtered out, so no level */
gtk_tree_path_free (real_path);
return;
}
offset = gtk_tree_path_get_indices (real_path)[gtk_tree_path_get_depth (real_path) - 1];
gtk_tree_path_free (real_path);
level = elt->children;
i++;
}
}
if (!level)
return;
offset = gtk_tree_path_get_indices (real_path)[gtk_tree_path_get_depth (real_path) - 1];
gtk_tree_path_free (real_path);
/* we need:
* - the offset of the removed item
* - the level
*/
for (i = 0; i < level->array->len; i++)
{
elt = &g_array_index (level->array, FilterElt, i);
if (elt->offset > offset)
elt->offset--;
if (elt->children)
elt->children->parent_elt = elt;
}
if (!level)
return;
return;
}
/* we need:
* - the offset of the removed item
* - the level
*/
for (i = 0; i < level->array->len; i++)
{
elt = &g_array_index (level->array, FilterElt, i);
if (elt->offset > offset)
elt->offset--;
if (elt->children)
elt->children->parent_elt = elt;
}
emit_signal = FALSE;
return;
}
gtk_tree_model_get_iter (GTK_TREE_MODEL (data), &iter, path);

Loading…
Cancel
Save