Added a "Browse..." button to switch to a different addressbook folder.
2002-04-24 Christopher James Lahey <clahey@ximian.com> * gui/component/select-names/e-select-names.c, gui/component/select-names/e-select-names.h, gui/component/select-names/select-names.glade (folder_browse): Added a "Browse..." button to switch to a different addressbook folder. * gui/widgets/e-addressbook-util.c (e_addressbook_transfer_cards): Moved extern EvolutionShellClient out of this function so that it'd be more readable. svn path=/trunk/; revision=16574
This commit is contained in:
committed by
Chris Lahey
parent
38e985a2e4
commit
9678428593
@ -1,3 +1,15 @@
|
||||
2002-04-24 Christopher James Lahey <clahey@ximian.com>
|
||||
|
||||
* gui/component/select-names/e-select-names.c,
|
||||
gui/component/select-names/e-select-names.h,
|
||||
gui/component/select-names/select-names.glade (folder_browse):
|
||||
Added a "Browse..." button to switch to a different addressbook
|
||||
folder.
|
||||
|
||||
* gui/widgets/e-addressbook-util.c (e_addressbook_transfer_cards):
|
||||
Moved extern EvolutionShellClient out of this function so that
|
||||
it'd be more readable.
|
||||
|
||||
2002-04-23 Christopher James Lahey <clahey@ximian.com>
|
||||
|
||||
* gui/component/select-names/e-select-names.c,
|
||||
|
||||
@ -72,6 +72,15 @@ typedef struct {
|
||||
GtkWidget *label;
|
||||
} ESelectNamesChild;
|
||||
|
||||
struct _ESelectNamesFolder {
|
||||
char *description;
|
||||
char *display_name;
|
||||
char *uri;
|
||||
char *physicalUri;
|
||||
char *path;
|
||||
int count;
|
||||
};
|
||||
|
||||
GtkType
|
||||
e_select_names_get_type (void)
|
||||
{
|
||||
@ -152,7 +161,7 @@ set_book_with_model_data(EBook *book, EBookStatus status, EAddressbookModel *mod
|
||||
}
|
||||
|
||||
static void
|
||||
addressbook_model_set_uri(ESelectNames *e_select_names, EAddressbookModel *model, char *uri)
|
||||
addressbook_model_set_uri(ESelectNames *e_select_names, EAddressbookModel *model, const char *uri, ESelectNamesFolder *e_folder)
|
||||
{
|
||||
EBook *book;
|
||||
|
||||
@ -169,6 +178,7 @@ addressbook_model_set_uri(ESelectNames *e_select_names, EAddressbookModel *model
|
||||
gtk_object_ref(GTK_OBJECT(e_select_names));
|
||||
gtk_object_ref(GTK_OBJECT(model));
|
||||
addressbook_load_uri(book, uri, (EBookCallback) set_book, e_select_names);
|
||||
e_select_names->current_folder = e_folder;
|
||||
} else {
|
||||
gtk_object_ref(GTK_OBJECT(model));
|
||||
addressbook_load_uri(book, uri, (EBookCallback) set_book_with_model_data, model);
|
||||
@ -308,7 +318,7 @@ e_addressbook_create_ebook_table(char *name, char *string1, char *string2, int n
|
||||
filename = gnome_util_prepend_user_home("evolution/local/Contacts/addressbook.db");
|
||||
uri = g_strdup_printf("file://%s", filename);
|
||||
|
||||
addressbook_model_set_uri(NULL, model, uri);
|
||||
addressbook_model_set_uri(NULL, model, uri, NULL);
|
||||
|
||||
g_free(uri);
|
||||
g_free(filename);
|
||||
@ -337,19 +347,14 @@ e_addressbook_create_ebook_table(char *name, char *string1, char *string2, int n
|
||||
return table;
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
char *description;
|
||||
char *display_name;
|
||||
char *uri;
|
||||
|
||||
} ESelectNamesFolder;
|
||||
|
||||
static void
|
||||
e_select_names_folder_free(ESelectNamesFolder *e_folder)
|
||||
{
|
||||
g_free(e_folder->description );
|
||||
g_free(e_folder->display_name);
|
||||
g_free(e_folder->uri);
|
||||
g_free(e_folder->physicalUri);
|
||||
g_free(e_folder->path);
|
||||
g_free(e_folder);
|
||||
}
|
||||
|
||||
@ -358,12 +363,13 @@ e_select_names_option_activated(GtkWidget *widget, ESelectNames *e_select_names)
|
||||
{
|
||||
ESelectNamesFolder *e_folder = gtk_object_get_data (GTK_OBJECT (widget), "EsnChoiceFolder");
|
||||
|
||||
addressbook_model_set_uri(e_select_names, e_select_names->model, e_folder->uri);
|
||||
addressbook_model_set_uri(e_select_names, e_select_names->model, e_folder->uri, e_folder);
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
ESelectNames *names;
|
||||
GtkWidget *menu;
|
||||
int count;
|
||||
} NamesAndMenu;
|
||||
|
||||
static void
|
||||
@ -393,6 +399,8 @@ add_menu_item (gpointer key,
|
||||
gtk_signal_connect (GTK_OBJECT (item), "activate",
|
||||
GTK_SIGNAL_FUNC (e_select_names_option_activated),
|
||||
e_select_names);
|
||||
|
||||
e_folder->count = nnm->count++;
|
||||
}
|
||||
|
||||
static void
|
||||
@ -409,6 +417,7 @@ update_option_menu(ESelectNames *e_select_names)
|
||||
|
||||
nnm.names = e_select_names;
|
||||
nnm.menu = menu;
|
||||
nnm.count = 0;
|
||||
|
||||
g_hash_table_foreach (e_select_names->folders,
|
||||
add_menu_item,
|
||||
@ -442,8 +451,13 @@ new_folder (EvolutionStorageListener *storage_listener,
|
||||
e_folder->uri = g_strdup_printf ("%s/addressbook.db", folder->physicalUri);
|
||||
else
|
||||
e_folder->uri = g_strdup(folder->physicalUri);
|
||||
e_folder->physicalUri = g_strdup(folder->physicalUri);
|
||||
e_folder->path = g_strdup (path);
|
||||
e_folder->count = -1;
|
||||
g_hash_table_insert(e_select_names->folders,
|
||||
g_strdup(path), e_folder);
|
||||
e_folder->path, e_folder);
|
||||
g_hash_table_insert(e_select_names->folders_by_uri,
|
||||
e_folder->physicalUri, e_folder);
|
||||
update_option_menu(e_select_names);
|
||||
}
|
||||
}
|
||||
@ -454,12 +468,12 @@ removed_folder (EvolutionStorageListener *storage_listener,
|
||||
ESelectNames *e_select_names)
|
||||
{
|
||||
ESelectNamesFolder *e_folder;
|
||||
char *orig_path;
|
||||
|
||||
if (g_hash_table_lookup_extended(e_select_names->folders, path, (void **) &orig_path, (void **) &e_folder)) {
|
||||
if ((e_folder = g_hash_table_lookup(e_select_names->folders, path))) {
|
||||
g_hash_table_remove(e_select_names->folders_by_uri,
|
||||
e_folder->physicalUri);
|
||||
g_hash_table_remove(e_select_names->folders, path);
|
||||
e_select_names_folder_free(e_folder);
|
||||
g_free(orig_path);
|
||||
update_option_menu(e_select_names);
|
||||
}
|
||||
}
|
||||
@ -548,6 +562,41 @@ select_entry_changed (GtkWidget *widget, ESelectNames *e_select_names)
|
||||
}
|
||||
}
|
||||
|
||||
extern EvolutionShellClient *global_shell_client;
|
||||
|
||||
static void
|
||||
folder_browse (GtkWidget *widget, ESelectNames *e_select_names)
|
||||
{
|
||||
const char *allowed_types[] = { "contacts", NULL };
|
||||
GNOME_Evolution_Folder *folder;
|
||||
const char *current_uri = "";
|
||||
ESelectNamesFolder *e_folder;
|
||||
|
||||
if (e_select_names->current_folder && e_select_names->current_folder->physicalUri) {
|
||||
current_uri = e_select_names->current_folder->physicalUri;
|
||||
}
|
||||
|
||||
evolution_shell_client_user_select_folder (global_shell_client,
|
||||
GTK_WINDOW (gtk_widget_get_toplevel (widget)),
|
||||
_("Find contact in"), current_uri,
|
||||
allowed_types,
|
||||
&folder);
|
||||
if (!folder)
|
||||
return;
|
||||
|
||||
if ((e_folder = g_hash_table_lookup(e_select_names->folders_by_uri, folder->physicalUri))) {
|
||||
GtkWidget *option;
|
||||
|
||||
option = glade_xml_get_widget (e_select_names->gui,
|
||||
"optionmenu-folder");
|
||||
if (e_folder->count != -1 && option) {
|
||||
gtk_option_menu_set_history (GTK_OPTION_MENU (option), e_folder->count);
|
||||
}
|
||||
|
||||
addressbook_model_set_uri(e_select_names, e_select_names->model, e_folder->uri, e_folder);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
hookup_listener (ESelectNames *e_select_names,
|
||||
@ -769,7 +818,13 @@ e_select_names_init (ESelectNames *e_select_names)
|
||||
gtk_signal_connect(GTK_OBJECT(button), "clicked",
|
||||
GTK_SIGNAL_FUNC(update_query), e_select_names);
|
||||
|
||||
button = glade_xml_get_widget (gui, "button-browse");
|
||||
if (button && GTK_IS_BUTTON (button))
|
||||
gtk_signal_connect(GTK_OBJECT(button), "clicked",
|
||||
GTK_SIGNAL_FUNC(folder_browse), e_select_names);
|
||||
|
||||
e_select_names->folders = g_hash_table_new(g_str_hash, g_str_equal);
|
||||
e_select_names->folders_by_uri = g_hash_table_new(g_str_hash, g_str_equal);
|
||||
|
||||
e_select_names_hookup_shell_listeners (e_select_names);
|
||||
|
||||
@ -804,6 +859,8 @@ e_select_names_destroy (GtkObject *object)
|
||||
gtk_object_unref(GTK_OBJECT(e_select_names->gui));
|
||||
g_hash_table_foreach(e_select_names->children, (GHFunc) e_select_names_child_free, e_select_names);
|
||||
g_hash_table_destroy(e_select_names->children);
|
||||
g_hash_table_destroy(e_select_names->folders);
|
||||
g_hash_table_destroy(e_select_names->folders_by_uri);
|
||||
|
||||
g_free(e_select_names->def);
|
||||
}
|
||||
|
||||
@ -56,6 +56,7 @@ extern "C" {
|
||||
|
||||
typedef struct _ESelectNames ESelectNames;
|
||||
typedef struct _ESelectNamesClass ESelectNamesClass;
|
||||
typedef struct _ESelectNamesFolder ESelectNamesFolder;
|
||||
|
||||
struct _ESelectNames
|
||||
{
|
||||
@ -77,7 +78,9 @@ struct _ESelectNames
|
||||
EvolutionStorageListener *local_listener;
|
||||
EvolutionStorageListener *other_contacts_listener;
|
||||
GHashTable *folders;
|
||||
GHashTable *folders_by_uri;
|
||||
char *def;
|
||||
ESelectNamesFolder *current_folder;
|
||||
};
|
||||
|
||||
struct _ESelectNamesClass
|
||||
|
||||
@ -137,7 +137,7 @@
|
||||
<name>table5</name>
|
||||
<border_width>3</border_width>
|
||||
<rows>2</rows>
|
||||
<columns>2</columns>
|
||||
<columns>3</columns>
|
||||
<homogeneous>False</homogeneous>
|
||||
<row_spacing>3</row_spacing>
|
||||
<column_spacing>3</column_spacing>
|
||||
@ -226,7 +226,7 @@
|
||||
<last_modification_time>Tue, 19 Feb 2002 23:06:24 GMT</last_modification_time>
|
||||
<child>
|
||||
<left_attach>1</left_attach>
|
||||
<right_attach>2</right_attach>
|
||||
<right_attach>3</right_attach>
|
||||
<top_attach>1</top_attach>
|
||||
<bottom_attach>2</bottom_attach>
|
||||
<xpad>0</xpad>
|
||||
@ -239,6 +239,28 @@
|
||||
<yfill>True</yfill>
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkButton</class>
|
||||
<name>button-browse</name>
|
||||
<can_focus>True</can_focus>
|
||||
<label>_Browse...</label>
|
||||
<relief>GTK_RELIEF_NORMAL</relief>
|
||||
<child>
|
||||
<left_attach>2</left_attach>
|
||||
<right_attach>3</right_attach>
|
||||
<top_attach>0</top_attach>
|
||||
<bottom_attach>1</bottom_attach>
|
||||
<xpad>0</xpad>
|
||||
<ypad>0</ypad>
|
||||
<xexpand>False</xexpand>
|
||||
<yexpand>False</yexpand>
|
||||
<xshrink>False</xshrink>
|
||||
<yshrink>False</yshrink>
|
||||
<xfill>True</xfill>
|
||||
<yfill>False</yfill>
|
||||
</child>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
|
||||
|
||||
@ -322,11 +322,12 @@ got_book_cb (EBook *book, gpointer closure)
|
||||
process_unref (process);
|
||||
}
|
||||
|
||||
extern EvolutionShellClient *global_shell_client;
|
||||
|
||||
void
|
||||
e_addressbook_transfer_cards (EBook *source, GList *cards /* adopted */, gboolean delete_from_source, GtkWindow *parent_window)
|
||||
{
|
||||
const char *allowed_types[] = { "contacts", NULL };
|
||||
extern EvolutionShellClient *global_shell_client;
|
||||
GNOME_Evolution_Folder *folder;
|
||||
static char *last_uri = NULL;
|
||||
CardCopyProcess *process;
|
||||
|
||||
Reference in New Issue
Block a user