88using namespace IPC ;
99using namespace std ::string_literals;
1010
11- constexpr const char * SOCKET_NAME = " .hyprpaper.sock" ;
11+ constexpr const char * SOCKET_NAME = " .hyprpaper.sock" ;
12+ constexpr const size_t HP_PROTO_VERSION = 2 ;
1213
1314static SP<CHyprpaperCoreImpl> g_coreImpl;
1415
@@ -114,7 +115,7 @@ CSocket::CSocket() {
114115 if (!m_socket)
115116 return ;
116117
117- g_coreImpl = makeShared<CHyprpaperCoreImpl>(1 , [this ](SP<Hyprwire::IObject> obj) {
118+ g_coreImpl = makeShared<CHyprpaperCoreImpl>(HP_PROTO_VERSION , [this ](SP<Hyprwire::IObject> obj) {
118119 auto manager = m_managers.emplace_back (makeShared<CHyprpaperCoreManagerObject>(std::move (obj)));
119120
120121 manager->setDestroy ([this , weak = WP<CHyprpaperCoreManagerObject>{manager}] { std::erase (m_managers, weak); });
@@ -127,6 +128,18 @@ CSocket::CSocket() {
127128 m_wallpaperObjects.emplace_back (makeShared<CWallpaperObject>(
128129 makeShared<CHyprpaperWallpaperObject>(m_socket->createObject (weak->getObject ()->client (), weak->getObject (), " hyprpaper_wallpaper" , id))));
129130 });
131+
132+ manager->setGetStatusObject ([this , weak = WP<CHyprpaperCoreManagerObject>{manager}](uint32_t id) {
133+ if (!weak)
134+ return ;
135+
136+ auto x =
137+ m_statusObjects.emplace_back (makeShared<CHyprpaperStatusObject>(m_socket->createObject (weak->getObject ()->client (), weak->getObject (), " hyprpaper_status" , id)));
138+
139+ for (const auto & m : g_ui->targets ()) {
140+ x->sendActiveWallpaper (m->m_monitorName .c_str (), m->m_lastPath .c_str ());
141+ }
142+ });
130143 });
131144
132145 m_socket->addImplementation (g_coreImpl);
@@ -145,3 +158,9 @@ void CSocket::onRemovedDisplay(const std::string& sv) {
145158 m->sendRemoveMonitor (sv.c_str ());
146159 }
147160}
161+
162+ void CSocket::onWallpaperChanged (const std::string& mon, const std::string& path) {
163+ for (const auto & so : m_statusObjects) {
164+ so->sendActiveWallpaper (mon.c_str (), path.c_str ());
165+ }
166+ }
0 commit comments