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 12 namespace base { 13 namespace nix { 14 15 FilePath 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 23 FilePath 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 34 DesktopEnvironment 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 desktop_session == "xubuntu") { 48 return DESKTOP_ENVIRONMENT_XFCE; 49 } 50 } 51 52 // Fall back on some older environment variables. 53 // Useful particularly in the DESKTOP_SESSION=default case. 54 if (env->HasVar("GNOME_DESKTOP_SESSION_ID")) { 55 return DESKTOP_ENVIRONMENT_GNOME; 56 } else if (env->HasVar("KDE_FULL_SESSION")) { 57 if (env->HasVar("KDE_SESSION_VERSION")) 58 return DESKTOP_ENVIRONMENT_KDE4; 59 return DESKTOP_ENVIRONMENT_KDE3; 60 } 61 62 return DESKTOP_ENVIRONMENT_OTHER; 63 } 64 65 const char* GetDesktopEnvironmentName(DesktopEnvironment env) { 66 switch (env) { 67 case DESKTOP_ENVIRONMENT_OTHER: 68 return NULL; 69 case DESKTOP_ENVIRONMENT_GNOME: 70 return "GNOME"; 71 case DESKTOP_ENVIRONMENT_KDE3: 72 return "KDE3"; 73 case DESKTOP_ENVIRONMENT_KDE4: 74 return "KDE4"; 75 case DESKTOP_ENVIRONMENT_XFCE: 76 return "XFCE"; 77 } 78 return NULL; 79 } 80 81 const char* GetDesktopEnvironmentName(Environment* env) { 82 return GetDesktopEnvironmentName(GetDesktopEnvironment(env)); 83 } 84 85 } // namespace nix 86 } // namespace base 87