static PanelAppletInfo *
_panel_applets_manager_get_applet_info (GKeyFile    *applet_file,
                                        const gchar *group,
                                        const gchar *factory_id)
{
    PanelAppletInfo  *info;
    char             *iid;
    char             *name;
    char             *comment;
    char             *icon;
    char            **old_ids;

    iid = g_strdup_printf ("%s::%s", factory_id, group);
    name = g_key_file_get_locale_string (applet_file, group,
                                         "Name", NULL, NULL);
    comment = g_key_file_get_locale_string (applet_file, group,
                                            "Description", NULL, NULL);
    icon = g_key_file_get_string (applet_file, group, "Icon", NULL);
    /* Bonobo compatibility */
    old_ids = g_key_file_get_string_list (applet_file, group,
                                          "BonoboId", NULL, NULL);

    info = panel_applet_info_new (iid, name, comment, icon, (const char **) old_ids);

    g_free (iid);
    g_free (name);
    g_free (comment);
    g_free (icon);
    g_strfreev (old_ids);

    return info;
}
static gboolean
crawler_check_file_cb (TrackerCrawler *crawler,
                       GFile          *file,
                       gpointer        user_data)
{
	TrackerMinerManager *manager;
	TrackerMinerManagerPrivate *priv;
	GKeyFile *key_file;
	gchar *path, *dbus_path, *dbus_name, *display_name, *description;
	GError *error = NULL;
	MinerData *data;

	manager = user_data;
	path = g_file_get_path (file);
	priv = TRACKER_MINER_MANAGER_GET_PRIVATE (manager);

	if (!g_str_has_suffix (path, ".desktop")) {
		return FALSE;
	}

	key_file = g_key_file_new ();
	g_key_file_load_from_file (key_file, path, G_KEY_FILE_NONE, &error);

	if (error) {
		g_warning ("Error parsing miner .desktop file: %s", error->message);
		g_error_free (error);
		g_key_file_free (key_file);

		return FALSE;
	}

	dbus_path = g_key_file_get_string (key_file, DESKTOP_ENTRY_GROUP, DBUS_PATH_KEY, NULL);
	dbus_name = g_key_file_get_string (key_file, DESKTOP_ENTRY_GROUP, DBUS_NAME_KEY, NULL);
	display_name = g_key_file_get_locale_string (key_file, DESKTOP_ENTRY_GROUP, DISPLAY_NAME_KEY, NULL, NULL);

	if (!dbus_path || !dbus_name || !display_name) {
		g_warning ("Essential data (DBusPath, DBusName or Name) are missing in miner .desktop file");
		g_key_file_free (key_file);
		g_free (dbus_path);
		g_free (display_name);
		g_free (dbus_name);

		return FALSE;
	}

	description = g_key_file_get_locale_string (key_file, DESKTOP_ENTRY_GROUP, DESCRIPTION_KEY, NULL, NULL);

	data = g_slice_new0 (MinerData);
	data->dbus_path = dbus_path;
	data->dbus_name = dbus_name;
	data->display_name = display_name;
	data->description = description;

	priv->miners = g_list_prepend (priv->miners, data);

	g_key_file_free (key_file);
	g_free (path);

	return TRUE;
}
void test_setlocale()
{
	GKeyFile *keyfile;
	gchar *value;
	gchar **list;
	gchar *input_list[2] = {"test2","test3"};
	gsize length = 2;
	
	const gchar *data = 
	    "[1]\n"
	    "key1=123\n"
	    "key2=456\n";
	
	keyfile = load_data (data, 0);
	
	g_key_file_set_locale_string(keyfile,"1","key3","C","test");
	
	value = g_key_file_get_locale_string(keyfile,"1","key3","C",NULL);
	
	g_assert(!strcmp(value,"test"));
	
	g_free(value);
	
	value = g_key_file_get_locale_string(keyfile,"1","key3","de",NULL);
	
	g_assert(value == NULL);
	
	g_key_file_set_locale_string_list(keyfile,"1","key4","C",input_list,2);
	
	list = g_key_file_get_locale_string_list(keyfile,"1","key4","C",&length,NULL);
	
	g_assert(!strcmp(list[0],"test2"));
	g_assert(!strcmp(list[1],"test3"));
	
}
static void
insert_data_from_desktop_file (TrackerSparqlBuilder *sparql,
                               const gchar          *subject,
                               const gchar          *metadata_key,
                               GKeyFile             *desktop_file,
                               const gchar          *key,
                               const gchar          *locale)
{
	gchar *str;

	if (locale) {
		/* Try to get the key with our desired LANG locale... */
		str = g_key_file_get_locale_string (desktop_file, GROUP_DESKTOP_ENTRY, key, locale, NULL);
		/* If our desired locale failed, use the list of LANG locales prepared by GLib
		 * (will return untranslated string if none of the locales available) */
		if (!str) {
			str = g_key_file_get_locale_string (desktop_file, GROUP_DESKTOP_ENTRY, key, NULL, NULL);
		}
	} else {
		str = g_key_file_get_string (desktop_file, GROUP_DESKTOP_ENTRY, key, NULL);
	}

	if (str) {
		tracker_sparql_builder_subject_iri (sparql, subject);
		tracker_sparql_builder_predicate_iri (sparql, metadata_key);
		tracker_sparql_builder_object_string (sparql, str);
		g_free (str);
	}
}
Exemple #5
0
/**
 * This function absorbs/freeś path, so this is no longer available afterwards.
 */
static void read_desktop_file ( DRunModePrivateData *pd, char *path, const char *filename )
{
    for ( unsigned int index = 0; index < pd->history_length; index++ ) {
        if ( g_strcmp0 ( path, pd->entry_list[index].path ) == 0 ) {
            g_free ( path );
            return;
        }
    }
    GKeyFile *kf    = g_key_file_new ();
    GError   *error = NULL;
    g_key_file_load_from_file ( kf, path, 0, &error );
    // If error, skip to next entry
    if ( error != NULL ) {
        g_error_free ( error );
        g_key_file_free ( kf );
        g_free ( path );
        return;
    }
    // Skip hidden entries.
    if ( g_key_file_has_key ( kf, "Desktop Entry", "Hidden", NULL ) ) {
        if ( g_key_file_get_boolean ( kf, "Desktop Entry", "Hidden", NULL ) ) {
            g_key_file_free ( kf );
            g_free ( path );
            return;
        }
    }
    // Skip entries that have NoDisplay set.
    if ( g_key_file_has_key ( kf, "Desktop Entry", "NoDisplay", NULL ) ) {
        if ( g_key_file_get_boolean ( kf, "Desktop Entry", "NoDisplay", NULL ) ) {
            g_key_file_free ( kf );
            g_free ( path );
            return;
        }
    }
    if ( g_key_file_has_key ( kf, "Desktop Entry", "Exec", NULL ) ) {
        size_t nl = ( ( pd->cmd_list_length ) + 1 );
        pd->entry_list                               = g_realloc ( pd->entry_list, nl * sizeof ( *( pd->entry_list ) ) );
        pd->entry_list[pd->cmd_list_length].path     = path;
        pd->entry_list[pd->cmd_list_length].terminal = FALSE;
        if ( g_key_file_has_key ( kf, "Desktop Entry", "Name", NULL ) ) {
            gchar *n  = g_key_file_get_locale_string ( kf, "Desktop Entry", "Name", NULL, NULL );
            gchar *gn = g_key_file_get_locale_string ( kf, "Desktop Entry", "GenericName", NULL, NULL );
            pd->entry_list[pd->cmd_list_length].name         = n;
            pd->entry_list[pd->cmd_list_length].generic_name = gn;
        }
        else {
            pd->entry_list[pd->cmd_list_length].name         = g_filename_display_name ( filename );
            pd->entry_list[pd->cmd_list_length].generic_name = NULL;
        }
        pd->entry_list[pd->cmd_list_length].exec = g_key_file_get_string ( kf, "Desktop Entry", "Exec", NULL );
        if ( g_key_file_has_key ( kf, "Desktop Entry", "Terminal", NULL ) ) {
            pd->entry_list[pd->cmd_list_length].terminal = g_key_file_get_boolean ( kf, "Desktop Entry", "Terminal", NULL );
        }
        ( pd->cmd_list_length )++;
    }

    g_key_file_free ( kf );
}
static ActionProxy *
make_action_proxy (const gchar *filename, const gchar *fullpath)
{
    GKeyFile *key_file = g_key_file_new();

    g_key_file_load_from_file (key_file, fullpath, G_KEY_FILE_NONE, NULL);

    if (g_key_file_has_key (key_file, ACTION_FILE_GROUP, KEY_ACTIVE, NULL)) {
        if (!g_key_file_get_boolean (key_file, ACTION_FILE_GROUP, KEY_ACTIVE, NULL)) {
            g_key_file_free (key_file);
            return NULL;
        }
    }

    ActionProxy *proxy = g_slice_new0 (ActionProxy);

    gchar *name = g_key_file_get_locale_string (key_file,
                                                ACTION_FILE_GROUP,
                                                KEY_NAME,
                                                NULL,
                                                NULL);
    if (name != NULL)
        proxy->name = g_strdup (name);

    gchar *comment = g_key_file_get_locale_string (key_file,
                                            ACTION_FILE_GROUP,
                                            KEY_COMMENT,
                                            NULL,
                                            NULL);
    if (comment != NULL)
        proxy->comment = g_strdup (comment);


    gchar *icon_name = g_key_file_get_string (key_file,
                                              ACTION_FILE_GROUP,
                                              KEY_ICON_NAME,
                                              NULL);
    if (icon_name != NULL)
        proxy->icon_name = g_strdup (icon_name);

    gchar *stock_id = g_key_file_get_string (key_file,
                                             ACTION_FILE_GROUP,
                                             KEY_STOCK_ID,
                                             NULL);

    if (stock_id != NULL)
        proxy->stock_id = g_strdup (stock_id);

    proxy->filename = g_strdup (filename);

    g_free (name);
    g_free (icon_name);
    g_free (stock_id);
    g_key_file_free (key_file);

    return proxy;
}
Exemple #7
0
/*
* If file_name is not a full path, this function searches default paths
* for the desktop file.
*/
VFSAppDesktop* vfs_app_desktop_new( const char* file_name )
{
    GKeyFile* file;
    gboolean load;
    char* relative_path;

    VFSAppDesktop* app = g_slice_new0( VFSAppDesktop );
    app->n_ref = 1;

    file = g_key_file_new();

    if( !file_name )
    {
        g_key_file_free( file );
        return app;
    }

    if( g_path_is_absolute( file_name ) )
    {
        app->file_name = g_path_get_basename( file_name );
        load = g_key_file_load_from_file( file, file_name,
                                          G_KEY_FILE_NONE, NULL );
    }
    else
    {
        app->file_name = g_strdup( file_name );
        relative_path = g_build_filename( "applications",
                                          app->file_name, NULL );
        load = g_key_file_load_from_data_dirs( file, relative_path, NULL,
                                               G_KEY_FILE_NONE, NULL );
        g_free( relative_path );
    }

    if( load )
    {
        app->disp_name = g_key_file_get_locale_string ( file,
                                                        desktop_entry_name,
                                                        "Name", NULL, NULL);
        app->comment = g_key_file_get_locale_string ( file, desktop_entry_name,
                                                      "Comment", NULL, NULL);
        app->exec = g_key_file_get_string ( file, desktop_entry_name,
                                            "Exec", NULL);
        app->icon_name = g_key_file_get_string ( file, desktop_entry_name,
                                                 "Icon", NULL);
        app->terminal = g_key_file_get_boolean( file, desktop_entry_name,
                                                "Terminal", NULL );
        app->hidden = g_key_file_get_boolean( file, desktop_entry_name,
                                                "NoDisplay", NULL );
        app->path = g_key_file_get_string ( file, desktop_entry_name,
                                                 "Path", NULL);
    }

    g_key_file_free( file );

    return app;
}
static void
load_session_file (const char              *id,
                   const char              *path)
{
        GKeyFile          *key_file;
        GError            *error;
        gboolean           res;
        GdmSessionFile    *session;

        key_file = g_key_file_new ();

        error = NULL;
        res = g_key_file_load_from_file (key_file, path, 0, &error);

        if (!res) {
                g_debug ("Failed to load \"%s\": %s\n", path, error->message);
                g_error_free (error);
                goto out;
        }

        if (! g_key_file_has_group (key_file, G_KEY_FILE_DESKTOP_GROUP)) {
                goto out;
        }

        res = g_key_file_has_key (key_file, G_KEY_FILE_DESKTOP_GROUP, "Name", NULL);
        if (! res) {
                g_debug ("\"%s\" contains no \"Name\" key\n", path);
                goto out;
        }

        if (!key_file_is_relevant (key_file)) {
                g_debug ("\"%s\" is hidden or contains non-executable TryExec program\n", path);
                goto out;
        }

        session = g_new0 (GdmSessionFile, 1);

        session->id = g_strdup (id);
        session->path = g_strdup (path);

        session->translated_name = g_key_file_get_locale_string (key_file, G_KEY_FILE_DESKTOP_GROUP, "Name", NULL, NULL);
        session->translated_comment = g_key_file_get_locale_string (key_file, G_KEY_FILE_DESKTOP_GROUP, "Comment", NULL, NULL);

        g_hash_table_insert (gdm_available_sessions_map,
                             g_strdup (id),
                             session);
 out:
        g_key_file_free (key_file);
}
/**
 * shell_app_info_get_icon:
 * @info: A #ShellAppInfo
 *
 * Get the #GIcon associated with this app; for apps "faked" from a #MetaWindow,
 * return %NULL.
 *
 * Returns: (transfer full): The icon for @info, or %NULL
 */
GIcon *
shell_app_info_get_icon (ShellAppInfo *info)
{
  char *iconname = NULL;
  GIcon *icon;

  /* This code adapted from gdesktopappinfo.c
   * Copyright (C) 2006-2007 Red Hat, Inc.
   * Copyright © 2007 Ryan Lortie
   * LGPL
   */

  switch (info->type)
  {
    case SHELL_APP_INFO_TYPE_ENTRY:
      return themed_icon_from_name (gmenu_tree_entry_get_icon ((GMenuTreeEntry*)info->entry));
    case SHELL_APP_INFO_TYPE_DESKTOP_FILE:
      iconname = g_key_file_get_locale_string (info->keyfile, DESKTOP_ENTRY_GROUP, "Icon", NULL, NULL);
      icon = themed_icon_from_name (iconname);
      g_free (iconname);
      return icon;
      break;
    case SHELL_APP_INFO_TYPE_WINDOW:
      return NULL;
  }
  g_assert_not_reached ();
  return NULL;
}
void
set_description_from_desktop (GksuContext *context, gchar *file_name)
{
  GKeyFile *desktop;
  GError *error = NULL;
  gchar *buffer = NULL;

  desktop = g_key_file_new ();

  g_key_file_load_from_file (desktop, file_name, G_KEY_FILE_NONE, &error);
  if (error)
    {
      g_warning ("Could not load desktop file: %s", error->message);
      g_error_free (error);
      g_key_file_free (desktop);
      return;
    }

  buffer = g_key_file_get_locale_string (desktop, "Desktop Entry",
					 "Name", NULL, NULL);
  if (buffer)
    {
      gksu_context_set_description (context, buffer);
      g_free (buffer);
    }

  g_key_file_free (desktop);
}
static GIcon *
key_file_get_icon (GKeyFile *key_file)
{
  GIcon *icon = NULL;
  gchar *icon_name;

  icon_name = g_key_file_get_locale_string (key_file, DESKTOP_ENTRY_GROUP,
                                            "Icon", NULL, NULL);
  if (!icon_name)
    return NULL;

  if (g_path_is_absolute (icon_name)) {
    GFile *file;

    file = g_file_new_for_path (icon_name);
    icon = g_file_icon_new (file);
    g_object_unref (file);
  } else {
    char *p;

    /* Work around a common mistake in desktop files */
    if ((p = strrchr (icon_name, '.')) != NULL &&
        (strcmp (p, ".png") == 0 ||
         strcmp (p, ".xpm") == 0 ||
         strcmp (p, ".svg") == 0))
      *p = 0;

    icon = g_themed_icon_new (icon_name);
  }

  g_free (icon_name);

  return icon;
}
Exemple #12
0
static
struct Action* _get_action(GKeyFile* file, const char* group_name)
{
    GError* error = NULL;
    gchar* name = g_key_file_get_locale_string(file,
                                               group_name,
                                               G_KEY_FILE_DESKTOP_KEY_NAME,
                                               NULL,
                                               &error);
    if (error != NULL) {
        g_warning("[%s] %s", __func__, error->message);
        g_error_free(error);
        return NULL;
    }

    gchar* exec = g_key_file_get_string(file,
                                        group_name,
                                        G_KEY_FILE_DESKTOP_KEY_EXEC,
                                        &error);
    if (error != NULL) {
        g_warning("[%s] %s", __func__, error->message);
        g_error_free(error);
        g_free(name);
        return NULL;
    }
    /* g_debug("[%s] name: %s, exec: %s", __func__, name, exec); */
    struct Action* action = action_new(name, exec);

    g_free(name);
    g_free(exec);

    return action;
}
static void
check_locale_string_value (GKeyFile    *keyfile,
			   const gchar *group,
			   const gchar *key,
			   const gchar *locale,
			   const gchar *expected) 
{
  GError *error = NULL;
  gchar *value;

  value = g_key_file_get_locale_string (keyfile, group, key, locale, &error);
  check_no_error (&error);
  g_assert (value != NULL);

  if (strcmp (value, expected) != 0)
    {
      g_print ("Group %s key %s locale %s: "
	       "expected string value '%s', actual value '%s'\n",
	       group, key, locale, expected, value);      
	  
	  g_assert(FALSE && "keyfile_test failed");
      
      #ifdef SYMBIAN
  	  testResultXml("keyfile_test");
  	  #endif /* EMULATOR */
  	  
      exit (1);
    }

  g_free (value);
}
/**
 * as_app_parse_file_key_fallback_comment:
 **/
static gboolean
as_app_parse_file_key_fallback_comment (AsApp *app,
					GKeyFile *kf,
					const gchar *key,
					GError **error)
{
	g_autofree gchar *locale = NULL;
	g_autofree gchar *tmp = NULL;

	/* GenericName */
	if (g_strcmp0 (key, G_KEY_FILE_DESKTOP_KEY_GENERIC_NAME) == 0 ||
	           g_strcmp0 (key, "_GenericName") == 0) {
		tmp = g_key_file_get_string (kf,
					     G_KEY_FILE_DESKTOP_GROUP,
					     key,
					     NULL);
		if (tmp != NULL && tmp[0] != '\0')
			as_app_set_comment (app, "C", tmp);

	/* GenericName[] */
	} else if (g_str_has_prefix (key, G_KEY_FILE_DESKTOP_KEY_GENERIC_NAME)) {
		locale = as_app_desktop_key_get_locale (key);
		tmp = g_key_file_get_locale_string (kf,
						    G_KEY_FILE_DESKTOP_GROUP,
						    G_KEY_FILE_DESKTOP_KEY_GENERIC_NAME,
						    locale,
						    NULL);
		if (tmp != NULL && tmp[0] != '\0')
			as_app_set_comment (app, locale, tmp);
	}

	return TRUE;
}
static char *
load_index_theme_name (const char *index,
                       char      **parent)
{
        GKeyFile *file;
        char *indexname = NULL;
        gboolean hidden;

        file = g_key_file_new ();
        if (g_key_file_load_from_file (file, index, G_KEY_FILE_KEEP_TRANSLATIONS, NULL) == FALSE) {
                g_key_file_free (file);
                return NULL;
        }
        /* Don't add hidden themes to the list */
        hidden = g_key_file_get_boolean (file, "Sound Theme", "Hidden", NULL);
        if (!hidden) {
                indexname = g_key_file_get_locale_string (file,
                                                          "Sound Theme",
                                                          "Name",
                                                          NULL,
                                                          NULL);

                /* Save the parent theme, if there's one */
                if (parent != NULL) {
                        *parent = g_key_file_get_string (file,
                                                         "Sound Theme",
                                                         "Inherits",
                                                         NULL);
                }
        }

        g_key_file_free (file);
        return indexname;
}
Exemple #16
0
/**
 * ethos_plugin_info_load_from_key_file:
 * @plugin_info: An #EthosPluginInfo
 * @group: the name of the group to load
 * @key_file: A #GKeyFile
 * @error: A location for a #GError or %NULL
 *
 * Loads the plugin information from @key_file.  The information is loaded from the group named
 * @group within the keyfile.  Therfore, if @group where "Sample Plugin" then the keyfile should
 * have a group header such as "[Sample Plugin]" within it.
 *
 * Upon failure, @error is set and %FALSE is returned.
 *
 * Return value: %TRUE on success
 */
gboolean
ethos_plugin_info_load_from_key_file (EthosPluginInfo  *plugin_info,
                                      const gchar      *group,
                                      GKeyFile         *key_file,
				      GError          **error)
{
	EthosPluginInfoPrivate *priv;

	g_return_val_if_fail (ETHOS_IS_PLUGIN_INFO (plugin_info), FALSE);
	g_return_val_if_fail (key_file != NULL, FALSE);

	priv = plugin_info->priv;

	ethos_plugin_info_clear (plugin_info);

	if (!g_key_file_has_group (key_file, group)) {
		g_set_error (error, ETHOS_ERROR, ETHOS_ERROR_INVALID_KEY_FILE,
		             "Could not find group %s in key file", group);
		return FALSE;
	}

	priv->loader    = g_key_file_get_string  (key_file, group, "Loader", NULL);
	priv->authors   = g_key_file_get_string_list
	                                         (key_file, group, "Authors", NULL, NULL);
	priv->desc      = g_key_file_get_locale_string  (key_file, group, "Description", NULL, NULL);
	priv->copyright = g_key_file_get_string  (key_file, group, "Copyright", NULL);
	priv->website   = g_key_file_get_string  (key_file, group, "Website", NULL);
	priv->deps      = g_key_file_get_string  (key_file, group, "Dependencies", NULL);
	priv->name      = g_key_file_get_locale_string  (key_file, group, "Name", NULL, NULL);
	priv->module    = g_key_file_get_string  (key_file, group, "Module", NULL);
	priv->icon      = g_key_file_get_string  (key_file, group, "Icon", NULL);
	priv->version   = g_key_file_get_string  (key_file, group, "Version", NULL);
	priv->iage      = g_key_file_get_integer (key_file, group, "IAge", NULL);

	if (!priv->name) {
		g_set_error (error, ETHOS_ERROR, ETHOS_ERROR_INVALID_KEY_FILE,
		             "No \"Name\" in key file");
		return FALSE;
	}
	else if (!priv->module) {
		g_set_error (error, ETHOS_ERROR, ETHOS_ERROR_INVALID_KEY_FILE,
		             "No \"Module\" in key file");
		return FALSE;
	}

	return TRUE;
}
static EvBackendInfo *
ev_backends_manager_load_backend (const gchar *file)
{
	EvBackendInfo *info;
	GKeyFile      *backend_file = NULL;
	GError        *error = NULL;

	backend_file = g_key_file_new ();
	if (!g_key_file_load_from_file (backend_file, file, G_KEY_FILE_NONE, &error)) {
		g_warning ("Error opening backend file %s: %s",
			   file, error->message);
		g_error_free (error);
		g_key_file_free (backend_file);

		return NULL;
	}

	info = g_new0 (EvBackendInfo, 1);
	info->module_name = g_key_file_get_string (backend_file, EV_BACKENDS_GROUP,
						   "Module", NULL);
	if (!info->module_name) {
		g_warning ("Bad atril backend file %s: Could not find 'Module'",
			   file);
		ev_backend_info_free (info);
		g_key_file_free (backend_file);

		return NULL;
	}

	info->resident = g_key_file_get_boolean (backend_file, EV_BACKENDS_GROUP,
						 "Resident", NULL);
	
	info->type_desc = g_key_file_get_locale_string (backend_file, EV_BACKENDS_GROUP,
							"TypeDescription", NULL, NULL);
	if (!info->type_desc) {
		g_warning ("Bad atril backend file %s: Could not find 'TypeDescription'",
			   file);
		ev_backend_info_free (info);
		g_key_file_free (backend_file);

		return NULL;
	}

	info->mime_types = g_key_file_get_string_list (backend_file, EV_BACKENDS_GROUP,
						       "MimeType", NULL, NULL);
	if (!info->mime_types) {
		g_warning ("Bad atril backend file %s: Could not find 'MimeType'",
			   file);
		ev_backend_info_free (info);
		g_key_file_free (backend_file);

		return NULL;
	}

	g_key_file_free (backend_file);

	return info;
}
Exemple #18
0
static ArCardThemeInfo *
ar_card_theme_kde_class_get_theme_info (ArCardThemeClass *klass,
                                        const char *path,
                                        const char *filename)
{
  ArCardThemeInfo *info = NULL;
  char *base_path = NULL, *key_file_path = NULL;
  char *back_name;
  GKeyFile *key_file = NULL;
  char *svg_filename = NULL, *name = NULL, *display_name, *pref_name;

  if (get_is_blacklisted (filename)) {
    ar_debug_print (AR_DEBUG_CARD_THEME,
                        "KDE card theme %s is blacklisted\n", filename);
    return NULL;
  }

  base_path = g_build_filename (path, filename, NULL);
  if (!g_file_test (path, G_FILE_TEST_IS_DIR))
    goto out;

  key_file_path = g_build_filename (base_path, KDE_BACKDECK_FILENAME, NULL);
  key_file = g_key_file_new ();
  if (!g_key_file_load_from_file (key_file, key_file_path, 0, NULL))
    goto out;

  if (!g_key_file_has_group (key_file, KDE_BACKDECK_GROUP))
    goto out;

  name = g_key_file_get_locale_string (key_file, KDE_BACKDECK_GROUP, KDE_BACKDECK_NAME_KEY, NULL, NULL);
  svg_filename = g_key_file_get_string (key_file, KDE_BACKDECK_GROUP, KDE_BACKDECK_SVG_KEY, NULL);
  if (!name || !name[0] || !svg_filename || !svg_filename[0])
    goto out;

  back_name = g_key_file_get_string (key_file, KDE_BACKDECK_GROUP, KDE_BACKDECK_BACK_KEY, NULL);

  display_name = g_strdup_printf ("%s (KDE)", name);
  pref_name = g_strdup_printf ("kde:%s", filename);
  info = _ar_card_theme_info_new (G_OBJECT_CLASS_TYPE (klass),
                                  base_path,
                                  svg_filename,
                                  display_name /* adopts */,
                                  pref_name /* adopts */,
                                  TRUE /* scalable */,
                                  back_name, g_free);

out:
  g_free (base_path);
  g_free (key_file_path);
  g_free (name);
  g_free (svg_filename);
  if (key_file) {
    g_key_file_free (key_file);
  }

  return info;
}
char *
egg_desktop_file_get_locale_string (EggDesktopFile * desktop_file,
                                    const char *key, const char *locale,
                                    GError ** error)
{
    return g_key_file_get_locale_string (desktop_file->key_file,
                                         EGG_DESKTOP_FILE_GROUP, key, locale,
                                         error);
}
Exemple #20
0
EVENTD_EXPORT
gint8
evhelpers_config_key_file_get_locale_string(GKeyFile *config_file, const gchar *group, const gchar *key, const gchar *locale, gchar **value)
{
    GError *error = NULL;

    *value = g_key_file_get_locale_string(config_file, group, key, locale, &error);

    return _evhelpers_config_key_file_error(&error, group, key);
}
static gboolean
desktop_entry_load_directory (DesktopEntry  *entry,
                              GKeyFile      *key_file,
                              GError       **error)
{
  DesktopEntryDirectory *entry_directory = (DesktopEntryDirectory*)entry;
  char *type_str;

  type_str = g_key_file_get_string (key_file, DESKTOP_ENTRY_GROUP, "Type", error);
  if (!type_str)
    return FALSE;

  if (strcmp (type_str, "Directory") != 0)
    {
      g_set_error (error,
                   G_KEY_FILE_ERROR,
                   G_KEY_FILE_ERROR_INVALID_VALUE,
                   "\"%s\" does not contain the correct \"Type\" value\n", entry->path);
      g_free (type_str);
      return FALSE;
    }

  g_free (type_str);

  entry_directory->name = g_key_file_get_locale_string (key_file, DESKTOP_ENTRY_GROUP, "Name", NULL, error);
  if (entry_directory->name == NULL)
    return FALSE;

  entry_directory->generic_name = g_key_file_get_locale_string (key_file, DESKTOP_ENTRY_GROUP, "GenericName", NULL, NULL);
  entry_directory->comment      = g_key_file_get_locale_string (key_file, DESKTOP_ENTRY_GROUP, "Comment", NULL, NULL);
  entry_directory->icon         = key_file_get_icon (key_file);
  entry_directory->nodisplay    = g_key_file_get_boolean (key_file,
                                                          DESKTOP_ENTRY_GROUP,
                                                          "NoDisplay",
                                                          NULL);
  entry_directory->hidden       = g_key_file_get_boolean (key_file,
                                                          DESKTOP_ENTRY_GROUP,
                                                          "Hidden",
                                                          NULL);
  entry_directory->showin       = key_file_get_show_in (key_file);

  return TRUE;
}
gchar *
ccm_config_schema_get_description (CCMConfigSchema * self, gchar * locale,
                                   gchar * key)
{
    g_return_val_if_fail (self != NULL, NULL);
    g_return_val_if_fail (key != NULL, NULL);

    return g_key_file_get_locale_string (self->priv->file, key,
                                         CCM_CONFIG_SCHEMA_ENTRY_DESCRIPTION,
                                         locale, NULL);
}
void add_autostart_file(char* desktop_id, char* file, GKeyFile* kf)
{
    GtkTreeIter it;

    const char* session_name_local = NULL;

    session_name_local = g_getenv("XDG_CURRENT_DESKTOP");
    if(!session_name_local)
    {
        session_name_local = g_getenv("DESKTOP_SESSION");
        if( G_UNLIKELY(!session_name_local) )
            session_name_local = "LXDE";
    }

    if( g_key_file_load_from_file( kf, file, 0, NULL ) )
    {
        if( is_desktop_file_valid(kf) )
        {
            char* name = g_key_file_get_locale_string(kf, grp, "Name", NULL, NULL);
            char* icon = g_key_file_get_locale_string(kf, grp, "Icon", NULL, NULL);
            char* comment = g_key_file_get_locale_string(kf, grp, "Comment", NULL, NULL);
            int flags;
            gboolean enabled = is_desktop_file_enabled(kf, &flags, session_name_local);
            if( enabled )
                flags |= ORIGINALLY_ENABLED;
            gtk_list_store_append(autostart_list, &it);
            gtk_list_store_set( autostart_list, &it,
                                COL_ENABLED, enabled,
                                COL_NAME, name,
                                /* COL_ICON, pix, */
                                COL_COMMENT, comment,
                                COL_DESKTOP_ID, desktop_id,
                                COL_SRC_FILE, file,
                                COL_FLAGS, flags,
                                -1 );
            g_free(name);
            g_free(icon);
            g_free(comment);
        }
    }
}
Exemple #24
0
GSList *do_scan_xsessions(void)
{
    GSList *xsessions = NULL;
    GDir *d;
    const char *basename;
    GKeyFile *f;

    d = g_dir_open(XSESSIONS_DIR, 0, NULL);
    if( !d )
        return NULL;

    f = g_key_file_new();
    while( ( basename = g_dir_read_name(d) ) != NULL )
    {
        char *file_path;
        gboolean loaded;

        if(!g_str_has_suffix(basename, ".desktop"))
            continue;

        file_path = g_build_filename(XSESSIONS_DIR, basename, NULL);
        loaded = g_key_file_load_from_file(f, file_path, G_KEY_FILE_NONE, NULL);
        g_free(file_path);

        if( loaded )
        {
            char *name = g_key_file_get_locale_string(f, "Desktop Entry", "Name", NULL, NULL);
            if( name )
            {
                char *exec = g_key_file_get_string(f, "Desktop Entry", "Exec", NULL);
                if(exec)
                {
                    Session* sess = g_new( Session, 1 );
                    sess->name = name;
                    sess->exec = exec;
                    sess->desktop_file = g_strdup(basename);
                    if( !strcmp(name, "LXDE") )
                        xsessions = g_slist_prepend(xsessions, sess);
                    else
                        xsessions = g_slist_append(xsessions, sess);
                    continue; /* load next file */
                    g_free(exec);
                }
                g_free(name);
            }
        }
    }
    g_dir_close(d);
    g_key_file_free(f);
    return xsessions;
}
Exemple #25
0
static void config_from_file()
{
    const gchar* user_config = g_get_user_config_dir();

    GString* path = g_string_new (user_config);
    g_string_append(path, "/eyerest.conf");

    g_message("Load config file: %s", path->str);

    GKeyFile* key_file = g_key_file_new();

    if(g_key_file_load_from_file (key_file, path->str, G_KEY_FILE_NONE, NULL))
    {
        GET_DEFAULT_VALUE(g_config.interval,        g_key_file_get_integer (key_file, "Config", "interval", NULL));
        GET_DEFAULT_VALUE(g_config.rest_time,       g_key_file_get_integer (key_file, "Config", "rest_time", NULL));
        GET_DEFAULT_VALUE(g_config.max_idle_time,   g_key_file_get_integer (key_file, "Config", "max_idle_time", NULL));
        GError *error;
        gchar* font   = g_key_file_get_locale_string(key_file, "Display", "font",   NULL, NULL);
        gchar* color  = g_key_file_get_locale_string(key_file, "Display", "color",  NULL, NULL);
        gchar* format = g_key_file_get_locale_string(key_file, "Display", "format", NULL, &error);
        if(format == NULL)
        {
            g_print ("get format failed: %s\n", error->message);
        }
        SET_DEFAULT_VALUE_CPYSTR(g_config.font, font);
        SET_DEFAULT_VALUE_CPYSTR(g_config.color, color);
        SET_DEFAULT_VALUE_CPYSTR(g_config.format, format);
        g_free(font);
        g_free(color);

        GET_DEFAULT_VALUE(g_config.x_coordinate,   g_key_file_get_integer (key_file, "Display", "x-coordinate", NULL));
        GET_DEFAULT_VALUE(g_config.y_coordinate,   g_key_file_get_integer (key_file, "Display", "y-coordinate", NULL));
    }

    g_key_file_free(key_file);
    g_string_free(path, TRUE);
}
char *
shell_app_info_get_description (ShellAppInfo *info)
{
  switch (info->type)
  {
    case SHELL_APP_INFO_TYPE_ENTRY:
      return g_strdup (gmenu_tree_entry_get_comment ((GMenuTreeEntry*)info->entry));
    case SHELL_APP_INFO_TYPE_DESKTOP_FILE:
      return g_key_file_get_locale_string (info->keyfile, DESKTOP_ENTRY_GROUP, "Comment", NULL, NULL);
    case SHELL_APP_INFO_TYPE_WINDOW:
      return NULL;
  }
  g_assert_not_reached ();
  return NULL;
}
/* g_key_file_get_locale_string is too much limited so implement replacement */
static char *_get_language_string(GKeyFile *kf, const char *key)
{
    char **lang;
    char *try_key, *str;

    for (lang = languages; lang[0] != NULL; lang++)
    {
        try_key = g_strdup_printf("%s[%s]", key, lang[0]);
        str = _get_string(kf, try_key);
        g_free(try_key);
        if (str != NULL)
            return str;
    }
    return _escape_lf(g_key_file_get_locale_string(kf, G_KEY_FILE_DESKTOP_GROUP,
                                                   key, languages[0], NULL));
}
Exemple #28
0
void ToolbarData::load(GKeyFile* config, const char* group)
{
	XOJ_CHECK_TYPE(ToolbarData);

	gsize length = 0;
	gchar** keys = g_key_file_get_keys(config, group, &length, NULL);
	if (keys == NULL)
	{
		return;
	}

	gchar* name = g_key_file_get_locale_string(config, group, "name", NULL, NULL);
	if (name != NULL)
	{
		this->name = name;
		g_free(name);
	}

	for (gsize i = 0; i < length; i++)
	{
		if (strcmp(keys[i], "name") == 0 || strncmp(keys[i], "name[", 5) == 0)
		{
			continue;
		}

		ToolbarEntry e;
		gsize keyLen = 0;
		e.setName(keys[i]);
		gchar** list = g_key_file_get_string_list(config, group, keys[i], &keyLen,
		                                          NULL);

		for (gsize x = 0; x < keyLen; x++)
		{
			String s = list[x];
			e.addItem(s.trim());
		}

		this->contents.push_back(e);

		g_strfreev(list);
	}

	g_strfreev(keys);
}
Exemple #29
0
static void
check_locale_string_value (GKeyFile    *keyfile,
			   const gchar *group,
			   const gchar *key,
			   const gchar *locale,
			   const gchar *expected)
{
  GError *error = NULL;
  gchar *value;
  value = g_key_file_get_locale_string (keyfile, group, key, locale, &error);
  check_no_error (error);
  cut_assert (value);
  cut_assert_equal_string (expected, value,
			   cut_message ("Group %s key %s locale %s: "
                                        "expected string value '%s', "
                                        "actual value '%s'",
                                        group, key, locale, expected, value));
  g_free (value);
}
static gchar *
get_customer_support_email (void)
{
  g_autoptr(GKeyFile) key_file = g_key_file_new ();
  const gchar * const *path_iter;
  g_autofree gchar *support_email = NULL;
  g_autoptr(GError) error = NULL;

  for (path_iter = customer_support_paths; *path_iter != NULL; path_iter++)
    {
      if (!g_key_file_load_from_file (key_file, *path_iter, G_KEY_FILE_NONE,
                                      &error))
        {
          if (!g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_NOENT))
            g_warning ("%s: %s", *path_iter, error->message);

          g_clear_error (&error);
          continue;
        }

      support_email = g_key_file_get_locale_string (key_file,
                                                    CUSTOMER_SUPPORT_GROUP_NAME,
                                                    CUSTOMER_SUPPORT_KEY_EMAIL,
                                                    NULL, &error);
      if (support_email == NULL)
        {
          g_warning ("[%s] %s key not found in %s: %s",
                     CUSTOMER_SUPPORT_GROUP_NAME, CUSTOMER_SUPPORT_KEY_EMAIL,
                     *path_iter, error->message);
          g_clear_error (&error);
        }
      else
        {
          return g_steal_pointer (&support_email);
        }
    }

  g_warning ("[%s] %s key not found in any %s, using default",
             CUSTOMER_SUPPORT_GROUP_NAME, CUSTOMER_SUPPORT_KEY_EMAIL,
             CUSTOMER_SUPPORT_FILENAME);
  return g_strdup (CUSTOMER_SUPPORT_EMAIL_FALLBACK);
}