summaryrefslogtreecommitdiff
path: root/UnityCore
diff options
authorhandsome_feng <445865575@qq.com>2016-02-09 12:21:08 +0000
committerCI Train Bot <ci-train-bot@canonical.com>2016-02-09 12:21:08 +0000
commit088e2026bc8caf619a5502a911cb09ecc225c91a (patch)
treecc89c8e598d333f24f83e47daa5aeee1fe0a8958 /UnityCore
parent02ff690067646b495d7a50fc66b150906375dc27 (diff)
parent2c16d53888141a602b686b65d83f728191c14282 (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.cpp40
-rw-r--r--UnityCore/GnomeSessionManager.h2
-rw-r--r--UnityCore/GnomeSessionManagerImpl.h3
-rw-r--r--UnityCore/SessionManager.h2
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;