Hi! An updated version of this patch was submitted last week. Please consider it instead.
http://lists.x.org/archives/xorg-devel/2014-April/041690.html CANTATE DOMINO CANTICUM NOVUM QUIA MIRABILIA FECIT Laércio 2014-04-07 10:09 GMT-03:00 Floris <jkflo...@dds.nl>: > This patch is made by Oleg Samarin and was already mailed in September 2013 > (http://lists.x.org/archives/xorg-devel/2013-September/037946.html) > I hope someone can apply this patch or give me a reason why it isn't. > > Thanks, > > jkfloris > > Added capability of specifying "MatchSeat" option in the ServerLayout, the > Device and the Screen sections for selecting default sections for the seat > --- > hw/xfree86/common/xf86Bus.c | 4 ++-- > hw/xfree86/common/xf86Config.c | 33 +++++++++++++++++++++++++-------- > hw/xfree86/parser/Device.c | 6 ++++++ > hw/xfree86/parser/Layout.c | 6 ++++++ > hw/xfree86/parser/Screen.c | 6 ++++++ > hw/xfree86/parser/xf86Parser.h | 3 +++ > hw/xfree86/parser/xf86tokens.h | 1 + > 7 files changed, 49 insertions(+), 10 deletions(-) > > diff --git a/hw/xfree86/common/xf86Bus.c b/hw/xfree86/common/xf86Bus.c > index e101537..91af72f 100644 > --- a/hw/xfree86/common/xf86Bus.c > +++ b/hw/xfree86/common/xf86Bus.c > @@ -81,7 +81,7 @@ xf86CallDriverProbe(DriverPtr drv, Bool detect_only) > if (drv->platformProbe != NULL) { > foundScreen = xf86platformProbeDev(drv); > } > - if (ServerIsNotSeat0()) > + if (ServerIsNotSeat0() && foundScreen) > return foundScreen; > #endif > > @@ -201,7 +201,7 @@ xf86BusProbe(void) > { > #ifdef XSERVER_PLATFORM_BUS > xf86platformProbe(); > - if (ServerIsNotSeat0()) > + if (ServerIsNotSeat0() && xf86_num_platform_devices > 0) > return; > #endif > #ifdef XSERVER_LIBPCIACCESS > diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/ > xf86Config.c > index 74d5ed3..9ed8b02 100644 > --- a/hw/xfree86/common/xf86Config.c > +++ b/hw/xfree86/common/xf86Config.c > @@ -232,6 +232,17 @@ xf86ValidateFontPath(char *path) > return tmp_path; > } > > +#define FIND_SUITABLE(pointertype, listhead, ptr) > \ > + { > \ > + pointertype l, p; > \ > + > \ > + for (l = listhead, p = NULL; !p && l; l = (pointertype) > l->list.next) { \ > + if (! l->match_seat || SeatId && > xf86nameCompare(l->match_seat, SeatId) == 0) \ > + p = l; > \ > + } > \ > + ptr = p; > \ > + } > + > /* > * use the datastructure that the parser provides and pick out the parts > * that we need at this point > @@ -1578,8 +1589,11 @@ configLayout(serverLayoutPtr servlayoutp, > XF86ConfLayoutPtr conf_layout, > * config file, or - if it is NULL - configScreen autogenerates one > for > * us */ > if (!count) { > + XF86ConfScreenPtr screen; > + > + FIND_SUITABLE (XF86ConfScreenPtr, xf86configptr->conf_screen_lst, > screen); > slp[0].screen = xnfcalloc(1, sizeof(confScreenRec)); > - if (!configScreen(slp[0].screen, xf86configptr->conf_screen_lst, > + if (!configScreen(slp[0].screen, screen, > 0, X_CONFIG)) { > free(slp[0].screen); > free(slp); > @@ -1819,7 +1833,7 @@ configScreen(confScreenPtr screenp, > XF86ConfScreenPtr conf_screen, int scrnum, > * set it to NULL so that the section can be autoconfigured later */ > screenp->device = xnfcalloc(1, sizeof(GDevRec)); > if ((!conf_screen->scrn_device) && (xf86configptr->conf_device_lst)) > { > - conf_screen->scrn_device = xf86configptr->conf_device_lst; > + FIND_SUITABLE (XF86ConfDevicePtr, xf86configptr->conf_device_lst, > conf_screen->scrn_device); > xf86Msg(X_DEFAULT, "No device specified for screen \"%s\".\n" > "\tUsing the first device section listed.\n", > screenp->id); > } > @@ -2429,12 +2443,15 @@ xf86HandleConfigFile(Bool autoconfig) > /* First check if a layout section is present, and if it is valid. */ > > if (xf86configptr->conf_layout_lst == NULL || xf86ScreenName != > NULL) { > + XF86ConfScreenPtr screen; > + > if (xf86ScreenName == NULL) { > xf86Msg(X_DEFAULT, > "No Layout section. Using the first Screen > section.\n"); > } > + FIND_SUITABLE (XF86ConfScreenPtr, xf86configptr->conf_screen_lst, > screen); > if (!configImpliedLayout(&xf86ConfigLayout, > - xf86configptr->conf_screen_lst, > + screen, > xf86configptr)) { > xf86Msg(X_ERROR, "Unable to determine the screen layout\n"); > return CONFIG_PARSE_ERROR; > @@ -2442,6 +2459,9 @@ xf86HandleConfigFile(Bool autoconfig) > implicit_layout = TRUE; > } > else { > + XF86ConfLayoutPtr layout; > + > + FIND_SUITABLE(XF86ConfLayoutPtr, xf86configptr->conf_layout_lst, > layout); > if (xf86configptr->conf_flags != NULL) { > char *dfltlayout = NULL; > pointer optlist = xf86configptr->conf_flags->flg_option_lst; > @@ -2449,16 +2469,13 @@ xf86HandleConfigFile(Bool autoconfig) > if (optlist && xf86FindOption(optlist, "defaultserverlayout")) > dfltlayout = > xf86SetStrOption(optlist, "defaultserverlayout", > NULL); > - if (!configLayout > - (&xf86ConfigLayout, xf86configptr->conf_layout_lst, > - dfltlayout)) { > + if (!configLayout(&xf86ConfigLayout, layout, dfltlayout)) { > xf86Msg(X_ERROR, "Unable to determine the screen > layout\n"); > return CONFIG_PARSE_ERROR; > } > } > else { > - if (!configLayout(&xf86ConfigLayout, > xf86configptr->conf_layout_lst, > - NULL)) { > + if (!configLayout(&xf86ConfigLayout, layout, NULL)) { > xf86Msg(X_ERROR, "Unable to determine the screen > layout\n"); > return CONFIG_PARSE_ERROR; > } > diff --git a/hw/xfree86/parser/Device.c b/hw/xfree86/parser/Device.c > index bb1ba88..1f7ffdb 100644 > --- a/hw/xfree86/parser/Device.c > +++ b/hw/xfree86/parser/Device.c > @@ -72,6 +72,7 @@ xf86ConfigSymTabRec DeviceTab[] = { > {RAMDAC, "ramdac"}, > {DACSPEED, "dacspeed"}, > {CLOCKS, "clocks"}, > + {MATCHSEAT, "matchseat"}, > {OPTION, "option"}, > {VIDEORAM, "videoram"}, > {BIOSBASE, "biosbase"}, > @@ -217,6 +218,11 @@ xf86parseDeviceSection(void) > Error(NUMBER_MSG, "TextClockFreq"); > ptr->dev_textclockfreq = (int) (val.realnum * 1000.0 + 0.5); > break; > + case MATCHSEAT: > + if (xf86getSubToken(&(ptr->dev_comment)) != STRING) > + Error(QUOTE_MSG, "MatchSeat"); > + ptr->match_seat = 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 cbd8d24..e838a7c 100644 > --- a/hw/xfree86/parser/Layout.c > +++ b/hw/xfree86/parser/Layout.c > @@ -71,6 +71,7 @@ static xf86ConfigSymTabRec LayoutTab[] = { > {ENDSECTION, "endsection"}, > {SCREEN, "screen"}, > {IDENTIFIER, "identifier"}, > + {MATCHSEAT, "matchseat"}, > {INACTIVE, "inactive"}, > {INPUTDEVICE, "inputdevice"}, > {OPTION, "option"}, > @@ -110,6 +111,11 @@ xf86parseLayoutSection(void) > ptr->lay_identifier = val.str; > has_ident = TRUE; > break; > + case MATCHSEAT: > + if (xf86getSubToken(&(ptr->lay_comment)) != STRING) > + Error(QUOTE_MSG, "MatchSeat"); > + ptr->match_seat = val.str; > + break; > case INACTIVE: > { > XF86ConfInactivePtr iptr; > diff --git a/hw/xfree86/parser/Screen.c b/hw/xfree86/parser/Screen.c > index f294ec4..009c4e9 100644 > --- a/hw/xfree86/parser/Screen.c > +++ b/hw/xfree86/parser/Screen.c > @@ -199,6 +199,7 @@ xf86parseDisplaySubSection(void) > static xf86ConfigSymTabRec ScreenTab[] = { > {ENDSECTION, "endsection"}, > {IDENTIFIER, "identifier"}, > + {MATCHSEAT, "matchseat"}, > {OBSDRIVER, "driver"}, > {MDEVICE, "device"}, > {MONITOR, "monitor"}, > @@ -237,6 +238,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 = 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 e7210e8..bb41c99 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 f751b7b..5c01ce7 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, > > -- > 1.8.3.1 > > _______________________________________________ > xorg-devel@lists.x.org: X.Org development > Archives: http://lists.x.org/archives/xorg-devel > Info: http://lists.x.org/mailman/listinfo/xorg-devel >
_______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel