+#include <lib/gdi/gfbdc.h>
+#include <lib/gdi/glcddc.h>
+#include <lib/gdi/grc.h>
+#ifdef WITH_SDL
+#include <lib/gdi/sdl.h>
+#endif
+#include <lib/gdi/epng.h>
+#include <lib/gdi/font.h>
+#include <lib/gui/ebutton.h>
+#include <lib/gui/elabel.h>
+#include <lib/gui/elistboxcontent.h>
+#include <lib/gui/ewidget.h>
+#include <lib/gui/ewidgetdesktop.h>
+#include <lib/gui/ewindow.h>
+#include <lib/python/connections.h>
+#include <lib/python/python.h>
+
+#include "bsod.h"
+
+#ifdef HAVE_GSTREAMER
+#include <gst/gst.h>
+#endif
+
+#ifdef OBJECT_DEBUG
+int object_total_remaining;
+
+void object_dump()
+{
+ printf("%d items left\n", object_total_remaining);
+}
+#endif
+
+static eWidgetDesktop *wdsk, *lcddsk;
+
+static int prev_ascii_code;
+
+int getPrevAsciiCode()
+{
+ int ret = prev_ascii_code;
+ prev_ascii_code = 0;
+ return ret;
+}
+
+void keyEvent(const eRCKey &key)
+{
+ static eRCKey last(0, 0, 0);
+ static int num_repeat;
+
+ ePtr<eActionMap> ptr;
+ eActionMap::getInstance(ptr);
+
+ if ((key.code == last.code) && (key.producer == last.producer) && key.flags & eRCKey::flagRepeat)
+ num_repeat++;
+ else
+ {
+ num_repeat = 0;
+ last = key;
+ }
+
+ if (num_repeat == 4)
+ {
+ ptr->keyPressed(key.producer->getIdentifier(), key.code, eRCKey::flagLong);
+ num_repeat++;
+ }
+
+ if (key.flags & eRCKey::flagAscii)
+ {
+ prev_ascii_code = key.code;
+ ptr->keyPressed(key.producer->getIdentifier(), 510 /* faked KEY_ASCII */, 0);
+ }
+ else
+ ptr->keyPressed(key.producer->getIdentifier(), key.code, key.flags);
+}