Applied patch from maemo-gtk that addresses many issues wrt display

2005-11-10  Michael Natterer  <mitch@imendio.com>

	Applied patch from maemo-gtk that addresses many issues wrt
	display migration and display closing (bug #85715).

	* gdk/gdkdisplay.c (gdk_display_dispose): don't just set the
	default display to NULL when it's closed. Instead set the most
	recently opened display as new default (if one exists).

	* gdk/gdkpango.c (on_renderer_display_closed): fixed signature
	of this callback.

	* gdk/gdkscreen.c (gdk_screen_dispose): check if the GCs still
	exist before unrefing them.

	* gdk/gdkwindow.c (_gdk_window_destroy_hierarchy): if the screen
	is closed, allow destruction of the root window.

	* gdk/x11/gdkdisplay-x11.c: moved some stuff from finalize() to
	dispose(), free stuff that was leaked before.

	* gdk/x11/gdkevents-x11.c (_gdk_x11_events_uninit_screen): check if
	the xsettings_client still exists before destroying it.

	* gdk/x11/gdkkeys-x11.c: added finalization and free the allocated
	X resources.

	* gdk/x11/gdkpixmap-x11.c: moved stuff from finalize() to new
	dispose() implementation.

	* gdk/x11/gdkscreen-x11.c: moved stuff from finalize() to
	dispose() and check if it still exists before unrefing it. Set
	their pointers to NULL/None *after* upchaining in dispose(),
	because X11 implementations of members of the parent class still
	need them for their own destruction.

	* gdk/x11/gdkvisual-x11.c: removed finalize() implementation which
	was g_error()ing when finalizing a visual.

	* gtk/gtkclipboard.c (gtk_clipboard_finalize): don't use
	get_clipboard_widget() because it would create the widget if it
	doesn't exist. Use g_object_get_data() directly instead.

	* gtk/gtktextdisplay.c (on_renderer_display_closed): fixed signature
	of this callback.
This commit is contained in:
Michael Natterer
2005-11-10 12:09:42 +00:00
committed by Michael Natterer
parent 1571574ced
commit 8bdc0bf97c
14 changed files with 270 additions and 89 deletions

View File

@ -53,7 +53,8 @@
# endif
#endif /* HAVE_XKB */
typedef struct _GdkKeymapX11 GdkKeymapX11;
typedef struct _GdkKeymapX11 GdkKeymapX11;
typedef struct _GdkKeymapClass GdkKeymapX11Class;
#define GDK_TYPE_KEYMAP_X11 (gdk_keymap_x11_get_type ())
#define GDK_KEYMAP_X11(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_KEYMAP_X11, GdkKeymapX11))
@ -103,8 +104,12 @@ struct _GdkKeymapX11
#define KEYMAP_USE_XKB(keymap) GDK_DISPLAY_X11 ((keymap)->display)->use_xkb
#define KEYMAP_XDISPLAY(keymap) GDK_DISPLAY_XDISPLAY ((keymap)->display)
static GType gdk_keymap_x11_get_type (void);
static void gdk_keymap_x11_init (GdkKeymapX11 *keymap);
static GType gdk_keymap_x11_get_type (void);
static void gdk_keymap_x11_class_init (GdkKeymapX11Class *klass);
static void gdk_keymap_x11_init (GdkKeymapX11 *keymap);
static void gdk_keymap_x11_finalize (GObject *object);
static GdkKeymapClass *parent_class = NULL;
static GType
gdk_keymap_x11_get_type (void)
@ -118,7 +123,7 @@ gdk_keymap_x11_get_type (void)
sizeof (GdkKeymapClass),
(GBaseInitFunc) NULL,
(GBaseFinalizeFunc) NULL,
(GClassInitFunc) NULL,
(GClassInitFunc) gdk_keymap_x11_class_init,
NULL, /* class_finalize */
NULL, /* class_data */
sizeof (GdkKeymapX11),
@ -134,6 +139,16 @@ gdk_keymap_x11_get_type (void)
return object_type;
}
static void
gdk_keymap_x11_class_init (GdkKeymapX11Class *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
parent_class = g_type_class_peek_parent (klass);
object_class->finalize = gdk_keymap_x11_finalize;
}
static void
gdk_keymap_x11_init (GdkKeymapX11 *keymap)
{
@ -159,6 +174,25 @@ gdk_keymap_x11_init (GdkKeymapX11 *keymap)
}
static void
gdk_keymap_x11_finalize (GObject *object)
{
GdkKeymapX11 *keymap_x11 = GDK_KEYMAP_X11 (object);
if (keymap_x11->keymap)
XFree (keymap_x11->keymap);
if (keymap_x11->mod_keymap)
XFreeModifiermap (keymap_x11->mod_keymap);
#ifdef HAVE_XKB
if (keymap_x11->xkb_desc)
XkbFreeClientMap (keymap_x11->xkb_desc, 0, True);
#endif
G_OBJECT_CLASS (parent_class)->finalize (object);
}
static inline void
update_keyrange (GdkKeymapX11 *keymap_x11)
{