[glade] GladeProject / GladeCommand: Make project translation domain settings undoable
- From: Tristan Van Berkom <tvb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glade] GladeProject / GladeCommand: Make project translation domain settings undoable
- Date: Thu, 11 Apr 2013 05:35:25 +0000 (UTC)
commit 527b2cf298217797268be1ee3020f5e97d39e89c
Author: Tristan Van Berkom <tristan van berkom gmail com>
Date: Thu Apr 11 14:34:53 2013 +0900
GladeProject / GladeCommand: Make project translation domain settings undoable
gladeui/glade-command.c | 141 +++++++++++++++++++++++++++++++++++++++++++++++
gladeui/glade-command.h | 3 +
gladeui/glade-project.c | 11 ++-
3 files changed, 151 insertions(+), 4 deletions(-)
---
diff --git a/gladeui/glade-command.c b/gladeui/glade-command.c
index 6afdf99..bf1c1ba 100644
--- a/gladeui/glade-command.c
+++ b/gladeui/glade-command.c
@@ -2485,6 +2485,147 @@ glade_command_set_project_target (GladeProject *project,
/******************************************************************************
*
+ * This command sets the translation domain of a GladeProject
+ *
+ *****************************************************************************/
+typedef struct
+{
+ GladeCommand parent;
+ gchar *new_domain;
+ gchar *old_domain;
+} GladeCommandDomain;
+
+GLADE_MAKE_COMMAND (GladeCommandDomain, glade_command_domain);
+#define GLADE_COMMAND_DOMAIN_TYPE (glade_command_domain_get_type ())
+#define GLADE_COMMAND_DOMAIN(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GLADE_COMMAND_DOMAIN_TYPE,
GladeCommandDomain))
+#define GLADE_COMMAND_DOMAIN_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GLADE_COMMAND_DOMAIN_TYPE,
GladeCommandDomainClass))
+#define GLADE_IS_COMMAND_DOMAIN(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GLADE_COMMAND_DOMAIN_TYPE))
+#define GLADE_IS_COMMAND_DOMAIN_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GLADE_COMMAND_DOMAIN_TYPE))
+
+static gboolean
+glade_command_domain_execute (GladeCommand *cmd)
+{
+ GladeCommandDomain *me = (GladeCommandDomain *) cmd;
+
+ glade_project_set_translation_domain (cmd->priv->project, me->new_domain);
+
+ return TRUE;
+}
+
+static gboolean
+glade_command_domain_undo (GladeCommand *cmd)
+{
+ GladeCommandDomain *me = (GladeCommandDomain *) cmd;
+
+ glade_project_set_translation_domain (cmd->priv->project, me->old_domain);
+
+ return TRUE;
+}
+
+static void
+glade_command_domain_finalize (GObject *obj)
+{
+ GladeCommandDomain *me = (GladeCommandDomain *) obj;
+
+ g_free (me->new_domain);
+ g_free (me->old_domain);
+
+ glade_command_finalize (obj);
+}
+
+static gboolean
+glade_command_domain_unifies (GladeCommand *this_cmd, GladeCommand *other_cmd)
+{
+ GladeCommandDomain *me;
+
+ /* Do we unify with self ? */
+ if (!other_cmd)
+ {
+ if (GLADE_IS_COMMAND_DOMAIN (this_cmd))
+ {
+ me = (GladeCommandDomain *) this_cmd;
+
+ return g_strcmp0 (me->new_domain, me->old_domain) == 0;
+ }
+ return FALSE;
+ }
+
+ if (GLADE_IS_COMMAND_DOMAIN (this_cmd) &&
+ GLADE_IS_COMMAND_DOMAIN (other_cmd))
+ {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void
+glade_command_domain_collapse (GladeCommand *this_cmd, GladeCommand *other_cmd)
+{
+ GladeCommandDomain *this;
+ GladeCommandDomain *other;
+
+ g_return_if_fail (GLADE_IS_COMMAND_DOMAIN (this_cmd) &&
+ GLADE_IS_COMMAND_DOMAIN (other_cmd));
+
+ this = GLADE_COMMAND_DOMAIN (this_cmd);
+ other = GLADE_COMMAND_DOMAIN (other_cmd);
+
+ g_free (this->new_domain);
+ this->new_domain = g_strdup (other->new_domain);
+
+ g_free (this_cmd->priv->description);
+ this_cmd->priv->description =
+ g_strdup_printf (_("Setting translation domain to '%s'"),
+ this->new_domain);
+}
+
+/**
+ * glade_command_set_project_domain:
+ * @project: A #GladeProject
+ * @domain: The translation domain for @project
+ *
+ * Sets @domain as the translation domain for @project.
+ */
+void
+glade_command_set_project_domain (GladeProject *project,
+ const gchar *domain)
+{
+ GladeCommandDomain *me;
+ const gchar *old_domain;
+
+ g_return_if_fail (GLADE_IS_PROJECT (project));
+
+ old_domain = glade_project_get_translation_domain (project);
+
+ /* Do nothing if nothing has changed */
+ if (g_strcmp0 (domain, old_domain) == 0)
+ return;
+
+ /* load up the command */
+ me = g_object_new (GLADE_COMMAND_DOMAIN_TYPE, NULL);
+ GLADE_COMMAND (me)->priv->project = project;
+
+ me->new_domain = g_strdup (domain);
+ me->old_domain = g_strdup (old_domain);
+
+ GLADE_COMMAND (me)->priv->description =
+ g_strdup_printf (_("Setting translation domain to '%s'"),
+ me->new_domain);
+
+ glade_command_check_group (GLADE_COMMAND (me));
+
+ /* execute the command and push it on the stack if successful
+ * this sets the actual policy
+ */
+ if (glade_command_domain_execute (GLADE_COMMAND (me)))
+ glade_project_push_undo (GLADE_COMMAND (me)->priv->project, GLADE_COMMAND (me));
+ else
+ g_object_unref (G_OBJECT (me));
+}
+
+/******************************************************************************
+ *
* This command sets the template object in a GtkBuilder file
*
*****************************************************************************/
diff --git a/gladeui/glade-command.h b/gladeui/glade-command.h
index ccd3866..606d5a5 100644
--- a/gladeui/glade-command.h
+++ b/gladeui/glade-command.h
@@ -85,6 +85,9 @@ void glade_command_set_project_target (GladeProject *project,
gint major,
gint minor);
+void glade_command_set_project_domain (GladeProject *project,
+ const gchar *domain);
+
void glade_command_set_template (GladeProject *project,
GladeWidget *widget);
diff --git a/gladeui/glade-project.c b/gladeui/glade-project.c
index 022525e..dc1d53e 100644
--- a/gladeui/glade-project.c
+++ b/gladeui/glade-project.c
@@ -4227,9 +4227,9 @@ glade_project_target_version_box_fill (GladeProject *project, GtkWidget *vbox)
}
static void
-on_domain_entry_activate (GtkWidget *entry, GladeProject *project)
+on_domain_entry_changed (GtkWidget *entry, GladeProject *project)
{
- glade_project_set_translation_domain (project, gtk_entry_get_text (GTK_ENTRY (entry)));
+ glade_command_set_project_domain (project, gtk_entry_get_text (GTK_ENTRY (entry)));
}
static void
@@ -4436,8 +4436,8 @@ glade_project_build_prefs_dialog (GladeProject *project)
g_signal_connect (verify_button, "clicked",
G_CALLBACK (verify_clicked), project);
- g_signal_connect (priv->domain_entry, "activate",
- G_CALLBACK (on_domain_entry_activate), project);
+ g_signal_connect (priv->domain_entry, "changed",
+ G_CALLBACK (on_domain_entry_changed), project);
gtk_builder_connect_signals (builder, NULL);
g_object_unref (builder);
@@ -4531,7 +4531,10 @@ glade_project_set_translation_domain (GladeProject *project, const gchar *domain
g_free (priv->translation_domain);
priv->translation_domain = g_strdup (domain);
+ g_signal_handlers_block_by_func (priv->domain_entry, on_domain_entry_changed, project);
gtk_entry_set_text (GTK_ENTRY (priv->domain_entry), domain);
+ g_signal_handlers_unblock_by_func (priv->domain_entry, on_domain_entry_changed, project);
+
g_object_notify_by_pspec (G_OBJECT (project),
properties[PROP_TRANSLATION_DOMAIN]);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]