diff options
author | Juan Pablo Ugarte <juanpablougarte@gmail.com> | 2020-07-10 18:01:37 -0300 |
---|---|---|
committer | Juan Pablo Ugarte <juanpablougarte@gmail.com> | 2020-07-10 19:35:10 -0300 |
commit | cac74d620bc620e5d31d0872c4585fa5f2b97f3a (patch) | |
tree | 64113c097b1c455587f9f4fe4804de8b7472c2a2 /src | |
parent | 50d465281fc05d08a8c814d64bc479b7ef8eb858 (diff) | |
download | glade-cac74d620bc620e5d31d0872c4585fa5f2b97f3a.tar.gz |
GladeRegistration: rework survey
- Implement survey using new backend at surveys.gnome.org
- Save state in config file and do not alow to send a
new survey if it was already completed.
- Move buttons to headerbar.
- Update mailing list link and fix automatic subscription.
Fix issue #433 "Survey and registration"
Diffstat (limited to 'src')
-rw-r--r-- | src/glade-registration.c | 783 | ||||
-rw-r--r-- | src/glade-registration.css | 5 | ||||
-rw-r--r-- | src/glade-registration.glade | 3915 | ||||
-rw-r--r-- | src/meson.build | 1 |
4 files changed, 2529 insertions, 2175 deletions
diff --git a/src/glade-registration.c b/src/glade-registration.c index 6ff3165c..072984f1 100644 --- a/src/glade-registration.c +++ b/src/glade-registration.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014 Juan Pablo Ugarte. + * 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 @@ -27,27 +27,32 @@ #include <gladeui/glade.h> #include <glib/gi18n.h> -#define CONFIG_GROUP "User & Survey" - -/* translators: Email subject sent to the user after completing the survey */ -#define MAIL_SUBJECT _("Glade User Survey") -/* translators: Email body sent to the user after completing the survey */ -#define MAIL_BODY _("Thank you for taking Glade Users survey, we appreciate it!\n\nTo validate this email address open the following link\n\nhttps://people.gnome.org/~jpu/glade/registration.php?email=$email&validation_token=$new_validation_token\n\nIn case you want to change or update the survey, your current update token is:\n$new_token\n\nCheers\n\n The Glade team\n") - -/* translators: Email subject sent to the user after updating the survey */ -#define UPDATE_MAIL_SUBJECT _("Glade User Survey (update)") -/* translators: Email body sent to the user after updating the survey */ -#define UPDATE_MAIL_BODY _("Thank you for updating your Glade Users survey data, we appreciate it!\n\nIn case you want to change something again, your current update token is:\n$new_token\n\nCheers\n\n The Glade team\n") +#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 */ @@ -60,9 +65,6 @@ struct _GladeRegistrationPrivate GtkWidget *contact_website; GtkWidget *subscribe; - GtkWidget *update_token_checkbutton; - GtkWidget *update_token; - GtkWidget *experience; GtkWidget *experience_unit; GtkWidget *experience_not_programmer; @@ -74,6 +76,7 @@ struct _GladeRegistrationPrivate GtkWidget *lang_javascript; GtkWidget *lang_vala; GtkWidget *lang_perl; + GtkWidget *lang_rust; GtkWidget *lang_other; GtkWidget *start_using; GtkWidget *start_using_unit; @@ -121,6 +124,12 @@ enum }; 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) @@ -156,8 +165,16 @@ string_append_input_key_value_tuple (GString *string, g_string_append (string, gtk_widget_get_name (group->data)); } } - else if (GTK_IS_TOGGLE_BUTTON (input)) - g_string_append_printf (string, "%d", gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (input)) ? 1 : 0); + 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 @@ -178,19 +195,17 @@ glade_registration_show_message (GladeRegistration *registration, if (format) { + g_autofree gchar *string; va_list args; - gchar *string; va_start (args, format); string = g_strdup_vprintf (format, args); va_end (args); - gtk_label_set_text (priv->infobar_label, string); - - g_free (string); + gtk_label_set_markup (priv->infobar_label, string); } else - gtk_label_set_text (priv->infobar_label, ""); + gtk_label_set_markup (priv->infobar_label, ""); /* Only show the infobar if the dialog is visible */ if (gtk_widget_is_visible (GTK_WIDGET (registration))) @@ -205,30 +220,51 @@ glade_registration_http_post (GladeRegistration *registration, 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: Glade/"PACKAGE_VERSION" (%s; Gtk+ %d.%d.%d; glib %d.%d.%d; %s)\r\n" + "User-Agent: %s\r\n" "Connection: close\r\n" - "Accept: text/plain\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 */ - glade_window_get_gdk_backend (), /* User-Agent backend */ - GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION, /* User-Agent gtk version */ - glib_major_version, glib_minor_version, glib_micro_version,/* User-Agent glib version */ - lang, /* User-Agent language */ - lang, /* Accept-Language */ - content->len, /* Content-length */ - content->str); /* content */ + 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 */ } - -#define append_input_tuple(s,i) string_append_input_key_value_tuple (s, #i, priv->i) +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, @@ -236,7 +272,7 @@ on_http_status (GladeHTTP *http, GError *error, GladeRegistration *registration) { - gchar *text = NULL; + g_autofree gchar *text = NULL; switch (status) { @@ -262,73 +298,181 @@ on_http_status (GladeHTTP *http, gtk_label_set_text (registration->priv->status_label, text ? text : ""); gtk_widget_set_visible (registration->priv->net_spinner, text != NULL); - g_free (text); + 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); -static void + /* 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 **headers, - const gchar **values, const gchar *response, GladeRegistration *registration) { - GtkDialog *dialog; - GtkWidget *button; - - if (code == 200) - return; + GladeRegistrationPrivate *priv = registration->priv; - dialog = GTK_DIALOG (gtk_message_dialog_new (GTK_WINDOW (registration), - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, - "%s", - _("Sorry, automatic subscription to Glade Users mailing list failed"))); - - button = gtk_link_button_new_with_label ("http://lists.ximian.com/mailman/listinfo/glade-users", - _("Open Glade Users Website")); - gtk_widget_show (button); - gtk_dialog_add_action_widget (dialog, button, GTK_RESPONSE_CANCEL); - gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (gtk_dialog_get_action_area (dialog)), button, TRUE); - - gtk_dialog_run (dialog); - gtk_widget_destroy (GTK_WIDGET (dialog)); + 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 you 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_subscribe_email (GladeRegistration *registration) +glade_registration_clear (GladeRegistrationPrivate *priv) { - GladeRegistrationPrivate *priv = registration->priv; - GString *post; - - if (!priv->sub_http) - { - priv->sub_http = glade_http_new ("lists.ximian.com", 80, FALSE); - g_signal_connect_object (priv->sub_http, "request-done", - G_CALLBACK (on_subscribe_http_request_done), - registration, 0); - } + g_clear_object (&priv->cancellable); + g_clear_object (&priv->sub_cancellable); - post = g_string_new (""); + priv->cancellable = g_cancellable_new (); + priv->sub_cancellable = g_cancellable_new (); - string_append_input_key_value_tuple (post, "email", priv->email); - string_append_input_key_value_tuple (post, "fullname", priv->name); + 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; +} - glade_registration_http_post (registration, priv->sub_http, NULL, - "/mailman/subscribe/glade-users", - post); +#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) - g_string_free (post, TRUE); +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); } -#define append_input_tuple(s,i) string_append_input_key_value_tuple (s, #i, priv->i) - -static void +static void on_http_request_done (GladeHTTP *http, gint code, - const gchar **headers, - const gchar **values, const gchar *response, GladeRegistration *registration) { @@ -339,157 +483,235 @@ on_http_request_done (GladeHTTP *http, break; case 200: { - const gchar *status = NULL, *message = _("Internal server error"); GladeRegistrationPrivate *priv = registration->priv; - gint i; - for (i = 0; headers[i]; i++) + if (!priv->form_loaded) { - if (g_strcmp0 (headers[i], "X-Glade-Status") == 0) - status = values[i]; - else if (g_strcmp0 (headers[i], "X-Glade-Message") == 0) - message = values[i]; + 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 (status == NULL) - glade_registration_show_message (registration, GTK_MESSAGE_WARNING, - "%s", message); - else if (g_strcmp0 (status, "ok") == 0) + if (g_strstr_len (response, -1, "GLADE_USER_REGISTRATION_SURVEY_OK") != NULL) { gtk_label_set_text (priv->status_label, ""); - gtk_widget_hide (priv->net_spinner); + gtk_widget_hide (priv->statusbar); - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->subscribe))) - glade_registration_subscribe_email (registration); + 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)); - - g_object_set (registration, "completed", TRUE, NULL); - glade_app_config_save (); } - else if (g_strcmp0 (status, "error_required_field") == 0) - glade_registration_show_message (registration, GTK_MESSAGE_INFO, - "%s", _("Name and Email fields are required")); - else if (g_strcmp0 (status, "error_email_in_use") == 0) - glade_registration_show_message (registration, GTK_MESSAGE_WARNING, - "%s", _("Oops! Email address is already in use!\nTo update information you need to provide the token that was sent to your inbox.")); - else if (g_strcmp0 (status, "error_db_user_info") == 0) - glade_registration_show_message (registration, GTK_MESSAGE_WARNING, - _("Oops! Error saving user information: %s"), message); - else if (g_strcmp0 (status, "error_db_survey_data") == 0) - glade_registration_show_message (registration, GTK_MESSAGE_WARNING, - _("Oops! Error saving survey data: %s"), message); - else if (g_strcmp0 (status, "error_db") == 0) - glade_registration_show_message (registration, GTK_MESSAGE_WARNING, - _("Oops! Error accessing DB: %s"), message); else - glade_registration_show_message (registration, GTK_MESSAGE_WARNING, "%s", message); + glade_registration_show_message (registration, GTK_MESSAGE_WARNING, + "Internal server error"); } break; default: glade_registration_show_message (registration, GTK_MESSAGE_WARNING, - "%s", response ? response : ""); + "Got HTTP response %d", code); break; } } -static void -glade_registration_clear_cancellable (GladeRegistrationPrivate *priv) +static inline void +survey_data_set_string (GKeyFile *config, const gchar *id, const gchar *value) { - if (priv->cancellable) + 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) { - g_cancellable_cancel (priv->cancellable); - g_clear_object (&priv->cancellable); + 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; + + 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); } -static void +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) { - GladeRegistrationPrivate *priv = GLADE_REGISTRATION (dialog)->priv; - GString *post; + GladeRegistration *registration = GLADE_REGISTRATION (dialog); + GladeRegistrationPrivate *priv = registration->priv; gtk_widget_hide (priv->infobar); - - if (response_id != GTK_RESPONSE_APPLY) + + /* 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_cancellable (priv); + glade_registration_clear (priv); return; } - - glade_registration_clear_cancellable (priv); - priv->cancellable = g_cancellable_new (); - - post = g_string_new (""); - - append_input_tuple (post, name); - append_input_tuple (post, email); - append_input_tuple (post, country_id); - append_input_tuple (post, city); - append_input_tuple (post, contact_type); - append_input_tuple (post, contact_name); - append_input_tuple (post, contact_website); - - append_input_tuple (post, update_token_checkbutton); - append_input_tuple (post, update_token); - - append_input_tuple (post, experience); - append_input_tuple (post, experience_unit); - append_input_tuple (post, experience_not_programmer); - append_input_tuple (post, lang_c); - append_input_tuple (post, lang_cpp); - append_input_tuple (post, lang_csharp); - append_input_tuple (post, lang_java); - append_input_tuple (post, lang_python); - append_input_tuple (post, lang_javascript); - append_input_tuple (post, lang_vala); - append_input_tuple (post, lang_perl); - append_input_tuple (post, lang_other); - append_input_tuple (post, start_using); - append_input_tuple (post, start_using_unit); - append_input_tuple (post, version); - append_input_tuple (post, version_other); - append_input_tuple (post, os); - string_append_input_key_value_tuple (post, "linux", priv->os_linux); - string_append_input_key_value_tuple (post, "bsd", priv->os_bsd); - string_append_input_key_value_tuple (post, "windows", priv->os_windows); - string_append_input_key_value_tuple (post, "osx", priv->os_osx); - string_append_input_key_value_tuple (post, "solaris", priv->os_solaris); - append_input_tuple (post, os_other); - append_input_tuple (post, freq); - append_input_tuple (post, user_level); - append_input_tuple (post, soft_free); - append_input_tuple (post, soft_open); - append_input_tuple (post, soft_commercial); - append_input_tuple (post, soft_none); - append_input_tuple (post, field_academic); - append_input_tuple (post, field_accounting); - append_input_tuple (post, field_desktop); - append_input_tuple (post, field_educational); - append_input_tuple (post, field_embedded); - append_input_tuple (post, field_medical); - append_input_tuple (post, field_industrial); - append_input_tuple (post, field_scientific); - append_input_tuple (post, field_other); - append_input_tuple (post, improvement); - append_input_tuple (post, problem); - append_input_tuple (post, problem_other); - append_input_tuple (post, bug); - append_input_tuple (post, bugzilla); - append_input_tuple (post, contributing); - append_input_tuple (post, contributing_whynot); - append_input_tuple (post, comments); - - glade_registration_http_post (GLADE_REGISTRATION (dialog), - priv->http, - priv->cancellable, - "/~jpu/glade/registration.php", - post); - - g_string_free (post, TRUE); + + 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 @@ -533,14 +755,45 @@ on_viewport_draw (GtkWidget *viewport, cairo_t *cr, GladeRegistration *widget) } 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 ("people.gnome.org", 443, TRUE); + priv->http = glade_http_new ("surveys.gnome.org", 443, TRUE); g_signal_connect_object (priv->http, "request-done", G_CALLBACK (on_http_request_done), @@ -549,8 +802,14 @@ glade_registration_init (GladeRegistration *registration) 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); @@ -561,11 +820,24 @@ glade_registration_init (GladeRegistration *registration) { g_snprintf (id, 16, "%d", minor); g_snprintf (text, 18, "3.%d", minor); - gtk_combo_box_text_append (combo, id, text); + 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 @@ -573,9 +845,13 @@ 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); } @@ -583,14 +859,22 @@ glade_registration_finalize (GObject *object) static void glade_registration_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { - GKeyFile *config = glade_app_get_config (); + 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 (config, CONFIG_GROUP, pspec->name, g_value_get_boolean (value)); + 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); @@ -601,14 +885,17 @@ glade_registration_set_property (GObject *object, guint prop_id, const GValue *v static void glade_registration_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { - GKeyFile *config = glade_app_get_config (); + 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 (config, CONFIG_GROUP, pspec->name, NULL)); + 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); @@ -626,9 +913,12 @@ glade_registration_class_init (GladeRegistrationClass *klass) gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/glade/glade-registration.glade"); gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, infobar); + gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, 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); @@ -638,8 +928,6 @@ glade_registration_class_init (GladeRegistrationClass *klass) 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, update_token_checkbutton); - gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, update_token); gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, experience); gtk_widget_class_bind_template_child_private (widget_class, GladeRegistration, experience_unit); @@ -652,6 +940,7 @@ glade_registration_class_init (GladeRegistrationClass *klass) 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); @@ -688,6 +977,7 @@ glade_registration_class_init (GladeRegistrationClass *klass) 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); @@ -726,6 +1016,85 @@ glade_registration_class_init (GladeRegistrationClass *klass) GtkWidget* glade_registration_new (void) { - return GTK_WIDGET (g_object_new (GLADE_TYPE_REGISTRATION, NULL)); + 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 index 0e2baf81..c3aedbb9 100644 --- a/src/glade-registration.css +++ b/src/glade-registration.css @@ -72,3 +72,8 @@ 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 index d0c2c6f2..37348ff6 100644 --- a/src/glade-registration.glade +++ b/src/glade-registration.glade @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- Generated with glade 3.22.2 +<!-- Generated with glade 3.37.0 Glade - A user interface designer for GTK+ and GNOME -Copyright (C) 2014 Juan Pablo Ugarte +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 @@ -22,7 +22,7 @@ Author: Juan Pablo Ugarte <juanpablougarte@gmail.com> --> <interface domain="glade"> - <requires lib="gtk+" version="3.10"/> + <requires lib="gtk+" version="3.24"/> <!-- interface-css-provider-path glade-registration.css --> <!-- interface-license-type gplv2 --> <!-- interface-name Glade --> @@ -31,78 +31,40 @@ Author: Juan Pablo Ugarte <juanpablougarte@gmail.com> <!-- 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> + <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> + <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="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> + <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="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="GtkBox" id="box9"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="spacing">4</property> - <child> - <object class="GtkSpinner" id="net_spinner"> - <property name="can_focus">False</property> - <property name="active">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="status_label"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="hexpand">True</property> - <property name="xalign">0</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - <property name="secondary">True</property> - <property name="non_homogeneous">True</property> - </packing> - </child> + <property name="can-focus">False</property> + <property name="layout-style">end</property> <child> <object class="GtkButton" id="cancel_button"> - <property name="label" translatable="yes">_Cancel</property> + <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> + <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> @@ -114,10 +76,11 @@ Author: Juan Pablo Ugarte <juanpablougarte@gmail.com> <object class="GtkButton" id="submit_button"> <property name="label" translatable="yes">_Submit</property> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="tooltip_text" translatable="yes">Information will be sent to https://people.gnome.org/~jpu</property> - <property name="use_underline">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> @@ -129,23 +92,23 @@ Author: Juan Pablo Ugarte <juanpablougarte@gmail.com> <packing> <property name="expand">False</property> <property name="fill">True</property> - <property name="pack_type">end</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="app-paintable">True</property> + <property name="can-focus">False</property> <property name="vexpand">False</property> - <property name="show_close_button">True</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="can-focus">False</property> <property name="spacing">6</property> - <property name="layout_style">end</property> + <property name="layout-style">end</property> <child> <placeholder/> </child> @@ -161,13 +124,16 @@ Author: Juan Pablo Ugarte <juanpablougarte@gmail.com> </child> <child internal-child="content_area"> <object class="GtkBox" id="infobar-content_area1"> - <property name="can_focus">False</property> + <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="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> @@ -190,473 +156,34 @@ Author: Juan Pablo Ugarte <juanpablougarte@gmail.com> </packing> </child> <child> - <object class="GtkScrolledWindow" id="scrolledwindow"> + <object class="GtkOverlay"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">never</property> - <property name="min_content_height">480</property> + <property name="can-focus">False</property> <child> - <object class="GtkViewport" id="viewport"> + <object class="GtkScrolledWindow" id="scrolledwindow"> <property name="visible">True</property> - <property name="can_focus">False</property> - <signal name="draw" handler="on_viewport_draw" swapped="no"/> + <property name="can-focus">True</property> + <property name="hscrollbar-policy">never</property> + <property name="min-content-height">480</property> <child> - <object class="GtkBox" id="box16"> + <object class="GtkViewport" id="viewport"> <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> + <property name="can-focus">False</property> + <signal name="draw" handler="on_viewport_draw" swapped="no"/> <child> - <object class="GtkBox" id="box12"> + <object class="GtkBox" id="user_survey_box"> <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="valign">start</property> - <property name="margin_left">12</property> - <property name="margin_right">12</property> - <property name="margin_end">12</property> - <property name="hexpand">False</property> - <property name="vexpand">False</property> - <property name="spacing">4</property> + <property name="can-focus">False</property> + <property name="orientation">vertical</property> + <property name="spacing">8</property> <child> - <object class="GtkGrid" id="grid1"> + <object class="GtkLabel" id="label24"> <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="column_spacing">4</property> - <child> - <object class="GtkEntry" id="name"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hexpand">True</property> - <property name="width_chars">32</property> - <property name="placeholder_text" translatable="yes"><Your name or nickname is required></property> - </object> - <packing> - <property name="left_attach">1</property> - <property name="top_attach">0</property> - </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="margin_top">4</property> - <property name="placeholder_text" translatable="yes"><Required to send back registration token></property> - </object> - <packing> - <property name="left_attach">1</property> - <property name="top_attach">1</property> - </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> - </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> - </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> - </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="xalign">0</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="margin_top">4</property> - <property name="margin_bottom">4</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> + <property name="can-focus">False</property> + <property name="label" translatable="yes">User Information</property> + <property name="xalign">0</property> <style> - <class name="info-box"/> + <class name="title"/> </style> </object> <packing> @@ -666,399 +193,445 @@ You will be sent email requesting confirmation!</property> </packing> </child> <child> - <object class="GtkBox" id="box2"> + <object class="GtkBox" id="user_box"> <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="halign">center</property> + <property name="can-focus">False</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="GtkBox" id="box14"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="margin_left">12</property> - <property name="margin_right">12</property> - <property name="spacing">4</property> - <child> - <object class="GtkCheckButton" id="update_token_checkbutton"> - <property name="label" translatable="yes">Update Info</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> - <signal name="toggled" handler="toggle_button_set_sensitive_on_toggle" object="update_token" swapped="no"/> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkEntry" id="update_token"> - <property name="visible">True</property> - <property name="sensitive">False</property> - <property name="can_focus">True</property> - <property name="width_chars">48</property> - <property name="placeholder_text" translatable="yes"><Insert update token, if you want to update previously sent data></property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> - </child> - <child> - <object class="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">3</property> - </packing> - </child> - <child> - <object class="GtkBox" id="question_box"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="margin_left">12</property> - <property name="margin_right">12</property> - <property name="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> + <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="GtkBox" id="box3"> + <object class="GtkGrid" id="grid1"> <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="spacing">4</property> + <property name="can-focus">False</property> + <property name="row-spacing">4</property> + <property name="column-spacing">4</property> <child> - <object class="GtkSpinButton" id="experience"> + <object class="GtkEntry" id="name"> <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> + <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="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> + <property name="left-attach">1</property> + <property name="top-attach">0</property> </packing> </child> <child> - <object class="GtkComboBoxText" id="experience_unit"> + <object class="GtkLabel" id="label2"> <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> + <property name="can-focus">False</property> + <property name="label" translatable="yes">Name:</property> + <property name="xalign">1</property> </object> <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> + <property name="left-attach">0</property> + <property name="top-attach">0</property> </packing> </child> <child> - <object class="GtkCheckButton" id="experience_not_programmer"> - <property name="label" translatable="yes">I am not a programmer</property> + <object class="GtkLabel" id="label3"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes">Email:</property> + <property name="xalign">1</property> </object> <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> + <property name="left-attach">0</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">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> + <object class="GtkEntry" id="email"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> + <property name="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="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> + <property name="left-attach">1</property> + <property name="top-attach">1</property> </packing> </child> <child> - <object class="GtkCheckButton" id="lang_cpp"> - <property name="label" translatable="yes">C++</property> + <object class="GtkLabel" id="label4"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes">Country:</property> + <property name="xalign">1</property> </object> <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> + <property name="left-attach">0</property> + <property name="top-attach">2</property> </packing> </child> <child> - <object class="GtkCheckButton" id="lang_csharp"> - <property name="label" translatable="yes">C#</property> + <object class="GtkLabel" id="label19"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes">City:</property> + <property name="xalign">1</property> </object> <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> + <property name="left-attach">0</property> + <property name="top-attach">3</property> </packing> </child> <child> - <object class="GtkCheckButton" id="lang_java"> - <property name="label" translatable="yes">Java</property> + <object class="GtkComboBoxText" id="contact_type"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> + <property name="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="expand">False</property> - <property name="fill">True</property> - <property name="position">3</property> + <property name="left-attach">0</property> + <property name="top-attach">4</property> </packing> </child> <child> - <object class="GtkCheckButton" id="lang_python"> - <property name="label" translatable="yes">Python</property> + <object class="GtkLabel" id="label27"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes">Website</property> + <property name="xalign">1</property> </object> <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">4</property> + <property name="left-attach">0</property> + <property name="top-attach">5</property> </packing> </child> <child> - <object class="GtkCheckButton" id="lang_javascript"> - <property name="label" translatable="yes">JavaScript</property> + <object class="GtkEntry" id="city"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> + <property name="can-focus">True</property> + <property name="width-chars">16</property> + <property name="input-purpose">name</property> </object> <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">5</property> + <property name="left-attach">1</property> + <property name="top-attach">3</property> </packing> </child> <child> - <object class="GtkCheckButton" id="lang_vala"> - <property name="label" translatable="yes">Vala</property> + <object class="GtkEntry" id="contact_name"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> + <property name="can-focus">True</property> + <property name="input-purpose">name</property> </object> <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">6</property> + <property name="left-attach">1</property> + <property name="top-attach">4</property> </packing> </child> <child> - <object class="GtkCheckButton" id="lang_perl"> - <property name="label" translatable="yes">Perl</property> + <object class="GtkEntry" id="contact_website"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> + <property name="can-focus">True</property> + <property name="input-purpose">url</property> </object> <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">7</property> + <property name="left-attach">1</property> + <property name="top-attach">5</property> </packing> </child> <child> - <object class="GtkCheckButton" id="lang_other"> - <property name="label" translatable="yes">Other</property> + <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="xalign">0</property> - <property name="draw_indicator">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="expand">False</property> - <property name="fill">True</property> - <property name="position">8</property> + <property name="left-attach">1</property> + <property name="top-attach">6</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> + <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> @@ -1067,17 +640,23 @@ You will be sent email requesting confirmation!</property> </packing> </child> <child> - <object class="GtkBox" id="box4"> + <object class="GtkBox" id="box2"> <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="spacing">4</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="GtkSpinButton" id="start_using"> + <object class="GtkLabel" id="label6"> <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> + <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> @@ -1086,33 +665,25 @@ You will be sent email requesting confirmation!</property> </packing> </child> <child> - <object class="GtkComboBoxText" id="start_using_unit"> + <object class="GtkLabel" id="label25"> <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> + <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">False</property> + <property name="expand">True</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> + <style> + <class name="textbox"/> + </style> </object> <packing> <property name="expand">False</property> @@ -1124,44 +695,45 @@ You will be sent email requesting confirmation!</property> <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="box26"> + <object class="GtkBox" id="survey_box"> <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="hexpand">False</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="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"> + <object class="GtkBox" id="box1"> <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="halign">start</property> + <property name="can-focus">False</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> + <object class="GtkLabel" id="label5"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes">How long have you been programming?</property> <property name="xalign">0</property> - <property name="active">True</property> - <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> @@ -1170,71 +742,17 @@ You will be sent email requesting confirmation!</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> + <object class="GtkBox" id="box3"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> - <property name="group">version</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkRadioButton" id="version_3_8"> - <property name="label" translatable="yes">3.8 for GTK+ 2</property> - <property name="name">2</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> - <property name="group">version</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> - </child> - <child> - <object class="GtkRadioButton" id="version_master"> - <property name="label" translatable="yes">Master</property> - <property name="name">3</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> - <property name="group">version</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">3</property> - </packing> - </child> - <child> - <object class="GtkBox" id="box23"> - <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> + <property name="spacing">4</property> <child> - <object class="GtkRadioButton" id="version_other_radio"> - <property name="label" translatable="yes">Other</property> - <property name="name">4</property> + <object class="GtkSpinButton" id="experience"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> - <property name="group">version</property> - <signal name="toggled" handler="toggle_button_set_visible_on_toggle" object="version_other" swapped="no"/> + <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> @@ -1243,8 +761,14 @@ You will be sent email requesting confirmation!</property> </packing> </child> <child> - <object class="GtkComboBoxText" id="version_other"> - <property name="can_focus">False</property> + <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> @@ -1252,284 +776,213 @@ You will be sent email requesting confirmation!</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">4</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">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"> + <object class="GtkBox" id="box22"> <property name="visible">True</property> - <property name="can_focus">False</property> - <child> - <object class="GtkComboBoxText" id="os_linux"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="active">0</property> - <items> - <item id="0" translatable="yes">distribution</item> - <item id="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="xalign">0</property> - <property name="active">True</property> - <property name="draw_indicator">True</property> - <signal name="toggled" handler="toggle_button_set_visible_on_toggle" object="os_linux" swapped="no"/> - </object> - <packing> - <property name="left_attach">0</property> - <property name="top_attach">0</property> - </packing> - </child> - <child> - <object class="GtkRadioButton" id="os_bsd_radiobutton"> - <property name="label" translatable="yes">BSD</property> - <property name="name">1</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> - <property name="group">os</property> - <signal name="toggled" handler="toggle_button_set_visible_on_toggle" object="os_bsd" swapped="no"/> - </object> - <packing> - <property name="left_attach">0</property> - <property name="top_attach">1</property> - </packing> - </child> - <child> - <object class="GtkRadioButton" id="os_windows_radiobutton"> - <property name="label" translatable="yes">Windows</property> - <property name="name">2</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> - <property name="group">os</property> - <signal name="toggled" handler="toggle_button_set_visible_on_toggle" object="os_windows" swapped="no"/> - </object> - <packing> - <property name="left_attach">0</property> - <property name="top_attach">2</property> - </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="xalign">0</property> - <property name="draw_indicator">True</property> - <property name="group">os</property> - <signal name="toggled" handler="toggle_button_set_visible_on_toggle" object="os_osx" swapped="no"/> - </object> - <packing> - <property name="left_attach">0</property> - <property name="top_attach">3</property> - </packing> - </child> + <property name="can-focus">False</property> + <property name="orientation">vertical</property> <child> - <object class="GtkRadioButton" id="os_solaris_radiobutton"> - <property name="label" translatable="yes">Solaris</property> - <property name="name">4</property> + <object class="GtkLabel" id="label7"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes">Which programming languages do you prefer?</property> <property name="xalign">0</property> - <property name="draw_indicator">True</property> - <property name="group">os</property> - <signal name="toggled" handler="toggle_button_set_visible_on_toggle" object="os_solaris" swapped="no"/> </object> <packing> - <property name="left_attach">0</property> - <property name="top_attach">4</property> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> </packing> </child> <child> - <object class="GtkRadioButton" id="os_other_radiobutton"> - <property name="label" translatable="yes">Other</property> - <property name="name">5</property> + <object class="GtkBox" id="box13"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> - <property name="group">os</property> - <signal name="toggled" handler="toggle_button_set_visible_on_toggle" object="os_other" swapped="no"/> + <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="left_attach">0</property> - <property name="top_attach">5</property> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> </packing> </child> </object> @@ -1539,47 +992,17 @@ You will be sent email requesting confirmation!</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"> + <object class="GtkBox" id="box25"> <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="halign">start</property> + <property name="can-focus">False</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> + <object class="GtkLabel" id="label8"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes">When did you start using Glade?</property> <property name="xalign">0</property> - <property name="active">True</property> - <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> @@ -1588,15 +1011,52 @@ You will be sent email requesting confirmation!</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> + <object class="GtkBox" id="box4"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> - <property name="group">freq</property> + <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> @@ -1604,121 +1064,170 @@ You will be sent email requesting confirmation!</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="GtkRadioButton" id="freq_week_radiobutton"> - <property name="label" translatable="yes">Every week</property> - <property name="name">2</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> - <property name="group">freq</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> - </child> - <child> - <object class="GtkRadioButton" id="freq_few_month_radiobutton"> - <property name="label" translatable="yes">A few times a 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="xalign">0</property> - <property name="draw_indicator">True</property> - <property name="group">freq</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">3</property> - </packing> - </child> - <child> - <object class="GtkRadioButton" id="freq_month_radiobutton"> - <property name="label" translatable="yes">Once a month</property> - <property name="name">4</property> + <object class="GtkLabel" id="label22"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes">Which version do you normally use?</property> <property name="xalign">0</property> - <property name="draw_indicator">True</property> - <property name="group">freq</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> - <property name="position">4</property> + <property name="position">0</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> + <object class="GtkBox" id="box10"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> - <property name="group">freq</property> + <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">5</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">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> + <property name="position">3</property> </packing> </child> <child> - <object class="GtkBox" id="box5"> + <object class="GtkBox" id="box27"> <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="spacing">4</property> + <property name="can-focus">False</property> + <property name="orientation">vertical</property> <child> - <object class="GtkRadioButton" id="user_level"> - <property name="label" translatable="yes">Beginner</property> - <property name="name">0</property> + <object class="GtkLabel" id="label9"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes">On what operating systems?</property> <property name="xalign">0</property> - <property name="active">True</property> - <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> @@ -1727,15 +1236,247 @@ You will be sent email requesting confirmation!</property> </packing> </child> <child> - <object class="GtkRadioButton" id="user_intermediate_radiobutton"> - <property name="label" translatable="yes">Intermediate</property> - <property name="name">1</property> + <object class="GtkGrid" id="grid2"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> - <property name="group">user_level</property> + <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> @@ -1743,278 +1484,186 @@ You will be sent email requesting confirmation!</property> <property name="position">1</property> </packing> </child> - <child> - <object class="GtkRadioButton" id="user_advanced_radiobutton"> - <property name="label" translatable="yes">Advanced</property> - <property name="name">2</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> - <property name="group">user_level</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> - </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> - <property name="position">1</property> + <property name="position">4</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"> + <object class="GtkBox" id="box28"> <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="xalign">0</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="xalign">0</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="left_attach">1</property> - <property name="top_attach">0</property> - </packing> - </child> + <property name="can-focus">False</property> + <property name="orientation">vertical</property> <child> - <object class="GtkCheckButton" id="soft_commercial"> - <property name="label" translatable="yes">Commercial/Closed software</property> + <object class="GtkLabel" id="label10"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes">How often do you use it?</property> <property name="xalign">0</property> - <property name="draw_indicator">True</property> </object> <packing> - <property name="left_attach">0</property> - <property name="top_attach">1</property> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> </packing> </child> <child> - <object class="GtkCheckButton" id="soft_none"> - <property name="label" translatable="yes">None - distributed internally</property> + <object class="GtkBox" id="box6"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> + <property name="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="left_attach">1</property> - <property name="top_attach">1</property> + <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">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> + <property name="position">5</property> </packing> </child> <child> - <object class="GtkGrid" id="grid4"> + <object class="GtkBox" id="box29"> <property name="visible">True</property> - <property name="can_focus">False</property> - <child> - <object class="GtkCheckButton" id="field_academic"> - <property name="label" translatable="yes">Academic</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="left_attach">0</property> - <property name="top_attach">0</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="field_embedded"> - <property name="label" translatable="yes">Embedded applications</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="left_attach">1</property> - <property name="top_attach">0</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="field_accounting"> - <property name="label" translatable="yes">Accounting</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="left_attach">0</property> - <property name="top_attach">1</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="field_desktop"> - <property name="label" translatable="yes">Desktop applications</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="left_attach">0</property> - <property name="top_attach">2</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="field_educational"> - <property name="label" translatable="yes">Educational</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="left_attach">0</property> - <property name="top_attach">3</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="field_medical"> - <property name="label" translatable="yes">Medical</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="left_attach">1</property> - <property name="top_attach">1</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="field_industrial"> - <property name="label" translatable="yes">Industrial applications</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="left_attach">1</property> - <property name="top_attach">2</property> - </packing> - </child> + <property name="can-focus">False</property> + <property name="orientation">vertical</property> <child> - <object class="GtkCheckButton" id="field_scientific"> - <property name="label" translatable="yes">Scientific</property> + <object class="GtkLabel" id="label11"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</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> - <property name="draw_indicator">True</property> </object> <packing> - <property name="left_attach">1</property> - <property name="top_attach">3</property> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> </packing> </child> <child> - <object class="GtkBox" id="box24"> + <object class="GtkBox" id="box5"> <property name="visible">True</property> - <property name="can_focus">False</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> + <object class="GtkRadioButton" id="user_level"> + <property name="label" translatable="yes">Beginner</property> + <property name="name">0</property> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> - <signal name="toggled" handler="toggle_button_set_visible_on_toggle" object="field_other" swapped="no"/> + <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> @@ -2023,8 +1672,15 @@ You will be sent email requesting confirmation!</property> </packing> </child> <child> - <object class="GtkEntry" id="field_other"> - <property name="can_focus">True</property> + <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> @@ -2032,108 +1688,49 @@ You will be sent email requesting confirmation!</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="left_attach">0</property> - <property name="top_attach">4</property> - <property name="width">2</property> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> - <property name="position">1</property> + <property name="position">6</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"> + <object class="GtkBox" id="box30"> <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="can-focus">False</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> + <object class="GtkLabel" id="label13"> <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="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> - <property name="active">True</property> - <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> @@ -2142,16 +1739,65 @@ You will be sent email requesting confirmation!</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> + <object class="GtkGrid" id="grid3"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="halign">start</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> - <property name="group">problem</property> + <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> @@ -2159,147 +1805,255 @@ You will be sent email requesting confirmation!</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="GtkRadioButton" id="problem_training_radiobutton"> - <property name="label" translatable="yes">Lack of professional training</property> - <property name="name">2</property> + <object class="GtkLabel" id="label23"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="halign">start</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> - <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> + <property name="position">0</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> + <object class="GtkGrid" id="grid4"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="halign">start</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> - <property name="group">problem</property> + <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">3</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="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> + <object class="GtkLabel" id="label14"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="halign">start</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> - <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> + <property name="position">0</property> </packing> </child> <child> - <object class="GtkRadioButton" id="problem_other_radiobutton"> - <property name="label" translatable="yes">Other</property> - <property name="name">5</property> + <object class="GtkScrolledWindow" id="scrolledwindow1"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="halign">start</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> - <property name="group">problem</property> - <signal name="toggled" handler="toggle_button_set_visible_on_toggle" object="problem_other_scrolledwindow" swapped="no"/> + <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">5</property> + <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> - <property name="position">1</property> + <property name="position">9</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"> + <object class="GtkBox" id="box35"> <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="angle">0.059999998658895493</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> + <property name="can-focus">False</property> + <property name="orientation">vertical</property> <child> - <object class="GtkRadioButton" id="bug_yes"> - <property name="label" translatable="yes">Yes</property> - <property name="name">1</property> + <object class="GtkLabel" id="label15"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</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> - <property name="draw_indicator">True</property> - <property name="group">bug</property> </object> <packing> <property name="expand">False</property> @@ -2308,15 +2062,115 @@ You will be sent email requesting confirmation!</property> </packing> </child> <child> - <object class="GtkRadioButton" id="bug"> - <property name="label" translatable="yes">No</property> - <property name="name">0</property> + <object class="GtkBox" id="box7"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="active">True</property> - <property name="draw_indicator">True</property> + <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> @@ -2324,54 +2178,44 @@ You will be sent email requesting confirmation!</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">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> + <property name="position">10</property> </packing> </child> <child> - <object class="GtkBox" id="box19"> + <object class="GtkBox" id="box31"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> + <property name="orientation">vertical</property> <property name="spacing">4</property> <child> - <object class="GtkRadioButton" id="bugzilla_yes"> - <property name="label" translatable="yes">Yes</property> - <property name="name">1</property> + <object class="GtkLabel" id="label16"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes">Have you ever encountered a bug?</property> <property name="xalign">0</property> - <property name="draw_indicator">True</property> - <property name="group">bugzilla</property> </object> <packing> <property name="expand">False</property> @@ -2380,15 +2224,44 @@ You will be sent email requesting confirmation!</property> </packing> </child> <child> - <object class="GtkRadioButton" id="bugzilla"> - <property name="label" translatable="yes">No</property> - <property name="name">0</property> + <object class="GtkBox" id="box21"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="active">True</property> - <property name="draw_indicator">True</property> + <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> @@ -2400,35 +2273,21 @@ You will be sent email requesting confirmation!</property> <packing> <property name="expand">False</property> <property name="fill">True</property> - <property name="position">1</property> + <property name="position">11</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"> + <object class="GtkBox" id="box32"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <property name="orientation">vertical</property> + <property name="spacing">4</property> <child> - <object class="GtkLabel" id="label18"> + <object class="GtkLabel" id="label17"> <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="can-focus">False</property> + <property name="label" translatable="yes">If so, did you file a bug report?</property> <property name="xalign">0</property> - <style> - <class name="survey_question"/> - </style> </object> <packing> <property name="expand">False</property> @@ -2437,20 +2296,20 @@ You will be sent email requesting confirmation!</property> </packing> </child> <child> - <object class="GtkBox" id="box18"> + <object class="GtkBox" id="box19"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <property name="spacing">4</property> <child> - <object class="GtkRadioButton" id="contributing_yes"> + <object class="GtkRadioButton" id="bugzilla_yes"> <property name="label" translatable="yes">Yes</property> - <property name="name">1</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="xalign">0</property> - <property name="draw_indicator">True</property> - <property name="group">contributing</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> @@ -2459,16 +2318,15 @@ You will be sent email requesting confirmation!</property> </packing> </child> <child> - <object class="GtkRadioButton" id="contributing"> + <object class="GtkRadioButton" id="bugzilla"> <property name="label" translatable="yes">No</property> - <property name="name">0</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="xalign">0</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"/> + <property name="draw-indicator">True</property> </object> <packing> <property name="expand">False</property> @@ -2487,23 +2345,82 @@ You will be sent email requesting confirmation!</property> <packing> <property name="expand">False</property> <property name="fill">True</property> - <property name="position">0</property> + <property name="position">12</property> </packing> </child> <child> - <object class="GtkBox" id="why_not_box"> + <object class="GtkBox" id="box36"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <property name="orientation">vertical</property> <child> - <object class="GtkLabel" id="label20"> + <object class="GtkBox" id="box17"> <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> + <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> @@ -2512,17 +2429,45 @@ You will be sent email requesting confirmation!</property> </packing> </child> <child> - <object class="GtkScrolledWindow" id="scrolledwindow4"> + <object class="GtkBox" id="why_not_box"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="shadow_type">in</property> - <property name="min_content_height">64</property> + <property name="can-focus">False</property> + <property name="orientation">vertical</property> <child> - <object class="GtkTextView" id="contributing_whynot"> + <object class="GtkLabel" id="label20"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="accepts_tab">False</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> @@ -2535,124 +2480,158 @@ You will be sent email requesting confirmation!</property> <packing> <property name="expand">False</property> <property name="fill">True</property> - <property name="position">1</property> + <property name="position">13</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"> + <object class="GtkLabel" id="label26"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="accepts_tab">False</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> - </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"/> + <class name="questions"/> </style> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> - <property name="position">0</property> + <property name="position">4</property> </packing> </child> <child> - <object class="GtkLabel" id="label29"> + <object class="GtkBox" id="box8"> <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. + <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> + <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">1</property> + <property name="position">5</property> </packing> </child> <style> - <class name="textbox"/> + <class name="main-box"/> </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> + <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> - <style> - <class name="survey_page"/> - </style> </object> <packing> <property name="expand">True</property> @@ -2664,7 +2643,7 @@ Individual data will be stored in a private database and it will not be shared w </child> <action-widgets> <action-widget response="-6">cancel_button</action-widget> - <action-widget response="-10">submit_button</action-widget> + <action-widget response="-5">submit_button</action-widget> </action-widgets> </template> </interface> diff --git a/src/meson.build b/src/meson.build index 0e4679aa..f1f80bc4 100644 --- a/src/meson.build +++ b/src/meson.build @@ -29,6 +29,7 @@ sources += gnome.compile_resources( deps = [ gmodule_export_dep, libgladeui_dep, + libxml_dep, ] ldflags = [] |