(29/01/02) Erwann Chenede - <erwann.chenede@sun.com>

* integrated multihead changes to work properly without the GDK_MULTIHEAD_SAFE
  flag.
This commit is contained in:
Erwann Chenede
2002-01-29 18:29:01 +00:00
parent 7182f8e51a
commit 951dd5dce8
10 changed files with 53 additions and 31 deletions

View File

@@ -26,8 +26,9 @@ Obtains the Xlib window id of the root window of the default screen.
The current display.
</para>
@object:
@Returns: an Xlib <type>Display*</type>.
<!-- # Unused Parameters # -->
@object:
<!-- ##### MACRO GDK_WINDOW_XDISPLAY ##### -->

View File

@@ -35,7 +35,7 @@ extern "C"
typedef struct _GdkDisplayClass GdkDisplayClass;
#define GDK_TYPE_DISPLAY (gdk_display_get_type ())
#define GDK_DISPLAY(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_DISPLAY, GdkDisplay))
#define GDK_DISPLAY_OBJECT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_DISPLAY, GdkDisplay))
#define GDK_DISPLAY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_DISPLAY, GdkDisplayClass))
#define GDK_IS_DISPLAY(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_DISPLAY))
#define GDK_IS_DISPLAY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_DISPLAY))

View File

@@ -81,6 +81,9 @@ gdk_display_manager_set_default_display (GdkDisplayManager * display_mgr,
g_return_if_fail (GDK_IS_DISPLAY_MANAGER (display_mgr));
g_return_if_fail (GDK_IS_DISPLAY (default_display));
display_mgr->default_display = default_display;
#ifndef GDK_MULTIHEAD_SAFE
gdk_display = GDK_DISPLAY_XDISPLAY (default_display);
#endif
}
GdkDisplay *

View File

@@ -756,16 +756,40 @@ gdk_x11_get_depth (GdkDrawable *drawable)
return gdk_drawable_get_depth (GDK_DRAWABLE_IMPL_X11 (drawable)->wrapper);
}
static GdkDrawable * get_impl_drawable (GdkDrawable *drawable)
{
GdkDrawable *impl;
if (GDK_IS_WINDOW (drawable))
impl = ((GdkPixmapObject *)drawable)->impl;
else if (GDK_IS_PIXMAP (drawable))
impl = ((GdkPixmapObject *)drawable)->impl;
else
{
g_warning (G_STRLOC " drawable is not a pixmap or window");
return None;
}
return impl;
}
static GdkScreen*
gdk_x11_get_screen (GdkDrawable *drawable)
{
return GDK_DRAWABLE_IMPL_X11 (drawable)->screen;
if (GDK_IS_DRAWABLE_IMPL_X11 (drawable))
return GDK_DRAWABLE_IMPL_X11 (drawable)->screen;
else
return GDK_DRAWABLE_IMPL_X11 (get_impl_drawable (drawable))->screen;
}
static GdkDisplay*
gdk_x11_get_display (GdkDrawable *drawable)
{
return gdk_screen_get_display (GDK_DRAWABLE_IMPL_X11 (drawable)->screen);
if (GDK_IS_DRAWABLE_IMPL_X11 (drawable))
return gdk_screen_get_display (GDK_DRAWABLE_IMPL_X11 (drawable)->screen);
else
return gdk_screen_get_display (GDK_DRAWABLE_IMPL_X11 (get_impl_drawable (drawable))->screen);
}
static GdkVisual*

View File

@@ -366,7 +366,7 @@ gdk_add_client_message_filter (GdkAtom message_type,
filter->function = func;
filter->data = data;
GDK_DISPLAY_IMPL_X11(display)->client_filters =
GDK_DISPLAY_IMPL_X11(gdk_get_default_display())->client_filters =
g_list_prepend (GDK_DISPLAY_IMPL_X11
(gdk_get_default_display())->client_filters,
filter);

View File

@@ -34,7 +34,6 @@
gboolean _gdk_use_xshm = TRUE; /* used as a cmd line arg */
gchar *_gdk_display_name = NULL;
GdkAtom _gdk_selection_property;
GdkWindowObject *_gdk_xgrab_window = NULL; /* Window that currently holds the
* x pointer grab
*/
#ifndef GDK_MULTIHEAD_SAFE
Display *gdk_display = NULL;
#endif

View File

@@ -29,12 +29,17 @@
#include <gdk/gdkprivate.h>
#include <gdk/gdkcursor.h>
#include <gdk/gdkdisplaymgr.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
G_BEGIN_DECLS
#ifndef GDK_MULTIHEAD_SAFE
extern Display *gdk_display;
#endif
Display *gdk_x11_drawable_get_xdisplay (GdkDrawable *drawable);
XID gdk_x11_drawable_get_xid (GdkDrawable *drawable);
Display *gdk_x11_image_get_xdisplay (GdkImage *image);
@@ -60,6 +65,8 @@ gint gdk_x11_get_default_screen (void);
#define GDK_IMAGE_XDISPLAY(image) (gdk_x11_image_get_xdisplay (image))
#define GDK_IMAGE_XIMAGE(image) (gdk_x11_image_get_ximage (image))
#define GDK_DISPLAY() gdk_get_default_display()
#ifdef INSIDE_GDK_X11
#include "gdkprivate-x11.h"

View File

@@ -100,34 +100,19 @@ void
gdk_xid_table_insert (XID *xid,
gpointer data)
{
g_return_if_fail (xid != NULL);
if (!xid_ht)
xid_ht = g_hash_table_new ((GHashFunc) gdk_xid_hash,
(GEqualFunc) gdk_xid_equal);
g_hash_table_insert (xid_ht, xid, data);
gdk_xid_table_insert_for_display (gdk_get_default_display (), xid, data);
}
void
gdk_xid_table_remove (XID xid)
{
if (!xid_ht)
xid_ht = g_hash_table_new ((GHashFunc) gdk_xid_hash,
(GEqualFunc) gdk_xid_equal);
g_hash_table_remove (xid_ht, &xid);
gdk_xid_table_remove_for_display (gdk_get_default_display (), xid);
}
gpointer
gdk_xid_table_lookup (XID xid)
{
gpointer data = NULL;
if (xid_ht)
data = g_hash_table_lookup (xid_ht, &xid);
return data;
gdk_xid_table_lookup_for_display (gdk_get_default_display (), xid);
}
#endif

View File

@@ -803,7 +803,7 @@ gtk_rc_parse_string (const gchar *rc_string)
{
g_return_if_fail (rc_string != NULL);
gtk_rc_parse_any (gtk_rc_context_get (gtk_settings_get_for_screen (gdk_get_default_scren ())),
gtk_rc_parse_any (gtk_rc_context_get (gtk_settings_get_for_screen (gdk_get_default_screen ())),
"-", -1, rc_string); /* FIXME */
}
#endif
@@ -916,7 +916,7 @@ gtk_rc_parse (const gchar *filename)
{
g_return_if_fail (filename != NULL);
gtk_rc_parse_file (gtk_rc_context_get (gtk_settings_get_for_screen (gdk_get_default_scren ())),
gtk_rc_parse_file (gtk_rc_context_get (gtk_settings_get_for_screen (gdk_get_default_screen ())),
filename, GTK_PATH_PRIO_RC, TRUE); /* FIXME */
}
#endif

View File

@@ -4568,14 +4568,17 @@ gtk_widget_get_screen (GtkWidget *widget)
return GTK_WINDOW (GTK_MENU (toplevel)->toplevel)->screen;
if (GTK_IS_OPTION_MENU (toplevel))
return GTK_WINDOW (GTK_MENU(GTK_OPTION_MENU (toplevel)->menu)->toplevel)->screen;
#ifdef GDK_MULTIHEAD_SAFE
g_warning (G_STRLOC ": Can't get associated screen"
" for a widget unless it is inside a toplevel GtkWindow\n"
" widget type is %s associated top level type is %s",
g_type_name (G_OBJECT_TYPE(G_OBJECT (widget))),
g_type_name (G_OBJECT_TYPE(G_OBJECT (toplevel))));
return NULL;
#else
return gdk_get_default_display ();
#endif
}
/**
* gtk_widget_has_screen: