[gtk+/wip/attachment-rectangle] x11: set position on map
- From: William Hua <williamhua src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/attachment-rectangle] x11: set position on map
- Date: Wed, 26 Aug 2015 12:32:33 +0000 (UTC)
commit a10a53a369be23102bcebac820f37eb8f307f5c4
Author: William Hua <william hua canonical com>
Date: Wed Aug 26 13:23:57 2015 +0100
x11: set position on map
If the attachment rectangle is set before the window is mapped, the
window's position isn't updated correctly. To fix it, we queue the
details of the request and set it when the window is mapped.
gdk/x11/gdkdisplay-x11.c | 16 ++++++++++++++--
gdk/x11/gdkwindow-x11.c | 10 +++++++++-
gdk/x11/gdkwindow-x11.h | 4 ++++
3 files changed, 27 insertions(+), 3 deletions(-)
---
diff --git a/gdk/x11/gdkdisplay-x11.c b/gdk/x11/gdkdisplay-x11.c
index f2824b6..df35c5f 100644
--- a/gdk/x11/gdkdisplay-x11.c
+++ b/gdk/x11/gdkdisplay-x11.c
@@ -705,7 +705,10 @@ gdk_x11_display_translate_event (GdkEventTranslator *translator,
}
if (toplevel)
- gdk_window_freeze_toplevel_updates (window);
+ {
+ gdk_window_freeze_toplevel_updates (window);
+ toplevel->actually_mapped = FALSE;
+ }
_gdk_x11_window_grab_check_unmap (window, xevent->xany.serial);
}
@@ -729,7 +732,16 @@ gdk_x11_display_translate_event (GdkEventTranslator *translator,
0);
if (toplevel)
- gdk_window_thaw_toplevel_updates (window);
+ {
+ if (toplevel->move_on_map)
+ {
+ gdk_window_move (window, toplevel->initial_position.x, toplevel->initial_position.y);
+ toplevel->move_on_map = FALSE;
+ }
+
+ toplevel->actually_mapped = TRUE;
+ gdk_window_thaw_toplevel_updates (window);
+ }
}
break;
diff --git a/gdk/x11/gdkwindow-x11.c b/gdk/x11/gdkwindow-x11.c
index 30750e1..9018185 100644
--- a/gdk/x11/gdkwindow-x11.c
+++ b/gdk/x11/gdkwindow-x11.c
@@ -5687,6 +5687,7 @@ gdk_x11_window_set_attachment_rectangle (GdkWindow *window,
const GdkRectangle *rect,
GdkAttachmentOptions options)
{
+ GdkWindowImplX11 *impl = GDK_WINDOW_IMPL_X11 (window->impl);
gint x;
gint y;
@@ -5719,7 +5720,14 @@ gdk_x11_window_set_attachment_rectangle (GdkWindow *window,
y += origin->y;
}
- gdk_window_move (window, x, y);
+ if (impl->toplevel && !impl->toplevel->actually_mapped)
+ {
+ impl->toplevel->initial_position.x = x;
+ impl->toplevel->initial_position.y = y;
+ impl->toplevel->move_on_map = TRUE;
+ }
+ else
+ gdk_window_move (window, x, y);
}
static void
diff --git a/gdk/x11/gdkwindow-x11.h b/gdk/x11/gdkwindow-x11.h
index 2bc2417..da94d69 100644
--- a/gdk/x11/gdkwindow-x11.h
+++ b/gdk/x11/gdkwindow-x11.h
@@ -147,6 +147,10 @@ struct _GdkToplevelX11
guint pending_counter_value_is_extended : 1;
guint configure_counter_value_is_extended : 1;
+ guint actually_mapped : 1;
+ guint move_on_map : 1;
+ GdkPoint initial_position;
+
gulong map_serial; /* Serial of last transition from unmapped */
cairo_surface_t *icon_pixmap;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]