summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2003-09-24 21:07:06 +0000
committerKeith Packard <keithp@keithp.com>2003-09-24 21:07:06 +0000
commit918a8273eeabcb14fc82742cc68223d8a7c2a67a (patch)
treee936dd549cae0cce6fd3622ffd87d8213fe9ff60
parent20bbd750d0d359e55cbdcc86aeea6013ac665bce (diff)
hw/kdrive/src/kdrive.c
hw/kdrive/src/kdrive.h Add -switchCmd option to set command that is executed whenever the VT is enabled or disabled. This permits input device to be customized by external apps when switching to X.
-rw-r--r--hw/kdrive/src/kdrive.c37
-rw-r--r--hw/kdrive/src/kdrive.h1
2 files changed, 36 insertions, 2 deletions
diff --git a/hw/kdrive/src/kdrive.c b/hw/kdrive/src/kdrive.c
index d3bdc92c5..ab75db7f4 100644
--- a/hw/kdrive/src/kdrive.c
+++ b/hw/kdrive/src/kdrive.c
@@ -59,6 +59,7 @@ Bool kdEnabled;
int kdSubpixelOrder;
int kdVirtualTerminal = -1;
Bool kdSwitchPending;
+char *kdSwitchCmd;
DDXPointRec kdOrigin;
/*
@@ -224,6 +225,25 @@ KdDisableScreen (ScreenPtr pScreen)
}
void
+KdDoSwitchCmd (char *reason)
+{
+ if (kdSwitchCmd)
+ {
+ char *command = xalloc (strlen (kdSwitchCmd) +
+ 1 +
+ strlen (reason) +
+ 1);
+ if (!command)
+ return;
+ strcpy (command, kdSwitchCmd);
+ strcat (command, " ");
+ strcat (command, reason);
+ system (command);
+ xfree (command);
+ }
+}
+
+void
KdSuspend (void)
{
KdCardInfo *card;
@@ -240,6 +260,7 @@ KdSuspend (void)
(*card->cfuncs->restore) (card);
}
KdDisableInput ();
+ KdDoSwitchCmd ("suspend");
}
}
@@ -284,6 +305,7 @@ KdResume (void)
if (kdEnabled)
{
+ KdDoSwitchCmd ("resume");
for (card = kdCardInfo; card; card = card->next)
{
(*card->cfuncs->preserve) (card);
@@ -316,9 +338,7 @@ KdProcessSwitch (void)
if (kdEnabled)
KdDisableScreens ();
else
- {
KdEnableScreens ();
- }
}
void
@@ -330,6 +350,7 @@ AbortDDX(void)
if (kdEnabled)
(*kdOsFuncs->Disable) ();
(*kdOsFuncs->Fini) ();
+ KdDoSwitchCmd ("stop");
}
}
@@ -348,6 +369,7 @@ ddxUseMsg()
ErrorF("-videoTest Start the server, pause momentarily and exit\n");
ErrorF("-origin X,Y Locates the next screen in the the virtual screen (Xinerama)\n");
ErrorF("-mouse path[,n] Filename of mouse device, n is number of buttons\n");
+ ErrorF("-switchCmd Command to execute on vt switch\n");
ErrorF("vtxx Use virtual terminal xx instead of the next available\n");
ErrorF("\n");
}
@@ -755,6 +777,14 @@ KdProcessArgument (int argc, char **argv, int i)
UseMsg ();
return 2;
}
+ if (!strcmp (argv[i], "-switchCmd"))
+ {
+ if ((i+1) < argc)
+ kdSwitchCmd = argv[i+1];
+ else
+ UseMsg ();
+ return 2;
+ }
if (!strncmp (argv[i], "vt", 2) &&
sscanf (argv[i], "vt%2d", &kdVirtualTerminal) == 1)
{
@@ -779,7 +809,10 @@ KdOsInit (KdOsFuncs *pOsFuncs)
if (pOsFuncs)
{
if (serverGeneration == 1)
+ {
+ KdDoSwitchCmd ("start");
(*pOsFuncs->Init) ();
+ }
}
}
diff --git a/hw/kdrive/src/kdrive.h b/hw/kdrive/src/kdrive.h
index ec6cc3f5b..481a1e0f6 100644
--- a/hw/kdrive/src/kdrive.h
+++ b/hw/kdrive/src/kdrive.h
@@ -321,6 +321,7 @@ extern Bool kdSwitchPending;
extern Bool kdEmulateMiddleButton;
extern Bool kdDisableZaphod;
extern int kdVirtualTerminal;
+extern char *kdSwitchCmd;
extern KdOsFuncs *kdOsFuncs;
#define KdGetScreenPriv(pScreen) ((KdPrivScreenPtr) \