#include "tlm-manager.h"
#include "common/tlm-error.h"
-G_DEFINE_TYPE (TlmDbusObserver, tlm_dbus_observer, G_TYPE_OBJECT);
-
-#define TLM_DBUS_OBSERVER_PRIV(obj) G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
- TLM_TYPE_DBUS_OBSERVER, TlmDbusObserverPrivate)
-
typedef struct
{
TlmDbusRequest *dbus_request;
DbusObserverEnableFlags enable_flags;
};
+G_DEFINE_TYPE_WITH_PRIVATE (TlmDbusObserver, tlm_dbus_observer, G_TYPE_OBJECT);
+
static void
_handle_dbus_client_added (
TlmDbusObserver *self,
TlmDbusRequest *dbus_request,
TlmSeat *seat)
{
- if (0 == g_strcmp0(dbus_request->username,
- tlm_seat_get_occupying_username(seat))) {
+ g_return_val_if_fail (seat && TLM_IS_SEAT(seat), FALSE);
+ gboolean ret = TRUE;
+ gchar *occupying_username = tlm_seat_get_occupying_username(seat);
+ if (0 == g_strcmp0(dbus_request->username,occupying_username)) {
WARN("Cannot switch to same username");
- return FALSE;
+ ret = FALSE;
}
- return TRUE;
+ g_free(occupying_username);
+ return ret;
}
static gboolean
goto _finished;
}
- if (req->seat && req->seat != seat) {
- g_object_unref(req->seat);
+ if (req->seat != seat) {
+ if (req->seat)
+ g_object_unref(req->seat);
req->seat = seat;
g_object_ref(req->seat);
}
dbus_req->password, dbus_req->environment);
break;
case TLM_DBUS_REQUEST_TYPE_LOGOUT_USER:
- ret = tlm_seat_terminate_session (seat);
+ ret = tlm_seat_terminate_session (seat, FALSE);
break;
case TLM_DBUS_REQUEST_TYPE_SWITCH_USER:
// Refuse request if the request's username is same to
{
GObjectClass *g_klass = G_OBJECT_CLASS (klass);
- g_type_class_add_private (klass, sizeof (TlmDbusObserverPrivate));
-
g_klass->dispose = tlm_dbus_observer_dispose ;
g_klass->finalize = tlm_dbus_observer_finalize;
}
static void
tlm_dbus_observer_init (TlmDbusObserver *dbus_observer)
{
- TlmDbusObserverPrivate *priv = TLM_DBUS_OBSERVER_PRIV (dbus_observer);
+ TlmDbusObserverPrivate *priv = tlm_dbus_observer_get_instance_private (dbus_observer);
priv->manager = NULL;
priv->seat = NULL;