xserver

xserver with xephyr scale patch
git clone https://git.neptards.moe/u3shit/xserver.git
Log | Files | Refs | README | LICENSE

kinfo.c (3671B)


      1 /*
      2  * Copyright © 1999 Keith Packard
      3  *
      4  * Permission to use, copy, modify, distribute, and sell this software and its
      5  * documentation for any purpose is hereby granted without fee, provided that
      6  * the above copyright notice appear in all copies and that both that
      7  * copyright notice and this permission notice appear in supporting
      8  * documentation, and that the name of Keith Packard not be used in
      9  * advertising or publicity pertaining to distribution of the software without
     10  * specific, written prior permission.  Keith Packard makes no
     11  * representations about the suitability of this software for any purpose.  It
     12  * is provided "as is" without express or implied warranty.
     13  *
     14  * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
     15  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
     16  * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
     17  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
     18  * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
     19  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
     20  * PERFORMANCE OF THIS SOFTWARE.
     21  */
     22 
     23 #ifdef HAVE_DIX_CONFIG_H
     24 #include <dix-config.h>
     25 #endif
     26 #include "kdrive.h"
     27 
     28 KdCardInfo *kdCardInfo;
     29 
     30 KdCardInfo *
     31 KdCardInfoAdd(KdCardFuncs * funcs, void *closure)
     32 {
     33     KdCardInfo *ci, **prev;
     34 
     35     ci = calloc(1, sizeof(KdCardInfo));
     36     if (!ci)
     37         return 0;
     38     for (prev = &kdCardInfo; *prev; prev = &(*prev)->next);
     39     *prev = ci;
     40     ci->cfuncs = funcs;
     41     ci->closure = closure;
     42     ci->screenList = 0;
     43     ci->selected = 0;
     44     ci->next = 0;
     45     return ci;
     46 }
     47 
     48 KdCardInfo *
     49 KdCardInfoLast(void)
     50 {
     51     KdCardInfo *ci;
     52 
     53     if (!kdCardInfo)
     54         return 0;
     55     for (ci = kdCardInfo; ci->next; ci = ci->next);
     56     return ci;
     57 }
     58 
     59 void
     60 KdCardInfoDispose(KdCardInfo * ci)
     61 {
     62     KdCardInfo **prev;
     63 
     64     for (prev = &kdCardInfo; *prev; prev = &(*prev)->next)
     65         if (*prev == ci) {
     66             *prev = ci->next;
     67             free(ci);
     68             break;
     69         }
     70 }
     71 
     72 KdScreenInfo *
     73 KdScreenInfoAdd(KdCardInfo * ci)
     74 {
     75     KdScreenInfo *si, **prev;
     76     int n;
     77 
     78     si = calloc(1, sizeof(KdScreenInfo));
     79     if (!si)
     80         return 0;
     81     for (prev = &ci->screenList, n = 0; *prev; prev = &(*prev)->next, n++);
     82     *prev = si;
     83     si->next = 0;
     84     si->card = ci;
     85     si->mynum = n;
     86     return si;
     87 }
     88 
     89 void
     90 KdScreenInfoDispose(KdScreenInfo * si)
     91 {
     92     KdCardInfo *ci = si->card;
     93     KdScreenInfo **prev;
     94 
     95     for (prev = &ci->screenList; *prev; prev = &(*prev)->next) {
     96         if (*prev == si) {
     97             *prev = si->next;
     98             free(si);
     99             if (!ci->screenList)
    100                 KdCardInfoDispose(ci);
    101             break;
    102         }
    103     }
    104 }
    105 
    106 KdPointerInfo *
    107 KdNewPointer(void)
    108 {
    109     KdPointerInfo *pi;
    110     int i;
    111 
    112     pi = (KdPointerInfo *) calloc(1, sizeof(KdPointerInfo));
    113     if (!pi)
    114         return NULL;
    115 
    116     pi->name = strdup("Generic Pointer");
    117     pi->path = NULL;
    118     pi->inputClass = KD_MOUSE;
    119     pi->driver = NULL;
    120     pi->driverPrivate = NULL;
    121     pi->next = NULL;
    122     pi->options = NULL;
    123     pi->nAxes = 3;
    124     pi->nButtons = KD_MAX_BUTTON;
    125     for (i = 1; i < KD_MAX_BUTTON; i++)
    126         pi->map[i] = i;
    127 
    128     return pi;
    129 }
    130 
    131 void
    132 KdFreePointer(KdPointerInfo * pi)
    133 {
    134     free(pi->name);
    135     free(pi->path);
    136     input_option_free_list(&pi->options);
    137     pi->next = NULL;
    138     free(pi);
    139 }
    140 
    141 void
    142 KdFreeKeyboard(KdKeyboardInfo * ki)
    143 {
    144     free(ki->name);
    145     free(ki->path);
    146     free(ki->xkbRules);
    147     free(ki->xkbModel);
    148     free(ki->xkbLayout);
    149     free(ki->xkbVariant);
    150     free(ki->xkbOptions);
    151     input_option_free_list(&ki->options);
    152     ki->next = NULL;
    153     free(ki);
    154 }