xdg_util.cc revision 731df977c0511bca2206b5f333555b1205ff1f43
1// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "base/nix/xdg_util.h" 6 7#include "base/environment.h" 8#include "base/file_path.h" 9#include "base/file_util.h" 10#include "base/third_party/xdg_user_dirs/xdg_user_dir_lookup.h" 11 12namespace base { 13namespace nix { 14 15FilePath GetXDGDirectory(Environment* env, const char* env_name, 16 const char* fallback_dir) { 17 std::string env_value; 18 if (env->GetVar(env_name, &env_value) && !env_value.empty()) 19 return FilePath(env_value); 20 return file_util::GetHomeDir().Append(fallback_dir); 21} 22 23FilePath GetXDGUserDirectory(Environment* env, const char* dir_name, 24 const char* fallback_dir) { 25 char* xdg_dir = xdg_user_dir_lookup(dir_name); 26 if (xdg_dir) { 27 FilePath rv(xdg_dir); 28 free(xdg_dir); 29 return rv; 30 } 31 return file_util::GetHomeDir().Append(fallback_dir); 32} 33 34DesktopEnvironment GetDesktopEnvironment(Environment* env) { 35 std::string desktop_session; 36 if (env->GetVar("DESKTOP_SESSION", &desktop_session)) { 37 if (desktop_session == "gnome") { 38 return DESKTOP_ENVIRONMENT_GNOME; 39 } else if (desktop_session == "kde4") { 40 return DESKTOP_ENVIRONMENT_KDE4; 41 } else if (desktop_session == "kde") { 42 // This may mean KDE4 on newer systems, so we have to check. 43 if (env->HasVar("KDE_SESSION_VERSION")) 44 return DESKTOP_ENVIRONMENT_KDE4; 45 return DESKTOP_ENVIRONMENT_KDE3; 46 } else if (desktop_session.find("xfce") != std::string::npos) { 47 return DESKTOP_ENVIRONMENT_XFCE; 48 } 49 } 50 51 // Fall back on some older environment variables. 52 // Useful particularly in the DESKTOP_SESSION=default case. 53 if (env->HasVar("GNOME_DESKTOP_SESSION_ID")) { 54 return DESKTOP_ENVIRONMENT_GNOME; 55 } else if (env->HasVar("KDE_FULL_SESSION")) { 56 if (env->HasVar("KDE_SESSION_VERSION")) 57 return DESKTOP_ENVIRONMENT_KDE4; 58 return DESKTOP_ENVIRONMENT_KDE3; 59 } 60 61 return DESKTOP_ENVIRONMENT_OTHER; 62} 63 64const char* GetDesktopEnvironmentName(DesktopEnvironment env) { 65 switch (env) { 66 case DESKTOP_ENVIRONMENT_OTHER: 67 return NULL; 68 case DESKTOP_ENVIRONMENT_GNOME: 69 return "GNOME"; 70 case DESKTOP_ENVIRONMENT_KDE3: 71 return "KDE3"; 72 case DESKTOP_ENVIRONMENT_KDE4: 73 return "KDE4"; 74 case DESKTOP_ENVIRONMENT_XFCE: 75 return "XFCE"; 76 } 77 return NULL; 78} 79 80const char* GetDesktopEnvironmentName(Environment* env) { 81 return GetDesktopEnvironmentName(GetDesktopEnvironment(env)); 82} 83 84} // namespace nix 85} // namespace base 86