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
					Michael Natterer
				
			
				
					committed by
					
						 Michael Natterer
						Michael Natterer
					
				
			
			
				
	
			
			
			 Michael Natterer
						Michael Natterer
					
				
			
						parent
						
							1571574ced
						
					
				
				
					commit
					8bdc0bf97c
				
			| @ -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) | ||||
| { | ||||
|  | ||||
		Reference in New Issue
	
	Block a user