static void part_button_pressed(MimeView *mimeview, GdkEventButton *event, MimeInfo *partinfo) { static MimeInfo *lastinfo; static guint32 lasttime; if (event->button == 2 || (event->button == 1 && (event->time - lasttime) < DOUBLE_CLICK_TIME && lastinfo == partinfo)) { /* call external program for image, audio or html */ mimeview_launch(mimeview); } else if (event->button == 3) { if (partinfo && (partinfo->type == MIMETYPE_TEXT || partinfo->type == MIMETYPE_MESSAGE || partinfo->type == MIMETYPE_IMAGE || partinfo->type == MIMETYPE_MULTIPART)) menu_set_sensitive(mimeview->popupfactory, "/Display as text", FALSE); else menu_set_sensitive(mimeview->popupfactory, "/Display as text", TRUE); if (partinfo && partinfo->type == MIMETYPE_APPLICATION && !g_strcasecmp(partinfo->subtype, "octet-stream")) menu_set_sensitive(mimeview->popupfactory, "/Open", FALSE); else menu_set_sensitive(mimeview->popupfactory, "/Open", TRUE); gtk_object_set_data(GTK_OBJECT(mimeview->popupmenu), "pop_partinfo", partinfo); gtk_menu_popup(GTK_MENU(mimeview->popupmenu), NULL, NULL, NULL, NULL, event->button, event->time); } lastinfo = partinfo; lasttime = event->time; }
static gint mimeview_button_pressed(GtkWidget *widget, GdkEventButton *event, MimeView *mimeview) { GtkTreeView *treeview = GTK_TREE_VIEW(widget); MimeInfo *partinfo; if (!event) return FALSE; if (event->button == 2 || event->button == 3) { GtkTreePath *path; if (!gtk_tree_view_get_path_at_pos(treeview, event->x, event->y, &path, NULL, NULL, NULL)) return FALSE; gtk_tree_view_set_cursor(treeview, path, NULL, FALSE); gtk_tree_path_free(path); } if (event->button == 2 || (event->button == 1 && event->type == GDK_2BUTTON_PRESS)) { /* call external program for image, audio or html */ mimeview_launch(mimeview); } else if (event->button == 3) { partinfo = mimeview_get_selected_part(mimeview); if (partinfo && (partinfo->mime_type == MIME_TEXT || partinfo->mime_type == MIME_TEXT_HTML || partinfo->mime_type == MIME_MESSAGE_RFC822 || partinfo->mime_type == MIME_IMAGE || partinfo->mime_type == MIME_MULTIPART)) menu_set_sensitive(mimeview->popupfactory, "/Display as text", FALSE); else menu_set_sensitive(mimeview->popupfactory, "/Display as text", TRUE); if (partinfo && partinfo->mime_type == MIME_APPLICATION_OCTET_STREAM) menu_set_sensitive(mimeview->popupfactory, "/Open", FALSE); else menu_set_sensitive(mimeview->popupfactory, "/Open", TRUE); menu_set_sensitive(mimeview->popupfactory, "/Save all...", mimeview->has_attach_file); if (partinfo && (partinfo->mime_type == MIME_TEXT || partinfo->mime_type == MIME_TEXT_HTML || partinfo->mime_type == MIME_MESSAGE_RFC822)) menu_set_sensitive(mimeview->popupfactory, "/Print...", TRUE); else menu_set_sensitive(mimeview->popupfactory, "/Print...", FALSE); if (partinfo && partinfo->mime_type == MIME_MESSAGE_RFC822) { gtk_widget_show(mimeview->reply_separator); gtk_widget_show(mimeview->reply_menuitem); } else { gtk_widget_hide(mimeview->reply_separator); gtk_widget_hide(mimeview->reply_menuitem); } #if USE_GPGME menu_set_sensitive(mimeview->popupfactory, "/Check signature", mimeview_is_signed(mimeview)); #endif gtk_menu_popup(GTK_MENU(mimeview->popupmenu), NULL, NULL, NULL, NULL, event->button, event->time); return TRUE; } return FALSE; }
static void open_button_clicked(GtkWidget *widget, gpointer data) { MimeView *mimeview = (MimeView *)data; mimeview_launch(mimeview); }
static gint mimeview_key_pressed(GtkWidget *widget, GdkEventKey *event, MimeView *mimeview) { SummaryView *summaryview; GtkCTree *ctree = GTK_CTREE(widget); GtkCTreeNode *node; if (!event) return FALSE; if (!mimeview->opened) return FALSE; switch (event->keyval) { case GDK_space: if (textview_scroll_page(mimeview->textview, FALSE)) return TRUE; node = GTK_CTREE_NODE_NEXT(mimeview->opened); if (node) { gtk_sctree_unselect_all(GTK_SCTREE(ctree)); gtk_sctree_select(GTK_SCTREE(ctree), node); return TRUE; } break; case GDK_BackSpace: textview_scroll_page(mimeview->textview, TRUE); return TRUE; case GDK_Return: textview_scroll_one_line(mimeview->textview, (event->state & GDK_MOD1_MASK) != 0); return TRUE; case GDK_n: case GDK_N: BREAK_ON_MODIFIER_KEY(); if (!GTK_CTREE_NODE_NEXT(mimeview->opened)) break; KEY_PRESS_EVENT_STOP(); gtk_signal_emit_by_name(GTK_OBJECT(ctree), "scroll_vertical", GTK_SCROLL_STEP_FORWARD, 0.0); return TRUE; case GDK_p: case GDK_P: BREAK_ON_MODIFIER_KEY(); if (!GTK_CTREE_NODE_PREV(mimeview->opened)) break; KEY_PRESS_EVENT_STOP(); gtk_signal_emit_by_name(GTK_OBJECT(ctree), "scroll_vertical", GTK_SCROLL_STEP_BACKWARD, 0.0); return TRUE; case GDK_y: BREAK_ON_MODIFIER_KEY(); KEY_PRESS_EVENT_STOP(); mimeview_save_as(mimeview); return TRUE; case GDK_t: BREAK_ON_MODIFIER_KEY(); KEY_PRESS_EVENT_STOP(); mimeview_display_as_text(mimeview); return TRUE; case GDK_l: BREAK_ON_MODIFIER_KEY(); KEY_PRESS_EVENT_STOP(); mimeview_launch(mimeview); return TRUE; case GDK_o: BREAK_ON_MODIFIER_KEY(); KEY_PRESS_EVENT_STOP(); mimeview_open_with(mimeview); return TRUE; default: break; } if (!mimeview->messageview->mainwin) return FALSE; summaryview = mimeview->messageview->mainwin->summaryview; summary_pass_key_press_event(summaryview, event); return TRUE; }
static gint icon_key_pressed(GtkWidget *button, GdkEventKey *event, MimeView *mimeview) { gint num; MimeInfo *partinfo; SummaryView *summaryview; TextView *textview; num = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(button), "icon_number")); partinfo = gtk_object_get_data(GTK_OBJECT(button), "partinfo"); if (!event) return FALSE; textview = mimeview->textview; switch (event->keyval) { case GDK_space: if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button))) { /* stop the button being untoggled */ KEY_PRESS_EVENT_STOP(); if (textview_scroll_page(textview, FALSE)) return TRUE; if (icon_list_select_by_number(mimeview, num + 1)) return TRUE; } else { icon_selected(mimeview, num, partinfo); toggle_icon(GTK_TOGGLE_BUTTON(button), mimeview); return TRUE; } break; case GDK_BackSpace: textview_scroll_page(textview, TRUE); return TRUE; case GDK_Return: if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button))) { KEY_PRESS_EVENT_STOP(); textview_scroll_one_line(textview, (event->state & GDK_MOD1_MASK) != 0); return TRUE; } else { icon_selected(mimeview, num, partinfo); toggle_icon(GTK_TOGGLE_BUTTON(button), mimeview); return TRUE; } case GDK_n: case GDK_N: BREAK_ON_MODIFIER_KEY(); if (icon_list_select_by_number(mimeview, num + 1)) { KEY_PRESS_EVENT_STOP(); return TRUE; } break; case GDK_p: case GDK_P: BREAK_ON_MODIFIER_KEY(); if (icon_list_select_by_number(mimeview, num - 1)) { KEY_PRESS_EVENT_STOP(); return TRUE; } break; case GDK_y: BREAK_ON_MODIFIER_KEY(); KEY_PRESS_EVENT_STOP(); mimeview_save_as(mimeview); return TRUE; case GDK_t: BREAK_ON_MODIFIER_KEY(); KEY_PRESS_EVENT_STOP(); mimeview_display_as_text(mimeview); return TRUE; case GDK_l: BREAK_ON_MODIFIER_KEY(); KEY_PRESS_EVENT_STOP(); mimeview_launch(mimeview); return TRUE; case GDK_o: BREAK_ON_MODIFIER_KEY(); KEY_PRESS_EVENT_STOP(); mimeview_open_with(mimeview); return TRUE; default: break; } if (!mimeview->messageview->mainwin) return FALSE; summaryview = mimeview->messageview->mainwin->summaryview; summary_pass_key_press_event(summaryview, event); return TRUE; }