void on_switch_user(GDBusMethodInvocation *invocation, std::string_view sender, GVariant *parameters)
{
- auto [ session_uid, prev_subsession_id, next_subsession_id ] = tuple_from_g_variant<int, int, int>(parameters);
+ auto [ session_uid, next_subsession_id ] = tuple_from_g_variant<int, int>(parameters);
if (session_uid <= 0) {
g_dbus_method_invocation_return_dbus_error(invocation, "org.freedesktop.DBus.Error.InvalidArgs", "Negative UID passed");
switch_id += 1;
+ int prev_subsession_id = INITIAL_SUB_SESSION_ID;
+ if (last_subsession_per_session.contains(session_uid))
+ prev_subsession_id = last_subsession_per_session.at(session_uid);
+
GError *err = nullptr;
if (!g_dbus_connection_emit_signal(connection, nullptr, bus_object.data(), bus_iface.data(), "SwitchUserStarted",
vals_to_g_variant(session_uid, switch_id, prev_subsession_id, next_subsession_id), &err))
"</method>"
"<method name=\"SwitchUser\">"
"<arg name=\"session_uid\" type=\"i\" direction=\"in\"/>"
- "<arg name=\"prev_subsession_id\" type=\"i\" direction=\"in\"/>"
"<arg name=\"next_subsession_id\" type=\"i\" direction=\"in\"/>"
"</method>"
"<method name=\"AddUserWait\">"