diff options
| author | handsome_feng <445865575@qq.com> | 2016-02-09 12:21:08 +0000 | 
|---|---|---|
| committer | CI Train Bot <ci-train-bot@canonical.com> | 2016-02-09 12:21:08 +0000 | 
| commit | 088e2026bc8caf619a5502a911cb09ecc225c91a (patch) | |
| tree | cc89c8e598d333f24f83e47daa5aeee1fe0a8958 /UnityCore | |
| parent | 02ff690067646b495d7a50fc66b150906375dc27 (diff) | |
| parent | 2c16d53888141a602b686b65d83f728191c14282 (diff) | |
Extend the lockscreen theme for kylin.
Approved by: PS Jenkins bot, Marco Trevisan (TreviƱo) (bzr r4073)
Diffstat (limited to 'UnityCore')
| -rw-r--r-- | UnityCore/GnomeSessionManager.cpp | 40 | ||||
| -rw-r--r-- | UnityCore/GnomeSessionManager.h | 2 | ||||
| -rw-r--r-- | UnityCore/GnomeSessionManagerImpl.h | 3 | ||||
| -rw-r--r-- | UnityCore/SessionManager.h | 2 | 
4 files changed, 47 insertions, 0 deletions
| diff --git a/UnityCore/GnomeSessionManager.cpp b/UnityCore/GnomeSessionManager.cpp index 0702b9433..ad1b7cb24 100644 --- a/UnityCore/GnomeSessionManager.cpp +++ b/UnityCore/GnomeSessionManager.cpp @@ -155,6 +155,13 @@ GnomeManager::Impl::Impl(GnomeManager* manager, bool test_mode)  });  } + { + dm_seat_proxy_ = std::make_shared<glib::DBusProxy>("org.freedesktop.Accounts", + ("/org/freedesktop/Accounts/User" + std::to_string(getuid())).c_str(), + "org.freedesktop.Accounts.User", + G_BUS_TYPE_SYSTEM); + } +  CallLogindMethod("CanHibernate", nullptr, [this] (GVariant* variant, glib::Error const& err) {  if (err)  { @@ -429,6 +436,22 @@ void GnomeManager::Impl::CallConsoleKitMethod(std::string const& method, GVarian  });  } +void GnomeManager::Impl::CallDisplayManagerSeatMethod(std::string const& method, GVariant* parameters) +{ + const char* xdg_seat_path = test_mode_ ? "/org/freedesktop/DisplayManager/Seat0" : g_getenv("XDG_SEAT_PATH"); + + auto proxy = std::make_shared<glib::DBusProxy>(test_mode_ ? testing::DBUS_NAME : "org.freedesktop.DisplayManager", + glib::gchar_to_string(xdg_seat_path), + "org.freedesktop.DisplayManager.Seat", + test_mode_ ? G_BUS_TYPE_SESSION : G_BUS_TYPE_SYSTEM); + proxy->CallBegin(method, parameters, [this, proxy] (GVariant*, glib::Error const& e) { + if (e) + { + LOG_ERROR(logger) << "DisplayManager Seat call failed: " << e.Message(); + } + }); +} +  void GnomeManager::Impl::LockScreen(bool prompt)  {  EnsureCancelPendingAction(); @@ -490,6 +513,13 @@ bool GnomeManager::Impl::HasInhibitors()  return inhibitors.GetBool();  } +void GnomeManager::Impl::UserIconFile(std::function<void(std::string const&)> const& callback) +{ + dm_seat_proxy_->GetProperty("IconFile", [this, callback] (GVariant *value) { + callback(glib::Variant(value).GetString()); + }); +} +  bool GnomeManager::Impl::IsUserInGroup(std::string const& user_name, std::string const& group_name)  {  auto group = getgrnam(group_name.c_str()); @@ -535,6 +565,11 @@ std::string GnomeManager::HostName() const  return glib::gchar_to_string(g_get_host_name());  } +void GnomeManager::UserIconFile(std::function<void(std::string const&)> const& callback) const +{ + impl_->UserIconFile(callback); +} +  void GnomeManager::ScreenSaverActivate()  {  screensaver_requested.emit(true); @@ -665,6 +700,11 @@ void GnomeManager::Hibernate()  });  } +void GnomeManager::SwitchToGreeter() +{ + impl_->CallDisplayManagerSeatMethod("SwitchToGreeter"); +} +  bool GnomeManager::CanLock() const  {  if (is_locked()) diff --git a/UnityCore/GnomeSessionManager.h b/UnityCore/GnomeSessionManager.h index df7df1178..c0894b087 100644 --- a/UnityCore/GnomeSessionManager.h +++ b/UnityCore/GnomeSessionManager.h @@ -36,6 +36,7 @@ public:  std::string RealName() const;  std::string UserName() const;  std::string HostName() const; + void UserIconFile(std::function<void(std::string const&)> const&) const;  void ScreenSaverActivate();  void ScreenSaverDeactivate(); @@ -46,6 +47,7 @@ public:  void Shutdown();  void Suspend();  void Hibernate(); + void SwitchToGreeter();  bool CanLock() const;  bool CanShutdown() const; diff --git a/UnityCore/GnomeSessionManagerImpl.h b/UnityCore/GnomeSessionManagerImpl.h index ee26c3171..88b0dd5c0 100644 --- a/UnityCore/GnomeSessionManagerImpl.h +++ b/UnityCore/GnomeSessionManagerImpl.h @@ -54,6 +54,7 @@ struct GnomeManager::Impl  bool HasInhibitors();  void EnsureCancelPendingAction();  void LockScreen(bool prompt); + void UserIconFile(std::function<void(std::string const&)> const& callback);  GVariant* OnShellMethodCall(std::string const& method, GVariant* parameters);  void CallGnomeSessionMethod(std::string const& method, GVariant* parameters = nullptr, @@ -61,6 +62,7 @@ struct GnomeManager::Impl  void CallUPowerMethod(std::string const& method, glib::DBusProxy::ReplyCallback const& cb = nullptr);  void CallLogindMethod(std::string const& method, GVariant* parameters = nullptr, glib::DBusProxy::CallFinishedCallback const& cb = nullptr);  void CallConsoleKitMethod(std::string const& method, GVariant* parameters = nullptr); + void CallDisplayManagerSeatMethod(std::string const& method, GVariant* parameters = nullptr);  bool InteractiveMode();  void UpdateHaveOtherOpenSessions(); @@ -78,6 +80,7 @@ struct GnomeManager::Impl  glib::DBusProxy::Ptr login_proxy_;  glib::DBusProxy::Ptr presence_proxy_;  glib::DBusProxy::Ptr dm_proxy_; + glib::DBusProxy::Ptr dm_seat_proxy_;  int open_sessions_;  }; diff --git a/UnityCore/SessionManager.h b/UnityCore/SessionManager.h index f6a0d6933..7523d7ebd 100644 --- a/UnityCore/SessionManager.h +++ b/UnityCore/SessionManager.h @@ -44,6 +44,7 @@ public:  virtual std::string RealName() const = 0;  virtual std::string UserName() const = 0;  virtual std::string HostName() const = 0; + virtual void UserIconFile(std::function<void(std::string const&)> const&) const = 0;  virtual void ScreenSaverActivate() = 0;  virtual void ScreenSaverDeactivate() = 0; @@ -54,6 +55,7 @@ public:  virtual void Shutdown() = 0;  virtual void Suspend() = 0;  virtual void Hibernate() = 0; + virtual void SwitchToGreeter() = 0;  virtual bool CanLock() const = 0;  virtual bool CanShutdown() const = 0; | 
