[gnome-builder] workbench: set workbench title from project name
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] workbench: set workbench title from project name
- Date: Thu, 9 Apr 2015 20:37:42 +0000 (UTC)
commit c0032808a7b6fcec82787be79b4d9a3804b3d05d
Author: Christian Hergert <christian hergert me>
Date: Thu Apr 9 13:36:49 2015 -0700
workbench: set workbench title from project name
"Builder - gnome-builder" would be the title when opening a project named
"gnome-builder".
data/ui/gb-workbench.ui | 1 +
src/app/gb-application.c | 1 -
src/workbench/gb-workbench-private.h | 2 +
src/workbench/gb-workbench.c | 72 +++++++++++++++++++++++++++++++++-
4 files changed, 73 insertions(+), 3 deletions(-)
---
diff --git a/data/ui/gb-workbench.ui b/data/ui/gb-workbench.ui
index fe76192..404648c 100644
--- a/data/ui/gb-workbench.ui
+++ b/data/ui/gb-workbench.ui
@@ -3,6 +3,7 @@
<!-- interface-requires gtk+ 3.15 -->
<template class="GbWorkbench" parent="GtkApplicationWindow">
<property name="icon-name">builder</property>
+ <property name="title" translatable="yes">Builder</property>
<child type="titlebar">
<object class="GtkHeaderBar">
<property name="visible">true</property>
diff --git a/src/app/gb-application.c b/src/app/gb-application.c
index 59c459e..40b3349 100644
--- a/src/app/gb-application.c
+++ b/src/app/gb-application.c
@@ -343,7 +343,6 @@ gb_application__context_new_cb (GObject *object,
"context", context,
"default-width", req.width,
"default-height", req.height,
- "title", _("Builder"),
NULL);
if (ar->len == 0)
diff --git a/src/workbench/gb-workbench-private.h b/src/workbench/gb-workbench-private.h
index 5d7933b..e05138c 100644
--- a/src/workbench/gb-workbench-private.h
+++ b/src/workbench/gb-workbench-private.h
@@ -51,6 +51,8 @@ struct _GbWorkbench
GbSearchBox *search_box;
GtkStack *stack;
+ gulong project_notify_name_handler;
+
guint disposing;
guint building : 1;
guint unloading : 1;
diff --git a/src/workbench/gb-workbench.c b/src/workbench/gb-workbench.c
index 4076fdb..ff8cade 100644
--- a/src/workbench/gb-workbench.c
+++ b/src/workbench/gb-workbench.c
@@ -57,14 +57,82 @@ static const GtkTargetEntry gDropTypes[] = {
};
static void
+gb_workbench__project_notify_name_cb (GbWorkbench *self,
+ GParamSpec *pspec,
+ IdeProject *project)
+{
+ g_autofree gchar *title = NULL;
+ const gchar *name;
+
+ g_assert (GB_IS_WORKBENCH (self));
+ g_assert (IDE_IS_PROJECT (project));
+
+ name = ide_project_get_name (project);
+
+ if (!ide_str_empty0 (name))
+ title = g_strdup_printf (_("Builder - %s"), name);
+ else
+ title = g_strdup (_("Builder"));
+
+ gtk_window_set_title (GTK_WINDOW (self), title);
+}
+
+static void
+gb_workbench_connect_context (GbWorkbench *self,
+ IdeContext *context)
+{
+ IdeProject *project;
+
+ g_assert (GB_IS_WORKBENCH (self));
+ g_assert (IDE_IS_CONTEXT (context));
+
+ project = ide_context_get_project (context);
+
+ self->project_notify_name_handler =
+ g_signal_connect_object (project,
+ "notify::name",
+ G_CALLBACK (gb_workbench__project_notify_name_cb),
+ self,
+ G_CONNECT_SWAPPED);
+ gb_workbench__project_notify_name_cb (self, NULL, project);
+}
+
+static void
+gb_workbench_disconnect_context (GbWorkbench *self,
+ IdeContext *context)
+{
+ IdeProject *project;
+
+ g_assert (GB_IS_WORKBENCH (self));
+ g_assert (IDE_IS_CONTEXT (context));
+
+ project = ide_context_get_project (context);
+ ide_clear_signal_handler (project, &self->project_notify_name_handler);
+}
+
+static void
gb_workbench_set_context (GbWorkbench *self,
IdeContext *context)
{
g_return_if_fail (GB_IS_WORKBENCH (self));
g_return_if_fail (IDE_IS_CONTEXT (context));
- if (g_set_object (&self->context, context))
- g_object_notify_by_pspec (G_OBJECT (self), gParamSpecs [PROP_CONTEXT]);
+ if (context != self->context)
+ {
+ if (self->context != NULL)
+ {
+ gb_workbench_disconnect_context (self, context);
+ g_clear_object (&self->context);
+ }
+
+ if (context != NULL)
+ {
+ self->context = g_object_ref (context);
+ gb_workbench_connect_context (self, context);
+ }
+
+ g_object_notify_by_pspec (G_OBJECT (self), gParamSpecs [PROP_CONTEXT]);
+ }
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]