diff options
author | evan@chromium.org <evan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-22 23:28:05 +0000 |
---|---|---|
committer | evan@chromium.org <evan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-22 23:28:05 +0000 |
commit | 1c657854c20ee288f8812c707d4bf4fcfecb7495 (patch) | |
tree | 2d157e936beea91a3f9ad2385999ad27804ec5d4 /base/xdg_util.cc | |
parent | a1170ed12a730f79d4224779b90e35923c7bb729 (diff) | |
download | chromium_src-1c657854c20ee288f8812c707d4bf4fcfecb7495.zip chromium_src-1c657854c20ee288f8812c707d4bf4fcfecb7495.tar.gz chromium_src-1c657854c20ee288f8812c707d4bf4fcfecb7495.tar.bz2 |
bsd: refactor XDG bits of linux_util into a shared file.
This allows the shared code to build on the BSDs without
them needing to build _linux files.
Review URL: http://codereview.chromium.org/1701005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@45380 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/xdg_util.cc')
-rw-r--r-- | base/xdg_util.cc | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/base/xdg_util.cc b/base/xdg_util.cc new file mode 100644 index 0000000..0ff6c47 --- /dev/null +++ b/base/xdg_util.cc @@ -0,0 +1,83 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/xdg_util.h" + +#include "base/env_var.h" +#include "base/file_path.h" +#include "base/file_util.h" +#include "base/third_party/xdg_user_dirs/xdg_user_dir_lookup.h" + +namespace base { + +FilePath GetXDGDirectory(EnvVarGetter* env, const char* env_name, + const char* fallback_dir) { + std::string env_value; + if (env->GetEnv(env_name, &env_value) && !env_value.empty()) + return FilePath(env_value); + return file_util::GetHomeDir().Append(fallback_dir); +} + +FilePath GetXDGUserDirectory(EnvVarGetter* env, const char* dir_name, + const char* fallback_dir) { + char* xdg_dir = xdg_user_dir_lookup(dir_name); + if (xdg_dir) { + FilePath rv(xdg_dir); + free(xdg_dir); + return rv; + } + return file_util::GetHomeDir().Append(fallback_dir); +} + +DesktopEnvironment GetDesktopEnvironment(EnvVarGetter* env) { + std::string desktop_session; + if (env->GetEnv("DESKTOP_SESSION", &desktop_session)) { + if (desktop_session == "gnome") { + return DESKTOP_ENVIRONMENT_GNOME; + } else if (desktop_session == "kde4") { + return DESKTOP_ENVIRONMENT_KDE4; + } else if (desktop_session == "kde") { + // This may mean KDE4 on newer systems, so we have to check. + if (env->HasEnv("KDE_SESSION_VERSION")) + return DESKTOP_ENVIRONMENT_KDE4; + return DESKTOP_ENVIRONMENT_KDE3; + } else if (desktop_session.find("xfce") != std::string::npos) { + return DESKTOP_ENVIRONMENT_XFCE; + } + } + + // Fall back on some older environment variables. + // Useful particularly in the DESKTOP_SESSION=default case. + if (env->HasEnv("GNOME_DESKTOP_SESSION_ID")) { + return DESKTOP_ENVIRONMENT_GNOME; + } else if (env->HasEnv("KDE_FULL_SESSION")) { + if (env->HasEnv("KDE_SESSION_VERSION")) + return DESKTOP_ENVIRONMENT_KDE4; + return DESKTOP_ENVIRONMENT_KDE3; + } + + return DESKTOP_ENVIRONMENT_OTHER; +} + +const char* GetDesktopEnvironmentName(DesktopEnvironment env) { + switch (env) { + case DESKTOP_ENVIRONMENT_OTHER: + return NULL; + case DESKTOP_ENVIRONMENT_GNOME: + return "GNOME"; + case DESKTOP_ENVIRONMENT_KDE3: + return "KDE3"; + case DESKTOP_ENVIRONMENT_KDE4: + return "KDE4"; + case DESKTOP_ENVIRONMENT_XFCE: + return "XFCE"; + } + return NULL; +} + +const char* GetDesktopEnvironmentName(EnvVarGetter* env) { + return GetDesktopEnvironmentName(GetDesktopEnvironment(env)); +} + +} // namespace base |