[gthumb] allow to have different window sizes for browser and viewer mode
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb] allow to have different window sizes for browser and viewer mode
- Date: Sat, 7 Aug 2010 14:26:24 +0000 (UTC)
commit fdbe31882d0d3a3c159f36291bbeb6def536f247
Author: Paolo Bacchilega <paobac src gnome org>
Date: Sat Aug 7 11:48:37 2010 +0200
allow to have different window sizes for browser and viewer mode
gthumb/gth-browser.c | 31 +++++++++++++++--
gthumb/gth-window.c | 90 ++++++++++++++++++++++++++++++++++++++++++++-----
gthumb/gth-window.h | 16 +++++++++
3 files changed, 124 insertions(+), 13 deletions(-)
---
diff --git a/gthumb/gth-browser.c b/gthumb/gth-browser.c
index 9c69f09..b4c15f4 100644
--- a/gthumb/gth-browser.c
+++ b/gthumb/gth-browser.c
@@ -1969,10 +1969,22 @@ _gth_browser_close_final_step (gpointer user_data)
maximized = (state & GDK_WINDOW_STATE_MAXIMIZED) != 0;
if (! maximized && gtk_widget_get_visible (GTK_WIDGET (browser))) {
int width, height;
+ int size_set = FALSE;
- gdk_drawable_get_size (gtk_widget_get_window (GTK_WIDGET (browser)), &width, &height);
- eel_gconf_set_integer (PREF_UI_WINDOW_WIDTH, width);
- eel_gconf_set_integer (PREF_UI_WINDOW_HEIGHT, height);
+ if (gth_window_get_current_page (GTH_WINDOW (browser)) == GTH_BROWSER_PAGE_BROWSER) {
+ gtk_window_get_size (GTK_WINDOW (browser), &width, &height);
+ size_set = TRUE;
+ }
+ else
+ size_set = gth_window_get_page_size (GTH_WINDOW (browser),
+ GTH_BROWSER_PAGE_BROWSER,
+ &width,
+ &height);
+
+ if (size_set) {
+ eel_gconf_set_integer (PREF_UI_WINDOW_WIDTH, width);
+ eel_gconf_set_integer (PREF_UI_WINDOW_HEIGHT, height);
+ }
}
gtk_widget_get_allocation (browser->priv->browser_sidebar, &allocation);
@@ -2164,6 +2176,13 @@ _gth_browser_real_set_current_page (GthWindow *window,
int page)
{
GthBrowser *browser = (GthBrowser *) window;
+ int prev_page;
+ int width;
+ int height;
+
+ prev_page = gth_window_get_current_page (window);
+ if (page == prev_page)
+ return;
GTH_WINDOW_CLASS (parent_class)->set_current_page (window, page);
@@ -2175,6 +2194,12 @@ _gth_browser_real_set_current_page (GthWindow *window,
_gth_browser_make_file_visible (browser, browser->priv->current_file);
_gth_browser_hide_infobar (browser);
+ if (prev_page >= 0) {
+ gtk_window_get_size (GTK_WINDOW (window), &width, &height);
+ gth_window_save_page_size (GTH_WINDOW (window), prev_page, width, height);
+ }
+ gth_window_apply_saved_size (GTH_WINDOW (window), page);
+
gth_hook_invoke ("gth-browser-set-current-page", browser);
gth_browser_update_title (browser);
diff --git a/gthumb/gth-window.c b/gthumb/gth-window.c
index dd9570b..c759f03 100644
--- a/gthumb/gth-window.c
+++ b/gthumb/gth-window.c
@@ -39,16 +39,17 @@ static GList *window_list = NULL;
struct _GthWindowPrivate {
- int n_pages;
- int current_page;
- GtkWidget *table;
- GtkWidget *notebook;
- GtkWidget *menubar;
- GtkWidget *toolbar;
- GtkWidget *infobar;
- GtkWidget *statusbar;
- GtkWidget **toolbars;
- GtkWidget **contents;
+ int n_pages;
+ int current_page;
+ GtkWidget *table;
+ GtkWidget *notebook;
+ GtkWidget *menubar;
+ GtkWidget *toolbar;
+ GtkWidget *infobar;
+ GtkWidget *statusbar;
+ GtkWidget **toolbars;
+ GtkWidget **contents;
+ GthWindowSize *window_size;
};
@@ -98,6 +99,10 @@ gth_window_set_n_pages (GthWindow *self,
gtk_widget_show (self->priv->contents[i]);
gtk_box_pack_start (GTK_BOX (page), self->priv->contents[i], TRUE, TRUE, 0);
}
+
+ self->priv->window_size = g_new0 (GthWindowSize, n_pages);
+ for (i = 0; i < n_pages; i++)
+ self->priv->window_size[i].saved = FALSE;
}
@@ -129,6 +134,7 @@ gth_window_finalize (GObject *object)
g_free (window->priv->toolbars);
g_free (window->priv->contents);
+ g_free (window->priv->window_size);
window_list = g_list_remove (window_list, window);
@@ -159,10 +165,19 @@ static void
gth_window_real_set_current_page (GthWindow *window,
int page)
{
+ int i;
+
if (window->priv->current_page == page)
return;
+
window->priv->current_page = page;
gtk_notebook_set_current_page (GTK_NOTEBOOK (window->priv->notebook), page);
+
+ for (i = 0; i < window->priv->n_pages; i++)
+ if (i == page)
+ gtk_widget_show (window->priv->contents[i]);
+ else
+ gtk_widget_hide (window->priv->contents[i]);
}
@@ -403,6 +418,61 @@ gth_window_get_area (GthWindow *window,
}
+void
+gth_window_save_page_size (GthWindow *window,
+ int page,
+ int width,
+ int height)
+{
+ g_return_if_fail (window != NULL);
+ g_return_if_fail (GTH_IS_WINDOW (window));
+ g_return_if_fail (page >= 0 && page < window->priv->n_pages);
+
+ window->priv->window_size[page].width = width;
+ window->priv->window_size[page].height = height;
+ window->priv->window_size[page].saved = TRUE;
+}
+
+
+void
+gth_window_apply_saved_size (GthWindow *window,
+ int page)
+{
+ g_return_if_fail (window != NULL);
+ g_return_if_fail (GTH_IS_WINDOW (window));
+ g_return_if_fail (page >= 0 && page < window->priv->n_pages);
+
+ if (! window->priv->window_size[page].saved)
+ return;
+
+ gtk_window_resize (GTK_WINDOW (window),
+ window->priv->window_size[page].width,
+ window->priv->window_size[page].height);
+}
+
+
+gboolean
+gth_window_get_page_size (GthWindow *window,
+ int page,
+ int *width,
+ int *height)
+{
+ g_return_val_if_fail (window != NULL, FALSE);
+ g_return_val_if_fail (GTH_IS_WINDOW (window), FALSE);
+ g_return_val_if_fail (page >= 0 && page < window->priv->n_pages, FALSE);
+
+ if (! window->priv->window_size[page].saved)
+ return FALSE;
+
+ if (width != NULL)
+ *width = window->priv->window_size[page].width;
+ if (height != NULL)
+ *height = window->priv->window_size[page].height;
+
+ return TRUE;
+}
+
+
int
gth_window_get_n_windows (void)
{
diff --git a/gthumb/gth-window.h b/gthumb/gth-window.h
index de6c560..d8a6d2d 100644
--- a/gthumb/gth-window.h
+++ b/gthumb/gth-window.h
@@ -34,6 +34,12 @@ typedef enum { /*< skip >*/
GTH_WINDOW_STATUSBAR,
} GthWindowArea;
+typedef struct { /*< skip >*/
+ gboolean saved;
+ int width;
+ int height;
+} GthWindowSize;
+
#define GTH_TYPE_WINDOW (gth_window_get_type ())
#define GTH_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTH_TYPE_WINDOW, GthWindow))
#define GTH_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTH_TYPE_WINDOW, GthWindowClass))
@@ -80,6 +86,16 @@ void gth_window_show_only_content (GthWindow *window,
gboolean only_content);
GtkWidget * gth_window_get_area (GthWindow *window,
GthWindowArea area);
+void gth_window_save_page_size (GthWindow *window,
+ int page,
+ int width,
+ int height);
+void gth_window_apply_saved_size (GthWindow *window,
+ int page);
+gboolean gth_window_get_page_size (GthWindow *window,
+ int page,
+ int *width,
+ int *height);
/**/
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]