If the cursor theme changes, and the currently set size is not available

2007-10-27  Jens Granseuer  <jensgr@gmx.net>

	If the cursor theme changes, and the currently set size is not
	available for the new theme, we were not updating the cursor size in
	GConf, leading to bogus results when checking for metatheme equality.

	* appearance-style.c: (cursor_size_changed_cb),
	(update_cursor_size_scale), (cursor_size_scale_value_changed_cb):
	update cursor size GConf value when the theme changes; also don't write
	bogus values to GConf when we are only doing fuzzy matches

svn path=/trunk/; revision=8212
This commit is contained in:
Jens Granseuer 2007-10-27 13:12:28 +00:00 committed by Jens Granseuer
parent 2ba498e0c2
commit 298d6fbf4f
2 changed files with 47 additions and 31 deletions

View file

@ -1,3 +1,14 @@
2007-10-27 Jens Granseuer <jensgr@gmx.net>
If the cursor theme changes, and the currently set size is not
available for the new theme, we were not updating the cursor size in
GConf, leading to bogus results when checking for metatheme equality.
* appearance-style.c: (cursor_size_changed_cb),
(update_cursor_size_scale), (cursor_size_scale_value_changed_cb):
update cursor size GConf value when the theme changes; also don't write
bogus values to GConf when we are only doing fuzzy matches
2007-10-27 Jens Granseuer <jensgr@gmx.net> 2007-10-27 Jens Granseuer <jensgr@gmx.net>
* theme-util.c: (theme_is_writable): * theme-util.c: (theme_is_writable):

View file

@ -364,6 +364,12 @@ icon_theme_changed (GConfPropertyEditor *peditor,
} }
#ifdef HAVE_XCURSOR #ifdef HAVE_XCURSOR
static void
cursor_size_changed_cb (int size, AppearanceData *data)
{
gconf_client_set_int (data->client, CURSOR_SIZE_KEY, size, NULL);
}
static void static void
update_cursor_size_scale (GnomeThemeCursorInfo *theme, update_cursor_size_scale (GnomeThemeCursorInfo *theme,
AppearanceData *data) AppearanceData *data)
@ -373,6 +379,7 @@ update_cursor_size_scale (GnomeThemeCursorInfo *theme,
GtkWidget *cursor_size_small_label; GtkWidget *cursor_size_small_label;
GtkWidget *cursor_size_large_label; GtkWidget *cursor_size_large_label;
gboolean sensitive; gboolean sensitive;
gint size, gconf_size;
cursor_size_scale = glade_xml_get_widget (data->xml, "cursor_size_scale"); cursor_size_scale = glade_xml_get_widget (data->xml, "cursor_size_scale");
cursor_size_label = glade_xml_get_widget (data->xml, "cursor_size_label"); cursor_size_label = glade_xml_get_widget (data->xml, "cursor_size_label");
@ -385,57 +392,55 @@ update_cursor_size_scale (GnomeThemeCursorInfo *theme,
gtk_widget_set_sensitive (cursor_size_small_label, sensitive); gtk_widget_set_sensitive (cursor_size_small_label, sensitive);
gtk_widget_set_sensitive (cursor_size_large_label, sensitive); gtk_widget_set_sensitive (cursor_size_large_label, sensitive);
if (sensitive) gconf_size = gconf_client_get_int (data->client, CURSOR_SIZE_KEY, NULL);
{
if (sensitive) {
GtkAdjustment *adjustment; GtkAdjustment *adjustment;
gint gconf_size, i; gint i, index;
gboolean size_found = FALSE;
GtkRange *range = GTK_RANGE (cursor_size_scale); GtkRange *range = GTK_RANGE (cursor_size_scale);
adjustment = gtk_range_get_adjustment (range); adjustment = gtk_range_get_adjustment (range);
g_object_set (adjustment, "upper", (gdouble) theme->sizes->len - 1, NULL); g_object_set (adjustment, "upper", (gdouble) theme->sizes->len - 1, NULL);
gconf_size = gconf_client_get_int (data->client, CURSOR_SIZE_KEY, NULL);
/* fallback if the gconf value is bigger than all available sizes;
use the largest we have */
index = theme->sizes->len - 1;
/* set the slider to the cursor size which matches the gconf setting best */ /* set the slider to the cursor size which matches the gconf setting best */
for (i = 0; i < theme->sizes->len; i++) for (i = 0; i < theme->sizes->len; i++) {
{
gint size;
size = g_array_index (theme->sizes, gint, i); size = g_array_index (theme->sizes, gint, i);
if (size == gconf_size) if (size == gconf_size) {
{ index = i;
gtk_range_set_value (range, (gdouble) i);
size_found = TRUE;
break; break;
} } else if (size > gconf_size) {
else if (size > gconf_size) if (i == 0) {
{ index = 0;
if (i == 0) } else {
{
gtk_range_set_value (range, 0);
size_found = TRUE;
break;
}
else
{
gint diff, diff_to_last; gint diff, diff_to_last;
diff = size - gconf_size; diff = size - gconf_size;
diff_to_last = gconf_size - g_array_index (theme->sizes, gint, i - 1); diff_to_last = gconf_size - g_array_index (theme->sizes, gint, i - 1);
gtk_range_set_value (range, (gdouble) (diff < diff_to_last) ? diff : diff_to_last); index = (diff < diff_to_last) ? i : i - 1;
size_found = TRUE;
break;
} }
break;
} }
} }
/* set to the biggest size if the gconf value is bigger than gtk_range_set_value (range, (gdouble) index);
all available sizes */
if (!size_found) size = g_array_index (theme->sizes, gint, index);
gtk_range_set_value (range, (gdouble) g_array_index (theme->sizes, gint, theme->sizes->len - 1)); } else {
if (theme->sizes->len > 0)
size = g_array_index (theme->sizes, gint, 0);
else
size = 18;
} }
if (size != gconf_size)
cursor_size_changed_cb (size, data);
} }
#endif #endif
@ -539,7 +544,7 @@ cursor_size_scale_value_changed_cb (GtkRange *range, AppearanceData *data)
gint size; gint size;
size = g_array_index (theme->sizes, gint, (int) gtk_range_get_value (range)); size = g_array_index (theme->sizes, gint, (int) gtk_range_get_value (range));
gconf_client_set_int (data->client, CURSOR_SIZE_KEY, size, NULL); cursor_size_changed_cb (size, data);
} }
} }
#endif #endif