aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--shell/ChangeLog40
-rw-r--r--shell/Evolution-Storage.idl21
-rw-r--r--shell/Makefile.am29
-rw-r--r--shell/e-shell-view-menu.c19
-rw-r--r--shell/evolution-storage-listener.h6
-rw-r--r--shell/evolution-storage.c104
-rw-r--r--shell/evolution-storage.h5
-rw-r--r--shell/evolution-test-component.c84
-rw-r--r--shell/glade/Makefile.am11
-rw-r--r--shell/glade/e-shell-shared-folder-picker-dialog.glade301
10 files changed, 571 insertions, 49 deletions
diff --git a/shell/ChangeLog b/shell/ChangeLog
index b6f2efee9d..e306621303 100644
--- a/shell/ChangeLog
+++ b/shell/ChangeLog
@@ -1,3 +1,43 @@
+2002-05-10 Ettore Perazzoli <ettore@ximian.com>
+
+ * evolution-test-component.c: Added some tests for the custom
+ storage.
+
+ * evolution-storage.c: New signal DISCOVER_SHARED_FOLDER.
+ (impl_Storage_asyncXferFolder): Renamed from
+ impl_Storage_async_xfer_folder.
+ (impl_Storage_asyncRemoveFolder): Renamed from
+ impl_Storage_async_remove_folder.
+ (impl_Storage_asyncCreateFolder): Renamed from
+ impl_Storage_async_create_folder.
+ (impl_Storage_asyncOpenFolder): Renamed from
+ impl_storage_async_open_folder.
+ (impl_Storage_addListener): Renamed from
+ impl_Storage_add_listener.
+ (impl_Storage_removeListener): Renamed from
+ impl_Storage_remove_listener.
+ (impl_Storage_asyncDiscoverSharedFolder): New, implementation for
+ ::asyncDiscoverSharedFolder.
+ (evolution_storage_get_epv): Install the CORBA method here.
+ (class_init): Set up the "discover_shared_folder" signal here.
+ (e_marshal_NONE__POINTER_POINTER): Yet Another Marshaller. Die
+ die die.
+
+ * Evolution-Storage.idl (Storage::asyncDiscoverSharedFolder): New
+ method.
+ (StorageListener::notifySharedFolderDiscovered): New method.
+
+ * e-shell-shared-folder-picker-dialog.c: New.
+ * e-shell-shared-folder-picker-dialog.h: New.
+
+ * e-shell-view-menu.c (command_open_other_users_folder): New,
+ implementation for the FileOpenOtherUsersFolder verb.
+
+ * Makefile.am: Generate stubs and skels for
+ Evolution::Addressbook::SelectNames as well.
+
+ * glade/e-shell-shared-folder-picker-dialog.glade: New.
+
2002-05-09 Ettore Perazzoli <ettore@ximian.com>
* e-local-storage.c (construct): Pass %FALSE as
diff --git a/shell/Evolution-Storage.idl b/shell/Evolution-Storage.idl
index be6eaafcab..3660e3d74d 100644
--- a/shell/Evolution-Storage.idl
+++ b/shell/Evolution-Storage.idl
@@ -37,6 +37,13 @@ module Evolution {
string path;
};
+ struct DiscoverSharedFolderResult {
+ Result result;
+ string storagePath;
+ string physicalURI;
+ string type;
+ };
+
/* The name of the storage. */
readonly attribute string name;
@@ -46,6 +53,8 @@ module Evolution {
/* Flat list of the folders in the storage. */
readonly attribute FolderList folderList;
+ /* Folder Operations. */
+
void asyncCreateFolder (in string path,
in string type,
in string description,
@@ -61,11 +70,23 @@ module Evolution {
in boolean remove_source,
in Bonobo::Listener listener);
+ /* Open remote nodes. */
+
void asyncOpenFolder (in string path);
+ /* Set unread count. */
+
void updateFolder (in string path,
in long unread_count);
+ /* Shared folders. */
+
+ void asyncDiscoverSharedFolder (in string user,
+ in string folder_name,
+ in Bonobo::Listener listener);
+
+ /* Listener handling. */
+
void addListener (in StorageListener listener)
raises (AlreadyListening);
diff --git a/shell/Makefile.am b/shell/Makefile.am
index ea885f7233..c86fff6633 100644
--- a/shell/Makefile.am
+++ b/shell/Makefile.am
@@ -13,7 +13,7 @@ INCLUDES = -O \
-DG_LOG_DOMAIN=\"evolution-shell\" \
$(SHELL_CFLAGS)
-# CORBA stuff
+# Shell CORBA stuff
IDLS = \
Evolution-Activity.idl \
@@ -43,6 +43,21 @@ $(IDL_GENERATED): $(IDLS)
$(ORBIT_IDL) -I $(srcdir) -I $(datadir)/idl `$(GNOME_CONFIG) --cflags idl` \
$(srcdir)/Evolution.idl
+# SelectNames CORBA stuff
+
+SELECT_NAMES_IDL = \
+ $(top_srcdir)/addressbook/gui/component/select-names/Evolution-Addressbook-SelectNames.idl
+
+SELECT_NAMES_IDL_GENERATED = \
+ Evolution-Addressbook-SelectNames.h \
+ Evolution-Addressbook-SelectNames-common.c \
+ Evolution-Addressbook-SelectNames-skels.c \
+ Evolution-Addressbook-SelectNames-stubs.c
+
+$(SELECT_NAMES_IDL_GENERATED): $(SELECT_NAMES_IDL)
+ $(ORBIT_IDL) -I $(srcdir) -I $(datadir)/idl `$(GNOME_CONFIG) --cflags idl` \
+ $(SELECT_NAMES_IDL)
+
# IDL install
idldir = $(datadir)/idl
@@ -102,6 +117,7 @@ libeshell_la_SOURCES = \
bin_PROGRAMS = evolution
evolution_SOURCES = \
+ $(SELECT_NAMES_IDL_GENERATED) \
e-activity-handler.c \
e-activity-handler.h \
e-component-info.c \
@@ -151,6 +167,8 @@ evolution_SOURCES = \
e-shell-offline-handler.h \
e-shell-settings-dialog.c \
e-shell-settings-dialog.h \
+ e-shell-shared-folder-picker-dialog.c \
+ e-shell-shared-folder-picker-dialog.h \
e-shell-startup-wizard.c \
e-shell-startup-wizard.h \
e-shell-user-creatable-items-handler.c \
@@ -223,7 +241,10 @@ oaf_in_files = GNOME_Evolution_Shell.oaf.in
oaf_DATA = $(oaf_in_files:.oaf.in=.oaf)
etspecdir = $(datadir)/evolution/etspec/
-etspec_DATA = e-storage-set-view.etspec e-storage-set-view-checkboxes.etstate e-storage-set-view-no-checkboxes.etstate
+etspec_DATA = \
+ e-storage-set-view.etspec \
+ e-storage-set-view-checkboxes.etstate \
+ e-storage-set-view-no-checkboxes.etstate
@XML_I18N_MERGE_OAF_RULE@
@@ -248,8 +269,8 @@ evolution.pure: evolution
endif
-CLEANFILES = $(IDL_GENERATED)
-BUILT_SOURCES = $(IDL_GENERATED)
+CLEANFILES = $(IDL_GENERATED) $(SELECT_NAMES_IDL_GENERATED)
+BUILT_SOURCES = $(IDL_GENERATED) $(SELECT_NAMES_IDL_GENERATED)
dist-hook:
cd $(distdir); rm -f $(BUILT_SOURCES)
diff --git a/shell/e-shell-view-menu.c b/shell/e-shell-view-menu.c
index 5869048abf..eff7aa0817 100644
--- a/shell/e-shell-view-menu.c
+++ b/shell/e-shell-view-menu.c
@@ -30,6 +30,7 @@
#include "e-shell-view-menu.h"
+#include "e-shell-shared-folder-picker-dialog.h"
#include "e-shell-folder-creation-dialog.h"
#include "e-shell-folder-selection-dialog.h"
@@ -399,6 +400,23 @@ command_add_folder_to_shortcut_bar (BonoboUIComponent *uih,
}
+/* Opening other users' folders. */
+
+static void
+command_open_other_users_folder (BonoboUIComponent *uih,
+ void *data,
+ const char *path)
+{
+ EShellView *shell_view;
+ EShell *shell;
+
+ shell_view = E_SHELL_VIEW (data);
+ shell = e_shell_view_get_shell (shell_view);
+
+ e_shell_show_shared_folder_picker_dialog (shell, shell_view);
+}
+
+
/* Going to a folder. */
static void
@@ -627,6 +645,7 @@ static BonoboUIVerb new_verbs [] = {
static BonoboUIVerb file_verbs [] = {
BONOBO_UI_VERB ("FileImporter", (BonoboUIVerbFn) show_import_wizard),
+ BONOBO_UI_VERB ("FileOpenOtherUsersFolder", command_open_other_users_folder),
BONOBO_UI_VERB ("FileGoToFolder", command_goto_folder),
BONOBO_UI_VERB ("FileCreateFolder", command_create_folder),
BONOBO_UI_VERB ("FileClose", command_close),
diff --git a/shell/evolution-storage-listener.h b/shell/evolution-storage-listener.h
index 8e9bee5df7..e48a3243f8 100644
--- a/shell/evolution-storage-listener.h
+++ b/shell/evolution-storage-listener.h
@@ -64,6 +64,12 @@ struct _EvolutionStorageListenerClass {
void (* has_subfolders) (EvolutionStorageListener *storage_listener,
const char *path,
const char *message);
+
+ void (* shared_folder_discovery_result) (EvolutionStorageListener *storage_listener,
+ const char *user,
+ const char *folder_name,
+ const char *storage_path,
+ const char *physical_uri);
};
diff --git a/shell/evolution-storage.c b/shell/evolution-storage.c
index 79930b17f9..317812ab3c 100644
--- a/shell/evolution-storage.c
+++ b/shell/evolution-storage.c
@@ -68,6 +68,7 @@ enum {
XFER_FOLDER,
UPDATE_FOLDER,
OPEN_FOLDER,
+ DISCOVER_SHARED_FOLDER,
LAST_SIGNAL
};
@@ -320,13 +321,13 @@ impl_Storage__get_folderList (PortableServer_Servant servant,
}
static void
-impl_Storage_async_create_folder (PortableServer_Servant servant,
- const CORBA_char *path,
- const CORBA_char *type,
- const CORBA_char *description,
- const CORBA_char *parent_physical_uri,
- const Bonobo_Listener listener,
- CORBA_Environment *ev)
+impl_Storage_asyncCreateFolder (PortableServer_Servant servant,
+ const CORBA_char *path,
+ const CORBA_char *type,
+ const CORBA_char *description,
+ const CORBA_char *parent_physical_uri,
+ const Bonobo_Listener listener,
+ CORBA_Environment *ev)
{
BonoboObject *bonobo_object;
CORBA_Object obj_dup;
@@ -342,11 +343,11 @@ impl_Storage_async_create_folder (PortableServer_Servant servant,
static void
-impl_Storage_async_remove_folder (PortableServer_Servant servant,
- const CORBA_char *path,
- const CORBA_char *physical_uri,
- const Bonobo_Listener listener,
- CORBA_Environment *ev)
+impl_Storage_asyncRemoveFolder (PortableServer_Servant servant,
+ const CORBA_char *path,
+ const CORBA_char *physical_uri,
+ const Bonobo_Listener listener,
+ CORBA_Environment *ev)
{
BonoboObject *bonobo_object;
EvolutionStorage *storage;
@@ -361,12 +362,12 @@ impl_Storage_async_remove_folder (PortableServer_Servant servant,
}
static void
-impl_Storage_async_xfer_folder (PortableServer_Servant servant,
- const CORBA_char *source_path,
- const CORBA_char *destination_path,
- const CORBA_boolean remove_source,
- const Bonobo_Listener listener,
- CORBA_Environment *ev)
+impl_Storage_asyncXferFolder (PortableServer_Servant servant,
+ const CORBA_char *source_path,
+ const CORBA_char *destination_path,
+ const CORBA_boolean remove_source,
+ const Bonobo_Listener listener,
+ CORBA_Environment *ev)
{
BonoboObject *bonobo_object;
EvolutionStorage *storage;
@@ -425,9 +426,9 @@ impl_Storage_updateFolder (PortableServer_Servant servant,
}
static void
-impl_Storage_async_open_folder (PortableServer_Servant servant,
- const CORBA_char *path,
- CORBA_Environment *ev)
+impl_Storage_asyncOpenFolder (PortableServer_Servant servant,
+ const CORBA_char *path,
+ CORBA_Environment *ev)
{
BonoboObject *bonobo_object;
EvolutionStorage *storage;
@@ -439,9 +440,26 @@ impl_Storage_async_open_folder (PortableServer_Servant servant,
}
static void
-impl_Storage_add_listener (PortableServer_Servant servant,
- const GNOME_Evolution_StorageListener listener,
- CORBA_Environment *ev)
+impl_Storage_asyncDiscoverSharedFolder (PortableServer_Servant servant,
+ const CORBA_char *user,
+ const CORBA_char *folder_name,
+ Bonobo_Listener listener,
+ CORBA_Environment *ev)
+{
+ BonoboObject *bonobo_object;
+ EvolutionStorage *storage;
+
+ bonobo_object = bonobo_object_from_servant (servant);
+ storage = EVOLUTION_STORAGE (bonobo_object);
+
+ gtk_signal_emit (GTK_OBJECT (storage), signals[DISCOVER_SHARED_FOLDER],
+ user, folder_name, listener);
+}
+
+static void
+impl_Storage_addListener (PortableServer_Servant servant,
+ const GNOME_Evolution_StorageListener listener,
+ CORBA_Environment *ev)
{
BonoboObject *bonobo_object;
EvolutionStorage *storage;
@@ -454,9 +472,9 @@ impl_Storage_add_listener (PortableServer_Servant servant,
}
static void
-impl_Storage_remove_listener (PortableServer_Servant servant,
- const GNOME_Evolution_StorageListener listener,
- CORBA_Environment *ev)
+impl_Storage_removeListener (PortableServer_Servant servant,
+ const GNOME_Evolution_StorageListener listener,
+ CORBA_Environment *ev)
{
BonoboObject *bonobo_object;
EvolutionStorage *storage;
@@ -646,6 +664,17 @@ class_init (EvolutionStorageClass *klass)
GTK_TYPE_NONE, 1,
GTK_TYPE_STRING);
+ signals[DISCOVER_SHARED_FOLDER] = gtk_signal_new ("discover_shared_folder",
+ GTK_RUN_LAST,
+ object_class->type,
+ GTK_SIGNAL_OFFSET (EvolutionStorageClass,
+ discover_shared_folder),
+ e_marshal_NONE__POINTER_POINTER_POINTER,
+ GTK_TYPE_NONE, 3,
+ GTK_TYPE_STRING,
+ GTK_TYPE_STRING,
+ GTK_TYPE_POINTER);
+
gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL);
corba_class_init ();
@@ -673,16 +702,17 @@ evolution_storage_get_epv (void)
POA_GNOME_Evolution_Storage__epv *epv;
epv = g_new0 (POA_GNOME_Evolution_Storage__epv, 1);
- epv->_get_name = impl_Storage__get_name;
- epv->_get_hasSharedFolders = impl_Storage__get_hasSharedFolders;
- epv->_get_folderList = impl_Storage__get_folderList;
- epv->asyncCreateFolder = impl_Storage_async_create_folder;
- epv->asyncRemoveFolder = impl_Storage_async_remove_folder;
- epv->asyncXferFolder = impl_Storage_async_xfer_folder;
- epv->asyncOpenFolder = impl_Storage_async_open_folder;
- epv->updateFolder = impl_Storage_updateFolder;
- epv->addListener = impl_Storage_add_listener;
- epv->removeListener = impl_Storage_remove_listener;
+ epv->_get_name = impl_Storage__get_name;
+ epv->_get_hasSharedFolders = impl_Storage__get_hasSharedFolders;
+ epv->_get_folderList = impl_Storage__get_folderList;
+ epv->asyncCreateFolder = impl_Storage_asyncCreateFolder;
+ epv->asyncRemoveFolder = impl_Storage_asyncRemoveFolder;
+ epv->asyncXferFolder = impl_Storage_asyncXferFolder;
+ epv->asyncOpenFolder = impl_Storage_asyncOpenFolder;
+ epv->updateFolder = impl_Storage_updateFolder;
+ epv->asyncDiscoverSharedFolder = impl_Storage_asyncDiscoverSharedFolder;
+ epv->addListener = impl_Storage_addListener;
+ epv->removeListener = impl_Storage_removeListener;
return epv;
}
diff --git a/shell/evolution-storage.h b/shell/evolution-storage.h
index 004aedebbe..59d46f7a44 100644
--- a/shell/evolution-storage.h
+++ b/shell/evolution-storage.h
@@ -105,6 +105,11 @@ struct _EvolutionStorageClass {
void (*update_folder) (EvolutionStorage *storage,
const char *path,
int unread_count);
+
+ void (*discover_shared_folder) (EvolutionStorage *storage,
+ const char *user,
+ const char *folder_name,
+ Bonobo_Listener listener);
};
diff --git a/shell/evolution-test-component.c b/shell/evolution-test-component.c
index d083248395..58056de5d4 100644
--- a/shell/evolution-test-component.c
+++ b/shell/evolution-test-component.c
@@ -27,8 +27,10 @@
#endif
#include "evolution-shell-component.h"
+
#include "evolution-activity-client.h"
#include "evolution-config-control.h"
+#include "evolution-storage.h"
#include <bonobo/bonobo-exception.h>
#include <bonobo/bonobo-generic-factory.h>
@@ -56,7 +58,7 @@ static EvolutionShellClient *parent_shell = NULL;
static int timeout_id = 0;
-/* Test the configuration control. */
+/* TEST #1: Configuration Control. */
static BonoboObject *
create_configuration_page (void)
@@ -94,7 +96,7 @@ register_configuration_control_factory (void)
}
-/* Test the ::Shortcut interface. */
+/* TEST #2: The ::Shortcut interface. */
static void
spit_out_shortcuts (EvolutionShellClient *shell_client)
@@ -146,7 +148,7 @@ spit_out_shortcuts (EvolutionShellClient *shell_client)
}
-/* Test the multiple folder selector. */
+/* TEST #4: The multiple folder selector. */
static void
dialog_clicked_callback (GnomeDialog *dialog,
@@ -257,6 +259,80 @@ create_new_folder_selector (EvolutionShellComponent *shell_component)
}
+/* TEST #5: Test custom storage. */
+
+static int
+shared_folder_discovery_timeout_callback (void *data)
+{
+ CORBA_Environment ev;
+ Bonobo_Listener listener;
+ CORBA_any any;
+ GNOME_Evolution_Storage_DiscoverSharedFolderResult result;
+
+ listener = (Bonobo_Listener) data;
+
+ result.result = GNOME_Evolution_Storage_OK;
+ result.storagePath = "/Shared Folders/The Public Folder";
+ result.physicalURI = "blah://bleh.net:3764/bluh/bleh/blih";
+ result.type = "test";
+
+ any._type = TC_GNOME_Evolution_Storage_DiscoverSharedFolderResult;
+ any._value = &result;
+
+ CORBA_exception_init (&ev);
+
+ Bonobo_Listener_event (listener, "result", &any, &ev);
+ if (BONOBO_EX (&ev))
+ g_warning ("Cannot report result for shared folder discovery -- %s",
+ BONOBO_EX_ID (&ev));
+
+ CORBA_Object_release (listener, &ev);
+
+ CORBA_exception_free (&ev);
+
+ return FALSE;
+}
+
+static void
+storage_discover_shared_folder_callback (EvolutionStorage *storage,
+ const char *user,
+ const char *folder_name,
+ Bonobo_Listener listener,
+ void *data)
+{
+ CORBA_Environment ev;
+ Bonobo_Listener listener_copy;
+
+ CORBA_exception_init (&ev);
+ listener_copy = CORBA_Object_duplicate (listener, &ev);
+ CORBA_exception_free (&ev);
+
+ g_timeout_add (1000, shared_folder_discovery_timeout_callback, listener_copy);
+}
+
+static void
+setup_custom_storage (EvolutionShellClient *shell_client)
+{
+ EvolutionStorage *the_storage;
+ EvolutionStorageResult result;
+
+ the_storage = evolution_storage_new ("TestStorage", TRUE);
+
+ gtk_signal_connect (GTK_OBJECT (the_storage), "discover_shared_folder",
+ GTK_SIGNAL_FUNC (storage_discover_shared_folder_callback), shell_client);
+
+ result = evolution_storage_register_on_shell (the_storage, BONOBO_OBJREF (shell_client));
+ if (result != EVOLUTION_STORAGE_OK) {
+ g_warning ("Cannot register storage on the shell.");
+ bonobo_object_unref (BONOBO_OBJECT (the_storage));
+ return;
+ }
+
+ evolution_storage_new_folder (the_storage, "/FirstFolder", "FirstFolder", "mail", "file:///tmp/blah", "", 0);
+ evolution_storage_new_folder (the_storage, "/SecondFolder", "SecondFolder", "calendar", "file:///tmp/bleh", "", 0);
+}
+
+
/* Callbacks. */
static void
@@ -432,6 +508,8 @@ owner_set_callback (EvolutionShellComponent *shell_component,
g_warning ("Shell doesn't have a ::Activity interface -- weird!");
spit_out_shortcuts (shell_client);
+
+ setup_custom_storage (shell_client);
}
static int
diff --git a/shell/glade/Makefile.am b/shell/glade/Makefile.am
index ada34672bd..a7e1ac69d3 100644
--- a/shell/glade/Makefile.am
+++ b/shell/glade/Makefile.am
@@ -1,10 +1,11 @@
gladedir = $(datadir)/evolution/glade
-glade_DATA = \
- e-active-connection-dialog.glade \
- e-shell-config-default-folders.glade \
- e-shell-folder-creation-dialog.glade \
- evolution-startup-wizard.glade \
+glade_DATA = \
+ e-active-connection-dialog.glade \
+ e-shell-config-default-folders.glade \
+ e-shell-folder-creation-dialog.glade \
+ e-shell-shared-folder-picker-dialog.glade \
+ evolution-startup-wizard.glade \
e-folder-list.glade
EXTRA_DIST = $(glade_DATA)
diff --git a/shell/glade/e-shell-shared-folder-picker-dialog.glade b/shell/glade/e-shell-shared-folder-picker-dialog.glade
new file mode 100644
index 0000000000..0275f66a0e
--- /dev/null
+++ b/shell/glade/e-shell-shared-folder-picker-dialog.glade
@@ -0,0 +1,301 @@
+<?xml version="1.0"?>
+<GTK-Interface>
+
+<project>
+ <name>Project1</name>
+ <program_name>project1</program_name>
+ <directory>../../../../home/ettore/Projects/project1</directory>
+ <source_directory>../../../../home/ettore/Projects/project1/src</source_directory>
+ <pixmaps_directory>../../../../home/ettore/Projects/project1/pixmaps</pixmaps_directory>
+ <language>C</language>
+ <gnome_support>True</gnome_support>
+ <gettext_support>True</gettext_support>
+ <translatable_strings_file>../../../../home/ettore/Projects/project1</translatable_strings_file>
+</project>
+
+<widget>
+ <class>GnomeDialog</class>
+ <name>dialog</name>
+ <width>350</width>
+ <title>Open Other User's Folder</title>
+ <type>GTK_WINDOW_TOPLEVEL</type>
+ <position>GTK_WIN_POS_NONE</position>
+ <modal>False</modal>
+ <allow_shrink>False</allow_shrink>
+ <allow_grow>False</allow_grow>
+ <auto_shrink>False</auto_shrink>
+ <auto_close>False</auto_close>
+ <hide_on_close>False</hide_on_close>
+
+ <widget>
+ <class>GtkVBox</class>
+ <child_name>GnomeDialog:vbox</child_name>
+ <name>dialog-vbox1</name>
+ <homogeneous>False</homogeneous>
+ <spacing>8</spacing>
+ <child>
+ <padding>4</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+
+ <widget>
+ <class>GtkHButtonBox</class>
+ <child_name>GnomeDialog:action_area</child_name>
+ <name>dialog-action_area1</name>
+ <layout_style>GTK_BUTTONBOX_END</layout_style>
+ <spacing>8</spacing>
+ <child_min_width>85</child_min_width>
+ <child_min_height>27</child_min_height>
+ <child_ipad_x>7</child_ipad_x>
+ <child_ipad_y>0</child_ipad_y>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>True</fill>
+ <pack>GTK_PACK_END</pack>
+ </child>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button1</name>
+ <can_default>True</can_default>
+ <has_default>True</has_default>
+ <can_focus>True</can_focus>
+ <stock_button>GNOME_STOCK_BUTTON_OK</stock_button>
+ </widget>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button3</name>
+ <can_default>True</can_default>
+ <can_focus>True</can_focus>
+ <stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkVBox</class>
+ <name>vbox1</name>
+ <homogeneous>False</homogeneous>
+ <spacing>0</spacing>
+ <child>
+ <padding>0</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label4</name>
+ <label>Blah blah.</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0.5</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label5</name>
+ <label>Insert some explanatory text here.</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0.5</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkTable</class>
+ <name>table1</name>
+ <rows>3</rows>
+ <columns>2</columns>
+ <homogeneous>False</homogeneous>
+ <row_spacing>3</row_spacing>
+ <column_spacing>3</column_spacing>
+ <child>
+ <padding>2</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label1</name>
+ <label>Server:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <child>
+ <left_attach>0</left_attach>
+ <right_attach>1</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>
+ <class>GtkLabel</class>
+ <name>label2</name>
+ <label>User:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <child>
+ <left_attach>0</left_attach>
+ <right_attach>1</right_attach>
+ <top_attach>1</top_attach>
+ <bottom_attach>2</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>
+ <class>GtkLabel</class>
+ <name>label3</name>
+ <label>Folder Name:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <child>
+ <left_attach>0</left_attach>
+ <right_attach>1</right_attach>
+ <top_attach>2</top_attach>
+ <bottom_attach>3</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>
+ <class>GtkOptionMenu</class>
+ <name>server-option-menu</name>
+ <can_focus>True</can_focus>
+ <items></items>
+ <initial_choice>0</initial_choice>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</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>
+ <class>GtkCombo</class>
+ <name>folder-name-combo</name>
+ <value_in_list>False</value_in_list>
+ <ok_if_empty>True</ok_if_empty>
+ <case_sensitive>False</case_sensitive>
+ <use_arrows>True</use_arrows>
+ <use_arrows_always>False</use_arrows_always>
+ <items></items>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>2</top_attach>
+ <bottom_attach>3</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+
+ <widget>
+ <class>GtkEntry</class>
+ <child_name>GtkCombo:entry</child_name>
+ <name>folder-name-entry</name>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkHBox</class>
+ <name>user-picker-placeholder</name>
+ <homogeneous>False</homogeneous>
+ <spacing>0</spacing>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>1</top_attach>
+ <bottom_attach>2</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+
+ <widget>
+ <class>Placeholder</class>
+ </widget>
+ </widget>
+ </widget>
+ </widget>
+</widget>
+
+</GTK-Interface>