mirror of
https://github.com/brl/mutter.git
synced 2024-11-21 23:50:41 -05:00
query Xinerama screen information if HAVE_XINERAMA
2002-04-17 Havoc Pennington <hp@pobox.com> * src/screen.c (meta_screen_new): query Xinerama screen information if HAVE_XINERAMA * configure.in (found_xinerama): check for Xinerama
This commit is contained in:
parent
458e125c09
commit
f5c10f387b
@ -1,3 +1,10 @@
|
||||
2002-04-17 Havoc Pennington <hp@pobox.com>
|
||||
|
||||
* src/screen.c (meta_screen_new): query Xinerama screen
|
||||
information if HAVE_XINERAMA
|
||||
|
||||
* configure.in (found_xinerama): check for Xinerama
|
||||
|
||||
2002-04-17 Changwoo Ryu <cwryu@debian.org>
|
||||
|
||||
* configure.in (ALL_LINGUAS): Added ko (Korean).
|
||||
|
@ -10,3 +10,4 @@
|
||||
#undef HAVE_SHAPE_EXT
|
||||
#undef HAVE_XFT
|
||||
#undef HAVE_SM
|
||||
#undef HAVE_XINERAMA
|
||||
|
13
configure.in
13
configure.in
@ -93,7 +93,18 @@ AC_PATH_XTRA
|
||||
|
||||
CFLAGS="$METACITY_CFLAGS $CFLAGS $X_CFLAGS"
|
||||
|
||||
METACITY_LIBS="$X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS $METACITY_LIBS"
|
||||
XINERAMA_LIBS=
|
||||
found_xinerama=false
|
||||
AC_CHECK_LIB(Xext, XineramaQueryExtension,
|
||||
[AC_CHECK_HEADERS(X11/extensions/Xinerama.h,
|
||||
XINERAMA_LIBS=-lXinerama found_xinerama=true)],
|
||||
, -lXinerama $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS)
|
||||
|
||||
if test "$found_xinerama" = "true"; then
|
||||
AC_DEFINE(HAVE_XINERAMA)
|
||||
fi
|
||||
|
||||
METACITY_LIBS="$XINERAMA_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS $METACITY_LIBS"
|
||||
|
||||
found_sm=false
|
||||
case "$METACITY_LIBS" in
|
||||
|
73
src/screen.c
73
src/screen.c
@ -30,6 +30,10 @@
|
||||
#include "keybindings.h"
|
||||
#include "stack.h"
|
||||
|
||||
#ifdef HAVE_XINERAMA
|
||||
#include <X11/extensions/Xinerama.h>
|
||||
#endif
|
||||
|
||||
#include <X11/Xatom.h>
|
||||
#include <locale.h>
|
||||
#include <string.h>
|
||||
@ -211,6 +215,75 @@ meta_screen_new (MetaDisplay *display,
|
||||
screen->default_xvisual = DefaultVisualOfScreen (screen->xscreen);
|
||||
screen->default_depth = DefaultDepthOfScreen (screen->xscreen);
|
||||
|
||||
screen->xinerama_infos = NULL;
|
||||
screen->n_xinerama_infos = 0;
|
||||
|
||||
#ifdef HAVE_XINERAMA
|
||||
if (XineramaQueryExtension (display->xdisplay, NULL, NULL))
|
||||
{
|
||||
XineramaScreenInfo *infos;
|
||||
int n_infos;
|
||||
int i;
|
||||
|
||||
n_infos = 0;
|
||||
infos = XineramaQueryScreens (display->xdisplay, &n_infos);
|
||||
|
||||
meta_topic (META_DEBUG_XINERAMA,
|
||||
"Found %d Xinerama screens on display %s\n",
|
||||
n_infos, display->name);
|
||||
|
||||
if (n_infos > 0)
|
||||
{
|
||||
screen->xinerama_infos = g_new (MetaXineramaScreenInfo, n_infos);
|
||||
screen->n_xinerama_infos = n_infos;
|
||||
|
||||
i = 0;
|
||||
while (i < n_infos)
|
||||
{
|
||||
screen->xinerama_infos[i].number = infos[i].screen_number;
|
||||
screen->xinerama_infos[i].x_origin = infos[i].x_org;
|
||||
screen->xinerama_infos[i].y_origin = infos[i].y_org;
|
||||
screen->xinerama_infos[i].width = infos[i].width;
|
||||
screen->xinerama_infos[i].height = infos[i].height;
|
||||
|
||||
++i;
|
||||
}
|
||||
}
|
||||
|
||||
meta_XFree (infos);
|
||||
}
|
||||
else
|
||||
{
|
||||
meta_topic (META_DEBUG_XINERAMA,
|
||||
"No Xinerama extension on display %s\n",
|
||||
display->name);
|
||||
}
|
||||
#else
|
||||
meta_topic (META_DEBUG_XINERAMA,
|
||||
"Metacity compiled without Xinerama support\n");
|
||||
#endif
|
||||
|
||||
/* If no Xinerama, fill in the single screen info so
|
||||
* we can use the field unconditionally
|
||||
*/
|
||||
if (screen->n_xinerama_infos == 0)
|
||||
{
|
||||
meta_topic (META_DEBUG_XINERAMA,
|
||||
"No Xinerama screens, using default screen info\n");
|
||||
|
||||
screen->xinerama_infos = g_new (MetaXineramaScreenInfo, 1);
|
||||
screen->n_xinerama_infos = 1;
|
||||
|
||||
screen->xinerama_infos[0].number = 0;
|
||||
screen->xinerama_infos[0].x_origin = 0;
|
||||
screen->xinerama_infos[0].y_origin = 0;
|
||||
screen->xinerama_infos[0].width = screen->width;
|
||||
screen->xinerama_infos[0].height = screen->height;
|
||||
}
|
||||
|
||||
g_assert (screen->n_xinerama_infos > 0);
|
||||
g_assert (screen->xinerama_infos != NULL);
|
||||
|
||||
meta_screen_set_cursor (screen, META_CURSOR_DEFAULT);
|
||||
|
||||
if (display->leader_window == None)
|
||||
|
14
src/screen.h
14
src/screen.h
@ -26,6 +26,17 @@
|
||||
#include <X11/Xutil.h>
|
||||
#include "ui.h"
|
||||
|
||||
typedef struct _MetaXineramaScreenInfo MetaXineramaScreenInfo;
|
||||
|
||||
struct _MetaXineramaScreenInfo
|
||||
{
|
||||
int number;
|
||||
int x_origin;
|
||||
int y_origin;
|
||||
int width;
|
||||
int height;
|
||||
};
|
||||
|
||||
typedef void (* MetaScreenWindowFunc) (MetaScreen *screen, MetaWindow *window,
|
||||
gpointer user_data);
|
||||
|
||||
@ -48,6 +59,9 @@ struct _MetaScreen
|
||||
MetaStack *stack;
|
||||
|
||||
MetaCursor current_cursor;
|
||||
|
||||
MetaXineramaScreenInfo *xinerama_infos;
|
||||
int n_xinerama_infos;
|
||||
};
|
||||
|
||||
MetaScreen* meta_screen_new (MetaDisplay *display,
|
||||
|
@ -190,6 +190,8 @@ topic_name (MetaDebugTopic topic)
|
||||
return "GEOMETRY";
|
||||
case META_DEBUG_PING:
|
||||
return "PING";
|
||||
case META_DEBUG_XINERAMA:
|
||||
return "XINERAMA";
|
||||
}
|
||||
|
||||
return "Window manager";
|
||||
|
@ -55,7 +55,8 @@ typedef enum
|
||||
META_DEBUG_WINDOW_OPS = 1 << 7,
|
||||
META_DEBUG_GEOMETRY = 1 << 8,
|
||||
META_DEBUG_PLACEMENT = 1 << 9,
|
||||
META_DEBUG_PING = 1 << 10
|
||||
META_DEBUG_PING = 1 << 10,
|
||||
META_DEBUG_XINERAMA = 1 << 11
|
||||
|
||||
} MetaDebugTopic;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user