/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2008 Hiroyuki Yamamoto and the Claws Mail team
+ * Copyright (C) 1999-2011 Hiroyuki Yamamoto and the Claws Mail team
*
* 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
#define N_MIMEVIEW_COLS 3
+#if !GTK_CHECK_VERSION(3, 0, 0)
static void mimeview_set_multipart_tree (MimeView *mimeview,
MimeInfo *mimeinfo,
GtkCMCTreeNode *parent);
static GtkCMCTreeNode *mimeview_append_part (MimeView *mimeview,
MimeInfo *partinfo,
GtkCMCTreeNode *parent);
+#endif
static void mimeview_show_message_part (MimeView *mimeview,
MimeInfo *partinfo);
static void mimeview_change_view_type (MimeView *mimeview,
static gboolean mimeview_write_part (const gchar *filename,
MimeInfo *partinfo);
+#if !GTK_CHECK_VERSION(3, 0, 0)
static void mimeview_selected (GtkCMCTree *ctree,
GtkCMCTreeNode *node,
gint column,
MimeView *mimeview);
+#endif
static void mimeview_start_drag (GtkWidget *widget,
gint button,
GdkEvent *event,
GdkEventVisibility *event,
MimeView *mimeview)
{
- gdk_window_set_cursor(widget->window, hand_cursor);
+ gdk_window_set_cursor(gtk_widget_get_window(widget), hand_cursor);
return FALSE;
}
GdkEventCrossing *event,
MimeView *mimeview)
{
- gdk_window_set_cursor(widget->window, NULL);
+ gdk_window_set_cursor(gtk_widget_get_window(widget), NULL);
return FALSE;
}
GdkEventCrossing *event,
MimeView *mimeview)
{
- gdk_window_set_cursor(widget->window, hand_cursor);
+ gdk_window_set_cursor(gtk_widget_get_window(widget), hand_cursor);
return FALSE;
}
gchar *titles[N_MIMEVIEW_COLS];
gint i;
- CLAWS_TIP_DECL();
if (!hand_cursor)
hand_cursor = gdk_cursor_new(GDK_HAND2);
GTK_POLICY_AUTOMATIC);
ctree = gtk_sctree_new_with_titles(N_MIMEVIEW_COLS, 0, titles);
- gtk_widget_show(ctree);
+
+ if (prefs_common.show_col_headers == FALSE)
+ gtk_cmclist_column_titles_hide(GTK_CMCLIST(ctree));
+
gtk_cmclist_set_selection_mode(GTK_CMCLIST(ctree), GTK_SELECTION_BROWSE);
gtk_cmctree_set_line_style(GTK_CMCTREE(ctree), GTK_CMCTREE_LINES_NONE);
gtk_cmclist_set_column_justification(GTK_CMCLIST(ctree), COL_SIZE,
GTK_JUSTIFY_RIGHT);
gtk_cmclist_set_column_width(GTK_CMCLIST(ctree), COL_MIMETYPE, 240);
gtk_cmclist_set_column_width(GTK_CMCLIST(ctree), COL_SIZE, 90);
+ gtk_cmclist_set_column_auto_resize(GTK_CMCLIST(ctree), COL_MIMETYPE, TRUE);
+ gtk_cmclist_set_column_auto_resize(GTK_CMCLIST(ctree), COL_NAME, TRUE);
for (i = 0; i < N_MIMEVIEW_COLS; i++)
- GTK_WIDGET_UNSET_FLAGS(GTK_CMCLIST(ctree)->column[i].button,
- GTK_CAN_FOCUS);
+ gtkut_widget_set_can_focus(GTK_CMCLIST(ctree)->column[i].button,
+ FALSE);
+ gtk_widget_show(ctree);
gtk_container_add(GTK_CONTAINER(scrolledwin), ctree);
g_signal_connect(G_OBJECT(ctree), "tree_select_row",
mime_notebook = gtk_notebook_new();
gtk_widget_show(mime_notebook);
- GTK_WIDGET_UNSET_FLAGS(mime_notebook, GTK_CAN_FOCUS);
+ gtkut_widget_set_can_focus(mime_notebook, FALSE);
gtk_notebook_set_show_tabs(GTK_NOTEBOOK(mime_notebook), FALSE);
gtk_notebook_set_show_border(GTK_NOTEBOOK(mime_notebook), FALSE);
mime_toggle = gtk_event_box_new();
gtk_event_box_set_visible_window(GTK_EVENT_BOX(mime_toggle), FALSE);
- g_signal_connect(G_OBJECT(mime_toggle), "visibility-notify-event",
- G_CALLBACK(mimeview_visi_notify), mimeview);
g_signal_connect(G_OBJECT(mime_toggle), "motion-notify-event",
G_CALLBACK(mimeview_visi_notify), mimeview);
g_signal_connect(G_OBJECT(mime_toggle), "leave-notify-event",
mimeview_clear(mimeview);
- g_return_if_fail(file != NULL);
- g_return_if_fail(mimeinfo != NULL);
+ cm_return_if_fail(file != NULL);
+ cm_return_if_fail(mimeinfo != NULL);
mimeview->mimeinfo = mimeinfo;
g_slist_free(mimeview->viewers);
gtk_target_list_unref(mimeview->target_list);
- mimeview_free_mimeinfo(mimeview);
#ifdef USE_PTHREAD
if (mimeview->check_data) {
mimeview->check_data->destroy_mimeview = TRUE;
} else
#endif
{
+ mimeview_free_mimeinfo(mimeview);
g_free(mimeview->file);
g_free(mimeview);
mimeviews = g_slist_remove(mimeviews, mimeview);
{
GtkCMCTreeNode *node;
- g_return_if_fail(mimeinfo != NULL);
+ cm_return_if_fail(mimeinfo != NULL);
while (mimeinfo != NULL) {
node = mimeview_append_part(mimeview, mimeinfo, parent);
str[COL_NAME] = (gchar *) get_part_name(partinfo);
node = gtk_sctree_insert_node(ctree, parent, NULL, str, 0,
- NULL, NULL, NULL, NULL,
+ NULL, NULL,
FALSE, TRUE);
gtk_cmctree_node_set_row_data(ctree, node, partinfo);
StockPixmap icon = STOCK_PIXMAP_PRIVACY_SIGNED;
SignatureStatus mycode = SIGNATURE_UNCHECKED;
- g_return_if_fail(mimeview != NULL);
- g_return_if_fail(mimeinfo != NULL);
+ cm_return_if_fail(mimeview != NULL);
+ cm_return_if_fail(mimeinfo != NULL);
if (special)
mycode = code;
/* reset all thread stuff, and do the cleanups we've been left to do */
static void mimeview_check_data_reset(MimeView *mimeview)
{
+ gboolean must_free;
+ gboolean must_destroy;
+
if (!mimeview->check_data)
return;
- if (mimeview->check_data->free_after_use) {
+ must_free = mimeview->check_data->free_after_use;
+ must_destroy = mimeview->check_data->destroy_mimeview;
+
+ if (mimeview->check_data->cancel_th_init) {
+ debug_print("killing canceller thread\n");
+ mimeview->check_data->cancel_th_init = FALSE;
+ pthread_cancel(mimeview->check_data->cancel_th);
+ }
+
+ g_free(mimeview->check_data);
+ mimeview->check_data = NULL;
+
+ if (must_free) {
debug_print("freeing deferred mimeinfo\n");
procmime_mimeinfo_free_all(mimeview->check_data->siginfo);
}
- if (mimeview->check_data->destroy_mimeview) {
+ if (must_destroy) {
debug_print("freeing deferred mimeview\n");
+ mimeview_free_mimeinfo(mimeview);
g_free(mimeview->file);
g_free(mimeview);
mimeviews = g_slist_remove(mimeviews, mimeview);
}
- g_free(mimeview->check_data);
- mimeview->check_data = NULL;
}
/* GUI update once the checker thread is done or killed */
if (!mimeview->check_data)
return NULL;
- if (mimeinfo && mimeinfo == mimeview->check_data->siginfo)
+ if (mimeinfo && mimeinfo == mimeview->check_data->siginfo) {
privacy_mimeinfo_check_signature(mimeinfo);
- else {
+ if (mimeview->check_data && mimeview->check_data->cancel_th_init) {
+ mimeview->check_data->cancel_th_init = FALSE;
+ pthread_cancel(mimeview->check_data->cancel_th);
+ }
+ } else {
/* that's strange! we changed message without
* getting killed. */
g_warning("different siginfo!\n");
/* wait for a few seconds... */
debug_print("waiting a while\n");
- sleep(5);
+ g_usleep(5 * 1000 * 1000);
if (!mimeview->check_data)
return NULL; /* nothing to kill, it's done in time :) */
/* too late, go away checker thread */
debug_print("killing checker thread\n");
- pthread_cancel(mimeview->check_data->th);
-
+ if (mimeview->check_data->th_init) {
+ mimeview->check_data->th_init = FALSE;
+ pthread_cancel(mimeview->check_data->th);
+ }
+
/* tell upstream it was a timeout */
mimeview->check_data->timeout = TRUE;
/* use g_timeout so that GUI updates is done from the
if (!mimeview->check_data)
return;
debug_print("killing checker thread NOW\n");
- pthread_cancel(mimeview->check_data->th);
+ if (mimeview->check_data->th_init) {
+ mimeview->check_data->th_init = FALSE;
+ pthread_cancel(mimeview->check_data->th);
+ }
/* tell upstream it was a timeout */
mimeview->check_data->timeout = TRUE;
g_free(mimeview->check_data);
mimeview->check_data = NULL;
return;
- } else
+ } else {
mimeview->check_data->th = th;
+ mimeview->check_data->th_init = TRUE;
+ }
/* create the killer thread */
pthread_create(&th2, &detach2,
mimeview_check_sig_cancel_thread,
mimeview);
+
+ mimeview->check_data->cancel_th = th2;
+ mimeview->check_data->cancel_th_init = TRUE;
}
#endif
MimeInfo *siginfo;
MimeInfo *first_text;
- g_return_if_fail(mimeview != NULL);
- g_return_if_fail(selected != NULL);
+ cm_return_if_fail(mimeview != NULL);
+ cm_return_if_fail(selected != NULL);
if (selected->type == MIMETYPE_MESSAGE
&& !g_ascii_strcasecmp(selected->subtype, "rfc822")) {
if (!partinfo) return;
/* ungrab the mouse event */
- if (GTK_WIDGET_HAS_GRAB(ctree)) {
+ if (gtk_widget_has_grab(GTK_WIDGET(ctree))) {
gtk_grab_remove(GTK_WIDGET(ctree));
if (gdk_pointer_is_grabbed())
gdk_pointer_ungrab(GDK_CURRENT_TIME);
GdkDragContext *context;
MimeInfo *partinfo;
- g_return_if_fail(mimeview != NULL);
+ cm_return_if_fail(mimeview != NULL);
partinfo = mimeview_get_selected_part(mimeview);
- if (partinfo->disposition == DISPOSITIONTYPE_INLINE) return;
+ if (partinfo == NULL ||
+ partinfo->disposition == DISPOSITIONTYPE_INLINE)
+ return;
context = gtk_drag_begin(widget, mimeview->target_list,
GDK_ACTION_COPY, button, event);
if (node) {
partinfo = gtk_cmctree_node_get_row_data(ctree, node);
- if (partinfo->type == MIMETYPE_MULTIPART)
+ if (partinfo->type == MIMETYPE_MULTIPART ||
+ (!prefs_common.show_inline_attachments && partinfo->id))
goto skip;
gtk_sctree_unselect_all(GTK_SCTREE(ctree));
gtk_sctree_select(GTK_SCTREE(ctree), node);
return FALSE;
switch (event->keyval) {
- case GDK_space:
- if (mimeview_scroll_page(mimeview, FALSE))
+ case GDK_KEY_Page_Down:
+ case GDK_KEY_space:
+ if (mimeview_scroll_page(mimeview,
+ (event->state & GDK_SHIFT_MASK) != 0))
return TRUE;
-
- mimeview_select_next_part(mimeview);
+
+ if (!(event->state & GDK_SHIFT_MASK))
+ mimeview_select_next_part(mimeview);
return TRUE;
-
- case GDK_BackSpace:
+ case GDK_KEY_Page_Up:
+ case GDK_KEY_BackSpace:
mimeview_scroll_page(mimeview, TRUE);
return TRUE;
- case GDK_Return:
- case GDK_KP_Enter:
+ case GDK_KEY_Return:
+ case GDK_KEY_KP_Enter:
mimeview_scroll_one_line(mimeview,
(event->state & GDK_MOD1_MASK) != 0);
return TRUE;
- case GDK_n:
- case GDK_N:
+ case GDK_KEY_Up:
+ case GDK_KEY_Down:
+ mimeview_scroll_one_line(mimeview, (event->keyval == GDK_KEY_Up));
+ return TRUE;
+ case GDK_KEY_n:
+ case GDK_KEY_N:
BREAK_ON_MODIFIER_KEY();
mimeview_select_next_part(mimeview);
return TRUE;
- case GDK_p:
- case GDK_P:
+ case GDK_KEY_p:
+ case GDK_KEY_P:
BREAK_ON_MODIFIER_KEY();
mimeview_select_prev_part(mimeview);
return TRUE;
- case GDK_y:
+ case GDK_KEY_y:
BREAK_ON_MODIFIER_KEY();
KEY_PRESS_EVENT_STOP();
mimeview_save_as(mimeview);
return TRUE;
- case GDK_t:
+ case GDK_KEY_t:
BREAK_ON_MODIFIER_KEY();
KEY_PRESS_EVENT_STOP();
mimeview_display_as_text(mimeview);
return TRUE;
- case GDK_l:
+ case GDK_KEY_l:
BREAK_ON_MODIFIER_KEY();
KEY_PRESS_EVENT_STOP();
mimeview_launch(mimeview, NULL);
return TRUE;
-#ifndef G_OS_WIN32
- case GDK_o:
+ case GDK_KEY_o:
BREAK_ON_MODIFIER_KEY();
KEY_PRESS_EVENT_STOP();
+#ifndef G_OS_WIN32
mimeview_open_with(mimeview);
- return TRUE;
#endif
- case GDK_c:
+ return TRUE;
+ case GDK_KEY_c:
BREAK_ON_MODIFIER_KEY();
KEY_PRESS_EVENT_STOP();
mimeview_check_signature(mimeview);
return TRUE;
- case GDK_a:
+ case GDK_KEY_a:
BREAK_ON_MODIFIER_KEY();
KEY_PRESS_EVENT_STOP();
mimeview_select_next_part(mimeview);
uriname = g_strconcat(tmp, "\r\n", NULL);
g_free(tmp);
- gtk_selection_data_set(selection_data, selection_data->target, 8,
+ gtk_selection_data_set(selection_data,
+ gtk_selection_data_get_target(selection_data), 8,
(guchar *)uriname, strlen(uriname));
g_free(uriname);
gchar *filename;
filename = g_strdup(get_part_name(partinfo));
- if (!filename || !*filename)
+ if (!filename || !*filename) {
+ g_free(filename);
filename = g_strdup_printf("noname.%d", number);
+ }
if (!g_utf8_validate(filename, -1, NULL)) {
gchar *tmp = conv_filename_to_utf8(filename);
partinfo = mimeview_get_part_to_use(mimeview);
- g_return_if_fail(partinfo != NULL);
+ cm_return_if_fail(partinfo != NULL);
if (get_part_name(partinfo) == NULL) {
return;
subst_for_filename(partname);
- if (prefs_common.attach_save_dir)
+ if (prefs_common.attach_save_dir && *prefs_common.attach_save_dir)
filepath = g_strconcat(prefs_common.attach_save_dir,
G_DIR_SEPARATOR_S, partname, NULL);
else
partinfo = mimeview_get_part_to_use(mimeview);
mimeview_select_mimepart_icon(mimeview, partinfo);
- g_return_if_fail(partinfo != NULL);
+ cm_return_if_fail(partinfo != NULL);
mimeview_show_message_part(mimeview, partinfo);
}
if (!partinfo)
partinfo = mimeview_get_part_to_use(mimeview);
- g_return_if_fail(partinfo != NULL);
+ cm_return_if_fail(partinfo != NULL);
filename = procmime_get_tmp_file_name(partinfo);
gchar *uri;
int r = 0;
#endif
- g_return_if_fail(partinfo != NULL);
+ cm_return_if_fail(partinfo != NULL);
filename = procmime_get_tmp_file_name(partinfo);
textview = mimeview->textview;
switch (event->keyval) {
- case GDK_space:
+ case GDK_KEY_space:
if (mimeview_scroll_page(mimeview, FALSE))
return TRUE;
return TRUE;
break;
- case GDK_BackSpace:
+ case GDK_KEY_BackSpace:
mimeview_scroll_page(mimeview, TRUE);
return TRUE;
- case GDK_Return:
- case GDK_KP_Enter:
+ case GDK_KEY_Return:
+ case GDK_KEY_KP_Enter:
mimeview_scroll_one_line(mimeview,
(event->state & GDK_MOD1_MASK) != 0);
return TRUE;
- case GDK_n:
- case GDK_N:
+ case GDK_KEY_n:
+ case GDK_KEY_N:
BREAK_ON_MODIFIER_KEY();
mimeview_select_next_part(mimeview);
return TRUE;
- case GDK_p:
- case GDK_P:
+ case GDK_KEY_p:
+ case GDK_KEY_P:
BREAK_ON_MODIFIER_KEY();
mimeview_select_prev_part(mimeview);
break;
- case GDK_y:
+ case GDK_KEY_y:
BREAK_ON_MODIFIER_KEY();
mimeview_save_as(mimeview);
return TRUE;
- case GDK_t:
+ case GDK_KEY_t:
BREAK_ON_MODIFIER_KEY();
mimeview_display_as_text(mimeview);
return TRUE;
- case GDK_l:
+ case GDK_KEY_l:
BREAK_ON_MODIFIER_KEY();
mimeview_launch(mimeview, NULL);
return TRUE;
#ifndef G_OS_WIN32
- case GDK_o:
+ case GDK_KEY_o:
BREAK_ON_MODIFIER_KEY();
mimeview_open_with(mimeview);
return TRUE;
#endif
- case GDK_c:
+ case GDK_KEY_c:
BREAK_ON_MODIFIER_KEY();
mimeview_check_signature(mimeview);
return TRUE;
- case GDK_a:
+ case GDK_KEY_a:
BREAK_ON_MODIFIER_KEY();
mimeview_select_next_part(mimeview);
return TRUE;
GtkTooltips *tips = mimeview->tooltips;
#endif
+ if (!prefs_common.show_inline_attachments && mimeinfo->id)
+ return;
+
vbox = mimeview->icon_vbox;
mimeview->icon_count++;
button = gtk_event_box_new();
- g_signal_connect(G_OBJECT(button), "visibility-notify-event",
- G_CALLBACK(mimeview_visi_notify), mimeview);
g_signal_connect(G_OBJECT(button), "motion-notify-event",
G_CALLBACK(mimeview_visi_notify), mimeview);
g_signal_connect(G_OBJECT(button), "leave-notify-event",
stockp = STOCK_PIXMAP_MIME_MESSAGE;
break;
case MIMETYPE_APPLICATION:
- if (mimeinfo->subtype && !g_ascii_strcasecmp(mimeinfo->subtype, "pgp-signature"))
+ if (mimeinfo->subtype && (!g_ascii_strcasecmp(mimeinfo->subtype, "pgp-signature")
+ || !g_ascii_strcasecmp(mimeinfo->subtype, "x-pkcs7-signature")
+ || !g_ascii_strcasecmp(mimeinfo->subtype, "pkcs7-signature")))
stockp = STOCK_PIXMAP_MIME_PGP_SIG;
else if (mimeinfo->subtype && !g_ascii_strcasecmp(mimeinfo->subtype, "pdf"))
stockp = STOCK_PIXMAP_MIME_PDF;
content_type = procmime_get_content_type_str(mimeinfo->type,
mimeinfo->subtype);
- tip = g_strjoin("\n", content_type,
- to_human_readable((goffset)mimeinfo->length), NULL);
+ tip = g_strconcat("<b>", _("Type:"), " </b>", content_type,
+ "\n<b>", _("Size:"), " </b>",
+ to_human_readable((goffset)mimeinfo->length), NULL);
g_free(content_type);
if (desc && *desc) {
gchar *tmp = NULL;
} else {
tmp = g_strdup(desc);
}
- tiptmp = g_strjoin("\n", tmp, tip, NULL);
+ tiptmp = g_strconcat(tip, "\n<b>",
+ prefs_common.attach_desc && mimeinfo->description ?
+ _("Description:") : _("Filename:"),
+ " </b>", tmp, NULL);
g_free(tip);
tip = tiptmp;
g_free(tmp);
}
if (sigshort && *sigshort) {
- tiptmp = g_strjoin("\n", tip, sigshort, NULL);
+ tiptmp = g_strjoin("\n", tip, g_markup_escape_text(sigshort, -1), NULL);
g_free(tip);
tip = tiptmp;
}
g_free(sigshort);
- CLAWS_SET_TIP(button, tip);
+ gtk_widget_set_tooltip_markup(button, tip);
g_free(tip);
gtk_widget_show_all(button);
gtk_drag_source_set(button, GDK_BUTTON1_MASK|GDK_BUTTON3_MASK,
g_list_free(orig);
mimeview->icon_count = 0;
adj = gtk_layout_get_vadjustment(GTK_LAYOUT(mimeview->icon_scroll));
- gtk_adjustment_set_value(adj, adj->lower);
+ gtk_adjustment_set_value(adj, gtk_adjustment_get_lower(adj));
gtk_adjustment_changed(adj);
}
static void icon_scroll_size_allocate_cb(GtkWidget *widget,
GtkAllocation *size, MimeView *mimeview)
{
- GtkAllocation *mainbox_size;
- GtkAllocation *vbox_size;
- GtkAllocation *layout_size;
+ GtkAllocation vbox_size;
+ GtkAllocation layout_size;
GtkAdjustment *adj;
+ guint width;
+ guint height;
adj = gtk_layout_get_vadjustment(GTK_LAYOUT(mimeview->icon_scroll));
- mainbox_size = &mimeview->icon_mainbox->allocation;
- vbox_size = &mimeview->icon_vbox->allocation;
- layout_size = &mimeview->icon_scroll->allocation;
+ gtk_widget_get_allocation(mimeview->icon_vbox, &vbox_size);
+ gtk_widget_get_allocation(mimeview->icon_scroll, &layout_size);
+ gtk_layout_get_size(GTK_LAYOUT(mimeview->icon_scroll), &width, &height);
gtk_layout_set_size(GTK_LAYOUT(mimeview->icon_scroll),
- GTK_LAYOUT(mimeview->icon_scroll)->width,
- MAX(vbox_size->height, layout_size->height));
- adj->step_increment = 10;
+ width,
+ MAX(vbox_size.height, layout_size.height));
+ gtk_adjustment_set_step_increment(adj, 10);
}
static void icon_list_create(MimeView *mimeview, MimeInfo *mimeinfo)
{
GtkRequisition size;
+ GtkRequisition requisition;
- g_return_if_fail(mimeinfo != NULL);
+ cm_return_if_fail(mimeinfo != NULL);
while (mimeinfo != NULL) {
if (mimeinfo->type != MIMETYPE_MULTIPART)
: NULL;
}
gtk_widget_size_request(mimeview->icon_vbox, &size);
- if (size.width > mimeview->icon_mainbox->requisition.width) {
+ gtk_widget_get_requisition(mimeview->icon_mainbox, &requisition);
+ if (size.width > requisition.width) {
gtk_widget_set_size_request(mimeview->icon_mainbox,
size.width, -1);
}
static gint mime_toggle_button_cb(GtkWidget *button, GdkEventButton *event,
MimeView *mimeview)
{
+ GtkAllocation allocation;
g_object_ref(button);
mimeview_leave_notify(button, NULL, NULL);
} else {
gtk_arrow_set(GTK_ARROW(gtk_bin_get_child(GTK_BIN((button)))), GTK_ARROW_LEFT,
GTK_SHADOW_NONE);
- mimeview->oldsize = mimeview->ctree_mainbox->allocation.height;
+ gtk_widget_get_allocation(mimeview->ctree_mainbox, &allocation);
+ mimeview->oldsize = allocation.height;
gtk_widget_hide(mimeview->ctree_mainbox);
gtk_widget_show(mimeview->icon_mainbox);
gtk_paned_set_position(GTK_PANED(mimeview->paned), 0);
button);
gtk_box_pack_start(GTK_BOX(mimeview->icon_mainbox),
button, FALSE, FALSE, 0);
- gtk_box_reorder_child(GTK_BOX(button->parent), button, 0);
+ gtk_box_reorder_child(GTK_BOX(gtk_widget_get_parent(button)), button, 0);
if (mimeview->opened)
icon_list_toggle_by_mime_info
(mimeview, gtk_cmctree_node_get_row_data(GTK_CMCTREE(mimeview->ctree),