[anjal] Extend the 'Show folder tree' arrow for composer, message view and



commit 1445531ac50f019baa81145f45d7e697b74252ab
Author: Srinivasa Ragavan <sragavan novell com>
Date:   Thu Jun 18 23:45:06 2009 +0530

    Extend the 'Show folder tree' arrow for composer, message view and
    folder view.

 src/mail-composer-view.c |   15 +++++++++++++--
 src/mail-composer-view.h |    1 +
 src/mail-conv-view.c     |   13 ++++++++++++-
 src/mail-conv-view.h     |    1 +
 src/mail-folder-view.c   |   13 +++++++++++--
 src/mail-folder-view.h   |    2 +-
 src/mail-view.c          |   22 +++++++++++++++-------
 7 files changed, 54 insertions(+), 13 deletions(-)
---
diff --git a/src/mail-composer-view.c b/src/mail-composer-view.c
index e9afb1b..af3132d 100644
--- a/src/mail-composer-view.c
+++ b/src/mail-composer-view.c
@@ -36,6 +36,7 @@ struct  _MailComposerViewPrivate {
 };
 
 enum {
+	 MESSAGE_SHOWN,
 	VIEW_CLOSE,
 	LAST_SIGNAL
 };
@@ -80,7 +81,15 @@ mail_composer_view_class_init (MailComposerViewClass *klass)
 			      NULL, NULL,
 			      g_cclosure_marshal_VOID__VOID,
 			      G_TYPE_NONE, 0);
-
+	signals[MESSAGE_SHOWN] =
+		g_signal_new ("message-shown",
+			      G_OBJECT_CLASS_TYPE (object_class),
+			      G_SIGNAL_RUN_FIRST,
+			      G_STRUCT_OFFSET (MailComposerViewClass , message_shown),
+			      NULL, NULL,
+			      g_cclosure_marshal_VOID__VOID,
+			      G_TYPE_NONE, 0);
+	
 	mail_composer_view_parent_class = g_type_class_peek_parent (klass);
 	object_class->finalize = mail_composer_view_finalize;	
 };
@@ -175,7 +184,8 @@ mail_composer_view_replace_composer (MailComposerView *mcv, GtkWidget *composer)
 	gtk_widget_reparent (w, mcv->priv->box);
 	gtk_widget_show (w);
 	gtk_widget_show (mcv->priv->box);
-
+	
+	g_signal_emit (mcv, signals[MESSAGE_SHOWN], 0);
 	g_signal_connect (mcv->priv->composer, "send", G_CALLBACK(composer_close_cb), mcv);
 
 }
@@ -204,6 +214,7 @@ mail_composer_view_activate (MailComposerView *mfv, GtkWidget *folder_tree, GtkW
 	 if (!folder_tree || !check_mail || !sort_by)
 		  return;
 	 gtk_widget_hide (folder_tree);
+	 g_signal_emit (mfv, signals[MESSAGE_SHOWN], 0);
 	 gtk_widget_set_sensitive (check_mail, act);
 	 gtk_widget_set_sensitive (sort_by, act);
 }
diff --git a/src/mail-composer-view.h b/src/mail-composer-view.h
index 8a2f707..b5c9e3e 100644
--- a/src/mail-composer-view.h
+++ b/src/mail-composer-view.h
@@ -52,6 +52,7 @@ typedef struct _MailComposerViewClass {
 	GtkVBoxClass parent_class;
 
 	/* Signals */
+	 void (*message_shown) (MailComposerView *);	 
 	void (* view_close) (MailComposerView *);
 } MailComposerViewClass;
 
diff --git a/src/mail-conv-view.c b/src/mail-conv-view.c
index 9a2cd5c..e567045 100644
--- a/src/mail-conv-view.c
+++ b/src/mail-conv-view.c
@@ -31,6 +31,7 @@
 G_DEFINE_TYPE (MailConvView, mail_conv_view, GTK_TYPE_VBOX)
 
 enum {
+	 MESSAGE_SHOWN, 
 	VIEW_CLOSE,
 	LAST_SIGNAL
 };
@@ -176,6 +177,14 @@ mail_conv_view_class_init (MailConvViewClass *klass)
 			      NULL, NULL,
 			      g_cclosure_marshal_VOID__VOID,
 			      G_TYPE_NONE, 0);
+	signals[MESSAGE_SHOWN] =
+		g_signal_new ("message-shown",
+			      G_OBJECT_CLASS_TYPE (object_class),
+			      G_SIGNAL_RUN_FIRST,
+			      G_STRUCT_OFFSET (MailConvViewClass , message_shown),
+			      NULL, NULL,
+			      g_cclosure_marshal_VOID__VOID,
+			      G_TYPE_NONE, 0);
 	
 	mail_conv_view_parent_class = g_type_class_peek_parent (klass);
 	object_class->finalize = mail_conv_view_finalize;
@@ -385,7 +394,8 @@ mail_conv_view_set_thread (MailConvView *mcv, CamelFolder *folder, GPtrArray *ar
 		gtk_widget_grab_focus (unread);
 	} else				
 		gtk_widget_grab_focus (mcv->priv->child->data);
-	
+
+	g_signal_emit (mcv, signals[MESSAGE_SHOWN], 0);
 }
 
 static gboolean
@@ -450,6 +460,7 @@ mail_conv_view_activate (MailConvView *mcv, GtkWidget *tree, GtkWidget *folder_t
 	 if (!folder_tree || !check_mail || !sort_by)
 		  return;
 	 gtk_widget_hide (folder_tree);
+	 g_signal_emit (mcv, signals[MESSAGE_SHOWN], 0);
 	 gtk_widget_set_sensitive (check_mail, act);
 	 gtk_widget_set_sensitive (sort_by, act);
 }
diff --git a/src/mail-conv-view.h b/src/mail-conv-view.h
index 78a69b9..301d235 100644
--- a/src/mail-conv-view.h
+++ b/src/mail-conv-view.h
@@ -56,6 +56,7 @@ typedef struct _MailConvView {
 typedef struct _MailConvViewClass {
 	GtkVBoxClass parent_class;
 
+	 void (*message_shown) (MailConvView *);
 	void (* view_close) (MailConvView *);	
 } MailConvViewClass;
 
diff --git a/src/mail-folder-view.c b/src/mail-folder-view.c
index 05803c1..b23ed91 100644
--- a/src/mail-folder-view.c
+++ b/src/mail-folder-view.c
@@ -50,6 +50,7 @@ struct  _MailFolderViewPrivate {
 	guint light:1;
 	guint show_thread:1;
 	guint show_children:1;
+	 guint message_shown:1;
 	GtkWidget *box;
 	GList *children;
 	char *expr;
@@ -223,6 +224,7 @@ mail_folder_view_init (MailFolderView  *shell)
 	gtk_widget_set_size_request (tool, w+2, h+2);
 	
 	shell->priv = g_new0(MailFolderViewPrivate, 1);
+	shell->priv->message_shown = 0;
 	shell->priv->light = g_getenv("ANJAL_LITE") != NULL; /*Very light mode, to be used in mobile phone and not netbooks. This need good implementation also. */
 	shell->priv->show_thread = g_getenv("ANJAL_THREAD") != NULL; 
 	shell->priv->show_children = g_getenv("ANJAL_CHILDREN") != NULL;
@@ -846,6 +848,7 @@ draw_flags (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel
 void
 mail_folder_view_show_list (MailFolderView *mfv)
 {
+	 mfv->priv->message_shown = 0;
 	gtk_widget_show ((GtkWidget *)mfv->tree);
 	gtk_widget_show (mfv->priv->view_scroller);
 	gtk_widget_hide ((GtkWidget *)mfv->mail);
@@ -1088,6 +1091,7 @@ mfv_message_activated (GtkTreeView       *tree_view,  GtkTreePath       *path, G
 	GtkTreeIter iter;
 	CamelMessageInfo *info = NULL;
 
+	shell->priv->message_shown = 1;
 	gtk_widget_hide ((GtkWidget *)shell->tree);
 	gtk_widget_hide (shell->priv->view_scroller);
 	gtk_widget_show ((GtkWidget *)shell->mail);
@@ -1582,11 +1586,16 @@ mail_folder_view_show_sort_popup  (MailFolderView *mfv, GtkWidget *button)
 }
 
 void
-mail_folder_view_activate (MailFolderView *mfv, GtkWidget *tree, GtkWidget *folder_tree, GtkWidget *check_mail, GtkWidget *sort_by, gboolean act)
+mail_folder_view_activate (MailFolderView *mfv, GtkWidget *tree, GtkWidget *folder_tree, GtkWidget *check_mail, GtkWidget *sort_by, GtkWidget *slider, gboolean act)
 {
 	 if (!folder_tree || !check_mail || !sort_by)
 		  return;
-	 gtk_widget_show(folder_tree);
+	 if (mfv->priv->message_shown) {
+		  g_signal_emit (mfv, signals[MESSAGE_SHOWN], 0);
+	 } else {
+		  gtk_widget_show(folder_tree);
+		  gtk_widget_hide (slider);
+	 }
 	 gtk_widget_set_sensitive (folder_tree, act);
 	 gtk_widget_set_sensitive (check_mail, act);
 	 gtk_widget_set_sensitive (sort_by, act);
diff --git a/src/mail-folder-view.h b/src/mail-folder-view.h
index 47f60fd..3d2dab2 100644
--- a/src/mail-folder-view.h
+++ b/src/mail-folder-view.h
@@ -75,7 +75,7 @@ void mail_folder_view_set_folder_uri (MailFolderView *mfv, const char *uri);
 void mail_folder_view_set_message (MailFolderView *mfv, const char *uid, gboolean nomarkseen);
 void mail_folder_view_show_sort_popup  (MailFolderView *, GtkWidget *);
 void mail_folder_view_show_list (MailFolderView *mfv);
-void mail_folder_view_activate (MailFolderView *mfv, GtkWidget *tree, GtkWidget *folder_tree, GtkWidget *check_mail, GtkWidget *sort_by, gboolean act);
+void mail_folder_view_activate (MailFolderView *mfv, GtkWidget *tree, GtkWidget *folder_tree, GtkWidget *check_mail, GtkWidget *sort_by, GtkWidget *slider, gboolean act);
 void mail_folder_view_check_mail (MailFolderView *mfv);
 void mail_folder_view_save (MailFolderView *mfv);
 void mail_folder_view_set_search (MailFolderView *mfv, const char *search);
diff --git a/src/mail-view.c b/src/mail-view.c
index 74545a2..bd9a7ac 100644
--- a/src/mail-view.c
+++ b/src/mail-view.c
@@ -118,8 +118,8 @@ mv_switch (GtkNotebook     *notebook,GtkNotebookPage *page, guint page_num, gpoi
 			 mail_composer_view_activate ((MailComposerView *)child, shell->folder_tree, shell->check_mail, shell->sort_by, TRUE);
 		else if (child->type == MAIL_VIEW_MESSAGE)
 			 mail_conv_view_activate ((MailConvView *)child, shell->tree, shell->folder_tree, shell->check_mail, shell->sort_by, FALSE);
-		else if (child->type == MAIL_VIEW_FOLDER) /* For some reason, Im not able to get right type */ {
-			 mail_folder_view_activate ((MailFolderView *)child, shell->tree, shell->folder_tree, shell->check_mail, shell->sort_by, TRUE);
+		else if (child->type == MAIL_VIEW_FOLDER)  {
+			 mail_folder_view_activate ((MailFolderView *)child, shell->tree, shell->folder_tree, shell->check_mail, shell->sort_by, shell->slider, TRUE);
 		 	mail_search_set_state (shell->priv->search, ((MailFolderView *)child)->search_str, ((MailFolderView *)child)->search_state);
 
 		} else if (child->type == MAIL_VIEW_ACCOUNT)
@@ -204,7 +204,7 @@ mail_view_new ()
 }
 
 static void
-mv_message_shown (MailFolderView *mfv, MailView *mv)
+mv_message_shown (MailViewChild *mfv, MailView *mv)
 {
 	GtkWidget *arr = g_object_get_data ((GObject *)mv->slider, "right-arrow");
 	gtk_widget_hide (mv->folder_tree);
@@ -266,7 +266,7 @@ mv_close_mcv (MailViewChild *mfv, MailView *mv)
 	else if (child->type == MAIL_VIEW_MESSAGE)
 		 mail_conv_view_activate ((MailConvView *)child, mv->tree, mv->folder_tree, mv->check_mail, mv->sort_by, FALSE);
 	else if (child->type == MAIL_VIEW_FOLDER) {
-		 mail_folder_view_activate ((MailFolderView *)child, mv->tree, mv->folder_tree, mv->check_mail, mv->sort_by, TRUE);
+		 mail_folder_view_activate ((MailFolderView *)child, mv->tree, mv->folder_tree, mv->check_mail, mv->sort_by, mv->slider, TRUE);
 		 mail_search_set_state (mv->priv->search, ((MailFolderView *)child)->search_str, ((MailFolderView *)child)->search_state);
 	} else if (child->type == MAIL_VIEW_ACCOUNT)
 		mail_account_view_activate ((MailAccountView *)child, mv->tree, mv->folder_tree, mv->check_mail, mv->sort_by, FALSE);
@@ -314,7 +314,7 @@ mail_view_add_folder (MailView *mv, gpointer data, gboolean block)
 	g_signal_connect (mfv, "search-set", G_CALLBACK(mv_search_set), mv);
 
 	if (!block)
-		 mail_folder_view_activate (mfv, mv->tree, mv->folder_tree, mv->check_mail, mv->sort_by, TRUE);
+		 mail_folder_view_activate (mfv, mv->tree, mv->folder_tree, mv->check_mail, mv->sort_by, mv->slider, TRUE);
 
 	return (MailViewChild *)mfv;
 }
@@ -343,7 +343,9 @@ mail_view_add_composer (MailView *mv, gpointer data, gboolean block)
 		 mail_composer_view_activate (mcv, mv->folder_tree, mv->check_mail, mv->sort_by, FALSE);
 
 	g_signal_connect (mcv, "view-close", G_CALLBACK(mv_close_mcv), mv);
+	g_signal_connect (mcv, "message-shown", G_CALLBACK(mv_message_shown), mv);
 
+	mv_message_shown ((MailViewChild *)mcv, mv);
 	return (MailViewChild *)mcv;
 }
 
@@ -368,7 +370,8 @@ mail_view_add_message (MailView *mv, gpointer data, gboolean block)
 		 mail_conv_view_activate (mcv, mv->tree, mv->folder_tree, mv->check_mail, mv->sort_by, FALSE);
 
 	g_signal_connect (mcv, "view-close", G_CALLBACK(mv_close_mcv), mv);
-
+	g_signal_connect (mcv, "message-shown", G_CALLBACK(mv_message_shown), mv);
+	
 	return (MailViewChild *)mcv;
 }
 
@@ -534,7 +537,12 @@ mv_slider_clicked (GtkButton *slider, MailView *mv)
 {
 	gtk_widget_hide (mv->slider);
 	gtk_widget_show (mv->folder_tree);
-	mail_folder_view_show_list ((MailFolderView *)mv->priv->current_view);
+	if (mv->priv->current_view->type == MAIL_VIEW_FOLDER)
+		 mail_folder_view_show_list ((MailFolderView *)mv->priv->current_view);
+	else {
+		 gtk_widget_show (mv->folder_tree);
+		 gtk_widget_hide ((GtkWidget *)slider);
+	}
 }
 
 void



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]