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