ef0b059917
Old implementation was not really fitting the updating needs and had a bug making symbols disappear if they haven't changed but their parent did (e.g. when a C++ constructor's signature changed). New implementation does: 1) walk old tree, updating or removing rows; 2) add remaining tags. It walks less than (new_tags + old_tags + new_tags) in the worst case, thanks to some hash table-based caching; and also gets rid of the "valid" column in the symbols tree, saving a few bytes in memory. Finally, there is a ~7% performance gain (from 21 to 18ms) upon common tree updates, sometimes more.
70 lines
1.8 KiB
C
70 lines
1.8 KiB
C
/*
|
|
* sidebar.h - this file is part of Geany, a fast and lightweight IDE
|
|
*
|
|
* Copyright 2005-2011 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
|
|
* Copyright 2006-2011 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
*/
|
|
|
|
|
|
|
|
#ifndef GEANY_SIDEBAR_H
|
|
#define GEANY_SIDEBAR_H 1
|
|
|
|
|
|
typedef struct SidebarTreeviews
|
|
{
|
|
GtkWidget *tree_openfiles;
|
|
GtkWidget *default_tag_tree;
|
|
GtkWidget *popup_taglist;
|
|
}
|
|
SidebarTreeviews;
|
|
|
|
extern SidebarTreeviews tv;
|
|
|
|
enum
|
|
{
|
|
SYMBOLS_COLUMN_ICON,
|
|
SYMBOLS_COLUMN_NAME,
|
|
SYMBOLS_COLUMN_TAG,
|
|
SYMBOLS_COLUMN_TOOLTIP,
|
|
SYMBOLS_N_COLUMNS
|
|
};
|
|
|
|
void sidebar_init(void);
|
|
|
|
void sidebar_finalize(void);
|
|
|
|
void sidebar_update_tag_list(GeanyDocument *doc, gboolean update);
|
|
|
|
void sidebar_openfiles_add(GeanyDocument *doc);
|
|
|
|
void sidebar_openfiles_update(GeanyDocument *doc);
|
|
|
|
void sidebar_openfiles_update_all(void);
|
|
|
|
void sidebar_select_openfiles_item(GeanyDocument *doc);
|
|
|
|
void sidebar_remove_document(GeanyDocument *doc);
|
|
|
|
void sidebar_add_common_menu_items(GtkMenu *menu);
|
|
|
|
void sidebar_focus_openfiles_tab(void);
|
|
|
|
void sidebar_focus_symbols_tab(void);
|
|
|
|
#endif
|