+2005-02-25 [paul] 1.0.1cvs19
+
+ * src/prefs_account.c
+ * src/prefs_folder_item.c
+ * src/gtk/prefswindow.c
+ * src/gtk/prefswindow.h
+ fix bug 698 'Clicking OK without username 'crashes'
+ account edit window'. Patch by Alfons
+
2005-02-24 [colin] 1.0.1cvs18
* src/messageview.c
( cvs diff -u -r 1.477 -r 1.478 src/compose.c; cvs diff -u -r 1.177 -r 1.178 src/procmsg.c; ) > 1.0.1cvs16.patchset
( cvs diff -u -r 1.478 -r 1.479 src/compose.c; ) > 1.0.1cvs17.patchset
( cvs diff -u -r 1.134 -r 1.135 src/messageview.c; ) > 1.0.1cvs18.patchset
+( cvs diff -u -r 1.123 -r 1.124 src/prefs_account.c; cvs diff -u -r 1.63 -r 1.64 src/prefs_folder_item.c; cvs diff -u -r 1.20 -r 1.21 src/gtk/prefswindow.c; cvs diff -u -r 1.9 -r 1.10 src/gtk/prefswindow.h; ) > 1.0.1cvs19.patchset
MICRO_VERSION=1
INTERFACE_AGE=0
BINARY_AGE=0
-EXTRA_VERSION=18
+EXTRA_VERSION=19
EXTRA_RELEASE=
if test \( $EXTRA_VERSION -eq 0 \) -o \( "x$EXTRA_RELEASE" != "x" \); then
}
}
+static gboolean query_can_close_all_pages(GSList *prefs_pages)
+{
+ GSList *cur;
+
+ for (cur = prefs_pages; cur != NULL; cur = g_slist_next(cur)) {
+ PrefsPage *page = (PrefsPage *) cur->data;
+
+ if (page->can_close)
+ if (!page->can_close(page))
+ return FALSE;
+ }
+ return TRUE;
+}
+
static void close_all_pages(GSList *prefs_pages)
{
GSList *cur;
{
PrefsWindow *prefswindow = (PrefsWindow *) user_data;
- save_all_pages(prefswindow->prefs_pages);
- close_prefs_window(prefswindow);
+ if (query_can_close_all_pages(prefswindow->prefs_pages)) {
+ save_all_pages(prefswindow->prefs_pages);
+ close_prefs_window(prefswindow);
+ }
}
static void cancel_button_released(GtkButton *button, gpointer user_data)
typedef void (*PrefsCreateWidgetFunc) (PrefsPage *, GtkWindow *window, gpointer);
typedef void (*PrefsDestroyWidgetFunc) (PrefsPage *);
typedef void (*PrefsSavePageFunc) (PrefsPage *);
+typedef gboolean (*PrefsCanClosePageFunc) (PrefsPage *);
struct _PrefsPage
{
PrefsCreateWidgetFunc create_widget;
PrefsDestroyWidgetFunc destroy_widget;
PrefsSavePageFunc save_page;
+ PrefsCanClosePageFunc can_close;
};
void prefswindow_open_full (const gchar *title,
GSList *prefs_pages,
gpointer data,
GtkDestroyNotify func);
+
void prefswindow_open (const gchar *title,
GSList *prefs_pages,
gpointer data);
gtk_container_remove(GTK_CONTAINER (page->vbox), notebook);
}
+static gboolean can_close_func(PrefsPage *page_)
+{
+ return prefs_account_apply() >= 0;
+}
+
static void save_func(PrefsPage * _page)
{
if (prefs_account_apply() >= 0)
account_page.page.create_widget = create_widget_func;
account_page.page.destroy_widget = destroy_widget_func;
account_page.page.save_page = save_func;
+ account_page.page.can_close = can_close_func;
prefs_account_register_page((PrefsPage *) &account_page);
}
}
-FolderItemGeneralPage folder_item_general_page;
-
static void register_general_page()
{
static gchar *pfi_general_path[2];
+ static FolderItemGeneralPage folder_item_general_page;
pfi_general_path[0] = _("General");
pfi_general_path[1] = NULL;
prefs_folder_item_register_page((PrefsPage *) &folder_item_general_page);
}
-FolderItemComposePage folder_item_compose_page;
static void register_compose_page(void)
{
static gchar *pfi_compose_path[2];
+ static FolderItemComposePage folder_item_compose_page;
pfi_compose_path[0] = _("Compose");
pfi_compose_path[1] = NULL;