[evolution/tabs-rewrite-v1] More usable tab switching logic than just vannina append
- From: Srinivasa Ragavan <sragavan src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution/tabs-rewrite-v1] More usable tab switching logic than just vannina append
- Date: Wed, 21 Jul 2010 10:15:52 +0000 (UTC)
commit b321ee25e48a8a602a848d0aec8db6af8d3c6478
Author: Srinivasa Ragavan <sragavan gnome org>
Date: Wed Jul 21 15:33:03 2010 +0530
More usable tab switching logic than just vannina append
mail/e-mail-notebook-view.c | 49 +++++++++++++++++++++++++++++++++---------
mail/e-mail-view.c | 1 +
mail/e-mail-view.h | 1 +
3 files changed, 40 insertions(+), 11 deletions(-)
---
diff --git a/mail/e-mail-notebook-view.c b/mail/e-mail-notebook-view.c
index 19a7722..5add673 100644
--- a/mail/e-mail-notebook-view.c
+++ b/mail/e-mail-notebook-view.c
@@ -54,8 +54,8 @@ struct _EMailNotebookViewPrivate {
#if HAVE_CLUTTER
EMailTabPicker *tab_picker;
GtkWidget *embed;
- GtkWidget *actor;
- GtkWidget *stage;
+ ClutterActor *actor;
+ ClutterActor *stage;
#endif
};
@@ -118,8 +118,6 @@ emnv_get_page_num (EMailNotebookView *view,
return i;
}
- g_warn_if_reached ();
-
return 0;
}
@@ -135,10 +133,14 @@ mnv_page_changed (GtkNotebook *book, GtkNotebookPage *page,
const char *uri = e_mail_reader_get_folder_uri (E_MAIL_READER(mview));
g_object_get (sidebar, "folder-tree", &tree, NULL);
- if (uri)
+ if (uri && E_IS_MAIL_FOLDER_PANE (mview))
em_folder_tree_set_selected (tree, uri, FALSE);
- view->priv->current_view = mview;
+ if (mview != view->priv->current_view) {
+ mview->prev = view->priv->current_view;
+ view->priv->current_view = mview;
+ }
+
/* For EMailReader related changes to EShellView*/
g_signal_emit_by_name (view, "changed");
g_signal_emit_by_name (view, "folder-loaded");
@@ -249,11 +251,19 @@ mnv_tab_closed_cb (ClutterTimeline *timeline,
{
EMailView *page = g_object_get_data ((GObject *)data->tab, "page");
const char *folder_uri = e_mail_reader_get_folder_uri (E_MAIL_READER(page));
+ EMailView *prev;
+ int num;
- e_mail_tab_picker_remove_tab (data->view->priv->tab_picker, data->tab);
-
if (E_IS_MAIL_FOLDER_PANE (page))
g_hash_table_remove (data->view->priv->views, folder_uri);
+ prev = page->prev;
+ if (prev) {
+ num = emnv_get_page_num (data->view, (GtkWidget *)prev);
+ mnv_set_current_tab (data->view, num);
+ e_mail_tab_picker_set_current_tab (data->view->priv->tab_picker, num);
+ }
+
+ e_mail_tab_picker_remove_tab (data->view->priv->tab_picker, data->tab);
gtk_notebook_remove_page (data->view->priv->book,
gtk_notebook_page_num (data->view->priv->book, (GtkWidget *)page));
@@ -311,12 +321,20 @@ tab_remove_gtk_cb (GtkWidget *button,
{
EMailView *page = g_object_get_data ((GObject *)button, "page");
const char *folder_uri = e_mail_reader_get_folder_uri (E_MAIL_READER(page));
+ EMailView *prev;
+ int num;
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);
+
+ prev = page->prev;
+ if (prev) {
+ num = emnv_get_page_num (view, (GtkWidget *)prev);
+ gtk_notebook_set_current_page (view->priv->book, num);
+ }
gtk_notebook_remove_page (view->priv->book,
gtk_notebook_page_num (view->priv->book, (GtkWidget *)page));
@@ -720,6 +738,8 @@ mail_netbook_view_open_mail (EMailView *view, const char *uid, EMailNotebookView
EMailNotebookViewPrivate *priv = E_MAIL_NOTEBOOK_VIEW (nview)->priv;
CamelMessageInfo *info;
GtkWidget *preview;
+ int pos;
+
#if HAVE_CLUTTER
EMailTab *tab;
ClutterActor *clone;
@@ -730,8 +750,11 @@ mail_netbook_view_open_mail (EMailView *view, const char *uid, EMailNotebookView
e_mail_tab_picker_get_current_tab (priv->tab_picker)),
FALSE);
#endif
+ pos = emnv_get_page_num (nview, (GtkWidget *)priv->current_view);
pane = e_mail_message_pane_new (E_MAIL_VIEW(nview)->content);
+ E_MAIL_VIEW(pane)->prev = priv->current_view;
priv->current_view = (EMailView *)pane;
+
gtk_widget_show (pane);
preview = e_mail_paned_view_get_preview (E_MAIL_PANED_VIEW(pane));
@@ -741,10 +764,11 @@ mail_netbook_view_open_mail (EMailView *view, const char *uid, EMailNotebookView
info = camel_folder_get_message_info (folder, uid);
- page = gtk_notebook_append_page (priv->book, pane,
+ page = gtk_notebook_insert_page (priv->book, pane,
create_tab_label (nview,
priv->current_view,
- camel_message_info_subject(info)));
+ camel_message_info_subject(info)),
+ pos+1);
#if HAVE_CLUTTER
mlist = e_mail_reader_get_message_list (E_MAIL_READER(pane));
@@ -768,7 +792,7 @@ mail_netbook_view_open_mail (EMailView *view, const char *uid, EMailNotebookView
e_mail_tab_set_preview_actor (tab, clone);
e_mail_tab_set_can_close (tab, TRUE);
e_mail_tab_enable_drag (tab, TRUE);
- e_mail_tab_picker_add_tab (priv->tab_picker, tab, -1);
+ e_mail_tab_picker_add_tab (priv->tab_picker, tab, pos+1);
page = e_mail_tab_picker_get_tab_no (priv->tab_picker, tab);
e_mail_tab_picker_set_current_tab (priv->tab_picker, page);
@@ -851,8 +875,11 @@ mail_notebook_view_set_folder (EMailReader *reader,
GtkWidget *list;
if (priv->inited) {
+ EMailView *old_view = priv->current_view;
+
priv->current_view = (EMailView *)e_mail_folder_pane_new (E_MAIL_VIEW(reader)->content);
gtk_widget_show ((GtkWidget *)priv->current_view);
+ priv->current_view->prev = old_view;
page = gtk_notebook_append_page (priv->book, (GtkWidget *)priv->current_view,
create_tab_label (E_MAIL_NOTEBOOK_VIEW(reader),
priv->current_view,
diff --git a/mail/e-mail-view.c b/mail/e-mail-view.c
index 98f741d..a4318ce 100644
--- a/mail/e-mail-view.c
+++ b/mail/e-mail-view.c
@@ -53,6 +53,7 @@ static void
e_mail_view_init (EMailView *shell)
{
shell->priv = g_new0(EMailViewPrivate, 1);
+ shell->prev = NULL;
}
static void
diff --git a/mail/e-mail-view.h b/mail/e-mail-view.h
index b680b39..d5b3ded 100644
--- a/mail/e-mail-view.h
+++ b/mail/e-mail-view.h
@@ -43,6 +43,7 @@ typedef struct _EMailView {
EMailViewPrivate *priv;
EShellContent *content;
+ struct _EMailView *prev;
} EMailView;
typedef struct _EMailViewClass {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]