From bcf6e517d37f25596b43759960d622eb134cd22a Mon Sep 17 00:00:00 2001 From: Liang Chang Date: Thu, 5 Aug 2021 17:09:35 +0800 Subject: [PATCH] dtwm: Add a function: GetHeadInfoById. --- cde/programs/dtwm/WmMultiHead.c | 56 +++++++++++++++++++++++++++++++++ cde/programs/dtwm/WmMultiHead.h | 1 + 2 files changed, 57 insertions(+) diff --git a/cde/programs/dtwm/WmMultiHead.c b/cde/programs/dtwm/WmMultiHead.c index dc3eb811f..b42f1e130 100644 --- a/cde/programs/dtwm/WmMultiHead.c +++ b/cde/programs/dtwm/WmMultiHead.c @@ -113,3 +113,59 @@ WmHeadInfo_t *GetHeadInfo(const ClientData *pcd) { /* No valid screen */ return NULL; } + + +/*************************************<->************************************* + * + * GetHeadInfoById (id) + * + * + * Description: + * ----------- + * Search for the head by ID. + * + * + * Inputs: + * ------ + * + * + * Outputs: + * ------- + * Return = head metrics on success, NULL on failure. + * + * + * Comments: + * -------- + * + * Can fail if: + * + * - MultiHead(eg. Xinerama) is not active + * - malloc error + * - id is less than 0 + * + *************************************<->***********************************/ +WmHeadInfo_t *GetHeadInfoById(int id) { + WmHeadInfo_t *WmHI = NULL; + + if (!DtXI) + DtXI = _DtXineramaInit(DISPLAY); + + if (id < 0 || !DtXI) + return NULL; + + if (!(WmHI = (WmHeadInfo_t *)malloc(sizeof(WmHeadInfo_t)))) { +#ifdef DEBUG + fprintf(stderr, "(dtwm) _GetHeadInfoById: malloc failed\n"); +#endif + + free(DtXI); + return NULL; + } + + if (_DtXineramaGetScreen(DtXI, id, + &WmHI->width, &WmHI->height, &WmHI->x_org, &WmHI->y_org)) + return WmHI; + + free(WmHI); + return NULL; +} diff --git a/cde/programs/dtwm/WmMultiHead.h b/cde/programs/dtwm/WmMultiHead.h index 000cbdb6d..3e4884472 100644 --- a/cde/programs/dtwm/WmMultiHead.h +++ b/cde/programs/dtwm/WmMultiHead.h @@ -33,5 +33,6 @@ typedef struct _WmHeadInfo { } WmHeadInfo_t, *WmHeadInfoPtr_t; WmHeadInfo_t *GetHeadInfo(const ClientData *pcd); +WmHeadInfo_t *GetHeadInfoById(int id); #endif /* _WmMultiHead_h */