static void gsm_color_button_get_property (GObject * object, guint param_id, GValue * value, GParamSpec * pspec) { GSMColorButton *color_button = GSM_COLOR_BUTTON (object); GdkColor color; switch (param_id) { case PROP_PERCENTAGE: g_value_set_double (value, gsm_color_button_get_fraction (color_button)); break; case PROP_TITLE: g_value_set_string (value, gsm_color_button_get_title (color_button)); break; case PROP_COLOR: gsm_color_button_get_color (color_button, &color); g_value_set_boxed (value, &color); break; case PROP_TYPE: g_value_set_uint (value, gsm_color_button_get_cbtype (color_button)); default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); break; } }
void cb_cpu_color_changed (GsmColorButton *cp, gpointer data) { guint cpu_i = GPOINTER_TO_UINT (data); auto settings = Gio::Settings::create (GSM_GSETTINGS_SCHEMA); /* Get current values */ GVariant *cpu_colors_var = g_settings_get_value (settings->gobj(), GSM_SETTING_CPU_COLORS); gsize children_n = g_variant_n_children(cpu_colors_var); /* Create builder to contruct new setting with updated value for cpu i */ GVariantBuilder builder; g_variant_builder_init(&builder, G_VARIANT_TYPE_ARRAY); for (guint i = 0; i < children_n; i++) { if(cpu_i == i) { gchar *color; GdkRGBA button_color; gsm_color_button_get_color(cp, &button_color); color = gdk_rgba_to_string (&button_color); g_variant_builder_add(&builder, "(us)", i, color); g_free (color); } else { g_variant_builder_add_value(&builder, g_variant_get_child_value(cpu_colors_var, i)); } } /* Just set the value and let the changed::cpu-colors signal callback do the rest. */ settings->set_value (GSM_SETTING_CPU_COLORS, Glib::wrap (g_variant_builder_end(&builder))); }
void cb_cpu_color_changed (GSMColorButton *cp, gpointer data) { guint cpu_i = GPOINTER_TO_UINT (data); GSettings *settings = g_settings_new (GSM_GSETTINGS_SCHEMA); /* Get current values */ GVariant *cpu_colors_var = g_settings_get_value(settings, "cpu-colors"); gsize children_n = g_variant_n_children(cpu_colors_var); /* Create builder to contruct new setting with updated value for cpu i */ GVariantBuilder builder; g_variant_builder_init(&builder, G_VARIANT_TYPE_ARRAY); for (guint i = 0; i < children_n; i++) { if(cpu_i == i) { gchar color[24]; GdkColor button_color; gsm_color_button_get_color(cp, &button_color); g_snprintf(color, sizeof(color), "#%04x%04x%04x", button_color.red, button_color.green, button_color.blue); g_variant_builder_add(&builder, "(us)", i, color); } else { g_variant_builder_add_value(&builder, g_variant_get_child_value(cpu_colors_var, i)); } } /* Just set the value and let the changed::cpu-colors signal callback do the rest. */ g_settings_set_value(settings, "cpu-colors", g_variant_builder_end(&builder)); }
static void change_settings_color(GSettings *settings, const char *key, GSMColorButton *cp) { GdkColor c; char color[24]; /* color should be 1 + 3*4 + 1 = 15 chars -> 24 */ gsm_color_button_get_color(cp, &c); g_snprintf(color, sizeof color, "#%04x%04x%04x", c.red, c.green, c.blue); g_settings_set_string (settings, key, color); }
static void change_settings_color(Gio::Settings& settings, const char *key, GsmColorButton *cp) { GdkRGBA c; char *color; gsm_color_button_get_color(cp, &c); color = gdk_rgba_to_string (&c); settings.set_string (key, color); g_free (color); }
static void change_settings_color(GSettings *settings, const char *key, GSMColorButton *cp) { GdkRGBA c; char *color; gsm_color_button_get_color(cp, &c); color = gdk_rgba_to_string (&c); g_settings_set_string (settings, key, color); g_free (color); }