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:
Benjamin Otte
2018-04-06 20:30:34 +02:00
parent f9b578fb9f
commit d60887fa33
5 changed files with 32 additions and 28 deletions

View File

@@ -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);

View File

@@ -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);

View File

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

View File

@@ -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

View File

@@ -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