[gnome-builder/wip/window-placement] wip on window placement
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder/wip/window-placement] wip on window placement
- Date: Sat, 18 Apr 2015 01:09:22 +0000 (UTC)
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]