]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-view.c
Updated Belarusian Translation
[evince.git] / shell / ev-view.c
index cb2d0265fac6fd59a39d216bbe982e2c404e268b..129d87c334928e2599ec1c020d5457f3704cad82 100644 (file)
@@ -1575,7 +1575,8 @@ ev_view_handle_cursor_over_xy (EvView *view, gint x, gint y)
        } else {
                if (view->cursor == EV_VIEW_CURSOR_LINK ||
                    view->cursor == EV_VIEW_CURSOR_IBEAM ||
-                   view->cursor == EV_VIEW_CURSOR_DRAG)
+                   view->cursor == EV_VIEW_CURSOR_DRAG ||
+                   view->cursor == EV_VIEW_CURSOR_AUTOSCROLL)
                        ev_view_set_cursor (view, EV_VIEW_CURSOR_NORMAL);
        }
 }
@@ -1906,7 +1907,8 @@ ev_view_form_field_choice_changed (GtkWidget   *widget,
                gint item;
                
                item = gtk_combo_box_get_active (GTK_COMBO_BOX (widget));
-               if (GPOINTER_TO_INT (field_choice->selected_items->data) != item) {
+               if (!field_choice->selected_items ||
+                   GPOINTER_TO_INT (field_choice->selected_items->data) != item) {
                        g_list_free (field_choice->selected_items);
                        field_choice->selected_items = NULL;
                        field_choice->selected_items = g_list_prepend (field_choice->selected_items,
@@ -2481,7 +2483,7 @@ ev_view_expose_event (GtkWidget      *widget,
        cairo_t *cr;
        gint     i;
 
-       if (view->animation) {
+       if (view->animation && ev_transition_animation_ready (view->animation)) {
                GdkRectangle page_area;
                GtkBorder    border;
 
@@ -2687,15 +2689,12 @@ ev_view_button_press_event (GtkWidget      *widget,
        
        view->pressed_button = event->button;
        view->selection_info.in_drag = FALSE;
+
+       if (view->scroll_info.autoscrolling)
+               return TRUE;
        
        switch (event->button) {
                case 1: {
-
-                       if (view->scroll_info.autoscrolling == TRUE) {
-                               view->scroll_info.autoscrolling = FALSE;
-                               return TRUE;
-                       }
-
                        EvImage *image;
                        EvFormField *field;
 
@@ -2734,10 +2733,6 @@ ev_view_button_press_event (GtkWidget      *widget,
                case 2:
                        /* use root coordinates as reference point because
                         * scrolling changes window relative coordinates */
-                       if (view->scroll_info.autoscrolling == TRUE) {
-                               view->scroll_info.autoscrolling = FALSE;
-                               return TRUE;
-                       }
                        view->drag_info.start.x = event->x_root;
                        view->drag_info.start.y = event->y_root;
                        view->drag_info.hadj = gtk_adjustment_get_value (view->hadjustment);
@@ -2747,8 +2742,7 @@ ev_view_button_press_event (GtkWidget      *widget,
 
                        return TRUE;
                case 3:
-                       if (!view->scroll_info.autoscrolling)
-                               view->scroll_info.start_y = event->y;
+                       view->scroll_info.start_y = event->y;
                        return ev_view_do_popup_menu (view, event->x, event->y);
        }
        
@@ -2795,16 +2789,28 @@ ev_view_drag_data_get (GtkWidget        *widget,
                        if (view->image_dnd_info.image) {
                                GdkPixbuf *pixbuf;
 
-                               pixbuf = ev_image_get_pixbuf (view->image_dnd_info.image);
+                               ev_document_doc_mutex_lock ();
+                               pixbuf = ev_document_images_get_image (EV_DOCUMENT_IMAGES (view->document),
+                                                                      view->image_dnd_info.image);
+                               ev_document_doc_mutex_unlock ();
+                               
                                gtk_selection_data_set_pixbuf (selection_data, pixbuf);
+                               g_object_unref (pixbuf);
                        }
                        break;
                case TARGET_DND_URI:
                        if (view->image_dnd_info.image) {
+                               GdkPixbuf   *pixbuf;
                                const gchar *tmp_uri;
                                gchar      **uris;
 
-                               tmp_uri = ev_image_save_tmp (view->image_dnd_info.image);
+                               ev_document_doc_mutex_lock ();
+                               pixbuf = ev_document_images_get_image (EV_DOCUMENT_IMAGES (view->document),
+                                                                      view->image_dnd_info.image);
+                               ev_document_doc_mutex_unlock ();
+                               
+                               tmp_uri = ev_image_save_tmp (view->image_dnd_info.image, pixbuf);
+                               g_object_unref (pixbuf);
 
                                uris = g_new0 (gchar *, 2);
                                uris[0] = (gchar *)tmp_uri;
@@ -2993,6 +2999,7 @@ ev_view_motion_notify_event (GtkWidget      *widget,
 
        if (view->scroll_info.autoscrolling) {
                view->scroll_info.last_y = y;
+               return TRUE;
        }
 
        if (view->selection_info.in_drag) {
@@ -3126,19 +3133,30 @@ ev_view_button_release_event (GtkWidget      *widget,
        EvView *view = EV_VIEW (widget);
        EvLink *link = NULL;
 
-       view->drag_info.in_drag = FALSE;
        view->image_dnd_info.in_drag = FALSE;
-       
-       view->drag_info.release_timeout_id = g_timeout_add (20,
-                       (GSourceFunc)ev_view_scroll_drag_release, view);
 
-       if (view->pressed_button == 2) {
-               ev_view_handle_cursor_over_xy (view, event->x, event->y);
+       if (view->scroll_info.autoscrolling) {
+               ev_view_autoscroll_stop (view);
+               view->pressed_button = -1;
+
+               return TRUE;
+       } 
+
+       if (view->drag_info.in_drag) {
+               view->drag_info.release_timeout_id =
+                       g_timeout_add (20,
+                                      (GSourceFunc)ev_view_scroll_drag_release, view);
        }
 
-       if (view->document && view->pressed_button != 3) {
+       if (view->document && !view->drag_info.in_drag && view->pressed_button != 3) {
                link = ev_view_get_link_at_location (view, event->x, event->y);
        }
+       
+       view->drag_info.in_drag = FALSE;
+
+       if (view->pressed_button == 2) {
+               ev_view_handle_cursor_over_xy (view, event->x, event->y);
+       }
 
        view->pressed_button = -1;
 
@@ -3721,9 +3739,12 @@ draw_one_page (EvView       *view,
                page_surface = ev_pixbuf_cache_get_surface (view->pixbuf_cache, page);
 
                if (!page_surface) {
-                       draw_loading_text (view,
-                                          &real_page_area,
-                                          expose_area);
+                       if (!view->presentation) {
+                               draw_loading_text (view,
+                                                  &real_page_area,
+                                                  expose_area);
+                       }
+
                        *page_ready = FALSE;
 
                        return;
@@ -4410,7 +4431,8 @@ ev_view_set_loading (EvView         *view,
        gtk_widget_queue_draw (GTK_WIDGET (view));
 }
 
-static gboolean ev_view_autoscroll_cb (EvView *view)
+static gboolean
+ev_view_autoscroll_cb (EvView *view)
 {
        gdouble speed, value;
 
@@ -4443,10 +4465,43 @@ static gboolean ev_view_autoscroll_cb (EvView *view)
 
 }
 
-void ev_view_autoscroll(EvView *view)
+void
+ev_view_autoscroll_start (EvView *view)
 {
+       gint x, y;
+       
+       g_return_if_fail (EV_IS_VIEW (view));
+
+       if (view->scroll_info.autoscrolling)
+               return;
+       
        view->scroll_info.autoscrolling = TRUE;
-       view->scroll_info.timeout_id = g_timeout_add (20, (GSourceFunc)(ev_view_autoscroll_cb), view);
+       view->scroll_info.timeout_id =
+               g_timeout_add (20, (GSourceFunc)ev_view_autoscroll_cb,
+                              view);
+       
+       gtk_widget_get_pointer (GTK_WIDGET (view), &x, &y);
+       ev_view_handle_cursor_over_xy (view, x, y);
+}
+
+void
+ev_view_autoscroll_stop (EvView *view)
+{
+       gint x, y;
+       
+       g_return_if_fail (EV_IS_VIEW (view));
+
+       if (!view->scroll_info.autoscrolling)
+               return;
+
+       view->scroll_info.autoscrolling = FALSE;
+       if (view->scroll_info.timeout_id) {
+               g_source_remove (view->scroll_info.timeout_id);
+               view->scroll_info.timeout_id = 0;
+       }
+
+       gtk_widget_get_pointer (GTK_WIDGET (view), &x, &y);
+       ev_view_handle_cursor_over_xy (view, x, y);
 }
 
 void
@@ -4708,17 +4763,10 @@ ev_view_presentation_transition_start (EvView *view)
        duration = ev_document_transition_get_page_duration (EV_DOCUMENT_TRANSITION (view->document),
                                                             view->current_page);
        if (duration > 0) {
-#if GLIB_CHECK_VERSION (2, 13, 0)
                view->trans_timeout_id =
                        g_timeout_add_seconds (duration,
                                               (GSourceFunc) transition_next_page,
                                               view);
-#else
-               view->trans_timeout_id =
-                       g_timeout_add (duration * 1000,
-                                      (GSourceFunc) transition_next_page,
-                                      view);
-#endif
        }
 }