aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSrinivasa Ragavan <sragavan@gnome.org>2010-07-19 16:52:13 +0800
committerMatthew Barnes <mbarnes@redhat.com>2010-07-26 09:30:00 +0800
commitcde4f869c893e145e45f58423e5b782e2fc3f85b (patch)
treea86659ab61f926cfb3fc4891c11d22b8d4fc3097
parentfc6c522b7d908f066bff4943b2b5222777353354 (diff)
downloadgsoc2013-evolution-cde4f869c893e145e45f58423e5b782e2fc3f85b.tar.gz
gsoc2013-evolution-cde4f869c893e145e45f58423e5b782e2fc3f85b.tar.zst
gsoc2013-evolution-cde4f869c893e145e45f58423e5b782e2fc3f85b.zip
Fix tab close issues in gtk & clutter mode.
-rw-r--r--mail/e-mail-notebook-view.c35
1 files changed, 27 insertions, 8 deletions
diff --git a/mail/e-mail-notebook-view.c b/mail/e-mail-notebook-view.c
index 4033e69ca3..6310ef1c0f 100644
--- a/mail/e-mail-notebook-view.c
+++ b/mail/e-mail-notebook-view.c
@@ -48,6 +48,7 @@ struct _EMailNotebookViewPrivate {
GtkNotebook *book;
EMailView *current_view;
GHashTable *views;
+ gboolean inited;
#if HAVE_CLUTTER
EMailTabPicker *tab_picker;
@@ -107,7 +108,8 @@ static void
mail_notebook_view_init (EMailNotebookView *shell)
{
shell->priv = g_new0(EMailNotebookViewPrivate, 1);
-
+
+ shell->priv->inited = FALSE;
shell->priv->views = g_hash_table_new (g_str_hash, g_str_equal);
}
@@ -259,7 +261,8 @@ mnv_tab_closed_cb (ClutterTimeline *timeline,
e_mail_tab_picker_remove_tab (data->view->priv->tab_picker, data->tab);
- g_hash_table_remove (data->view->priv->views, folder_uri);
+ if (E_IS_MAIL_FOLDER_PANE (page))
+ g_hash_table_remove (data->view->priv->views, folder_uri);
gtk_notebook_remove_page (data->view->priv->book,
gtk_notebook_page_num (data->view->priv->book, (GtkWidget *)page));
@@ -274,6 +277,9 @@ mnv_tab_closed (EMailTab *tab, EMailNotebookView *view)
ClutterTimeline *timeline;
struct _tab_data *data = g_new0 (struct _tab_data, 1);
+ if (e_mail_tab_picker_get_n_tabs (priv->tab_picker) == 1)
+ return;
+
page = e_mail_tab_picker_get_tab_no (priv->tab_picker,
tab);
cur = e_mail_tab_picker_get_current_tab (priv->tab_picker);
@@ -309,10 +315,20 @@ tab_activated_cb (EMailTabPicker *picker,
#endif
static void
-tab_remove_gtk_called (GtkWidget *button,
- EMailNotebookView *view)
+tab_remove_gtk_cb (GtkWidget *button,
+ EMailNotebookView *view)
{
+ EMailView *page = g_object_get_data ((GObject *)button, "page");
+ const char *folder_uri = e_mail_reader_get_folder_uri (E_MAIL_READER(page));
+
+ if (gtk_notebook_get_n_pages(view->priv->book) == 1)
+ return;
+ if (E_IS_MAIL_FOLDER_PANE (page))
+ g_hash_table_remove (view->priv->views, folder_uri);
+ gtk_notebook_remove_page (view->priv->book,
+ gtk_notebook_page_num (view->priv->book, (GtkWidget *)page));
+
}
static GtkWidget *
@@ -336,7 +352,7 @@ create_tab_label (EMailNotebookView *view,
gtk_widget_show_all (widget);
gtk_box_pack_end (GTK_BOX(container), widget, FALSE, FALSE, 0);
g_object_set_data ((GObject *)widget, "page", page);
- g_signal_connect (widget, "clicked", G_CALLBACK (tab_remove_gtk_called), view);
+ g_signal_connect (widget, "clicked", G_CALLBACK (tab_remove_gtk_cb), view);
return container;
}
@@ -722,22 +738,24 @@ mail_netbook_view_open_mail (EMailView *view, const char *uid, EMailNotebookView
FALSE);
#endif
pane = e_mail_message_pane_new (E_MAIL_VIEW(nview)->content);
+ priv->current_view = pane;
gtk_widget_show (pane);
folder = e_mail_reader_get_folder (E_MAIL_READER(view));
folder_uri = e_mail_reader_get_folder_uri (E_MAIL_READER(view));
+ info = camel_folder_get_message_info (folder, uid);
+
page = gtk_notebook_append_page (priv->book, pane,
create_tab_label (nview,
priv->current_view,
- _("Mail")));
+ camel_message_info_subject(info)));
#if HAVE_CLUTTER
mnv_set_current_tab (nview, page);
#else
gtk_notebook_set_current_page (priv->book, page);
#endif
- info = camel_folder_get_message_info (folder, uid);
#if HAVE_CLUTTER
tab = (EMailTab *)e_mail_tab_new_full (camel_message_info_subject(info), NULL, 1);
@@ -829,7 +847,7 @@ mail_notebook_view_set_folder (EMailReader *reader,
if (folder || folder_uri) {
int page;
- if (g_hash_table_size (priv->views) != 0) {
+ if (priv->inited) {
priv->current_view = (EMailView *)e_mail_folder_pane_new (E_MAIL_VIEW(reader)->content);
gtk_widget_show ((GtkWidget *)priv->current_view);
page = gtk_notebook_append_page (priv->book, (GtkWidget *)priv->current_view,
@@ -874,6 +892,7 @@ mail_notebook_view_set_folder (EMailReader *reader,
clutter_timeline_start (timeline);
#endif
} else {
+ priv->inited = TRUE;
gtk_notebook_set_tab_label (priv->book, (GtkWidget *)priv->current_view,
create_tab_label (E_MAIL_NOTEBOOK_VIEW(reader),
priv->current_view,