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
This commit is contained in:
Carlos Garnacho 2014-08-01 17:38:42 +02:00
parent bd07845c31
commit 5b8267028d
4 changed files with 36 additions and 2 deletions

View File

@ -625,6 +625,7 @@ gtk_private_h_sources = \
gtkorientableprivate.h \
gtkpango.h \
gtkpathbar.h \
gtkpopoverprivate.h \
gtkprintoperation-private.h \
gtkprintutils.h \
gtkprivate.h \

View File

@ -78,6 +78,7 @@
#include <gdk/gdk.h>
#include <cairo-gobject.h>
#include "gtkpopover.h"
#include "gtkpopoverprivate.h"
#include "gtktypebuiltins.h"
#include "gtkmain.h"
#include "gtkwindowprivate.h"
@ -143,7 +144,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);
@ -761,7 +761,7 @@ opposite_position (GtkPositionType pos)
}
}
static void
void
gtk_popover_update_position (GtkPopover *popover)
{
GtkPopoverPrivate *priv = popover->priv;

29
gtk/gtkpopoverprivate.h Normal file
View File

@ -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__ */

View File

@ -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"
@ -7165,6 +7166,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);