diff options
author | 2 <alexl@redhat.com> | 2001-01-22 14:35:49 +0000 |
---|---|---|
committer | Alexander Larsson <alexl@src.gnome.org> | 2001-01-22 14:35:49 +0000 |
commit | a081fe7d541c670d9017f60f3b9dd1b93affe9f5 (patch) | |
tree | aed7b0967de0d1e2bd24834b8722e9751dc72f2a /gdk/linux-fb | |
parent | 18cb3ee139977e975201b9da81794b5ff7f0826c (diff) | |
download | gdk-pixbuf-a081fe7d541c670d9017f60f3b9dd1b93affe9f5.tar.gz |
Don't leak visible_region. Use visible_region instead of region.
2001-01-22 <alexl@redhat.com>
* gdk/gdkwindow.c (gdk_window_invalidate_region):
Don't leak visible_region. Use visible_region instead of region.
* gdk/linux-fb/gdkwindow-fb.c (gdk_window_new):
Don't do extra gdk_drawable_ref(). This is not X.
(gdk_fb_window_find_focus, gdk_fb_change_focus): make sure
gdk_fb_focused_window is ref:ed.
(gdk_fb_window_send_crossing_events): Watch out for destroyed
windows.
Diffstat (limited to 'gdk/linux-fb')
-rw-r--r-- | gdk/linux-fb/gdkwindow-fb.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/gdk/linux-fb/gdkwindow-fb.c b/gdk/linux-fb/gdkwindow-fb.c index d64932830..a9df73e8c 100644 --- a/gdk/linux-fb/gdkwindow-fb.c +++ b/gdk/linux-fb/gdkwindow-fb.c @@ -254,8 +254,6 @@ gdk_window_new (GdkWindow *parent, impl->drawable_data.colormap = NULL; } - gdk_drawable_ref (window); - if (impl->drawable_data.colormap) gdk_colormap_ref (impl->drawable_data.colormap); @@ -488,7 +486,7 @@ gdk_fb_window_find_focus (void) return _gdk_fb_keyboard_grab_window; if (!gdk_fb_focused_window) - gdk_fb_focused_window = gdk_parent_root; + gdk_fb_focused_window = gdk_window_ref (gdk_parent_root); return gdk_fb_focused_window; } @@ -525,8 +523,11 @@ gdk_fb_change_focus (GdkWindow *new_focus_window) event = (GdkEventFocus *)gdk_event_make (event_win, GDK_FOCUS_CHANGE, TRUE); event->in = TRUE; } + + if (gdk_fb_focused_window) + gdk_window_unref (gdk_fb_focused_window); + gdk_fb_focused_window = gdk_window_ref (new_win); } - gdk_fb_focused_window = new_win; } static GdkWindow * @@ -597,6 +598,13 @@ gdk_fb_window_send_crossing_events (GdkWindow *src, if (a==b) return; + /* gdk_fb_window_containing_pointer might have been destroyed. + * The refcount we hold on it should keep it, but it's parents + * might have died. + */ + if (GDK_WINDOW_DESTROYED (a)) + a = gdk_parent_root; + gdk_fb_mouse_get_info (&x, &y, &my_mask); c = gdk_fb_find_common_ancestor (a, b); |