Matej Habrnal 34c7e2
From b89e812251efdbbc83ed84932c7dc0d0852d153c Mon Sep 17 00:00:00 2001
Matej Habrnal 34c7e2
From: Matej Habrnal <mhabrnal@redhat.com>
Matej Habrnal 34c7e2
Date: Mon, 8 Jun 2015 10:31:07 +0200
Matej Habrnal 34c7e2
Subject: [PATCH] configui: add option always generate backtrace locally
Matej Habrnal 34c7e2
Matej Habrnal 34c7e2
The option 'Ask before uploading coredump' is replaced by 'Upload coredump for
Matej Habrnal 34c7e2
backtrace generation'. The new config option allows the user to choose the option always
Matej Habrnal 34c7e2
generate the backtrace locally ('Never').
Matej Habrnal 34c7e2
Matej Habrnal 34c7e2
Related to rhbz#986876
Matej Habrnal 34c7e2
Related to abrt/gnome-abrt#131
Matej Habrnal 34c7e2
Matej Habrnal 34c7e2
Signed-off-by: Matej Habrnal <mhabrnal@redhat.com>
Matej Habrnal 34c7e2
Signed-off-by: Jakub Filak <jfilak@redhat.com>
Matej Habrnal 34c7e2
---
Matej Habrnal 34c7e2
 src/configuration-gui/abrt-config-widget.c     | 152 ++++++++++++++++++++++---
Matej Habrnal 34c7e2
 src/configuration-gui/abrt-config-widget.glade | 119 +++++++++++++------
Matej Habrnal 34c7e2
 2 files changed, 219 insertions(+), 52 deletions(-)
Matej Habrnal 34c7e2
Matej Habrnal 34c7e2
diff --git a/src/configuration-gui/abrt-config-widget.c b/src/configuration-gui/abrt-config-widget.c
Matej Habrnal 34c7e2
index 664180d..7d2430b 100644
Matej Habrnal 34c7e2
--- a/src/configuration-gui/abrt-config-widget.c
Matej Habrnal 34c7e2
+++ b/src/configuration-gui/abrt-config-widget.c
Matej Habrnal 34c7e2
@@ -38,10 +38,11 @@ typedef struct {
Matej Habrnal 34c7e2
 } AbrtAppConfiguration;
Matej Habrnal 34c7e2
 
Matej Habrnal 34c7e2
 typedef struct {
Matej Habrnal 34c7e2
-    const char *name;
Matej Habrnal 34c7e2
-    GtkSwitch *widget;
Matej Habrnal 34c7e2
-    gboolean default_value;
Matej Habrnal 34c7e2
-    gboolean current_value;
Matej Habrnal 34c7e2
+    const char *name;           ///< e.g. ask_steal_dir, report-technical-problems
Matej Habrnal 34c7e2
+    GtkSwitch *switch_widget;
Matej Habrnal 34c7e2
+    GtkWidget *radio_button_widget[3];
Matej Habrnal 34c7e2
+    int default_value;
Matej Habrnal 34c7e2
+    int current_value;
Matej Habrnal 34c7e2
     AbrtAppConfiguration *config;
Matej Habrnal 34c7e2
 } AbrtConfigWidgetOption;
Matej Habrnal 34c7e2
 
Matej Habrnal 34c7e2
@@ -49,17 +50,34 @@ enum AbrtOptions
Matej Habrnal 34c7e2
 {
Matej Habrnal 34c7e2
     _ABRT_OPT_BEGIN_,
Matej Habrnal 34c7e2
 
Matej Habrnal 34c7e2
-    ABRT_OPT_UPLOAD_COREDUMP = _ABRT_OPT_BEGIN_,
Matej Habrnal 34c7e2
-    ABRT_OPT_STEAL_DIRECTORY,
Matej Habrnal 34c7e2
+    _ABRT_OPT_SWITCH_BEGIN_= _ABRT_OPT_BEGIN_,
Matej Habrnal 34c7e2
+
Matej Habrnal 34c7e2
+    ABRT_OPT_STEAL_DIRECTORY= _ABRT_OPT_BEGIN_,
Matej Habrnal 34c7e2
     ABRT_OPT_PRIVATE_TICKET,
Matej Habrnal 34c7e2
     ABRT_OPT_SEND_UREPORT,
Matej Habrnal 34c7e2
     ABRT_OPT_SHORTENED_REPORTING,
Matej Habrnal 34c7e2
     ABRT_OPT_SILENT_SHORTENED_REPORTING,
Matej Habrnal 34c7e2
     ABRT_OPT_NOTIFY_INCOMPLETE_PROBLEMS,
Matej Habrnal 34c7e2
 
Matej Habrnal 34c7e2
+    _ABRT_OPT_SWITCH_END_,
Matej Habrnal 34c7e2
+
Matej Habrnal 34c7e2
+    _ABRT_RADIOBUTTON_OPT_BEGIN_= _ABRT_OPT_SWITCH_END_,
Matej Habrnal 34c7e2
+
Matej Habrnal 34c7e2
+    ABRT_OPT_UPLOAD_COREDUMP= _ABRT_OPT_SWITCH_END_,
Matej Habrnal 34c7e2
+
Matej Habrnal 34c7e2
     _ABRT_OPT_END_,
Matej Habrnal 34c7e2
 };
Matej Habrnal 34c7e2
 
Matej Habrnal 34c7e2
+enum AbrtRadioButtonOptions
Matej Habrnal 34c7e2
+{
Matej Habrnal 34c7e2
+    _ABRT_RADIOBUTTON_OPT_ = -1,
Matej Habrnal 34c7e2
+    ABRT_RADIOBUTTON_OPT_NEVER = 0,
Matej Habrnal 34c7e2
+    ABRT_RADIOBUTTON_OPT_ALWAYS = 1,
Matej Habrnal 34c7e2
+    ABRT_RADIOBUTTON_OPT_ASK = 2,
Matej Habrnal 34c7e2
+};
Matej Habrnal 34c7e2
+
Matej Habrnal 34c7e2
+/* This structure holds private data of AbrtConfigWidget
Matej Habrnal 34c7e2
+ */
Matej Habrnal 34c7e2
 struct AbrtConfigWidgetPrivate {
Matej Habrnal 34c7e2
     GtkBuilder   *builder;
Matej Habrnal 34c7e2
     AbrtAppConfiguration *report_gtk_conf;
Matej Habrnal 34c7e2
@@ -103,7 +121,13 @@ abrt_app_configuration_set_value(AbrtAppConfiguration *conf, const char *name, c
Matej Habrnal 34c7e2
 static const char *
Matej Habrnal 34c7e2
 abrt_app_configuration_get_value(AbrtAppConfiguration *conf, const char *name)
Matej Habrnal 34c7e2
 {
Matej Habrnal 34c7e2
-    return get_app_user_setting(conf->settings, name);
Matej Habrnal 34c7e2
+    if (conf->settings)
Matej Habrnal 34c7e2
+    {
Matej Habrnal 34c7e2
+        const char *val = get_app_user_setting(conf->settings, name);
Matej Habrnal 34c7e2
+        return (val == NULL || strcmp(val, "") == 0) ? NULL : val;
Matej Habrnal 34c7e2
+    }
Matej Habrnal 34c7e2
+
Matej Habrnal 34c7e2
+    assert(!"BUG: not properly initialized AbrtAppConfiguration");
Matej Habrnal 34c7e2
 }
Matej Habrnal 34c7e2
 
Matej Habrnal 34c7e2
 static void
Matej Habrnal 34c7e2
@@ -186,9 +210,30 @@ on_switch_activate(GObject       *object,
Matej Habrnal 34c7e2
 }
Matej Habrnal 34c7e2
 
Matej Habrnal 34c7e2
 static void
Matej Habrnal 34c7e2
-update_option_current_value(AbrtConfigWidget *self, enum AbrtOptions opid)
Matej Habrnal 34c7e2
+on_radio_button_toggle(GObject       *object,
Matej Habrnal 34c7e2
+        AbrtConfigWidget *config)
Matej Habrnal 34c7e2
 {
Matej Habrnal 34c7e2
-    assert((opid >= _ABRT_OPT_BEGIN_ && opid < _ABRT_OPT_END_) || !"Out of range Option ID value");
Matej Habrnal 34c7e2
+    /* inactive radio button */
Matej Habrnal 34c7e2
+    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(object)) == false)
Matej Habrnal 34c7e2
+        return;
Matej Habrnal 34c7e2
+
Matej Habrnal 34c7e2
+    AbrtConfigWidgetOption *option = g_object_get_data(G_OBJECT(object), "abrt-option");
Matej Habrnal 34c7e2
+    if (option->config == NULL)
Matej Habrnal 34c7e2
+        return;
Matej Habrnal 34c7e2
+
Matej Habrnal 34c7e2
+    /* get active radio button */
Matej Habrnal 34c7e2
+    const char *val = g_object_get_data(G_OBJECT(object), "abrt-triple-switch-value");
Matej Habrnal 34c7e2
+    log_debug("%s : %s", option->name, val);
Matej Habrnal 34c7e2
+
Matej Habrnal 34c7e2
+    abrt_app_configuration_set_value(option->config, option->name, val);
Matej Habrnal 34c7e2
+    abrt_app_configuration_save(option->config);
Matej Habrnal 34c7e2
+    emit_change(config);
Matej Habrnal 34c7e2
+}
Matej Habrnal 34c7e2
+
Matej Habrnal 34c7e2
+static void
Matej Habrnal 34c7e2
+update_option_switch_current_value(AbrtConfigWidget *self, enum AbrtOptions opid)
Matej Habrnal 34c7e2
+{
Matej Habrnal 34c7e2
+    assert((opid >= _ABRT_OPT_SWITCH_BEGIN_ && opid < _ABRT_OPT_SWITCH_END_) || !"Out of range Option ID value");
Matej Habrnal 34c7e2
 
Matej Habrnal 34c7e2
     AbrtConfigWidgetOption *option = &(self->priv->options[opid]);
Matej Habrnal 34c7e2
     const char *val = abrt_app_configuration_get_value(option->config, option->name);
Matej Habrnal 34c7e2
@@ -196,19 +241,80 @@ update_option_current_value(AbrtConfigWidget *self, enum AbrtOptions opid)
Matej Habrnal 34c7e2
 }
Matej Habrnal 34c7e2
 
Matej Habrnal 34c7e2
 static void
Matej Habrnal 34c7e2
+update_option_radio_button_current_value(AbrtConfigWidget *self, enum AbrtOptions opid)
Matej Habrnal 34c7e2
+{
Matej Habrnal 34c7e2
+    assert((opid >= _ABRT_RADIOBUTTON_OPT_BEGIN_ && opid < _ABRT_OPT_END_) || !"Out of range Option ID value");
Matej Habrnal 34c7e2
+
Matej Habrnal 34c7e2
+    AbrtConfigWidgetOption *option = &(self->priv->options[opid]);
Matej Habrnal 34c7e2
+
Matej Habrnal 34c7e2
+    const char *val = NULL;
Matej Habrnal 34c7e2
+    if (option->config != NULL)
Matej Habrnal 34c7e2
+        val = abrt_app_configuration_get_value(option->config, option->name);
Matej Habrnal 34c7e2
+
Matej Habrnal 34c7e2
+    if (val == NULL)
Matej Habrnal 34c7e2
+        option->current_value = option->default_value;
Matej Habrnal 34c7e2
+    else if (string_to_bool(val))
Matej Habrnal 34c7e2
+        option->current_value = ABRT_RADIOBUTTON_OPT_ALWAYS;
Matej Habrnal 34c7e2
+    else
Matej Habrnal 34c7e2
+        option->current_value = ABRT_RADIOBUTTON_OPT_NEVER;
Matej Habrnal 34c7e2
+}
Matej Habrnal 34c7e2
+
Matej Habrnal 34c7e2
+static void
Matej Habrnal 34c7e2
 connect_switch_with_option(AbrtConfigWidget *self, enum AbrtOptions opid, const char *switch_name)
Matej Habrnal 34c7e2
 {
Matej Habrnal 34c7e2
-    assert((opid >= _ABRT_OPT_BEGIN_ && opid < _ABRT_OPT_END_) || !"Out of range Option ID value");
Matej Habrnal 34c7e2
+    assert((opid >= _ABRT_OPT_SWITCH_BEGIN_ && opid < _ABRT_OPT_SWITCH_END_) || !"Out of range Option ID value");
Matej Habrnal 34c7e2
 
Matej Habrnal 34c7e2
     AbrtConfigWidgetOption *option = &(self->priv->options[opid]);
Matej Habrnal 34c7e2
-    update_option_current_value(self, opid);
Matej Habrnal 34c7e2
+    update_option_switch_current_value(self, opid);
Matej Habrnal 34c7e2
 
Matej Habrnal 34c7e2
     GtkSwitch *gsw = GTK_SWITCH(WID(switch_name));
Matej Habrnal 34c7e2
-    option->widget = gsw;
Matej Habrnal 34c7e2
-    gtk_switch_set_active(gsw, option->current_value);
Matej Habrnal 34c7e2
+    option->switch_widget = gsw;
Matej Habrnal 34c7e2
+    gtk_switch_set_active(gsw, (gboolean)option->current_value);
Matej Habrnal 34c7e2
+
Matej Habrnal 34c7e2
     g_object_set_data(G_OBJECT(gsw), "abrt-option", option);
Matej Habrnal 34c7e2
     g_signal_connect(G_OBJECT(gsw), "notify::active",
Matej Habrnal 34c7e2
             G_CALLBACK(on_switch_activate), self);
Matej Habrnal 34c7e2
+
Matej Habrnal 34c7e2
+    /* If the option has no config, make the corresponding insensitive. */
Matej Habrnal 34c7e2
+    gtk_widget_set_sensitive(GTK_WIDGET(gsw), option->config != NULL);
Matej Habrnal 34c7e2
+}
Matej Habrnal 34c7e2
+
Matej Habrnal 34c7e2
+static void
Matej Habrnal 34c7e2
+connect_radio_buttons_with_option(AbrtConfigWidget *self, enum AbrtOptions opid,
Matej Habrnal 34c7e2
+                 const char *btn_always_name, const char *btn_never_name,
Matej Habrnal 34c7e2
+                 const char *btn_ask_name)
Matej Habrnal 34c7e2
+{
Matej Habrnal 34c7e2
+    assert((opid >= _ABRT_RADIOBUTTON_OPT_BEGIN_ && opid < _ABRT_OPT_END_) || !"Out of range Option ID value");
Matej Habrnal 34c7e2
+
Matej Habrnal 34c7e2
+    AbrtConfigWidgetOption *option = &(self->priv->options[opid]);
Matej Habrnal 34c7e2
+    update_option_radio_button_current_value(self, opid);
Matej Habrnal 34c7e2
+
Matej Habrnal 34c7e2
+    GtkWidget *btn_always = WID(btn_always_name);
Matej Habrnal 34c7e2
+    GtkWidget *btn_never = WID(btn_never_name);
Matej Habrnal 34c7e2
+    GtkWidget *btn_ask = WID(btn_ask_name);
Matej Habrnal 34c7e2
+
Matej Habrnal 34c7e2
+    option->radio_button_widget[ABRT_RADIOBUTTON_OPT_ALWAYS] = btn_always;
Matej Habrnal 34c7e2
+    option->radio_button_widget[ABRT_RADIOBUTTON_OPT_NEVER] = btn_never;
Matej Habrnal 34c7e2
+    option->radio_button_widget[ABRT_RADIOBUTTON_OPT_ASK] = btn_ask;
Matej Habrnal 34c7e2
+
Matej Habrnal 34c7e2
+    GtkWidget *active_button = option->radio_button_widget[option->current_value];
Matej Habrnal 34c7e2
+    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(active_button), TRUE);
Matej Habrnal 34c7e2
+
Matej Habrnal 34c7e2
+    g_object_set_data(G_OBJECT(btn_always), "abrt-option", option);
Matej Habrnal 34c7e2
+    g_object_set_data(G_OBJECT(btn_always), "abrt-triple-switch-value", (char *)"yes");
Matej Habrnal 34c7e2
+    g_object_set_data(G_OBJECT(btn_never), "abrt-option", option);
Matej Habrnal 34c7e2
+    g_object_set_data(G_OBJECT(btn_never), "abrt-triple-switch-value", (char *)"no");
Matej Habrnal 34c7e2
+    g_object_set_data(G_OBJECT(btn_ask), "abrt-option", option);
Matej Habrnal 34c7e2
+    g_object_set_data(G_OBJECT(btn_ask), "abrt-triple-switch-value", NULL);
Matej Habrnal 34c7e2
+
Matej Habrnal 34c7e2
+    g_signal_connect(btn_always, "toggled", G_CALLBACK(on_radio_button_toggle), self);
Matej Habrnal 34c7e2
+    g_signal_connect(btn_never, "toggled", G_CALLBACK(on_radio_button_toggle), self);
Matej Habrnal 34c7e2
+    g_signal_connect(btn_ask, "toggled", G_CALLBACK(on_radio_button_toggle), self);
Matej Habrnal 34c7e2
+
Matej Habrnal 34c7e2
+    /* If the option has no config, make the corresponding insensitive. */
Matej Habrnal 34c7e2
+    gtk_widget_set_sensitive(GTK_WIDGET(btn_always), option->config != NULL);
Matej Habrnal 34c7e2
+    gtk_widget_set_sensitive(GTK_WIDGET(btn_never), option->config != NULL);
Matej Habrnal 34c7e2
+    gtk_widget_set_sensitive(GTK_WIDGET(btn_ask), option->config != NULL);
Matej Habrnal 34c7e2
 }
Matej Habrnal 34c7e2
 
Matej Habrnal 34c7e2
 static void
Matej Habrnal 34c7e2
@@ -246,8 +352,8 @@ abrt_config_widget_init(AbrtConfigWidget *self)
Matej Habrnal 34c7e2
     self->priv->options[ABRT_OPT_STEAL_DIRECTORY].default_value = TRUE;
Matej Habrnal 34c7e2
     self->priv->options[ABRT_OPT_STEAL_DIRECTORY].config = self->priv->report_gtk_conf;
Matej Habrnal 34c7e2
 
Matej Habrnal 34c7e2
-    self->priv->options[ABRT_OPT_UPLOAD_COREDUMP].name = "abrt_analyze_smart_ask_upload_coredump";
Matej Habrnal 34c7e2
-    self->priv->options[ABRT_OPT_UPLOAD_COREDUMP].default_value = TRUE;
Matej Habrnal 34c7e2
+    self->priv->options[ABRT_OPT_UPLOAD_COREDUMP].name = "abrt_analyze_upload_coredump";
Matej Habrnal 34c7e2
+    self->priv->options[ABRT_OPT_UPLOAD_COREDUMP].default_value = ABRT_RADIOBUTTON_OPT_ASK;
Matej Habrnal 34c7e2
     self->priv->options[ABRT_OPT_UPLOAD_COREDUMP].config = self->priv->report_gtk_conf;
Matej Habrnal 34c7e2
 
Matej Habrnal 34c7e2
     self->priv->options[ABRT_OPT_PRIVATE_TICKET].name = CREATE_PRIVATE_TICKET;
Matej Habrnal 34c7e2
@@ -271,8 +377,11 @@ abrt_config_widget_init(AbrtConfigWidget *self)
Matej Habrnal 34c7e2
     self->priv->options[ABRT_OPT_NOTIFY_INCOMPLETE_PROBLEMS].default_value = FALSE;
Matej Habrnal 34c7e2
     self->priv->options[ABRT_OPT_NOTIFY_INCOMPLETE_PROBLEMS].config = self->priv->abrt_applet_conf;
Matej Habrnal 34c7e2
 
Matej Habrnal 34c7e2
+    /* Connect radio buttons with options */
Matej Habrnal 34c7e2
+    connect_radio_buttons_with_option(self, ABRT_OPT_UPLOAD_COREDUMP,
Matej Habrnal 34c7e2
+                                        "bg_always", "bg_never", "bg_ask" );
Matej Habrnal 34c7e2
+
Matej Habrnal 34c7e2
     /* Connect widgets with options */
Matej Habrnal 34c7e2
-    connect_switch_with_option(self, ABRT_OPT_UPLOAD_COREDUMP, "switch_upload_coredump");
Matej Habrnal 34c7e2
     connect_switch_with_option(self, ABRT_OPT_STEAL_DIRECTORY, "switch_steal_directory");
Matej Habrnal 34c7e2
     connect_switch_with_option(self, ABRT_OPT_PRIVATE_TICKET, "switch_private_ticket");
Matej Habrnal 34c7e2
     connect_switch_with_option(self, ABRT_OPT_SEND_UREPORT, "switch_send_ureport");
Matej Habrnal 34c7e2
@@ -302,6 +411,13 @@ abrt_config_widget_new()
Matej Habrnal 34c7e2
 void
Matej Habrnal 34c7e2
 abrt_config_widget_reset_to_defaults(AbrtConfigWidget *self)
Matej Habrnal 34c7e2
 {
Matej Habrnal 34c7e2
-    for(unsigned i = _ABRT_OPT_BEGIN_; i < _ABRT_OPT_END_; ++i)
Matej Habrnal 34c7e2
-        gtk_switch_set_active(self->priv->options[i].widget, self->priv->options[i].default_value);
Matej Habrnal 34c7e2
+    for(unsigned i = _ABRT_OPT_SWITCH_BEGIN_; i < _ABRT_OPT_SWITCH_END_; ++i)
Matej Habrnal 34c7e2
+        gtk_switch_set_active(self->priv->options[i].switch_widget, self->priv->options[i].default_value);
Matej Habrnal 34c7e2
+
Matej Habrnal 34c7e2
+    for(unsigned i = _ABRT_RADIOBUTTON_OPT_BEGIN_; i < _ABRT_OPT_END_; ++i)
Matej Habrnal 34c7e2
+    {
Matej Habrnal 34c7e2
+        unsigned default_value = self->priv->options[i].default_value;
Matej Habrnal 34c7e2
+        GtkWidget *radio_button = self->priv->options[i].radio_button_widget[default_value];
Matej Habrnal 34c7e2
+        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_button), TRUE);
Matej Habrnal 34c7e2
+    }
Matej Habrnal 34c7e2
 }
Matej Habrnal 34c7e2
diff --git a/src/configuration-gui/abrt-config-widget.glade b/src/configuration-gui/abrt-config-widget.glade
Matej Habrnal 34c7e2
index 3aa566c..30737ff 100644
Matej Habrnal 34c7e2
--- a/src/configuration-gui/abrt-config-widget.glade
Matej Habrnal 34c7e2
+++ b/src/configuration-gui/abrt-config-widget.glade
Matej Habrnal 34c7e2
@@ -49,21 +49,6 @@
Matej Habrnal 34c7e2
           </packing>
Matej Habrnal 34c7e2
         </child>
Matej Habrnal 34c7e2
         <child>
Matej Habrnal 34c7e2
-          <object class="GtkSwitch" id="switch_upload_coredump">
Matej Habrnal 34c7e2
-            <property name="visible">True</property>
Matej Habrnal 34c7e2
-            <property name="can_focus">True</property>
Matej Habrnal 34c7e2
-            <property name="halign">end</property>
Matej Habrnal 34c7e2
-            <property name="valign">center</property>
Matej Habrnal 34c7e2
-            <property name="margin_left">10</property>
Matej Habrnal 34c7e2
-          </object>
Matej Habrnal 34c7e2
-          <packing>
Matej Habrnal 34c7e2
-            <property name="left_attach">1</property>
Matej Habrnal 34c7e2
-            <property name="top_attach">0</property>
Matej Habrnal 34c7e2
-            <property name="width">1</property>
Matej Habrnal 34c7e2
-            <property name="height">1</property>
Matej Habrnal 34c7e2
-          </packing>
Matej Habrnal 34c7e2
-        </child>
Matej Habrnal 34c7e2
-        <child>
Matej Habrnal 34c7e2
           <object class="GtkSwitch" id="switch_steal_directory">
Matej Habrnal 34c7e2
             <property name="visible">True</property>
Matej Habrnal 34c7e2
             <property name="can_focus">True</property>
Matej Habrnal 34c7e2
@@ -163,7 +148,7 @@
Matej Habrnal 34c7e2
           <object class="GtkImage" id="image1">
Matej Habrnal 34c7e2
             <property name="visible">True</property>
Matej Habrnal 34c7e2
             <property name="can_focus">False</property>
Matej Habrnal 34c7e2
-            <property name="tooltip_text" translatable="yes">The coredump file is necessary for generating stack trace which is time and space consuming operation. ABRT provides a service which generates the stack trace from the coredump but you have to upload the coredump to this service. With this option disabled ABRT will upload the coredump without asking.</property>
Matej Habrnal 34c7e2
+            <property name="tooltip_text" translatable="yes">The coredump file is necessary for generating stack trace which is time and space consuming operation. ABRT provides a service which generates the stack trace from the coredump but you have to upload the coredump to this service. With option 'Always' ABRT will always upload the coredump without asking. With option 'Never' the stack trace will be always generated locally. With option 'Ask' ABRT will always ask the user.</property>
Matej Habrnal 34c7e2
             <property name="halign">end</property>
Matej Habrnal 34c7e2
             <property name="margin_left">5</property>
Matej Habrnal 34c7e2
             <property name="margin_right">1</property>
Matej Habrnal 34c7e2
@@ -241,24 +226,6 @@
Matej Habrnal 34c7e2
           </packing>
Matej Habrnal 34c7e2
         </child>
Matej Habrnal 34c7e2
         <child>
Matej Habrnal 34c7e2
-          <object class="GtkLabel" id="label1">
Matej Habrnal 34c7e2
-            <property name="visible">True</property>
Matej Habrnal 34c7e2
-            <property name="can_focus">False</property>
Matej Habrnal 34c7e2
-            <property name="halign">start</property>
Matej Habrnal 34c7e2
-            <property name="hexpand">True</property>
Matej Habrnal 34c7e2
-            <property name="ypad">10</property>
Matej Habrnal 34c7e2
-            <property name="label" translatable="yes">Ask before uploading coredump</property>
Matej Habrnal 34c7e2
-            <signal name="enter-notify-event" handler="label_enter_notify_event_cb" swapped="no"/>
Matej Habrnal 34c7e2
-            <signal name="leave-notify-event" handler="label_leave_notify_event_cb" swapped="no"/>
Matej Habrnal 34c7e2
-          </object>
Matej Habrnal 34c7e2
-          <packing>
Matej Habrnal 34c7e2
-            <property name="left_attach">0</property>
Matej Habrnal 34c7e2
-            <property name="top_attach">0</property>
Matej Habrnal 34c7e2
-            <property name="width">1</property>
Matej Habrnal 34c7e2
-            <property name="height">1</property>
Matej Habrnal 34c7e2
-          </packing>
Matej Habrnal 34c7e2
-        </child>
Matej Habrnal 34c7e2
-        <child>
Matej Habrnal 34c7e2
           <object class="GtkImage" id="image6">
Matej Habrnal 34c7e2
             <property name="visible">True</property>
Matej Habrnal 34c7e2
             <property name="can_focus">False</property>
Matej Habrnal 34c7e2
@@ -352,6 +319,90 @@
Matej Habrnal 34c7e2
             <property name="height">1</property>
Matej Habrnal 34c7e2
           </packing>
Matej Habrnal 34c7e2
         </child>
Matej Habrnal 34c7e2
+        <child>
Matej Habrnal 34c7e2
+          <object class="GtkButtonBox" id="bg_button_box">
Matej Habrnal 34c7e2
+            <property name="visible">True</property>
Matej Habrnal 34c7e2
+            <property name="can_focus">False</property>
Matej Habrnal 34c7e2
+            <property name="halign">end</property>
Matej Habrnal 34c7e2
+            <property name="valign">center</property>
Matej Habrnal 34c7e2
+            <property name="hexpand">False</property>
Matej Habrnal 34c7e2
+            <property name="vexpand">False</property>
Matej Habrnal 34c7e2
+            <property name="resize_mode">immediate</property>
Matej Habrnal 34c7e2
+            <property name="layout_style">expand</property>
Matej Habrnal 34c7e2
+            <child>
Matej Habrnal 34c7e2
+              <object class="GtkRadioButton" id="bg_always">
Matej Habrnal 34c7e2
+                <property name="label" translatable="yes">Always</property>
Matej Habrnal 34c7e2
+                <property name="visible">True</property>
Matej Habrnal 34c7e2
+                <property name="can_focus">True</property>
Matej Habrnal 34c7e2
+                <property name="receives_default">False</property>
Matej Habrnal 34c7e2
+                <property name="xalign">0</property>
Matej Habrnal 34c7e2
+                <property name="active">True</property>
Matej Habrnal 34c7e2
+                <property name="draw_indicator">False</property>
Matej Habrnal 34c7e2
+                <property name="group">bg_ask</property>
Matej Habrnal 34c7e2
+              </object>
Matej Habrnal 34c7e2
+              <packing>
Matej Habrnal 34c7e2
+                <property name="expand">True</property>
Matej Habrnal 34c7e2
+                <property name="fill">True</property>
Matej Habrnal 34c7e2
+                <property name="position">2</property>
Matej Habrnal 34c7e2
+                <property name="non_homogeneous">True</property>
Matej Habrnal 34c7e2
+              </packing>
Matej Habrnal 34c7e2
+            </child>
Matej Habrnal 34c7e2
+            <child>
Matej Habrnal 34c7e2
+              <object class="GtkRadioButton" id="bg_never">
Matej Habrnal 34c7e2
+                <property name="label" translatable="yes">Never</property>
Matej Habrnal 34c7e2
+                <property name="visible">True</property>
Matej Habrnal 34c7e2
+                <property name="can_focus">True</property>
Matej Habrnal 34c7e2
+                <property name="receives_default">False</property>
Matej Habrnal 34c7e2
+                <property name="xalign">0</property>
Matej Habrnal 34c7e2
+                <property name="active">True</property>
Matej Habrnal 34c7e2
+                <property name="draw_indicator">False</property>
Matej Habrnal 34c7e2
+                <property name="group">bg_ask</property>
Matej Habrnal 34c7e2
+              </object>
Matej Habrnal 34c7e2
+              <packing>
Matej Habrnal 34c7e2
+                <property name="expand">True</property>
Matej Habrnal 34c7e2
+                <property name="fill">True</property>
Matej Habrnal 34c7e2
+                <property name="position">2</property>
Matej Habrnal 34c7e2
+              </packing>
Matej Habrnal 34c7e2
+            </child>
Matej Habrnal 34c7e2
+            <child>
Matej Habrnal 34c7e2
+              <object class="GtkRadioButton" id="bg_ask">
Matej Habrnal 34c7e2
+                <property name="label" translatable="yes">Ask</property>
Matej Habrnal 34c7e2
+                <property name="visible">True</property>
Matej Habrnal 34c7e2
+                <property name="can_focus">True</property>
Matej Habrnal 34c7e2
+                <property name="receives_default">False</property>
Matej Habrnal 34c7e2
+                <property name="xalign">0</property>
Matej Habrnal 34c7e2
+                <property name="active">True</property>
Matej Habrnal 34c7e2
+                <property name="draw_indicator">False</property>
Matej Habrnal 34c7e2
+              </object>
Matej Habrnal 34c7e2
+              <packing>
Matej Habrnal 34c7e2
+                <property name="expand">False</property>
Matej Habrnal 34c7e2
+                <property name="fill">True</property>
Matej Habrnal 34c7e2
+                <property name="position">2</property>
Matej Habrnal 34c7e2
+              </packing>
Matej Habrnal 34c7e2
+            </child>
Matej Habrnal 34c7e2
+          </object>
Matej Habrnal 34c7e2
+          <packing>
Matej Habrnal 34c7e2
+            <property name="left_attach">1</property>
Matej Habrnal 34c7e2
+            <property name="top_attach">0</property>
Matej Habrnal 34c7e2
+          </packing>
Matej Habrnal 34c7e2
+        </child>
Matej Habrnal 34c7e2
+        <child>
Matej Habrnal 34c7e2
+          <object class="GtkLabel" id="label1">
Matej Habrnal 34c7e2
+            <property name="visible">True</property>
Matej Habrnal 34c7e2
+            <property name="can_focus">False</property>
Matej Habrnal 34c7e2
+            <property name="halign">start</property>
Matej Habrnal 34c7e2
+            <property name="hexpand">True</property>
Matej Habrnal 34c7e2
+            <property name="ypad">10</property>
Matej Habrnal 34c7e2
+            <property name="label" translatable="yes">Upload coredump for backtrace generation</property>
Matej Habrnal 34c7e2
+          </object>
Matej Habrnal 34c7e2
+          <packing>
Matej Habrnal 34c7e2
+            <property name="left_attach">0</property>
Matej Habrnal 34c7e2
+            <property name="top_attach">0</property>
Matej Habrnal 34c7e2
+          </packing>
Matej Habrnal 34c7e2
+        </child>
Matej Habrnal 34c7e2
+        <child>
Matej Habrnal 34c7e2
+          <placeholder/>
Matej Habrnal 34c7e2
+        </child>
Matej Habrnal 34c7e2
       </object>
Matej Habrnal 34c7e2
     </child>
Matej Habrnal 34c7e2
   </object>
Matej Habrnal 34c7e2
-- 
Matej Habrnal 34c7e2
2.1.0
Matej Habrnal 34c7e2