* src/utils.c: to_human_readable(): made a bit of optimization.
* src/summaryview.c: summary_delete(): fixed a focus problem.
+ summary_find_{prev,next}_msg(): new. They find previous/next
+ message that is not deleted.
+ * src/prefs_filter.c: scroll CList automatically if moved row
+ becomes not fully visible.
2001-10-09
+2001-10-11 [paul] 0.6.3claws8
+
+ * sync with sylpheed 0.6.3cvs3
+ see ChangeLog entry 2001-10-10
+
2001-10-10 [christoph] 0.6.3claws7
* .cvsignore
* src/utils.c: to_human_readable(): ¾¯¤·ºÇŬ²½¡£
* src/summaryview.c: summary_delete(): ¥Õ¥©¡¼¥«¥¹¤ÎÌäÂê¤ò½¤Àµ¡£
+ summary_find_{prev,next}_msg(): ¿·µ¬¡£Á°/¼¡¤Îºï½ü¤µ¤ì¤Æ¤¤¤Ê¤¤
+ ¥á¥Ã¥»¡¼¥¸¤ò¸¡º÷¤¹¤ë¡£
+ * src/prefs_filter.c: °ÜÆ°¤·¤¿¹Ô¤¬´°Á´¤Ëɽ¼¨¤µ¤ì¤Ê¤¯¤Ê¤Ã¤¿¾ì¹ç¤Ï
+ ¼«Æ°Åª¤Ë CList ¤ò¥¹¥¯¥í¡¼¥ë¤µ¤»¤ë¤è¤¦¤Ë¤·¤¿¡£
2001-10-09
MICRO_VERSION=3
INTERFACE_AGE=0
BINARY_AGE=0
-EXTRA_VERSION=claws7
+EXTRA_VERSION=claws8
VERSION=$MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION$EXTRA_VERSION
dnl
gint row,
gint column,
GdkEvent *event);
+static void prefs_filter_row_move (GtkCList *clist,
+ gint source_row,
+ gint dest_row);
static void prefs_filter_dest_radio_button_toggled (void);
static void prefs_filter_notrecv_radio_button_toggled (void);
GTK_CAN_FOCUS);
gtk_signal_connect (GTK_OBJECT (cond_clist), "select_row",
GTK_SIGNAL_FUNC (prefs_filter_select), NULL);
+ gtk_signal_connect (GTK_OBJECT (cond_clist), "row_move",
+ GTK_SIGNAL_FUNC (prefs_filter_row_move), NULL);
btn_vbox = gtk_vbox_new (FALSE, 8);
gtk_widget_show (btn_vbox);
if (!clist->selection) return;
row = GPOINTER_TO_INT(clist->selection->data);
- if (row > 1) {
+ if (row > 1)
gtk_clist_row_move(clist, row, row - 1);
- if(gtk_clist_row_is_visible(clist, row - 1) != GTK_VISIBILITY_FULL) {
- gtk_clist_moveto(clist, row - 1, 0, 0, 0);
- }
- prefs_filter_set_list();
- }
}
static void prefs_filter_down(void)
if (!clist->selection) return;
row = GPOINTER_TO_INT(clist->selection->data);
- if (row > 0 && row < clist->rows - 1) {
+ if (row > 0 && row < clist->rows - 1)
gtk_clist_row_move(clist, row, row + 1);
- if(gtk_clist_row_is_visible(clist, row + 1) != GTK_VISIBILITY_FULL) {
- gtk_clist_moveto(clist, row + 1, 0, 1, 0);
- }
- prefs_filter_set_list();
- }
}
#define ENTRY_SET_TEXT(entry, str) \
(GTK_TOGGLE_BUTTON(filter.dest_radiobtn), TRUE);
}
+static void prefs_filter_row_move(GtkCList *clist, gint source_row,
+ gint dest_row)
+{
+ prefs_filter_set_list();
+ if (gtk_clist_row_is_visible(clist, dest_row) != GTK_VISIBILITY_FULL) {
+ gtk_clist_moveto(clist, dest_row, -1,
+ source_row < dest_row ? 1.0 : 0.0, 0.0);
+ }
+}
+
static void prefs_filter_dest_radio_button_toggled(void)
{
gtk_widget_set_sensitive(filter.dest_entry, TRUE);
static guint summary_get_msgnum (SummaryView *summaryview,
GtkCTreeNode *node);
+static GtkCTreeNode *summary_find_prev_msg
+ (SummaryView *summaryview,
+ GtkCTreeNode *current_node);
+static GtkCTreeNode *summary_find_next_msg
+ (SummaryView *summaryview,
+ GtkCTreeNode *current_node);
static GtkCTreeNode *summary_find_prev_unread_msg
(SummaryView *summaryview,
GtkCTreeNode *current_node);
return msginfo->msgnum;
}
+static GtkCTreeNode *summary_find_prev_msg(SummaryView *summaryview,
+ GtkCTreeNode *current_node)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ GtkCTreeNode *node;
+ MsgInfo *msginfo;
+
+ if (current_node)
+ node = current_node;
+ else
+ node = gtk_ctree_node_nth(ctree, GTK_CLIST(ctree)->rows - 1);
+
+ for (; node != NULL; node = GTK_CTREE_NODE_PREV(node)) {
+ msginfo = gtk_ctree_node_get_row_data(ctree, node);
+ if (!MSG_IS_DELETED(msginfo->flags)) break;
+ }
+
+ return node;
+}
+
+static GtkCTreeNode *summary_find_next_msg(SummaryView *summaryview,
+ GtkCTreeNode *current_node)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ GtkCTreeNode *node;
+ MsgInfo *msginfo;
+
+ if (current_node)
+ node = current_node;
+ else
+ node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
+
+ for (; node != NULL; node = gtkut_ctree_node_next(ctree, node)) {
+ msginfo = gtk_ctree_node_get_row_data(ctree, node);
+ if (!MSG_IS_DELETED(msginfo->flags)) break;
+ }
+
+ return node;
+}
+
static GtkCTreeNode *summary_find_prev_unread_msg(SummaryView *summaryview,
GtkCTreeNode *current_node)
{
GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
FolderItem *item = summaryview->folder_item;
GList *cur;
- GtkCTreeNode *dsp_last, *sel_last = NULL;
+ GtkCTreeNode *sel_last = NULL;
+ GtkCTreeNode *node;
if (!item || item->folder->type == F_NEWS) return;
if (aval != G_ALERTDEFAULT) return;
}
- /* next code sets current row focus right. if the last selection
- * is also the last displayed row, we need to scroll backwards.
- * exception: if the last displayed row has children,
- * we don't scroll back. */
- dsp_last = gtk_ctree_node_nth(ctree, GTK_CLIST(ctree)->rows - 1);
+ /* next code sets current row focus right. We need to find a row
+ * that is not deleted. */
for (cur = GTK_CLIST(ctree)->selection; cur != NULL; cur = cur->next) {
sel_last = GTK_CTREE_NODE(cur->data);
summary_delete_row(summaryview, sel_last);
}
- if (dsp_last == sel_last && !GTK_CTREE_ROW(sel_last)->children)
- summary_step(summaryview, GTK_SCROLL_STEP_BACKWARD);
- else
+ node = summary_find_next_msg(summaryview, sel_last);
+ if (!node)
+ node = summary_find_prev_msg(summaryview, sel_last);
+ if (node == gtkut_ctree_node_next(ctree, sel_last))
summary_step(summaryview, GTK_SCROLL_STEP_FORWARD);
+ else if (node == GTK_CTREE_NODE_PREV(sel_last))
+ summary_step(summaryview, GTK_SCROLL_STEP_BACKWARD);
+ else
+ summary_select_node
+ (summaryview, node,
+ summaryview->msg_is_toggled_on);
if (prefs_common.immediate_exec || item->stype == F_TRASH)
summary_execute(summaryview);
gchar *to_human_readable(off_t size)
{
static gchar str[10];
- gint shift;
- for (shift = 0; shift < 30; shift += 10) {
- if (size >> shift < 1024)
- break;
- }
-
- switch (shift) {
- case 0 : g_snprintf(str, sizeof(str), "%dB", (gint)size); break;
- case 10: g_snprintf(str, sizeof(str), "%.1fKB", (gfloat)size / (1 << 10));
- break;
- case 20: g_snprintf(str, sizeof(str), "%.2fMB", (gfloat)size / (1 << 20));
- break;
- default:
+ if (size < 1024)
+ g_snprintf(str, sizeof(str), "%dB", (gint)size);
+ else if (size >> 10 < 1024)
+ g_snprintf(str, sizeof(str), "%.1fKB", (gfloat)size / (1 << 10));
+ else if (size >> 20 < 1024)
+ g_snprintf(str, sizeof(str), "%.2fMB", (gfloat)size / (1 << 20));
+ else
g_snprintf(str, sizeof(str), "%.2fGB", (gfloat)size / (1 << 30));
- break;
- }
return str;
}