Merge express2 into relayout-composer

This commit is contained in:
Federico Mena Quintero
2010-05-07 12:12:48 -05:00
7 changed files with 116 additions and 9 deletions

View File

@ -166,6 +166,8 @@ validate_identity (MailAccountView *view)
return ERROR_NO_FULLNAME;
if (!email || !*email)
return ERROR_NO_EMAIL;
if (view->original) /* We don't query/store pwd on edit. */
return 0;
if (!pwd || !*pwd)
return ERROR_NO_PASSWORD;

View File

@ -2145,7 +2145,14 @@ msg_composer_class_init (EMsgComposerClass *class)
static void
msg_composer_init (EMsgComposer *composer)
{
EShell *shell = e_shell_get_default ();
composer->priv = E_MSG_COMPOSER_GET_PRIVATE (composer);
if (e_shell_get_express_mode (shell)) {
GtkWindow *window = e_shell_get_active_window(shell);
gtk_window_set_transient_for (GTK_WINDOW(composer), window);
}
}
GType

View File

@ -22,6 +22,7 @@
*
*/
#include <string.h>
#include "e-mail-backend.h"
#include <camel/camel.h>
@ -283,6 +284,11 @@ mail_backend_quit_requested_cb (EShell *shell,
/* We can quit immediately if offline. */
if (!e_shell_get_online (shell))
return;
/* In express mode, don't raise mail request in non mail window. */
if (e_shell_get_express_mode(shell) &&
strcmp(e_shell_window_get_active_view((EShellWindow *)window), "mail") != 0)
return;
/* Check Outbox for any unsent messages. */

View File

@ -926,10 +926,17 @@ action_preferences_cb (GtkAction *action,
shell_backend = e_shell_view_get_shell_backend (shell_view);
shell_backend_class = E_SHELL_BACKEND_GET_CLASS (shell_backend);
if (shell_backend_class->preferences_page != NULL)
e_preferences_window_show_page (
E_PREFERENCES_WINDOW (preferences_window),
shell_backend_class->preferences_page);
if (shell_backend_class->preferences_page != NULL) {
if (e_shell_get_express_mode (shell)) {
e_preferences_window_filter_page (
E_PREFERENCES_WINDOW (preferences_window),
shell_backend_class->preferences_page);
} else {
e_preferences_window_show_page (
E_PREFERENCES_WINDOW (preferences_window),
shell_backend_class->preferences_page);
}
}
}
/**

View File

@ -55,6 +55,10 @@
#if !EXPRESS
<toolitem action='calendar-view-list'/>
#endif
#if EXPRESS
<separator/>
<toolitem action='preferences'/>
#endif
</toolbar>
<popup name='calendar-popup'>

View File

@ -33,11 +33,17 @@
struct _EPreferencesWindowPrivate {
GtkWidget *icon_view;
GtkWidget *scroll;
GtkWidget *notebook;
GHashTable *index;
GtkListStore *store;
GtkTreeModelFilter *filter;
const char *filter_view;
};
enum {
COLUMN_ID, /* G_TYPE_STRING */
COLUMN_TEXT, /* G_TYPE_STRING */
COLUMN_PIXBUF, /* GDK_TYPE_PIXBUF */
COLUMN_PAGE, /* G_TYPE_INT */
@ -102,7 +108,7 @@ preferences_window_selection_changed_cb (EPreferencesWindow *window)
if (list == NULL)
return;
model = gtk_icon_view_get_model (icon_view);
model = window->priv->store;
gtk_tree_model_get_iter (model, &iter, list->data);
gtk_tree_model_get (model, &iter, COLUMN_PAGE, &page, -1);
@ -190,6 +196,40 @@ preferences_window_class_init (EPreferencesWindowClass *class)
widget_class->show = preferences_window_show;
}
static gboolean
filter_view (GtkTreeModel *model,
GtkTreeIter *iter,
gpointer data)
{
EPreferencesWindow *window = (EPreferencesWindow *)data;
gchar *str;
gboolean visible = FALSE;
if (!window->priv->filter_view)
return TRUE;
gtk_tree_model_get (model, iter, COLUMN_ID, &str, -1);
if (strncmp(window->priv->filter_view, "mail", 4) == 0) {
/* Show everything except calendar */
if (str && (strncmp (str, "cal", 3) == 0))
visible = FALSE;
else
visible = TRUE;
} else if (strncmp(window->priv->filter_view, "cal", 3) == 0) {
/* Show only calendar and nothing else */
if (str && (strncmp (str, "cal", 3) != 0))
visible = FALSE;
else
visible = TRUE;
} else /* In any other case, show everything */
visible = TRUE;
g_free (str);
return visible;
}
static void
preferences_window_init (EPreferencesWindow *window)
{
@ -209,11 +249,16 @@ preferences_window_init (EPreferencesWindow *window)
window->priv = E_PREFERENCES_WINDOW_GET_PRIVATE (window);
window->priv->index = index;
window->priv->filter_view = NULL;
store = gtk_list_store_new (
4, G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_INT, G_TYPE_INT);
5, G_TYPE_STRING, G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_INT, G_TYPE_INT);
gtk_tree_sortable_set_sort_column_id (
GTK_TREE_SORTABLE (store), COLUMN_SORT, GTK_SORT_ASCENDING);
window->priv->store = store;
window->priv->filter = (GtkTreeModelFilter *)gtk_tree_model_filter_new ((GtkTreeModel *)store, NULL);
gtk_tree_model_filter_set_visible_func (window->priv->filter, filter_view, window, NULL);
title = _("Evolution Preferences");
gtk_window_set_title (GTK_WINDOW (window), title);
@ -243,11 +288,12 @@ preferences_window_init (EPreferencesWindow *window)
gtk_scrolled_window_set_shadow_type (
GTK_SCROLLED_WINDOW (widget), GTK_SHADOW_IN);
gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, TRUE, 0);
window->priv->scroll = widget;
gtk_widget_show (widget);
container = widget;
widget = gtk_icon_view_new_with_model (GTK_TREE_MODEL (store));
widget = gtk_icon_view_new_with_model (GTK_TREE_MODEL (window->priv->filter));
gtk_icon_view_set_columns (GTK_ICON_VIEW (widget), 1);
gtk_icon_view_set_text_column (GTK_ICON_VIEW (widget), COLUMN_TEXT);
gtk_icon_view_set_pixbuf_column (GTK_ICON_VIEW (widget), COLUMN_PIXBUF);
@ -359,13 +405,14 @@ e_preferences_window_add_page (EPreferencesWindow *window,
notebook = GTK_NOTEBOOK (window->priv->notebook);
page = gtk_notebook_get_n_pages (notebook);
model = gtk_icon_view_get_model (icon_view);
model = window->priv->store;
pixbuf = preferences_window_load_pixbuf (icon_name);
gtk_list_store_append (GTK_LIST_STORE (model), &iter);
gtk_list_store_set (
GTK_LIST_STORE (model), &iter,
COLUMN_ID, page_name,
COLUMN_TEXT, caption, COLUMN_PIXBUF, pixbuf,
COLUMN_PAGE, page, COLUMN_SORT, sort_order, -1);
@ -405,3 +452,35 @@ e_preferences_window_show_page (EPreferencesWindow *window,
gtk_icon_view_scroll_to_path (icon_view, path, FALSE, 0.0, 0.0);
gtk_tree_path_free (path);
}
void
e_preferences_window_filter_page (EPreferencesWindow *window,
const gchar *page_name)
{
GtkTreeRowReference *reference;
GtkIconView *icon_view;
GtkTreePath *path;
g_return_if_fail (E_IS_PREFERENCES_WINDOW (window));
g_return_if_fail (page_name != NULL);
icon_view = GTK_ICON_VIEW (window->priv->icon_view);
reference = g_hash_table_lookup (window->priv->index, page_name);
g_return_if_fail (reference != NULL);
path = gtk_tree_row_reference_get_path (reference);
gtk_icon_view_select_path (icon_view, path);
gtk_icon_view_scroll_to_path (icon_view, path, FALSE, 0.0, 0.0);
gtk_tree_path_free (path);
window->priv->filter_view = page_name;
gtk_tree_model_filter_refilter (window->priv->filter);
/* XXX: We need a better solution to hide the icon view when
* there is just one entry */
if (strncmp(page_name, "cal", 3) == 0) {
gtk_widget_hide (window->priv->scroll);
} else
gtk_widget_show (window->priv->scroll);
}

View File

@ -68,6 +68,8 @@ void e_preferences_window_add_page (EPreferencesWindow *window,
gint sort_order);
void e_preferences_window_show_page (EPreferencesWindow *window,
const gchar *page_name);
void e_preferences_window_filter_page (EPreferencesWindow *window,
const gchar *page_name);
G_END_DECLS