widget: Remove toplevel flag
Instead, rely on GTK_IS_ROOT(). Also implement GtkRoot on GtkWindow and GtkInvisible, the two widgets that used to set the toplevel flag before.
This commit is contained in:
@@ -23,11 +23,13 @@
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include <gdk/gdk.h>
|
||||
|
||||
#include "gtkinvisible.h"
|
||||
#include "gtkwidgetprivate.h"
|
||||
#include "gtkprivate.h"
|
||||
|
||||
#include "gtkintl.h"
|
||||
#include "gtkprivate.h"
|
||||
#include "gtkroot.h"
|
||||
#include "gtkwidgetprivate.h"
|
||||
|
||||
|
||||
/**
|
||||
@@ -69,7 +71,15 @@ static void gtk_invisible_get_property (GObject *object,
|
||||
GParamSpec *pspec);
|
||||
static void gtk_invisible_constructed (GObject *object);
|
||||
|
||||
G_DEFINE_TYPE_WITH_PRIVATE (GtkInvisible, gtk_invisible, GTK_TYPE_WIDGET)
|
||||
static void
|
||||
gtk_invisible_root_interface_init (GtkRootInterface *iface)
|
||||
{
|
||||
}
|
||||
|
||||
G_DEFINE_TYPE_WITH_CODE (GtkInvisible, gtk_invisible, GTK_TYPE_WIDGET,
|
||||
G_ADD_PRIVATE (GtkInvisible)
|
||||
G_IMPLEMENT_INTERFACE (GTK_TYPE_ROOT,
|
||||
gtk_invisible_root_interface_init))
|
||||
|
||||
static void
|
||||
gtk_invisible_class_init (GtkInvisibleClass *class)
|
||||
@@ -107,7 +117,6 @@ gtk_invisible_init (GtkInvisible *invisible)
|
||||
priv = invisible->priv;
|
||||
|
||||
gtk_widget_set_has_surface (GTK_WIDGET (invisible), TRUE);
|
||||
_gtk_widget_set_is_toplevel (GTK_WIDGET (invisible), TRUE);
|
||||
|
||||
g_object_ref_sink (invisible);
|
||||
|
||||
|
||||
@@ -1382,8 +1382,6 @@ pageDlgProc (HWND wnd, UINT message, WPARAM wparam, LPARAM lparam)
|
||||
|
||||
SetWindowLongPtrW (wnd, GWLP_USERDATA, (LONG_PTR)op);
|
||||
|
||||
_gtk_widget_set_is_toplevel (plug, TRUE);
|
||||
|
||||
gtk_window_set_modal (GTK_WINDOW (plug), TRUE);
|
||||
op_win32->embed_widget = plug;
|
||||
gtk_container_add (GTK_CONTAINER (plug), op->priv->custom_widget);
|
||||
|
||||
@@ -6438,20 +6438,9 @@ gtk_widget_get_has_surface (GtkWidget *widget)
|
||||
gboolean
|
||||
gtk_widget_is_toplevel (GtkWidget *widget)
|
||||
{
|
||||
GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
|
||||
|
||||
g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
|
||||
|
||||
return priv->toplevel;
|
||||
}
|
||||
|
||||
void
|
||||
_gtk_widget_set_is_toplevel (GtkWidget *widget,
|
||||
gboolean is_toplevel)
|
||||
{
|
||||
GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
|
||||
|
||||
priv->toplevel = is_toplevel;
|
||||
return GTK_IS_ROOT (widget);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -7013,7 +7002,7 @@ gtk_widget_verify_invariants (GtkWidget *widget)
|
||||
g_warning ("%s %p is mapped but not visible",
|
||||
G_OBJECT_TYPE_NAME (widget), widget);
|
||||
|
||||
if (!priv->toplevel)
|
||||
if (!GTK_IS_ROOT (widget))
|
||||
{
|
||||
if (!priv->child_visible)
|
||||
g_warning ("%s %p is mapped but not child_visible",
|
||||
@@ -7061,7 +7050,7 @@ gtk_widget_verify_invariants (GtkWidget *widget)
|
||||
G_OBJECT_TYPE_NAME (widget), widget);
|
||||
#endif
|
||||
}
|
||||
else if (!priv->toplevel)
|
||||
else if (!GTK_IS_ROOT (widget))
|
||||
{
|
||||
/* No parent or parent not realized on non-toplevel implies... */
|
||||
|
||||
@@ -7083,7 +7072,7 @@ gtk_widget_verify_invariants (GtkWidget *widget)
|
||||
G_OBJECT_TYPE_NAME (parent), parent,
|
||||
G_OBJECT_TYPE_NAME (widget), widget);
|
||||
}
|
||||
else if (!widget->priv->toplevel)
|
||||
else if (!GTK_IS_ROOT (widget))
|
||||
{
|
||||
/* No parent or parent not mapped on non-toplevel implies... */
|
||||
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
#include "gtkcontainer.h"
|
||||
#include "gtkcsstypesprivate.h"
|
||||
#include "gtkeventcontroller.h"
|
||||
#include "gtkroot.h"
|
||||
#include "gtksizerequestcacheprivate.h"
|
||||
#include "gtkwindowprivate.h"
|
||||
#include "gtkinvisible.h"
|
||||
@@ -54,7 +55,6 @@ struct _GtkWidgetPrivate
|
||||
#endif
|
||||
|
||||
guint in_destruction : 1;
|
||||
guint toplevel : 1;
|
||||
guint anchored : 1;
|
||||
guint no_surface : 1;
|
||||
guint no_surface_set : 1;
|
||||
@@ -215,8 +215,6 @@ void _gtk_widget_set_has_default (GtkWidget *widget,
|
||||
gboolean has_default);
|
||||
void _gtk_widget_set_has_grab (GtkWidget *widget,
|
||||
gboolean has_grab);
|
||||
void _gtk_widget_set_is_toplevel (GtkWidget *widget,
|
||||
gboolean is_toplevel);
|
||||
|
||||
void _gtk_widget_grab_notify (GtkWidget *widget,
|
||||
gboolean was_grabbed);
|
||||
@@ -388,7 +386,7 @@ _gtk_widget_get_realized (GtkWidget *widget)
|
||||
static inline gboolean
|
||||
_gtk_widget_is_toplevel (GtkWidget *widget)
|
||||
{
|
||||
return widget->priv->toplevel;
|
||||
return GTK_IS_ROOT (widget);
|
||||
}
|
||||
|
||||
static inline GtkStateFlags
|
||||
|
||||
@@ -61,6 +61,7 @@
|
||||
#include "gtkpointerfocusprivate.h"
|
||||
#include "gtkpopoverprivate.h"
|
||||
#include "gtkprivate.h"
|
||||
#include "gtkroot.h"
|
||||
#include "gtkseparatormenuitem.h"
|
||||
#include "gtksettings.h"
|
||||
#include "gtksnapshot.h"
|
||||
@@ -567,6 +568,9 @@ static void gtk_window_buildable_custom_finished (GtkBuildable *buildable,
|
||||
const gchar *tagname,
|
||||
gpointer user_data);
|
||||
|
||||
/* GtkRoot */
|
||||
static void gtk_window_root_interface_init (GtkRootInterface *iface);
|
||||
|
||||
static void ensure_state_flag_backdrop (GtkWidget *widget);
|
||||
static void unset_titlebar (GtkWindow *window);
|
||||
static void on_titlebar_title_notify (GtkHeaderBar *titlebar,
|
||||
@@ -581,7 +585,9 @@ static void gtk_window_update_debugging (void);
|
||||
G_DEFINE_TYPE_WITH_CODE (GtkWindow, gtk_window, GTK_TYPE_BIN,
|
||||
G_ADD_PRIVATE (GtkWindow)
|
||||
G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE,
|
||||
gtk_window_buildable_interface_init))
|
||||
gtk_window_buildable_interface_init)
|
||||
G_IMPLEMENT_INTERFACE (GTK_TYPE_ROOT,
|
||||
gtk_window_root_interface_init))
|
||||
|
||||
static void
|
||||
add_tab_bindings (GtkBindingSet *binding_set,
|
||||
@@ -1877,7 +1883,6 @@ gtk_window_init (GtkWindow *window)
|
||||
widget = GTK_WIDGET (window);
|
||||
|
||||
gtk_widget_set_has_surface (widget, TRUE);
|
||||
_gtk_widget_set_is_toplevel (widget, TRUE);
|
||||
_gtk_widget_set_anchored (widget, TRUE);
|
||||
|
||||
priv->title = NULL;
|
||||
@@ -2515,6 +2520,11 @@ gtk_window_buildable_custom_finished (GtkBuildable *buildable,
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_window_root_interface_init (GtkRootInterface *iface)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_window_new:
|
||||
* @type: type of window
|
||||
|
||||
Reference in New Issue
Block a user