- EvApplication *app;
- GtkWidget *window;
- GValue value = {0, };
-
- gtk_tree_model_get_value (model, &iter,
- LINKS_COLUMN_LINK, &value);
-
- link = EV_LINK (g_value_get_object (&value));
- g_return_if_fail (link != NULL);
-
- window = gtk_widget_get_ancestor (GTK_WIDGET (ev_sidebar_links),
- EV_TYPE_WINDOW);
- if (window) {
- app = ev_application_get_instance ();
- ev_application_open_link (app, EV_WINDOW (window),
- link, NULL);
+ int first_page, last_page;
+
+ gtk_tree_model_get (model, &iter,
+ EV_DOCUMENT_LINKS_COLUMN_LINK, &link,
+ -1);
+ first_page = ev_link_get_page (link) + 1;
+
+ if (gtk_tree_model_iter_next (model, &iter)) {
+ gtk_tree_model_get (model, &iter,
+ EV_DOCUMENT_LINKS_COLUMN_LINK, &link,
+ -1);
+ last_page = ev_link_get_page (link);
+ } else {
+ last_page = -1;
+ }
+
+ window = gtk_widget_get_toplevel (GTK_WIDGET (sidebar));
+ if (EV_IS_WINDOW (window)) {
+ ev_window_print_range (EV_WINDOW (window),
+ first_page, last_page);
+ }
+ }
+}
+
+static GtkMenu *
+build_popup_menu (EvSidebarLinks *sidebar)
+{
+ GtkWidget *menu;
+ GtkWidget *item;
+
+ menu = gtk_menu_new ();
+ item = gtk_image_menu_item_new_from_stock (GTK_STOCK_PRINT, NULL);
+ gtk_label_set_label (GTK_LABEL (GTK_BIN (item)->child), _("Print..."));
+ gtk_widget_show (item);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+ g_signal_connect (item, "activate",
+ G_CALLBACK (print_section_cb), sidebar);
+
+ return GTK_MENU (menu);
+}
+
+static void
+popup_menu_cb (GtkWidget *treeview, EvSidebarLinks *sidebar)
+{
+ GtkMenu *menu = build_popup_menu (sidebar);
+
+ gtk_menu_popup (menu, NULL, NULL,
+ ev_gui_menu_position_tree_selection,
+ sidebar->priv->tree_view, 0,
+ gtk_get_current_event_time ());
+ gtk_menu_shell_select_first (GTK_MENU_SHELL (menu), FALSE);
+}
+
+static gboolean
+button_press_cb (GtkWidget *treeview,
+ GdkEventButton *event,
+ EvSidebarLinks *sidebar)
+{
+ GtkTreePath *path = NULL;
+
+ if (event->button == 3) {
+ if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (treeview),
+ event->x,
+ event->y,
+ &path,
+ NULL, NULL, NULL)) {
+ gtk_tree_view_set_cursor (GTK_TREE_VIEW (treeview),
+ path, NULL, FALSE);
+ gtk_menu_popup (build_popup_menu (sidebar), NULL,
+ NULL, NULL, NULL, event->button,
+ gtk_get_current_event_time ());
+ gtk_tree_path_free (path);
+
+ return TRUE;