[gtksourceview/wip/chergert/gsv-gtk4: 92/192] completion: use gdk_surface_move_to_rect()
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtksourceview/wip/chergert/gsv-gtk4: 92/192] completion: use gdk_surface_move_to_rect()
- Date: Fri, 7 Aug 2020 18:31:07 +0000 (UTC)
commit 2074144bea4b7a0d6f24365482544a736bc6698a
Author: Christian Hergert <chergert redhat com>
Date: Wed Jan 15 14:11:55 2020 -0800
completion: use gdk_surface_move_to_rect()
This avoids manual control over placement and instead relies on the
window manager (or GDK on X11) to place the window in an appropriate
place using relative gravity of windows.
gtksourceview/gtksourcecompletion.c | 56 ++++++++++++++-----------------------
1 file changed, 21 insertions(+), 35 deletions(-)
---
diff --git a/gtksourceview/gtksourcecompletion.c b/gtksourceview/gtksourcecompletion.c
index 9b407b6f7..d6ac4f475 100644
--- a/gtksourceview/gtksourcecompletion.c
+++ b/gtksourceview/gtksourcecompletion.c
@@ -738,34 +738,34 @@ gtk_source_completion_activate_proposal (GtkSourceCompletion *completion)
static void
update_info_position (GtkSourceCompletion *completion)
{
- GdkDisplay *display;
- GdkMonitor *monitor;
- GdkWindow *window;
+ GdkSurface *main_surface;
+ GdkSurface *info_surface;
GdkRectangle geom;
- gint x, y;
- gint width, height;
- gint info_width;
- gtk_window_get_position (GTK_WINDOW (completion->main_window), &x, &y);
- gtk_window_get_size (GTK_WINDOW (completion->main_window), &width, &height);
- gtk_window_get_size (GTK_WINDOW (completion->info_window), &info_width, NULL);
-
- display = gtk_widget_get_display (GTK_WIDGET (completion->main_window));
- window = gtk_widget_get_window (GTK_WIDGET (completion->main_window));
- monitor = gdk_display_get_monitor_at_window (display, window);
- gdk_monitor_get_geometry (monitor, &geom);
-
- /* Determine on which side to place it */
- if (x + width + info_width >= geom.width)
+ if (!GTK_IS_NATIVE (completion->main_window) ||
+ !GTK_IS_NATIVE (completion->info_window))
{
- x -= info_width;
+ return;
}
- else
+
+ main_surface = gtk_native_get_surface (GTK_NATIVE (completion->main_window));
+ info_surface = gtk_native_get_surface (GTK_NATIVE (completion->info_window));
+
+ if (main_surface == NULL || info_surface == NULL)
{
- x += width;
+ return;
}
- gtk_window_move (GTK_WINDOW (completion->info_window), x, y);
+ gdk_surface_get_position (main_surface, &geom.x, &geom.y);
+ geom.width = gdk_surface_get_width (main_surface);
+ geom.height = gdk_surface_get_height (main_surface);
+
+ gdk_surface_move_to_rect (info_surface,
+ &geom,
+ GDK_GRAVITY_NORTH_EAST,
+ GDK_GRAVITY_NORTH_WEST,
+ GDK_ANCHOR_FLIP_X,
+ 0, 0);
}
static GtkSourceCompletionProvider *
@@ -1261,15 +1261,6 @@ selection_changed_cb (GtkTreeSelection *selection,
}
}
-static gboolean
-gtk_source_completion_configure_event (GtkWidget *widget,
- GdkEventConfigure *event,
- GtkSourceCompletion *completion)
-{
- update_info_position (completion);
- return FALSE;
-}
-
static gboolean
hide_completion_cb (GtkSourceCompletion *completion)
{
@@ -2182,11 +2173,6 @@ init_main_window (GtkSourceCompletion *completion,
gtk_window_set_attached_to (GTK_WINDOW (completion->main_window),
GTK_WIDGET (completion->view));
- g_signal_connect (completion->main_window,
- "configure-event",
- G_CALLBACK (gtk_source_completion_configure_event),
- completion);
-
g_signal_connect_swapped (completion->main_window,
"size-allocate",
G_CALLBACK (update_window_position),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]