summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuan Pablo Ugarte <juanpablougarte@gmail.com>2022-04-21 17:45:29 -0300
committerJuan Pablo Ugarte <juanpablougarte@gmail.com>2022-08-10 16:24:25 -0400
commit3970e9706c5e0eaf5672652359151cde70cf4ae8 (patch)
tree80fb9a70f412cfaf64f79c403099abb88a8da383
parent2a6f53bdc50f62379e41546b7b68fd94ab237bf6 (diff)
downloadglade-3970e9706c5e0eaf5672652359151cde70cf4ae8.tar.gz
GladeWindow: Remove survey
We do not need to run the survey anymore since there is not plan for further development.
-rw-r--r--src/glade-http.c547
-rw-r--r--src/glade-http.h92
-rw-r--r--src/glade-registration.c1100
-rw-r--r--src/glade-registration.css79
-rw-r--r--src/glade-registration.glade2649
-rw-r--r--src/glade-registration.h60
-rw-r--r--src/glade-resources.gresource.xml2
-rw-r--r--src/glade-window.c77
-rw-r--r--src/glade-window.h2
-rw-r--r--src/glade.glade17
-rw-r--r--src/main.c2
-rw-r--r--src/meson.build4
12 files changed, 2 insertions, 4629 deletions
diff --git a/src/glade-http.c b/src/glade-http.c
deleted file mode 100644
index d6c08c9c..00000000
--- a/src/glade-http.c
+++ /dev/null
@@ -1,547 +0,0 @@
-/*
- * Copyright (C) 2014, 2020 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>
-#include <stdlib.h>
-
-struct _GladeHTTPPrivate
-{
- gchar *host;
- gint port;
- gboolean tls;
-
- GladeHTTPStatus status;
- GSocketConnection *connection;
- GDataInputStream *data_stream;
- GCancellable *cancellable;
-
- GString *data;
- GString *response;
-
- gint http_major;
- gint http_minor;
- gint code;
-
- gchar *transfer_encoding_value;
- gchar *content_length_value;
-
- GHashTable *cookies;
-
- gint content_length;
- gboolean chunked;
-};
-
-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_WITH_PRIVATE (GladeHTTP, glade_http, G_TYPE_OBJECT)
-
-static void
-glade_http_close (GladeHTTP *http)
-{
- GladeHTTPPrivate *priv = http->priv;
-
- g_clear_object (&priv->data_stream);
- g_clear_object (&priv->connection);
- g_clear_object (&priv->cancellable);
-}
-
-static void
-glade_http_clear (GladeHTTP *http)
-{
- GladeHTTPPrivate *priv = http->priv;
-
- glade_http_close (http);
-
- g_string_assign (priv->data, "");
- g_string_assign (priv->response, "");
-
- priv->http_major = priv->http_minor = priv->code = 0;
-
- g_clear_pointer (&priv->transfer_encoding_value, g_free);
- g_clear_pointer (&priv->content_length_value, g_free);
-
- priv->chunked = FALSE;
- priv->content_length = 0;
-
- g_hash_table_remove_all (priv->cookies);
-
- priv->status = GLADE_HTTP_READY;
-}
-
-static void
-glade_http_emit_request_done (GladeHTTP *http)
-{
- GladeHTTPPrivate *priv = http->priv;
-
- g_file_set_contents ("response.html", priv->response->str, -1, NULL);
-
- /* emit request-done */
- g_signal_emit (http, http_signals[REQUEST_DONE], 0,
- priv->code, priv->response->str);
-}
-
-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 gboolean
-parse_cookie (const gchar *str, gchar **key, gchar **value)
-{
- gchar **tokens, *colon;
-
- if (str == NULL)
- return FALSE;
-
- tokens = g_strsplit(str, "=", 2);
-
- if ((colon = g_strstr_len (tokens[1], -1, ";")))
- *colon = '\0';
-
- *key = g_strstrip (tokens[0]);
- *value = g_strstrip (tokens[1]);
-
- g_free (tokens);
-
- return TRUE;
-}
-
-static void
-on_read_line_ready (GObject *source, GAsyncResult *res, gpointer data)
-{
- GladeHTTPPrivate *priv = GLADE_HTTP (data)->priv;
- g_autoptr (GError) error = NULL;
- g_autofree gchar *line = NULL;
- gsize length;
-
- glade_http_emit_status (data, GLADE_HTTP_RECEIVING, NULL);
-
- line = g_data_input_stream_read_line_finish (priv->data_stream, res, &length, &error);
-
- if (error)
- {
- glade_http_emit_status (data, GLADE_HTTP_ERROR, error);
- g_error_free (error);
- }
-
- if (!line)
- return;
-
- if (priv->http_major == 0)
- {
- /* Reading HTTP version */
- if (sscanf (line, "HTTP/%d.%d %d",
- &priv->http_major,
- &priv->http_minor,
- &priv->code) != 3)
- {
- error = g_error_new_literal (G_IO_ERROR, G_IO_ERROR_INVALID_DATA,
- "Could not parse HTTP header");
- glade_http_emit_status (data, GLADE_HTTP_ERROR, error);
- return;
- }
- }
- else if (priv->response->len < priv->content_length)
- {
- /* We are reading a chunk or the whole response */
- g_string_append_len (priv->response, line, length);
- }
- else
- {
- /* Reading HTTP Headers */
-
- if (priv->chunked)
- {
- gint chunk;
-
- if (sscanf (line, "%x", &chunk) != 1)
- {
- error = g_error_new_literal (G_IO_ERROR, G_IO_ERROR_INVALID_DATA,
- "Could not parse chunk size");
- glade_http_emit_status (data, GLADE_HTTP_ERROR, error);
- return;
- }
-
- priv->content_length += chunk;
- }
- /* Check if this is the last line of the headers */
- else if (length == 0)
- {
- if (g_strcmp0 (priv->transfer_encoding_value, "chunked") == 0)
- priv->chunked = TRUE;
- else
- priv->content_length = atoi (priv->content_length_value);
- }
- else
- {
- g_auto(GStrv) tokens = g_strsplit (line, ":", 2);
-
- if (tokens)
- {
- gchar *key = g_strstrip (tokens[0]);
- gchar *val = g_strstrip (tokens[1]);
-
- if (g_strcmp0 ("Transfer-Encoding", key) == 0)
- {
- priv->transfer_encoding_value = g_strdup (val);
- }
- else if (g_strcmp0 ("Content-Length", key) == 0)
- {
- priv->content_length_value = g_strdup (val);
- }
- else if (g_strcmp0 ("Set-Cookie", key) == 0)
- {
- gchar *cookie = NULL, *value = NULL;
-
- /* Take cookie/value ownership */
- if (parse_cookie (val, &cookie, &value))
- g_hash_table_insert (priv->cookies, cookie, value);
- }
- }
- }
- }
-
- if (priv->content_length && priv->response->len >= priv->content_length)
- {
- glade_http_close (data);
-
- /* emit request-done */
- glade_http_emit_request_done (data);
- glade_http_emit_status (data, GLADE_HTTP_READY, NULL);
- }
- else
- g_data_input_stream_read_line_async (priv->data_stream,
- G_PRIORITY_DEFAULT,
- priv->cancellable,
- on_read_line_ready,
- data);
-}
-
-static void
-on_write_ready (GObject *source, GAsyncResult *res, gpointer data)
-{
- GladeHTTPPrivate *priv = GLADE_HTTP (data)->priv;
- GInputStream *input_stream;
- GError *error = NULL;
- gsize count;
-
- count = g_output_stream_write_finish (G_OUTPUT_STREAM (source), res, &error);
-
- if (error == NULL && priv->data->len != count)
- error = g_error_new (G_IO_ERROR, G_IO_ERROR_FAILED,
- "Error sending data to %s",
- priv->host);
-
- if (error)
- {
- glade_http_emit_status (data, GLADE_HTTP_ERROR, error);
- g_error_free (error);
- return;
- }
-
- glade_http_emit_status (data, GLADE_HTTP_WAITING, NULL);
-
- /* Get connection stream */
- input_stream = g_io_stream_get_input_stream (G_IO_STREAM (priv->connection));
-
- /* Create stream to read structured data */
- priv->data_stream = g_data_input_stream_new (input_stream);
- g_data_input_stream_set_newline_type (priv->data_stream, G_DATA_STREAM_NEWLINE_TYPE_CR_LF);
-
- /* Start reading headers line by line */
- g_data_input_stream_read_line_async (priv->data_stream,
- G_PRIORITY_DEFAULT,
- priv->cancellable,
- on_read_line_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 = glade_http_get_instance_private (http);
-
- priv->cookies = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
- priv->data = g_string_new ("");
- priv->response = g_string_new ("");
-}
-
-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_hash_table_destroy (priv->cookies);
-
- 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);
-
- 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",
- "Whether 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), G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (GladeHTTPClass, request_done),
- NULL, NULL, NULL,
- G_TYPE_NONE, 2,
- G_TYPE_INT, 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), 0);
- return http->priv->port;
-}
-
-gchar *
-glade_http_get_cookie (GladeHTTP *http, const gchar *key)
-{
- g_return_val_if_fail (GLADE_IS_HTTP (http), NULL);
- return g_hash_table_lookup (http->priv->cookies, key);
-}
-
-static void
-collect_cookies (gpointer key, gpointer value, gpointer user_data)
-{
- GString *cookies = user_data;
-
- if (cookies->len)
- g_string_append_printf (cookies, "; %s=%s", (gchar *)key, (gchar *)value);
- else
- g_string_append_printf (cookies, "%s=%s", (gchar *)key, (gchar *)value);
-}
-
-gchar *
-glade_http_get_cookies (GladeHTTP *http)
-{
- GString *cookies;
- gchar *retval;
-
- g_return_val_if_fail (GLADE_IS_HTTP (http), NULL);
-
- cookies = g_string_new ("");
- g_hash_table_foreach (http->priv->cookies, collect_cookies, cookies);
-
- retval = cookies->str;
- g_string_free (cookies, FALSE);
-
- return retval;
-}
-
-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
deleted file mode 100644
index f64e0166..00000000
--- a/src/glade-http.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * 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 *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);
-
-gchar *glade_http_get_cookie (GladeHTTP *http,
- const gchar *key);
-
-gchar *glade_http_get_cookies (GladeHTTP *http);
-
-void glade_http_request_send_async (GladeHTTP *http,
- GCancellable *cancellable,
- const gchar *format,
- ...) G_GNUC_PRINTF (3, 4);
-G_END_DECLS
-
-#endif /* _GLADE_HTTP_H_ */
-
diff --git a/src/glade-registration.c b/src/glade-registration.c
deleted file mode 100644
index ec8d5de0..00000000
--- a/src/glade-registration.c
+++ /dev/null
@@ -1,1100 +0,0 @@
-/*
- * Copyright (C) 2014, 2020 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-window.h"
-#include "glade-http.h"
-#include "glade-logo.h"
-#include <gladeui/glade.h>
-#include <glib/gi18n.h>
-
-#define USER_SURVEY_CONFIG_GROUP "User & Survey"
-#define SURVEY_DATA_CONFIG_GROUP "Survey Data"
-
-struct _GladeRegistrationPrivate
-{
- GKeyFile *config;
- gchar *user_agent;
-
- GtkWidget *infobar;
- GtkWidget *statusbar;
- GtkWidget *net_spinner;
- GtkLabel *infobar_label;
- GtkLabel *status_label;
- GtkWidget *submit_button;
- GtkContainer *user_survey_box;
-
- GladeHTTP *http;
- GladeHTTP *sub_http;
- GCancellable *cancellable;
- GCancellable *sub_cancellable;
-
- /* HTML Form parsing */
- GHashTable *hidden_inputs;
- gboolean form_loaded;
- GHashTable *sub_hidden_inputs;
- gboolean sub_form_loaded;
-
- /* Form widgets */
-
- GtkWidget *name;
- GtkWidget *email;
- GtkWidget *country_id;
- GtkWidget *city;
- GtkWidget *contact_type;
- GtkWidget *contact_name;
- GtkWidget *contact_website;
- GtkWidget *subscribe;
-
- 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_rust;
- 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)
-
-enum
-{
- PROP_0,
- PROP_COMPLETED,
- PROP_SKIP_REMINDER
-};
-
-static void
-glade_registration_parse_response_form (GladeRegistration *registration,
- const gchar *response,
- const gchar *form_action,
- GHashTable *data);
-
-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) &&
- gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (input)))
- g_string_append_c (string, 'Y');
-}
-
-static void
-append_hidden_inputs (gpointer key, gpointer value, gpointer user_data)
-{
- GString *str = user_data;
- g_string_append_printf (str, "&%s=%s", (gchar *)key, (gchar *)value);
-}
-
-static void
-glade_registration_show_message (GladeRegistration *registration,
- GtkMessageType type,
- const gchar *format,
- ...) G_GNUC_PRINTF (3, 4);
-
-static void
-glade_registration_show_message (GladeRegistration *registration,
- GtkMessageType type,
- const gchar *format,
- ...)
-{
- GladeRegistrationPrivate *priv = registration->priv;
-
- gtk_info_bar_set_message_type (GTK_INFO_BAR (priv->infobar), type);
-
- if (format)
- {
- g_autofree gchar *string = NULL;
- va_list args;
-
- va_start (args, format);
- string = g_strdup_vprintf (format, args);
- va_end (args);
-
- gtk_label_set_markup (priv->infobar_label, string);
- }
- else
- gtk_label_set_markup (priv->infobar_label, "");
-
- /* Only show the infobar if the dialog is visible */
- if (gtk_widget_is_visible (GTK_WIDGET (registration)))
- gtk_widget_show (priv->infobar);
-}
-
-static void
-glade_registration_http_post (GladeRegistration *registration,
- GladeHTTP *http,
- GCancellable *cancellable,
- const gchar *url,
- GString *content)
-{
- const gchar *lang = pango_language_to_string (pango_language_get_default ());
- g_autofree gchar *cookies = glade_http_get_cookies (http);
-
- glade_http_request_send_async (http, cancellable,
- "POST %s HTTP/1.1\r\n"
- "Host: %s\r\n"
- "User-Agent: %s\r\n"
- "Connection: close\r\n"
- "Accept: text/html\r\n"
- "Accept-Language: %s\r\n"
- "Cookie: %s\r\n"
- "Origin: https://%s\r\n"
- "Referer: https://%s%s\r\n"
- "Content-Type: application/x-www-form-urlencoded\r\n"
- "Content-Length: %"G_GSIZE_FORMAT"\r\n"
- "\r\n%s",
- url, /* POST url */
- glade_http_get_host (http), /* Host */
- registration->priv->user_agent, /* User-Agent */
- lang, /* Accept-Language */
- cookies, /* Cookie */
- glade_http_get_host (http), /* Origin */
- glade_http_get_host (http), /* Referer */
- url, /* Referer */
- content->len, /* Content-length */
- content->str); /* content */
-}
-
-static void
-glade_registration_http_get (GladeRegistration *registration,
- GladeHTTP *http,
- GCancellable *cancellable,
- const gchar *url)
-{
- glade_http_request_send_async (http, cancellable,
- "GET %s HTTP/1.1\r\n"
- "Host: %s\r\n"
- "User-Agent: %s\r\n"
- "Connection: close\r\n"
- "Accept: text/html\r\n"
- "Content-Length: 0\r\n"
- "\r\n",
- url, /* POST url */
- glade_http_get_host (http), /* Host */
- registration->priv->user_agent); /* User-Agent */
-}
-
-static void
-on_http_status (GladeHTTP *http,
- GladeHTTPStatus status,
- GError *error,
- GladeRegistration *registration)
-{
- g_autofree 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,
- "%s", error->message);
- break;
- }
-
- gtk_label_set_text (registration->priv->status_label, text ? text : "");
- gtk_widget_set_visible (registration->priv->net_spinner, text != NULL);
- gtk_widget_set_visible (registration->priv->statusbar, text != NULL);
-}
-
-static void
-glade_registration_subscribe_email (GladeRegistration *registration)
-{
- GladeRegistrationPrivate *priv = registration->priv;
- g_autoptr(GString) post = g_string_new ("");
-
- string_append_input_key_value_tuple (post, "email", priv->email);
- string_append_input_key_value_tuple (post, "fullname", priv->name);
-
- /* Append magic token */
- g_hash_table_foreach (priv->sub_hidden_inputs, append_hidden_inputs, post);
-
- glade_registration_http_post (registration, priv->sub_http, NULL,
- "/mailman/subscribe/glade-users-list",
- post);
-}
-
-static void
-on_subscribe_http_request_done (GladeHTTP *http,
- gint code,
- const gchar *response,
- GladeRegistration *registration)
-{
- GladeRegistrationPrivate *priv = registration->priv;
-
- switch (code)
- {
- case 100:
- /* Ignore Continue HTTP response */
- break;
- case 200:
- {
- if (!priv->sub_form_loaded)
- {
- /* Get magic token from html form */
- glade_registration_parse_response_form (registration,
- response,
- "subscribe/glade-users-list",
- priv->sub_hidden_inputs);
- priv->sub_form_loaded = TRUE;
-
- /* Now that we have the magic token we can make the actual POST */
- glade_registration_subscribe_email (registration);
- }
- else
- glade_registration_show_message (registration, GTK_MESSAGE_INFO, "%s",
- _("Your subscription to the users list has been received!\nCheck your email!"));
- }
- break;
- default:
- {
-#define SUBSCRIPTION_FAILED "Sorry, automatic subscription to Glade Users mailing list failed.\n\
-<a href=\"https://mail.gnome.org/mailman/listinfo/glade-users-list\">Open Glade Users Website</a>"
-
- glade_registration_show_message (registration, GTK_MESSAGE_WARNING,
- "%s\nHTTP response %d",
- _(SUBSCRIPTION_FAILED),
- code);
- }
- break;
- }
-}
-
-static void
-glade_registration_clear (GladeRegistrationPrivate *priv)
-{
- g_clear_object (&priv->cancellable);
- g_clear_object (&priv->sub_cancellable);
-
- priv->cancellable = g_cancellable_new ();
- priv->sub_cancellable = g_cancellable_new ();
-
- gtk_widget_hide (priv->infobar);
- g_hash_table_remove_all (priv->hidden_inputs);
- g_hash_table_remove_all (priv->sub_hidden_inputs);
- priv->form_loaded = FALSE;
- priv->sub_form_loaded = FALSE;
-}
-
-#define ADD_USER_INPUT(p,q,i) string_append_input_key_value_tuple (p, "311811X51X"q, priv->i)
-#define ADD_SURVEY_INPUT(p,q,i) string_append_input_key_value_tuple (p, "311811X57X"q, priv->i)
-
-static void
-glade_registration_submit_survey (GladeRegistration *registration)
-{
- GladeRegistrationPrivate *priv = registration->priv;
- g_autoptr(GString) post;
-
- post = g_string_new ("move=movesubmit&ajax=off&311811X51X843=");
-
- /* User Agent */
- g_string_append_uri_escaped (post, priv->user_agent, NULL, FALSE);
-
- /* User info */
- ADD_USER_INPUT (post, "849", name);
- ADD_USER_INPUT (post, "852", email);
- ADD_USER_INPUT (post, "1074", country_id);
- ADD_USER_INPUT (post, "858", city);
- ADD_USER_INPUT (post, "861", contact_type);
- ADD_USER_INPUT (post, "864", contact_name);
- ADD_USER_INPUT (post, "867", contact_website);
-
- /* Survey data */
- ADD_SURVEY_INPUT (post, "873", experience);
- ADD_SURVEY_INPUT (post, "879", experience_unit);
- ADD_SURVEY_INPUT (post, "882", experience_not_programmer);
- ADD_SURVEY_INPUT (post, "885c", lang_c);
- ADD_SURVEY_INPUT (post, "885cpp", lang_cpp);
- ADD_SURVEY_INPUT (post, "885csharp", lang_csharp);
- ADD_SURVEY_INPUT (post, "885java", lang_java);
- ADD_SURVEY_INPUT (post, "885python", lang_python);
- ADD_SURVEY_INPUT (post, "885javascript", lang_javascript);
- ADD_SURVEY_INPUT (post, "885vala", lang_vala);
- ADD_SURVEY_INPUT (post, "885perl", lang_perl);
- ADD_SURVEY_INPUT (post, "885rust", lang_rust);
- ADD_SURVEY_INPUT (post, "885other", lang_other);
- ADD_SURVEY_INPUT (post, "915", start_using);
- ADD_SURVEY_INPUT (post, "918", start_using_unit);
- ADD_SURVEY_INPUT (post, "921", version);
- ADD_SURVEY_INPUT (post, "924", version_other);
- ADD_SURVEY_INPUT (post, "927", os);
-
- ADD_SURVEY_INPUT (post, "930", os_linux);
- ADD_SURVEY_INPUT (post, "933", os_bsd);
- ADD_SURVEY_INPUT (post, "936", os_windows);
- ADD_SURVEY_INPUT (post, "939", os_osx);
- ADD_SURVEY_INPUT (post, "942", os_solaris);
-
- ADD_SURVEY_INPUT (post, "945", os_other);
-
- ADD_SURVEY_INPUT (post, "948", freq);
- ADD_SURVEY_INPUT (post, "951", user_level);
-
- ADD_SURVEY_INPUT (post, "954free", soft_free);
- ADD_SURVEY_INPUT (post, "954open", soft_open);
- ADD_SURVEY_INPUT (post, "954commercial", soft_commercial);
- ADD_SURVEY_INPUT (post, "954none", soft_none);
-
- ADD_SURVEY_INPUT (post, "969academic", field_academic);
- ADD_SURVEY_INPUT (post, "969accounting", field_accounting);
- ADD_SURVEY_INPUT (post, "969desktop", field_desktop);
- ADD_SURVEY_INPUT (post, "969educational", field_educational);
- ADD_SURVEY_INPUT (post, "969embedded", field_embedded);
- ADD_SURVEY_INPUT (post, "969medical", field_medical);
- ADD_SURVEY_INPUT (post, "969industrial", field_industrial);
- ADD_SURVEY_INPUT (post, "969scientific", field_scientific);
-
- ADD_SURVEY_INPUT (post, "1134", field_other);
-
- ADD_SURVEY_INPUT (post, "999", improvement);
- ADD_SURVEY_INPUT (post, "1002", problem);
- ADD_SURVEY_INPUT (post, "1140", problem_other);
- ADD_SURVEY_INPUT (post, "1005", bug);
-
- ADD_SURVEY_INPUT (post, "1008", bugzilla);
- ADD_SURVEY_INPUT (post, "1011", contributing);
- ADD_SURVEY_INPUT (post, "1014", contributing_whynot);
- ADD_SURVEY_INPUT (post, "1017", comments);
-
- /* Append hidden inputs */
- g_hash_table_foreach (priv->hidden_inputs, append_hidden_inputs, post);
-
- glade_registration_http_post (GLADE_REGISTRATION (registration),
- priv->http,
- priv->cancellable,
- "/index.php/311811",
- post);
-}
-
-static void
-on_http_request_done (GladeHTTP *http,
- gint code,
- const gchar *response,
- GladeRegistration *registration)
-{
- switch (code)
- {
- case 100:
- /* Ignore Continue HTTP response */
- break;
- case 200:
- {
- GladeRegistrationPrivate *priv = registration->priv;
-
- if (!priv->form_loaded)
- {
- glade_registration_parse_response_form (registration,
- response,
- "311811",
- priv->hidden_inputs);
- priv->form_loaded = TRUE;
-
- /* Now that we have the magic token we can make the actual POST */
- glade_registration_submit_survey (registration);
- return;
- }
-
- if (g_strstr_len (response, -1, "GLADE_USER_REGISTRATION_SURVEY_OK") != NULL)
- {
- gtk_label_set_text (priv->status_label, "");
- gtk_widget_hide (priv->statusbar);
-
- g_object_set (registration, "completed", TRUE, NULL);
- glade_app_config_save ();
-
- glade_util_ui_message (GTK_WIDGET (registration), GLADE_UI_INFO, NULL,
- "<big>%s</big>", _("Thank you for taking the time to complete the survey, we appreciate it!"));
- gtk_widget_hide (GTK_WIDGET (registration));
- }
- else
- glade_registration_show_message (registration, GTK_MESSAGE_WARNING,
- "Internal server error");
- }
- break;
- default:
- glade_registration_show_message (registration, GTK_MESSAGE_WARNING,
- "Got HTTP response %d", code);
- break;
- }
-}
-
-static inline void
-survey_data_set_string (GKeyFile *config, const gchar *id, const gchar *value)
-{
- if (value)
- g_key_file_set_string (config, SURVEY_DATA_CONFIG_GROUP, id, value);
-}
-
-void
-glade_registration_save_state_foreach (GtkWidget *widget, gpointer data)
-{
- GladeRegistration *registration = GLADE_REGISTRATION (data);
- const gchar *id = gtk_buildable_get_name (GTK_BUILDABLE (widget));
-
- if (id)
- {
- GKeyFile *config = registration->priv->config;
-
- if (GTK_IS_ENTRY (widget))
- survey_data_set_string (config, id, gtk_entry_get_text (GTK_ENTRY (widget)));
- else if (GTK_IS_TEXT_VIEW (widget))
- {
- GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (widget));
- GtkTextIter start, end;
- g_autofree gchar *text = NULL;
-
- gtk_text_buffer_get_bounds (buffer, &start, &end);
- text = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
- survey_data_set_string (config, id, text);
- }
- else if (GTK_IS_COMBO_BOX (widget))
- survey_data_set_string (config, id, gtk_combo_box_get_active_id (GTK_COMBO_BOX (widget)));
- else if (GTK_IS_TOGGLE_BUTTON (widget))
- g_key_file_set_boolean (config, SURVEY_DATA_CONFIG_GROUP, id,
- gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)));
- }
-
- /* Recurse all containers */
- if (GTK_IS_CONTAINER (widget))
- gtk_container_foreach (GTK_CONTAINER (widget),
- glade_registration_save_state_foreach,
- data);
-}
-
-void
-glade_registration_load_state_foreach (GtkWidget *widget, gpointer data)
-{
- GladeRegistration *registration = GLADE_REGISTRATION (data);
- const gchar *id = gtk_buildable_get_name (GTK_BUILDABLE (widget));
-
- if (id)
- {
- GKeyFile *config = registration->priv->config;
-
- if (GTK_IS_SPIN_BUTTON (widget))
- {
- gint val = g_key_file_get_integer (config, SURVEY_DATA_CONFIG_GROUP, id, NULL);
- gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), val);
- }
- else if (GTK_IS_ENTRY (widget))
- {
- g_autofree gchar *val = NULL;
- val = g_key_file_get_string (config, SURVEY_DATA_CONFIG_GROUP, id, NULL);
- gtk_entry_set_text (GTK_ENTRY (widget), val ? val : "");
- }
- else if (GTK_IS_TEXT_VIEW (widget))
- {
- g_autofree gchar *val = NULL;
-
- val = g_key_file_get_string (config, SURVEY_DATA_CONFIG_GROUP, id, NULL);
- GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (widget));
-
- gtk_text_buffer_set_text (buffer, val ? val : "", -1);
- }
- else if (GTK_IS_COMBO_BOX (widget)){
- g_autofree gchar *val = NULL;
-
- val = g_key_file_get_string (config, SURVEY_DATA_CONFIG_GROUP, id, NULL);
- gtk_combo_box_set_active_id (GTK_COMBO_BOX (widget), val ? val : "");
- }
- else if (GTK_IS_TOGGLE_BUTTON (widget)){
- gboolean val = g_key_file_get_boolean (config, SURVEY_DATA_CONFIG_GROUP, id, NULL);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), val);
- }
- }
-
- /* Recurse all containers */
- if (GTK_IS_CONTAINER (widget))
- gtk_container_foreach (GTK_CONTAINER (widget),
- glade_registration_load_state_foreach,
- data);
-}
-
-static gboolean
-entry_is_empty (GtkWidget *entry)
-{
- const gchar *text = gtk_entry_get_text (GTK_ENTRY (entry));
- g_autofree gchar *str = NULL;
-
- if (!text || *text == '\0')
- return TRUE;
-
- str = g_strstrip (g_strdup (text));
-
- return (!str || *str == '\0');
-}
-
-static gboolean
-glade_registration_verify (GtkWidget *entry)
-{
- GtkStyleContext *ctx = gtk_widget_get_style_context (entry);
-
- gtk_style_context_remove_class (ctx, "error");
-
- if (entry_is_empty (entry))
- {
- gtk_style_context_add_class (ctx, "error");
- gtk_widget_grab_focus (entry);
- return TRUE;
- }
-
- if (gtk_entry_get_input_purpose (GTK_ENTRY (entry)) == GTK_INPUT_PURPOSE_EMAIL)
- {
- const char *text = gtk_entry_get_text (GTK_ENTRY (entry));
- g_auto(GStrv) email = NULL;
-
- /* Check if this looks like an email */
- if (g_strstr_len (text, -1, " ") ||
- g_strstr_len (text, -1, "\t") ||
- g_strstr_len (text, -1, "\n") ||
- !(email = g_strsplit (text, "@", 2)) ||
- g_strv_length (email) != 2 ||
- *email[0] == '\0'|| *email[1] == '\0')
- {
- gtk_style_context_add_class (ctx, "error");
- gtk_widget_grab_focus (entry);
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-static void
-glade_registration_verify_entry (GtkEntry *entry, GladeRegistration *registration)
-{
- glade_registration_verify (GTK_WIDGET (entry));
-}
-
-static void
-on_registration_dialog_response (GtkDialog *dialog, gint response_id)
-{
- GladeRegistration *registration = GLADE_REGISTRATION (dialog);
- GladeRegistrationPrivate *priv = registration->priv;
-
- gtk_widget_hide (priv->infobar);
-
- /* Save state */
- gtk_container_foreach (priv->user_survey_box,
- glade_registration_save_state_foreach,
- registration);
- glade_app_config_save ();
-
- if (response_id != GTK_RESPONSE_OK)
- {
- gtk_widget_hide (GTK_WIDGET (dialog));
- glade_registration_clear (priv);
- return;
- }
-
- if (glade_registration_verify (priv->name) ||
- glade_registration_verify (priv->email) ||
- g_key_file_get_boolean (priv->config, USER_SURVEY_CONFIG_GROUP, "completed", NULL))
- return;
-
- /* Init state */
- glade_registration_clear (priv);
-
-
- /* Get survey form */
- glade_registration_http_get (registration,
- priv->http,
- priv->cancellable,
- "/index.php/311811");
-
- /* Get mailman form */
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->subscribe)))
- glade_registration_http_get (registration,
- priv->sub_http,
- priv->sub_cancellable,
- "/mailman/listinfo/glade-users-list");
-}
-
-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 gboolean
-on_viewport_draw (GtkWidget *viewport, cairo_t *cr, GladeRegistration *widget)
-{
- GtkStyleContext *context = gtk_widget_get_style_context (viewport);
- GtkAllocation alloc;
- gdouble scale;
- GdkRGBA c;
-
- gtk_style_context_get_color (context, gtk_style_context_get_state (context), &c);
-
- gtk_widget_get_allocation (viewport, &alloc);
-
- scale = MIN (alloc.width/GLADE_LOGO_WIDTH, alloc.height/GLADE_LOGO_HEIGHT) - .1;
-
- cairo_save (cr);
-
- cairo_set_source_rgba (cr, c.red, c.green, c.blue, .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);
-
- return FALSE;
-}
-
-static void
-glade_registration_update_state (GladeRegistration *registration)
-{
- GladeRegistrationPrivate *priv = glade_registration_get_instance_private (registration);
-
- if (g_key_file_get_boolean (priv->config, USER_SURVEY_CONFIG_GROUP, "completed", NULL))
- {
- GtkWidget *headerbar = gtk_dialog_get_header_bar (GTK_DIALOG (registration));
-
- gtk_widget_set_sensitive (GTK_WIDGET (priv->user_survey_box), FALSE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->submit_button), FALSE);
-
- if (headerbar)
- gtk_header_bar_set_subtitle(GTK_HEADER_BAR (headerbar),
- _("Completed and submitted!"));
- }
-}
-
-static void
-glade_registration_init (GladeRegistration *registration)
-{
- GladeRegistrationPrivate *priv = glade_registration_get_instance_private (registration);
-
- registration->priv = priv;
-
- priv->config = glade_app_get_config ();
-
- /* Create user agent */
- priv->user_agent =
- g_strdup_printf ("Glade/"PACKAGE_VERSION" (%s; Gtk+ %d.%d.%d; glib %d.%d.%d; %s)",
- glade_window_get_gdk_backend (), /* Gdk backend */
- GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION, /* Gtk version */
- glib_major_version, glib_minor_version, glib_micro_version,/* Glib version */
- pango_language_to_string (pango_language_get_default ()));
-
- priv->hidden_inputs = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
- priv->sub_hidden_inputs = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
-
- /* HTTPS default port is 443 */
- priv->http = glade_http_new ("surveys.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);
-
- priv->sub_http = glade_http_new ("mail.gnome.org", 443, TRUE);
- g_signal_connect_object (priv->sub_http, "request-done",
- G_CALLBACK (on_subscribe_http_request_done),
- registration, 0);
-
- gtk_widget_init_template (GTK_WIDGET (registration));
-
- /* Generate Glade versions */
- 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_prepend (combo, id, text);
-
- /* Skip non released version 24-34 */
- if (minor == 22)
- minor = 34;
- }
-
- gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
- }
-
- /* Load survey state */
- gtk_container_foreach (priv->user_survey_box,
- glade_registration_load_state_foreach,
- registration);
-
- gtk_dialog_set_default_response (GTK_DIALOG (registration), GTK_RESPONSE_OK);
-
- glade_registration_update_state (registration);
-}
-
-static void
-glade_registration_finalize (GObject *object)
-{
- GladeRegistrationPrivate *priv = GLADE_REGISTRATION (object)->priv;
-
- g_clear_pointer (&priv->user_agent, g_free);
- g_clear_object (&priv->http);
- g_clear_object (&priv->sub_http);
- g_clear_object (&priv->cancellable);
- g_clear_object (&priv->sub_cancellable);
- g_hash_table_destroy (priv->hidden_inputs);
- g_hash_table_destroy (priv->sub_hidden_inputs);
-
- G_OBJECT_CLASS (glade_registration_parent_class)->finalize (object);
-}
-
-static void
-glade_registration_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
-{
- GladeRegistrationPrivate *priv;
-
- g_return_if_fail (GLADE_IS_REGISTRATION (object));
-
- priv = GLADE_REGISTRATION (object)->priv;
-
- switch (prop_id)
- {
- case PROP_SKIP_REMINDER:
- g_key_file_set_boolean (priv->config, USER_SURVEY_CONFIG_GROUP,
- pspec->name, g_value_get_boolean (value));
- break;
- case PROP_COMPLETED:
- g_key_file_set_boolean (priv->config, USER_SURVEY_CONFIG_GROUP,
- pspec->name, g_value_get_boolean (value));
- glade_registration_update_state (GLADE_REGISTRATION (object));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-glade_registration_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
-{
- GladeRegistrationPrivate *priv;
-
- g_return_if_fail (GLADE_IS_REGISTRATION (object));
-
- priv = GLADE_REGISTRATION (object)->priv;
-
- switch (prop_id)
- {
- case PROP_SKIP_REMINDER:
- case PROP_COMPLETED:
- g_value_set_boolean (value, g_key_file_get_boolean (priv->config, USER_SURVEY_CONFIG_GROUP, pspec->name, NULL));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-glade_registration_class_init (GladeRegistrationClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
- GtkCssProvider *css_provider;
-
- 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, statusbar);
- 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, submit_button);
- gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, user_survey_box);
-
- 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, 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_rust);
- 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, glade_registration_verify_entry);
- gtk_widget_class_bind_template_callback (widget_class, on_registration_dialog_response);
- 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;
- object_class->set_property = glade_registration_set_property;
- object_class->get_property = glade_registration_get_property;
-
- g_object_class_install_property (object_class,
- PROP_COMPLETED,
- g_param_spec_boolean ("completed",
- "Completed",
- "Registration was completed successfully",
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class,
- PROP_SKIP_REMINDER,
- g_param_spec_boolean ("skip-reminder",
- "Skip reminder",
- "Skip registration reminder dialog",
- FALSE,
- G_PARAM_READWRITE));
-
- /* Setup Custom CSS */
- css_provider = gtk_css_provider_new ();
- gtk_css_provider_load_from_resource (css_provider, "/org/gnome/glade/glade-registration.css");
-
- gtk_style_context_add_provider_for_screen (gdk_screen_get_default (),
- GTK_STYLE_PROVIDER (css_provider),
- GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
- g_object_unref (css_provider);
-}
-
-GtkWidget*
-glade_registration_new (void)
-{
- return GTK_WIDGET (g_object_new (GLADE_TYPE_REGISTRATION,
- "use-header-bar", TRUE,
- NULL));
-}
-
-/* HTML Form parsing utils */
-#include <libxml/HTMLparser.h>
-
-typedef struct {
- const gchar *form_action;
- GHashTable *inputs;
-
- gboolean in_form;
-} ParseData;
-
-static void
-start_element (ParseData *data, const gchar *name, const gchar **atts)
-{
- gboolean is_hidden = FALSE;
- const gchar *input_name = NULL, *input_value = NULL;
- gint i;
-
- if (g_strcmp0 (name, "form") == 0)
- {
- for (i = 0; atts[i]; i++)
- if (g_strcmp0 (atts[i], "action") == 0 &&
- g_strstr_len (atts[i+1], -1, data->form_action))
- data->in_form = TRUE;
-
- return;
- }
-
- /* Ignore elements outside of the form */
- if (!data->in_form)
- return;
-
- if (g_strcmp0 (name, "input"))
- return;
-
- for (i = 0; atts[i]; i += 2)
- {
- gint val = i + 1;
-
- if (!g_strcmp0 (atts[i], "type") && !g_strcmp0 (atts[val], "hidden"))
- is_hidden = TRUE;
-
- if (!g_strcmp0 (atts[i], "name"))
- input_name = atts[val];
-
- if (!g_strcmp0 (atts[i], "value"))
- input_value = atts[val];
- }
-
- if (is_hidden && input_name && input_value)
- g_hash_table_insert (data->inputs,
- g_uri_escape_string (input_name, NULL, FALSE),
- g_uri_escape_string (input_value, NULL, FALSE));
-}
-
-static void
-end_element (ParseData *data, const gchar *name)
-{
- if (g_strcmp0 (name, "form") == 0)
- data->in_form = FALSE;
-}
-
-static void
-glade_registration_parse_response_form (GladeRegistration *registration,
- const gchar *response,
- const gchar *form_action,
- GHashTable *inputs)
-{
- ParseData data = { .form_action = form_action, .inputs = inputs };
- htmlSAXHandler sax = { NULL, };
-
- sax.startElement = (startElementSAXFunc) start_element;
- sax.endElement = (endElementSAXFunc) end_element;
-
- /* Parse response and collect hidden inputs in the hash table */
- xmlFreeDoc (htmlSAXParseDoc ((guchar *)response, NULL, &sax, &data));
-}
-
diff --git a/src/glade-registration.css b/src/glade-registration.css
deleted file mode 100644
index c3aedbb9..00000000
--- a/src/glade-registration.css
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Glade - A user interface designer for GTK+ and GNOME
- * Copyright (C) 2014-2016 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>
- *
- */
-
-#glade-registration {
- background-color: @theme_base_color;
-}
-
-#glade-registration .main-box {
- margin: 8px;
-}
-
-#glade-registration box.title,
-#glade-registration label.title {
- background-color: @theme_selected_bg_color;
- border-radius: 8px;
- padding: 8px;
- box-shadow: 2px 2px 3px gray;
-}
-
-#glade-registration label.title {
- color: white;
- font-size: 14pt;
- font-weight: bold;
- text-shadow: 1px 1px 2px black;
-}
-
-#glade-registration .info-box,
-#glade-registration box.questions > box {
- border: 4px solid;
- border-color: @borders;
- border-radius: 16px;
- padding: 8px;
-}
-
-#glade-registration box.textbox {
- border-radius: 16px;
- color: @theme_bg_color;
- background-color: @theme_fg_color;
- box-shadow: 2px 2px 4px gray;
- padding: 8px;
- margin: 0px 16px;
-}
-
-#glade-registration box.textbox .textbox-title {
- font-size: 12pt;
- font-weight: bold;
-}
-
-#glade-registration box.questions > box > label {
- font-size: 10pt;
- font-weight: bold;
- padding: 0px 0px 8px 0px;
- text-shadow: 1px 1px @theme_bg_color;
-}
-
-#glade-registration box.statusbar {
- border-top-right-radius: 1ex;
- background: @theme_bg_color;
-}
-
diff --git a/src/glade-registration.glade b/src/glade-registration.glade
deleted file mode 100644
index 37348ff6..00000000
--- a/src/glade-registration.glade
+++ /dev/null
@@ -1,2649 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.37.0
-
-Glade - A user interface designer for GTK+ and GNOME
-Copyright (C) 2014-2020 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 domain="glade">
- <requires lib="gtk+" version="3.24"/>
- <!-- 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 &amp; 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="delete-event" handler="gtk_true" swapped="no"/>
- <signal name="response" handler="on_registration_dialog_response" swapped="no"/>
- <child internal-child="vbox">
- <object class="GtkBox" id="dialog-vbox1">
- <property name="name">glade-registration</property>
- <property name="can-focus">False</property>
- <property name="orientation">vertical</property>
- <property name="spacing">2</property>
- <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="GtkButton" id="cancel_button">
- <property name="label" translatable="yes">_Close</property>
- <property name="visible">True</property>
- <property name="can-focus">True</property>
- <property name="receives-default">True</property>
- <property name="use-underline">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="can-default">True</property>
- <property name="receives-default">True</property>
- <property name="tooltip-text" translatable="yes">Information will be sent to https://survey.gnome.org</property>
- <property name="use-underline">True</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>
- <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="orientation">vertical</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>
- <property name="halign">start</property>
- <property name="use-markup">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="GtkOverlay">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <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="user_survey_box">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="orientation">vertical</property>
- <property name="spacing">8</property>
- <child>
- <object class="GtkLabel" id="label24">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="label" translatable="yes">User Information</property>
- <property name="xalign">0</property>
- <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="user_box">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="valign">start</property>
- <property name="margin-start">12</property>
- <property name="margin-end">12</property>
- <property name="hexpand">False</property>
- <property name="vexpand">False</property>
- <property name="spacing">4</property>
- <child>
- <object class="GtkGrid" id="grid1">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="row-spacing">4</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">&lt;Your name or nickname is required&gt;</property>
- <property name="input-purpose">name</property>
- <signal name="activate" handler="glade_registration_verify_entry" swapped="no"/>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label2">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="label" translatable="yes">Name:</property>
- <property name="xalign">1</property>
- </object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label3">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="label" translatable="yes">Email:</property>
- <property name="xalign">1</property>
- </object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">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="placeholder-text" translatable="yes">&lt;Required to send back registration token&gt;</property>
- <property name="input-purpose">email</property>
- <signal name="activate" handler="glade_registration_verify_entry" swapped="no"/>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label4">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="label" translatable="yes">Country:</property>
- <property name="xalign">1</property>
- </object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label19">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="label" translatable="yes">City:</property>
- <property name="xalign">1</property>
- </object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">3</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>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label27">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="label" translatable="yes">Website</property>
- <property name="xalign">1</property>
- </object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">5</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>
- <property name="input-purpose">name</property>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">3</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="contact_name">
- <property name="visible">True</property>
- <property name="can-focus">True</property>
- <property name="input-purpose">name</property>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">4</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="contact_website">
- <property name="visible">True</property>
- <property name="can-focus">True</property>
- <property name="input-purpose">url</property>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">5</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="halign">start</property>
- <property name="draw-indicator">True</property>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">6</property>
- </packing>
- </child>
- <child>
- <object class="GtkComboBoxText" id="country_id">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="active">0</property>
- <items>
- <item id="other" translatable="yes">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</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>
- </packing>
- </child>
- <child>
- <placeholder/>
- </child>
- <style>
- <class name="info-box"/>
- </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="box2">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="halign">center</property>
- <property name="valign">start</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="label" translatable="yes">We care about privacy!</property>
- <property name="wrap">True</property>
- <property name="max-width-chars">8</property>
- <property name="xalign">0</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="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>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <style>
- <class name="textbox"/>
- </style>
- </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>
- <child>
- <object class="GtkLabel" id="label12">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="label" translatable="yes">Glade User Survey</property>
- <property name="xalign">0</property>
- <style>
- <class name="title"/>
- </style>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="survey_box">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="margin-start">12</property>
- <property name="margin-end">12</property>
- <property name="margin-bottom">4</property>
- <property name="orientation">vertical</property>
- <property name="spacing">8</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="label" translatable="yes">How long have you been programming?</property>
- <property name="xalign">0</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="halign">start</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>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <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="label" translatable="yes">Which programming languages do you prefer?</property>
- <property name="xalign">0</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="halign">start</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="halign">start</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="halign">start</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="halign">start</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="halign">start</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="halign">start</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="halign">start</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="halign">start</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_rust">
- <property name="label" translatable="yes">Rust</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="draw-indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">8</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="halign">start</property>
- <property name="draw-indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">9</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">1</property>
- </packing>
- </child>
- <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="label" translatable="yes">When did you start using Glade?</property>
- <property name="xalign">0</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>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- <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="label" translatable="yes">Which version do you normally use?</property>
- <property name="xalign">0</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="halign">start</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="halign">start</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="halign">start</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="halign">start</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="halign">start</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>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">3</property>
- </packing>
- </child>
- <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="label" translatable="yes">On what operating systems?</property>
- <property name="xalign">0</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>
- <property name="row-spacing">4</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="18" translatable="yes">Alpine</item>
- <item id="1" translatable="yes">Arch Linux</item>
- <item id="28" translatable="yes">Ataraxia Linux</item>
- <item id="15" translatable="yes">CentOS</item>
- <item id="13" translatable="yes">Chrome OS</item>
- <item id="23" translatable="yes">Clear Linux</item>
- <item id="2" translatable="yes">Debian</item>
- <item id="21" translatable="yes">elementary OS</item>
- <item id="12" translatable="yes">Endless OS</item>
- <item id="4" translatable="yes">Fedora</item>
- <item id="5" translatable="yes">Gentoo</item>
- <item id="16" translatable="yes">Kubuntu</item>
- <item id="14" translatable="yes">Linux Mint</item>
- <item id="19" translatable="yes">Mageia</item>
- <item id="6" translatable="yes">Mandriva</item>
- <item id="25" translatable="yes">Nix OS</item>
- <item id="3" translatable="yes">openSUSE</item>
- <item id="11" translatable="yes">Oracle</item>
- <item id="20" translatable="yes">Pop!_OS</item>
- <item id="26" translatable="yes">PureOS</item>
- <item id="22" translatable="yes">Raspbian</item>
- <item id="7" translatable="yes">Red Hat</item>
- <item id="17" translatable="yes">Solus</item>
- <item id="27" translatable="yes">SulinOS</item>
- <item id="8" translatable="yes">Turbolinux</item>
- <item id="9" translatable="yes">Ubuntu</item>
- <item id="24" translatable="yes">Void Linux</item>
- <item id="10" translatable="yes">Xandros</item>
- <item id="-1" translatable="yes">Other</item>
- </items>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">0</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>
- </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>
- </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>
- </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="9" translatable="yes">10</item>
- <item id="7" translatable="yes">8</item>
- <item id="6" translatable="yes">7</item>
- <item id="4" translatable="yes">Vista</item>
- <item id="8" translatable="yes">2012</item>
- <item id="5" translatable="yes">2008</item>
- <item id="3" translatable="yes">2003</item>
- <item id="2" translatable="yes">XP</item>
- <item id="1" translatable="yes">2000</item>
- <item id="-1" translatable="yes">Other</item>
- </items>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">2</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="12" translatable="yes">Catalina</item>
- <item id="11" translatable="yes">Mojave</item>
- <item id="10" translatable="yes">High Sierra</item>
- <item id="9" translatable="yes">Sierra</item>
- <item id="8" translatable="yes">El Capitan</item>
- <item id="7" translatable="yes">Yosemite</item>
- <item id="6" translatable="yes">Mavericks</item>
- <item id="5" translatable="yes">Mountain Lion</item>
- <item id="4" translatable="yes">Lion</item>
- <item id="3" translatable="yes">Snow Leopard</item>
- <item id="2" translatable="yes">Leopard</item>
- <item id="1" translatable="yes">Tiger</item>
- <item id="-1" translatable="yes">Other</item>
- </items>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">3</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="halign">start</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>
- </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="halign">start</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>
- </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="halign">start</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>
- </packing>
- </child>
- <child>
- <object class="GtkRadioButton" id="os_osx_radiobutton">
- <property name="label" translatable="yes">Mac OS X</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="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>
- </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="halign">start</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>
- </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="halign">start</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>
- </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">4</property>
- </packing>
- </child>
- <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="label" translatable="yes">How often do you use it?</property>
- <property name="xalign">0</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="halign">start</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="halign">start</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="halign">start</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 month</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="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="halign">start</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="halign">start</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>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">5</property>
- </packing>
- </child>
- <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="label" translatable="yes">What level of Glade user would you say you are?</property>
- <property name="xalign">0</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="halign">start</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="halign">start</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="halign">start</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>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">6</property>
- </packing>
- </child>
- <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="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>
- <property name="xalign">0</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="halign">start</property>
- <property name="draw-indicator">True</property>
- </object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">0</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="halign">start</property>
- <property name="draw-indicator">True</property>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">0</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="halign">start</property>
- <property name="draw-indicator">True</property>
- </object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">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="halign">start</property>
- <property name="draw-indicator">True</property>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">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">7</property>
- </packing>
- </child>
- <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="label" translatable="yes">In what field(s) is the software you used Glade to create generally used?</property>
- <property name="xalign">0</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="halign">start</property>
- <property name="draw-indicator">True</property>
- </object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">0</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="halign">start</property>
- <property name="draw-indicator">True</property>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">0</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="halign">start</property>
- <property name="draw-indicator">True</property>
- </object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">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="halign">start</property>
- <property name="draw-indicator">True</property>
- </object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">2</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="halign">start</property>
- <property name="draw-indicator">True</property>
- </object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">3</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="halign">start</property>
- <property name="draw-indicator">True</property>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">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="halign">start</property>
- <property name="draw-indicator">True</property>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">2</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="halign">start</property>
- <property name="draw-indicator">True</property>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">3</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="halign">start</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>
- </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">8</property>
- </packing>
- </child>
- <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="label" translatable="yes">What aspect of the software needs the most improvement?</property>
- <property name="xalign">0</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>
- <property name="min-content-height">64</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>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">9</property>
- </packing>
- </child>
- <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="label" translatable="yes">In your opinion what is the biggest problem with Glade?</property>
- <property name="xalign">0</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="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="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="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="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 (Windows, Mac OS X)</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="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="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>
- <property name="min-content-height">64</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>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">10</property>
- </packing>
- </child>
- <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="label" translatable="yes">Have you ever encountered a bug?</property>
- <property name="xalign">0</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">Y</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="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">N</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="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>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">11</property>
- </packing>
- </child>
- <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="label" translatable="yes">If so, did you file a bug report?</property>
- <property name="xalign">0</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">Y</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="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">N</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="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>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">12</property>
- </packing>
- </child>
- <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="label" translatable="yes">Have you ever thought about contributing?</property>
- <property name="xalign">0</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">Y</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="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">N</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="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="label" translatable="yes">Why not?</property>
- <property name="xalign">0</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>
- <property name="min-content-height">64</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>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">13</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label26">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="label" translatable="yes">Comments:</property>
- <property name="xalign">0</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>
- <property name="min-content-height">64</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>
- <style>
- <class name="questions"/>
- </style>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">4</property>
- </packing>
- </child>
- <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="label" translatable="yes">Privacy Note:</property>
- <property name="wrap">True</property>
- <property name="xalign">0</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="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>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </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>
- <style>
- <class name="main-box"/>
- </style>
- </object>
- </child>
- </object>
- </child>
- <style>
- <class name="survey_page"/>
- </style>
- </object>
- <packing>
- <property name="index">-1</property>
- </packing>
- </child>
- <child type="overlay">
- <object class="GtkBox" id="statusbar">
- <property name="can-focus">False</property>
- <property name="halign">start</property>
- <property name="valign">end</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="halign">start</property>
- <property name="margin-start">4</property>
- <property name="margin-end">4</property>
- <property name="margin-top">2</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <style>
- <class name="statusbar"/>
- </style>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
- </child>
- <action-widgets>
- <action-widget response="-6">cancel_button</action-widget>
- <action-widget response="-5">submit_button</action-widget>
- </action-widgets>
- </template>
-</interface>
diff --git a/src/glade-registration.h b/src/glade-registration.h
deleted file mode 100644
index eb650066..00000000
--- a/src/glade-registration.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * 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 4ada8c66..3b42e721 100644
--- a/src/glade-resources.gresource.xml
+++ b/src/glade-resources.gresource.xml
@@ -3,8 +3,6 @@
<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-window.css</file>
- <file compressed="true">glade-registration.css</file>
</gresource>
</gresources>
diff --git a/src/glade-window.c b/src/glade-window.c
index 08d34eef..b54beb21 100644
--- a/src/glade-window.c
+++ b/src/glade-window.c
@@ -30,7 +30,6 @@
#include "glade-window.h"
#include "glade-resources.h"
#include "glade-preferences.h"
-#include "glade-registration.h"
#include "glade-settings.h"
#include "glade-intro.h"
@@ -110,8 +109,6 @@ struct _GladeWindowPrivate
GtkWidget *open_button_box; /* gtk_button_box_set_layout() set homogeneous to TRUE, and we do not want that in this case */
GtkWidget *save_button_box;
- GtkWidget *registration; /* Registration and user survey dialog */
-
GladeIntro *intro;
GType new_type;
@@ -1584,15 +1581,6 @@ add_project (GladeWindow *window, GladeProject *project, gboolean for_file)
refresh_title (window);
}
-static void
-on_registration_action_activate (GSimpleAction *action,
- GVariant *parameter,
- gpointer data)
-{
- GladeWindow *window = data;
- gtk_window_present (GTK_WINDOW (window->priv->registration));
-}
-
static gboolean
on_undo_button_button_press_event (GtkWidget *widget,
GdkEvent *event,
@@ -1791,7 +1779,6 @@ glade_window_dispose (GObject *object)
GladeWindow *window = GLADE_WINDOW (object);
g_clear_object (&window->priv->app);
- g_clear_object (&window->priv->registration);
G_OBJECT_CLASS (glade_window_parent_class)->dispose (object);
}
@@ -2108,8 +2095,6 @@ glade_window_init (GladeWindow *window)
gtk_box_set_homogeneous (GTK_BOX (priv->open_button_box), FALSE);
gtk_box_set_homogeneous (GTK_BOX (priv->save_button_box), FALSE);
- priv->registration = glade_registration_new ();
-
/* Add Gdk backend as a class */
ctx = gtk_widget_get_style_context (GTK_WIDGET (window));
gtk_style_context_add_class (ctx, glade_window_get_gdk_backend ());
@@ -2327,7 +2312,6 @@ on_application_notify (GObject *gobject, GParamSpec *pspec)
static GActionEntry actions[] = {
{ "open", on_open_action_activate, NULL, NULL, NULL },
{ "new", on_new_action_activate, NULL, NULL, NULL },
- { "registration", on_registration_action_activate, NULL, NULL, NULL },
{ "intro", on_intro_action_activate, NULL, NULL, NULL },
{ "reference", on_reference_action_activate, NULL, NULL, NULL },
{ "help", on_user_manuel_action_activate, NULL, NULL, NULL },
@@ -2502,67 +2486,6 @@ glade_window_check_devhelp (GladeWindow *window)
g_signal_connect (glade_app_get (), "doc-search", G_CALLBACK (doc_search_cb), window);
}
-void
-glade_window_registration_notify_user (GladeWindow *window)
-{
- gboolean skip_reminder, completed;
- GladeWindowPrivate *priv;
-
- g_return_if_fail (GLADE_IS_WINDOW (window));
- priv = window->priv;
-
- if (!g_tls_backend_supports_tls (g_tls_backend_get_default ()))
- {
- g_message ("No TLS support in GIO, Registration & User Survey disabled. (missing glib-networking package)");
- actions_set_enabled (window, "registration", FALSE);
- return;
- }
-
- g_object_get (priv->registration,
- "completed", &completed,
- "skip-reminder", &skip_reminder,
- NULL);
-
- if (!completed && !skip_reminder)
- {
- GtkWidget *dialog, *check;
-
- dialog = gtk_message_dialog_new (GTK_WINDOW (glade_app_get_window ()),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_QUESTION,
- GTK_BUTTONS_YES_NO,
- "%s",
- /* translators: Primary message of a dialog used to notify the user about the survey */
- _("We are conducting a user survey\n would you like to take it now?"));
-
- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s",
- /* translators: Secondary text of a dialog used to notify the user about the survey */
- _("If not, you can always find it in the Help menu."));
-
- check = gtk_check_button_new_with_mnemonic (_("_Do not show this dialog again"));
- gtk_box_pack_end (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))),
- check, FALSE, FALSE, 0);
- gtk_widget_set_halign (check, GTK_ALIGN_START);
- gtk_widget_set_margin_start (check, 6);
- gtk_widget_show (check);
-
- if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_YES)
- gtk_window_present (GTK_WINDOW (priv->registration));
-
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check)))
- {
- g_object_set (priv->registration, "skip-reminder", TRUE, NULL);
- glade_app_config_save ();
- }
-
- gtk_widget_destroy (dialog);
- }
- else if (!completed)
- glade_util_flash_message (priv->statusbar, priv->statusbar_context_id, "%s",
- /* translators: Text to show in the statusbar if the user did not completed the survey and choose not to show the notification dialog again */
- _("Go to Help -> Registration & User Survey and complete our survey!"));
-}
-
#ifdef GDK_WINDOWING_X11
#include "gdk/gdkx.h"
#endif
diff --git a/src/glade-window.h b/src/glade-window.h
index 01657dc8..059718f7 100644
--- a/src/glade-window.h
+++ b/src/glade-window.h
@@ -58,8 +58,6 @@ gboolean glade_window_open_project (GladeWindow *window,
void glade_window_check_devhelp (GladeWindow *window);
-void glade_window_registration_notify_user (GladeWindow *window);
-
const gchar *glade_window_get_gdk_backend (void);
G_END_DECLS
diff --git a/src/glade.glade b/src/glade.glade
index f042ab4c..e13f19fa 100644
--- a/src/glade.glade
+++ b/src/glade.glade
@@ -68,20 +68,6 @@ Author: Juan Pablo Ugarte
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
- <property name="action-name">app.registration</property>
- <property name="text" translatable="yes">Registration &amp; User Survey</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkModelButton">
- <property name="visible">True</property>
- <property name="can-focus">True</property>
- <property name="receives-default">True</property>
<property name="action-name">app.reference</property>
<property name="text" translatable="yes">_Developer Reference</property>
</object>
@@ -226,10 +212,11 @@ Author: Juan Pablo Ugarte
<property name="name">version-label</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
+ <property name="valign">start</property>
<property name="width-chars">32</property>
</object>
<packing>
- <property name="expand">False</property>
+ <property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
diff --git a/src/main.c b/src/main.c
index c743e3d8..019c89f5 100644
--- a/src/main.c
+++ b/src/main.c
@@ -110,8 +110,6 @@ activate (GApplication *application)
glade_window_check_devhelp (window);
gtk_widget_show (GTK_WIDGET (window));
-
- glade_window_registration_notify_user (window);
}
static void
diff --git a/src/meson.build b/src/meson.build
index 3fbc167c..40c730a0 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -13,10 +13,8 @@ else
endif
sources = files(
- 'glade-http.c',
'glade-intro.c',
'glade-preferences.c',
- 'glade-registration.c',
'glade-settings.c',
'glade-window.c',
'main.c',
@@ -25,8 +23,6 @@ sources = files(
resource_data = files(
'glade.glade',
'glade-preferences.glade',
- 'glade-registration.css',
- 'glade-registration.glade',
'glade-window.css'
)