[sylpheed-jp:10851] v で幅が変わる問題 (Re: Sylphe ed 3.0beta2 released)

TAKAHASHI Tamotsu (高橋全) <[email protected]>
Newsgroups gmane.mail.sylpheed.general.japanese
Message-ID <[email protected]>
On Thu, 26 Nov 2009 11:44:54 +0900
TAKAHASHI Tamotsu (高橋全) <[email protected]> wrote:
> On Sun, 22 Nov 2009 02:19:30 +0900
> Hiroyuki Yamamoto <[email protected]> wrote:
> > 「表示・非表示 - メッセージビュー」(または V キー)、または
> > サマリビュー右下の下三角を押すとメッセージビューが隠れるので、
> > その状態で操作すれば自動的にメッセージが開かれることはなくなります。
> > もう一度同じ操作をすると戻ります。
> > (まさに上記の複数メールを spam 指定するときなどによく使います)
> 
> なるほど。それで回避できそうです。
> ……と思って使っていたら不具合を発見してしまいました。
> 
> 「表示」→「レイアウト」→「縦3列」にしている状態で
> v を押してメッセージビューを消すと、サマリ(でしたっけ?
> メッセージ一覧) の右端の項目 (手元では「サイズ」) が伸びます。
> これが単に便宜的な変化であればいいのですが、このまま
> sylpheed を終了すると、その幅が保存されてしまい、
> 次回起動時にメッセージビューを表示できなくなってしまいます。
> (画面右端まで「サイズ」なので、メッセージ本文は画面外にある)
> 
> 対策としては、
> (a) 終了時にいったんメッセージビューを表示させてから幅を保存するか、
> (b) デフォルトで「サイズ」の右にダミー項目を作り、メッセージビュー
> 部分をそれで埋める。その幅は終了時にいつも 0 として保存する、
> などの対策が必要かと思います。(b) のほうが、v を押したときの
> 見栄えの関係で好ましいと思います。

(a) だけ (というか summaryview の width を prefs_common に正しく
保存するだけ) ではだめで、ウィンドウが細長くなってしまいますので、
起動時にいったんメッセージビューを表示させてから消すことで、
ウィンドウサイズを調整するようにすると良さそうでした。
【添付の summary_width_minimal.diff】
これだけで、あとは見えなくていい項目を右に設定しておけば
たぶん私の希望はかないます。

(b) も実現しようとするとゴチャゴチャしてしまいますが、いちおう
できました。【添付の summary_width.diff】←たぶん無駄が多いです

-- 
tamo

_______________________________________________
Sylpheed-jp mailing list
[email protected]
http://www.sraoss.jp/mailman/listinfo/sylpheed-jp
summary_width_minimal.diff (text/plain, 1.3 KB)
Index: src/mainwindow.c
===================================================================
--- src/mainwindow.c	(revision 2362)
+++ src/mainwindow.c	(working copy)
@@ -930,6 +930,7 @@
 	GtkWidget *ac_menu;
 	GtkWidget *menuitem;
 	gint i;
+	gboolean real_vision;
 
 	static GdkGeometry geometry;
 
@@ -1114,8 +1115,8 @@
 			g_warning(_("MainWindow: color allocation %d failed\n"), i);
 	}
 
-	messageview->visible = prefs_common.msgview_visible;
-
+	real_vision = prefs_common.msgview_visible;
+	messageview->visible = TRUE; /* needs this space anyway */
 	main_window_set_widgets(mainwin, prefs_common.layout_type, type);
 
 	if (prefs_common.mainwin_maximized)
@@ -1169,6 +1170,8 @@
 
 	/* show main window */
 	gtk_widget_show(mainwin->window);
+	if (!real_vision)
+		main_window_toggle_message_view(mainwin);
 
 #if !GTK_CHECK_VERSION(2, 6, 0)
 	{
@@ -1588,7 +1601,8 @@
 	allocation = &(GTK_WIDGET_PTR(mainwin->summaryview)->allocation);
 	if (allocation->width > 1 && allocation->height > 1) {
 		if (vlayout) {
-			if (!(mainwin->type & SEPARATE_MESSAGE))
+			if (!(mainwin->type & SEPARATE_MESSAGE) &&
+			    messageview_is_visible(mainwin->messageview))
 				prefs_common.summaryview_vwidth = allocation->width;
 			prefs_common.summaryview_vheight = allocation->height;
 		} else {
summary_width.diff (text/plain, 8 KB)
Index: libsylph/enums.h
===================================================================
--- libsylph/enums.h	(revision 2362)
+++ libsylph/enums.h	(working copy)
@@ -49,6 +49,7 @@
 	S_COL_SIZE,
 	S_COL_NUMBER,
 	S_COL_TO,
+	S_COL_DUMMY,
 
 	S_COL_MSG_INFO,
 
Index: src/summaryview.c
===================================================================
--- src/summaryview.c	(revision 2362)
+++ src/summaryview.c	(working copy)
@@ -391,7 +391,8 @@
 	SORT_BY_DATE,
 	SORT_BY_SIZE,
 	SORT_BY_NUMBER,
-	SORT_BY_TO
+	SORT_BY_TO,
+	SORT_BY_NONE
 };
 
 enum
@@ -2140,13 +2141,13 @@
 					     (GtkSortType)sort_type);
 
 	if (prev_col_type != -1 && col_type != prev_col_type &&
-	    prev_col_type < N_SUMMARY_VISIBLE_COLS) {
+	    prev_col_type < N_SUMMARY_VISIBLE_COLS - 1) {
 		column = summaryview->columns[prev_col_type];
 		column->sort_column_id = -1;
 		gtk_tree_view_column_set_sort_indicator(column, FALSE);
 	}
 	if (col_type != S_COL_MARK && col_type != S_COL_UNREAD &&
-	    col_type != S_COL_MIME && col_type < N_SUMMARY_VISIBLE_COLS) {
+	    col_type != S_COL_MIME && col_type < N_SUMMARY_VISIBLE_COLS - 1) {
 		column = summaryview->columns[col_type];
 		column->sort_column_id = col_type;
 		gtk_tree_view_column_set_sort_indicator(column, TRUE);
@@ -2306,6 +2307,7 @@
 			   S_COL_SIZE, to_human_readable(msginfo->size),
 			   S_COL_NUMBER, msginfo->msgnum,
 			   S_COL_TO, to_s ? to_s : "",
+			   S_COL_DUMMY, "",
 
 			   S_COL_MSG_INFO, msginfo,
 
@@ -5049,6 +5051,7 @@
 				   G_TYPE_STRING,
 				   G_TYPE_UINT,
 				   G_TYPE_STRING,
+				   G_TYPE_STRING,
 
 				   G_TYPE_POINTER,
 
@@ -5073,6 +5076,7 @@
 	SET_SORT(S_COL_TO, summary_cmp_by_to);
 	SET_SORT(S_COL_LABEL, summary_cmp_by_label);
 	SET_SORT(S_COL_TDATE, summary_cmp_by_thread_date);
+	SET_SORT(S_COL_DUMMY, summary_cmp_by_num /* XXX */);
 
 #undef SET_SORT
 
@@ -5111,8 +5115,10 @@
 	gtk_tree_view_column_set_alignment(column, align);		\
 	gtk_tree_view_column_set_sizing					\
 		(column, GTK_TREE_VIEW_COLUMN_FIXED);			\
-	gtk_tree_view_column_set_fixed_width(column, width);		\
-	gtk_tree_view_column_set_min_width(column, 8);			\
+	if (width) {							\
+		gtk_tree_view_column_set_fixed_width(column, width);	\
+		gtk_tree_view_column_set_min_width(column, 8);		\
+	}								\
 	gtk_tree_view_column_set_clickable(column, TRUE);		\
 	/* gtk_tree_view_column_set_sort_column_id(column, col); */	\
 	gtk_tree_view_column_set_reorderable(column, TRUE);		\
@@ -5153,6 +5159,7 @@
 		   prefs_common.summary_col_size[S_COL_NUMBER], 1.0);
 	ADD_COLUMN(_("To"), text, S_COL_TO, TRUE,
 		   prefs_common.summary_col_size[S_COL_TO], 0.0);
+	ADD_COLUMN("", text, S_COL_DUMMY, FALSE, 0, 0);
 
 #undef ADD_COLUMN
 
@@ -5822,7 +5829,7 @@
 {
 	SummaryColumnType type;
 
-	for (type = 0; type < N_SUMMARY_VISIBLE_COLS; type++) {
+	for (type = 0; type < N_SUMMARY_VISIBLE_COLS - 1; type++) {
 		if (summaryview->columns[type]->button == widget) {
 			prefs_common.summary_col_size[type] = allocation->width;
 			break;
@@ -5875,7 +5882,7 @@
 {
 	SummaryColumnType type;
 
-	for (type = 0; type < N_SUMMARY_VISIBLE_COLS; type++) {
+	for (type = 0; type < N_SUMMARY_VISIBLE_COLS - 1; type++) {
 		if (summaryview->columns[type]->button == button) {
 			summary_sort_by_column_click(summaryview, type);
 			break;
Index: src/prefs_summary_column.c
===================================================================
--- src/prefs_summary_column.c	(revision 2362)
+++ src/prefs_summary_column.c	(working copy)
@@ -71,7 +71,8 @@
 	N_("Date"),		/* S_COL_DATE    */
 	N_("Size"),		/* S_COL_SIZE    */
 	N_("Number"),		/* S_COL_NUMBER  */
-	N_("To")		/* S_COL_TO      */
+	N_("To"),		/* S_COL_TO      */
+	"",			/* S_COL_DUMMY   */
 };
 
 static SummaryColumnState default_state[N_SUMMARY_VISIBLE_COLS] = {
@@ -83,7 +84,8 @@
 	{ S_COL_DATE   , TRUE  },
 	{ S_COL_SIZE   , TRUE  },
 	{ S_COL_NUMBER , FALSE },
-	{ S_COL_TO     , FALSE }
+	{ S_COL_TO     , FALSE },
+	{ S_COL_DUMMY  , TRUE  }
 };
 
 static SummaryColumnState default_sent_state[N_SUMMARY_VISIBLE_COLS] = {
@@ -95,7 +97,8 @@
 	{ S_COL_DATE   , TRUE  },
 	{ S_COL_SIZE   , TRUE  },
 	{ S_COL_NUMBER , FALSE },
-	{ S_COL_FROM   , FALSE }
+	{ S_COL_FROM   , FALSE },
+	{ S_COL_DUMMY  , TRUE  }
 };
 
 static void prefs_summary_column_create	(void);
@@ -375,7 +378,7 @@
 	for (pos = 0; pos < N_SUMMARY_VISIBLE_COLS; pos++)
 		state[pos].type = -1;
 
-	for (type = 0; type < N_SUMMARY_VISIBLE_COLS; type++) {
+	for (type = 0; type < N_SUMMARY_VISIBLE_COLS - 1; type++) {
 		pos = col_pos[type];
 		if (pos < 0 || pos >= N_SUMMARY_VISIBLE_COLS ||
 		    state[pos].type != -1) {
@@ -388,6 +391,9 @@
 		state[pos].visible = col_visible[type];
 	}
 
+	state[S_COL_DUMMY].type = S_COL_DUMMY;
+	state[S_COL_DUMMY].visible = TRUE;
+
 	return state;
 }
 
@@ -407,11 +413,14 @@
 		col_pos = prefs_common.summary_col_pos;
 	}
 
-	for (pos = 0; pos < N_SUMMARY_VISIBLE_COLS; pos++) {
+	for (pos = 0; pos < N_SUMMARY_VISIBLE_COLS - 1; pos++) {
 		type = state[pos].type;
 		col_visible[type] = state[pos].visible;
 		col_pos[type] = pos;
 	}
+
+	col_visible[S_COL_DUMMY] = TRUE;
+	col_pos[S_COL_DUMMY] = S_COL_DUMMY;
 }
 
 static void prefs_summary_column_set_dialog(SummaryColumnState *state)
@@ -429,7 +438,7 @@
 		state = prefs_summary_column_get_config
 			(summary_col.sent_folder);
 
-	for (pos = 0; pos < N_SUMMARY_VISIBLE_COLS; pos++) {
+	for (pos = 0; pos < N_SUMMARY_VISIBLE_COLS - 1; pos++) {
 		gint row;
 		type = state[pos].type;
 		name = gettext(col_name[type]);
@@ -455,7 +464,7 @@
 	gint row, pos = 0;
 
 	g_return_if_fail(stock_clist->rows + shown_clist->rows ==
-			 N_SUMMARY_VISIBLE_COLS);
+			 N_SUMMARY_VISIBLE_COLS - 1);
 
 	for (row = 0; row < stock_clist->rows; row++) {
 		type = GPOINTER_TO_INT
@@ -472,6 +481,9 @@
 		state[pos + row].visible = TRUE;
 	}
 
+	state[S_COL_DUMMY].type = S_COL_DUMMY;
+	state[S_COL_DUMMY].visible = TRUE;
+
 	prefs_summary_column_set_config(state, summary_col.sent_folder);
 	main_window_set_summary_column();
 }
Index: src/mainwindow.c
===================================================================
--- src/mainwindow.c	(revision 2362)
+++ src/mainwindow.c	(working copy)
@@ -930,6 +930,7 @@
 	GtkWidget *ac_menu;
 	GtkWidget *menuitem;
 	gint i;
+	gboolean real_vision;
 
 	static GdkGeometry geometry;
 
@@ -1114,8 +1115,8 @@
 			g_warning(_("MainWindow: color allocation %d failed\n"), i);
 	}
 
-	messageview->visible = prefs_common.msgview_visible;
-
+	real_vision = prefs_common.msgview_visible;
+	messageview->visible = TRUE; /* needs this space anyway */
 	main_window_set_widgets(mainwin, prefs_common.layout_type, type);
 
 	if (prefs_common.mainwin_maximized)
@@ -1169,6 +1170,8 @@
 
 	/* show main window */
 	gtk_widget_show(mainwin->window);
+	if (!real_vision)
+		main_window_toggle_message_view(mainwin);
 
 #if !GTK_CHECK_VERSION(2, 6, 0)
 	{
@@ -1588,7 +1601,8 @@
 	allocation = &(GTK_WIDGET_PTR(mainwin->summaryview)->allocation);
 	if (allocation->width > 1 && allocation->height > 1) {
 		if (vlayout) {
-			if (!(mainwin->type & SEPARATE_MESSAGE))
+			if (!(mainwin->type & SEPARATE_MESSAGE) &&
+			    messageview_is_visible(mainwin->messageview))
 				prefs_common.summaryview_vwidth = allocation->width;
 			prefs_common.summaryview_vheight = allocation->height;
 		} else {
@@ -1623,14 +1637,16 @@
 		prefs_common.folderview_height = allocation->height;
 	}
 
-	allocation = &(GTK_WIDGET_PTR(mainwin->messageview)->allocation);
-	if (allocation->width > 1 && allocation->height > 1) {
-		if (vlayout) {
-			prefs_common.msgview_vwidth = allocation->width;
-			prefs_common.msgview_vheight = allocation->height;
-		} else {
-			prefs_common.msgview_width = allocation->width;
-			prefs_common.msgview_height = allocation->height;
+	if (messageview_is_visible(mainwin->messageview)){
+		allocation = &(GTK_WIDGET_PTR(mainwin->messageview)->allocation);
+		if (allocation->width > 1 && allocation->height > 1) {
+			if (vlayout) {
+				prefs_common.msgview_vwidth = allocation->width;
+				prefs_common.msgview_vheight = allocation->height;
+			} else {
+				prefs_common.msgview_width = allocation->width;
+				prefs_common.msgview_height = allocation->height;
+			}
 		}
 	}
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.