surface: Start sketching a new surface type

Start by adding a constructor. We have to call it
gdk_surface_new_popup_full for now, since gdk_surface_new_popup
is taken. This may be reshuffled later.
This commit is contained in:
Matthias Clasen 2019-03-19 20:05:17 -04:00
parent 2764652b3c
commit 9e6d8becbb
2 changed files with 39 additions and 0 deletions

View File

@ -836,6 +836,42 @@ gdk_surface_new_popup (GdkDisplay *display,
return gdk_surface_new (display, NULL, &attr);
}
/**
* gdk_surface_new_popup_full: (constructor)
* @display: the display to create the surface on
* @parent: the parent surface to attach the surface to
*
* Create a new popup surface.
* The surface will be attached to @parent and can
* be positioned relative to it using
* gdk_surface_move_to_rect().
*
* Returns: (transfer full): a new #GdkSurface
*/
GdkSurface *
gdk_surface_new_popup_full (GdkDisplay *display,
GdkSurface *parent)
{
GdkSurface *surface;
GdkSurfaceAttr attr;
g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
g_return_val_if_fail (GDK_IS_SURFACE (parent), NULL);
attr.wclass = GDK_INPUT_OUTPUT;
attr.x = 0;
attr.y = 0;
attr.width = 100;
attr.height = 100;
attr.surface_type = GDK_SURFACE_TEMP;
surface = gdk_surface_new (display, NULL, &attr);
gdk_surface_set_transient_for (surface, parent);
gdk_surface_set_type_hint (surface, GDK_SURFACE_TYPE_HINT_MENU);
return surface;
}
/**
* gdk_surface_new_temp: (constructor)
* @display: the display to create the surface on

View File

@ -440,6 +440,9 @@ GDK_AVAILABLE_IN_ALL
GdkSurface * gdk_surface_new_popup (GdkDisplay *display,
const GdkRectangle *position);
GDK_AVAILABLE_IN_ALL
GdkSurface * gdk_surface_new_popup_full (GdkDisplay *display,
GdkSurface *parent);
GDK_AVAILABLE_IN_ALL
GdkSurface * gdk_surface_new_temp (GdkDisplay *display);
GDK_AVAILABLE_IN_ALL
GdkSurface * gdk_surface_new_child (GdkSurface *parent,