Commit 8818d8a1 authored by Jasper St. Pierre's avatar Jasper St. Pierre
Browse files

gtkwindow: Export our custom frame extents

This allows CSD windows to be maximized, tiled, and constrained
parent 129fc6ea
......@@ -3601,6 +3601,45 @@ gdk_x11_window_set_hide_titlebar_when_maximized (GdkWindow *window,
* gdk_x11_window_set_frame_extents:
* @window: (type GdkX11Window): a #GdkWindow
* @left: The left extent
* @right: The right extent
* @top: The top extent
* @bottom: The bottom extent
* Newer GTK+ windows using client-side decorations use extra geometry
* around their frames for effects like shadows and invisible borders.
* Window managers that want to maximize windows or snap to edges need
* to know where the extents of the actual frame lie, so that users
* don't feel like windows are snapping against random invisible edges.
* Note that this property is automatically updated by GTK+, so this
* function should only be used by applications which do not use GTK+
* to create toplevel windows.
* Since: 3.10
gdk_x11_window_set_frame_extents (GdkWindow *window,
int left,
int right,
int top,
int bottom)
Atom frame_extents;
gulong data[4] = { left, right, top, bottom };
frame_extents = gdk_x11_get_xatom_by_name_for_display (gdk_window_get_display (window),
XChangeProperty (GDK_WINDOW_XDISPLAY (window),
GDK_WINDOW_XID (window),
frame_extents, XA_CARDINAL,
32, PropModeReplace,
(guchar *) &data, 4);
* gdk_x11_window_set_theme_variant:
* @window: (type GdkX11Window): a #GdkWindow
......@@ -65,6 +65,12 @@ void gdk_x11_window_set_utf8_property (GdkWindow *window,
void gdk_x11_window_set_theme_variant (GdkWindow *window,
char *variant);
void gdk_x11_window_set_frame_extents (GdkWindow *window,
int left,
int right,
int top,
int bottom);
void gdk_x11_window_set_hide_titlebar_when_maximized (GdkWindow *window,
gboolean hide_titlebar_when_maximized);
......@@ -6390,6 +6390,24 @@ update_border_windows (GtkWindow *window)
static void
update_frame_extents (GtkWindow *window,
GtkBorder *border)
GdkWindow *gdk_window;
gdk_window = gtk_widget_get_window (GTK_WIDGET (window));
if (GDK_IS_X11_WINDOW (gdk_window))
gdk_x11_window_set_frame_extents (gdk_window,
/* _gtk_window_set_allocation:
* @window: a #GtkWindow
* @allocation: the original allocation for the window
......@@ -6435,6 +6453,9 @@ _gtk_window_set_allocation (GtkWindow *window,
priv->title_height = 0;
if (priv->client_decorated)
update_frame_extents (window, &window_border);
if (priv->title_box != NULL &&
priv->decorated &&
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment