aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2005-03-08 09:17:17 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2005-03-08 09:17:17 +0000
commit0ff75d10977146767ccc42c2e2915f75886a68bf (patch)
treed006e0d23948dfa1e66d7ccbe9e5746472c2e54e /src
parent15ecfbc6effda513ca18e81b419b0eaf02daa0d5 (diff)
changed the implementation of switching Text/MIME view.
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@154 ee746299-78ed-0310-b773-934348b2243d
Diffstat (limited to 'src')
-rw-r--r--src/messageview.c99
-rw-r--r--src/messageview.h6
-rw-r--r--src/mimeview.c27
-rw-r--r--src/mimeview.h5
-rw-r--r--src/summaryview.c9
-rw-r--r--src/textview.c1
6 files changed, 77 insertions, 70 deletions
diff --git a/src/messageview.c b/src/messageview.c
index f6b40764..421f8d00 100644
--- a/src/messageview.c
+++ b/src/messageview.c
@@ -1,6 +1,6 @@
/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ * Copyright (C) 1999-2005 Hiroyuki Yamamoto
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -22,6 +22,7 @@
#include <glib.h>
#include <glib/gi18n.h>
#include <gdk/gdkkeysyms.h>
+#include <gtk/gtknotebook.h>
#include <gtk/gtkvbox.h>
#include <gtk/gtkcontainer.h>
#include <gtk/gtkwindow.h>
@@ -61,15 +62,19 @@
static GList *messageview_list = NULL;
-static void messageview_change_view_type(MessageView *messageview,
- MessageType type);
-static void messageview_destroy_cb (GtkWidget *widget,
- MessageView *messageview);
-static void messageview_size_allocate_cb(GtkWidget *widget,
- GtkAllocation *allocation);
-static gboolean key_pressed (GtkWidget *widget,
- GdkEventKey *event,
- MessageView *messageview);
+static void messageview_change_view_type(MessageView *messageview,
+ MessageType type);
+static void messageview_destroy_cb (GtkWidget *widget,
+ MessageView *messageview);
+static void messageview_size_allocate_cb(GtkWidget *widget,
+ GtkAllocation *allocation);
+static void messageview_switch_page_cb (GtkNotebook *notebook,
+ GtkNotebookPage *page,
+ guint page_num,
+ MessageView *messageview);
+static gboolean key_pressed (GtkWidget *widget,
+ GdkEventKey *event,
+ MessageView *messageview);
static void save_as_cb (gpointer data,
guint action,
@@ -265,6 +270,7 @@ MessageView *messageview_create(void)
{
MessageView *messageview;
GtkWidget *vbox;
+ GtkWidget *notebook;
HeaderView *headerview;
TextView *textview;
MimeView *mimeview;
@@ -286,23 +292,45 @@ MessageView *messageview_create(void)
mimeview->imageview->messageview = messageview;
mimeview->messageview = messageview;
+ notebook = gtk_notebook_new();
+ gtk_notebook_set_show_border(GTK_NOTEBOOK(notebook), FALSE);
+ gtk_notebook_set_show_tabs(GTK_NOTEBOOK(notebook), FALSE);
+ gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook), TRUE);
+ gtk_widget_show(notebook);
+
+ gtk_container_add(GTK_CONTAINER(notebook), GTK_WIDGET_PTR(textview));
+ gtk_notebook_set_tab_label_text
+ (GTK_NOTEBOOK(notebook), GTK_WIDGET_PTR(textview), _("Text"));
+
+ gtk_container_add(GTK_CONTAINER(notebook), GTK_WIDGET_PTR(mimeview));
+ gtk_notebook_set_tab_label_text(GTK_NOTEBOOK(notebook),
+ GTK_WIDGET_PTR(mimeview),
+ _("Attachments"));
+
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), 0);
+ gtk_widget_show_all(notebook);
+
vbox = gtk_vbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET_PTR(headerview),
FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET_PTR(textview),
- TRUE, TRUE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0);
gtk_widget_show(vbox);
/* to remove without destroyed */
- gtk_widget_ref(GTK_WIDGET_PTR(textview));
- gtk_widget_ref(GTK_WIDGET_PTR(mimeview));
gtk_widget_ref(GTK_WIDGET_PTR(mimeview->textview));
gtk_widget_ref(GTK_WIDGET_PTR(mimeview->imageview));
+ g_signal_connect(G_OBJECT(notebook), "switch_page",
+ G_CALLBACK(messageview_switch_page_cb), messageview);
+
messageview->vbox = vbox;
+ messageview->notebook = notebook;
+
messageview->new_window = FALSE;
messageview->window = NULL;
messageview->window_vbox = NULL;
+ messageview->body_vbox = NULL;
+
messageview->headerview = headerview;
messageview->textview = textview;
messageview->mimeview = mimeview;
@@ -310,6 +338,8 @@ MessageView *messageview_create(void)
messageview->statusbar = NULL;
messageview->statusbar_cid = 0;
+ messageview->current_page = 0;
+
return messageview;
}
@@ -452,31 +482,21 @@ gint messageview_show(MessageView *messageview, MsgInfo *msginfo,
static void messageview_change_view_type(MessageView *messageview,
MessageType type)
{
- TextView *textview = messageview->textview;
- MimeView *mimeview = messageview->mimeview;
+ GtkWidget *notebook = messageview->notebook;
if (messageview->type == type) return;
if (type == MVIEW_MIME) {
- gtkut_container_remove
- (GTK_CONTAINER(GTK_WIDGET_PTR(messageview)),
- GTK_WIDGET_PTR(textview));
- gtk_box_pack_start(GTK_BOX(messageview->vbox),
- GTK_WIDGET_PTR(mimeview), TRUE, TRUE, 0);
- gtk_container_add(GTK_CONTAINER(mimeview->vbox),
- GTK_WIDGET_PTR(textview));
+ gtk_notebook_set_show_tabs(GTK_NOTEBOOK(notebook), TRUE);
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook),
+ messageview->current_page);
} else if (type == MVIEW_TEXT) {
- gtkut_container_remove
- (GTK_CONTAINER(GTK_WIDGET_PTR(messageview)),
- GTK_WIDGET_PTR(mimeview));
- mimeview_clear(mimeview);
-
- if (mimeview->vbox == GTK_WIDGET_PTR(textview)->parent)
- gtkut_container_remove(GTK_CONTAINER(mimeview->vbox),
- GTK_WIDGET_PTR(textview));
+ gint current_page = messageview->current_page;
- gtk_box_pack_start(GTK_BOX(messageview->vbox),
- GTK_WIDGET_PTR(textview), TRUE, TRUE, 0);
+ gtk_notebook_set_show_tabs(GTK_NOTEBOOK(notebook), FALSE);
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), 0);
+ messageview->current_page = current_page;
+ mimeview_clear(messageview->mimeview);
} else
return;
@@ -495,9 +515,8 @@ void messageview_clear(MessageView *messageview)
void messageview_destroy(MessageView *messageview)
{
- GtkWidget *textview = GTK_WIDGET_PTR(messageview->textview);
+ GtkWidget *textview = GTK_WIDGET_PTR(messageview->mimeview->textview);
GtkWidget *imageview = GTK_WIDGET_PTR(messageview->mimeview->imageview);
- GtkWidget *mimeview = GTK_WIDGET_PTR(messageview->mimeview);
messageview_list = g_list_remove(messageview_list, messageview);
@@ -511,7 +530,6 @@ void messageview_destroy(MessageView *messageview)
gtk_widget_unref(textview);
gtk_widget_unref(imageview);
- gtk_widget_unref(mimeview);
}
void messageview_quote_color_set(void)
@@ -531,7 +549,7 @@ TextView *messageview_get_current_textview(MessageView *messageview)
text = messageview->textview;
else if (messageview->type == MVIEW_MIME) {
if (gtk_notebook_get_current_page
- (GTK_NOTEBOOK(messageview->mimeview->notebook)) == 0)
+ (GTK_NOTEBOOK(messageview->notebook)) == 0)
text = messageview->textview;
else if (messageview->mimeview->type == MIMEVIEW_TEXT)
text = messageview->mimeview->textview;
@@ -647,6 +665,13 @@ static void messageview_size_allocate_cb(GtkWidget *widget,
prefs_common.msgwin_height = allocation->height;
}
+static void messageview_switch_page_cb(GtkNotebook *notebook,
+ GtkNotebookPage *page, guint page_num,
+ MessageView *messageview)
+{
+ messageview->current_page = page_num;
+}
+
static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event,
MessageView *messageview)
{
diff --git a/src/messageview.h b/src/messageview.h
index 99c71631..150260ca 100644
--- a/src/messageview.h
+++ b/src/messageview.h
@@ -1,6 +1,6 @@
/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ * Copyright (C) 1999-2005 Hiroyuki Yamamoto
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -42,7 +42,10 @@ struct _MessageView
{
GtkWidget *vbox;
+ GtkWidget *notebook;
+
MessageType type;
+
gboolean new_window;
GtkWidget *window;
GtkWidget *window_vbox;
@@ -62,6 +65,7 @@ struct _MessageView
gchar *forced_charset;
gboolean visible;
+ gint current_page;
};
MessageView *messageview_create (void);
diff --git a/src/mimeview.c b/src/mimeview.c
index 1d39448e..124de6f8 100644
--- a/src/mimeview.c
+++ b/src/mimeview.c
@@ -26,7 +26,6 @@
#include <glib.h>
#include <glib/gi18n.h>
#include <gdk/gdkkeysyms.h>
-#include <gtk/gtknotebook.h>
#include <gtk/gtkscrolledwindow.h>
#include <gtk/gtkctree.h>
#include <gtk/gtkvbox.h>
@@ -134,8 +133,6 @@ MimeView *mimeview_create(void)
{
MimeView *mimeview;
- GtkWidget *notebook;
- GtkWidget *vbox;
GtkWidget *paned;
GtkWidget *scrolledwin;
GtkWidget *ctree;
@@ -153,14 +150,6 @@ MimeView *mimeview_create(void)
titles[COL_SIZE] = _("Size");
titles[COL_NAME] = _("Name");
- notebook = gtk_notebook_new();
- gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook), TRUE);
-
- vbox = gtk_vbox_new(FALSE, 0);
- gtk_container_add(GTK_CONTAINER(notebook), vbox);
- gtk_notebook_set_tab_label_text(GTK_NOTEBOOK(notebook), vbox,
- _("Text"));
-
scrolledwin = gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin),
GTK_POLICY_AUTOMATIC,
@@ -196,21 +185,12 @@ MimeView *mimeview_create(void)
paned = gtk_vpaned_new();
gtk_paned_add1(GTK_PANED(paned), scrolledwin);
gtk_paned_add2(GTK_PANED(paned), mime_vbox);
- gtk_container_add(GTK_CONTAINER(notebook), paned);
- gtk_notebook_set_tab_label_text(GTK_NOTEBOOK(notebook), paned,
- _("Attachments"));
-
- gtk_widget_show_all(notebook);
-
- gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), 0);
n_entries = sizeof(mimeview_popup_entries) /
sizeof(mimeview_popup_entries[0]);
popupmenu = menu_create_items(mimeview_popup_entries, n_entries,
"<MimeView>", &popupfactory, mimeview);
- mimeview->notebook = notebook;
- mimeview->vbox = vbox;
mimeview->paned = paned;
mimeview->scrolledwin = scrolledwin;
mimeview->ctree = ctree;
@@ -336,7 +316,8 @@ void mimeview_show_message(MimeView *mimeview, MimeInfo *mimeinfo,
if (node) {
gtk_ctree_select(ctree, node);
gtkut_ctree_set_focus_row(ctree, node);
- gtk_widget_grab_focus(mimeview->ctree);
+ if (mimeview_get_selected_part(mimeview))
+ gtk_widget_grab_focus(mimeview->ctree);
}
}
@@ -355,8 +336,6 @@ void mimeview_clear(MimeView *mimeview)
g_free(mimeview->file);
mimeview->file = NULL;
-
- /* gtk_notebook_set_page(GTK_NOTEBOOK(mimeview->notebook), 0); */
}
void mimeview_destroy(MimeView *mimeview)
@@ -371,7 +350,7 @@ void mimeview_destroy(MimeView *mimeview)
MimeInfo *mimeview_get_selected_part(MimeView *mimeview)
{
if (gtk_notebook_get_current_page
- (GTK_NOTEBOOK(mimeview->notebook)) == 0)
+ (GTK_NOTEBOOK(mimeview->messageview->notebook)) == 0)
return NULL;
return gtk_ctree_node_get_row_data
diff --git a/src/mimeview.h b/src/mimeview.h
index 8701462d..7170243e 100644
--- a/src/mimeview.h
+++ b/src/mimeview.h
@@ -40,12 +40,11 @@ typedef enum
struct _MimeView
{
- GtkWidget *notebook;
- GtkWidget *vbox;
-
GtkWidget *paned;
+
GtkWidget *scrolledwin;
GtkWidget *ctree;
+
GtkWidget *mime_vbox;
MimeViewType type;
diff --git a/src/summaryview.c b/src/summaryview.c
index 36dbe9ee..f0c4ef43 100644
--- a/src/summaryview.c
+++ b/src/summaryview.c
@@ -1936,16 +1936,17 @@ static void summary_display_msg_full(SummaryView *summaryview,
msgview = summaryview->messageview;
summaryview->displayed = row;
- if (!messageview_is_visible(msgview))
+ if (!messageview_is_visible(msgview)) {
main_window_toggle_message_view(summaryview->mainwin);
+ GTK_EVENTS_FLUSH();
+ }
val = messageview_show(msgview, msginfo, all_headers);
if (msgview->type == MVIEW_TEXT ||
(msgview->type == MVIEW_MIME &&
(GTK_CLIST(msgview->mimeview->ctree)->row_list == NULL ||
gtk_notebook_get_current_page
- (GTK_NOTEBOOK(msgview->mimeview->notebook)) == 0)))
+ (GTK_NOTEBOOK(msgview->notebook)) == 0)))
gtk_widget_grab_focus(summaryview->ctree);
- GTK_EVENTS_FLUSH();
gtkut_ctree_node_move_if_on_the_edge(ctree, row);
}
@@ -3819,7 +3820,7 @@ static gboolean summary_key_pressed(GtkWidget *widget, GdkEventKey *event,
messageview = summaryview->messageview;
if (messageview->type == MVIEW_MIME &&
gtk_notebook_get_current_page
- (GTK_NOTEBOOK(messageview->mimeview->notebook)) == 1)
+ (GTK_NOTEBOOK(messageview->notebook)) == 1)
textview = messageview->mimeview->textview;
else
textview = messageview->textview;
diff --git a/src/textview.c b/src/textview.c
index 456ad883..81142690 100644
--- a/src/textview.c
+++ b/src/textview.c
@@ -1070,7 +1070,6 @@ void textview_clear(TextView *textview)
textview->uri_list = NULL;
textview->body_pos = 0;
- //textview->cur_pos = 0;
}
void textview_destroy(TextView *textview)