[PATCH 05/12] xf86Events: add Enable/DisableInputDeviceForVTSwitch functions

Hans de Goede hdegoede at redhat.com
Wed Jan 15 06:32:19 PST 2014


Factor this code out into functions so that it can be re-used for the
systemd-logind device pause/resume paths.

Signed-off-by: Hans de Goede <hdegoede at redhat.com>
---
 hw/xfree86/common/xf86.h       |  4 ++++
 hw/xfree86/common/xf86Events.c | 52 +++++++++++++++++++++++-------------------
 2 files changed, 32 insertions(+), 24 deletions(-)

diff --git a/hw/xfree86/common/xf86.h b/hw/xfree86/common/xf86.h
index 537d1d1..cec3135 100644
--- a/hw/xfree86/common/xf86.h
+++ b/hw/xfree86/common/xf86.h
@@ -215,6 +215,8 @@ extern _X_EXPORT xf86SetDGAModeProc xf86SetDGAMode;
 
 /* xf86Events.c */
 
+typedef struct _InputInfoRec *InputInfoPtr;
+
 extern _X_EXPORT void SetTimeSinceLastInputEvent(void);
 extern _X_EXPORT void *xf86AddInputHandler(int fd, InputHandlerProc proc,
                                              void *data);
@@ -236,6 +238,8 @@ extern _X_EXPORT void xf86PrintBacktrace(void);
 extern _X_EXPORT Bool xf86VTOwner(void);
 extern _X_EXPORT void xf86VTLeave(void);
 extern _X_EXPORT void xf86VTEnter(void);
+extern _X_EXPORT void xf86EnableInputDeviceForVTSwitch(InputInfoPtr pInfo);
+extern _X_EXPORT void xf86DisableInputDeviceForVTSwitch(InputInfoPtr pInfo);
 
 /* xf86Helper.c */
 
diff --git a/hw/xfree86/common/xf86Events.c b/hw/xfree86/common/xf86Events.c
index e0ec768..7b53949 100644
--- a/hw/xfree86/common/xf86Events.c
+++ b/hw/xfree86/common/xf86Events.c
@@ -408,6 +408,28 @@ xf86ReleaseKeys(DeviceIntPtr pDev)
 }
 
 void
+xf86DisableInputDeviceForVTSwitch(InputInfoPtr pInfo)
+{
+    if (!pInfo->dev)
+        return;
+
+    if (!pInfo->dev->enabled)
+        pInfo->flags |= XI86_DEVICE_DISABLED;
+
+    xf86ReleaseKeys(pInfo->dev);
+    ProcessInputEvents();
+    DisableDevice(pInfo->dev, TRUE);
+}
+
+void
+xf86EnableInputDeviceForVTSwitch(InputInfoPtr pInfo)
+{
+    if (pInfo->dev && (pInfo->flags & XI86_DEVICE_DISABLED) == 0)
+        EnableDevice(pInfo->dev, TRUE);
+    pInfo->flags &= ~XI86_DEVICE_DISABLED;
+}
+
+void
 xf86VTLeave(void)
 {
     int i;
@@ -436,15 +458,8 @@ xf86VTLeave(void)
         else
             xf86DisableGeneralHandler(ih);
     }
-    for (pInfo = xf86InputDevs; pInfo; pInfo = pInfo->next) {
-        if (pInfo->dev) {
-            if (!pInfo->dev->enabled)
-                pInfo->flags |= XI86_DEVICE_DISABLED;
-            xf86ReleaseKeys(pInfo->dev);
-            ProcessInputEvents();
-            DisableDevice(pInfo->dev, TRUE);
-        }
-    }
+    for (pInfo = xf86InputDevs; pInfo; pInfo = pInfo->next)
+        xf86DisableInputDeviceForVTSwitch(pInfo);
 
     OsBlockSIGIO();
     for (i = 0; i < xf86NumScreens; i++)
@@ -494,13 +509,8 @@ switch_failed:
     }
     dixSaveScreens(serverClient, SCREEN_SAVER_FORCER, ScreenSaverReset);
 
-    pInfo = xf86InputDevs;
-    while (pInfo) {
-        if (pInfo->dev && (pInfo->flags & XI86_DEVICE_DISABLED) == 0)
-            EnableDevice(pInfo->dev, TRUE);
-        pInfo->flags &= ~XI86_DEVICE_DISABLED;
-        pInfo = pInfo->next;
-    }
+    for (pInfo = xf86InputDevs; pInfo; pInfo = pInfo->next)
+        xf86EnableInputDeviceForVTSwitch(pInfo);
     for (ih = InputHandlers; ih; ih = ih->next) {
         if (ih->is_input)
             xf86EnableInputHandler(ih);
@@ -546,14 +556,8 @@ xf86VTEnter(void)
     /* Turn screen saver off when switching back */
     dixSaveScreens(serverClient, SCREEN_SAVER_FORCER, ScreenSaverReset);
 
-    pInfo = xf86InputDevs;
-    while (pInfo) {
-        if (pInfo->dev && (pInfo->flags & XI86_DEVICE_DISABLED) == 0)
-            EnableDevice(pInfo->dev, TRUE);
-        pInfo->flags &= ~XI86_DEVICE_DISABLED;
-        pInfo = pInfo->next;
-    }
-
+    for (pInfo = xf86InputDevs; pInfo; pInfo = pInfo->next)
+        xf86EnableInputDeviceForVTSwitch(pInfo);
     for (ih = InputHandlers; ih; ih = ih->next) {
         if (ih->is_input)
             xf86EnableInputHandler(ih);
-- 
1.8.4.2



More information about the xorg-devel mailing list