summaryrefslogtreecommitdiff
path: root/hw/xfree86/parser
diff options
context:
space:
mode:
authorOleg Samarin <osamarin68@gmail.com>2014-04-03 11:19:14 -0300
committerPeter Hutterer <peter.hutterer@who-t.net>2014-05-01 08:19:19 +1000
commit7070ebeebaca1b51f8a2801989120784a1c374ae (patch)
tree52d35f290295cd4fa9317272ca2f7eb070649239 /hw/xfree86/parser
parent29b1484bb9555e45067669cbfe68a3c40596f4ff (diff)
xfree86: add new key MatchSeat to xorg.conf sections "Device", "Screen", and "ServerLayout"
This patch introduces a new key MatchSeat in xorg.conf (also applies to any .conf file in xorg.conf.d). It will allow targeting a given "Device", "Screen", and/or "ServerLayout" section to a particular seat only (specified by option "-seat" in X server command line), so that other seats won't be affected. Without this patch, one needs to write a separate xorg.conf.custom file and pass it to X server via "-config" option, if one wants that these settings only apply for the right seat. However, in some cases, this solution is undesirable or even impossible (e.g. when using GDM, which doesn't allow X server command line customization). Example file (/etc/X11/xorg.conf.d/seat1.conf), which would be ignored by X server unless it was started with "-seat seat1" option: Section "Device" Identifier "card0" Driver "nvidia" Option "NoLogo" "True" MatchSeat "seat1" EndSection Signed-off-by: Oleg Samarin <osamarin68@gmail.com> Signed-off-by: LaƩrcio de Sousa <lbsousajr@gmail.com> Reviewed-by: Dave Airlie <airlied@redhat.com> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Diffstat (limited to 'hw/xfree86/parser')
-rw-r--r--hw/xfree86/parser/Device.c6
-rw-r--r--hw/xfree86/parser/Layout.c6
-rw-r--r--hw/xfree86/parser/Screen.c6
-rw-r--r--hw/xfree86/parser/xf86Parser.h3
-rw-r--r--hw/xfree86/parser/xf86tokens.h1
5 files changed, 22 insertions, 0 deletions
diff --git a/hw/xfree86/parser/Device.c b/hw/xfree86/parser/Device.c
index 073171f22..d3ac29351 100644
--- a/hw/xfree86/parser/Device.c
+++ b/hw/xfree86/parser/Device.c
@@ -71,6 +71,7 @@ xf86ConfigSymTabRec DeviceTab[] = {
{RAMDAC, "ramdac"},
{DACSPEED, "dacspeed"},
{CLOCKS, "clocks"},
+ {MATCHSEAT, "matchseat"},
{OPTION, "option"},
{VIDEORAM, "videoram"},
{BIOSBASE, "biosbase"},
@@ -216,6 +217,11 @@ xf86parseDeviceSection(void)
Error(NUMBER_MSG, "TextClockFreq");
ptr->dev_textclockfreq = (int) (xf86_lex_val.realnum * 1000.0 + 0.5);
break;
+ case MATCHSEAT:
+ if (xf86getSubToken(&(ptr->dev_comment)) != STRING)
+ Error(QUOTE_MSG, "MatchSeat");
+ ptr->match_seat = xf86_lex_val.str;
+ break;
case OPTION:
ptr->dev_option_lst = xf86parseOption(ptr->dev_option_lst);
break;
diff --git a/hw/xfree86/parser/Layout.c b/hw/xfree86/parser/Layout.c
index 7be746f04..994b31ae4 100644
--- a/hw/xfree86/parser/Layout.c
+++ b/hw/xfree86/parser/Layout.c
@@ -70,6 +70,7 @@ static xf86ConfigSymTabRec LayoutTab[] = {
{ENDSECTION, "endsection"},
{SCREEN, "screen"},
{IDENTIFIER, "identifier"},
+ {MATCHSEAT, "matchseat"},
{INACTIVE, "inactive"},
{INPUTDEVICE, "inputdevice"},
{OPTION, "option"},
@@ -109,6 +110,11 @@ xf86parseLayoutSection(void)
ptr->lay_identifier = xf86_lex_val.str;
has_ident = TRUE;
break;
+ case MATCHSEAT:
+ if (xf86getSubToken(&(ptr->lay_comment)) != STRING)
+ Error(QUOTE_MSG, "MatchSeat");
+ ptr->match_seat = xf86_lex_val.str;
+ break;
case INACTIVE:
{
XF86ConfInactivePtr iptr;
diff --git a/hw/xfree86/parser/Screen.c b/hw/xfree86/parser/Screen.c
index fecd57c0c..0e9746ae5 100644
--- a/hw/xfree86/parser/Screen.c
+++ b/hw/xfree86/parser/Screen.c
@@ -198,6 +198,7 @@ xf86parseDisplaySubSection(void)
static xf86ConfigSymTabRec ScreenTab[] = {
{ENDSECTION, "endsection"},
{IDENTIFIER, "identifier"},
+ {MATCHSEAT, "matchseat"},
{OBSDRIVER, "driver"},
{MDEVICE, "device"},
{MONITOR, "monitor"},
@@ -236,6 +237,11 @@ xf86parseScreenSection(void)
Error(ONLY_ONE_MSG, "Identifier or Driver");
has_ident = TRUE;
break;
+ case MATCHSEAT:
+ if (xf86getSubToken(&(ptr->scrn_comment)) != STRING)
+ Error(QUOTE_MSG, "MatchSeat");
+ ptr->match_seat = xf86_lex_val.str;
+ break;
case OBSDRIVER:
if (xf86getSubToken(&(ptr->scrn_comment)) != STRING)
Error(QUOTE_MSG, "Driver");
diff --git a/hw/xfree86/parser/xf86Parser.h b/hw/xfree86/parser/xf86Parser.h
index 8f855ac09..c95423a1f 100644
--- a/hw/xfree86/parser/xf86Parser.h
+++ b/hw/xfree86/parser/xf86Parser.h
@@ -224,6 +224,7 @@ typedef struct {
int dev_screen;
XF86OptionPtr dev_option_lst;
char *dev_comment;
+ char *match_seat;
} XF86ConfDeviceRec, *XF86ConfDevicePtr;
typedef struct {
@@ -275,6 +276,7 @@ typedef struct {
XF86OptionPtr scrn_option_lst;
char *scrn_comment;
int scrn_virtualX, scrn_virtualY;
+ char *match_seat;
} XF86ConfScreenRec, *XF86ConfScreenPtr;
typedef struct {
@@ -366,6 +368,7 @@ typedef struct {
XF86ConfInactivePtr lay_inactive_lst;
XF86ConfInputrefPtr lay_input_lst;
XF86OptionPtr lay_option_lst;
+ char *match_seat;
char *lay_comment;
} XF86ConfLayoutRec, *XF86ConfLayoutPtr;
diff --git a/hw/xfree86/parser/xf86tokens.h b/hw/xfree86/parser/xf86tokens.h
index f751b7b0e..5c01ce701 100644
--- a/hw/xfree86/parser/xf86tokens.h
+++ b/hw/xfree86/parser/xf86tokens.h
@@ -87,6 +87,7 @@ typedef enum {
VENDOR,
DASH,
COMMA,
+ MATCHSEAT,
OPTION,
COMMENT,