[gthumb] make the shrink wrap command work for the video viewer as well
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb] make the shrink wrap command work for the video viewer as well
- Date: Wed, 2 Nov 2011 19:16:18 +0000 (UTC)
commit 7a3d3d2198569d22d6759ac0d6a81f5eba309042
Author: Paolo Bacchilega <paobac src gnome org>
Date: Wed Nov 2 18:43:02 2011 +0100
make the shrink wrap command work for the video viewer as well
data/gthumb.schemas.in | 15 ++-
extensions/file_viewer/gth-file-viewer-page.c | 11 ++
extensions/gstreamer_tools/gth-media-viewer-page.c | 15 ++
.../data/gthumb-image-viewer.schemas.in | 13 --
extensions/image_viewer/gth-image-viewer-page.c | 183 ++------------------
extensions/image_viewer/gth-image-viewer-page.h | 2 -
gthumb/gth-browser-actions-callbacks.c | 8 +
gthumb/gth-browser-actions-callbacks.h | 1 +
gthumb/gth-browser-actions-entries.h | 5 +
gthumb/gth-browser-ui.h | 3 +
gthumb/gth-browser.c | 93 ++++++++++
gthumb/gth-browser.h | 2 +
gthumb/gth-preferences.h | 1 +
gthumb/gth-viewer-page.c | 11 ++
gthumb/gth-viewer-page.h | 8 +
gthumb/gtk-utils.c | 30 ++++
gthumb/gtk-utils.h | 2 +
17 files changed, 217 insertions(+), 186 deletions(-)
---
diff --git a/data/gthumb.schemas.in b/data/gthumb.schemas.in
index f2d67db..0607f18 100644
--- a/data/gthumb.schemas.in
+++ b/data/gthumb.schemas.in
@@ -238,7 +238,7 @@
<long> Possible values are: list, thumbnails.
</long>
</locale>
- </schema>
+ </schema>
<!-- Viewer -->
@@ -334,6 +334,19 @@
</locale>
</schema>
+ <schema>
+ <key>/schemas/apps/gthumb/viewer/shrink_wrap</key>
+ <applyto>/apps/gthumb/viewer/shrink_wrap</applyto>
+ <owner>gthumb</owner>
+ <type>bool</type>
+ <default>false</default>
+ <locale name="C">
+ <short></short>
+ <long> Whether to resize the window to fit the size of the image
+ </long>
+ </locale>
+ </schema>
+
<!-- UI -->
<schema>
diff --git a/extensions/file_viewer/gth-file-viewer-page.c b/extensions/file_viewer/gth-file-viewer-page.c
index 297707e..0486f5d 100644
--- a/extensions/file_viewer/gth-file-viewer-page.c
+++ b/extensions/file_viewer/gth-file-viewer-page.c
@@ -322,6 +322,16 @@ gth_file_viewer_page_real_update_info (GthViewerPage *base,
static void
+gth_file_viewer_page_real_shrink_wrap (GthViewerPage *base,
+ gboolean value,
+ int *other_width,
+ int *other_height)
+{
+ /* void */
+}
+
+
+static void
gth_file_viewer_page_finalize (GObject *obj)
{
GthFileViewerPage *self;
@@ -358,6 +368,7 @@ gth_viewer_page_interface_init (GthViewerPageInterface *iface)
iface->update_sensitivity = gth_file_viewer_page_real_update_sensitivity;
iface->can_save = gth_file_viewer_page_real_can_save;
iface->update_info = gth_file_viewer_page_real_update_info;
+ iface->shrink_wrap = gth_file_viewer_page_real_shrink_wrap;
}
diff --git a/extensions/gstreamer_tools/gth-media-viewer-page.c b/extensions/gstreamer_tools/gth-media-viewer-page.c
index d8d6e89..7505b46 100644
--- a/extensions/gstreamer_tools/gth-media-viewer-page.c
+++ b/extensions/gstreamer_tools/gth-media-viewer-page.c
@@ -1282,6 +1282,20 @@ gth_media_viewer_page_real_update_info (GthViewerPage *base,
static void
+gth_media_viewer_page_real_shrink_wrap (GthViewerPage *base,
+ gboolean value,
+ int *other_width,
+ int *other_height)
+{
+ GthMediaViewerPage *self = GTH_MEDIA_VIEWER_PAGE (base);
+
+ if (! value || (other_width == NULL) || (other_height == NULL))
+ return;
+ *other_height += _gtk_widget_get_allocated_height (self->priv->mediabar);
+}
+
+
+static void
gth_media_viewer_page_finalize (GObject *obj)
{
GthMediaViewerPage *self;
@@ -1336,6 +1350,7 @@ gth_viewer_page_interface_init (GthViewerPageInterface *iface)
iface->save_as = gth_media_viewer_page_real_save_as;
iface->revert = gth_media_viewer_page_real_revert;
iface->update_info = gth_media_viewer_page_real_update_info;
+ iface->shrink_wrap = gth_media_viewer_page_real_shrink_wrap;
}
diff --git a/extensions/image_viewer/data/gthumb-image-viewer.schemas.in b/extensions/image_viewer/data/gthumb-image-viewer.schemas.in
index 30d2222..4f7fd33 100644
--- a/extensions/image_viewer/data/gthumb-image-viewer.schemas.in
+++ b/extensions/image_viewer/data/gthumb-image-viewer.schemas.in
@@ -93,18 +93,5 @@
</locale>
</schema>
- <schema>
- <key>/schemas/apps/gthumb/viewer/shrink_wrap</key>
- <applyto>/apps/gthumb/viewer/shrink_wrap</applyto>
- <owner>gthumb</owner>
- <type>bool</type>
- <default>false</default>
- <locale name="C">
- <short></short>
- <long> Whether to resize the window to fit the size of the image
- </long>
- </locale>
- </schema>
-
</schemalist>
</gconfschemafile>
diff --git a/extensions/image_viewer/gth-image-viewer-page.c b/extensions/image_viewer/gth-image-viewer-page.c
index 002b6bc..8ac4ecd 100644
--- a/extensions/image_viewer/gth-image-viewer-page.c
+++ b/extensions/image_viewer/gth-image-viewer-page.c
@@ -27,7 +27,7 @@
#include "preferences.h"
-#define GCONF_NOTIFICATIONS 8
+#define GCONF_NOTIFICATIONS 7
static void gth_viewer_page_interface_init (GthViewerPageInterface *iface);
@@ -55,7 +55,6 @@ struct _GthImageViewerPagePrivate {
guint hide_mouse_timeout;
guint motion_signal;
gboolean image_changed;
- gboolean shrink_wrap;
GFile *last_loaded;
gboolean can_paste;
};
@@ -73,11 +72,6 @@ static const char *image_viewer_ui_info =
" <menuitem action='ImageViewer_Edit_Paste_Image'/>"
" </placeholder>"
" </menu>"
-" <menu name='View' action='ViewMenu'>"
-" <placeholder name='View_Actions'>"
-" <menuitem action='ImageViewer_View_ShrinkWrap'/>"
-" </placeholder>"
-" </menu>"
" </menubar>"
" <toolbar name='ViewerToolBar'>"
" <placeholder name='ViewerCommands'>"
@@ -178,14 +172,6 @@ image_viewer_activate_action_edit_paste_image (GtkAction *action,
}
-static void
-image_viewer_activate_action_view_shrink_wrap (GtkAction *action,
- GthImageViewerPage *self)
-{
- eel_gconf_set_boolean (PREF_VIEWER_SHRINK_WRAP, gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)));
-}
-
-
static GtkActionEntry image_viewer_action_entries[] = {
{ "ImageViewer_Edit_Undo", GTK_STOCK_UNDO,
NULL, "<control>z",
@@ -234,15 +220,6 @@ static GtkActionEntry image_viewer_action_entries[] = {
};
-static GtkToggleActionEntry image_viewer_toggle_action_entries[] = {
- { "ImageViewer_View_ShrinkWrap", NULL,
- N_("_Fit Window to Image"), "<control>e",
- N_("Resize the window to the size of the image"),
- G_CALLBACK (image_viewer_activate_action_view_shrink_wrap),
- FALSE }
-};
-
-
static void
gth_image_viewer_page_file_loaded (GthImageViewerPage *self,
gboolean success)
@@ -435,8 +412,6 @@ image_preloader_requested_ready_cb (GthImagePreloader *preloader,
original_width,
original_height);
- if (self->priv->shrink_wrap)
- gth_image_viewer_page_shrink_wrap (self, TRUE);
gth_image_history_clear (self->priv->history);
gth_image_history_add_image (self->priv->history,
gth_image_viewer_get_current_image (GTH_IMAGE_VIEWER (self->priv->viewer)),
@@ -562,18 +537,6 @@ pref_reset_scrollbars_changed (GConfClient *client,
static void
-pref_viewer_shrink_wrap_changed (GConfClient *client,
- guint cnxn_id,
- GConfEntry *entry,
- gpointer user_data)
-{
- GthImageViewerPage *self = user_data;
-
- gth_image_viewer_page_shrink_wrap (self, eel_gconf_get_boolean (PREF_VIEWER_SHRINK_WRAP, FALSE));
-}
-
-
-static void
paint_comment_over_image_func (GthImageViewer *image_viewer,
cairo_t *cr,
gpointer user_data)
@@ -724,7 +687,6 @@ gth_image_viewer_page_real_activate (GthViewerPage *base,
GthBrowser *browser)
{
GthImageViewerPage *self;
- GtkAction *action;
int i;
self = (GthImageViewerPage*) base;
@@ -737,10 +699,6 @@ gth_image_viewer_page_real_activate (GthViewerPage *base,
image_viewer_action_entries,
G_N_ELEMENTS (image_viewer_action_entries),
self);
- gtk_action_group_add_toggle_actions (self->priv->actions,
- image_viewer_toggle_action_entries,
- G_N_ELEMENTS (image_viewer_toggle_action_entries),
- self);
gtk_ui_manager_insert_action_group (gth_browser_get_ui_manager (browser), self->priv->actions, 0);
self->priv->preloader = gth_browser_get_image_preloader (browser);
@@ -762,11 +720,6 @@ gth_image_viewer_page_real_activate (GthViewerPage *base,
gth_image_viewer_set_black_background (GTH_IMAGE_VIEWER (self->priv->viewer), eel_gconf_get_boolean (PREF_BLACK_BACKGROUND, FALSE));
gth_image_viewer_set_reset_scrollbars (GTH_IMAGE_VIEWER (self->priv->viewer), eel_gconf_get_boolean (PREF_RESET_SCROLLBARS, TRUE));
- self->priv->shrink_wrap = eel_gconf_get_boolean (PREF_VIEWER_SHRINK_WRAP, FALSE);
- action = gtk_action_group_get_action (self->priv->actions, "ImageViewer_View_ShrinkWrap");
- if (action != NULL)
- g_object_set (action, "active", self->priv->shrink_wrap, NULL);
-
gtk_widget_show (self->priv->viewer);
g_signal_connect (G_OBJECT (self->priv->viewer),
@@ -848,11 +801,6 @@ gth_image_viewer_page_real_activate (GthViewerPage *base,
PREF_RESET_SCROLLBARS,
pref_reset_scrollbars_changed,
self);
-
- self->priv->cnxn_id[i++] = eel_gconf_notification_add (
- PREF_VIEWER_SHRINK_WRAP,
- pref_viewer_shrink_wrap_changed,
- self);
}
@@ -1375,6 +1323,17 @@ gth_image_viewer_page_real_show_properties (GthViewerPage *base,
static void
+gth_image_viewer_page_real_shrink_wrap (GthViewerPage *base,
+ gboolean activate,
+ int *other_width,
+ int *other_height)
+{
+ GthImageViewerPage *self = GTH_IMAGE_VIEWER_PAGE (base);
+ gth_image_viewer_set_fit_mode (GTH_IMAGE_VIEWER (self->priv->viewer), GTH_FIT_SIZE_IF_LARGER);
+}
+
+
+static void
gth_image_viewer_page_finalize (GObject *obj)
{
GthImageViewerPage *self;
@@ -1417,6 +1376,7 @@ gth_viewer_page_interface_init (GthViewerPageInterface *iface)
iface->revert = gth_image_viewer_page_real_revert;
iface->update_info = gth_image_viewer_page_real_update_info;
iface->show_properties = gth_image_viewer_page_real_show_properties;
+ iface->shrink_wrap = gth_image_viewer_page_real_shrink_wrap;
}
@@ -1425,7 +1385,6 @@ gth_image_viewer_page_init (GthImageViewerPage *self)
{
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_IMAGE_VIEWER_PAGE, GthImageViewerPagePrivate);
self->priv->history = gth_image_history_new ();
- self->priv->shrink_wrap = FALSE;
self->priv->last_loaded = NULL;
self->priv->image_changed = FALSE;
self->priv->can_paste = FALSE;
@@ -1523,122 +1482,6 @@ gth_image_viewer_page_reset (GthImageViewerPage *self)
}
-static int
-add_non_content_width (GthImageViewerPage *self,
- GtkWidget *non_content)
-{
- int width = 0;
-
- if ((non_content != NULL) && gtk_widget_get_mapped (non_content)) {
- GtkAllocation allocation;
-
- gtk_widget_get_allocation (non_content, &allocation);
- width = allocation.width;
- }
-
- return width;
-}
-
-
-static int
-add_non_content_height (GthImageViewerPage *self,
- GtkWidget *non_content)
-{
- int height = 0;
-
- if ((non_content != NULL) && gtk_widget_get_mapped (non_content)) {
- GtkAllocation allocation;
-
- gtk_widget_get_allocation (non_content, &allocation);
- height = allocation.height;
- }
-
- return height;
-}
-
-
-void
-gth_image_viewer_page_shrink_wrap (GthImageViewerPage *self,
- gboolean activate)
-{
- GthFileData *file_data;
- int width;
- int height;
- double ratio;
- int other_width;
- int other_height;
- GdkScreen *screen;
- int max_width;
- int max_height;
-
- self->priv->shrink_wrap = activate;
- if (! self->priv->shrink_wrap) {
- int width;
- int height;
-
- if (gth_window_get_page_size (GTH_WINDOW (self->priv->browser),
- GTH_BROWSER_PAGE_BROWSER,
- &width,
- &height))
- {
- gth_window_save_page_size (GTH_WINDOW (self->priv->browser), GTH_BROWSER_PAGE_VIEWER, width, height);
- gth_window_apply_saved_size (GTH_WINDOW (self->priv->browser), GTH_BROWSER_PAGE_VIEWER);
- }
- else
- gth_window_clear_saved_size (GTH_WINDOW (self->priv->browser), GTH_BROWSER_PAGE_VIEWER);
- gth_image_viewer_set_fit_mode (GTH_IMAGE_VIEWER (self->priv->viewer), GTH_FIT_SIZE_IF_LARGER);
-
- return;
- }
-
- file_data = gth_browser_get_current_file (self->priv->browser);
- if (file_data == NULL)
- return;
-
- gth_image_viewer_get_original_size (GTH_IMAGE_VIEWER (self->priv->viewer), &width, &height);
- if ((width <= 0) || (height <= 0))
- return;
-
- ratio = (double) width / height;
-
- other_width = 0;
- other_height = 0;
- other_height += add_non_content_height (self, gth_window_get_area (GTH_WINDOW (self->priv->browser), GTH_WINDOW_MENUBAR));
- other_height += add_non_content_height (self, gth_window_get_area (GTH_WINDOW (self->priv->browser), GTH_WINDOW_TOOLBAR));
- other_height += add_non_content_height (self, gth_window_get_area (GTH_WINDOW (self->priv->browser), GTH_WINDOW_STATUSBAR));
- other_height += add_non_content_height (self, gth_browser_get_viewer_toolbar (self->priv->browser));
- if (eel_gconf_get_enum (PREF_UI_VIEWER_THUMBNAILS_ORIENT, GTK_TYPE_ORIENTATION, GTK_ORIENTATION_HORIZONTAL) == GTK_ORIENTATION_HORIZONTAL)
- other_height += add_non_content_height (self, gth_browser_get_thumbnail_list (self->priv->browser));
- else
- other_width += add_non_content_width (self, gth_browser_get_thumbnail_list (self->priv->browser));
- other_width += add_non_content_width (self, gth_browser_get_viewer_sidebar (self->priv->browser));
- other_width += 2;
- other_height += 2;
-
- screen = gtk_widget_get_screen (GTK_WIDGET (self->priv->browser));
- max_width = round ((double) gdk_screen_get_width (screen) * 8.5 / 10.0);
- max_height = round ((double) gdk_screen_get_height (screen) * 8.5 / 10.0);
-
- if (width + other_width > max_width) {
- width = max_width - other_width;
- height = width / ratio;
- }
-
- if (height + other_height > max_height) {
- height = max_height - other_height;
- width = height * ratio;
- }
-
- gth_window_save_page_size (GTH_WINDOW (self->priv->browser),
- GTH_BROWSER_PAGE_VIEWER,
- width + other_width,
- height + other_height);
- if (gth_window_get_current_page (GTH_WINDOW (self->priv->browser)) == GTH_BROWSER_PAGE_VIEWER)
- gth_window_apply_saved_size (GTH_WINDOW (self->priv->browser), GTH_BROWSER_PAGE_VIEWER);
- gth_image_viewer_set_fit_mode (GTH_IMAGE_VIEWER (self->priv->viewer), GTH_FIT_SIZE_IF_LARGER);
-}
-
-
void
gth_image_viewer_page_copy_image (GthImageViewerPage *self)
{
diff --git a/extensions/image_viewer/gth-image-viewer-page.h b/extensions/image_viewer/gth-image-viewer-page.h
index 56cd5f5..add929c 100644
--- a/extensions/image_viewer/gth-image-viewer-page.h
+++ b/extensions/image_viewer/gth-image-viewer-page.h
@@ -60,8 +60,6 @@ void gth_image_viewer_page_undo (GthImageViewerPage *
void gth_image_viewer_page_redo (GthImageViewerPage *page);
GthImageHistory * gth_image_viewer_page_get_history (GthImageViewerPage *self);
void gth_image_viewer_page_reset (GthImageViewerPage *self);
-void gth_image_viewer_page_shrink_wrap (GthImageViewerPage *self,
- gboolean activate);
void gth_image_viewer_page_copy_image (GthImageViewerPage *self);
void gth_image_viewer_page_paste_image (GthImageViewerPage *self);
diff --git a/gthumb/gth-browser-actions-callbacks.c b/gthumb/gth-browser-actions-callbacks.c
index d216c65..79408aa 100644
--- a/gthumb/gth-browser-actions-callbacks.c
+++ b/gthumb/gth-browser-actions-callbacks.c
@@ -333,6 +333,14 @@ gth_browser_activate_action_viewer_tools (GtkAction *action,
void
+gth_browser_activate_action_view_shrink_wrap (GtkAction *action,
+ GthBrowser *browser)
+{
+ gth_browser_set_shrink_wrap_viewer (GTH_BROWSER (browser), gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)));
+}
+
+
+void
gth_browser_activate_action_edit_select_all (GtkAction *action,
GthBrowser *browser)
{
diff --git a/gthumb/gth-browser-actions-callbacks.h b/gthumb/gth-browser-actions-callbacks.h
index f362937..5b61549 100644
--- a/gthumb/gth-browser-actions-callbacks.h
+++ b/gthumb/gth-browser-actions-callbacks.h
@@ -64,5 +64,6 @@ DEFINE_ACTION(gth_browser_activate_action_view_next)
DEFINE_ACTION(gth_browser_activate_action_view_prev)
DEFINE_ACTION(gth_browser_activate_action_viewer_properties)
DEFINE_ACTION(gth_browser_activate_action_viewer_tools)
+DEFINE_ACTION(gth_browser_activate_action_view_shrink_wrap)
#endif /* GTH_BROWSER_ACTIONS_CALLBACK_H */
diff --git a/gthumb/gth-browser-actions-entries.h b/gthumb/gth-browser-actions-entries.h
index 40189c4..a3e79ec 100644
--- a/gthumb/gth-browser-actions-entries.h
+++ b/gthumb/gth-browser-actions-entries.h
@@ -241,6 +241,11 @@ static GtkToggleActionEntry gth_browser_action_toggle_entries[] = {
N_("Edit file"),
G_CALLBACK (gth_browser_activate_action_viewer_tools),
FALSE },
+ { "View_ShrinkWrap", NULL,
+ N_("_Fit Window to Image"), "<control>e",
+ N_("Resize the window to the size of the image"),
+ G_CALLBACK (gth_browser_activate_action_view_shrink_wrap),
+ FALSE },
};
#endif /* GTH_BROWSER_ACTION_ENTRIES_H */
diff --git a/gthumb/gth-browser-ui.h b/gthumb/gth-browser-ui.h
index 4e39305..1a5e919 100644
--- a/gthumb/gth-browser-ui.h
+++ b/gthumb/gth-browser-ui.h
@@ -242,6 +242,9 @@ static const char *viewer_ui_info =
" <placeholder name='View_Bars'>"
" <menuitem action='View_Thumbnail_List'/>"
" </placeholder>"
+" <placeholder name='View_Actions'>"
+" <menuitem action='View_ShrinkWrap'/>"
+" </placeholder>"
" <placeholder name='Folder_Actions'>"
" <menuitem action='View_BrowserMode'/>"
" </placeholder>"
diff --git a/gthumb/gth-browser.c b/gthumb/gth-browser.c
index 5f09394..6cfc80b 100644
--- a/gthumb/gth-browser.c
+++ b/gthumb/gth-browser.c
@@ -20,6 +20,7 @@
*/
#include <config.h>
+#include <math.h>
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#include "dlg-personalize-filters.h"
@@ -166,6 +167,7 @@ struct _GthBrowserPrivate {
gboolean properties_on_screen;
char *location_free_space;
gboolean recalc_location_free_space;
+ gboolean shrink_wrap_viewer;
/* fulscreen */
@@ -4115,6 +4117,7 @@ gth_browser_init (GthBrowser *browser)
browser->priv->back_history_menu = NULL;
browser->priv->forward_history_menu = NULL;
browser->priv->go_parent_menu = NULL;
+ browser->priv->shrink_wrap_viewer = FALSE;
{
int width;
@@ -4530,6 +4533,9 @@ gth_browser_init (GthBrowser *browser)
browser->priv->show_hidden_files = eel_gconf_get_boolean (PREF_SHOW_HIDDEN_FILES, FALSE);
_gth_browser_set_action_active (browser, "View_ShowHiddenFiles", browser->priv->show_hidden_files);
+ browser->priv->shrink_wrap_viewer = eel_gconf_get_boolean (PREF_SHRINK_WRAP_VIEWER, FALSE);
+ _gth_browser_set_action_active (browser, "View_ShrinkWrap", browser->priv->shrink_wrap_viewer);
+
browser->priv->fast_file_type = eel_gconf_get_boolean (PREF_FAST_FILE_TYPE, TRUE);
gth_hook_invoke ("gth-browser-construct", browser);
@@ -5453,6 +5459,9 @@ file_metadata_ready_cb (GList *files,
g_file_info_copy_into (file_data->info, browser->priv->current_file->info);
g_file_info_set_attribute_boolean (browser->priv->current_file->info, "gth::file::is-modified", FALSE);
+ if (browser->priv->shrink_wrap_viewer)
+ gth_browser_set_shrink_wrap_viewer (browser, TRUE);
+
if ((gth_window_get_current_page (GTH_WINDOW (browser)) == GTH_BROWSER_PAGE_BROWSER)
&& ! gtk_widget_get_visible (browser->priv->file_properties))
{
@@ -5729,6 +5738,90 @@ gth_browser_show_viewer_tools (GthBrowser *browser,
}
+void
+gth_browser_set_shrink_wrap_viewer (GthBrowser *browser,
+ gboolean value)
+{
+ int width;
+ int height;
+ double ratio;
+ int other_width;
+ int other_height;
+ GdkScreen *screen;
+ int max_width;
+ int max_height;
+
+ browser->priv->shrink_wrap_viewer = value;
+ eel_gconf_set_boolean (PREF_SHRINK_WRAP_VIEWER, browser->priv->shrink_wrap_viewer);
+
+ if (browser->priv->viewer_page == NULL)
+ return;
+
+ if (! browser->priv->shrink_wrap_viewer) {
+ if (gth_window_get_page_size (GTH_WINDOW (browser),
+ GTH_BROWSER_PAGE_BROWSER,
+ &width,
+ &height))
+ {
+ gth_window_save_page_size (GTH_WINDOW (browser), GTH_BROWSER_PAGE_VIEWER, width, height);
+ gth_window_apply_saved_size (GTH_WINDOW (browser), GTH_BROWSER_PAGE_VIEWER);
+ }
+ else
+ gth_window_clear_saved_size (GTH_WINDOW (browser), GTH_BROWSER_PAGE_VIEWER);
+ gth_viewer_page_shrink_wrap (browser->priv->viewer_page, FALSE, NULL, NULL);
+
+ return;
+ }
+
+ if (browser->priv->current_file == NULL)
+ return;
+
+ width = g_file_info_get_attribute_int32 (browser->priv->current_file->info, "frame::width");
+ height = g_file_info_get_attribute_int32 (browser->priv->current_file->info, "frame::height");
+ if ((width <= 0) || (height <= 0))
+ return;
+
+ ratio = (double) width / height;
+
+ other_width = 0;
+ other_height = 0;
+ other_height += _gtk_widget_get_allocated_height (gth_window_get_area (GTH_WINDOW (browser), GTH_WINDOW_MENUBAR));
+ other_height += _gtk_widget_get_allocated_height (gth_window_get_area (GTH_WINDOW (browser), GTH_WINDOW_TOOLBAR));
+ other_height += _gtk_widget_get_allocated_height (gth_window_get_area (GTH_WINDOW (browser), GTH_WINDOW_STATUSBAR));
+ other_height += _gtk_widget_get_allocated_height (gth_browser_get_viewer_toolbar (browser));
+ if (eel_gconf_get_enum (PREF_UI_VIEWER_THUMBNAILS_ORIENT, GTK_TYPE_ORIENTATION, GTK_ORIENTATION_HORIZONTAL) == GTK_ORIENTATION_HORIZONTAL)
+ other_height += _gtk_widget_get_allocated_height (gth_browser_get_thumbnail_list (browser));
+ else
+ other_width += _gtk_widget_get_allocated_width (gth_browser_get_thumbnail_list (browser));
+ other_width += _gtk_widget_get_allocated_width (gth_browser_get_viewer_sidebar (browser));
+ other_width += 2;
+ other_height += 2;
+
+ gth_viewer_page_shrink_wrap (browser->priv->viewer_page, TRUE, &other_width, &other_height);
+
+ screen = gtk_widget_get_screen (GTK_WIDGET (browser));
+ max_width = round ((double) gdk_screen_get_width (screen) * 8.5 / 10.0);
+ max_height = round ((double) gdk_screen_get_height (screen) * 8.5 / 10.0);
+
+ if (width + other_width > max_width) {
+ width = max_width - other_width;
+ height = width / ratio;
+ }
+
+ if (height + other_height > max_height) {
+ height = max_height - other_height;
+ width = height * ratio;
+ }
+
+ gth_window_save_page_size (GTH_WINDOW (browser),
+ GTH_BROWSER_PAGE_VIEWER,
+ width + other_width,
+ height + other_height);
+ if (gth_window_get_current_page (GTH_WINDOW (browser)) == GTH_BROWSER_PAGE_VIEWER)
+ gth_window_apply_saved_size (GTH_WINDOW (browser), GTH_BROWSER_PAGE_VIEWER);
+}
+
+
/* -- gth_browser_load_location -- */
diff --git a/gthumb/gth-browser.h b/gthumb/gth-browser.h
index dbb86db..2dc86a5 100644
--- a/gthumb/gth-browser.h
+++ b/gthumb/gth-browser.h
@@ -163,6 +163,8 @@ void gth_browser_show_viewer_properties (GthBrowser *browser,
gboolean show);
void gth_browser_show_viewer_tools (GthBrowser *browser,
gboolean show);
+void gth_browser_set_shrink_wrap_viewer (GthBrowser *browser,
+ gboolean value);
void gth_browser_load_location (GthBrowser *browser,
GFile *location);
void gth_browser_enable_thumbnails (GthBrowser *browser,
diff --git a/gthumb/gth-preferences.h b/gthumb/gth-preferences.h
index 338827c..aa76048 100644
--- a/gthumb/gth-preferences.h
+++ b/gthumb/gth-preferences.h
@@ -59,6 +59,7 @@ G_BEGIN_DECLS
#define PREF_CHECK_TYPE "/apps/gthumb/viewer/check_type"
#define PREF_CHECK_SIZE "/apps/gthumb/viewer/check_size"
#define PREF_BLACK_BACKGROUND "/apps/gthumb/viewer/black_background"
+#define PREF_SHRINK_WRAP_VIEWER "/apps/gthumb/viewer/shrink_wrap"
#define PREF_UI_TOOLBAR_STYLE "/apps/gthumb/ui/toolbar_style"
#define PREF_UI_WINDOW_WIDTH "/apps/gthumb/ui/window_width"
diff --git a/gthumb/gth-viewer-page.c b/gthumb/gth-viewer-page.c
index 0dfb828..0c5c5a0 100644
--- a/gthumb/gth-viewer-page.c
+++ b/gthumb/gth-viewer-page.c
@@ -191,6 +191,17 @@ gth_viewer_page_show_properties (GthViewerPage *self,
void
+gth_viewer_page_shrink_wrap (GthViewerPage *self,
+ gboolean value,
+ int *other_width,
+ int *other_height)
+{
+ if (GTH_VIEWER_PAGE_GET_INTERFACE (self)->shrink_wrap != NULL)
+ GTH_VIEWER_PAGE_GET_INTERFACE (self)->shrink_wrap (self, value, other_width, other_height);
+}
+
+
+void
gth_viewer_page_file_loaded (GthViewerPage *self,
GthFileData *file_data,
gboolean success)
diff --git a/gthumb/gth-viewer-page.h b/gthumb/gth-viewer-page.h
index 9e912ab..121fa1f 100644
--- a/gthumb/gth-viewer-page.h
+++ b/gthumb/gth-viewer-page.h
@@ -74,6 +74,10 @@ struct _GthViewerPageInterface {
GthFileData *file_data);
void (*show_properties) (GthViewerPage *self,
gboolean show);
+ void (*shrink_wrap) (GthViewerPage *self,
+ gboolean show,
+ int *other_width,
+ int *other_height);
/*< signals >*/
@@ -111,6 +115,10 @@ void gth_viewer_page_update_info (GthViewerPage *self,
GthFileData *file_data);
void gth_viewer_page_show_properties (GthViewerPage *self,
gboolean show);
+void gth_viewer_page_shrink_wrap (GthViewerPage *self,
+ gboolean show,
+ int *other_width,
+ int *other_height);
void gth_viewer_page_file_loaded (GthViewerPage *self,
GthFileData *file_data,
gboolean success);
diff --git a/gthumb/gtk-utils.c b/gthumb/gtk-utils.c
index 19338c5..6ce99b1 100644
--- a/gthumb/gtk-utils.c
+++ b/gthumb/gtk-utils.c
@@ -964,6 +964,36 @@ _gtk_widget_get_screen_size (GtkWidget *widget,
}
+int
+_gtk_widget_get_allocated_width (GtkWidget *widget)
+{
+ int width = 0;
+
+ if ((widget != NULL) && gtk_widget_get_mapped (widget)) {
+ width = gtk_widget_get_allocated_width (widget);
+ width += gtk_widget_get_margin_left (widget);
+ width += gtk_widget_get_margin_right (widget);
+ }
+
+ return width;
+}
+
+
+int
+_gtk_widget_get_allocated_height (GtkWidget *widget)
+{
+ int height = 0;
+
+ if ((widget != NULL) && gtk_widget_get_mapped (widget)) {
+ height = gtk_widget_get_allocated_height (widget);
+ height += gtk_widget_get_margin_top (widget);
+ height += gtk_widget_get_margin_bottom (widget);
+ }
+
+ return height;
+}
+
+
void
_gtk_tree_path_list_free (GList *list)
{
diff --git a/gthumb/gtk-utils.h b/gthumb/gtk-utils.h
index 73041ea..3cffc2b 100644
--- a/gthumb/gtk-utils.h
+++ b/gthumb/gtk-utils.h
@@ -125,6 +125,8 @@ GtkWidget * _gtk_image_new_from_inline (const guint8 *da
void _gtk_widget_get_screen_size (GtkWidget *widget,
int *width,
int *height);
+int _gtk_widget_get_allocated_width (GtkWidget *widget);
+int _gtk_widget_get_allocated_height (GtkWidget *widget);
void _gtk_tree_path_list_free (GList *list);
int _gtk_paned_get_position2 (GtkPaned *paned);
void _gtk_paned_set_position2 (GtkPaned *paned,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]