[glade] Added Registration & User Survey Dialog in Help menu
- From: Juan Pablo Ugarte <jpu src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glade] Added Registration & User Survey Dialog in Help menu
- Date: Tue, 18 Feb 2014 00:07:54 +0000 (UTC)
commit c1a904e7de4482f33636567fafca709343b8901b
Author: Juan Pablo Ugarte <juanpablougarte gmail com>
Date: Mon Feb 17 21:04:38 2014 -0300
Added Registration & User Survey Dialog in Help menu
src/Makefile.am | 11 +-
src/glade-http.c | 421 ++++++
src/glade-http.h | 89 ++
src/glade-logo.h | 464 ++++++
src/glade-registration.c | 606 ++++++++
src/glade-registration.css | 86 ++
src/glade-registration.glade | 2982 +++++++++++++++++++++++++++++++++++++
src/glade-registration.h | 60 +
src/glade-resources.gresource.xml | 2 +
src/glade-window.c | 23 +-
src/glade.glade | 18 +-
11 files changed, 4751 insertions(+), 11 deletions(-)
---
diff --git a/src/Makefile.am b/src/Makefile.am
index 89e597e..e8ca978 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -24,19 +24,20 @@ BUILT_SOURCES = glade-resources.c glade-resources.h
glade_SOURCES = \
glade-window.c \
- glade-window.h \
glade-close-button.c \
- glade-close-button.h \
glade-resources.c \
glade-preferences.c \
- glade-preferences.h \
+ glade-http.c \
+ glade-registration.c \
main.c
noinst_HEADERS = \
glade-window.h \
glade-close-button.h \
glade-resources.h \
- glade-preferences.h
+ glade-preferences.h \
+ glade-logo.h \
+ glade-registration.h
# Generate resources
glade-resources.h: glade-resources.gresource.xml $(UI_FILES)
@@ -59,6 +60,6 @@ endif
glade-win32-res.o: glade.rc
$(WINDRES) $< $@
-UI_FILES = glade.glade glade-preferences.glade
+UI_FILES = glade.glade glade-preferences.glade glade-registration.glade glade-registration.css
EXTRA_DIST = glade.rc.in glade-resources.gresource.xml $(UI_FILES)
diff --git a/src/glade-http.c b/src/glade-http.c
new file mode 100644
index 0000000..0dd1da1
--- /dev/null
+++ b/src/glade-http.c
@@ -0,0 +1,421 @@
+/*
+ * Copyright (C) 2014 Juan Pablo Ugarte.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Authors:
+ * Juan Pablo Ugarte <juanpablougarte gmail com>
+ */
+
+#include <glade-http.h>
+#include <string.h>
+#include <stdio.h>
+
+#define HTTP_BUFFER_SIZE 16
+
+struct _GladeHTTPPrivate
+{
+ gchar *host;
+ gint port;
+ gboolean tls;
+
+ GladeHTTPStatus status;
+ GSocketConnection *connection;
+ GCancellable *cancellable;
+
+ GString *data;
+ GString *response;
+
+ gchar response_buffer[HTTP_BUFFER_SIZE];
+};
+
+enum
+{
+ PROP_0,
+
+ PROP_HOST,
+ PROP_PORT,
+ PROP_TLS,
+ N_PROPERTIES
+};
+
+enum
+{
+ REQUEST_DONE,
+ STATUS,
+
+ LAST_SIGNAL
+};
+
+static GParamSpec *properties[N_PROPERTIES];
+static guint http_signals[LAST_SIGNAL] = { 0 };
+
+G_DEFINE_TYPE (GladeHTTP, glade_http, G_TYPE_OBJECT);
+
+static void
+glade_http_emit_request_done (GladeHTTP *http, gchar *response)
+{
+ gint http_major, http_minor, code, i;
+ gchar **headers, **values, *blank, *data, tmp;
+
+ if ((blank = g_strstr_len (response, -1, "\r\n\r\n")))
+ data = blank + 4;
+ else if ((blank = g_strstr_len (response, -1, "\n\n")))
+ data = blank + 2;
+ else
+ return;
+
+ tmp = *blank;
+ *blank = '\0';
+ headers = g_strsplit (response, "\n", 0);
+ *blank = tmp;
+
+ values = g_new0 (gchar *, g_strv_length (headers));
+
+ for (i = 0; headers[i]; i++)
+ {
+ g_strchug (headers[i]);
+
+ if (i)
+ {
+ gchar *colon = g_strstr_len (headers[i], -1, ":");
+
+ if (colon)
+ {
+ *colon++ = '\0';
+ values[i-1] = g_strchug (colon);
+ }
+ else
+ values[i-1] = "";
+ }
+ else
+ {
+ if (sscanf (response, "HTTP/%d.%d %d", &http_major, &http_minor, &code) != 3)
+ http_major = http_minor = code = 0;
+ }
+ }
+
+ /* emit request-done */
+ g_signal_emit (http, http_signals[REQUEST_DONE], 0, code,
+ (headers[0]) ? &headers[1] : NULL, values,
+ data);
+
+ g_strfreev (headers);
+ g_free (values);
+}
+
+static void
+glade_http_emit_status (GladeHTTP *http, GladeHTTPStatus status, GError *error)
+{
+ GladeHTTPPrivate *priv = http->priv;
+
+ if (priv->status == status)
+ return;
+
+ priv->status = status;
+
+ g_signal_emit (http, http_signals[STATUS], 0, status, error);
+}
+
+static void
+on_read_ready (GObject *source, GAsyncResult *res, gpointer data)
+{
+ GladeHTTPPrivate *priv = GLADE_HTTP (data)->priv;
+ gssize bytes_read;
+
+ glade_http_emit_status (data, GLADE_HTTP_RECEIVING, NULL);
+
+ bytes_read = g_input_stream_read_finish (G_INPUT_STREAM (source), res, NULL);
+
+ if (bytes_read > 0)
+ {
+ g_string_append_len (priv->response, priv->response_buffer, bytes_read);
+
+ /* NOTE: We do not need to parse content-lenght because we do not support
+ * multiples HTTP requests in the same connection.
+ */
+ if (priv->cancellable)
+ g_cancellable_reset (priv->cancellable);
+
+ g_input_stream_read_async (g_io_stream_get_input_stream (G_IO_STREAM (priv->connection)),
+ priv->response_buffer, HTTP_BUFFER_SIZE,
+ G_PRIORITY_DEFAULT, priv->cancellable,
+ on_read_ready, data);
+ return;
+ }
+ else if (bytes_read < 0)
+ {
+ /* Read error */
+ g_message ("g_input_stream_read_finish error");
+ return;
+ }
+
+ /* emit request-done */
+ glade_http_emit_request_done (data, priv->response->str);
+ glade_http_emit_status (data, GLADE_HTTP_READY, NULL);
+}
+
+static void
+on_write_ready (GObject *source, GAsyncResult *res, gpointer data)
+{
+ GladeHTTPPrivate *priv = GLADE_HTTP (data)->priv;
+ GError *error = NULL;
+ gsize count;
+
+ count = g_output_stream_write_finish (G_OUTPUT_STREAM (source), res, &error);
+
+ if (error)
+ {
+ glade_http_emit_status (data, GLADE_HTTP_ERROR, error);
+ g_error_free (error);
+ return;
+ }
+
+ if (priv->data->len != count)
+ {
+ g_warning ("priv->data_size = %ld, write = %ld", priv->data->len, count);
+ return;
+ }
+
+ glade_http_emit_status (data, GLADE_HTTP_WAITING, NULL);
+ g_input_stream_read_async (g_io_stream_get_input_stream (G_IO_STREAM (priv->connection)),
+ priv->response_buffer, HTTP_BUFFER_SIZE,
+ G_PRIORITY_DEFAULT, priv->cancellable, on_read_ready, data);
+}
+
+static void
+on_connect_ready (GObject *source, GAsyncResult *res, gpointer data)
+{
+ GladeHTTPPrivate *priv = GLADE_HTTP (data)->priv;
+ GError *error = NULL;
+
+ priv->connection = g_socket_client_connect_to_host_finish (G_SOCKET_CLIENT (source), res, &error);
+
+ if (error)
+ {
+ glade_http_emit_status (data, GLADE_HTTP_ERROR, error);
+ g_error_free (error);
+ return;
+ }
+
+ if (priv->connection)
+ {
+ glade_http_emit_status (data, GLADE_HTTP_SENDING, NULL);
+ g_output_stream_write_async (g_io_stream_get_output_stream (G_IO_STREAM (priv->connection)),
+ priv->data->str, priv->data->len, G_PRIORITY_DEFAULT,
+ priv->cancellable, on_write_ready, data);
+ }
+}
+
+static void
+glade_http_init (GladeHTTP *http)
+{
+ GladeHTTPPrivate *priv;
+
+ priv = http->priv = G_TYPE_INSTANCE_GET_PRIVATE (http, GLADE_TYPE_HTTP, GladeHTTPPrivate);
+
+ priv->data = g_string_new ("");
+ priv->response = g_string_new ("");
+}
+
+static void
+glade_http_clear (GladeHTTP *http)
+{
+ GladeHTTPPrivate *priv = http->priv;
+
+ if (priv->cancellable)
+ g_cancellable_cancel (priv->cancellable);
+
+ g_clear_object (&priv->connection);
+ g_clear_object (&priv->cancellable);
+
+ g_string_assign (priv->data, "");
+ g_string_assign (priv->response, "");
+
+ priv->status = GLADE_HTTP_READY;
+}
+
+static void
+glade_http_finalize (GObject *object)
+{
+ GladeHTTPPrivate *priv = GLADE_HTTP (object)->priv;
+
+ glade_http_clear (GLADE_HTTP (object));
+
+ g_string_free (priv->data, TRUE);
+ g_string_free (priv->response, TRUE);
+
+ G_OBJECT_CLASS (glade_http_parent_class)->finalize (object);
+}
+
+static void
+glade_http_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
+{
+ GladeHTTPPrivate *priv;
+
+ g_return_if_fail (GLADE_IS_HTTP (object));
+ priv = GLADE_HTTP (object)->priv;
+
+ switch (prop_id)
+ {
+ case PROP_HOST:
+ g_free (priv->host);
+ priv->host = g_strdup (g_value_get_string (value));
+ break;
+ case PROP_PORT:
+ priv->port = g_value_get_int (value);
+ break;
+ case PROP_TLS:
+ priv->tls = g_value_get_boolean (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+glade_http_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
+{
+ GladeHTTPPrivate *priv;
+
+ g_return_if_fail (GLADE_IS_HTTP (object));
+ priv = GLADE_HTTP (object)->priv;
+
+ switch (prop_id)
+ {
+ case PROP_HOST:
+ g_value_set_string (value, priv->host);
+ break;
+ case PROP_PORT:
+ g_value_set_int (value, priv->port);
+ break;
+ case PROP_TLS:
+ g_value_set_boolean (value, priv->tls);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+glade_http_class_init (GladeHTTPClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ g_type_class_add_private (klass, sizeof (GladeHTTPPrivate));
+
+ object_class->finalize = glade_http_finalize;
+ object_class->set_property = glade_http_set_property;
+ object_class->get_property = glade_http_get_property;
+
+ properties[PROP_HOST] =
+ g_param_spec_string ("host", "Host",
+ "Host to connect to",
+ NULL, G_PARAM_READWRITE);
+
+ properties[PROP_PORT] =
+ g_param_spec_int ("port", "TCP Port",
+ "TCP port to connect to",
+ 0, 65536, 80, G_PARAM_READWRITE);
+
+ properties[PROP_TLS] =
+ g_param_spec_boolean ("tls", "TLS",
+ "Wheter to use tls encryption or not",
+ FALSE, G_PARAM_READWRITE);
+
+ /* Install all properties */
+ g_object_class_install_properties (object_class, N_PROPERTIES, properties);
+
+ http_signals[REQUEST_DONE] =
+ g_signal_new ("request-done",
+ G_OBJECT_CLASS_TYPE (klass), 0,
+ G_STRUCT_OFFSET (GladeHTTPClass, request_done),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 4,
+ G_TYPE_INT, G_TYPE_STRV, G_TYPE_STRV, G_TYPE_STRING);
+
+ http_signals[STATUS] =
+ g_signal_new ("status",
+ G_OBJECT_CLASS_TYPE (klass), 0,
+ G_STRUCT_OFFSET (GladeHTTPClass, status),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 2,
+ G_TYPE_INT, G_TYPE_ERROR);
+}
+
+GladeHTTP *
+glade_http_new (const gchar *host, gint port, gboolean tls)
+{
+ return GLADE_HTTP (g_object_new (GLADE_TYPE_HTTP,
+ "host", host,
+ "port", port,
+ "tls", tls,
+ NULL));
+}
+
+const gchar *
+glade_http_get_host (GladeHTTP *http)
+{
+ g_return_val_if_fail (GLADE_IS_HTTP (http), NULL);
+ return http->priv->host;
+}
+
+gint
+glade_http_get_port (GladeHTTP *http)
+{
+ g_return_val_if_fail (GLADE_IS_HTTP (http), NULL);
+ return http->priv->port;
+}
+
+void
+glade_http_request_send_async (GladeHTTP *http,
+ GCancellable *cancellable,
+ const gchar *format,
+ ...)
+{
+ GladeHTTPPrivate *priv;
+ GSocketClient *client;
+ va_list ap;
+
+ g_return_if_fail (GLADE_IS_HTTP (http));
+
+ priv = http->priv;
+ client = g_socket_client_new ();
+ glade_http_clear (http);
+
+ va_start (ap, format);
+ g_string_vprintf (priv->data, format, ap);
+ va_end (ap);
+
+ priv->cancellable = cancellable ? g_object_ref (cancellable) : NULL;
+
+ if (priv->tls)
+ {
+ g_socket_client_set_tls (client, TRUE);
+ g_socket_client_set_tls_validation_flags (client, 0);
+ }
+
+ glade_http_emit_status (http, GLADE_HTTP_CONNECTING, NULL);
+
+ g_socket_client_connect_to_host_async (client,
+ priv->host,
+ priv->port,
+ cancellable,
+ on_connect_ready,
+ http);
+ g_object_unref (client);
+}
diff --git a/src/glade-http.h b/src/glade-http.h
new file mode 100644
index 0000000..8eb4f0c
--- /dev/null
+++ b/src/glade-http.h
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2014 Juan Pablo Ugarte.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Authors:
+ * Juan Pablo Ugarte <juanpablougarte gmail com>
+ */
+
+#ifndef _GLADE_HTTP_H_
+#define _GLADE_HTTP_H_
+
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+#define GLADE_TYPE_HTTP (glade_http_get_type ())
+#define GLADE_HTTP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GLADE_TYPE_HTTP, GladeHTTP))
+#define GLADE_HTTP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GLADE_TYPE_HTTP, GladeHTTPClass))
+#define GLADE_IS_HTTP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GLADE_TYPE_HTTP))
+#define GLADE_IS_HTTP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GLADE_TYPE_HTTP))
+#define GLADE_HTTP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GLADE_TYPE_HTTP, GladeHTTPClass))
+
+typedef struct _GladeHTTPClass GladeHTTPClass;
+typedef struct _GladeHTTP GladeHTTP;
+typedef struct _GladeHTTPPrivate GladeHTTPPrivate;
+
+typedef enum
+{
+ GLADE_HTTP_READY,
+ GLADE_HTTP_CONNECTING,
+ GLADE_HTTP_SENDING,
+ GLADE_HTTP_WAITING,
+ GLADE_HTTP_RECEIVING,
+ GLADE_HTTP_ERROR
+} GladeHTTPStatus;
+
+struct _GladeHTTPClass
+{
+ GObjectClass parent_class;
+
+ /* Signals */
+ void (*request_done) (GladeHTTP *self,
+ gint code,
+ const gchar **headers,
+ const gchar **values,
+ const gchar *response);
+
+ void (*status) (GladeHTTP *self,
+ GladeHTTPStatus status,
+ GError *error);
+};
+
+struct _GladeHTTP
+{
+ GObject parent_instance;
+
+ GladeHTTPPrivate *priv;
+};
+
+GType glade_http_get_type (void) G_GNUC_CONST;
+
+GladeHTTP *glade_http_new (const gchar *host,
+ gint port,
+ gboolean tls);
+
+const gchar *glade_http_get_host (GladeHTTP *http);
+gint glade_http_get_port (GladeHTTP *http);
+
+void glade_http_request_send_async (GladeHTTP *http,
+ GCancellable *cancellable,
+ const gchar *format,
+ ...);
+G_END_DECLS
+
+#endif /* _GLADE_HTTP_H_ */
+
diff --git a/src/glade-logo.h b/src/glade-logo.h
new file mode 100644
index 0000000..aa4094b
--- /dev/null
+++ b/src/glade-logo.h
@@ -0,0 +1,464 @@
+#ifndef __GLADE_LOGO_H__
+#define __GLADE_LOGO_H__
+
+#define GLADE_LOGO_WIDTH 250.000000
+#define GLADE_LOGO_HEIGHT 320.000000
+
+#include <cairo.h>
+
+static cairo_path_data_t glade_logo_data[] = {
+ {.header.type = 0, .header.length = 2},
+ {.point.x = 123.696550, .point.y = 318.839150},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 110.137780, .point.y = 316.186390},
+ {.point.x = 93.163559, .point.y = 308.523530},
+ {.point.x = 81.491943, .point.y = 299.786260},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 74.318660, .point.y = 294.416420},
+ {.point.x = 70.948005, .point.y = 291.542980},
+ {.point.x = 73.133025, .point.y = 292.660410},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 73.717653, .point.y = 292.959390},
+ {.point.x = 78.022635, .point.y = 295.379740},
+ {.point.x = 82.699646, .point.y = 298.038960},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 93.959038, .point.y = 304.440780},
+ {.point.x = 106.365290, .point.y = 309.839000},
+ {.point.x = 122.560570, .point.y = 315.383310},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 135.528970, .point.y = 319.822940},
+ {.point.x = 135.996650, .point.y = 321.245660},
+ {.point.x = 123.696550, .point.y = 318.839150},
+ {.header.type = 3, .header.length = 1},
+ {.header.type = 0, .header.length = 2},
+ {.point.x = 142.756790, .point.y = 315.724410},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 136.618200, .point.y = 314.637070},
+ {.point.x = 127.290740, .point.y = 312.502950},
+ {.point.x = 122.029090, .point.y = 310.981900},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 100.716080, .point.y = 304.820740},
+ {.point.x = 70.321696, .point.y = 290.954990},
+ {.point.x = 65.447634, .point.y = 285.169740},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 58.774939, .point.y = 278.299380},
+ {.point.x = 53.992986, .point.y = 268.625140},
+ {.point.x = 49.958962, .point.y = 261.324430},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 47.523844, .point.y = 257.617650},
+ {.point.x = 42.130573, .point.y = 241.288660},
+ {.point.x = 41.176872, .point.y = 234.735310},
+ {.header.type = 1, .header.length = 2},
+ {.point.x = 40.418249, .point.y = 229.522570},
+ {.header.type = 1, .header.length = 2},
+ {.point.x = 43.722262, .point.y = 231.869110},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 45.539469, .point.y = 233.159710},
+ {.point.x = 47.286530, .point.y = 234.635700},
+ {.point.x = 47.604635, .point.y = 235.149060},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 47.922741, .point.y = 235.662440},
+ {.point.x = 50.209284, .point.y = 237.656870},
+ {.point.x = 52.685837, .point.y = 239.581140},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 56.830671, .point.y = 242.801670},
+ {.point.x = 56.687487, .point.y = 242.533900},
+ {.point.x = 50.884762, .point.y = 236.212940},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 43.522477, .point.y = 228.193080},
+ {.point.x = 35.998221, .point.y = 216.962400},
+ {.point.x = 33.686140, .point.y = 210.542260},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 32.790743, .point.y = 208.055930},
+ {.point.x = 31.167873, .point.y = 198.513310},
+ {.point.x = 30.079749, .point.y = 189.336420},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 27.815569, .point.y = 170.240820},
+ {.point.x = 24.767722, .point.y = 156.964690},
+ {.point.x = 20.465785, .point.y = 147.458830},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 17.114317, .point.y = 140.053160},
+ {.point.x = 8.311111, .point.y = 130.080900},
+ {.point.x = 3.296087, .point.y = 128.009000},
+ {.header.type = 1, .header.length = 2},
+ {.point.x = 0.000000, .point.y = 126.647260},
+ {.header.type = 1, .header.length = 2},
+ {.point.x = 4.144992, .point.y = 125.215950},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 13.321669, .point.y = 122.047160},
+ {.point.x = 27.559263, .point.y = 122.587300},
+ {.point.x = 41.689313, .point.y = 126.640270},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 43.864665, .point.y = 127.264240},
+ {.point.x = 44.147165, .point.y = 127.083760},
+ {.point.x = 43.525241, .point.y = 125.467260},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 42.209792, .point.y = 122.048150},
+ {.point.x = 37.704335, .point.y = 98.061740},
+ {.point.x = 37.049273, .point.y = 90.990130},
+ {.header.type = 1, .header.length = 2},
+ {.point.x = 36.410914, .point.y = 84.098830},
+ {.header.type = 1, .header.length = 2},
+ {.point.x = 38.991277, .point.y = 88.894460},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 42.258249, .point.y = 94.966230},
+ {.point.x = 51.083142, .point.y = 103.248380},
+ {.point.x = 57.127155, .point.y = 105.915010},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 59.685857, .point.y = 107.043890},
+ {.point.x = 64.080437, .point.y = 108.282110},
+ {.point.x = 66.892897, .point.y = 108.666600},
+ {.header.type = 1, .header.length = 2},
+ {.point.x = 72.006482, .point.y = 109.365680},
+ {.header.type = 1, .header.length = 2},
+ {.point.x = 68.132801, .point.y = 104.851900},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 58.276521, .point.y = 93.366950},
+ {.point.x = 52.394362, .point.y = 76.305000},
+ {.point.x = 52.421619, .point.y = 59.279620},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 52.439689, .point.y = 48.021450},
+ {.point.x = 53.403708, .point.y = 44.740490},
+ {.point.x = 55.405866, .point.y = 49.123360},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 57.449226, .point.y = 53.596370},
+ {.point.x = 66.161062, .point.y = 62.177070},
+ {.point.x = 71.960271, .point.y = 65.428560},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 78.595935, .point.y = 69.149040},
+ {.point.x = 84.942194, .point.y = 71.235930},
+ {.point.x = 98.112537, .point.y = 74.028410},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 118.834700, .point.y = 78.422080},
+ {.point.x = 129.297940, .point.y = 86.810330},
+ {.point.x = 134.949400, .point.y = 103.560060},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 136.960850, .point.y = 109.521560},
+ {.point.x = 137.702390, .point.y = 110.603800},
+ {.point.x = 139.775660, .point.y = 110.603800},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 141.759080, .point.y = 110.603800},
+ {.point.x = 142.959450, .point.y = 109.126040},
+ {.point.x = 146.082780, .point.y = 102.839170},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 151.082470, .point.y = 92.775430},
+ {.point.x = 152.697710, .point.y = 84.891870},
+ {.point.x = 152.140680, .point.y = 73.271850},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 151.770390, .point.y = 65.546970},
+ {.point.x = 151.100790, .point.y = 62.657570},
+ {.point.x = 148.295030, .point.y = 56.677340},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 146.426510, .point.y = 52.694770},
+ {.point.x = 143.419160, .point.y = 47.574320},
+ {.point.x = 141.612020, .point.y = 45.298540},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 139.804880, .point.y = 43.022780},
+ {.point.x = 138.761070, .point.y = 41.160780},
+ {.point.x = 139.292410, .point.y = 41.160780},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 139.823750, .point.y = 41.160780},
+ {.point.x = 143.581670, .point.y = 42.288120},
+ {.point.x = 147.643320, .point.y = 43.665990},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 168.470380, .point.y = 50.731350},
+ {.point.x = 185.041050, .point.y = 62.180450},
+ {.point.x = 195.403970, .point.y = 76.665070},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 206.970430, .point.y = 92.831970},
+ {.point.x = 211.172080, .point.y = 110.362940},
+ {.point.x = 205.951990, .point.y = 120.675680},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 200.998710, .point.y = 130.461270},
+ {.point.x = 186.841420, .point.y = 132.870190},
+ {.point.x = 171.235190, .point.y = 126.582920},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 167.613620, .point.y = 125.123920},
+ {.point.x = 164.480200, .point.y = 124.100040},
+ {.point.x = 164.272020, .point.y = 124.307680},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 162.701490, .point.y = 125.874100},
+ {.point.x = 181.175230, .point.y = 134.959400},
+ {.point.x = 189.389290, .point.y = 136.660200},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 204.602600, .point.y = 139.810270},
+ {.point.x = 212.735560, .point.y = 135.110600},
+ {.point.x = 216.656990, .point.y = 120.903480},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 217.415840, .point.y = 118.154200},
+ {.point.x = 218.079500, .point.y = 116.885370},
+ {.point.x = 218.131750, .point.y = 118.083860},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 218.184050, .point.y = 119.282330},
+ {.point.x = 220.630880, .point.y = 124.958210},
+ {.point.x = 223.569190, .point.y = 130.696890},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 228.364950, .point.y = 140.063290},
+ {.point.x = 228.892210, .point.y = 141.774070},
+ {.point.x = 228.722430, .point.y = 147.417480},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 228.502960, .point.y = 154.712020},
+ {.point.x = 227.950120, .point.y = 155.260630},
+ {.point.x = 217.163860, .point.y = 158.886960},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 200.608790, .point.y = 164.452770},
+ {.point.x = 168.872120, .point.y = 158.189320},
+ {.point.x = 144.057060, .point.y = 144.458820},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 139.753660, .point.y = 142.077690},
+ {.point.x = 139.408770, .point.y = 142.009130},
+ {.point.x = 141.642810, .point.y = 143.978950},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 149.285820, .point.y = 150.718000},
+ {.point.x = 171.460130, .point.y = 161.069350},
+ {.point.x = 187.401030, .point.y = 165.339660},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 194.556210, .point.y = 167.256420},
+ {.point.x = 199.319980, .point.y = 167.769860},
+ {.point.x = 210.295840, .point.y = 167.807280},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 223.417650, .point.y = 167.852080},
+ {.point.x = 224.458420, .point.y = 167.697810},
+ {.point.x = 229.844970, .point.y = 164.912030},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 232.974190, .point.y = 163.293670},
+ {.point.x = 235.690420, .point.y = 162.125100},
+ {.point.x = 235.881040, .point.y = 162.315250},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 236.071670, .point.y = 162.505390},
+ {.point.x = 238.147160, .point.y = 166.692030},
+ {.point.x = 240.493240, .point.y = 171.618920},
+ {.header.type = 1, .header.length = 2},
+ {.point.x = 244.758840, .point.y = 180.576910},
+ {.header.type = 1, .header.length = 2},
+ {.point.x = 242.292050, .point.y = 182.765970},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 240.935300, .point.y = 183.969950},
+ {.point.x = 235.802670, .point.y = 186.305030},
+ {.point.x = 230.886200, .point.y = 187.955040},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 222.932510, .point.y = 190.624360},
+ {.point.x = 220.482560, .point.y = 190.951420},
+ {.point.x = 208.660190, .point.y = 190.922040},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 185.571990, .point.y = 190.864740},
+ {.point.x = 161.177750, .point.y = 184.277320},
+ {.point.x = 134.518850, .point.y = 170.901160},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 126.187910, .point.y = 166.721090},
+ {.point.x = 119.371700, .point.y = 163.423110},
+ {.point.x = 119.371700, .point.y = 163.572320},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 119.371700, .point.y = 164.299780},
+ {.point.x = 132.201590, .point.y = 172.198450},
+ {.point.x = 140.920720, .point.y = 176.838870},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 169.969120, .point.y = 192.298800},
+ {.point.x = 207.076830, .point.y = 201.357560},
+ {.point.x = 228.399960, .point.y = 198.194380},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 238.127890, .point.y = 196.751280},
+ {.point.x = 244.331630, .point.y = 194.114690},
+ {.point.x = 244.132370, .point.y = 191.508060},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 244.057170, .point.y = 190.522900},
+ {.point.x = 244.614590, .point.y = 189.479870},
+ {.point.x = 245.371310, .point.y = 189.190240},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 246.752150, .point.y = 188.661740},
+ {.point.x = 248.151880, .point.y = 193.219250},
+ {.point.x = 249.607270, .point.y = 202.982460},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 250.197440, .point.y = 206.941400},
+ {.point.x = 249.971220, .point.y = 207.563880},
+ {.point.x = 247.264910, .point.y = 209.427760},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 243.550750, .point.y = 211.985770},
+ {.point.x = 234.146040, .point.y = 215.691980},
+ {.point.x = 227.793440, .point.y = 217.101100},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 220.397260, .point.y = 218.741710},
+ {.point.x = 197.462460, .point.y = 218.415190},
+ {.point.x = 186.259650, .point.y = 216.509800},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 161.405830, .point.y = 212.282630},
+ {.point.x = 131.394370, .point.y = 201.164570},
+ {.point.x = 107.944890, .point.y = 187.497250},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 99.832740, .point.y = 182.769160},
+ {.point.x = 101.108060, .point.y = 184.558500},
+ {.point.x = 109.820110, .point.y = 190.128300},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 154.725830, .point.y = 218.837410},
+ {.point.x = 215.587610, .point.y = 233.521700},
+ {.point.x = 243.762630, .point.y = 222.444990},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 246.715400, .point.y = 221.284150},
+ {.point.x = 249.408480, .point.y = 220.334360},
+ {.point.x = 249.747260, .point.y = 220.334360},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 250.625720, .point.y = 220.334360},
+ {.point.x = 249.019980, .point.y = 234.298240},
+ {.point.x = 247.900400, .point.y = 236.395070},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 246.668540, .point.y = 238.702140},
+ {.point.x = 233.155300, .point.y = 244.235230},
+ {.point.x = 225.206560, .point.y = 245.687200},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 216.136510, .point.y = 247.344000},
+ {.point.x = 194.897850, .point.y = 247.097790},
+ {.point.x = 183.164020, .point.y = 245.199800},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 154.674260, .point.y = 240.591530},
+ {.point.x = 122.448020, .point.y = 229.032500},
+ {.point.x = 96.783842, .point.y = 214.216640},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 91.668358, .point.y = 211.263470},
+ {.point.x = 87.482954, .point.y = 209.063940},
+ {.point.x = 87.482954, .point.y = 209.328780},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 87.482954, .point.y = 210.579470},
+ {.point.x = 108.469500, .point.y = 223.132920},
+ {.point.x = 119.880070, .point.y = 228.707660},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 165.230910, .point.y = 250.864210},
+ {.point.x = 212.406640, .point.y = 259.720830},
+ {.point.x = 241.346160, .point.y = 251.511290},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 244.599120, .point.y = 250.588490},
+ {.point.x = 244.411040, .point.y = 251.808390},
+ {.point.x = 239.897760, .point.y = 260.905900},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 235.716470, .point.y = 269.334200},
+ {.point.x = 234.008630, .point.y = 270.526800},
+ {.point.x = 221.210550, .point.y = 273.955380},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 189.715030, .point.y = 282.392960},
+ {.point.x = 129.641310, .point.y = 268.561220},
+ {.point.x = 84.028349, .point.y = 242.369700},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 78.328227, .point.y = 239.096620},
+ {.point.x = 73.664500, .point.y = 236.627100},
+ {.point.x = 73.664500, .point.y = 236.881880},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 73.664500, .point.y = 237.980050},
+ {.point.x = 92.653213, .point.y = 249.551640},
+ {.point.x = 103.735580, .point.y = 255.206990},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 137.171580, .point.y = 272.269460},
+ {.point.x = 175.760740, .point.y = 283.180310},
+ {.point.x = 202.813930, .point.y = 283.220810},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 209.829440, .point.y = 283.231410},
+ {.point.x = 218.004750, .point.y = 283.041020},
+ {.point.x = 220.981260, .point.y = 282.797950},
+ {.header.type = 1, .header.length = 2},
+ {.point.x = 226.393100, .point.y = 282.355980},
+ {.header.type = 1, .header.length = 2},
+ {.point.x = 222.593640, .point.y = 286.888910},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 215.336720, .point.y = 295.546760},
+ {.point.x = 209.880680, .point.y = 297.789690},
+ {.point.x = 192.184340, .point.y = 299.389950},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 162.968990, .point.y = 302.031850},
+ {.point.x = 110.647120, .point.y = 287.339290},
+ {.point.x = 74.482976, .point.y = 266.338060},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 69.063484, .point.y = 263.190860},
+ {.point.x = 66.035280, .point.y = 261.780580},
+ {.point.x = 67.753620, .point.y = 263.204130},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 69.471960, .point.y = 264.627640},
+ {.point.x = 75.868309, .point.y = 268.757370},
+ {.point.x = 81.967721, .point.y = 272.381260},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 112.337680, .point.y = 290.425200},
+ {.point.x = 157.272050, .point.y = 305.370190},
+ {.point.x = 181.819790, .point.y = 305.591670},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 187.227180, .point.y = 305.640470},
+ {.point.x = 191.651750, .point.y = 306.038160},
+ {.point.x = 191.652140, .point.y = 306.475500},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 191.652540, .point.y = 306.912830},
+ {.point.x = 192.729100, .point.y = 307.292210},
+ {.point.x = 194.044520, .point.y = 307.318580},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 197.616970, .point.y = 307.390180},
+ {.point.x = 188.752660, .point.y = 311.902130},
+ {.point.x = 178.576750, .point.y = 315.191770},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 168.487010, .point.y = 318.453560},
+ {.point.x = 158.963560, .point.y = 318.595160},
+ {.point.x = 142.756790, .point.y = 315.724410},
+ {.header.type = 3, .header.length = 1},
+ {.header.type = 0, .header.length = 2},
+ {.point.x = 229.914170, .point.y = 123.294940},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 229.257580, .point.y = 121.562790},
+ {.point.x = 227.370710, .point.y = 117.998680},
+ {.point.x = 225.721070, .point.y = 115.374690},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 219.548550, .point.y = 105.556270},
+ {.point.x = 219.289200, .point.y = 98.584660},
+ {.point.x = 224.901150, .point.y = 93.333820},
+ {.header.type = 1, .header.length = 2},
+ {.point.x = 227.261960, .point.y = 91.124930},
+ {.header.type = 1, .header.length = 2},
+ {.point.x = 227.494380, .point.y = 94.358570},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 227.622200, .point.y = 96.137080},
+ {.point.x = 229.261540, .point.y = 99.977660},
+ {.point.x = 231.137300, .point.y = 102.893200},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 235.630820, .point.y = 109.877580},
+ {.point.x = 236.499380, .point.y = 117.951240},
+ {.point.x = 233.299520, .point.y = 122.991960},
+ {.header.type = 1, .header.length = 2},
+ {.point.x = 231.107950, .point.y = 126.444310},
+ {.header.type = 3, .header.length = 1},
+ {.header.type = 0, .header.length = 2},
+ {.point.x = 123.871880, .point.y = 73.326950},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 119.605310, .point.y = 69.007030},
+ {.point.x = 114.688600, .point.y = 66.460670},
+ {.point.x = 100.262330, .point.y = 61.099550},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 84.688709, .point.y = 55.312050},
+ {.point.x = 70.765125, .point.y = 48.403090},
+ {.point.x = 65.419079, .point.y = 43.810160},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 56.557214, .point.y = 36.196690},
+ {.point.x = 52.316764, .point.y = 25.709480},
+ {.point.x = 52.317986, .point.y = 11.409390},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 52.318962, .point.y = -1.171975},
+ {.point.x = 52.923953, .point.y = -2.314802},
+ {.point.x = 56.775387, .point.y = 2.988140},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 62.139216, .point.y = 10.373460},
+ {.point.x = 66.245251, .point.y = 12.787330},
+ {.point.x = 87.482954, .point.y = 21.040550},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 101.013180, .point.y = 26.298550},
+ {.point.x = 106.778120, .point.y = 29.872960},
+ {.point.x = 113.982870, .point.y = 37.471140},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 121.379730, .point.y = 45.271940},
+ {.point.x = 125.489100, .point.y = 54.312360},
+ {.point.x = 126.912000, .point.y = 65.914650},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 127.532980, .point.y = 70.978350},
+ {.point.x = 127.884210, .point.y = 75.508590},
+ {.point.x = 127.692490, .point.y = 75.981870},
+ {.header.type = 2, .header.length = 4},
+ {.point.x = 127.500760, .point.y = 76.455140},
+ {.point.x = 125.781500, .point.y = 75.260430},
+ {.point.x = 123.871880, .point.y = 73.326950},
+ {.header.type = 3, .header.length = 1}
+};
+
+cairo_path_t glade_logo_path = {0, glade_logo_data, 450};
+
+#endif /* __GLADE_LOGO_H__ */
diff --git a/src/glade-registration.c b/src/glade-registration.c
new file mode 100644
index 0000000..6ce941f
--- /dev/null
+++ b/src/glade-registration.c
@@ -0,0 +1,606 @@
+/*
+ * Copyright (C) 2014 Juan Pablo Ugarte.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Authors:
+ * Juan Pablo Ugarte <juanpablougarte gmail com>
+ */
+
+#include "config.h"
+#include "glade-registration.h"
+#include "glade-http.h"
+#include "glade-logo.h"
+#include <gladeui/glade.h>
+#include <glib/gi18n.h>
+
+struct _GladeRegistrationPrivate
+{
+ GtkWidget *infobar;
+ GtkWidget *net_spinner;
+ GtkLabel *infobar_label;
+ GtkLabel *status_label;
+ GladeHTTP *http;
+ GCancellable *cancellable;
+
+ /* Form widgets */
+
+ GtkWidget *name;
+ GtkWidget *email;
+ GtkWidget *country_id;
+ GtkWidget *city;
+ GtkWidget *contact_type;
+ GtkWidget *contact_name;
+ GtkWidget *contact_website;
+ GtkWidget *subscribe;
+
+ GtkWidget *validation_token;
+
+ GtkWidget *experience;
+ GtkWidget *experience_unit;
+ GtkWidget *experience_not_programmer;
+ GtkWidget *lang_c;
+ GtkWidget *lang_cpp;
+ GtkWidget *lang_csharp;
+ GtkWidget *lang_java;
+ GtkWidget *lang_python;
+ GtkWidget *lang_javascript;
+ GtkWidget *lang_vala;
+ GtkWidget *lang_perl;
+ GtkWidget *lang_other;
+ GtkWidget *start_using;
+ GtkWidget *start_using_unit;
+ GtkWidget *version;
+ GtkWidget *version_other;
+ GtkWidget *os;
+ GtkWidget *os_linux;
+ GtkWidget *os_bsd;
+ GtkWidget *os_windows;
+ GtkWidget *os_osx;
+ GtkWidget *os_solaris;
+ GtkWidget *os_other;
+ GtkWidget *freq;
+ GtkWidget *user_level;
+ GtkWidget *soft_free;
+ GtkWidget *soft_open;
+ GtkWidget *soft_commercial;
+ GtkWidget *soft_none;
+ GtkWidget *field_academic;
+ GtkWidget *field_accounting;
+ GtkWidget *field_desktop;
+ GtkWidget *field_educational;
+ GtkWidget *field_embedded;
+ GtkWidget *field_medical;
+ GtkWidget *field_industrial;
+ GtkWidget *field_scientific;
+ GtkWidget *field_other;
+ GtkWidget *improvement;
+ GtkWidget *problem;
+ GtkWidget *problem_other;
+ GtkWidget *bug;
+ GtkWidget *bugzilla;
+ GtkWidget *contributing;
+ GtkWidget *contributing_whynot;
+ GtkWidget *comments;
+};
+
+G_DEFINE_TYPE_WITH_PRIVATE (GladeRegistration, glade_registration, GTK_TYPE_DIALOG);
+
+
+static void
+string_append_input_key_value_tuple (GString *string,
+ const gchar *name,
+ GtkWidget *input)
+{
+ if (string->len)
+ g_string_append_c (string, '&');
+
+ g_string_append (string, name);
+ g_string_append_c (string, '=');
+
+ if (GTK_IS_ENTRY (input))
+ g_string_append_uri_escaped (string, gtk_entry_get_text (GTK_ENTRY (input)), NULL, FALSE);
+ else if (GTK_IS_TEXT_VIEW (input))
+ {
+ GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (input));
+ GtkTextIter start, end;
+ gchar *text;
+
+ gtk_text_buffer_get_bounds (buffer, &start, &end);
+ text = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
+ g_string_append_uri_escaped (string, text ? text : "", NULL, FALSE);
+ g_free (text);
+ }
+ else if (GTK_IS_COMBO_BOX (input))
+ g_string_append_uri_escaped (string, gtk_combo_box_get_active_id (GTK_COMBO_BOX (input)), NULL, FALSE);
+ else if (GTK_IS_RADIO_BUTTON (input))
+ {
+ GSList *group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (input));
+
+ for (; group; group = g_slist_next (group))
+ {
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (group->data)))
+ g_string_append (string, gtk_widget_get_name (group->data));
+ }
+ }
+ else if (GTK_IS_TOGGLE_BUTTON (input))
+ g_string_append_printf (string, "%d", gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (input)) ? 1 : 0);
+}
+
+static void
+glade_registration_show_message (GladeRegistration *registration,
+ GtkMessageType type,
+ const gchar *message)
+{
+ gtk_info_bar_set_message_type (GTK_INFO_BAR (registration->priv->infobar), type);
+ gtk_label_set_text (registration->priv->infobar_label, message ? message : "");
+
+ /* Only show the infobar if the dialog is visible */
+ if (gtk_widget_is_visible (GTK_WIDGET (registration)))
+ gtk_widget_show (registration->priv->infobar);
+}
+
+static void
+on_http_status (GladeHTTP *http,
+ GladeHTTPStatus status,
+ GError *error,
+ GladeRegistration *registration)
+{
+ gchar *text = NULL;
+
+ switch (status)
+ {
+ case GLADE_HTTP_READY:
+ break;
+ case GLADE_HTTP_CONNECTING:
+ text = g_strdup_printf (_("Connecting to %s"), glade_http_get_host (http));
+ break;
+ case GLADE_HTTP_SENDING:
+ text = g_strdup_printf (_("Sending data to %s"), glade_http_get_host (http));
+ break;
+ case GLADE_HTTP_WAITING:
+ text = g_strdup_printf (_("Waiting for %s"), glade_http_get_host (http));
+ break;
+ case GLADE_HTTP_RECEIVING:
+ text = g_strdup_printf (_("Receiving data from %s"), glade_http_get_host (http));
+ break;
+ case GLADE_HTTP_ERROR:
+ glade_registration_show_message (registration, GTK_MESSAGE_WARNING, error->message);
+ break;
+ }
+
+ gtk_label_set_text (registration->priv->status_label, text ? text : "");
+ gtk_widget_set_visible (registration->priv->net_spinner, text != NULL);
+ g_free (text);
+}
+
+#define append_input_tuple(s,i) string_append_input_key_value_tuple (s, #i, priv->i)
+
+static void
+on_http_request_done (GladeHTTP *http,
+ gint code,
+ const gchar **headers,
+ const gchar **values,
+ const gchar *response,
+ GladeRegistration *registration)
+{
+ switch (code)
+ {
+ case 100:
+ /* Ignore Continue HTTP response */
+ break;
+ case 200:
+ {
+ const gchar *status = NULL, *message = _("Internal server error");
+ gint i;
+
+ for (i = 0; headers[i]; i++)
+ {
+ if (g_strcmp0 (headers[i], "X-Glade-Status") == 0)
+ status = values[i];
+ else if (g_strcmp0 (headers[i], "X-Glade-Message") == 0)
+ message = values[i];
+ }
+
+ if (status == NULL)
+ {
+ glade_registration_show_message (registration, GTK_MESSAGE_WARNING, message);
+ return;
+ }
+
+ if (g_strcmp0 (status, "ok") == 0)
+ {
+ gtk_widget_hide (GTK_WIDGET (registration));
+ glade_util_ui_message (glade_app_get_window (), GLADE_UI_INFO, NULL, "%s", message);
+ }
+ else if (g_strcmp0 (status, "error") == 0)
+ glade_registration_show_message (registration, GTK_MESSAGE_INFO, message);
+ }
+ break;
+ default:
+ glade_registration_show_message (registration, GTK_MESSAGE_INFO, response);
+ break;
+ }
+}
+
+#ifdef GDK_WINDOWING_X11
+#include "gdk/gdkx.h"
+#endif
+
+#ifdef GDK_WINDOWING_QUARTZ
+#include "gdk/gdkquartz.h"
+#endif
+
+#ifdef GDK_WINDOWING_WIN32
+#include "gdk/gdkwin32.h"
+#endif
+
+#ifdef GDK_WINDOWING_WAYLAND
+#include "gdk/gdkwayland.h"
+#endif
+
+#ifdef GDK_WINDOWING_BROADWAY
+#include "gdk/gdkbroadway.h"
+#endif
+
+static const gchar *
+get_gdk_backend (GtkWidget *widget)
+{
+ GdkDisplay *display = gtk_widget_get_display (widget);
+
+#ifdef GDK_WINDOWING_X11
+ if (GDK_IS_X11_DISPLAY (display))
+ return "X11";
+ else
+#endif
+
+#ifdef GDK_WINDOWING_QUARTZ
+ if (GDK_IS_QUARTZ_DISPLAY (display))
+ return "Quartz";
+ else
+#endif
+
+#ifdef GDK_WINDOWING_WIN32
+ if (GDK_IS_WIN32_DISPLAY (display))
+ return "Win32";
+ else
+#endif
+
+#ifdef GDK_WINDOWING_WAYLAND
+ if (GDK_IS_WAYLAND_DISPLAY (display))
+ return "Wayland";
+ else
+#endif
+
+#ifdef GDK_WINDOWING_BROADWAY
+ if (GDK_IS_BROADWAY_DISPLAY (display))
+ return "Broadway";
+ else
+#endif
+ {
+ return "Unknown";
+ }
+}
+
+static void
+glade_registration_clear_cancellable (GladeRegistrationPrivate *priv)
+{
+ if (priv->cancellable)
+ {
+ g_cancellable_cancel (priv->cancellable);
+ g_clear_object (&priv->cancellable);
+ }
+}
+
+static void
+on_registration_dialog_response (GtkDialog *dialog, gint response_id)
+{
+ GladeRegistrationPrivate *priv = GLADE_REGISTRATION (dialog)->priv;
+ GString *post;
+
+ gtk_widget_hide (priv->infobar);
+
+ if (response_id != GTK_RESPONSE_APPLY)
+ {
+ gtk_widget_hide (GTK_WIDGET (dialog));
+ glade_registration_clear_cancellable (priv);
+ return;
+ }
+
+ glade_registration_clear_cancellable (priv);
+ priv->cancellable = g_cancellable_new ();
+
+ post = g_string_new ("");
+
+ append_input_tuple (post, name);
+ append_input_tuple (post, email);
+ append_input_tuple (post, country_id);
+ append_input_tuple (post, city);
+ append_input_tuple (post, contact_type);
+ append_input_tuple (post, contact_name);
+ append_input_tuple (post, contact_website);
+
+ append_input_tuple (post, validation_token);
+
+ append_input_tuple (post, experience);
+ append_input_tuple (post, experience_unit);
+ append_input_tuple (post, experience_not_programmer);
+ append_input_tuple (post, lang_c);
+ append_input_tuple (post, lang_cpp);
+ append_input_tuple (post, lang_csharp);
+ append_input_tuple (post, lang_java);
+ append_input_tuple (post, lang_python);
+ append_input_tuple (post, lang_javascript);
+ append_input_tuple (post, lang_vala);
+ append_input_tuple (post, lang_perl);
+ append_input_tuple (post, lang_other);
+ append_input_tuple (post, start_using);
+ append_input_tuple (post, start_using_unit);
+ append_input_tuple (post, version);
+ append_input_tuple (post, version_other);
+ append_input_tuple (post, os);
+ string_append_input_key_value_tuple (post, "linux", priv->os_linux);
+ string_append_input_key_value_tuple (post, "bsd", priv->os_bsd);
+ string_append_input_key_value_tuple (post, "windows", priv->os_windows);
+ string_append_input_key_value_tuple (post, "osx", priv->os_osx);
+ string_append_input_key_value_tuple (post, "solaris", priv->os_solaris);
+ append_input_tuple (post, os_other);
+ append_input_tuple (post, freq);
+ append_input_tuple (post, user_level);
+ append_input_tuple (post, soft_free);
+ append_input_tuple (post, soft_open);
+ append_input_tuple (post, soft_commercial);
+ append_input_tuple (post, soft_none);
+ append_input_tuple (post, field_academic);
+ append_input_tuple (post, field_accounting);
+ append_input_tuple (post, field_desktop);
+ append_input_tuple (post, field_educational);
+ append_input_tuple (post, field_embedded);
+ append_input_tuple (post, field_medical);
+ append_input_tuple (post, field_industrial);
+ append_input_tuple (post, field_scientific);
+ append_input_tuple (post, field_other);
+ append_input_tuple (post, improvement);
+ append_input_tuple (post, problem);
+ append_input_tuple (post, problem_other);
+ append_input_tuple (post, bug);
+ append_input_tuple (post, bugzilla);
+ append_input_tuple (post, contributing);
+ append_input_tuple (post, contributing_whynot);
+ append_input_tuple (post, comments);
+
+ glade_http_request_send_async (priv->http, priv->cancellable,
+ "POST /~jpu/glade/registration_master.php HTTP/1.1\r\n"
+ "Host: %s\r\n"
+ "User-Agent: Glade/"PACKAGE_VERSION" (%s; Gtk+ %d.%d.%d; glib %d.%d.%d)\r\n"
+ "Connection: close\r\n"
+ "Accept: text/plain\r\n"
+ "Content-Type: application/x-www-form-urlencoded\r\n"
+ "Content-Length: %d\r\n"
+ "\r\n"
+ "%s",
+ glade_http_get_host (priv->http),
+ get_gdk_backend (GTK_WIDGET (dialog)),
+ GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION,
+ glib_major_version, glib_minor_version, glib_micro_version,
+ post->len,
+ post->str);
+
+ g_string_free (post, TRUE);
+}
+
+static void
+on_privacy_button_clicked (GtkButton *button, GtkScrolledWindow *swindow)
+{
+ GtkAdjustment *adj = gtk_scrolled_window_get_vadjustment (swindow);
+ gtk_adjustment_set_value (adj, gtk_adjustment_get_upper (adj));
+}
+
+static void
+toggle_button_set_visible_on_toggle (GtkToggleButton *button, GtkWidget *widget)
+{
+ gtk_widget_set_visible (widget, gtk_toggle_button_get_active (button));
+}
+
+static void
+toggle_button_set_sensitive_on_toggle (GtkToggleButton *button, GtkWidget *widget)
+{
+ gtk_widget_set_sensitive (widget, gtk_toggle_button_get_active (button));
+}
+
+static void
+glade_registration_set_css_provider_forall (GtkWidget *widget, gpointer data)
+{
+ gtk_style_context_add_provider (gtk_widget_get_style_context (widget),
+ GTK_STYLE_PROVIDER (data),
+ GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+
+ if (GTK_IS_CONTAINER (widget))
+ gtk_container_forall (GTK_CONTAINER (widget), glade_registration_set_css_provider_forall, data);
+}
+
+static gboolean
+on_viewport_draw (GtkWidget *widget, cairo_t *cr)
+{
+ GdkWindow *window = gtk_viewport_get_bin_window (GTK_VIEWPORT (widget));
+
+ if (gtk_cairo_should_draw_window (cr, window))
+ {
+ GtkAllocation alloc;
+ gdouble scale;
+
+ gtk_widget_get_allocation (widget, &alloc);
+
+ scale = MIN (alloc.width/GLADE_LOGO_WIDTH, alloc.height/GLADE_LOGO_HEIGHT) - .1;
+
+ cairo_save (cr);
+
+ cairo_set_source_rgba (cr, 0, 0, 0, .04);
+ cairo_scale (cr, scale, scale);
+ cairo_translate (cr, (alloc.width / scale) - GLADE_LOGO_WIDTH*.95,
+ (alloc.height / scale) - GLADE_LOGO_HEIGHT);
+ cairo_append_path (cr, &glade_logo_path);
+ cairo_fill (cr);
+
+ cairo_restore (cr);
+ }
+
+ gtk_container_propagate_draw (GTK_CONTAINER (widget),
+ gtk_bin_get_child (GTK_BIN (widget)),
+ cr);
+ return TRUE;
+}
+
+static void
+glade_registration_init (GladeRegistration *registration)
+{
+ GladeRegistrationPrivate *priv = glade_registration_get_instance_private (registration);
+ GtkCssProvider *css_provider;
+ GFile *file;
+
+ registration->priv = priv;
+
+ /* HTTPS default port is 443 */
+ priv->http = glade_http_new ("people.gnome.org", 443, TRUE);
+
+ g_signal_connect_object (priv->http, "request-done",
+ G_CALLBACK (on_http_request_done),
+ registration, 0);
+ g_signal_connect_object (priv->http, "status",
+ G_CALLBACK (on_http_status),
+ registration, 0);
+
+ gtk_widget_init_template (GTK_WIDGET (registration));
+
+ /* Apply Custom CSS */
+ css_provider = gtk_css_provider_new ();
+ file = g_file_new_for_uri ("resource:///org/gnome/glade/glade-registration.css");
+ if (gtk_css_provider_load_from_file (css_provider, file, NULL))
+ glade_registration_set_css_provider_forall (GTK_WIDGET (registration), css_provider);
+ g_object_unref (file);
+
+ if (GTK_IS_COMBO_BOX_TEXT (priv->version_other))
+ {
+ GtkComboBoxText *combo = GTK_COMBO_BOX_TEXT (priv->version_other);
+ gchar id[16], text[18];
+ gint minor;
+
+ for (minor = 0; minor <= GLADE_MINOR_VERSION; minor+=2)
+ {
+ g_snprintf (id, 16, "%d", minor);
+ g_snprintf (text, 18, "3.%d", minor);
+ gtk_combo_box_text_append (combo, id, text);
+ }
+
+ gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
+ }
+}
+
+static void
+glade_registration_finalize (GObject *object)
+{
+ GladeRegistrationPrivate *priv = GLADE_REGISTRATION (object)->priv;
+
+ g_clear_object (&priv->http);
+ g_clear_object (&priv->cancellable);
+
+ G_OBJECT_CLASS (glade_registration_parent_class)->finalize (object);
+}
+
+static void
+glade_registration_class_init (GladeRegistrationClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/glade/glade-registration.glade");
+
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, infobar);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, net_spinner);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, infobar_label);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, status_label);
+
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, name);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, email);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, country_id);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, city);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, contact_type);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, contact_name);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, contact_website);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, subscribe);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, validation_token);
+
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, experience);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, experience_unit);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, experience_not_programmer);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, lang_c);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, lang_cpp);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, lang_csharp);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, lang_java);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, lang_python);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, lang_javascript);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, lang_vala);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, lang_perl);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, lang_other);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, start_using);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, start_using_unit);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, version);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, version_other);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, os);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, os_linux);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, os_bsd);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, os_windows);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, os_osx);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, os_solaris);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, os_other);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, freq);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, user_level);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, soft_free);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, soft_open);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, soft_commercial);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, soft_none);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, field_academic);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, field_accounting);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, field_desktop);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, field_educational);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, field_embedded);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, field_medical);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, field_industrial);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, field_scientific);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, field_other);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, improvement);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, problem);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, problem_other);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, bug);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, bugzilla);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, contributing);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, contributing_whynot);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, comments);
+
+ gtk_widget_class_bind_template_callback (widget_class, on_registration_dialog_response);
+ gtk_widget_class_bind_template_callback (widget_class, on_privacy_button_clicked);
+ gtk_widget_class_bind_template_callback (widget_class, toggle_button_set_visible_on_toggle);
+ gtk_widget_class_bind_template_callback (widget_class, toggle_button_set_sensitive_on_toggle);
+ gtk_widget_class_bind_template_callback (widget_class, on_viewport_draw);
+
+ object_class->finalize = glade_registration_finalize;
+}
+
+GtkWidget*
+glade_registration_new (void)
+{
+ return GTK_WIDGET (g_object_new (GLADE_TYPE_REGISTRATION, NULL));
+}
+
diff --git a/src/glade-registration.css b/src/glade-registration.css
new file mode 100644
index 0000000..df6e597
--- /dev/null
+++ b/src/glade-registration.css
@@ -0,0 +1,86 @@
+/*
+ * Glade - A user interface designer for GTK+ and GNOME
+ * Copyright (C) 2014 Juan Pablo Ugarte
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Author: Juan Pablo Ugarte <juanpablougarte gmail com>
+ *
+ */
+
+GtkFrame {
+ background: none;
+}
+
+GtkScrolledWindow.survey_page {
+ border: 0px;
+ margin: 0px;
+ padding:0px;
+ background: white;
+ background-size: 100%;
+}
+
+GtkButtonBox.title,
+GtkFrame.title {
+ background-color: #4a90d9;
+ border-radius: 8px;
+ padding: 8px;
+ box-shadow: 2px 2px 4px gray;
+}
+
+GtkFrame.title > GtkLabel {
+ color: white;
+ font-size: 14pt;
+ font-weight: bold;
+ text-shadow: 1px 1px 2px black;
+}
+
+GtkFrame.survey_question {
+ border: 4px solid;
+ border-color: #c1c0bf;
+ border-radius: 16px;
+ padding: 8px;
+}
+
+GtkFrame.textbox {
+ border-radius: 16px;
+ background-color: #656565;
+ box-shadow: 4px 4px 2px #333;
+ padding: 8px;
+}
+
+GtkFrame.textbox GtkButton,
+GtkFrame.textbox GtkLabel {
+ color: white;
+ text-shadow: 1px 1px 1px black;
+}
+
+GtkLabel.textbox_title {
+ font-size: 10pt;
+ font-weight: bold;
+}
+
+GtkLabel.survey_question,
+GtkFrame.survey_question > GtkBox > GtkLabel {
+ font-size: 10pt;
+ font-weight: bold;
+ padding: 0px 0px 8px 0px;
+ text-shadow: 1px 1px white;
+}
+
+GtkCheckButton:hover {
+ background-color:white;
+}
+
diff --git a/src/glade-registration.glade b/src/glade-registration.glade
new file mode 100644
index 0000000..5219ae7
--- /dev/null
+++ b/src/glade-registration.glade
@@ -0,0 +1,2982 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.16.0
+
+Glade - A user interface designer for GTK+ and GNOME
+Copyright (C) 2014 Juan Pablo Ugarte
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+Author: Juan Pablo Ugarte <juanpablougarte gmail com>
+
+-->
+<interface>
+ <requires lib="gtk+" version="3.10"/>
+ <!-- interface-css-provider-path glade-registration.css -->
+ <!-- interface-license-type gplv2 -->
+ <!-- interface-name Glade -->
+ <!-- interface-description A user interface designer for GTK+ and GNOME -->
+ <!-- interface-copyright 2013 Juan Pablo Ugarte -->
+ <!-- interface-authors Juan Pablo Ugarte <juanpablougarte gmail com> -->
+ <object class="GtkAdjustment" id="experience_adjustment">
+ <property name="upper">256</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ </object>
+ <object class="GtkAdjustment" id="start_using_adjustment">
+ <property name="upper">256</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ </object>
+ <template class="GladeRegistration" parent="GtkDialog">
+ <property name="can_focus">False</property>
+ <property name="title" translatable="yes">Glade registration & User survey</property>
+ <property name="default_width">512</property>
+ <property name="default_height">640</property>
+ <property name="icon_name">glade</property>
+ <property name="type_hint">dialog</property>
+ <signal name="response" handler="on_registration_dialog_response" swapped="no"/>
+ <child internal-child="vbox">
+ <object class="GtkBox" id="dialog-vbox1">
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child>
+ <object class="GtkInfoBar" id="infobar">
+ <property name="app_paintable">True</property>
+ <property name="can_focus">False</property>
+ <property name="vexpand">False</property>
+ <property name="show_close_button">True</property>
+ <signal name="close" handler="gtk_widget_hide" swapped="no"/>
+ <signal name="response" handler="gtk_widget_hide" swapped="no"/>
+ <child internal-child="action_area">
+ <object class="GtkButtonBox" id="infobar-action_area1">
+ <property name="can_focus">False</property>
+ <property name="spacing">6</property>
+ <property name="layout_style">end</property>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child internal-child="content_area">
+ <object class="GtkBox" id="infobar-content_area1">
+ <property name="can_focus">False</property>
+ <property name="spacing">16</property>
+ <child>
+ <object class="GtkLabel" id="infobar_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="no_show_all">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="min_content_height">480</property>
+ <child>
+ <object class="GtkViewport" id="viewport">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <signal name="draw" handler="on_viewport_draw" swapped="no"/>
+ <child>
+ <object class="GtkBox" id="box16">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">8</property>
+ <child>
+ <object class="GtkFrame" id="frame2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="vexpand">False</property>
+ <property name="border_width">6</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkLabel" id="label24">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes"> User Information</property>
+ </object>
+ </child>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ <style>
+ <class name="title"/>
+ </style>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box12">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="valign">start</property>
+ <property name="margin_left">12</property>
+ <property name="margin_end">12</property>
+ <property name="margin_right">12</property>
+ <property name="hexpand">False</property>
+ <property name="vexpand">False</property>
+ <property name="spacing">4</property>
+ <child>
+ <object class="GtkFrame" id="frame20">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkGrid" id="grid1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="column_spacing">4</property>
+ <child>
+ <object class="GtkEntry" id="name">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="width_chars">32</property>
+ <property name="placeholder_text" translatable="yes"><Your name or
nickname is required></property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">Name:</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">Email:</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="email">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Tokens are processed
manually in batches.
+Please be patient.</property>
+ <property name="margin_top">4</property>
+ <property name="placeholder_text" translatable="yes"><Required to
send back registration token></property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">Country:</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label19">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">City:</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBoxText" id="contact_type">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="active">0</property>
+ <items>
+ <item id="c" translatable="yes">Company</item>
+ <item id="o" translatable="yes">Organization</item>
+ <item id="p" translatable="yes">Personal</item>
+ </items>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">4</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label27">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">Website</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">5</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="city">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="width_chars">16</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="contact_name">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">4</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="contact_website">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">5</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="subscribe">
+ <property name="label" translatable="yes">Subscribe me to the mailing
list</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Subscribe to Glade
Users mailing list.
+You will be sent email requesting confirmation!</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">6</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBoxText" id="country_id">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_top">4</property>
+ <property name="margin_bottom">4</property>
+ <property name="active">0</property>
+ <items>
+ <item id="other">Choose your country</item>
+ <item id="af">Afghanistan</item>
+ <item id="ax">Ã…land Islands</item>
+ <item id="al">Albania</item>
+ <item id="dz">Algeria</item>
+ <item id="as">American Samoa</item>
+ <item id="ao">Angola</item>
+ <item id="ai">Anguilla</item>
+ <item id="aq">Antarctica</item>
+ <item id="ag">Antigua and Barbuda</item>
+ <item id="ar">Argentina</item>
+ <item id="am">Armenia</item>
+ <item id="aw">Aruba</item>
+ <item id="au">Australia</item>
+ <item id="at">Austria</item>
+ <item id="az">Azerbaijan</item>
+ <item id="bs">Bahamas</item>
+ <item id="bh">Bahrain</item>
+ <item id="bd">Bangladesh</item>
+ <item id="bb">Barbados</item>
+ <item id="by">Belarus</item>
+ <item id="be">Belgium</item>
+ <item id="bz">Belize</item>
+ <item id="bj">Benin</item>
+ <item id="bm">Bermuda</item>
+ <item id="bt">Bhutan</item>
+ <item id="bo">Bolivia, Plurinational State of</item>
+ <item id="bq">Bonaire, Sint Eustatius and Saba</item>
+ <item id="ba">Bosnia and Herzegovina</item>
+ <item id="bw">Botswana</item>
+ <item id="bv">Bouvet Island</item>
+ <item id="br">Brazil</item>
+ <item id="io">British Indian Ocean Territory</item>
+ <item id="bn">Brunei Darussalam</item>
+ <item id="bg">Bulgaria</item>
+ <item id="bf">Burkina Faso</item>
+ <item id="bi">Burundi</item>
+ <item id="kh">Cambodia</item>
+ <item id="cm">Cameroon</item>
+ <item id="ca">Canada</item>
+ <item id="cv">Cape Verde</item>
+ <item id="ky">Cayman Islands</item>
+ <item id="cf">Central African Republic</item>
+ <item id="td">Chad</item>
+ <item id="cl">Chile</item>
+ <item id="cn">China</item>
+ <item id="cx">Christmas Island</item>
+ <item id="cc">Cocos (Keeling) Islands</item>
+ <item id="co">Colombia</item>
+ <item id="km">Comoros</item>
+ <item id="cg">Congo</item>
+ <item id="cd">Congo, The Democratic Republic of the</item>
+ <item id="ck">Cook Islands</item>
+ <item id="cr">Costa Rica</item>
+ <item id="ci">Côte D'ivoire</item>
+ <item id="hr">Croatia</item>
+ <item id="cu">Cuba</item>
+ <item id="cw">Curaçao</item>
+ <item id="cy">Cyprus</item>
+ <item id="cz">Czech Republic</item>
+ <item id="dk">Denmark</item>
+ <item id="dj">Djibouti</item>
+ <item id="dm">Dominica</item>
+ <item id="do">Dominican Republic</item>
+ <item id="ec">Ecuador</item>
+ <item id="eg">Egypt</item>
+ <item id="sv">El Salvador</item>
+ <item id="gq">Equatorial Guinea</item>
+ <item id="er">Eritrea</item>
+ <item id="ee">Estonia</item>
+ <item id="et">Ethiopia</item>
+ <item id="fk">Falkland Islands (Malvinas)</item>
+ <item id="fo">Faroe Islands</item>
+ <item id="fj">Fiji</item>
+ <item id="fi">Finland</item>
+ <item id="fr">France</item>
+ <item id="gf">French Guiana</item>
+ <item id="pf">French Polynesia</item>
+ <item id="tf">French Southern Territories</item>
+ <item id="ga">Gabon</item>
+ <item id="gm">Gambia</item>
+ <item id="ge">Georgia</item>
+ <item id="de">Germany</item>
+ <item id="gh">Ghana</item>
+ <item id="gi">Gibraltar</item>
+ <item id="gr">Greece</item>
+ <item id="gl">Greenland</item>
+ <item id="gd">Grenada</item>
+ <item id="gp">Guadeloupe</item>
+ <item id="gu">Guam</item>
+ <item id="gt">Guatemala</item>
+ <item id="gg">Guernsey</item>
+ <item id="gn">Guinea</item>
+ <item id="gw">Guinea-bissau</item>
+ <item id="gy">Guyana</item>
+ <item id="ht">Haiti</item>
+ <item id="hm">Heard Island and Mcdonald Islands</item>
+ <item id="va">Holy See (Vatican City State)</item>
+ <item id="hn">Honduras</item>
+ <item id="hk">Hong Kong</item>
+ <item id="hu">Hungary</item>
+ <item id="is">Iceland</item>
+ <item id="in">India</item>
+ <item id="id">Indonesia</item>
+ <item id="ir">Iran, Islamic Republic of</item>
+ <item id="iq">Iraq</item>
+ <item id="ie">Ireland</item>
+ <item id="im">Isle of Man</item>
+ <item id="il">Israel</item>
+ <item id="it">Italy</item>
+ <item id="jm">Jamaica</item>
+ <item id="jp">Japan</item>
+ <item id="je">Jersey</item>
+ <item id="jo">Jordan</item>
+ <item id="kz">Kazakhstan</item>
+ <item id="ke">Kenya</item>
+ <item id="ki">Kiribati</item>
+ <item id="kp">Korea, Democratic People's Republic of</item>
+ <item id="kr">Korea, Republic of</item>
+ <item id="kw">Kuwait</item>
+ <item id="kg">Kyrgyzstan</item>
+ <item id="la">Lao People's Democratic Republic</item>
+ <item id="lv">Latvia</item>
+ <item id="lb">Lebanon</item>
+ <item id="ls">Lesotho</item>
+ <item id="lr">Liberia</item>
+ <item id="ly">Libya</item>
+ <item id="li">Liechtenstein</item>
+ <item id="lt">Lithuania</item>
+ <item id="lu">Luxembourg</item>
+ <item id="mo">Macao</item>
+ <item id="mk">Macedonia, The Former Yugoslav Republic of</item>
+ <item id="mg">Madagascar</item>
+ <item id="mw">Malawi</item>
+ <item id="my">Malaysia</item>
+ <item id="mv">Maldives</item>
+ <item id="ml">Mali</item>
+ <item id="mt">Malta</item>
+ <item id="mh">Marshall Islands</item>
+ <item id="mq">Martinique</item>
+ <item id="mr">Mauritania</item>
+ <item id="mu">Mauritius</item>
+ <item id="yt">Mayotte</item>
+ <item id="mx">Mexico</item>
+ <item id="fm">Micronesia, Federated States of</item>
+ <item id="md">Moldova, Republic of</item>
+ <item id="mc">Monaco</item>
+ <item id="mn">Mongolia</item>
+ <item id="me">Montenegro</item>
+ <item id="ms">Montserrat</item>
+ <item id="ma">Morocco</item>
+ <item id="mz">Mozambique</item>
+ <item id="mm">Myanmar</item>
+ <item id="na">Namibia</item>
+ <item id="nr">Nauru</item>
+ <item id="np">Nepal</item>
+ <item id="nl">Netherlands</item>
+ <item id="nc">New Caledonia</item>
+ <item id="nz">New Zealand</item>
+ <item id="ni">Nicaragua</item>
+ <item id="ne">Niger</item>
+ <item id="ng">Nigeria</item>
+ <item id="nu">Niue</item>
+ <item id="nf">Norfolk Island</item>
+ <item id="mp">Northern Mariana Islands</item>
+ <item id="no">Norway</item>
+ <item id="om">Oman</item>
+ <item id="pk">Pakistan</item>
+ <item id="pw">Palau</item>
+ <item id="ps">Palestine, State of</item>
+ <item id="pa">Panama</item>
+ <item id="pg">Papua New Guinea</item>
+ <item id="py">Paraguay</item>
+ <item id="pe">Peru</item>
+ <item id="ph">Philippines</item>
+ <item id="pn">Pitcairn</item>
+ <item id="pl">Poland</item>
+ <item id="pt">Portugal</item>
+ <item id="pr">Puerto Rico</item>
+ <item id="qa">Qatar</item>
+ <item id="re">Réunion</item>
+ <item id="ro">Romania</item>
+ <item id="ru">Russian Federation</item>
+ <item id="rw">Rwanda</item>
+ <item id="bl">Saint Barthélemy</item>
+ <item id="sh">Saint Helena, Ascension and Tristan Da Cunha</item>
+ <item id="kn">Saint Kitts and Nevis</item>
+ <item id="lc">Saint Lucia</item>
+ <item id="mf">Saint Martin (French Part)</item>
+ <item id="pm">Saint Pierre and Miquelon</item>
+ <item id="vc">Saint Vincent and The Grenadines</item>
+ <item id="ws">Samoa</item>
+ <item id="sm">San Marino</item>
+ <item id="st">Sao Tome and Principe</item>
+ <item id="sa">Saudi Arabia</item>
+ <item id="sn">Senegal</item>
+ <item id="rs">Serbia</item>
+ <item id="sc">Seychelles</item>
+ <item id="sl">Sierra Leone</item>
+ <item id="sg">Singapore</item>
+ <item id="sx">Sint Maarten (Dutch Part)</item>
+ <item id="sk">Slovakia</item>
+ <item id="si">Slovenia</item>
+ <item id="sb">Solomon Islands</item>
+ <item id="so">Somalia</item>
+ <item id="za">South Africa</item>
+ <item id="gs">South Georgia and The South Sandwich Islands</item>
+ <item id="ss">South Sudan</item>
+ <item id="es">Spain</item>
+ <item id="lk">Sri Lanka</item>
+ <item id="sd">Sudan</item>
+ <item id="sr">Suriname</item>
+ <item id="sj">Svalbard and Jan Mayen</item>
+ <item id="sz">Swaziland</item>
+ <item id="se">Sweden</item>
+ <item id="ch">Switzerland</item>
+ <item id="sy">Syrian Arab Republic</item>
+ <item id="tw">Taiwan, Province of China</item>
+ <item id="tj">Tajikistan</item>
+ <item id="tz">Tanzania, United Republic of</item>
+ <item id="th">Thailand</item>
+ <item id="tl">Timor-leste</item>
+ <item id="tg">Togo</item>
+ <item id="tk">Tokelau</item>
+ <item id="to">Tonga</item>
+ <item id="tt">Trinidad and Tobago</item>
+ <item id="tn">Tunisia</item>
+ <item id="tr">Turkey</item>
+ <item id="tm">Turkmenistan</item>
+ <item id="tc">Turks and Caicos Islands</item>
+ <item id="tv">Tuvalu</item>
+ <item id="ug">Uganda</item>
+ <item id="ua">Ukraine</item>
+ <item id="ae">United Arab Emirates</item>
+ <item id="gb">United Kingdom</item>
+ <item id="us">United States</item>
+ <item id="um">United States Minor Outlying Islands</item>
+ <item id="uy">Uruguay</item>
+ <item id="uz">Uzbekistan</item>
+ <item id="vu">Vanuatu</item>
+ <item id="ve">Venezuela, Bolivarian Republic of</item>
+ <item id="vn">Vietnam</item>
+ <item id="vg">Virgin Islands, British</item>
+ <item id="vi">Virgin Islands, U.S.</item>
+ <item id="wf">Wallis and Futuna</item>
+ <item id="eh">Western Sahara</item>
+ <item id="ye">Yemen</item>
+ <item id="zm">Zambia</item>
+ <item id="zw">Zimbabwe</item>
+ </items>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ <style>
+ <class name="survey_question"/>
+ </style>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="hexpand">False</property>
+ <property name="vexpand">False</property>
+ <property name="border_width">6</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkBox" id="box2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="label6">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">We care about
privacy!</property>
+ <property name="wrap">True</property>
+ <property name="max_width_chars">8</property>
+ <style>
+ <class name="textbox_title"/>
+ </style>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label25">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">All the data will be stored in
a private location and will not be shared with the public or any third party.</property>
+ <property name="wrap">True</property>
+ <property name="wrap_mode">word-char</property>
+ <property name="width_chars">18</property>
+ <property name="max_width_chars">18</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="privacy_button">
+ <property name="label" translatable="yes">See Privacy Note</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="halign">end</property>
+ <property name="relief">none</property>
+ <signal name="clicked" handler="on_privacy_button_clicked"
object="scrolledwindow" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ <style>
+ <class name="textbox"/>
+ </style>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box14">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_left">12</property>
+ <property name="margin_right">12</property>
+ <property name="spacing">4</property>
+ <child>
+ <object class="GtkCheckButton" id="checkbutton2">
+ <property name="label" translatable="yes">Update Info</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="toggle_button_set_sensitive_on_toggle"
object="validation_token" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="validation_token">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="width_chars">48</property>
+ <property name="placeholder_text" translatable="yes"><Insert update token, if
you want to update previously sent data></property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="border_width">6</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkLabel" id="label12">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes"> Glade User Survey</property>
+ </object>
+ </child>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ <style>
+ <class name="title"/>
+ </style>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box20">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_left">12</property>
+ <property name="margin_end">12</property>
+ <property name="margin_right">12</property>
+ <property name="margin_bottom">4</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">8</property>
+ <child>
+ <object class="GtkFrame" id="frame5">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkBox" id="box1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="label5">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">How long have you been
programming?</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">4</property>
+ <child>
+ <object class="GtkSpinButton" id="experience">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="text" translatable="yes">0</property>
+ <property name="adjustment">experience_adjustment</property>
+ <property name="numeric">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBoxText" id="experience_unit">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="active">0</property>
+ <items>
+ <item id="y" translatable="yes">years</item>
+ <item id="m" translatable="yes">months</item>
+ </items>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="experience_not_programmer">
+ <property name="label" translatable="yes">I am not a
programmer</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ <style>
+ <class name="survey_question"/>
+ </style>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame6">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkBox" id="box22">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="label7">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Which programming languages do
you prefer?</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box13">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">8</property>
+ <child>
+ <object class="GtkCheckButton" id="lang_c">
+ <property name="label" translatable="yes">C</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="lang_cpp">
+ <property name="label" translatable="yes">C++</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="lang_csharp">
+ <property name="label" translatable="yes">C#</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="lang_java">
+ <property name="label" translatable="yes">Java</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="lang_python">
+ <property name="label" translatable="yes">Python</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="lang_javascript">
+ <property name="label" translatable="yes">Javascript</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">5</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="lang_vala">
+ <property name="label" translatable="yes">Vala</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">6</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="lang_perl">
+ <property name="label" translatable="yes">Perl</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">7</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="lang_other">
+ <property name="label" translatable="yes">Other</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">8</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ <style>
+ <class name="survey_question"/>
+ </style>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame7">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkBox" id="box25">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="label8">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">When did you start using
Glade?</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">4</property>
+ <child>
+ <object class="GtkSpinButton" id="start_using">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="text" translatable="yes">0</property>
+ <property name="adjustment">start_using_adjustment</property>
+ <property name="numeric">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBoxText" id="start_using_unit">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="active">0</property>
+ <items>
+ <item id="y" translatable="yes">years</item>
+ <item id="m" translatable="yes">months</item>
+ </items>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label21">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">ago</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ <style>
+ <class name="survey_question"/>
+ </style>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame8">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkBox" id="box26">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="label22">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Which version do you normally
use?</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box10">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkRadioButton" id="version">
+ <property name="label" translatable="yes">What is available in my
OS</property>
+ <property name="name">0</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="version_stable">
+ <property name="label" translatable="yes">Latest stable from
sources</property>
+ <property name="name">1</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">version</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="version_3_8">
+ <property name="label" translatable="yes">3.8 for Gtk+ 2</property>
+ <property name="name">2</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">version</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="version_master">
+ <property name="label" translatable="yes">Master</property>
+ <property name="name">3</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">version</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box23">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkRadioButton" id="version_other_radio">
+ <property name="label" translatable="yes">Other</property>
+ <property name="name">4</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">version</property>
+ <signal name="toggled"
handler="toggle_button_set_visible_on_toggle" object="version_other" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBoxText" id="version_other">
+ <property name="can_focus">False</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ <style>
+ <class name="survey_question"/>
+ </style>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame9">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkBox" id="box27">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="label9">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">On what operating
systems?</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkGrid" id="grid2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkComboBoxText" id="os_linux">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="active">0</property>
+ <items>
+ <item id="0" translatable="yes">distribution</item>
+ <item id="1" translatable="yes">Arch Linux</item>
+ <item id="2" translatable="yes">Debian</item>
+ <item id="3" translatable="yes">openSUSE</item>
+ <item id="4" translatable="yes">Fedora</item>
+ <item id="5" translatable="yes">Gentoo</item>
+ <item id="6" translatable="yes">Mandriva</item>
+ <item id="7" translatable="yes">Red Hat</item>
+ <item id="8" translatable="yes">Turbolinux</item>
+ <item id="9" translatable="yes">Ubuntu</item>
+ <item id="10" translatable="yes">Xandros</item>
+ <item id="11" translatable="yes">Oracle</item>
+ <item id="-1" translatable="yes">Other</item>
+ </items>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBoxText" id="os_bsd">
+ <property name="can_focus">False</property>
+ <property name="active">0</property>
+ <items>
+ <item id="0" translatable="yes">variant</item>
+ <item id="1" translatable="yes">FreeBSD</item>
+ <item id="2" translatable="yes">OpenBSD</item>
+ <item id="3" translatable="yes">NetBSD</item>
+ <item id="-1" translatable="yes">Other</item>
+ </items>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBoxText" id="os_solaris">
+ <property name="can_focus">False</property>
+ <property name="active">0</property>
+ <items>
+ <item id="0" translatable="yes">variant</item>
+ <item id="1" translatable="yes">Oracle Solaris</item>
+ <item id="2" translatable="yes">OpenSolaris</item>
+ <item id="3" translatable="yes">illumos</item>
+ <item id="-1" translatable="yes">Other</item>
+ </items>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">4</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="os_other">
+ <property name="can_focus">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">5</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBoxText" id="os_windows">
+ <property name="can_focus">False</property>
+ <property name="active">0</property>
+ <items>
+ <item id="0" translatable="yes">version</item>
+ <item id="1" translatable="yes">2000</item>
+ <item id="2" translatable="yes">XP</item>
+ <item id="3" translatable="yes">2003</item>
+ <item id="4" translatable="yes">Vista</item>
+ <item id="5" translatable="yes">2008</item>
+ <item id="6" translatable="yes">7</item>
+ <item id="7" translatable="yes">8</item>
+ <item id="8" translatable="yes">2012</item>
+ <item id="-1" translatable="yes">Other</item>
+ </items>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBoxText" id="os_osx">
+ <property name="can_focus">False</property>
+ <property name="active">0</property>
+ <items>
+ <item id="0" translatable="yes">version</item>
+ <item id="1" translatable="yes">Tiger</item>
+ <item id="2" translatable="yes">Leopard</item>
+ <item id="3" translatable="yes">Snow Leopard</item>
+ <item id="4" translatable="yes">Lion</item>
+ <item id="5" translatable="yes">Mountain Lion</item>
+ <item id="6" translatable="yes">Mavericks</item>
+ <item id="-1" translatable="yes">Other</item>
+ </items>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="os">
+ <property name="label" translatable="yes">GNU/Linux</property>
+ <property name="name">0</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="toggle_button_set_visible_on_toggle"
object="os_linux" swapped="no"/>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="os_bsd_radiobutton">
+ <property name="label" translatable="yes">BSD</property>
+ <property name="name">1</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">os</property>
+ <signal name="toggled" handler="toggle_button_set_visible_on_toggle"
object="os_bsd" swapped="no"/>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="os_windows_radiobutton">
+ <property name="label" translatable="yes">Windows</property>
+ <property name="name">2</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">os</property>
+ <signal name="toggled" handler="toggle_button_set_visible_on_toggle"
object="os_windows" swapped="no"/>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="os_osx_radiobutton">
+ <property name="label" translatable="yes">Mac OSX</property>
+ <property name="name">3</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">os</property>
+ <signal name="toggled" handler="toggle_button_set_visible_on_toggle"
object="os_osx" swapped="no"/>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="os_solaris_radiobutton">
+ <property name="label" translatable="yes">Solaris</property>
+ <property name="name">4</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">os</property>
+ <signal name="toggled" handler="toggle_button_set_visible_on_toggle"
object="os_solaris" swapped="no"/>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">4</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="os_other_radiobutton">
+ <property name="label" translatable="yes">Other</property>
+ <property name="name">5</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">os</property>
+ <signal name="toggled" handler="toggle_button_set_visible_on_toggle"
object="os_other" swapped="no"/>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">5</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ <style>
+ <class name="survey_question"/>
+ </style>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">5</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame10">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkBox" id="box28">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="label10">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">How often do you use
it?</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box6">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkRadioButton" id="freq">
+ <property name="label" translatable="yes">Every day</property>
+ <property name="name">0</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="freq_few_week_radiobutton">
+ <property name="label" translatable="yes">Few days a week</property>
+ <property name="name">1</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">freq</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="freq_week_radiobutton">
+ <property name="label" translatable="yes">Every week</property>
+ <property name="name">2</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">freq</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="freq_few_month_radiobutton">
+ <property name="label" translatable="yes">A few times a
months</property>
+ <property name="name">3</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">freq</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="freq_month_radiobutton">
+ <property name="label" translatable="yes">Once a month</property>
+ <property name="name">4</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">freq</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="freq_few_year_radiobutton">
+ <property name="label" translatable="yes">A few times a
year</property>
+ <property name="name">5</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">freq</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">5</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ <style>
+ <class name="survey_question"/>
+ </style>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">6</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame11">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">out</property>
+ <child>
+ <object class="GtkBox" id="box29">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="label11">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">What level of Glade user would
you say you are?</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box5">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">4</property>
+ <child>
+ <object class="GtkRadioButton" id="user_level">
+ <property name="label" translatable="yes">Beginner</property>
+ <property name="name">0</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="user_intermediate_radiobutton">
+ <property name="label" translatable="yes">Intermediate</property>
+ <property name="name">1</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">user_level</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="user_advanced_radiobutton">
+ <property name="label" translatable="yes">Advanced</property>
+ <property name="name">2</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">user_level</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ <style>
+ <class name="survey_question"/>
+ </style>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">7</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame12">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkBox" id="box30">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="label13">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Under what kind of license(s)
do you release the software you used Glade to create?</property>
+ <property name="wrap">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkGrid" id="grid3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkCheckButton" id="soft_free">
+ <property name="label" translatable="yes">Free software</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="soft_open">
+ <property name="label" translatable="yes">Open source
software</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="soft_commercial">
+ <property name="label" translatable="yes">Commercial/Closed
software</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="soft_none">
+ <property name="label" translatable="yes">None - distributed
internally</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ <style>
+ <class name="survey_question"/>
+ </style>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">8</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame15">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">out</property>
+ <child>
+ <object class="GtkBox" id="box33">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="label23">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">In what field(s) is the
software you used Glade to create generally used?</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkGrid" id="grid4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkCheckButton" id="field_academic">
+ <property name="label" translatable="yes">Academic</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="field_embedded">
+ <property name="label" translatable="yes">Embedded
applications</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="field_accounting">
+ <property name="label" translatable="yes">Accounting</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="field_desktop">
+ <property name="label" translatable="yes">Desktop
applications</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="field_educational">
+ <property name="label" translatable="yes">Educational</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="field_medical">
+ <property name="label" translatable="yes">Medical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="field_industrial">
+ <property name="label" translatable="yes">Industrial
applications</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="field_scientific">
+ <property name="label" translatable="yes">Scientific</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box24">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">4</property>
+ <child>
+ <object class="GtkCheckButton" id="field_other_checkbox">
+ <property name="label" translatable="yes">Other</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled"
handler="toggle_button_set_visible_on_toggle" object="field_other" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="field_other">
+ <property name="can_focus">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">4</property>
+ <property name="width">2</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ <style>
+ <class name="survey_question"/>
+ </style>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">9</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame16">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">out</property>
+ <child>
+ <object class="GtkBox" id="box34">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="label14">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">What aspect of the software
needs the most improvement?</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkTextView" id="improvement">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="accepts_tab">False</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ <style>
+ <class name="survey_question"/>
+ </style>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">10</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame17">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkBox" id="box35">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="label15">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">In your opinion what is the
biggest problem with Glade?</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box7">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkRadioButton" id="problem">
+ <property name="label" translatable="yes">Lack of
documentation</property>
+ <property name="name">0</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="opacity">0.9882352941176471</property>
+ <property name="halign">start</property>
+ <property name="xalign">0</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="problem_support_radiobutton">
+ <property name="label" translatable="yes">Lack of professional
support</property>
+ <property name="name">1</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="halign">start</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">problem</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="problem_training_radiobutton">
+ <property name="label" translatable="yes">Lack of professional
training</property>
+ <property name="name">2</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="halign">start</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">problem</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="problem_publicity_radiobutton">
+ <property name="label" translatable="yes">Lack of
publicity/exposure</property>
+ <property name="name">3</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="halign">start</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">problem</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="problem_binaries_radiobutton">
+ <property name="label" translatable="yes">Lack of official binary
releases for other OS (Win32, OSX)</property>
+ <property name="name">4</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="halign">start</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">problem</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="problem_other_radiobutton">
+ <property name="label" translatable="yes">Other</property>
+ <property name="name">5</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="halign">start</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">problem</property>
+ <signal name="toggled" handler="toggle_button_set_visible_on_toggle"
object="problem_other_scrolledwindow" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">5</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="problem_other_scrolledwindow">
+ <property name="can_focus">True</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkTextView" id="problem_other">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="accepts_tab">False</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ <style>
+ <class name="survey_question"/>
+ </style>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">11</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame13">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkBox" id="box31">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">4</property>
+ <child>
+ <object class="GtkLabel" id="label16">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Have you ever encountered a
bug?</property>
+ <property name="angle">0.059999998658895493</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box21">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">4</property>
+ <child>
+ <object class="GtkRadioButton" id="bug_yes">
+ <property name="label" translatable="yes">Yes</property>
+ <property name="name">1</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">bug</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="bug">
+ <property name="label" translatable="yes">No</property>
+ <property name="name">0</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ <style>
+ <class name="survey_question"/>
+ </style>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">12</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame14">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkBox" id="box32">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">4</property>
+ <child>
+ <object class="GtkLabel" id="label17">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">If so, did you file a bug
report?</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box19">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">4</property>
+ <child>
+ <object class="GtkRadioButton" id="bugzilla_yes">
+ <property name="label" translatable="yes">Yes</property>
+ <property name="name">1</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">bugzilla</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="bugzilla">
+ <property name="label" translatable="yes">No</property>
+ <property name="name">0</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ <style>
+ <class name="survey_question"/>
+ </style>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">13</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame18">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">out</property>
+ <child>
+ <object class="GtkBox" id="box36">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkBox" id="box17">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="label18">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Have you ever thought
about contributing?</property>
+ <style>
+ <class name="survey_question"/>
+ </style>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box18">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">4</property>
+ <child>
+ <object class="GtkRadioButton" id="contributing_yes">
+ <property name="label" translatable="yes">Yes</property>
+ <property name="name">1</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">contributing</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="contributing">
+ <property name="label" translatable="yes">No</property>
+ <property name="name">0</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled"
handler="toggle_button_set_visible_on_toggle" object="why_not_box" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="why_not_box">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="label20">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Why not?</property>
+ <style>
+ <class name="survey_question"/>
+ </style>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow4">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkTextView" id="contributing_whynot">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="accepts_tab">False</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ <style>
+ <class name="survey_question"/>
+ </style>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">14</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label26">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Comments:</property>
+ <style>
+ <class name="survey_question"/>
+ </style>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">15</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow3">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkTextView" id="comments">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="accepts_tab">False</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">16</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame19">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_top">12</property>
+ <property name="border_width">6</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkBox" id="box8">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="label28">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Privacy Note:</property>
+ <property name="wrap">True</property>
+ <style>
+ <class name="textbox_title"/>
+ </style>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label29">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">center</property>
+ <property name="valign">start</property>
+ <property name="hexpand">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">The sole purpose of this survey is
to better know our user base.
+Your email address will be used to uniquely identify you as a Glade user and send you back a modification
token in case you want to modify something or add extra comments.
+Only statistics compiled from the whole dataset will be shared publicly.
+Individual data will be stored in a private database and it will not be shared with the public or any other
third party. </property>
+ <property name="wrap">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ <style>
+ <class name="textbox"/>
+ </style>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">5</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <style>
+ <class name="survey_page"/>
+ </style>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <object class="GtkButtonBox" id="dialog-action_area1">
+ <property name="can_focus">False</property>
+ <property name="layout_style">end</property>
+ <child>
+ <object class="GtkBox" id="box9">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">4</property>
+ <child>
+ <object class="GtkSpinner" id="net_spinner">
+ <property name="can_focus">False</property>
+ <property name="active">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="status_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ <property name="secondary">True</property>
+ <property name="non_homogeneous">True</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="cancel_button">
+ <property name="label" translatable="yes">Cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="submit_button">
+ <property name="label" translatable="yes">Submit</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="tooltip_text" translatable="yes">Information will be sent to
https://people.gnome.org/~jpu</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="-6">cancel_button</action-widget>
+ <action-widget response="-10">submit_button</action-widget>
+ </action-widgets>
+ </template>
+</interface>
diff --git a/src/glade-registration.h b/src/glade-registration.h
new file mode 100644
index 0000000..eb65006
--- /dev/null
+++ b/src/glade-registration.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2014 Juan Pablo Ugarte.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Authors:
+ * Juan Pablo Ugarte <juanpablougarte gmail com>
+ */
+
+#ifndef _GLADE_REGISTRATION_H_
+#define _GLADE_REGISTRATION_H_
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define GLADE_TYPE_REGISTRATION (glade_registration_get_type ())
+#define GLADE_REGISTRATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GLADE_TYPE_REGISTRATION,
GladeRegistration))
+#define GLADE_REGISTRATION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GLADE_TYPE_REGISTRATION,
GladeRegistrationClass))
+#define GLADE_IS_REGISTRATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GLADE_TYPE_REGISTRATION))
+#define GLADE_IS_REGISTRATION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GLADE_TYPE_REGISTRATION))
+#define GLADE_REGISTRATION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GLADE_TYPE_REGISTRATION,
GladeRegistrationClass))
+
+typedef struct _GladeRegistrationClass GladeRegistrationClass;
+typedef struct _GladeRegistration GladeRegistration;
+typedef struct _GladeRegistrationPrivate GladeRegistrationPrivate;
+
+
+struct _GladeRegistrationClass
+{
+ GtkDialogClass parent_class;
+};
+
+struct _GladeRegistration
+{
+ GtkDialog parent_instance;
+
+ GladeRegistrationPrivate *priv;
+};
+
+GType glade_registration_get_type (void) G_GNUC_CONST;
+
+GtkWidget *glade_registration_new (void);
+
+G_END_DECLS
+
+#endif /* _GLADE_REGISTRATION_H_ */
+
diff --git a/src/glade-resources.gresource.xml b/src/glade-resources.gresource.xml
index 24462f3..4447f39 100644
--- a/src/glade-resources.gresource.xml
+++ b/src/glade-resources.gresource.xml
@@ -3,5 +3,7 @@
<gresource prefix="/org/gnome/glade">
<file compressed="true" preprocess="xml-stripblanks">glade.glade</file>
<file compressed="true" preprocess="xml-stripblanks">glade-preferences.glade</file>
+ <file compressed="true" preprocess="xml-stripblanks">glade-registration.glade</file>
+ <file compressed="true">glade-registration.css</file>
</gresource>
</gresources>
diff --git a/src/glade-window.c b/src/glade-window.c
index 8b93abd..64b4961 100644
--- a/src/glade-window.c
+++ b/src/glade-window.c
@@ -30,6 +30,7 @@
#include "glade-close-button.h"
#include "glade-resources.h"
#include "glade-preferences.h"
+#include "glade-registration.h"
#include <gladeui/glade.h>
#include <gladeui/glade-popup.h>
@@ -151,6 +152,8 @@ struct _GladeWindowPrivate
GtkWidget *left_paned;
GtkWidget *right_paned;
+ GtkWidget *registration; /* Registration and user survey dialog */
+
GdkRectangle position;
ToolDock docks[N_DOCKS];
};
@@ -2538,6 +2541,18 @@ add_project (GladeWindow *window, GladeProject *project, gboolean for_file)
gtk_widget_show (GTK_WIDGET (priv->editor));
}
+static void
+on_registration_action_activate (GtkAction *action,
+ GladeWindow *window)
+{
+ GladeWindowPrivate *priv = window->priv;
+
+ if (!priv->registration)
+ priv->registration = glade_registration_new ();
+
+ gtk_window_present (GTK_WINDOW (priv->registration));
+}
+
void
glade_window_new_project (GladeWindow *window)
{
@@ -2700,11 +2715,8 @@ glade_window_dispose (GObject *object)
{
GladeWindow *window = GLADE_WINDOW (object);
- if (window->priv->app)
- {
- g_object_unref (window->priv->app);
- window->priv->app = NULL;
- }
+ g_clear_object (&window->priv->app);
+ g_clear_object (&window->priv->registration);
G_OBJECT_CLASS (glade_window_parent_class)->dispose (object);
}
@@ -3405,6 +3417,7 @@ glade_window_class_init (GladeWindowClass *klass)
gtk_widget_class_bind_template_callback (widget_class, on_about_action_activate);
gtk_widget_class_bind_template_callback (widget_class, on_reference_action_activate);
gtk_widget_class_bind_template_callback (widget_class, on_preferences_action_activate);
+ gtk_widget_class_bind_template_callback (widget_class, on_registration_action_activate);
gtk_widget_class_bind_template_callback (widget_class, on_open_recent_action_item_activated);
gtk_widget_class_bind_template_callback (widget_class, on_use_small_icons_action_toggled);
diff --git a/src/glade.glade b/src/glade.glade
index 3f3d8d5..d58d3d3 100644
--- a/src/glade.glade
+++ b/src/glade.glade
@@ -2,7 +2,7 @@
<!-- Generated with glade 3.16.0
Glade - A user interface designer for GTK+ and GNOME.
-Copyright (C) 2012 Juan Pablo Ugarte
+Copyright (C) 2012-2014 Juan Pablo Ugarte
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -424,6 +424,13 @@ Andreas Nilsson <andreas andreasn se></property>
<signal name="item-activated" handler="on_open_recent_action_item_activated" swapped="no"/>
</object>
</child>
+ <child>
+ <object class="GtkAction" id="registration_action">
+ <property name="label" translatable="yes">Registration & User survey</property>
+ <property name="tooltip" translatable="yes">Help us improve Glade by registering and completing the
user survey!</property>
+ <signal name="activate" handler="on_registration_action_activate" swapped="no"/>
+ </object>
+ </child>
</object>
<template class="GladeWindow" parent="GtkWindow">
<property name="can_focus">False</property>
@@ -857,6 +864,15 @@ Andreas Nilsson <andreas andreasn se></property>
</object>
</child>
<child>
+ <object class="GtkMenuItem" id="registration_menuitem">
+ <property name="use_action_appearance">True</property>
+ <property name="related_action">registration_action</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ </object>
+ </child>
+ <child>
<object class="GtkSeparatorMenuItem" id="separatormenuitem5">
<property name="visible">True</property>
<property name="can_focus">False</property>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]