/* login-helper.c: minimal implementation of Accessibility_LoginHelper.idl */
#include <config.h>
-#include <libbonobo.h>
#include "login-helper.h"
+#include "spi-common/spi-dbus.h"
+#include "droute/droute.h"
/* Our parent Gtk object type */
-#define PARENT_TYPE BONOBO_TYPE_OBJECT
+#define PARENT_TYPE G_TYPE_OBJECT
/* A pointer to our parent object class */
-static BonoboObjectClass *bonobo_object_parent_class;
+static GObjectClass *g_object_parent_class;
static void
login_helper_finalize (GObject *object)
{
- (G_OBJECT_CLASS (bonobo_object_parent_class))->finalize (object);
+ (G_OBJECT_CLASS (g_object_parent_class))->finalize (object);
}
-gboolean
+static gboolean
login_helper_set_safe (LoginHelper *helper, gboolean safe)
{
LoginHelperClass *klass = LOGIN_HELPER_GET_CLASS (helper);
return FALSE;
}
-static CORBA_boolean
-impl_login_helper_set_safe (PortableServer_Servant servant,
- const CORBA_boolean safe,
- CORBA_Environment *ev)
+static DBusMessage *
+impl_set_safe (DBusConnection *bus, DBusMessage *message, void *user_data)
{
- LoginHelper *helper = LOGIN_HELPER (bonobo_object_from_servant (servant));
+ LoginHelper *helper = user_data;
- return login_helper_set_safe (helper, safe);
+ DBusError error;
+ dbus_bool_t safe;
+ dbus_bool_t rv;
+ DBusMessage *reply;
+
+ dbus_error_init (&error);
+ if (!dbus_message_get_args
+ (message, &error, DBUS_TYPE_BOOLEAN, &safe, DBUS_TYPE_INVALID))
+ {
+ return SPI_DBUS_RETURN_ERROR (message, &error);
+ }
+ rv = login_helper_set_safe (helper, safe);
+ reply = dbus_message_new_method_return (message);
+ if (reply)
+ {
+ dbus_message_append_args (reply, DBUS_TYPE_BOOLEAN, &rv, DBUS_TYPE_INVALID);
+ }
+ return reply;
}
-LoginHelperDeviceReqFlags
+static LoginHelperDeviceReqFlags
login_helper_get_device_reqs (LoginHelper *helper)
{
LoginHelperClass *klass = LOGIN_HELPER_GET_CLASS (helper);
return 0;
}
-static Accessibility_LoginHelper_DeviceReqList*
-impl_login_helper_get_device_reqs (PortableServer_Servant servant,
- CORBA_Environment *ev)
+static DBusMessage *
+impl_get_device_reqs (DBusConnection *bus, DBusMessage *message, void *user_data)
{
- LoginHelper *helper = LOGIN_HELPER (bonobo_object_from_servant (servant));
- LoginHelperDeviceReqFlags flags = 0;
- gint n_reqs = 0, i = 1, j = 1;
- Accessibility_LoginHelper_DeviceReqList *list;
+ LoginHelper *helper = user_data;
+ dbus_uint32_t flags = 0;
+ DBusMessage *reply;
flags = login_helper_get_device_reqs (helper);
- while (i <= LOGIN_HELPER_LAST_DEFINED)
- {
- if (flags & i) n_reqs++;
- i <<= 1;
- }
-
- list = Accessibility_LoginHelper_DeviceReqList__alloc ();
- list->_length = n_reqs;
- list->_buffer = Accessibility_LoginHelper_DeviceReqList_allocbuf (list->_length);
-
- for (i = 0, j = 1; i < n_reqs; i++)
- {
- Accessibility_LoginHelper_DeviceReq req;
- while ((flags & j) == 0) {
- j <<= 1;
- }
- switch (j)
- {
- case LOGIN_HELPER_GUI_EVENTS:
- req = Accessibility_LoginHelper_GUI_EVENTS;
- break;
- case LOGIN_HELPER_CORE_KEYBOARD:
- req = Accessibility_LoginHelper_CORE_KEYBOARD;
- break;
- case LOGIN_HELPER_CORE_POINTER:
- req = Accessibility_LoginHelper_CORE_POINTER;
- break;
- case LOGIN_HELPER_EXT_INPUT:
- req = Accessibility_LoginHelper_EXT_INPUT;
- break;
- case LOGIN_HELPER_POST_WINDOWS:
- req = Accessibility_LoginHelper_POST_WINDOWS;
- break;
- case LOGIN_HELPER_AUDIO_OUT:
- req = Accessibility_LoginHelper_AUDIO_OUT;
- break;
- case LOGIN_HELPER_AUDIO_IN:
- req = Accessibility_LoginHelper_AUDIO_IN;
- break;
- case LOGIN_HELPER_NETWORK:
- req = Accessibility_LoginHelper_NETWORK;
- break;
- case LOGIN_HELPER_LOCALHOST:
- req = Accessibility_LoginHelper_LOCALHOST;
- break;
- case LOGIN_HELPER_SERIAL_OUT:
- req = Accessibility_LoginHelper_SERIAL_OUT;
- break;
- case LOGIN_HELPER_SERIAL_IN:
- req = Accessibility_LoginHelper_SERIAL_IN;
- break;
- default:
- req = 0;
- break;
- }
- list->_buffer[i] = req;
- j <<= 1;
- }
-
- return list;
+ reply = dbus_message_new_method_return (message);
+ if (reply)
+ {
+ dbus_message_append_args (reply, DBUS_TYPE_UINT32, &flags, DBUS_TYPE_INVALID);
+ }
+ return reply;
}
-Window*
+static Window*
login_helper_get_raise_windows (LoginHelper *helper)
{
LoginHelperClass *klass = LOGIN_HELPER_GET_CLASS (helper);
return NULL;
}
-static Accessibility_LoginHelper_WindowList*
-impl_login_helper_get_raise_windows (PortableServer_Servant servant,
- CORBA_Environment *ev)
+static DBusMessage *
+impl_get_raise_windows (DBusConnection *bus, DBusMessage *message, void *user_data)
{
- LoginHelper *helper = LOGIN_HELPER (bonobo_object_from_servant (servant));
+ LoginHelper *helper = user_data;
unsigned long *wids;
- Accessibility_LoginHelper_WindowList *windows;
+ gint count = 0;
+ DBusMessage *reply;
+ DBusMessageIter iter, iter_array;
wids = login_helper_get_raise_windows (helper);
-
- if (wids && *wids)
- {
- gint i, count = 0;
- while (wids[count])
- {
- ++count;
- }
- windows = Accessibility_LoginHelper_WindowList__alloc ();
- windows->_length = count;
- windows->_buffer = Accessibility_LoginHelper_WindowList_allocbuf (windows->_length);
- for (i = 0; i < count; ++i)
- {
- Accessibility_LoginHelper_WindowInfo winfo;
- winfo.winID = wids[i];
- windows->_buffer [i] = winfo;
- }
- g_free (wids);
- return windows;
- }
- else
+ reply = dbus_message_new_method_return (message);
+ if (!reply) return NULL;
+ dbus_message_iter_init_append (message, &iter);
+ if (dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY, "i", &iter_array) && wids)
+ {
+ while (*wids)
{
- return NULL;
+ // TODO: figure out if this will break on 64-bit systems
+ dbus_int32_t id = *wids++;
+ dbus_message_iter_append_basic (&iter_array, DBUS_TYPE_INT32, &id);
}
+ dbus_message_iter_close_container (&iter, &iter_array);
+ }
+ if (wids) g_free (wids);
+ return reply;
}
static void
login_helper_class_init (LoginHelperClass *klass)
{
GObjectClass * object_class = (GObjectClass *) klass;
- POA_Accessibility_LoginHelper__epv *epv = &klass->epv;
- bonobo_object_parent_class = g_type_class_peek_parent (klass);
+ g_object_parent_class = g_type_class_peek_parent (klass);
object_class->finalize = login_helper_finalize;
- epv->getRaiseWindows = impl_login_helper_get_raise_windows;
- epv->getDeviceReqs = impl_login_helper_get_device_reqs;
- epv->setSafe = impl_login_helper_set_safe;
}
static void
-login_helper_init (GObject *object)
+login_helper_init (LoginHelper *object)
{
}
-BONOBO_TYPE_FUNC_FULL (LoginHelper,
- Accessibility_LoginHelper,
- PARENT_TYPE, login_helper)
+G_DEFINE_TYPE (LoginHelper,
+ login_helper,
+ PARENT_TYPE)