[gnome-builder/wip/greeter] greeter: enable new-project action with improved window stacking
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder/wip/greeter] greeter: enable new-project action with improved window stacking
- Date: Mon, 11 May 2015 00:04:26 +0000 (UTC)
commit 2ecf80093b43b77106ad1d20b048aabf80649491
Author: Christian Hergert <christian hergert me>
Date: Sun May 10 17:04:21 2015 -0700
greeter: enable new-project action with improved window stacking
data/ui/gb-greeter-window.ui | 1 +
src/app/gb-application-actions.c | 26 +++++++++++++++++++++++++-
src/app/gb-application-private.h | 1 +
src/app/gb-application.c | 3 +++
4 files changed, 30 insertions(+), 1 deletions(-)
---
diff --git a/data/ui/gb-greeter-window.ui b/data/ui/gb-greeter-window.ui
index 3a0e000..d0651d0 100644
--- a/data/ui/gb-greeter-window.ui
+++ b/data/ui/gb-greeter-window.ui
@@ -11,6 +11,7 @@
<property name="visible">true</property>
<child>
<object class="GtkButton">
+ <property name="action-name">app.new-project</property>
<property name="visible">true</property>
<property name="label" translatable="yes">_New</property>
<property name="use-underline">true</property>
diff --git a/src/app/gb-application-actions.c b/src/app/gb-application-actions.c
index 9aa5749..e180921 100644
--- a/src/app/gb-application-actions.c
+++ b/src/app/gb-application-actions.c
@@ -27,6 +27,7 @@
#include "gb-application-actions.h"
#include "gb-application-credits.h"
#include "gb-application-private.h"
+#include "gb-greeter-window.h"
#include "gb-new-project-dialog.h"
#include "gb-support.h"
#include "gb-workbench.h"
@@ -225,13 +226,32 @@ gb_application_actions_new_project (GSimpleAction *action,
gpointer user_data)
{
GbApplication *self = user_data;
+ GtkWindow *transient_for = NULL;
GtkWindow *window;
+ GList *windows;
g_assert (GB_IS_APPLICATION (self));
+ for (windows = gtk_window_group_list_windows (self->greeter_group);
+ windows;
+ windows = windows->next)
+ {
+ if (GB_IS_NEW_PROJECT_DIALOG (windows->data))
+ {
+ gtk_window_present (windows->data);
+ goto cleanup;
+ }
+ else if (GB_IS_GREETER_WINDOW (windows->data))
+ {
+ transient_for = windows->data;
+ }
+ }
+
window = g_object_new (GB_TYPE_NEW_PROJECT_DIALOG,
"type-hint", GDK_WINDOW_TYPE_HINT_DIALOG,
- "window-position", GTK_WIN_POS_CENTER,
+ "transient-for", transient_for,
+ "window-position", transient_for ? GTK_WIN_POS_CENTER_ON_PARENT
+ : GTK_WIN_POS_CENTER,
NULL);
g_signal_connect_object (window,
@@ -240,7 +260,11 @@ gb_application_actions_new_project (GSimpleAction *action,
self,
G_CONNECT_SWAPPED);
+ gtk_window_group_add_window (self->greeter_group, GTK_WINDOW (window));
gtk_window_present (window);
+
+cleanup:
+ g_list_free (windows);
}
static const GActionEntry GbApplicationActions[] = {
diff --git a/src/app/gb-application-private.h b/src/app/gb-application-private.h
index c4b9e0d..9ee7865 100644
--- a/src/app/gb-application-private.h
+++ b/src/app/gb-application-private.h
@@ -36,6 +36,7 @@ struct _GbApplication
GbKeybindings *keybindings;
GbPreferencesWindow *preferences_window;
IdeRecentProjects *recent_projects;
+ GtkWindowGroup *greeter_group;
};
diff --git a/src/app/gb-application.c b/src/app/gb-application.c
index a0a74fc..388d62e 100644
--- a/src/app/gb-application.c
+++ b/src/app/gb-application.c
@@ -456,6 +456,7 @@ gb_application_show_projects_window (GbApplication *self)
"application", self,
"recent-projects", self->recent_projects,
NULL);
+ gtk_window_group_add_window (self->greeter_group, GTK_WINDOW (window));
gtk_window_present (GTK_WINDOW (window));
}
@@ -479,6 +480,7 @@ gb_application_startup (GApplication *app)
g_assert (GB_IS_APPLICATION (self));
self->started_at = g_date_time_new_now_utc ();
+ self->greeter_group = gtk_window_group_new ();
g_resources_register (gb_get_resource ());
g_application_set_resource_base_path (app, "/org/gnome/builder");
@@ -532,6 +534,7 @@ gb_application_finalize (GObject *object)
g_clear_pointer (&self->started_at, g_date_time_unref);
g_clear_object (&self->keybindings);
g_clear_object (&self->recent_projects);
+ g_clear_object (&self->greeter_group);
G_OBJECT_CLASS (gb_application_parent_class)->finalize (object);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]