diff options
author | derat@chromium.org <derat@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-05-19 23:32:06 +0000 |
---|---|---|
committer | derat@chromium.org <derat@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-05-19 23:32:06 +0000 |
commit | 34f9c388068177a32b42c9ac72045f87c0bb9b33 (patch) | |
tree | 36265c52c74dfbf4e00120acb0367d1c2e3cfb28 /chrome/browser/chromeos | |
parent | f8cff0dae4d15fde4e113576b97390bfb3fb7458 (diff) | |
download | chromium_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.cc | 4 | ||||
-rw-r--r-- | chrome/browser/chromeos/login/wizard_controller.cc | 4 | ||||
-rw-r--r-- | chrome/browser/chromeos/wm_ipc.cc | 15 | ||||
-rw-r--r-- | chrome/browser/chromeos/wm_ipc.h | 17 |
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>; |