[gnome-builder/wip/window-placement] wip on window placement



commit b3b4116f517f2a775785b3a293a44310b5060a9e
Author: Christian Hergert <christian hergert me>
Date:   Fri Apr 17 18:09:10 2015 -0700

    wip on window placement

 configure.ac                                    |    1 +
 data/gsettings.mk                               |    1 +
 data/gsettings/org.gnome.builder.gschema.xml.in |   24 +++++++++++
 src/app/gb-application.c                        |   50 ++++++++++++++++++++++-
 4 files changed, 74 insertions(+), 2 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 613aef6..75cf1cf 100644
--- a/configure.ac
+++ b/configure.ac
@@ -71,6 +71,7 @@ AC_CONFIG_FILES([
        src/util/gb-version.h
        data/icons/Makefile
        data/libide-1.0.pc
+       data/gsettings/org.gnome.builder.gschema.xml
        data/gsettings/org.gnome.builder.editor.gschema.xml
        data/gsettings/org.gnome.builder.editor.language.gschema.xml
        data/gsettings/org.gnome.builder.experimental.gschema.xml
diff --git a/data/gsettings.mk b/data/gsettings.mk
index cad1ce8..5310ee1 100644
--- a/data/gsettings.mk
+++ b/data/gsettings.mk
@@ -1,4 +1,5 @@
 gsettingsschema_in_files = \
+       data/gsettings/org.gnome.builder.gschema.xml.in \
        data/gsettings/org.gnome.builder.editor.gschema.xml.in \
        data/gsettings/org.gnome.builder.editor.language.gschema.xml.in \
        data/gsettings/org.gnome.builder.experimental.gschema.xml.in \
diff --git a/data/gsettings/org.gnome.builder.gschema.xml.in b/data/gsettings/org.gnome.builder.gschema.xml.in
new file mode 100644
index 0000000..838ff8b
--- /dev/null
+++ b/data/gsettings/org.gnome.builder.gschema.xml.in
@@ -0,0 +1,24 @@
+<schemalist>
+  <schema id="org.gnome.builder" path="/org/gnome/builder/" gettext-domain="gnome-builder">
+    <key name="window-size" type="(ii)">
+      <default>(-1, -1)</default>
+      <summary>Window size</summary>
+      <description>Window size (width and height).</description>
+    </key>
+    <key name="window-position" type="(ii)">
+      <default>(-1,-1)</default>
+      <summary>Window position</summary>
+      <description>Window position (x and y).</description>
+    </key>
+    <key name="window-maximized" type="b">
+      <default>true</default>
+      <summary>Window maximized</summary>
+      <description>Window maximized state</description>
+    </key>
+    <key name="night-mode" type="b">
+      <default>false</default>
+      <summary>Night mode</summary>
+      <description>Whether the application is in night mode.</description>
+    </key>
+  </schema>
+</schemalist>
diff --git a/src/app/gb-application.c b/src/app/gb-application.c
index 23d4425..b6af311 100644
--- a/src/app/gb-application.c
+++ b/src/app/gb-application.c
@@ -42,13 +42,46 @@
 
 G_DEFINE_TYPE (GbApplication, gb_application, GTK_TYPE_APPLICATION)
 
+static gboolean
+window_should_maximize (void)
+{
+  GSettings *settings;
+  gboolean ret;
+
+  settings = g_settings_new ("org.gnome.builder");
+  ret = g_settings_get_boolean (settings, "window-maximized");
+  g_object_unref (settings);
+
+  return ret;
+}
+
+static gboolean
+get_window_position (GdkPoint *loc)
+{
+  GSettings *settings;
+
+  settings = g_settings_new ("org.gnome.builder");
+  g_settings_get (settings, "window-position", "(ii)", &loc->x, &loc->y);
+  g_object_unref (settings);
+
+  return (loc->x >= 0) && (loc->y >= 0);
+}
+
 static void
 get_default_size (GtkRequisition *req)
 {
+  GSettings *settings;
   GdkScreen *screen;
   GdkRectangle rect;
   gint primary;
 
+  settings = g_settings_new ("org.gnome.builder");
+  g_settings_get (settings, "window-size", "(ii)", &req->width, &req->height);
+  g_object_unref (settings);
+
+  if (req->width > 0 && req->height > 0)
+    return;
+
   screen = gdk_screen_get_default ();
   primary = gdk_screen_get_primary_monitor (screen);
   gdk_screen_get_monitor_geometry (screen, primary, &rect);
@@ -252,6 +285,7 @@ gb_application__context_new_cb (GObject      *object,
   GbWorkbench *workbench;
   GtkRequisition req;
   GPtrArray *ar;
+  GdkPoint loc;
   gboolean ret = FALSE;
   GError *error = NULL;
   gsize i;
@@ -310,7 +344,12 @@ gb_application__context_new_cb (GObject      *object,
       gb_workbench_open (workbench, file);
     }
 
-  gtk_window_maximize (GTK_WINDOW (workbench));
+  if (get_window_position (&loc))
+    gtk_window_move (GTK_WINDOW (workbench), loc.x, loc.y);
+
+  if (window_should_maximize ())
+    gtk_window_maximize (GTK_WINDOW (workbench));
+
   gtk_window_present (GTK_WINDOW (workbench));
 
   ret = TRUE;
@@ -457,6 +496,7 @@ gb_application_show_projects_window (GbApplication *self)
 {
   GbProjectsDialog *window;
   GtkRequisition req;
+  GdkPoint loc;
   GList *windows;
 
   g_assert (GB_IS_APPLICATION (self));
@@ -479,7 +519,13 @@ gb_application_show_projects_window (GbApplication *self)
                          "default-width", req.width,
                          "default-height", req.height,
                          NULL);
-  gtk_window_maximize (GTK_WINDOW (window));
+
+  if (get_window_position (&loc))
+    gtk_window_move (GTK_WINDOW (window), loc.x, loc.y);
+
+  if (window_should_maximize ())
+    gtk_window_maximize (GTK_WINDOW (window));
+
   gtk_window_present (GTK_WINDOW (window));
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]