Index: base/xdg_util.cc |
diff --git a/base/xdg_util.cc b/base/xdg_util.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0ff6c470927ce153fd055ce6863fa2f4e630e51a |
--- /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 |