static void color_changed_cb (GtkColorButton *button, CcBackgroundPanel *panel) { CcBackgroundPanelPrivate *priv = panel->priv; GdkColor color; gchar *value; gboolean is_pcolor = FALSE; gtk_color_button_get_color (button, &color); if (WID ("style-pcolor") == GTK_WIDGET (button)) is_pcolor = TRUE; value = gdk_color_to_string (&color); if (priv->current_background) { g_object_set (G_OBJECT (priv->current_background), is_pcolor ? "primary-color" : "secondary-color", value, NULL); } g_settings_set_string (priv->settings, is_pcolor ? WP_PCOLOR_KEY : WP_SCOLOR_KEY, value); g_settings_apply (priv->settings); g_free (value); update_preview (priv, NULL); }
static void style_changed_cb (GtkComboBox *box, CcBackgroundPanel *panel) { CcBackgroundPanelPrivate *priv = panel->priv; GtkTreeModel *model; GtkTreeIter iter; GDesktopBackgroundStyle value; if (!gtk_combo_box_get_active_iter (box, &iter)) { return; } model = gtk_combo_box_get_model (box); gtk_tree_model_get (model, &iter, 1, &value, -1); g_settings_set_enum (priv->settings, WP_OPTIONS_KEY, value); if (priv->current_background) g_object_set (G_OBJECT (priv->current_background), "placement", value, NULL); g_settings_apply (priv->settings); update_preview (priv, NULL); }
static void terminal_profile_save (TerminalProfile *profile) { TerminalProfilePrivate *priv = profile->priv; GSettings *changeset; GSList *l; priv->save_idle_id = 0; changeset = g_settings_new_with_path (CONF_PROFILE_SCHEMA, g_strconcat (CONF_PROFILE_PREFIX, priv->profile_dir,"/", NULL)); g_settings_delay (changeset); for (l = priv->dirty_pspecs; l != NULL; l = l->next) { GParamSpec *pspec = (GParamSpec *) l->data; if (pspec->owner_type != TERMINAL_TYPE_PROFILE) continue; if ((pspec->flags & G_PARAM_WRITABLE) == 0) continue; terminal_profile_gsettings_changeset_add (profile, changeset, pspec); } g_slist_free (priv->dirty_pspecs); priv->dirty_pspecs = NULL; g_settings_apply (changeset); g_object_unref (changeset); }
static void swap_colors_clicked (GtkButton *button, CcBackgroundPanel *panel) { CcBackgroundPanelPrivate *priv = panel->priv; GdkColor pcolor, scolor; char *new_pcolor, *new_scolor; gtk_color_button_get_color (GTK_COLOR_BUTTON (WID ("style-pcolor")), &pcolor); gtk_color_button_get_color (GTK_COLOR_BUTTON (WID ("style-scolor")), &scolor); gtk_color_button_set_color (GTK_COLOR_BUTTON (WID ("style-scolor")), &pcolor); gtk_color_button_set_color (GTK_COLOR_BUTTON (WID ("style-pcolor")), &scolor); new_pcolor = gdk_color_to_string (&scolor); new_scolor = gdk_color_to_string (&pcolor); g_object_set (priv->current_background, "primary-color", new_pcolor, "secondary-color", new_scolor, NULL); g_settings_set_string (priv->settings, WP_PCOLOR_KEY, new_pcolor); g_settings_set_string (priv->settings, WP_SCOLOR_KEY, new_scolor); g_free (new_pcolor); g_free (new_scolor); g_settings_apply (priv->settings); update_preview (priv, NULL); }
static void update_configuration (GtkTreeModel *model) { GtkTreeIter iter; gchar *type; gchar *id; GVariantBuilder builder; GVariant *old_sources; const gchar *old_current_type; const gchar *old_current_id; guint old_current_index; guint old_n_sources; guint index; old_sources = g_settings_get_value (input_sources_settings, KEY_INPUT_SOURCES); old_current_index = g_settings_get_uint (input_sources_settings, KEY_CURRENT_INPUT_SOURCE); old_n_sources = g_variant_n_children (old_sources); if (old_n_sources > 0 && old_current_index < old_n_sources) { g_variant_get_child (old_sources, old_current_index, "(&s&s)", &old_current_type, &old_current_id); } else { old_current_type = ""; old_current_id = ""; } g_variant_builder_init (&builder, G_VARIANT_TYPE ("a(ss)")); index = 0; gtk_tree_model_get_iter_first (model, &iter); do { gtk_tree_model_get (model, &iter, TYPE_COLUMN, &type, ID_COLUMN, &id, -1); if (index != old_current_index && g_str_equal (type, old_current_type) && g_str_equal (id, old_current_id)) { g_settings_set_uint (input_sources_settings, KEY_CURRENT_INPUT_SOURCE, index); } g_variant_builder_add (&builder, "(ss)", type, id); g_free (type); g_free (id); index += 1; } while (gtk_tree_model_iter_next (model, &iter)); g_settings_set_value (input_sources_settings, KEY_INPUT_SOURCES, g_variant_builder_end (&builder)); g_settings_apply (input_sources_settings); g_variant_unref (old_sources); }
void deja_dup_simple_settings_apply (DejaDupSimpleSettings* self) { gboolean _tmp0_; g_return_if_fail (self != NULL); _tmp0_ = self->priv->_read_only; if (!_tmp0_) { g_settings_apply (G_SETTINGS (self)); } }
static void copy_finished_cb (GObject *source_object, GAsyncResult *result, gpointer pointer) { GError *err = NULL; CcBackgroundPanel *panel = (CcBackgroundPanel *) pointer; CcBackgroundPanelPrivate *priv = panel->priv; CcBackgroundItem *item; CcBackgroundItem *current_background; GSettings *settings; if (!g_file_copy_finish (G_FILE (source_object), result, &err)) { if (g_error_matches (err, G_IO_ERROR, G_IO_ERROR_CANCELLED)) { g_error_free (err); return; } g_warning ("Failed to copy image to cache location: %s", err->message); g_error_free (err); } item = g_object_get_data (source_object, "item"); settings = g_object_get_data (source_object, "settings"); current_background = CURRENT_BG; g_settings_apply (settings); /* the panel may have been destroyed before the callback is run, so be sure * to check the widgets are not NULL */ if (priv->spinner) { gtk_widget_destroy (GTK_WIDGET (priv->spinner)); priv->spinner = NULL; } if (current_background) cc_background_item_load (current_background, NULL); if (priv->builder) { char *filename; update_preview (priv, settings, item); current_background = CURRENT_BG; /* Save the source XML if there is one */ filename = get_save_path (SAVE_PATH); if (create_save_dir ()) cc_background_xml_save (current_background, filename); } /* remove the reference taken when the copy was set up */ g_object_unref (panel); }
void gkbd_indicator_config_save (GkbdIndicatorConfig * ind_config) { g_settings_delay (ind_config->settings); g_settings_set_int (ind_config->settings, GKBD_INDICATOR_CONFIG_KEY_SECONDARIES, ind_config->secondary_groups_mask); g_settings_set_boolean (ind_config->settings, GKBD_INDICATOR_CONFIG_KEY_SHOW_FLAGS, ind_config->show_flags); g_settings_apply (ind_config->settings); }
static void free_window_state (WindowState *state) { /* Now store the settings */ g_settings_set_int (state->settings, STATE_KEY_WIDTH, state->width); g_settings_set_int (state->settings, STATE_KEY_HEIGHT, state->height); g_settings_set_boolean (state->settings, STATE_KEY_MAXIMIZED, state->is_maximised); g_settings_set_boolean (state->settings, STATE_KEY_FULLSCREEN, state->is_fullscreen); g_settings_apply (state->settings); g_object_unref (state->settings); g_slice_free (WindowState, state); }
static gboolean wp_props_wp_set (AppearanceData *data, MateWPItem *item) { gchar *pcolor, *scolor; g_settings_delay (data->wp_settings); if (!strcmp (item->filename, "(none)")) { g_settings_set_string (data->wp_settings, WP_OPTIONS_KEY, "none"); g_settings_set_string (data->wp_settings, WP_FILE_KEY, ""); } else { gchar *uri; if (g_utf8_validate (item->filename, -1, NULL)) uri = g_strdup (item->filename); else uri = g_filename_to_utf8 (item->filename, -1, NULL, NULL, NULL); if (uri == NULL) { g_warning ("Failed to convert filename to UTF-8: %s", item->filename); } else { g_settings_set_string (data->wp_settings, WP_FILE_KEY, uri); g_free (uri); } g_settings_set_enum (data->wp_settings, WP_OPTIONS_KEY, item->options); } g_settings_set_enum (data->wp_settings, WP_SHADING_KEY, item->shade_type); pcolor = gdk_color_to_string (item->pcolor); scolor = gdk_color_to_string (item->scolor); g_settings_set_string (data->wp_settings, WP_PCOLOR_KEY, pcolor); g_settings_set_string (data->wp_settings, WP_SCOLOR_KEY, scolor); g_free (pcolor); g_free (scolor); g_settings_apply (data->wp_settings); return FALSE; }
static gboolean sync_idle_cb (gpointer data) { GSettings *changeset; _terminal_debug_print (TERMINAL_DEBUG_ACCELS, "GSettings sync handler\n"); sync_idle_id = 0; changeset = g_settings_new (CONF_KEYS_SCHEMA); g_settings_delay (changeset); g_hash_table_foreach (gsettings_key_to_entry, (GHFunc) add_key_entry_to_changeset, changeset); g_settings_apply(changeset); g_object_unref (changeset); return FALSE; }
static gboolean tracker_gsettings_set_all (GSList *all, TrackerVerbosity verbosity) { GSList *l; gboolean success = TRUE; for (l = all; l && success; l = l->next) { ComponentGSettings *c = l->data; if (!c) { continue; } success &= g_settings_set_enum (c->settings, "verbosity", verbosity); g_settings_apply (c->settings); } return success; }
static gint reset_run (void) { GError *error = NULL; if (hard_reset && soft_reset) { g_printerr ("%s\n", _("You can not use the --hard and --soft arguments together")); return EXIT_FAILURE; } /* KILL processes first... */ if (hard_reset || soft_reset) { tracker_process_stop (TRACKER_PROCESS_TYPE_NONE, TRACKER_PROCESS_TYPE_ALL); } if (hard_reset || soft_reset) { guint log_handler_id; #ifndef DISABLE_JOURNAL gchar *rotate_to; TrackerDBConfig *db_config; gsize chunk_size; gint chunk_size_mb; #endif /* DISABLE_JOURNAL */ /* Set log handler for library messages */ log_handler_id = g_log_set_handler (NULL, G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL, log_handler, NULL); g_log_set_default_handler (log_handler, NULL); #ifndef DISABLE_JOURNAL db_config = tracker_db_config_new (); chunk_size_mb = tracker_db_config_get_journal_chunk_size (db_config); chunk_size = (gsize) ((gsize) chunk_size_mb * (gsize) 1024 * (gsize) 1024); rotate_to = tracker_db_config_get_journal_rotate_destination (db_config); /* This call is needed to set the journal's filename */ tracker_db_journal_set_rotating ((chunk_size_mb != -1), chunk_size, rotate_to); g_free (rotate_to); g_object_unref (db_config); #endif /* DISABLE_JOURNAL */ /* Clean up (select_cache_size and update_cache_size don't matter here) */ if (!tracker_db_manager_init (TRACKER_DB_MANAGER_REMOVE_ALL, NULL, FALSE, FALSE, 100, 100, NULL, NULL, NULL, &error)) { g_message ("Error initializing database: %s", error->message); g_free (error); return EXIT_FAILURE; } #ifndef DISABLE_JOURNAL tracker_db_journal_init (NULL, FALSE, NULL); #endif /* DISABLE_JOURNAL */ tracker_db_manager_remove_all (hard_reset); tracker_db_manager_shutdown (); #ifndef DISABLE_JOURNAL tracker_db_journal_shutdown (NULL); #endif /* DISABLE_JOURNAL */ /* Unset log handler */ g_log_remove_handler (NULL, log_handler_id); if (!remove_config) { return EXIT_SUCCESS; } } if (remove_config) { GFile *file; const gchar *home_conf_dir; gchar *path; GSList *all, *l; /* Check the default XDG_DATA_HOME location */ home_conf_dir = g_getenv ("XDG_CONFIG_HOME"); if (home_conf_dir && tracker_path_has_write_access_or_was_created (home_conf_dir)) { path = g_build_path (G_DIR_SEPARATOR_S, home_conf_dir, "tracker", NULL); } else { home_conf_dir = g_getenv ("HOME"); if (!home_conf_dir || !tracker_path_has_write_access_or_was_created (home_conf_dir)) { home_conf_dir = g_get_home_dir (); } path = g_build_path (G_DIR_SEPARATOR_S, home_conf_dir, ".config", "tracker", NULL); } file = g_file_new_for_path (path); g_free (path); g_print ("%s\n", _("Removing configuration files…")); directory_foreach (file, ".cfg", (GFunc) delete_file, NULL); g_object_unref (file); g_print ("%s\n", _("Resetting existing configuration…")); all = tracker_gsettings_get_all (NULL); if (!all) { return EXIT_FAILURE; } for (l = all; l; l = l->next) { ComponentGSettings *c = l->data; gchar **keys, **p; if (!c) { continue; } g_print (" %s\n", c->name); keys = g_settings_list_keys (c->settings); for (p = keys; p && *p; p++) { g_print (" %s\n", *p); g_settings_reset (c->settings, *p); } if (keys) { g_strfreev (keys); } g_settings_apply (c->settings); } g_settings_sync (); tracker_gsettings_free (all); return EXIT_SUCCESS; } /* All known options have their own exit points */ g_warn_if_reached (); return EXIT_FAILURE; }
static void set_background (CcBackgroundPanel *panel, GSettings *settings, CcBackgroundItem *item) { CcBackgroundPanelPrivate *priv = panel->priv; GDesktopBackgroundStyle style; gboolean save_settings = TRUE; const char *uri; CcBackgroundItemFlags flags; char *filename; if (item == NULL) return; uri = cc_background_item_get_uri (item); flags = cc_background_item_get_flags (item); if ((flags & CC_BACKGROUND_ITEM_HAS_URI) && uri == NULL) { g_settings_set_enum (settings, WP_OPTIONS_KEY, G_DESKTOP_BACKGROUND_STYLE_NONE); g_settings_set_string (settings, WP_URI_KEY, ""); } else if (cc_background_item_get_source_url (item) != NULL && cc_background_item_get_needs_download (item)) { GFile *source, *dest; char *cache_path, *basename, *dest_path, *display_name, *dest_uri; GdkPixbuf *pixbuf; cache_path = bg_pictures_source_get_cache_path (); if (g_mkdir_with_parents (cache_path, USER_DIR_MODE) < 0) { g_warning ("Failed to create directory '%s'", cache_path); g_free (cache_path); return; } g_free (cache_path); dest_path = bg_pictures_source_get_unique_path (cc_background_item_get_source_url (item)); dest = g_file_new_for_path (dest_path); g_free (dest_path); source = g_file_new_for_uri (cc_background_item_get_source_url (item)); basename = g_file_get_basename (source); display_name = g_filename_display_name (basename); dest_path = g_file_get_path (dest); g_free (basename); /* create a blank image to use until the source image is ready */ pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, 1, 1); gdk_pixbuf_fill (pixbuf, 0x00000000); gdk_pixbuf_save (pixbuf, dest_path, "png", NULL, NULL); g_object_unref (pixbuf); g_free (dest_path); if (priv->copy_cancellable) { g_cancellable_cancel (priv->copy_cancellable); g_cancellable_reset (priv->copy_cancellable); } if (priv->spinner) { gtk_widget_destroy (GTK_WIDGET (priv->spinner)); priv->spinner = NULL; } /* create a spinner while the file downloads */ priv->spinner = gtk_spinner_new (); gtk_spinner_start (GTK_SPINNER (priv->spinner)); gtk_box_pack_start (GTK_BOX (WID ("bottom-hbox")), priv->spinner, FALSE, FALSE, 6); gtk_widget_show (priv->spinner); /* reference the panel in case it is removed before the copy is * finished */ g_object_ref (panel); g_object_set_data_full (G_OBJECT (source), "item", g_object_ref (item), g_object_unref); g_object_set_data (G_OBJECT (source), "settings", settings); g_file_copy_async (source, dest, G_FILE_COPY_OVERWRITE, G_PRIORITY_DEFAULT, priv->copy_cancellable, NULL, NULL, copy_finished_cb, panel); g_object_unref (source); dest_uri = g_file_get_uri (dest); g_object_unref (dest); g_settings_set_string (settings, WP_URI_KEY, dest_uri); g_object_set (G_OBJECT (item), "uri", dest_uri, "needs-download", FALSE, "name", display_name, NULL); g_free (display_name); g_free (dest_uri); /* delay the updated drawing of the preview until the copy finishes */ save_settings = FALSE; } else { g_settings_set_string (settings, WP_URI_KEY, uri); } /* Also set the placement if we have a URI and the previous value was none */ if (flags & CC_BACKGROUND_ITEM_HAS_PLACEMENT) { g_settings_set_enum (settings, WP_OPTIONS_KEY, cc_background_item_get_placement (item)); } else if (uri != NULL) { style = g_settings_get_enum (settings, WP_OPTIONS_KEY); if (style == G_DESKTOP_BACKGROUND_STYLE_NONE) g_settings_set_enum (settings, WP_OPTIONS_KEY, cc_background_item_get_placement (item)); } if (flags & CC_BACKGROUND_ITEM_HAS_SHADING) g_settings_set_enum (settings, WP_SHADING_KEY, cc_background_item_get_shading (item)); g_settings_set_string (settings, WP_PCOLOR_KEY, cc_background_item_get_pcolor (item)); g_settings_set_string (settings, WP_SCOLOR_KEY, cc_background_item_get_scolor (item)); /* update the preview information */ if (save_settings != FALSE) { /* Apply all changes */ g_settings_apply (settings); /* Save the source XML if there is one */ filename = get_save_path (SAVE_PATH); if (create_save_dir ()) cc_background_xml_save (CURRENT_BG, filename); } }
void settings_manager_add_interested (SettingsManager* self, const gchar* app_desktop_name) { static const char key[] = "interested-media-players"; GVariantType* _tmp0_; GVariantType* _tmp1_; GVariantBuilder* _tmp2_; GVariantBuilder* _tmp3_; GVariantBuilder* players; GSettings* _tmp4_; gchar** _tmp5_; gchar** _tmp6_ = NULL; GVariantBuilder* _tmp12_; const gchar* _tmp13_; GSettings* _tmp14_; GVariantBuilder* _tmp15_; GVariant* _tmp16_ = NULL; GVariant* _tmp17_; GSettings* _tmp18_; g_return_if_fail (self != NULL); g_return_if_fail (app_desktop_name != NULL); _tmp0_ = g_variant_type_new ("as"); _tmp1_ = _tmp0_; _tmp2_ = g_variant_builder_new (_tmp1_); _tmp3_ = _tmp2_; _g_variant_type_free0 (_tmp1_); players = _tmp3_; _tmp4_ = self->priv->settings; _tmp6_ = _tmp5_ = g_settings_get_strv (_tmp4_, key); { gchar** player_collection = NULL; gint player_collection_length1 = 0; gint _player_collection_size_ = 0; gint player_it = 0; player_collection = _tmp6_; player_collection_length1 = _vala_array_length (_tmp5_); for (player_it = 0; player_it < _vala_array_length (_tmp5_); player_it = player_it + 1) { gchar* _tmp7_; gchar* player = NULL; _tmp7_ = g_strdup (player_collection[player_it]); player = _tmp7_; { const gchar* _tmp8_; const gchar* _tmp9_; GVariantBuilder* _tmp10_; const gchar* _tmp11_; _tmp8_ = player; _tmp9_ = app_desktop_name; if (g_strcmp0 (_tmp8_, _tmp9_) == 0) { _g_free0 (player); player_collection = (_vala_array_free (player_collection, player_collection_length1, (GDestroyNotify) g_free), NULL); _g_variant_builder_unref0 (players); return; } _tmp10_ = players; _tmp11_ = player; g_variant_builder_add (_tmp10_, "s", _tmp11_, NULL); _g_free0 (player); } } player_collection = (_vala_array_free (player_collection, player_collection_length1, (GDestroyNotify) g_free), NULL); } _tmp12_ = players; _tmp13_ = app_desktop_name; g_variant_builder_add (_tmp12_, "s", _tmp13_, NULL); _tmp14_ = self->priv->settings; _tmp15_ = players; _tmp16_ = g_variant_builder_end (_tmp15_); _tmp17_ = g_variant_ref_sink (_tmp16_); g_settings_set_value (_tmp14_, key, _tmp17_); _g_variant_unref0 (_tmp17_); _tmp18_ = self->priv->settings; g_settings_apply (_tmp18_); _g_variant_builder_unref0 (players); }
static gboolean handle_file (const gchar *filename) { GKeyFile *keyfile; MateConfClient *client; MateConfValue *value; gint i, j; gchar *mateconf_key; gchar **groups; gchar **keys; GVariantBuilder *builder; GVariant *v; const gchar *s; gchar *str; gint ii; GSList *list, *l; GSettings *settings; GError *error; keyfile = g_key_file_new (); error = NULL; if (!g_key_file_load_from_file (keyfile, filename, 0, &error)) { g_printerr ("%s\n", error->message); g_error_free (error); g_key_file_free (keyfile); return FALSE; } client = mateconf_client_get_default (); groups = g_key_file_get_groups (keyfile, NULL); for (i = 0; groups[i]; i++) { gchar **schema_path; schema_path = g_strsplit (groups[i], ":", 2); if (verbose) { g_print ("collecting settings for schema '%s'\n", schema_path[0]); if (schema_path[1]) g_print ("for storage at '%s'\n", schema_path[1]); } if (schema_path[1] != NULL) settings = g_settings_new_with_path (schema_path[0], schema_path[1]); else settings = g_settings_new (schema_path[0]); g_settings_delay (settings); error = NULL; if ((keys = g_key_file_get_keys (keyfile, groups[i], NULL, &error)) == NULL) { g_printerr ("%s", error->message); g_error_free (error); continue; } for (j = 0; keys[j]; j++) { if (strchr (keys[j], '/') != 0) { g_printerr ("Key '%s' contains a '/'\n", keys[j]); continue; } error = NULL; if ((mateconf_key = g_key_file_get_string (keyfile, groups[i], keys[j], &error)) == NULL) { g_printerr ("%s", error->message); g_error_free (error); continue; } error = NULL; if ((value = mateconf_client_get_without_default (client, mateconf_key, &error)) == NULL) { if (error) { g_printerr ("Failed to get MateConf key '%s': %s\n", mateconf_key, error->message); g_error_free (error); } else { if (verbose) g_print ("Skipping MateConf key '%s', no user value\n", mateconf_key); } g_free (mateconf_key); continue; } switch (value->type) { case MATECONF_VALUE_STRING: if (dry_run) g_print ("set key '%s' to string '%s'\n", keys[j], mateconf_value_get_string (value)); else g_settings_set (settings, keys[j], "s", mateconf_value_get_string (value)); break; case MATECONF_VALUE_INT: if (dry_run) g_print ("set key '%s' to integer '%d'\n", keys[j], mateconf_value_get_int (value)); else g_settings_set (settings, keys[j], "i", mateconf_value_get_int (value)); break; case MATECONF_VALUE_BOOL: if (dry_run) g_print ("set key '%s' to boolean '%d'\n", keys[j], mateconf_value_get_bool (value)); else g_settings_set (settings, keys[j], "b", mateconf_value_get_bool (value)); break; case MATECONF_VALUE_FLOAT: if (dry_run) g_print ("set key '%s' to double '%g'\n", keys[j], mateconf_value_get_float (value)); else g_settings_set (settings, keys[j], "d", mateconf_value_get_float (value)); break; case MATECONF_VALUE_LIST: switch (mateconf_value_get_list_type (value)) { case MATECONF_VALUE_STRING: builder = g_variant_builder_new (G_VARIANT_TYPE_ARRAY); list = mateconf_value_get_list (value); if (list != NULL) { for (l = list; l; l = l->next) { MateConfValue *lv = l->data; s = mateconf_value_get_string (lv); g_variant_builder_add (builder, "s", s); } v = g_variant_new ("as", builder); } else v = g_variant_new_array (G_VARIANT_TYPE_STRING, NULL, 0); g_variant_ref_sink (v); if (dry_run) { str = g_variant_print (v, FALSE); g_print ("set key '%s' to a list of strings: %s\n", keys[j], str); g_free (str); } else g_settings_set_value (settings, keys[j], v); g_variant_unref (v); g_variant_builder_unref (builder); break; case MATECONF_VALUE_INT: builder = g_variant_builder_new (G_VARIANT_TYPE_ARRAY); list = mateconf_value_get_list (value); if (list != NULL) { for (l = list; l; l = l->next) { MateConfValue *lv = l->data; ii = mateconf_value_get_int (lv); g_variant_builder_add (builder, "i", ii); } v = g_variant_new ("ai", builder); } else v = g_variant_new_array (G_VARIANT_TYPE_INT32, NULL, 0); g_variant_ref_sink (v); if (dry_run) { str = g_variant_print (v, FALSE); g_print ("set key '%s' to a list of integers: %s\n", keys[j], str); g_free (str); } else g_settings_set_value (settings, keys[j], v); g_variant_unref (v); g_variant_builder_unref (builder); break; default: g_printerr ("Keys of type 'list of %s' not handled yet\n", mateconf_value_type_to_string (mateconf_value_get_list_type (value))); break; } break; default: g_printerr ("Keys of type %s not handled yet\n", mateconf_value_type_to_string (value->type)); break; } mateconf_value_free (value); g_free (mateconf_key); } g_strfreev (keys); if (!dry_run) g_settings_apply (settings); g_object_unref (settings); g_strfreev (schema_path); } g_strfreev (groups); g_object_unref (client); return TRUE; }
gint tracker_control_general_run (void) { GError *error = NULL; GSList *pids; GSList *l; gchar *str; gpointer verbosity_type_enum_class_pointer = NULL; TrackerVerbosity set_log_verbosity_value = TRACKER_VERBOSITY_ERRORS; /* Constraints */ if (kill_option != TERM_NONE && terminate_option != TERM_NONE) { g_printerr ("%s\n", _("You can not use the --kill and --terminate arguments together")); return EXIT_FAILURE; } if ((hard_reset || soft_reset) && terminate_option != TERM_NONE) { g_printerr ("%s\n", _("You can not use the --terminate with --hard-reset or --soft-reset, --kill is implied")); return EXIT_FAILURE; } if (hard_reset && soft_reset) { g_printerr ("%s\n", _("You can not use the --hard-reset and --soft-reset arguments together")); return EXIT_FAILURE; } if (get_log_verbosity && set_log_verbosity) { g_printerr ("%s\n", _("You can not use the --get-logging and --set-logging arguments together")); return EXIT_FAILURE; } if (set_log_verbosity) { if (g_ascii_strcasecmp (set_log_verbosity, "debug") == 0) { set_log_verbosity_value = TRACKER_VERBOSITY_DEBUG; } else if (g_ascii_strcasecmp (set_log_verbosity, "detailed") == 0) { set_log_verbosity_value = TRACKER_VERBOSITY_DETAILED; } else if (g_ascii_strcasecmp (set_log_verbosity, "minimal") == 0) { set_log_verbosity_value = TRACKER_VERBOSITY_MINIMAL; } else if (g_ascii_strcasecmp (set_log_verbosity, "errors") == 0) { set_log_verbosity_value = TRACKER_VERBOSITY_ERRORS; } else { g_printerr ("%s\n", _("Invalid log verbosity, try 'debug', 'detailed', 'minimal' or 'errors'")); return EXIT_FAILURE; } } if (hard_reset || soft_reset) { /* Imply --kill */ kill_option = TERM_ALL; } if (get_log_verbosity || set_log_verbosity) { GType etype; /* Since we don't reference this enum anywhere, we do * it here to make sure it exists when we call * g_type_class_peek(). This wouldn't be necessary if * it was a param in a GObject for example. * * This does mean that we are leaking by 1 reference * here and should clean it up, but it doesn't grow so * this is acceptable. */ etype = tracker_verbosity_get_type (); verbosity_type_enum_class_pointer = g_type_class_ref (etype); } /* Unless we are stopping processes or listing processes, * don't iterate them. */ if (kill_option != TERM_NONE || terminate_option != TERM_NONE || list_processes) { guint32 own_pid; guint32 own_uid; gchar *own_pid_str; pids = get_pids (); str = g_strdup_printf (g_dngettext (NULL, "Found %d PID…", "Found %d PIDs…", g_slist_length (pids)), g_slist_length (pids)); g_print ("%s\n", str); g_free (str); /* Establish own uid/pid */ own_pid = (guint32) getpid (); own_pid_str = g_strdup_printf ("%d", own_pid); own_uid = get_uid_for_pid (own_pid_str, NULL); g_free (own_pid_str); for (l = pids; l; l = l->next) { GError *error = NULL; gchar *filename; gchar *contents = NULL; gchar **strv; guint uid; uid = get_uid_for_pid (l->data, &filename); /* Stat the file and make sure current user == file owner */ if (uid != own_uid) { continue; } /* Get contents to determine basename */ if (!g_file_get_contents (filename, &contents, NULL, &error)) { str = g_strdup_printf (_("Could not open '%s'"), filename); g_printerr ("%s, %s\n", str, error ? error->message : _("no error given")); g_free (str); g_clear_error (&error); g_free (contents); g_free (filename); continue; } strv = g_strsplit (contents, "^@", 2); if (strv && strv[0]) { gchar *basename; basename = g_path_get_basename (strv[0]); if ((g_str_has_prefix (basename, "tracker") == TRUE || g_str_has_prefix (basename, "lt-tracker") == TRUE) && g_str_has_suffix (basename, "-control") == FALSE && g_str_has_suffix (basename, "-status-icon") == FALSE) { pid_t pid; pid = atoi (l->data); str = g_strdup_printf (_("Found process ID %d for '%s'"), pid, basename); g_print ("%s\n", str); g_free (str); if (terminate_option != TERM_NONE) { if ((terminate_option == TERM_STORE && !g_str_has_suffix (basename, "tracker-store")) || (terminate_option == TERM_MINERS && !strstr (basename, "tracker-miner"))) { continue; } if (kill (pid, SIGTERM) == -1) { const gchar *errstr = g_strerror (errno); str = g_strdup_printf (_("Could not terminate process %d"), pid); g_printerr (" %s, %s\n", str, errstr ? errstr : _("no error given")); g_free (str); } else { str = g_strdup_printf (_("Terminated process %d"), pid); g_print (" %s\n", str); g_free (str); } } else if (kill_option != TERM_NONE) { if ((kill_option == TERM_STORE && !g_str_has_suffix (basename, "tracker-store")) || (kill_option == TERM_MINERS && !strstr (basename, "tracker-miner"))) { continue; } if (kill (pid, SIGKILL) == -1) { const gchar *errstr = g_strerror (errno); str = g_strdup_printf (_("Could not kill process %d"), pid); g_printerr (" %s, %s\n", str, errstr ? errstr : _("no error given")); g_free (str); } else { str = g_strdup_printf (_("Killed process %d"), pid); g_print (" %s\n", str); g_free (str); } } } g_free (basename); } g_strfreev (strv); g_free (contents); g_free (filename); } g_slist_foreach (pids, (GFunc) g_free, NULL); g_slist_free (pids); /* If we just wanted to list processes, all done */ if (list_processes && terminate_option == TERM_NONE && kill_option == TERM_NONE) { return EXIT_SUCCESS; } } if (hard_reset || soft_reset) { guint log_handler_id; #ifndef DISABLE_JOURNAL gchar *rotate_to; TrackerDBConfig *db_config; gsize chunk_size; gint chunk_size_mb; #endif /* DISABLE_JOURNAL */ /* Set log handler for library messages */ log_handler_id = g_log_set_handler (NULL, G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL, log_handler, NULL); g_log_set_default_handler (log_handler, NULL); #ifndef DISABLE_JOURNAL db_config = tracker_db_config_new (); chunk_size_mb = tracker_db_config_get_journal_chunk_size (db_config); chunk_size = (gsize) ((gsize) chunk_size_mb * (gsize) 1024 * (gsize) 1024); rotate_to = tracker_db_config_get_journal_rotate_destination (db_config); /* This call is needed to set the journal's filename */ tracker_db_journal_set_rotating ((chunk_size_mb != -1), chunk_size, rotate_to); g_free (rotate_to); g_object_unref (db_config); #endif /* DISABLE_JOURNAL */ /* Clean up (select_cache_size and update_cache_size don't matter here) */ if (!tracker_db_manager_init (TRACKER_DB_MANAGER_REMOVE_ALL, NULL, FALSE, FALSE, 100, 100, NULL, NULL, NULL, &error)) { g_message ("Error initializing database: %s", error->message); g_free (error); return EXIT_FAILURE; } #ifndef DISABLE_JOURNAL tracker_db_journal_init (NULL, FALSE, NULL); #endif /* DISABLE_JOURNAL */ tracker_db_manager_remove_all (hard_reset); tracker_db_manager_shutdown (); #ifndef DISABLE_JOURNAL tracker_db_journal_shutdown (NULL); #endif /* DISABLE_JOURNAL */ /* Unset log handler */ g_log_remove_handler (NULL, log_handler_id); } if (remove_config) { GMainLoop *main_loop; GFile *file; TrackerCrawler *crawler; const gchar *suffix = ".cfg"; const gchar *home_conf_dir; gchar *path; GSList *all, *l; crawler = tracker_crawler_new (); main_loop = g_main_loop_new (NULL, FALSE); g_signal_connect (crawler, "check-file", G_CALLBACK (crawler_check_file_cb), &suffix); g_signal_connect (crawler, "finished", G_CALLBACK (crawler_finished_cb), main_loop); /* Go through service files */ /* Check the default XDG_DATA_HOME location */ home_conf_dir = g_getenv ("XDG_CONFIG_HOME"); if (home_conf_dir && tracker_path_has_write_access_or_was_created (home_conf_dir)) { path = g_build_path (G_DIR_SEPARATOR_S, home_conf_dir, "tracker", NULL); } else { home_conf_dir = g_getenv ("HOME"); if (!home_conf_dir || !tracker_path_has_write_access_or_was_created (home_conf_dir)) { home_conf_dir = g_get_home_dir (); } path = g_build_path (G_DIR_SEPARATOR_S, home_conf_dir, ".config", "tracker", NULL); } file = g_file_new_for_path (path); g_free (path); g_print ("%s\n", _("Removing configuration files…")); tracker_crawler_start (crawler, file, FALSE); g_object_unref (file); g_main_loop_run (main_loop); g_object_unref (crawler); g_print ("%s\n", _("Resetting existing configuration…")); all = tracker_gsettings_get_all (NULL); if (!all) { return EXIT_FAILURE; } for (l = all; l; l = l->next) { ComponentGSettings *c = l->data; gchar **keys, **p; if (!c) { continue; } g_print (" %s\n", c->name); keys = g_settings_list_keys (c->settings); for (p = keys; p && *p; p++) { g_print (" %s\n", *p); g_settings_reset (c->settings, *p); } if (keys) { g_strfreev (keys); } g_settings_apply (c->settings); } tracker_gsettings_free (all); } /* Deal with logging changes AFTER the config may have been * reset, this way users can actually use --remove-config with * the --set-logging switch. */ if (get_log_verbosity) { GSList *all; gint longest = 0; all = tracker_gsettings_get_all (&longest); if (!all) { return EXIT_FAILURE; } g_print ("%s:\n", _("Components")); tracker_gsettings_print_verbosity (all, longest, TRUE); g_print ("\n"); /* Miners */ g_print ("%s (%s):\n", _("Miners"), _("Only those with config listed")); tracker_gsettings_print_verbosity (all, longest, FALSE); g_print ("\n"); tracker_gsettings_free (all); } if (set_log_verbosity) { GSList *all; gchar *str; gint longest = 0; all = tracker_gsettings_get_all (&longest); if (!all) { return EXIT_FAILURE; } str = g_strdup_printf (_("Setting log verbosity for all components to '%s'…"), set_log_verbosity); g_print ("%s\n", str); g_print ("\n"); g_free (str); tracker_gsettings_set_all (all, set_log_verbosity_value); tracker_gsettings_free (all); /* We free to make sure we get new settings and that * they're saved properly. */ all = tracker_gsettings_get_all (&longest); if (!all) { return EXIT_FAILURE; } g_print ("%s:\n", _("Components")); tracker_gsettings_print_verbosity (all, longest, TRUE); g_print ("\n"); /* Miners */ g_print ("%s (%s):\n", _("Miners"), _("Only those with config listed")); tracker_gsettings_print_verbosity (all, longest, FALSE); g_print ("\n"); tracker_gsettings_free (all); } if (verbosity_type_enum_class_pointer) { g_type_class_unref (verbosity_type_enum_class_pointer); } if (start) { TrackerMinerManager *manager; GSList *miners, *l; if (hard_reset || soft_reset) { g_print ("%s\n", _("Waiting one second before starting miners…")); /* Give a second's grace to avoid race conditions */ g_usleep (G_USEC_PER_SEC); } g_print ("%s\n", _("Starting miners…")); /* Auto-start the miners here */ manager = tracker_miner_manager_new_full (TRUE, &error); if (!manager) { g_printerr (_("Could not start miners, manager could not be created, %s"), error ? error->message : "unknown error"); g_printerr ("\n"); g_clear_error (&error); return EXIT_FAILURE; } miners = tracker_miner_manager_get_available (manager); /* Get the status of all miners, this will start all * miners not already running. */ for (l = miners; l; l = l->next) { const gchar *display_name; gdouble progress = 0.0; display_name = tracker_miner_manager_get_display_name (manager, l->data); if (!tracker_miner_manager_get_status (manager, l->data, NULL, &progress, NULL)) { g_printerr (" ✗ %s (%s)\n", display_name, _("perhaps a disabled plugin?")); } else { g_print (" ✓ %s\n", display_name); } g_free (l->data); } g_slist_free (miners); g_object_unref (manager); } if (backup) { GDBusConnection *connection; GDBusProxy *proxy; GError *error = NULL; GVariant *v; gchar *uri; uri = get_uri_from_arg (backup); g_print ("%s\n", _("Backing up database")); g_print (" %s\n", uri); connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error); if (!connection) { g_critical ("Could not connect to the D-Bus session bus, %s", error ? error->message : "no error given."); g_clear_error (&error); g_free (uri); return EXIT_FAILURE; } proxy = g_dbus_proxy_new_sync (connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.Tracker1", "/org/freedesktop/Tracker1/Backup", "org.freedesktop.Tracker1.Backup", NULL, &error); if (error) { g_critical ("Could not create proxy on the D-Bus session bus, %s", error ? error->message : "no error given."); g_clear_error (&error); g_free (uri); return EXIT_FAILURE; } /* Backup/Restore can take some time */ g_dbus_proxy_set_default_timeout (proxy, G_MAXINT); v = g_dbus_proxy_call_sync (proxy, "Save", g_variant_new ("(s)", uri), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if (proxy) { g_object_unref (proxy); } if (error) { g_critical ("Could not backup database, %s", error ? error->message : "no error given."); g_clear_error (&error); g_free (uri); return EXIT_FAILURE; } if (v) { g_variant_unref (v); } g_free (uri); } if (restore) { GDBusConnection *connection; GDBusProxy *proxy; GError *error = NULL; GVariant *v; gchar *uri; uri = get_uri_from_arg (restore); g_print ("%s\n", _("Restoring database from backup")); g_print (" %s\n", uri); connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error); if (!connection) { g_critical ("Could not connect to the D-Bus session bus, %s", error ? error->message : "no error given."); g_clear_error (&error); g_free (uri); return EXIT_FAILURE; } proxy = g_dbus_proxy_new_sync (connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.Tracker1", "/org/freedesktop/Tracker1/Backup", "org.freedesktop.Tracker1.Backup", NULL, &error); if (error) { g_critical ("Could not create proxy on the D-Bus session bus, %s", error ? error->message : "no error given."); g_clear_error (&error); g_free (uri); return EXIT_FAILURE; } /* Backup/Restore can take some time */ g_dbus_proxy_set_default_timeout (proxy, G_MAXINT); v = g_dbus_proxy_call_sync (proxy, "Restore", g_variant_new ("(s)", uri), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if (proxy) { g_object_unref (proxy); } if (error) { g_critical ("Could not restore database, %s", error ? error->message : "no error given."); g_clear_error (&error); g_free (uri); return EXIT_FAILURE; } if (v) { g_variant_unref (v); } g_free (uri); } return EXIT_SUCCESS; }
static void backgrounds_changed_cb (GtkIconView *icon_view, CcBackgroundPanel *panel) { GtkTreeIter iter; GtkTreeModel *model; CcBackgroundItem *item; CcBackgroundPanelPrivate *priv = panel->priv; char *pcolor, *scolor; gboolean draw_preview = TRUE; const char *uri; CcBackgroundItemFlags flags; char *filename; item = get_selected_item (panel); if (item == NULL) return; /* Update current source */ model = gtk_combo_box_get_model (GTK_COMBO_BOX (WID ("sources-combobox"))); gtk_combo_box_get_active_iter (GTK_COMBO_BOX (WID ("sources-combobox")), &iter); gtk_tree_model_get (model, &iter, COL_SOURCE_TYPE, &priv->current_source, -1); uri = cc_background_item_get_uri (item); flags = cc_background_item_get_flags (item); if ((flags & CC_BACKGROUND_ITEM_HAS_URI) && uri == NULL) { g_settings_set_enum (priv->settings, WP_OPTIONS_KEY, G_DESKTOP_BACKGROUND_STYLE_NONE); g_settings_set_string (priv->settings, WP_URI_KEY, ""); } else if (cc_background_item_get_source_url (item) != NULL && cc_background_item_get_needs_download (item)) { GFile *source, *dest; gchar *cache_path, *basename, *dest_path, *display_name, *dest_uri; GdkPixbuf *pixbuf; cache_path = bg_pictures_source_get_cache_path (); if (g_mkdir_with_parents (cache_path, 0755) < 0) { g_warning ("Failed to create directory '%s'", cache_path); g_free (cache_path); return; } g_free (cache_path); dest_path = bg_pictures_source_get_unique_path (cc_background_item_get_source_url (item)); dest = g_file_new_for_path (dest_path); g_free (dest_path); source = g_file_new_for_uri (cc_background_item_get_source_url (item)); basename = g_file_get_basename (source); display_name = g_filename_display_name (basename); dest_path = g_file_get_path (dest); g_free (basename); /* create a blank image to use until the source image is ready */ pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, 1, 1); gdk_pixbuf_fill (pixbuf, 0x00000000); gdk_pixbuf_save (pixbuf, dest_path, "png", NULL, NULL); g_object_unref (pixbuf); g_free (dest_path); if (priv->copy_cancellable) { g_cancellable_cancel (priv->copy_cancellable); g_cancellable_reset (priv->copy_cancellable); } if (priv->spinner) { gtk_widget_destroy (GTK_WIDGET (priv->spinner)); priv->spinner = NULL; } /* create a spinner while the file downloads */ priv->spinner = gtk_spinner_new (); gtk_spinner_start (GTK_SPINNER (priv->spinner)); gtk_box_pack_start (GTK_BOX (WID ("bottom-hbox")), priv->spinner, FALSE, FALSE, 6); gtk_widget_show (priv->spinner); /* reference the panel in case it is removed before the copy is * finished */ g_object_ref (panel); g_object_set_data_full (G_OBJECT (source), "item", g_object_ref (item), g_object_unref); g_file_copy_async (source, dest, G_FILE_COPY_OVERWRITE, G_PRIORITY_DEFAULT, priv->copy_cancellable, NULL, NULL, copy_finished_cb, panel); g_object_unref (source); dest_uri = g_file_get_uri (dest); g_object_unref (dest); g_settings_set_string (priv->settings, WP_URI_KEY, dest_uri); g_object_set (G_OBJECT (item), "uri", dest_uri, "needs-download", FALSE, "name", display_name, NULL); g_free (display_name); g_free (dest_uri); /* delay the updated drawing of the preview until the copy finishes */ draw_preview = FALSE; } else { g_settings_set_string (priv->settings, WP_URI_KEY, uri); } /* Also set the placement if we have a URI and the previous value was none */ if (flags & CC_BACKGROUND_ITEM_HAS_PLACEMENT) { g_settings_set_enum (priv->settings, WP_OPTIONS_KEY, cc_background_item_get_placement (item)); } else if (uri != NULL) { GDesktopBackgroundStyle style; style = g_settings_get_enum (priv->settings, WP_OPTIONS_KEY); if (style == G_DESKTOP_BACKGROUND_STYLE_NONE) g_settings_set_enum (priv->settings, WP_OPTIONS_KEY, cc_background_item_get_placement (item)); } if (flags & CC_BACKGROUND_ITEM_HAS_SHADING) g_settings_set_enum (priv->settings, WP_SHADING_KEY, cc_background_item_get_shading (item)); /* When changing to a background with colours set, * don't overwrite what's in GSettings, but read * from it instead. * We have a hack for the colors source though */ if (flags & CC_BACKGROUND_ITEM_HAS_PCOLOR && priv->current_source != SOURCE_COLORS) { g_settings_set_string (priv->settings, WP_PCOLOR_KEY, cc_background_item_get_pcolor (item)); } else { pcolor = g_settings_get_string (priv->settings, WP_PCOLOR_KEY); g_object_set (G_OBJECT (item), "primary-color", pcolor, NULL); } if (flags & CC_BACKGROUND_ITEM_HAS_SCOLOR && priv->current_source != SOURCE_COLORS) { g_settings_set_string (priv->settings, WP_SCOLOR_KEY, cc_background_item_get_scolor (item)); } else { scolor = g_settings_get_string (priv->settings, WP_SCOLOR_KEY); g_object_set (G_OBJECT (item), "secondary-color", scolor, NULL); } /* Apply all changes */ g_settings_apply (priv->settings); update_remove_button (panel, item); /* update the preview information */ if (draw_preview != FALSE) { update_preview (priv, item); /* Save the source XML if there is one */ filename = get_save_path (); if (create_save_dir ()) cc_background_xml_save (priv->current_background, filename); } }