mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-26 13:41:07 +00:00
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:
parent
bd07845c31
commit
5b8267028d
@ -625,6 +625,7 @@ gtk_private_h_sources = \
|
||||
gtkorientableprivate.h \
|
||||
gtkpango.h \
|
||||
gtkpathbar.h \
|
||||
gtkpopoverprivate.h \
|
||||
gtkprintoperation-private.h \
|
||||
gtkprintutils.h \
|
||||
gtkprivate.h \
|
||||
|
@ -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
29
gtk/gtkpopoverprivate.h
Normal 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__ */
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user