diff options
author | Juan Pablo Ugarte <juanpablougarte@gmail.com> | 2022-04-21 17:45:29 -0300 |
---|---|---|
committer | Juan Pablo Ugarte <juanpablougarte@gmail.com> | 2022-08-10 16:24:25 -0400 |
commit | 3970e9706c5e0eaf5672652359151cde70cf4ae8 (patch) | |
tree | 80fb9a70f412cfaf64f79c403099abb88a8da383 /src | |
parent | 2a6f53bdc50f62379e41546b7b68fd94ab237bf6 (diff) | |
download | glade-3970e9706c5e0eaf5672652359151cde70cf4ae8.tar.gz |
GladeWindow: Remove survey
We do not need to run the survey anymore since there is not plan for further development.
Diffstat (limited to 'src')
-rw-r--r-- | src/glade-http.c | 547 | ||||
-rw-r--r-- | src/glade-http.h | 92 | ||||
-rw-r--r-- | src/glade-registration.c | 1100 | ||||
-rw-r--r-- | src/glade-registration.css | 79 | ||||
-rw-r--r-- | src/glade-registration.glade | 2649 | ||||
-rw-r--r-- | src/glade-registration.h | 60 | ||||
-rw-r--r-- | src/glade-resources.gresource.xml | 2 | ||||
-rw-r--r-- | src/glade-window.c | 77 | ||||
-rw-r--r-- | src/glade-window.h | 2 | ||||
-rw-r--r-- | src/glade.glade | 17 | ||||
-rw-r--r-- | src/main.c | 2 | ||||
-rw-r--r-- | src/meson.build | 4 |
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 & 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"><Your name or nickname is required></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"><Required to send back registration token></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 & 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> @@ -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' ) |