common: Keep language chooser labels centered

In order to prevent the labels from moving around when hiding and
showing the check mark we need to keep the check mark always visible
and instead tweak its opacity.

We also add an always transparent widget the same size as the check
mark on the other side of the label to make sure that the label is
globally centered.

https://bugzilla.gnome.org/show_bug.cgi?id=695536
This commit is contained in:
Rui Matos 2013-03-15 18:54:54 +01:00
parent 24bb46eb44
commit 7c341ed630

View file

@ -70,7 +70,7 @@ set_locale_id (GtkDialog *chooser,
if (g_strcmp0 (locale_id, language) == 0) {
gboolean is_extra;
gtk_widget_show (check);
gtk_widget_set_opacity (check, 1.0);
/* make sure the selected language is shown */
is_extra = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (row), "is-extra"));
@ -79,7 +79,7 @@ set_locale_id (GtkDialog *chooser,
egg_list_box_refilter (EGG_LIST_BOX (priv->language_list));
}
} else {
gtk_widget_hide (check);
gtk_widget_set_opacity (check, 0.0);
}
}
g_list_free (children);
@ -140,13 +140,21 @@ language_widget_new (const gchar *locale_id,
widget = padded_label_new (locale_name, is_extra);
/* We add a check on each side of the label to keep it centered. */
check = gtk_image_new ();
gtk_image_set_from_icon_name (GTK_IMAGE (check), "object-select-symbolic", GTK_ICON_SIZE_MENU);
gtk_widget_set_no_show_all (check, TRUE);
gtk_widget_set_opacity (check, 0.0);
g_object_set (check, "icon-size", GTK_ICON_SIZE_MENU, NULL);
gtk_box_pack_start (GTK_BOX (widget), check, FALSE, FALSE, 0);
gtk_box_reorder_child (GTK_BOX (widget), check, 0);
check = gtk_image_new ();
gtk_image_set_from_icon_name (GTK_IMAGE (check), "object-select-symbolic", GTK_ICON_SIZE_MENU);
gtk_widget_set_opacity (check, 0.0);
g_object_set (check, "icon-size", GTK_ICON_SIZE_MENU, NULL);
gtk_box_pack_start (GTK_BOX (widget), check, FALSE, FALSE, 0);
if (g_strcmp0 (locale_id, current_locale_id) == 0)
gtk_widget_show (check);
gtk_widget_set_opacity (check, 1.0);
g_object_set_data (G_OBJECT (widget), "check", check);
g_object_set_data_full (G_OBJECT (widget), "locale-id", g_strdup (locale_id), g_free);