]> spindle.queued.net Git - midori/commitdiff
Remember the last window state, ie. whether Midori was maximized or minimized
authorChristian Dywan <christian@twotoasts.de>
Tue, 20 Jan 2009 22:27:19 +0000 (23:27 +0100)
committerChristian Dywan <christian@twotoasts.de>
Tue, 20 Jan 2009 22:27:19 +0000 (23:27 +0100)
midori/midori-browser.c
midori/midori-websettings.c
midori/midori-websettings.h

index e8c215e65e3f6f95433ec18a08e521b8e82298dc..222101e8a5e17f033817ba0853685d9c44ff6b16 100644 (file)
@@ -3436,6 +3436,15 @@ static void
 midori_browser_window_state_event_cb (MidoriBrowser*       browser,
                                       GdkEventWindowState* event)
 {
+    MidoriWindowState window_state = MIDORI_WINDOW_NORMAL;
+    if (event->new_window_state & GDK_WINDOW_STATE_ICONIFIED)
+        window_state = MIDORI_WINDOW_MINIMIZED;
+    else if (event->new_window_state & GDK_WINDOW_STATE_MAXIMIZED)
+        window_state = MIDORI_WINDOW_MAXIMIZED;
+    else if (event->new_window_state & GDK_WINDOW_STATE_FULLSCREEN)
+        window_state = MIDORI_WINDOW_FULLSCREEN;
+    g_object_set (browser->settings, "last-window-state", window_state, NULL);
+
     if (event->changed_mask & GDK_WINDOW_STATE_FULLSCREEN)
     {
         if (event->new_window_state & GDK_WINDOW_STATE_FULLSCREEN)
@@ -4379,6 +4388,7 @@ _midori_browser_update_settings (MidoriBrowser* browser)
 {
     gboolean remember_last_window_size;
     gint last_window_width, last_window_height;
+    MidoriWindowState last_window_state;
     gboolean compact_sidepanel;
     gint last_panel_position, last_panel_page;
     gboolean show_menubar, show_navigationbar, show_bookmarkbar;
@@ -4395,6 +4405,7 @@ _midori_browser_update_settings (MidoriBrowser* browser)
                   "remember-last-window-size", &remember_last_window_size,
                   "last-window-width", &last_window_width,
                   "last-window-height", &last_window_height,
+                  "last-window-state", &last_window_state,
                   "compact-sidepanel", &compact_sidepanel,
                   "last-panel-position", &last_panel_position,
                   "last-panel-page", &last_panel_page,
@@ -4421,6 +4432,20 @@ _midori_browser_update_settings (MidoriBrowser* browser)
         else
             gtk_window_set_default_size (GTK_WINDOW (browser),
                                          default_width, default_height);
+        switch (last_window_state)
+        {
+            case MIDORI_WINDOW_MINIMIZED:
+                gtk_window_iconify (GTK_WINDOW (browser));
+                break;
+            case MIDORI_WINDOW_MAXIMIZED:
+                gtk_window_maximize (GTK_WINDOW (browser));
+                break;
+            case MIDORI_WINDOW_FULLSCREEN:
+                gtk_window_fullscreen (GTK_WINDOW (browser));
+                break;
+            default:
+                ;/* Do nothing. */
+        }
     }
 
     _midori_browser_set_toolbar_style (browser, toolbar_style);
index 1ddf110a914684c312fcb0bd499f6a094244cfed..fadfe88a3eeb76aa936c4114ac2116a5b4738f78 100644 (file)
@@ -1,5 +1,5 @@
 /*
- Copyright (C) 2008 Christian Dywan <christian@twotoasts.de>
+ Copyright (C) 2008-2009 Christian Dywan <christian@twotoasts.de>
 
  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
@@ -27,6 +27,7 @@ struct _MidoriWebSettings
     gboolean remember_last_window_size;
     gint last_window_width;
     gint last_window_height;
+    MidoriWindowState last_window_state;
     gint last_panel_position;
     gint last_panel_page;
     gint last_web_search;
@@ -89,6 +90,7 @@ enum
     PROP_REMEMBER_LAST_WINDOW_SIZE,
     PROP_LAST_WINDOW_WIDTH,
     PROP_LAST_WINDOW_HEIGHT,
+    PROP_LAST_WINDOW_STATE,
     PROP_LAST_PANEL_POSITION,
     PROP_LAST_PANEL_PAGE,
     PROP_LAST_WEB_SEARCH,
@@ -139,6 +141,24 @@ enum
     PROP_CACHE_SIZE
 };
 
+GType
+midori_window_state_get_type (void)
+{
+    static GType type = 0;
+    if (!type)
+    {
+        static const GEnumValue values[] = {
+         { MIDORI_WINDOW_NORMAL, "MIDORI_WINDOW_NORMAL", "Normal" },
+         { MIDORI_WINDOW_MINIMIZED, "MIDORI_WINDOW_MINIMIZED", "Minimized" },
+         { MIDORI_WINDOW_MAXIMIZED, "MIDORI_WINDOW_MAXIMIZED", "Maximized" },
+         { MIDORI_WINDOW_FULLSCREEN, "MIDORI_WINDOW_FULLSCREEN", "Fullscreen" },
+         { 0, NULL, NULL }
+        };
+        type = g_enum_register_static ("MidoriWindowState", values);
+    }
+    return type;
+}
+
 GType
 midori_startup_get_type (void)
 {
@@ -303,6 +323,23 @@ midori_web_settings_class_init (MidoriWebSettingsClass* class)
                                      0, G_MAXINT, 0,
                                      flags));
 
+    /**
+    * MidoriWebSettings:last-window-state:
+    *
+    * The last saved window state.
+    *
+    * Since: 0.1.3
+    */
+    g_object_class_install_property (gobject_class,
+                                     PROP_LAST_WINDOW_STATE,
+                                     g_param_spec_enum (
+                                     "last-window-state",
+                                     "Last window state",
+                                     "The last saved window state",
+                                     MIDORI_TYPE_WINDOW_STATE,
+                                     MIDORI_WINDOW_NORMAL,
+                                     flags));
+
     g_object_class_install_property (gobject_class,
                                      PROP_LAST_PANEL_POSITION,
                                      g_param_spec_int (
@@ -887,6 +924,9 @@ midori_web_settings_set_property (GObject*      object,
     case PROP_LAST_WINDOW_HEIGHT:
         web_settings->last_window_height = g_value_get_int (value);
         break;
+    case PROP_LAST_WINDOW_STATE:
+        web_settings->last_window_state = g_value_get_enum (value);
+        break;
     case PROP_LAST_PANEL_POSITION:
         web_settings->last_panel_position = g_value_get_int (value);
         break;
@@ -1062,6 +1102,9 @@ midori_web_settings_get_property (GObject*    object,
     case PROP_LAST_WINDOW_HEIGHT:
         g_value_set_int (value, web_settings->last_window_height);
         break;
+    case PROP_LAST_WINDOW_STATE:
+        g_value_set_enum (value, web_settings->last_window_state);
+        break;
     case PROP_LAST_PANEL_POSITION:
         g_value_set_int (value, web_settings->last_panel_position);
         break;
index 96e581665ce20d35a1ee5bdefe3ff8f020d02930..72b692ccb8808586d6bf55186e7c53bbe0b0c93c 100644 (file)
@@ -34,6 +34,20 @@ G_BEGIN_DECLS
 typedef struct _MidoriWebSettings                MidoriWebSettings;
 typedef struct _MidoriWebSettingsClass           MidoriWebSettingsClass;
 
+typedef enum
+{
+    MIDORI_WINDOW_NORMAL,
+    MIDORI_WINDOW_MINIMIZED,
+    MIDORI_WINDOW_MAXIMIZED,
+    MIDORI_WINDOW_FULLSCREEN,
+} MidoriWindowState;
+
+GType
+midori_window_state_get_type (void) G_GNUC_CONST;
+
+#define MIDORI_TYPE_WINDOW_STATE \
+    (midori_startup_get_type ())
+
 typedef enum
 {
     MIDORI_STARTUP_BLANK_PAGE,