[gimp/metadata-browser] app: Save the maximized state of the main window in the sessionrc file.
- From: Roman Joost <romanofski src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/metadata-browser] app: Save the maximized state of the main window in the sessionrc file.
- Date: Thu, 13 Sep 2012 00:21:15 +0000 (UTC)
commit 310ba5ff8801576c928b343c3462586989cac784
Author: Michael Henning <mikehenning eclipse net>
Date: Tue Apr 3 20:59:37 2012 -0400
app: Save the maximized state of the main window in the sessionrc file.
app/display/gimpimagewindow.c | 33 ++++++++++-
app/display/gimpimagewindow.h | 1 +
app/tests/gimpdir/sessionrc-2-8-single-window | 3 +-
app/tests/gimpdir/sessionrc-expected-single-window | 3 +-
app/tests/test-ui.c | 62 ++++++++++++++++++++
5 files changed, 98 insertions(+), 4 deletions(-)
---
diff --git a/app/display/gimpimagewindow.c b/app/display/gimpimagewindow.c
index 1619714..8021a58 100644
--- a/app/display/gimpimagewindow.c
+++ b/app/display/gimpimagewindow.c
@@ -74,6 +74,9 @@
/* GtkPaned position of the right docks area */
#define GIMP_IMAGE_WINDOW_RIGHT_DOCKS_POS "right-docks-position"
+/* Whether the window's maximized or not */
+#define GIMP_IMAGE_WINDOW_MAXIMIZED "maximized"
+
enum
{
@@ -805,8 +808,8 @@ gimp_image_window_get_aux_info (GimpSessionManaged *session_managed)
if (config->single_window_mode)
{
GimpSessionInfoAux *aux;
- char widthbuf[128];
-
+ gchar widthbuf[128];
+
g_snprintf (widthbuf, sizeof (widthbuf), "%d",
gtk_paned_get_position (GTK_PANED (private->left_hpane)));
aux = gimp_session_info_aux_new (GIMP_IMAGE_WINDOW_LEFT_DOCKS_WIDTH, widthbuf);
@@ -816,6 +819,11 @@ gimp_image_window_get_aux_info (GimpSessionManaged *session_managed)
gtk_paned_get_position (GTK_PANED (private->right_hpane)));
aux = gimp_session_info_aux_new (GIMP_IMAGE_WINDOW_RIGHT_DOCKS_POS, widthbuf);
aux_info = g_list_append (aux_info, aux);
+
+ aux = gimp_session_info_aux_new (GIMP_IMAGE_WINDOW_MAXIMIZED,
+ gimp_image_window_is_maximized (GIMP_IMAGE_WINDOW (session_managed)) ?
+ "yes" : "no");
+ aux_info = g_list_append (aux_info, aux);
}
return aux_info;
@@ -846,6 +854,7 @@ gimp_image_window_set_aux_info (GimpSessionManaged *session_managed,
gint left_docks_width = -1;
gint right_docks_pos = -1;
gboolean wait_with_right_docks = FALSE;
+ gboolean maximized = FALSE;
g_return_if_fail (GIMP_IS_IMAGE_WINDOW (session_managed));
@@ -860,6 +869,9 @@ gimp_image_window_set_aux_info (GimpSessionManaged *session_managed,
width = &left_docks_width;
else if (! strcmp (aux->name, GIMP_IMAGE_WINDOW_RIGHT_DOCKS_POS))
width = &right_docks_pos;
+ else if (! strcmp (aux->name, GIMP_IMAGE_WINDOW_MAXIMIZED))
+ if (! g_ascii_strcasecmp (aux->value, "yes"))
+ maximized = TRUE;
if (width)
sscanf (aux->value, "%d", width);
@@ -899,6 +911,11 @@ gimp_image_window_set_aux_info (GimpSessionManaged *session_managed,
right_docks_pos);
}
}
+
+ if (maximized)
+ gtk_window_maximize (GTK_WINDOW (session_managed));
+ else
+ gtk_window_unmaximize (GTK_WINDOW (session_managed));
}
@@ -1165,6 +1182,18 @@ gimp_image_window_is_iconified (GimpImageWindow *window)
return (private->window_state & GDK_WINDOW_STATE_ICONIFIED) != 0;
}
+gboolean
+gimp_image_window_is_maximized (GimpImageWindow *window)
+{
+ GimpImageWindowPrivate *private;
+
+ g_return_val_if_fail (GIMP_IS_IMAGE_WINDOW (window), FALSE);
+
+ private = GIMP_IMAGE_WINDOW_GET_PRIVATE (window);
+
+ return (private->window_state & GDK_WINDOW_STATE_MAXIMIZED) != 0;
+}
+
/**
* gimp_image_window_has_toolbox:
* @window:
diff --git a/app/display/gimpimagewindow.h b/app/display/gimpimagewindow.h
index 826d8ba..f239629 100644
--- a/app/display/gimpimagewindow.h
+++ b/app/display/gimpimagewindow.h
@@ -81,6 +81,7 @@ void gimp_image_window_set_show_statusbar (GimpImageWindow *win
gboolean gimp_image_window_get_show_statusbar (GimpImageWindow *window);
gboolean gimp_image_window_is_iconified (GimpImageWindow *window);
+gboolean gimp_image_window_is_maximized (GimpImageWindow *window);
gboolean gimp_image_window_has_toolbox (GimpImageWindow *window);
diff --git a/app/tests/gimpdir/sessionrc-2-8-single-window b/app/tests/gimpdir/sessionrc-2-8-single-window
index 772a172..a9b618e 100644
--- a/app/tests/gimpdir/sessionrc-2-8-single-window
+++ b/app/tests/gimpdir/sessionrc-2-8-single-window
@@ -23,7 +23,8 @@
(open-on-exit)
(aux-info
(left-docks-width "80")
- (right-docks-position "200"))
+ (right-docks-position "200")
+ (maximized "no"))
(gimp-toolbox
(side left))
(gimp-dock
diff --git a/app/tests/gimpdir/sessionrc-expected-single-window b/app/tests/gimpdir/sessionrc-expected-single-window
index 772a172..a9b618e 100644
--- a/app/tests/gimpdir/sessionrc-expected-single-window
+++ b/app/tests/gimpdir/sessionrc-expected-single-window
@@ -23,7 +23,8 @@
(open-on-exit)
(aux-info
(left-docks-width "80")
- (right-docks-position "200"))
+ (right-docks-position "200")
+ (maximized "no"))
(gimp-toolbox
(side left))
(gimp-dock
diff --git a/app/tests/test-ui.c b/app/tests/test-ui.c
index e6971ce..addbbc6 100644
--- a/app/tests/test-ui.c
+++ b/app/tests/test-ui.c
@@ -43,6 +43,8 @@
#include "widgets/gimpdockwindow.h"
#include "widgets/gimphelp-ids.h"
#include "widgets/gimpsessioninfo.h"
+#include "widgets/gimpsessioninfo-aux.h"
+#include "widgets/gimpsessionmanaged.h"
#include "widgets/gimptoolbox.h"
#include "widgets/gimptooloptionseditor.h"
#include "widgets/gimpuimanager.h"
@@ -89,6 +91,8 @@ static GtkWidget * gimp_ui_find_window (GimpDialogFacto
static gboolean gimp_ui_not_toolbox_window (GObject *object);
static gboolean gimp_ui_multicolumn_not_toolbox_window (GObject *object);
static gboolean gimp_ui_is_gimp_layer_list (GObject *object);
+static int gimp_ui_aux_data_eqiuvalent (gconstpointer _a,
+ gconstpointer _b);
static void gimp_ui_switch_window_mode (Gimp *gimp);
@@ -571,6 +575,55 @@ show_docks_in_single_window_mode (gconstpointer data)
}
static void
+maximize_state_in_aux_data (gconstpointer data)
+{
+ Gimp *gimp = GIMP (data);
+ GimpDisplay *display = GIMP_DISPLAY (gimp_get_display_iter (gimp)->data);
+ GimpDisplayShell *shell = gimp_display_get_shell (display);
+ GimpImageWindow *window = gimp_display_shell_get_window (shell);
+ gint i;
+
+ for (i = 0; i < 2; i++)
+ {
+ GList *aux_info = NULL;
+ GimpSessionInfoAux *target_info;
+ gboolean target_max_state;
+
+ if (i == 0)
+ {
+ target_info = gimp_session_info_aux_new ("maximized" , "yes");
+ target_max_state = TRUE;
+ }
+ else
+ {
+ target_info = gimp_session_info_aux_new ("maximized", "no");
+ target_max_state = FALSE;
+ }
+
+ /* Set the aux info to out target data */
+ aux_info = g_list_append (aux_info, target_info);
+ gimp_session_managed_set_aux_info (GIMP_SESSION_MANAGED (window), aux_info);
+ g_list_free (aux_info);
+
+ /* Give the WM a chance to maximize/unmaximize us */
+ gimp_test_run_mainloop_until_idle ();
+ g_usleep (500 * 1000);
+ gimp_test_run_mainloop_until_idle ();
+
+ /* Make sure the maximize/unmaximize happened */
+ g_assert (gimp_image_window_is_maximized (window) == target_max_state);
+
+ /* Make sure we can read out the window state again */
+ aux_info = gimp_session_managed_get_aux_info (GIMP_SESSION_MANAGED (window));
+ g_assert (g_list_find_custom (aux_info, target_info, gimp_ui_aux_data_eqiuvalent));
+ g_list_free_full (aux_info,
+ (GDestroyNotify) gimp_session_info_aux_free);
+
+ gimp_session_info_aux_free (target_info);
+ }
+}
+
+static void
switch_back_to_multi_window_mode (gconstpointer data)
{
Gimp *gimp = GIMP (data);
@@ -831,6 +884,14 @@ gimp_ui_is_gimp_layer_list (GObject *object)
return strcmp (entry->identifier, "gimp-layer-list") == 0;
}
+static int
+gimp_ui_aux_data_eqiuvalent (gconstpointer _a, gconstpointer _b)
+{
+ GimpSessionInfoAux *a = (GimpSessionInfoAux*) _a;
+ GimpSessionInfoAux *b = (GimpSessionInfoAux*) _b;
+ return (strcmp (a->name, b->name) || strcmp (a->value, b->value));
+}
+
static void
gimp_ui_switch_window_mode (Gimp *gimp)
{
@@ -875,6 +936,7 @@ int main(int argc, char **argv)
ADD_TEST (switch_to_single_window_mode);
ADD_TEST (hide_docks_in_single_window_mode);
ADD_TEST (show_docks_in_single_window_mode);
+ ADD_TEST (maximize_state_in_aux_data);
ADD_TEST (switch_back_to_multi_window_mode);
ADD_TEST (close_image);
ADD_TEST (repeatedly_switch_window_mode);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]