static EogWindow * eog_application_get_file_window (EogApplication *application, GFile *file) { EogWindow *file_window = NULL; GList *windows; GList *l; g_return_val_if_fail (file != NULL, NULL); g_return_val_if_fail (EOG_IS_APPLICATION (application), NULL); windows = gtk_window_list_toplevels (); for (l = windows; l != NULL; l = l->next) { if (EOG_IS_WINDOW (l->data)) { EogWindow *window = EOG_WINDOW (l->data); if (!eog_window_is_empty (window)) { EogImage *image = eog_window_get_image (window); GFile *window_file; window_file = eog_image_get_file (image); if (g_file_equal (window_file, file)) { file_window = window; break; } } } } g_list_free (windows); return file_window; }
static void fit_to_width_cb (GSimpleAction *simple, GVariant *parameter, gpointer user_data) { EogWindow *window; GtkWidget *view; EogImage *image; gint image_width; gint image_height; gint view_width; double zoom; GtkAllocation allocation; g_return_if_fail (EOG_IS_WINDOW (user_data)); window = EOG_WINDOW (user_data); view = eog_window_get_view (window); image = eog_window_get_image (window); g_return_if_fail (EOG_IS_SCROLL_VIEW (view)); g_return_if_fail (EOG_IS_IMAGE (image)); eog_image_get_size (image, &image_width, &image_height); gtk_widget_get_allocation (view, &allocation); view_width = allocation.width; // HACK: It's necessary subtract the width size (15) of vscrollbar // to scrollview for obtain the display area. zoom = (double) (view_width - 15) / image_width; eog_scroll_view_set_zoom (EOG_SCROLL_VIEW (view), zoom); }