[gtk+/wip/matthiasc/monitor] x11: Drop Xinerama
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/matthiasc/monitor] x11: Drop Xinerama
- Date: Sun, 3 Apr 2016 14:52:04 +0000 (UTC)
commit 146fdaf2b8bd4222e71f723b0263065b98483867
Author: Matthias Clasen <mclasen redhat com>
Date: Sun Apr 3 00:15:42 2016 -0400
x11: Drop Xinerama
It may come back after the monitor conversion.
gdk/x11/gdkscreen-x11.c | 295 -----------------------------------------------
gdk/x11/gdkscreen-x11.h | 3 -
2 files changed, 0 insertions(+), 298 deletions(-)
---
diff --git a/gdk/x11/gdkscreen-x11.c b/gdk/x11/gdkscreen-x11.c
index 9d8ed20..2cb62ff 100644
--- a/gdk/x11/gdkscreen-x11.c
+++ b/gdk/x11/gdkscreen-x11.c
@@ -33,13 +33,6 @@
#include <X11/Xatom.h>
-#ifdef HAVE_SOLARIS_XINERAMA
-#include <X11/extensions/xinerama.h>
-#endif
-#ifdef HAVE_XFREE_XINERAMA
-#include <X11/extensions/Xinerama.h>
-#endif
-
#ifdef HAVE_RANDR
#include <X11/extensions/Xrandr.h>
#endif
@@ -517,60 +510,6 @@ init_monitor_geometry (GdkX11Monitor *monitor,
monitor->manufacturer = NULL;
}
-static gboolean
-init_fake_xinerama (GdkScreen *screen)
-{
-#ifdef G_ENABLE_DEBUG
- GdkX11Screen *x11_screen = GDK_X11_SCREEN (screen);
- XSetWindowAttributes atts;
- Window win;
- gint w, h;
-
- if (!GDK_DEBUG_CHECK (XINERAMA))
- return FALSE;
-
- /* Fake Xinerama mode by splitting the screen into 4 monitors.
- * Also draw a little cross to make the monitor boundaries visible.
- */
- w = WidthOfScreen (x11_screen->xscreen);
- h = HeightOfScreen (x11_screen->xscreen);
-
- x11_screen->n_monitors = 4;
- x11_screen->monitors = g_new0 (GdkX11Monitor, 4);
- init_monitor_geometry (&x11_screen->monitors[0], 0, 0, w / 2, h / 2);
- init_monitor_geometry (&x11_screen->monitors[1], w / 2, 0, w / 2, h / 2);
- init_monitor_geometry (&x11_screen->monitors[2], 0, h / 2, w / 2, h / 2);
- init_monitor_geometry (&x11_screen->monitors[3], w / 2, h / 2, w / 2, h / 2);
-
- atts.override_redirect = 1;
- atts.background_pixel = WhitePixel(GDK_SCREEN_XDISPLAY (screen),
- x11_screen->screen_num);
- win = XCreateWindow(GDK_SCREEN_XDISPLAY (screen),
- x11_screen->xroot_window, 0, h / 2, w, 1, 0,
- DefaultDepth(GDK_SCREEN_XDISPLAY (screen),
- x11_screen->screen_num),
- InputOutput,
- DefaultVisual(GDK_SCREEN_XDISPLAY (screen),
- x11_screen->screen_num),
- CWOverrideRedirect|CWBackPixel,
- &atts);
- XMapRaised(GDK_SCREEN_XDISPLAY (screen), win);
- win = XCreateWindow(GDK_SCREEN_XDISPLAY (screen),
- x11_screen->xroot_window, w/2 , 0, 1, h, 0,
- DefaultDepth(GDK_SCREEN_XDISPLAY (screen),
- x11_screen->screen_num),
- InputOutput,
- DefaultVisual(GDK_SCREEN_XDISPLAY (screen),
- x11_screen->screen_num),
- CWOverrideRedirect|CWBackPixel,
- &atts);
- XMapRaised(GDK_SCREEN_XDISPLAY (screen), win);
- return TRUE;
-#endif
-
- return FALSE;
-}
-
static void
free_monitors (GdkX11Monitor *monitors,
gint n_monitors)
@@ -846,230 +785,6 @@ init_randr13 (GdkScreen *screen)
return FALSE;
}
-static gboolean
-init_solaris_xinerama (GdkScreen *screen)
-{
-#ifdef HAVE_SOLARIS_XINERAMA
- Display *dpy = GDK_SCREEN_XDISPLAY (screen);
- int screen_no = gdk_screen_get_number (screen);
- GdkX11Screen *x11_screen = GDK_X11_SCREEN (screen);
- XRectangle monitors[MAXFRAMEBUFFERS];
- unsigned char hints[16];
- gint result;
- int n_monitors;
- int i;
- int opcode, firstevent, firsterror;
-
- if (!XQueryExtension (GDK_SCREEN_XDISPLAY (screen), "XINERAMA",
- &opcode, &firstevent, &firsterror))
- return FALSE;
-
- if (!XineramaGetState (dpy, screen_no))
- return FALSE;
-
- result = XineramaGetInfo (dpy, screen_no, monitors, hints, &n_monitors);
-
- /* Yes I know it should be Success but the current implementation
- * returns the num of monitor
- */
- if (result == 0)
- {
- return FALSE;
- }
-
- x11_screen->monitors = g_new0 (GdkX11Monitor, n_monitors);
- x11_screen->n_monitors = n_monitors;
-
- for (i = 0; i < n_monitors; i++)
- {
- init_monitor_geometry (&x11_screen->monitors[i],
- monitors[i].x, monitors[i].y,
- monitors[i].width, monitors[i].height);
- }
-
- x11_screen->primary_monitor = 0;
-
- return TRUE;
-#endif /* HAVE_SOLARIS_XINERAMA */
-
- return FALSE;
-}
-
-static gboolean
-init_xfree_xinerama (GdkScreen *screen)
-{
-#ifdef HAVE_XFREE_XINERAMA
- Display *dpy = GDK_SCREEN_XDISPLAY (screen);
- GdkX11Screen *x11_screen = GDK_X11_SCREEN (screen);
- XineramaScreenInfo *monitors;
- int i, n_monitors;
- int opcode, firstevent, firsterror;
-
- if (!XQueryExtension (GDK_SCREEN_XDISPLAY (screen), "XINERAMA",
- &opcode, &firstevent, &firsterror))
- return FALSE;
-
- if (!XineramaIsActive (dpy))
- return FALSE;
-
- monitors = XineramaQueryScreens (dpy, &n_monitors);
-
- if (n_monitors <= 0 || monitors == NULL)
- {
- /* If Xinerama doesn't think we have any monitors, try acting as
- * though we had no Xinerama. If the "no monitors" condition
- * is because XRandR 1.2 is currently switching between CRTCs,
- * we'll be notified again when we have our monitor back,
- * and can go back into Xinerama-ish mode at that point.
- */
- if (monitors)
- XFree (monitors);
-
- return FALSE;
- }
-
- x11_screen->n_monitors = n_monitors;
- x11_screen->monitors = g_new0 (GdkX11Monitor, n_monitors);
-
- for (i = 0; i < n_monitors; ++i)
- {
- init_monitor_geometry (&x11_screen->monitors[i],
- monitors[i].x_org, monitors[i].y_org,
- monitors[i].width, monitors[i].height);
- }
-
- XFree (monitors);
-
- x11_screen->primary_monitor = 0;
-
- return TRUE;
-#endif /* HAVE_XFREE_XINERAMA */
-
- return FALSE;
-}
-
-static gboolean
-init_solaris_xinerama_indices (GdkX11Screen *x11_screen)
-{
-#ifdef HAVE_SOLARIS_XINERAMA
- XRectangle x_monitors[MAXFRAMEBUFFERS];
- unsigned char hints[16];
- gint result;
- gint monitor_num;
- gint x_n_monitors;
- gint i;
-
- if (!XineramaGetState (x11_screen->xdisplay, x11_screen->screen_num))
- return FALSE;
-
- result = XineramaGetInfo (x11_screen->xdisplay, x11_screen->screen_num,
- x_monitors, hints, &x_n_monitors);
-
- if (result == 0)
- return FALSE;
-
-
- for (monitor_num = 0; monitor_num < x11_screen->n_monitors; ++monitor_num)
- {
- for (i = 0; i < x_n_monitors; ++i)
- {
- if (x11_screen->monitors[monitor_num].geometry.x == x_monitors[i].x &&
- x11_screen->monitors[monitor_num].geometry.y == x_monitors[i].y &&
- x11_screen->monitors[monitor_num].geometry.width == x_monitors[i].width &&
- x11_screen->monitors[monitor_num].geometry.height == x_monitors[i].height)
- {
- g_hash_table_insert (x11_screen->xinerama_matches,
- GINT_TO_POINTER (monitor_num),
- GINT_TO_POINTER (i));
- }
- }
- }
- return TRUE;
-#endif /* HAVE_SOLARIS_XINERAMA */
-
- return FALSE;
-}
-
-static gboolean
-init_xfree_xinerama_indices (GdkX11Screen *x11_screen)
-{
-#ifdef HAVE_XFREE_XINERAMA
- XineramaScreenInfo *x_monitors;
- gint monitor_num;
- gint x_n_monitors;
- gint i;
-
- if (!XineramaIsActive (x11_screen->xdisplay))
- return FALSE;
-
- x_monitors = XineramaQueryScreens (x11_screen->xdisplay, &x_n_monitors);
- if (x_n_monitors <= 0 || x_monitors == NULL)
- {
- if (x_monitors)
- XFree (x_monitors);
-
- return FALSE;
- }
-
- for (monitor_num = 0; monitor_num < x11_screen->n_monitors; ++monitor_num)
- {
- for (i = 0; i < x_n_monitors; ++i)
- {
- if (x11_screen->monitors[monitor_num].geometry.x == x_monitors[i].x_org &&
- x11_screen->monitors[monitor_num].geometry.y == x_monitors[i].y_org &&
- x11_screen->monitors[monitor_num].geometry.width == x_monitors[i].width &&
- x11_screen->monitors[monitor_num].geometry.height == x_monitors[i].height)
- {
- g_hash_table_insert (x11_screen->xinerama_matches,
- GINT_TO_POINTER (monitor_num),
- GINT_TO_POINTER (i));
- }
- }
- }
- XFree (x_monitors);
- return TRUE;
-#endif /* HAVE_XFREE_XINERAMA */
-
- return FALSE;
-}
-
-static void
-init_xinerama_indices (GdkX11Screen *x11_screen)
-{
- int opcode, firstevent, firsterror;
-
- x11_screen->xinerama_matches = g_hash_table_new (g_direct_hash, g_direct_equal);
- if (XQueryExtension (x11_screen->xdisplay, "XINERAMA",
- &opcode, &firstevent, &firsterror))
- {
- x11_screen->xinerama_matches = g_hash_table_new (g_direct_hash, g_direct_equal);
-
- /* Solaris Xinerama first, then XFree/Xorg Xinerama
- * to match the order in init_multihead()
- */
- if (init_solaris_xinerama_indices (x11_screen) == FALSE)
- init_xfree_xinerama_indices (x11_screen);
- }
-}
-
-gint
-_gdk_x11_screen_get_xinerama_index (GdkScreen *screen,
- gint monitor_num)
-{
- GdkX11Screen *x11_screen = GDK_X11_SCREEN (screen);
- gpointer val;
-
- g_return_val_if_fail (monitor_num < x11_screen->n_monitors, -1);
-
- if (x11_screen->xinerama_matches == NULL)
- init_xinerama_indices (x11_screen);
-
- if (g_hash_table_lookup_extended (x11_screen->xinerama_matches, GINT_TO_POINTER (monitor_num), NULL, &val))
- return (GPOINTER_TO_INT(val));
-
- return -1;
-}
-
void
_gdk_x11_screen_get_edge_monitors (GdkScreen *screen,
gint *top,
@@ -1120,7 +835,6 @@ deinit_multihead (GdkScreen *screen)
GdkX11Screen *x11_screen = GDK_X11_SCREEN (screen);
free_monitors (x11_screen->monitors, x11_screen->n_monitors);
- g_clear_pointer (&x11_screen->xinerama_matches, g_hash_table_destroy);
x11_screen->n_monitors = 0;
x11_screen->monitors = NULL;
@@ -1184,21 +898,12 @@ init_no_multihead (GdkScreen *screen)
static void
init_multihead (GdkScreen *screen)
{
- if (init_fake_xinerama (screen))
- return;
-
if (init_randr15 (screen))
return;
if (init_randr13 (screen))
return;
- if (init_solaris_xinerama (screen))
- return;
-
- if (init_xfree_xinerama (screen))
- return;
-
init_no_multihead (screen);
}
diff --git a/gdk/x11/gdkscreen-x11.h b/gdk/x11/gdkscreen-x11.h
index c2b9faa..db82735 100644
--- a/gdk/x11/gdkscreen-x11.h
+++ b/gdk/x11/gdkscreen-x11.h
@@ -96,9 +96,6 @@ struct _GdkX11Screen
/* cache for window->translate vfunc */
GC subwindow_gcs[32];
-
- /* cache for Xinerama monitor indices */
- GHashTable *xinerama_matches;
};
struct _GdkX11ScreenClass
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]