[gtk+/gtk-3-12] window: Update popover positions on ::size-allocate



commit 0dcffe3cd421555926e74002d5297d6dac0886e7
Author: Carlos Garnacho <carlosg gnome org>
Date:   Fri Aug 1 17:38:42 2014 +0200

    window: Update popover positions on ::size-allocate
    
    Popovers may get relocations optimized away if only x/y changed
    in the GtkAllocation. So make sure the toplevel updates popover
    positions on all situations.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=729140

 gtk/Makefile.am         |    1 +
 gtk/gtkpopover.c        |    4 ++--
 gtk/gtkpopoverprivate.h |   29 +++++++++++++++++++++++++++++
 gtk/gtkwindow.c         |    4 ++++
 4 files changed, 36 insertions(+), 2 deletions(-)
---
diff --git a/gtk/Makefile.am b/gtk/Makefile.am
index c281666..639bd81 100644
--- a/gtk/Makefile.am
+++ b/gtk/Makefile.am
@@ -525,6 +525,7 @@ gtk_private_h_sources =             \
        gtkpango.h              \
        gtkpathbar.h            \
        gtkpressandholdprivate.h \
+       gtkpopoverprivate.h     \
        gtkprintoperation-private.h \
        gtkprintutils.h         \
        gtkprivate.h            \
diff --git a/gtk/gtkpopover.c b/gtk/gtkpopover.c
index 6f6f3f0..28b7125 100644
--- a/gtk/gtkpopover.c
+++ b/gtk/gtkpopover.c
@@ -44,6 +44,7 @@
 #include <gdk/gdk.h>
 #include <cairo-gobject.h>
 #include "gtkpopover.h"
+#include "gtkpopoverprivate.h"
 #include "gtktypebuiltins.h"
 #include "gtkmain.h"
 #include "gtkwindowprivate.h"
@@ -109,7 +110,6 @@ struct _GtkPopoverPrivate
 static GQuark quark_widget_popovers = 0;
 static guint signals[N_SIGNALS] = { 0 };
 
-static void gtk_popover_update_position    (GtkPopover *popover);
 static void gtk_popover_update_relative_to (GtkPopover *popover,
                                             GtkWidget  *relative_to);
 
@@ -725,7 +725,7 @@ opposite_position (GtkPositionType pos)
     }
 }
 
-static void
+void
 gtk_popover_update_position (GtkPopover *popover)
 {
   GtkPopoverPrivate *priv = popover->priv;
diff --git a/gtk/gtkpopoverprivate.h b/gtk/gtkpopoverprivate.h
new file mode 100644
index 0000000..ab61eb9
--- /dev/null
+++ b/gtk/gtkpopoverprivate.h
@@ -0,0 +1,29 @@
+/* GTK - The GIMP Toolkit
+ * Copyright © 2014 Carlos Garnacho <carlosg gnome org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __GTK_POPOVER_PRIVATE_H__
+#define __GTK_POPOVER_PRIVATE_H__
+
+#include "gtkpopover.h"
+
+G_BEGIN_DECLS
+
+void gtk_popover_update_position (GtkPopover *popover);
+
+G_END_DECLS
+
+#endif /* __GTK_POPOVER_PRIVATE_H__ */
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index 72c1d35..8e14f77 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -56,6 +56,7 @@
 #include "gtkbutton.h"
 #include "gtkheaderbar.h"
 #include "gtkheaderbarprivate.h"
+#include "gtkpopoverprivate.h"
 #include "a11y/gtkwindowaccessible.h"
 #include "a11y/gtkcontaineraccessibleprivate.h"
 #include "gtkapplicationprivate.h"
@@ -7083,6 +7084,9 @@ popover_size_allocate (GtkWidget        *widget,
   if (!popover->window)
     return;
 
+  if (GTK_IS_POPOVER (popover->widget))
+    gtk_popover_update_position (GTK_POPOVER (popover->widget));
+
   popover_get_rect (popover, window, &rect);
   gdk_window_move_resize (popover->window, rect.x, rect.y,
                           rect.width, rect.height);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]