summaryrefslogtreecommitdiffstats
path: root/chrome/browser/chromeos
diff options
context:
space:
mode:
authorderat@chromium.org <derat@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-05-19 23:32:06 +0000
committerderat@chromium.org <derat@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-05-19 23:32:06 +0000
commit34f9c388068177a32b42c9ac72045f87c0bb9b33 (patch)
tree36265c52c74dfbf4e00120acb0367d1c2e3cfb28 /chrome/browser/chromeos
parentf8cff0dae4d15fde4e113576b97390bfb3fb7458 (diff)
downloadchromium_src-34f9c388068177a32b42c9ac72045f87c0bb9b33.zip
chromium_src-34f9c388068177a32b42c9ac72045f87c0bb9b33.tar.gz
chromium_src-34f9c388068177a32b42c9ac72045f87c0bb9b33.tar.bz2
chromeos: Add _CHROME_LOGGED_IN property on root window.
This gets set to either 1 or 0 depending on whether the user is currently logged in or not. I'm doing this as a step towards using the same window manager process during and after login; this will let the WM know which log file it should be using, for instance. BUG=chromium-os:2790 TEST=tried it, and will add an autotest for this soon Review URL: http://codereview.chromium.org/2078017 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@47748 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/chromeos')
-rw-r--r--chrome/browser/chromeos/login/user_manager.cc4
-rw-r--r--chrome/browser/chromeos/login/wizard_controller.cc4
-rw-r--r--chrome/browser/chromeos/wm_ipc.cc15
-rw-r--r--chrome/browser/chromeos/wm_ipc.h17
4 files changed, 25 insertions, 15 deletions
diff --git a/chrome/browser/chromeos/login/user_manager.cc b/chrome/browser/chromeos/login/user_manager.cc
index b018829..e31f12b 100644
--- a/chrome/browser/chromeos/login/user_manager.cc
+++ b/chrome/browser/chromeos/login/user_manager.cc
@@ -11,6 +11,7 @@
#include "base/values.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/chromeos/login/user_image_downloader.h"
+#include "chrome/browser/chromeos/wm_ipc.h"
#include "chrome/browser/pref_service.h"
#include "chrome/common/notification_service.h"
#include "grit/theme_resources.h"
@@ -126,6 +127,9 @@ void UserManager::UserLoggedIn(const std::string& email) {
NotificationType::LOGIN_USER_CHANGED,
Source<UserManager>(this),
Details<const User>(&logged_in_user_));
+
+ // Let the window manager know that we're logged in now.
+ WmIpc::instance()->SetLoggedInProperty(true);
}
void UserManager::DownloadUserImage(const std::string& username) {
diff --git a/chrome/browser/chromeos/login/wizard_controller.cc b/chrome/browser/chromeos/login/wizard_controller.cc
index c3d50ee..41f244b 100644
--- a/chrome/browser/chromeos/login/wizard_controller.cc
+++ b/chrome/browser/chromeos/login/wizard_controller.cc
@@ -454,6 +454,10 @@ namespace browser {
void ShowLoginWizard(const std::string& first_screen_name,
const gfx::Size& size) {
LOG(INFO) << "showing login" << first_screen_name;
+
+ // Tell the window manager that the user isn't logged in.
+ chromeos::WmIpc::instance()->SetLoggedInProperty(false);
+
gfx::Rect screen_bounds(CalculateScreenBounds(size));
if (first_screen_name.empty() &&
diff --git a/chrome/browser/chromeos/wm_ipc.cc b/chrome/browser/chromeos/wm_ipc.cc
index ead38c9..da7cd15 100644
--- a/chrome/browser/chromeos/wm_ipc.cc
+++ b/chrome/browser/chromeos/wm_ipc.cc
@@ -27,18 +27,13 @@ struct AtomInfo {
// Each value from the Atom enum must be present here.
static const AtomInfo kAtomInfos[] = {
+ { WmIpc::ATOM_CHROME_LOGGED_IN, "_CHROME_LOGGED_IN" },
{ WmIpc::ATOM_CHROME_WINDOW_TYPE, "_CHROME_WINDOW_TYPE" },
{ WmIpc::ATOM_CHROME_WM_MESSAGE, "_CHROME_WM_MESSAGE" },
{ WmIpc::ATOM_MANAGER, "MANAGER" },
- { WmIpc::ATOM_NET_SUPPORTING_WM_CHECK, "_NET_SUPPORTING_WM_CHECK" },
- { WmIpc::ATOM_NET_WM_NAME, "_NET_WM_NAME" },
- { WmIpc::ATOM_PRIMARY, "PRIMARY" },
{ WmIpc::ATOM_STRING, "STRING" },
{ WmIpc::ATOM_UTF8_STRING, "UTF8_STRING" },
- { WmIpc::ATOM_WM_NORMAL_HINTS, "WM_NORMAL_HINTS" },
{ WmIpc::ATOM_WM_S0, "WM_S0" },
- { WmIpc::ATOM_WM_STATE, "WM_STATE" },
- { WmIpc::ATOM_WM_TRANSIENT_FOR, "WM_TRANSIENT_FOR" },
{ WmIpc::ATOM_WM_SYSTEM_METRICS, "WM_SYSTEM_METRICS" },
};
@@ -215,6 +210,14 @@ void WmIpc::HandleNonChromeClientMessageEvent(const GdkEventClient& event) {
}
}
+void WmIpc::SetLoggedInProperty(bool logged_in) {
+ std::vector<int> values;
+ values.push_back(static_cast<int>(logged_in));
+ SetIntProperty(gdk_x11_get_default_root_xwindow(),
+ type_to_atom_[ATOM_CHROME_LOGGED_IN],
+ values);
+}
+
WmIpc::WmIpc() {
scoped_array<char*> names(new char*[kNumAtoms]);
scoped_array<Atom> atoms(new Atom[kNumAtoms]);
diff --git a/chrome/browser/chromeos/wm_ipc.h b/chrome/browser/chromeos/wm_ipc.h
index 8c4aba5..f7381ee 100644
--- a/chrome/browser/chromeos/wm_ipc.h
+++ b/chrome/browser/chromeos/wm_ipc.h
@@ -22,18 +22,13 @@ namespace chromeos {
class WmIpc {
public:
enum AtomType {
- ATOM_CHROME_WINDOW_TYPE = 0,
+ ATOM_CHROME_LOGGED_IN = 0,
+ ATOM_CHROME_WINDOW_TYPE,
ATOM_CHROME_WM_MESSAGE,
ATOM_MANAGER,
- ATOM_NET_SUPPORTING_WM_CHECK,
- ATOM_NET_WM_NAME,
- ATOM_PRIMARY,
ATOM_STRING,
ATOM_UTF8_STRING,
- ATOM_WM_NORMAL_HINTS,
ATOM_WM_S0,
- ATOM_WM_STATE,
- ATOM_WM_TRANSIENT_FOR,
ATOM_WM_SYSTEM_METRICS,
kNumAtoms,
};
@@ -86,7 +81,7 @@ class WmIpc {
// Returns the single instance of WmIpc.
static WmIpc* instance();
- // Get or set a property describing a window's type.
+ // Gets or sets a property describing a window's type.
// WmIpcMessageType is defined in chromeos_wm_ipc_enums.h. Type-specific
// parameters may also be supplied. The caller is responsible for trapping
// errors from the X server.
@@ -111,12 +106,16 @@ class WmIpc {
// returned. If false is returned, |event| is not a valid StringMessage.
bool DecodeStringMessage(const GdkEventProperty& event, std::string* msg);
- // Handle ClientMessage events that weren't decodable using DecodeMessage().
+ // Handles ClientMessage events that weren't decodable using DecodeMessage().
// Specifically, this catches messages about the WM_S0 selection that get sent
// when a window manager process starts (so that we can re-run InitWmInfo()).
// See ICCCM 2.8 for more info about MANAGER selections.
void HandleNonChromeClientMessageEvent(const GdkEventClient& event);
+ // Sets a _CHROME_LOGGED_IN property on the root window describing whether
+ // the user is currently logged in or not.
+ void SetLoggedInProperty(bool logged_in);
+
private:
friend struct DefaultSingletonTraits<WmIpc>;