int xf86layoutAddInputDevices(XF86ConfigPtr config, XF86ConfLayoutPtr layout) { int count = 0; XF86ConfInputPtr input = config->conf_input_lst; XF86ConfInputrefPtr inptr; /* add all AutoServerLayout devices to the server layout */ while (input) { if (xf86CheckBoolOption(input->inp_option_lst, "AutoServerLayout", FALSE)) { XF86ConfInputrefPtr iref = layout->lay_input_lst; /* avoid duplicates if referenced but lists AutoServerLayout too */ while (iref) { if (strcmp(iref->iref_inputdev_str, input->inp_identifier) == 0) break; iref = iref->list.next; } if (!iref) { XF86ConfInputrefPtr iptr; iptr = calloc(1, sizeof(XF86ConfInputrefRec)); iptr->iref_inputdev_str = input->inp_identifier; layout->lay_input_lst = (XF86ConfInputrefPtr) xf86addListItem((glp)layout->lay_input_lst, (glp)iptr); count++; } } input = input->list.next; } inptr = layout->lay_input_lst; while (inptr) { input = xf86findInput (inptr->iref_inputdev_str, config->conf_input_lst); if (!input) { xf86validationError (UNDEFINED_INPUT_MSG, inptr->iref_inputdev_str, layout->lay_identifier); return -1; } else inptr->iref_inputdev = input; inptr = inptr->list.next; } return count; }
int xf86validateLayout (XF86ConfigPtr p) { XF86ConfLayoutPtr layout = p->conf_layout_lst; XF86ConfAdjacencyPtr adj; XF86ConfInactivePtr iptr; XF86ConfInputrefPtr inptr; XF86ConfScreenPtr screen; XF86ConfDevicePtr device; XF86ConfInputPtr input; while (layout) { adj = layout->lay_adjacency_lst; while (adj) { /* the first one can't be "" but all others can */ screen = xf86findScreen (adj->adj_screen_str, p->conf_screen_lst); if (!screen) { xf86validationError (UNDEFINED_SCREEN_MSG, adj->adj_screen_str, layout->lay_identifier); return (FALSE); } else adj->adj_screen = screen; #if 0 CheckScreen (adj->adj_top_str, adj->adj_top); CheckScreen (adj->adj_bottom_str, adj->adj_bottom); CheckScreen (adj->adj_left_str, adj->adj_left); CheckScreen (adj->adj_right_str, adj->adj_right); #endif adj = adj->list.next; } iptr = layout->lay_inactive_lst; while (iptr) { device = xf86findDevice (iptr->inactive_device_str, p->conf_device_lst); if (!device) { xf86validationError (UNDEFINED_DEVICE_LAY_MSG, iptr->inactive_device_str, layout->lay_identifier); return (FALSE); } else iptr->inactive_device = device; iptr = iptr->list.next; } inptr = layout->lay_input_lst; while (inptr) { input = xf86findInput (inptr->iref_inputdev_str, p->conf_input_lst); if (!input) { xf86validationError (UNDEFINED_INPUT_MSG, inptr->iref_inputdev_str, layout->lay_identifier); return (FALSE); } else inptr->iref_inputdev = input; inptr = inptr->list.next; } layout = layout->list.next; } return (TRUE); }
/*ARGSUSED*/ XtPointer MouseConfig(XtPointer config) { XF86ConfInputPtr mouse = (XF86ConfInputPtr)config; XF86OptionPtr option; char mouse_name[32]; Arg args[1]; static char *Device = "Device", *Protocol = "Protocol", *Emulate3Buttons = "Emulate3Buttons", *Emulate3Timeout = "Emulate3Timeout"; current_input = mouse; if (mouse != NULL) { emulate = xf86findOption(mouse->inp_option_lst, Emulate3Buttons) != NULL; if ((option = xf86findOption(mouse->inp_option_lst, Device)) != NULL) device = option->opt_val; else device = NULL; if ((option = xf86findOption(mouse->inp_option_lst, Protocol)) != NULL) protocol = option->opt_val; else protocol = NULL; XtSetArg(args[0], XtNstring, mouse->inp_identifier); XtSetValues(ident_widget, args, 1); } else { XF86ConfInputPtr input = XF86Config->conf_input_lst; int nmouses = 0; while (input != NULL) { if (strcasecmp(input->inp_driver, "mouse") == 0) ++nmouses; input = (XF86ConfInputPtr)(input->list.next); } do { XmuSnprintf(mouse_name, sizeof(mouse_name), "Mouse%d", nmouses); ++nmouses; } while (xf86findInput(mouse_name, XF86Config->conf_input_lst)); XtSetArg(args[0], XtNstring, mouse_name); XtSetValues(ident_widget, args, 1); emulate = True; device = NULL; protocol = NULL; } xf86info.cur_list = MOUSE; XtSetSensitive(back, xf86info.lists[MOUSE].cur_function > 0); XtSetSensitive(next, xf86info.lists[MOUSE].cur_function < xf86info.lists[MOUSE].num_functions - 1); (xf86info.lists[MOUSE].functions[xf86info.lists[MOUSE].cur_function]) (&xf86info); if (ConfigLoop(MouseConfigCheck) == True) { XtSetArg(args[0], XtNstring, &device); XtGetValues(text, args, 1); if (mouse == NULL) { mouse = XtNew(XF86ConfInputRec); mouse->list.next = NULL; mouse->inp_identifier = XtNewString(ident_string); mouse->inp_driver = XtNewString("mouse"); mouse->inp_option_lst = xf86newOption(XtNewString(Device), XtNewString(device)); xf86addNewOption(mouse->inp_option_lst, XtNewString(Protocol), XtNewString(protocol)); if (emulate) { xf86addNewOption(mouse->inp_option_lst, XtNewString(Emulate3Buttons), NULL); xf86addNewOption(mouse->inp_option_lst, XtNewString(Emulate3Timeout), XtNewString("50")); } mouse->inp_comment = NULL; } else { if ((option = xf86findOption(mouse->inp_option_lst, Device)) != NULL) { XtFree(option->opt_val); option->opt_val = XtNewString(device); XtFree(option->opt_comment); } else { if (mouse->inp_option_lst == NULL) mouse->inp_option_lst = xf86newOption(XtNewString(Device), XtNewString(device)); else xf86addNewOption(mouse->inp_option_lst, XtNewString(Device), XtNewString(device)); } if ((option = xf86findOption(mouse->inp_option_lst, Protocol)) != NULL) { XtFree(option->opt_val); option->opt_val = XtNewString(protocol); XtFree(option->opt_comment); } else xf86addNewOption(mouse->inp_option_lst, XtNewString(Protocol), XtNewString(protocol)); if (emulate == False) { xf86removeOption(&(mouse->inp_option_lst), Emulate3Buttons); xf86removeOption(&(mouse->inp_option_lst), Emulate3Timeout); } else if (emulate) { xf86addNewOption(mouse->inp_option_lst, XtNewString(Emulate3Buttons), NULL); xf86addNewOption(mouse->inp_option_lst, XtNewString(Emulate3Timeout), XtNewString("50")); } } if (strcasecmp(mouse->inp_identifier, ident_string)) xf86renameInput(XF86Config, mouse, ident_string); return ((XtPointer)mouse); } return (NULL); }