kdrive: add some new functions

Add definitions for the forward declarations from the previous commit

In preparation for adding the Xfbdev X11 kdrive server

Signed-off-by: stefan11111 <stefan11111@shitposting.expert>
This commit is contained in:
stefan11111
2025-07-06 01:08:10 +03:00
committed by Enrico Weigelt
parent 033cd4b2fe
commit 5f2d4da4ea
3 changed files with 122 additions and 1 deletions

View File

@@ -184,9 +184,65 @@ KdEnableScreen(ScreenPtr pScreen)
}
void
ddxGiveUp(enum ExitCode error)
KdResume(void)
{
KdCardInfo *card;
KdScreenInfo *screen;
if (kdEnabled) {
KdDoSwitchCmd("resume");
for (card = kdCardInfo; card; card = card->next) {
if (card->cfuncs->preserve)
(*card->cfuncs->preserve) (card);
for (screen = card->screenList; screen; screen = screen->next)
if (screen->mynum == card->selected && screen->pScreen)
KdEnableScreen(screen->pScreen);
}
KdEnableInput();
KdReleaseAllKeys();
}
}
void
KdEnableScreens(void)
{
if (!kdEnabled) {
kdEnabled = TRUE;
if (kdOsFuncs->Enable)
(*kdOsFuncs->Enable) ();
}
KdResume();
}
void
KdProcessSwitch(void)
{
if (kdEnabled)
KdDisableScreens();
else
KdEnableScreens();
}
static void
AbortDDX(enum ExitCode error)
{
KdDisableScreens();
if (kdOsFuncs) {
if (kdEnabled && kdOsFuncs->Disable)
(*kdOsFuncs->Disable) ();
if (kdOsFuncs->Fini)
(*kdOsFuncs->Fini) ();
KdDoSwitchCmd("stop");
}
if (kdCaughtSignal)
OsAbort();
}
void
ddxGiveUp(enum ExitCode error)
{
AbortDDX(error);
}
Bool kdDumbDriver;
@@ -939,6 +995,20 @@ KdAddScreen(ScreenInfo * pScreenInfo,
AddScreen(KdScreenInit, argc, argv);
}
#if 0 /* This function is not used currently */
int
KdDepthToFb(ScreenPtr pScreen, int depth)
{
KdScreenPriv(pScreen);
for (fb = 0; fb <= KD_MAX_FB && pScreenPriv->screen->fb.frameBuffer; fb++)
if (pScreenPriv->screen->fb.depth == depth)
return fb;
}
#endif
void
KdInitOutput(ScreenInfo * pScreenInfo, int argc, char **argv)
{

View File

@@ -399,6 +399,8 @@ Bool
void
KdEnableScreens(void);
void KdResume(void);
void
KdProcessSwitch(void);
@@ -501,6 +503,8 @@ KdEnqueuePointerEvent(KdPointerInfo * pi, unsigned long flags, int rx, int ry,
void _KdEnqueuePointerEvent(KdPointerInfo * pi, int type, int x, int y, int z,
int b, int absrel, Bool force);
void KdReleaseAllKeys(void);
void KdSetLed(KdKeyboardInfo * ki, int led, Bool on);
void
@@ -510,6 +514,8 @@ void
KdComputePointerMatrix(KdPointerMatrix *pointer, Rotation randr, int width,
int height);
void KdScreenToPointerCoords(int *x, int *y);
void
KdBlockHandler(ScreenPtr pScreen, void *timeout);

View File

@@ -154,6 +154,7 @@ static void KdAddFd(int fd, int i)
KdNonBlockFd(fd);
InputThreadRegisterDev(fd, KdNotifyFd, (void *) (intptr_t) i);
#ifdef KDRIVE_KBD
/* AddEnabledDevice(fd); */
memset(&act, '\0', sizeof act);
act.sa_handler = KdSigio;
@@ -592,6 +593,20 @@ KdComputePointerMatrix(KdPointerMatrix * m, Rotation randr, int width,
}
}
void
KdScreenToPointerCoords(int *x, int *y)
{
int (*m)[3] = kdPointerMatrix.matrix;
int div = m[0][1] * m[1][0] - m[1][1] * m[0][0];
int sx = *x;
int sy = *y;
*x = (m[0][1] * sy - m[0][1] * m[1][2] + m[1][1] * m[0][2] -
m[1][1] * sx) / div;
*y = (m[1][0] * sx + m[0][0] * m[1][2] - m[1][0] * m[0][2] -
m[0][0] * sy) / div;
}
static void
KdKbdCtrl(DeviceIntPtr pDevice, KeybdCtrl * ctrl)
{
@@ -1740,6 +1755,36 @@ KdReceiveTimeout(KdPointerInfo * pi)
KdRunMouseMachine(pi, timeout, 0, 0, 0, 0, 0, 0);
}
void
KdReleaseAllKeys(void)
{
#if 0
int key;
KdKeyboardInfo *ki;
#ifndef KDRIVE_KBD
input_lock();
#else
KdBlockSigio();
#endif
for (ki = kdKeyboards; ki; ki = ki->next) {
for (key = ki->keySyms.minKeyCode; key < ki->keySyms.maxKeyCode; key++) {
if (key_is_down(ki->dixdev, key, KEY_POSTED | KEY_PROCESSED)) {
KdHandleKeyboardEvent(ki, KeyRelease, key);
QueueGetKeyboardEvents(ki->dixdev, KeyRelease, key, NULL);
}
}
}
#ifndef KDRIVE_KBD
input_unlock();
#else
KdUnblockSigio();
#endif
#endif
}
static void
KdCheckLock(void)
{