forked from AuroraMiddleware/gtk
gtkwindow: Export our custom frame extents
This allows CSD windows to be maximized, tiled, and constrained properly. https://bugzilla.gnome.org/show_bug.cgi?id=705765
This commit is contained in:
parent
129fc6ea3a
commit
8818d8a19b
@ -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
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
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),
|
||||||
|
"_GTK_FRAME_EXTENTS");
|
||||||
|
XChangeProperty (GDK_WINDOW_XDISPLAY (window),
|
||||||
|
GDK_WINDOW_XID (window),
|
||||||
|
frame_extents, XA_CARDINAL,
|
||||||
|
32, PropModeReplace,
|
||||||
|
(guchar *) &data, 4);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gdk_x11_window_set_theme_variant:
|
* gdk_x11_window_set_theme_variant:
|
||||||
* @window: (type GdkX11Window): a #GdkWindow
|
* @window: (type GdkX11Window): a #GdkWindow
|
||||||
|
@ -65,6 +65,12 @@ void gdk_x11_window_set_utf8_property (GdkWindow *window,
|
|||||||
GDK_AVAILABLE_IN_3_2
|
GDK_AVAILABLE_IN_3_2
|
||||||
void gdk_x11_window_set_theme_variant (GdkWindow *window,
|
void gdk_x11_window_set_theme_variant (GdkWindow *window,
|
||||||
char *variant);
|
char *variant);
|
||||||
|
GDK_AVAILABLE_IN_3_10
|
||||||
|
void gdk_x11_window_set_frame_extents (GdkWindow *window,
|
||||||
|
int left,
|
||||||
|
int right,
|
||||||
|
int top,
|
||||||
|
int bottom);
|
||||||
GDK_AVAILABLE_IN_3_4
|
GDK_AVAILABLE_IN_3_4
|
||||||
void gdk_x11_window_set_hide_titlebar_when_maximized (GdkWindow *window,
|
void gdk_x11_window_set_hide_titlebar_when_maximized (GdkWindow *window,
|
||||||
gboolean hide_titlebar_when_maximized);
|
gboolean hide_titlebar_when_maximized);
|
||||||
|
@ -6390,6 +6390,24 @@ update_border_windows (GtkWindow *window)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
update_frame_extents (GtkWindow *window,
|
||||||
|
GtkBorder *border)
|
||||||
|
{
|
||||||
|
#ifdef GDK_WINDOWING_X11
|
||||||
|
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,
|
||||||
|
border->left,
|
||||||
|
border->right,
|
||||||
|
border->top,
|
||||||
|
border->bottom);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/* _gtk_window_set_allocation:
|
/* _gtk_window_set_allocation:
|
||||||
* @window: a #GtkWindow
|
* @window: a #GtkWindow
|
||||||
* @allocation: the original allocation for the window
|
* @allocation: the original allocation for the window
|
||||||
@ -6435,6 +6453,9 @@ _gtk_window_set_allocation (GtkWindow *window,
|
|||||||
|
|
||||||
priv->title_height = 0;
|
priv->title_height = 0;
|
||||||
|
|
||||||
|
if (priv->client_decorated)
|
||||||
|
update_frame_extents (window, &window_border);
|
||||||
|
|
||||||
if (priv->title_box != NULL &&
|
if (priv->title_box != NULL &&
|
||||||
priv->decorated &&
|
priv->decorated &&
|
||||||
!priv->fullscreen)
|
!priv->fullscreen)
|
||||||
|
Loading…
Reference in New Issue
Block a user