[gtk+] API: gdk: Add gdk_window_new_toplevel()
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] API: gdk: Add gdk_window_new_toplevel()
- Date: Mon, 7 Nov 2016 01:05:26 +0000 (UTC)
commit 87f07bac6bf2ffc7c95163db44a99f9396650fc4
Author: Benjamin Otte <otte redhat com>
Date: Sun Nov 6 17:40:59 2016 +0100
API: gdk: Add gdk_window_new_toplevel()
... and use it in GTK.
docs/reference/gdk/gdk4-sections.txt | 1 +
gdk/gdkwindow.c | 35 ++++++++++++++++++++++++
gdk/gdkwindow.h | 5 +++
gtk/gtkwindow.c | 49 ++++++++++++++++------------------
4 files changed, 64 insertions(+), 26 deletions(-)
---
diff --git a/docs/reference/gdk/gdk4-sections.txt b/docs/reference/gdk/gdk4-sections.txt
index 0441f3f..12a5693 100644
--- a/docs/reference/gdk/gdk4-sections.txt
+++ b/docs/reference/gdk/gdk4-sections.txt
@@ -278,6 +278,7 @@ GdkWindowTypeHint
GdkWindowAttr
GdkWindowAttributesType
gdk_window_new
+gdk_window_new_toplevel
gdk_window_new_child
gdk_window_new_input
gdk_window_destroy
diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
index 3c57b10..846174c 100644
--- a/gdk/gdkwindow.c
+++ b/gdk/gdkwindow.c
@@ -1296,6 +1296,41 @@ gdk_window_new (GdkWindow *parent,
}
/**
+ * gdk_window_new_toplevel: (constructor)
+ * @display: the display to create the window on
+ * @event_mask: event mask (see gdk_window_set_events())
+ * @width: width of new window
+ * @height: height of new window
+ *
+ * Creates a new toplevel window. The window will be managed by the window
+ * manager.
+ *
+ * Returns: (transfer full): the new #GdkWindow
+ *
+ * Since: 3.90
+ **/
+GdkWindow *
+gdk_window_new_toplevel (GdkDisplay *display,
+ gint event_mask,
+ gint width,
+ gint height)
+{
+ GdkWindowAttr attr;
+
+ g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
+
+ attr.event_mask = event_mask;
+ attr.wclass = GDK_INPUT_OUTPUT;
+ attr.width = width;
+ attr.height = height;
+ attr.window_type = GDK_WINDOW_TOPLEVEL;
+
+ return gdk_window_new (gdk_screen_get_root_window (gdk_display_get_default_screen (display)),
+ &attr,
+ 0);
+}
+
+/**
* gdk_window_new_child: (constructor)
* @parent: the parent window
* @event_mask: event mask (see gdk_window_set_events())
diff --git a/gdk/gdkwindow.h b/gdk/gdkwindow.h
index f53338e..960c16d 100644
--- a/gdk/gdkwindow.h
+++ b/gdk/gdkwindow.h
@@ -466,6 +466,11 @@ GdkWindow* gdk_window_new (GdkWindow *parent,
GdkWindowAttr *attributes,
gint attributes_mask);
GDK_AVAILABLE_IN_3_90
+GdkWindow * gdk_window_new_toplevel (GdkDisplay *display,
+ gint event_mask,
+ int width,
+ int height);
+GDK_AVAILABLE_IN_3_90
GdkWindow * gdk_window_new_child (GdkWindow *parent,
gint event_mask,
const GdkRectangle *position);
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index 58c66c3..7cb88d7 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -6868,11 +6868,9 @@ gtk_window_realize (GtkWidget *widget)
GtkAllocation allocation;
GtkAllocation child_allocation;
GtkWindow *window;
- GdkWindow *parent_window;
GdkWindow *gdk_window;
GdkWindowAttr attributes;
GtkBorder window_border;
- gint attributes_mask;
GtkWindowPrivate *priv;
gint i;
GList *link;
@@ -6944,30 +6942,8 @@ gtk_window_realize (GtkWidget *widget)
}
else
{
- switch (priv->type)
- {
- case GTK_WINDOW_TOPLEVEL:
- attributes.window_type = GDK_WINDOW_TOPLEVEL;
- break;
- case GTK_WINDOW_POPUP:
- attributes.window_type = GDK_WINDOW_TEMP;
- break;
- default:
- g_warning (G_STRLOC": Unknown window type %d!", priv->type);
- break;
- }
-
-#ifdef GDK_WINDOWING_WAYLAND
- if (priv->use_subsurface &&
- GDK_IS_WAYLAND_DISPLAY (gtk_widget_get_display (widget)))
- attributes.window_type = GDK_WINDOW_SUBSURFACE;
-#endif
-
attributes.wclass = GDK_INPUT_OUTPUT;
- attributes_mask = 0;
- parent_window = gdk_screen_get_root_window (_gtk_window_get_screen (window));
-
_gtk_widget_get_allocation (widget, &allocation);
attributes.width = allocation.width;
attributes.height = allocation.height;
@@ -6982,11 +6958,32 @@ gtk_window_realize (GtkWidget *widget)
GDK_LEAVE_NOTIFY_MASK |
GDK_FOCUS_CHANGE_MASK |
GDK_STRUCTURE_MASK);
-
if (priv->decorated && priv->client_decorated)
attributes.event_mask |= GDK_POINTER_MOTION_MASK;
- gdk_window = gdk_window_new (parent_window, &attributes, attributes_mask);
+ switch (priv->type)
+ {
+ case GTK_WINDOW_TOPLEVEL:
+ gdk_window = gdk_window_new_toplevel (gtk_widget_get_display (widget),
+ attributes.event_mask,
+ allocation.width,
+ allocation.height);
+ break;
+ case GTK_WINDOW_POPUP:
+#ifdef GDK_WINDOWING_WAYLAND
+ if (priv->use_subsurface &&
+ GDK_IS_WAYLAND_DISPLAY (gtk_widget_get_display (widget)))
+ attributes.window_type = GDK_WINDOW_SUBSURFACE;
+ else
+#endif
+ attributes.window_type = GDK_WINDOW_TEMP;
+ gdk_window = gdk_window_new (gdk_screen_get_root_window (_gtk_window_get_screen (window)),
+ &attributes, 0);
+ break;
+ default:
+ g_warning (G_STRLOC": Unknown window type %d!", priv->type);
+ break;
+ }
}
gtk_widget_set_window (widget, gdk_window);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]