11f8e495eeb65c1dfaa525feb5257e809e42c597
[profile/ivi/ecore.git] / src / lib / ecore_x / xlib / ecore_x_xinerama.c
1 /*
2  * Xinerama code
3  */
4
5 #ifdef HAVE_CONFIG_H
6 # include <config.h>
7 #endif /* ifdef HAVE_CONFIG_H */
8
9 #include "Ecore.h"
10 #include "ecore_x_private.h"
11 #include "Ecore_X.h"
12 #include "Ecore_X_Atoms.h"
13
14 #ifdef ECORE_XINERAMA
15 static XineramaScreenInfo *_xin_info = NULL;
16 static int _xin_scr_num = 0;
17 #endif /* ifdef ECORE_XINERAMA */
18
19 EAPI int
20 ecore_x_xinerama_screen_count_get(void)
21 {
22 #ifdef ECORE_XINERAMA
23    int event_base, error_base;
24
25    LOGFN(__FILE__, __LINE__, __FUNCTION__);
26    if (_xin_info)
27       XFree(_xin_info);
28
29    _xin_info = NULL;
30    if (XineramaQueryExtension(_ecore_x_disp, &event_base, &error_base))
31      {
32         _xin_info = XineramaQueryScreens(_ecore_x_disp, &_xin_scr_num);
33         if (_xin_info)
34            return _xin_scr_num;
35      }
36
37 #endif /* ifdef ECORE_XINERAMA */
38    return 0;
39 } /* ecore_x_xinerama_screen_count_get */
40
41 EAPI int
42 ecore_x_xinerama_screen_geometry_get(int screen, int *x, int *y, int *w, int *h)
43 {
44    LOGFN(__FILE__, __LINE__, __FUNCTION__);
45 #ifdef ECORE_XINERAMA
46    if (_xin_info)
47      {
48         int i;
49
50         for (i = 0; i < _xin_scr_num; i++)
51           {
52              if (_xin_info[i].screen_number == screen)
53                {
54                   if (x)
55                      *x = _xin_info[i].x_org;
56
57                   if (y)
58                      *y = _xin_info[i].y_org;
59
60                   if (w)
61                      *w = _xin_info[i].width;
62
63                   if (h)
64                      *h = _xin_info[i].height;
65
66                   return 1;
67                }
68           }
69      }
70
71 #endif /* ifdef ECORE_XINERAMA */
72    if (x)
73       *x = 0;
74
75    if (y)
76       *y = 0;
77
78    if (w)
79       *w = DisplayWidth(_ecore_x_disp, 0);
80
81    if (h)
82       *h = DisplayHeight(_ecore_x_disp, 0);
83
84    return 0;
85 } /* ecore_x_xinerama_screen_geometry_get */
86