-static gboolean
-ev_view_goto_window_button_press_event (GtkWidget *widget,
- GdkEventButton *event,
- EvView *view)
-{
- ev_view_goto_window_hide (view);
-
- return TRUE;
-}
-
-static void
-ev_view_goto_entry_activate (GtkEntry *entry,
- EvView *view)
-{
- const gchar *text;
- gint page;
-
- text = gtk_entry_get_text (entry);
- page = atoi (text) - 1;
-
- ev_view_goto_window_hide (view);
-
- if (page >= 0 &&
- page < ev_page_cache_get_n_pages (view->page_cache))
- ev_page_cache_set_current_page (view->page_cache, page);
-}
-
-static void
-ev_view_goto_window_create (EvView *view)
-{
- GtkWidget *frame, *hbox, *toplevel, *label;
-
- toplevel = gtk_widget_get_toplevel (GTK_WIDGET (view));
-
- if (view->goto_window) {
- if (GTK_WINDOW (toplevel)->group)
- gtk_window_group_add_window (GTK_WINDOW (toplevel)->group,
- GTK_WINDOW (view->goto_window));
- else if (GTK_WINDOW (view->goto_window)->group)
- gtk_window_group_remove_window (GTK_WINDOW (view->goto_window)->group,
- GTK_WINDOW (view->goto_window));
- return;
- }
-
- view->goto_window = gtk_window_new (GTK_WINDOW_POPUP);
- gtk_window_set_screen (GTK_WINDOW (view->goto_window),
- gtk_widget_get_screen (GTK_WIDGET (view)));
-
- if (GTK_WINDOW (toplevel)->group)
- gtk_window_group_add_window (GTK_WINDOW (toplevel)->group,
- GTK_WINDOW (view->goto_window));
-
- gtk_window_set_modal (GTK_WINDOW (view->goto_window), TRUE);
-
- g_signal_connect (view->goto_window, "delete_event",
- G_CALLBACK (ev_view_goto_window_delete_event),
- view);
- g_signal_connect (view->goto_window, "key_press_event",
- G_CALLBACK (ev_view_goto_window_key_press_event),
- view);
- g_signal_connect (view->goto_window, "button_press_event",
- G_CALLBACK (ev_view_goto_window_button_press_event),
- view);
-
- frame = gtk_frame_new (NULL);
- gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN);
- gtk_container_add (GTK_CONTAINER (view->goto_window), frame);
- gtk_widget_show (frame);
-
- hbox = gtk_hbox_new (FALSE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (hbox), 3);
- gtk_container_add (GTK_CONTAINER (frame), hbox);
- gtk_widget_show (hbox);
-
- label = gtk_label_new(_("Jump to page:"));
- gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 3);
- gtk_widget_show (label);
- gtk_widget_realize (label);
-
- view->goto_entry = gtk_entry_new ();
- g_signal_connect (view->goto_entry, "activate",
- G_CALLBACK (ev_view_goto_entry_activate),
- view);
- gtk_box_pack_start (GTK_BOX (hbox), view->goto_entry, TRUE, TRUE, 0);
- gtk_widget_show (view->goto_entry);
- gtk_widget_realize (view->goto_entry);
-}
-
-static void
-ev_view_goto_entry_grab_focus (EvView *view)
-{
- GtkWidgetClass *entry_parent_class;
-
- entry_parent_class = g_type_class_peek_parent (GTK_ENTRY_GET_CLASS (view->goto_entry));
- (entry_parent_class->grab_focus) (view->goto_entry);
-
- send_focus_change (view->goto_entry, TRUE);
-}
-
-static void
-ev_view_goto_window_send_key_event (EvView *view,
- GdkEvent *event)
-{
- GdkEventKey *new_event;
- GdkScreen *screen;
-
- /* Move goto window off screen */
- screen = gtk_widget_get_screen (GTK_WIDGET (view));
- gtk_window_move (GTK_WINDOW (view->goto_window),
- gdk_screen_get_width (screen) + 1,
- gdk_screen_get_height (screen) + 1);
- gtk_widget_show (view->goto_window);
-
- new_event = (GdkEventKey *) gdk_event_copy (event);
- g_object_unref (new_event->window);
- new_event->window = g_object_ref (view->goto_window->window);
- gtk_widget_realize (view->goto_window);
-
- gtk_widget_event (view->goto_window, (GdkEvent *)new_event);
- gdk_event_free ((GdkEvent *)new_event);
- gtk_widget_hide (view->goto_window);
-}
-