[gtk+] x11: Maointin window visuals without GdkVisual
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] x11: Maointin window visuals without GdkVisual
- Date: Fri, 4 Nov 2016 01:28:41 +0000 (UTC)
commit fe0864120520db9357b92489255d495cb61eba4f
Author: Benjamin Otte <otte redhat com>
Date: Thu Nov 3 23:40:54 2016 +0100
x11: Maointin window visuals without GdkVisual
That way, we don't need a GdkScreen to create a GdkWindow anymore.
gdk/x11/gdkdisplay-x11.c | 43 ++++++++++----------
gdk/x11/gdkdisplay-x11.h | 5 ++
gdk/x11/gdkprivate-x11.h | 10 +++-
gdk/x11/gdkscreen-x11.c | 5 +-
gdk/x11/gdkscreen-x11.h | 3 +-
gdk/x11/gdkvisual-x11.c | 97 ++++++++++++++-------------------------------
6 files changed, 68 insertions(+), 95 deletions(-)
---
diff --git a/gdk/x11/gdkdisplay-x11.c b/gdk/x11/gdkdisplay-x11.c
index c944a66..7884570 100644
--- a/gdk/x11/gdkdisplay-x11.c
+++ b/gdk/x11/gdkdisplay-x11.c
@@ -1334,6 +1334,22 @@ set_sm_client_id (GdkDisplay *display,
gdk_x11_get_xatom_by_name_for_display (display, "SM_CLIENT_ID"));
}
+void
+gdk_display_setup_window_visual (GdkDisplay *display,
+ gint depth,
+ Visual *visual,
+ Colormap colormap,
+ gboolean rgba)
+{
+ GdkX11Display *display_x11 = GDK_X11_DISPLAY (display);
+
+ display_x11->window_depth = depth;
+ display_x11->window_visual = visual;
+ display_x11->window_colormap = colormap;
+
+ gdk_display_set_rgba (display, rgba);
+}
+
GdkDisplay *
_gdk_x11_display_open (const gchar *display_name)
{
@@ -1390,9 +1406,7 @@ _gdk_x11_display_open (const gchar *display_name)
#endif
/* initialize the display's screens */
- display_x11->screen = _gdk_x11_screen_new (display, DefaultScreen (display_x11->xdisplay));
- if (gdk_screen_get_rgba_visual (display_x11->screen) == NULL)
- gdk_display_set_rgba (display, FALSE);
+ display_x11->screen = _gdk_x11_screen_new (display, DefaultScreen (display_x11->xdisplay), TRUE);
/* We need to initialize events after we have the screen
* structures in places
@@ -1993,7 +2007,7 @@ _gdk_x11_display_screen_for_xrootwin (GdkDisplay *display,
if (gdk_x11_display_error_trap_pop (display) || !result)
return NULL;
- screen = _gdk_x11_screen_new (display, XScreenNumberOfScreen (attrs.screen));
+ screen = _gdk_x11_screen_new (display, XScreenNumberOfScreen (attrs.screen), FALSE);
display_x11->screens = g_list_prepend (display_x11->screens, screen);
@@ -2919,37 +2933,22 @@ gdk_x11_display_get_primary_monitor (GdkDisplay *display)
return NULL;
}
-static GdkVisual *
-gdk_x11_display_get_window_gdk_visual (GdkX11Display *display)
-{
- GdkScreen *screen;
- GdkVisual *visual;
-
- screen = gdk_display_get_default_screen (GDK_DISPLAY (display));
-
- visual = gdk_screen_get_rgba_visual (screen);
- if (visual == NULL)
- visual = gdk_screen_get_system_visual (screen);
-
- return visual;
-}
-
int
gdk_x11_display_get_window_depth (GdkX11Display *display)
{
- return gdk_visual_get_depth (gdk_x11_display_get_window_gdk_visual (display));
+ return display->window_depth;
}
Visual *
gdk_x11_display_get_window_visual (GdkX11Display *display)
{
- return gdk_x11_visual_get_xvisual (gdk_x11_display_get_window_gdk_visual (display));
+ return display->window_visual;
}
Colormap
gdk_x11_display_get_window_colormap (GdkX11Display *display)
{
- return _gdk_visual_get_x11_colormap (gdk_x11_display_get_window_gdk_visual (display));
+ return display->window_colormap;
}
static void
diff --git a/gdk/x11/gdkdisplay-x11.h b/gdk/x11/gdkdisplay-x11.h
index f53db8c..9f7491f 100644
--- a/gdk/x11/gdkdisplay-x11.h
+++ b/gdk/x11/gdkdisplay-x11.h
@@ -45,6 +45,11 @@ struct _GdkX11Display
gint grab_count;
+ /* Visual infos for creating Windows */
+ int window_depth;
+ Visual *window_visual;
+ Colormap window_colormap;
+
/* Keyboard related information */
gint xkb_event_type;
gboolean use_xkb;
diff --git a/gdk/x11/gdkprivate-x11.h b/gdk/x11/gdkprivate-x11.h
index b96f1a0..3353f74 100644
--- a/gdk/x11/gdkprivate-x11.h
+++ b/gdk/x11/gdkprivate-x11.h
@@ -48,12 +48,15 @@
void _gdk_x11_error_handler_push (void);
void _gdk_x11_error_handler_pop (void);
-Colormap _gdk_visual_get_x11_colormap (GdkVisual *visual);
-
GdkVisual * _gdk_x11_screen_get_system_visual (GdkScreen *screen);
GList * _gdk_x11_screen_list_visuals (GdkScreen *screen);
+void gdk_display_setup_window_visual (GdkDisplay *display,
+ gint depth,
+ Visual *visual,
+ Colormap colormap,
+ gboolean rgba);
int gdk_x11_display_get_window_depth (GdkX11Display *display);
Visual * gdk_x11_display_get_window_visual (GdkX11Display *display);
Colormap gdk_x11_display_get_window_colormap (GdkX11Display *display);
@@ -290,7 +293,8 @@ _gdk_x11_dnd_filter (GdkXEvent *xev,
gpointer data);
void _gdk_x11_screen_init_root_window (GdkScreen *screen);
-void _gdk_x11_screen_init_visuals (GdkScreen *screen);
+void _gdk_x11_screen_init_visuals (GdkScreen *screen,
+ gboolean setup_display);
void _gdk_x11_cursor_update_theme (GdkCursor *cursor);
void _gdk_x11_cursor_display_finalize (GdkDisplay *display);
diff --git a/gdk/x11/gdkscreen-x11.c b/gdk/x11/gdkscreen-x11.c
index 59d4a27..905368d 100644
--- a/gdk/x11/gdkscreen-x11.c
+++ b/gdk/x11/gdkscreen-x11.c
@@ -794,7 +794,8 @@ init_multihead (GdkScreen *screen)
GdkScreen *
_gdk_x11_screen_new (GdkDisplay *display,
- gint screen_number)
+ gint screen_number,
+ gboolean setup_display)
{
GdkScreen *screen;
GdkX11Screen *x11_screen;
@@ -827,7 +828,7 @@ _gdk_x11_screen_new (GdkDisplay *display,
init_randr_support (screen);
init_multihead (screen);
- _gdk_x11_screen_init_visuals (screen);
+ _gdk_x11_screen_init_visuals (screen, setup_display);
_gdk_x11_screen_init_root_window (screen);
return screen;
diff --git a/gdk/x11/gdkscreen-x11.h b/gdk/x11/gdkscreen-x11.h
index ee099b5..f26e13f 100644
--- a/gdk/x11/gdkscreen-x11.h
+++ b/gdk/x11/gdkscreen-x11.h
@@ -98,7 +98,8 @@ struct _GdkX11ScreenClass
GType _gdk_x11_screen_get_type (void);
GdkScreen * _gdk_x11_screen_new (GdkDisplay *display,
- gint screen_number);
+ gint screen_number,
+ gboolean setup_display);
void _gdk_x11_screen_update_visuals_for_gl (GdkScreen *screen);
void _gdk_x11_screen_window_manager_changed (GdkScreen *screen);
diff --git a/gdk/x11/gdkvisual-x11.c b/gdk/x11/gdkvisual-x11.c
index b948613..3661933 100644
--- a/gdk/x11/gdkvisual-x11.c
+++ b/gdk/x11/gdkvisual-x11.c
@@ -36,7 +36,6 @@ struct _GdkX11Visual
GdkVisual visual;
Visual *xvisual;
- Colormap colormap;
};
struct _GdkX11VisualClass
@@ -49,47 +48,16 @@ G_DEFINE_TYPE (GdkX11Visual, gdk_x11_visual, GDK_TYPE_VISUAL)
static void
gdk_x11_visual_init (GdkX11Visual *x11_visual)
{
- x11_visual->colormap = None;
-}
-
-static void
-gdk_x11_visual_finalize (GObject *object)
-{
- GdkVisual *visual = (GdkVisual *)object;
- GdkX11Visual *x11_visual = (GdkX11Visual *)object;
-
- if (x11_visual->colormap != None)
- XFreeColormap (GDK_SCREEN_XDISPLAY (visual->screen), x11_visual->colormap);
-
- G_OBJECT_CLASS (gdk_x11_visual_parent_class)->finalize (object);
-}
-
-static void
-gdk_x11_visual_dispose (GObject *object)
-{
- GdkVisual *visual = (GdkVisual *)object;
- GdkX11Visual *x11_visual = (GdkX11Visual *)object;
-
- if (x11_visual->colormap != None)
- {
- XFreeColormap (GDK_SCREEN_XDISPLAY (visual->screen), x11_visual->colormap);
- x11_visual->colormap = None;
- }
-
- G_OBJECT_CLASS (gdk_x11_visual_parent_class)->dispose (object);
}
static void
gdk_x11_visual_class_init (GdkX11VisualClass *class)
{
- GObjectClass *object_class = G_OBJECT_CLASS (class);
-
- object_class->finalize = gdk_x11_visual_finalize;
- object_class->dispose = gdk_x11_visual_dispose;
}
void
-_gdk_x11_screen_init_visuals (GdkScreen *screen)
+_gdk_x11_screen_init_visuals (GdkScreen *screen,
+ gboolean setup_display)
{
static const gint possible_depths[8] = { 32, 30, 24, 16, 15, 8, 4, 1 };
static const GdkVisualType possible_types[6] =
@@ -221,11 +189,7 @@ _gdk_x11_screen_init_visuals (GdkScreen *screen)
for (i = 0; i < nvisuals; i++)
{
if (default_xvisual->visualid == GDK_X11_VISUAL (visuals[i])->xvisual->visualid)
- {
- x11_screen->system_visual = visuals[i];
- GDK_X11_VISUAL (visuals[i])->colormap =
- DefaultColormap (x11_screen->xdisplay, x11_screen->screen_num);
- }
+ x11_screen->system_visual = visuals[i];
/* For now, we only support 8888 ARGB for the "rgba visual".
* Additional formats (like ABGR) could be added later if they
@@ -298,6 +262,33 @@ _gdk_x11_screen_init_visuals (GdkScreen *screen)
as we care about glx details such as alpha/depth/stencil depth,
stereo and double buffering */
_gdk_x11_screen_update_visuals_for_gl (screen);
+
+ if (setup_display)
+ {
+ if (x11_screen->rgba_visual)
+ {
+ Visual *xvisual = GDK_X11_VISUAL (x11_screen->rgba_visual)->xvisual;
+ Colormap colormap;
+
+ colormap = XCreateColormap (x11_screen->xdisplay,
+ RootWindow (x11_screen->xdisplay, x11_screen->screen_num),
+ xvisual,
+ AllocNone);
+ gdk_display_setup_window_visual (gdk_screen_get_display (screen),
+ x11_screen->rgba_visual->depth,
+ GDK_X11_VISUAL (x11_screen->rgba_visual)->xvisual,
+ colormap,
+ TRUE);
+ }
+ else
+ {
+ gdk_display_setup_window_visual (gdk_screen_get_display (screen),
+ DefaultDepth (x11_screen->xdisplay, x11_screen->screen_num),
+ DefaultVisual (x11_screen->xdisplay, x11_screen->screen_num),
+ DefaultColormap (x11_screen->xdisplay, x11_screen->screen_num),
+ FALSE);
+ }
+ }
}
GdkVisual *
@@ -355,34 +346,6 @@ gdk_x11_screen_lookup_visual (GdkScreen *screen,
}
/**
- * _gdk_visual_get_x11_colormap:
- * @visual: the visual to get the colormap from
- *
- * Gets the colormap to use
- *
- * Returns: the X Colormap to use for new windows using @visual
- **/
-Colormap
-_gdk_visual_get_x11_colormap (GdkVisual *visual)
-{
- GdkX11Visual *x11_visual;
-
- g_return_val_if_fail (GDK_IS_VISUAL (visual), None);
-
- x11_visual = GDK_X11_VISUAL (visual);
-
- if (x11_visual->colormap == None)
- {
- x11_visual->colormap = XCreateColormap (GDK_SCREEN_XDISPLAY (visual->screen),
- GDK_SCREEN_XROOTWIN (visual->screen),
- x11_visual->xvisual,
- AllocNone);
- }
-
- return x11_visual->colormap;
-}
-
-/**
* gdk_x11_visual_get_xvisual:
* @visual: (type GdkX11Visual): a #GdkVisual.
*
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]