JBR-6138 Wayland: utilize gtk_shell1 protocol to mark dialogs as modal

(cherry picked from commit ba60bfa1f4)
This commit is contained in:
Maxim Kartashev
2023-09-28 17:48:58 +04:00
committed by jbrbot
parent 1842f1b096
commit ae588df625
9 changed files with 552 additions and 18 deletions

View File

@@ -147,15 +147,12 @@ public class WLComponentPeer implements ComponentPeer {
}
public void postPaintEvent(int x, int y, int w, int h) {
if (!hasSurface()) {
log.warning("WLComponentPeer: No surface. Skipping paint request x=" + x + " y=" + y +
" width=" + w + " height=" + h);
return;
}
PaintEvent event = PaintEventDispatcher.getPaintEventDispatcher().
createPaintEvent(target, x, y, w, h);
if (event != null) {
WLToolkit.postEvent(event);
if (isVisible()) {
PaintEvent event = PaintEventDispatcher.getPaintEventDispatcher().
createPaintEvent(target, x, y, w, h);
if (event != null) {
WLToolkit.postEvent(event);
}
}
}
@@ -168,7 +165,7 @@ public class WLComponentPeer implements ComponentPeer {
}
boolean isVisible() {
return visible;
return visible && hasSurface();
}
boolean hasSurface() {
@@ -232,11 +229,12 @@ public class WLComponentPeer implements ComponentPeer {
protected void wlSetVisible(boolean v) {
this.visible = v;
if (this.visible) {
if (v) {
final String title = getTitle();
final boolean isWlPopup = targetIsWlPopup();
final int thisWidth = getWidth();
final int thisHeight = getHeight();
final boolean isModal = targetIsModal();
performLocked(() -> {
if (isWlPopup) {
Window popup = (Window) target;
@@ -262,7 +260,10 @@ public class WLComponentPeer implements ComponentPeer {
offsetX, offsetY);
} else {
nativeCreateWLSurface(nativePtr,
getParentNativePtr(target), target.getX(), target.getY(), title, appID);
getParentNativePtr(target),
target.getX(), target.getY(),
isModal,
title, appID);
}
final long wlSurfacePtr = getWLSurface(nativePtr);
WLToolkit.registerWLSurface(wlSurfacePtr, this);
@@ -291,6 +292,12 @@ public class WLComponentPeer implements ComponentPeer {
&& AWTAccessor.getWindowAccessor().getPopupParent(window) != null;
}
private boolean targetIsModal() {
return target instanceof Dialog dialog
&& (dialog.getModalityType() == Dialog.ModalityType.APPLICATION_MODAL
|| dialog.getModalityType() == Dialog.ModalityType.TOOLKIT_MODAL);
}
void configureWLSurface() {
synchronized (sizeLock) {
if (log.isLoggable(PlatformLogger.Level.FINE)) {
@@ -373,7 +380,7 @@ public class WLComponentPeer implements ComponentPeer {
public void setBounds(int x, int y, int width, int height, int op) {
final boolean positionChanged = this.x != x || this.y != y;
if (positionChanged) {
if (positionChanged && isVisible()) {
performLocked(() -> WLRobotPeer.setLocationOfWLSurface(getWLSurface(nativePtr), x, y));
}
this.x = x;
@@ -400,6 +407,7 @@ public class WLComponentPeer implements ComponentPeer {
WLToolkit.postEvent(new ComponentEvent(getTarget(), ComponentEvent.COMPONENT_RESIZED));
}
postPaintEvent();
}
@@ -845,7 +853,7 @@ public class WLComponentPeer implements ComponentPeer {
protected native long nativeCreateFrame();
protected native void nativeCreateWLSurface(long ptr, long parentPtr,
int x, int y,
int x, int y, boolean isModal,
String title, String appID);
protected native void nativeCreateWLPopup(long ptr, long parentPtr,

View File

@@ -134,9 +134,11 @@ public abstract class WLDecoratedPeer extends WLWindowPeer {
}
void postPaintEvent() {
// Full re-paint must include window decorations, if any
notifyClientDecorationsChanged();
super.postPaintEvent();
if (isVisible()) {
// Full re-paint must include window decorations, if any
notifyClientDecorationsChanged();
super.postPaintEvent();
}
}
final void paintClientDecorations(final Graphics g) {

View File

@@ -28,6 +28,7 @@
#include <jni.h>
#include <Trace.h>
#include <assert.h>
#include <gtk-shell1-client-protocol.h>
#include "jni_util.h"
#include "WLToolkit.h"
@@ -88,6 +89,7 @@ struct WLFrame {
jobject nativeFramePeer; // weak reference
struct wl_surface *wl_surface;
struct xdg_surface *xdg_surface;
struct gtk_surface1 *gtk_surface;
struct WLFrame *parent;
struct xdg_positioner *xdg_positioner;
struct activation_token_list_item *activation_token_list;
@@ -409,7 +411,7 @@ Java_sun_awt_wl_WLComponentPeer_nativeRequestUnsetFullScreen
JNIEXPORT void JNICALL
Java_sun_awt_wl_WLComponentPeer_nativeCreateWLSurface
(JNIEnv *env, jobject obj, jlong ptr, jlong parentPtr,
jint x, jint y,
jint x, jint y, jboolean isModal,
jstring title, jstring appid)
{
struct WLFrame *frame = (struct WLFrame *) ptr;
@@ -417,6 +419,9 @@ Java_sun_awt_wl_WLComponentPeer_nativeCreateWLSurface
if (frame->wl_surface) return;
frame->wl_surface = wl_compositor_create_surface(wl_compositor);
frame->xdg_surface = xdg_wm_base_get_xdg_surface(xdg_wm_base, frame->wl_surface);
if (gtk_shell1 != NULL) {
frame->gtk_surface = gtk_shell1_get_gtk_surface(gtk_shell1, frame->wl_surface);
}
wl_surface_add_listener(frame->wl_surface, &wl_surface_listener, frame);
xdg_surface_add_listener(frame->xdg_surface, &xdg_surface_listener, frame);
@@ -433,6 +438,10 @@ Java_sun_awt_wl_WLComponentPeer_nativeCreateWLSurface
xdg_toplevel_set_parent(frame->xdg_toplevel, parentFrame->xdg_toplevel);
}
if (isModal && frame->gtk_surface != NULL) {
gtk_surface1_set_modal(frame->gtk_surface);
}
#ifdef WAKEFIELD_ROBOT
if (wakefield) {
// TODO: this doesn't work quite as expected for some reason
@@ -498,6 +507,9 @@ DoHide(struct WLFrame *frame)
if (wl_surface_in_focus == frame->wl_surface) {
wl_surface_in_focus = NULL;
}
if (frame->gtk_surface != NULL) {
gtk_surface1_destroy(frame->gtk_surface);
}
xdg_surface_destroy(frame->xdg_surface);
wl_surface_destroy(frame->wl_surface);
delete_all_tokens(frame->activation_token_list);

View File

@@ -40,6 +40,8 @@
#include <unistd.h>
#include <time.h>
#include "gtk-shell1-client-protocol.h"
#include "jvm_md.h"
#include "jni_util.h"
#include "awt.h"
@@ -60,6 +62,7 @@ struct wl_shm *wl_shm = NULL;
struct wl_compositor *wl_compositor = NULL;
struct xdg_wm_base *xdg_wm_base = NULL;
struct xdg_activation_v1 *xdg_activation_v1 = NULL;
struct gtk_shell1* gtk_shell1 = NULL;
struct wl_seat *wl_seat = NULL;
struct wl_keyboard *wl_keyboard;
@@ -685,6 +688,8 @@ registry_global(void *data, struct wl_registry *wl_registry,
process_new_listener_before_end_of_init();
} else if (strcmp(interface, xdg_activation_v1_interface.name) == 0) {
xdg_activation_v1 = wl_registry_bind(wl_registry, name, &xdg_activation_v1_interface, 1);
} else if (strcmp(interface, gtk_shell1_interface.name) == 0) {
gtk_shell1 = wl_registry_bind(wl_registry, name, &gtk_shell1_interface, 1);
}
#ifdef WAKEFIELD_ROBOT
else if (strcmp(interface, wakefield_interface.name) == 0) {

View File

@@ -44,12 +44,16 @@
} \
} while(0) \
struct gtk_shell1;
extern struct wl_seat *wl_seat;
extern struct wl_display *wl_display;
extern struct wl_pointer *wl_pointer;
extern struct wl_compositor *wl_compositor;
extern struct xdg_wm_base *xdg_wm_base;
extern struct xdg_activation_v1 *xdg_activation_v1;
extern struct gtk_shell1* gtk_shell1; // optional, check for NULL before use
extern struct wl_cursor_theme *wl_cursor_theme;
extern struct wl_surface *wl_surface_in_focus;

View File

@@ -0,0 +1,430 @@
/* Generated by wayland-scanner 1.19.0 */
#ifndef GTK_CLIENT_PROTOCOL_H
#define GTK_CLIENT_PROTOCOL_H
#include <stdint.h>
#include <stddef.h>
#include "wayland-client.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @page page_gtk The gtk protocol
* @section page_ifaces_gtk Interfaces
* - @subpage page_iface_gtk_shell1 - gtk specific extensions
* - @subpage page_iface_gtk_surface1 -
*/
struct gtk_shell1;
struct gtk_surface1;
struct wl_seat;
struct wl_surface;
#ifndef GTK_SHELL1_INTERFACE
#define GTK_SHELL1_INTERFACE
/**
* @page page_iface_gtk_shell1 gtk_shell1
* @section page_iface_gtk_shell1_desc Description
*
* gtk_shell is a protocol extension providing additional features for
* clients implementing it.
* @section page_iface_gtk_shell1_api API
* See @ref iface_gtk_shell1.
*/
/**
* @defgroup iface_gtk_shell1 The gtk_shell1 interface
*
* gtk_shell is a protocol extension providing additional features for
* clients implementing it.
*/
extern const struct wl_interface gtk_shell1_interface;
#endif
#ifndef GTK_SURFACE1_INTERFACE
#define GTK_SURFACE1_INTERFACE
/**
* @page page_iface_gtk_surface1 gtk_surface1
* @section page_iface_gtk_surface1_api API
* See @ref iface_gtk_surface1.
*/
/**
* @defgroup iface_gtk_surface1 The gtk_surface1 interface
*/
extern const struct wl_interface gtk_surface1_interface;
#endif
#ifndef GTK_SHELL1_CAPABILITY_ENUM
#define GTK_SHELL1_CAPABILITY_ENUM
enum gtk_shell1_capability {
GTK_SHELL1_CAPABILITY_GLOBAL_APP_MENU = 1,
GTK_SHELL1_CAPABILITY_GLOBAL_MENU_BAR = 2,
GTK_SHELL1_CAPABILITY_DESKTOP_ICONS = 3,
};
#endif /* GTK_SHELL1_CAPABILITY_ENUM */
/**
* @ingroup iface_gtk_shell1
* @struct gtk_shell1_listener
*/
struct gtk_shell1_listener {
/**
*/
void (*capabilities)(void *data,
struct gtk_shell1 *gtk_shell1,
uint32_t capabilities);
};
/**
* @ingroup iface_gtk_shell1
*/
static inline int
gtk_shell1_add_listener(struct gtk_shell1 *gtk_shell1,
const struct gtk_shell1_listener *listener, void *data)
{
return wl_proxy_add_listener((struct wl_proxy *) gtk_shell1,
(void (**)(void)) listener, data);
}
#define GTK_SHELL1_GET_GTK_SURFACE 0
#define GTK_SHELL1_SET_STARTUP_ID 1
#define GTK_SHELL1_SYSTEM_BELL 2
#define GTK_SHELL1_NOTIFY_LAUNCH 3
/**
* @ingroup iface_gtk_shell1
*/
#define GTK_SHELL1_CAPABILITIES_SINCE_VERSION 1
/**
* @ingroup iface_gtk_shell1
*/
#define GTK_SHELL1_GET_GTK_SURFACE_SINCE_VERSION 1
/**
* @ingroup iface_gtk_shell1
*/
#define GTK_SHELL1_SET_STARTUP_ID_SINCE_VERSION 1
/**
* @ingroup iface_gtk_shell1
*/
#define GTK_SHELL1_SYSTEM_BELL_SINCE_VERSION 1
/**
* @ingroup iface_gtk_shell1
*/
#define GTK_SHELL1_NOTIFY_LAUNCH_SINCE_VERSION 3
/** @ingroup iface_gtk_shell1 */
static inline void
gtk_shell1_set_user_data(struct gtk_shell1 *gtk_shell1, void *user_data)
{
wl_proxy_set_user_data((struct wl_proxy *) gtk_shell1, user_data);
}
/** @ingroup iface_gtk_shell1 */
static inline void *
gtk_shell1_get_user_data(struct gtk_shell1 *gtk_shell1)
{
return wl_proxy_get_user_data((struct wl_proxy *) gtk_shell1);
}
static inline uint32_t
gtk_shell1_get_version(struct gtk_shell1 *gtk_shell1)
{
return wl_proxy_get_version((struct wl_proxy *) gtk_shell1);
}
/** @ingroup iface_gtk_shell1 */
static inline void
gtk_shell1_destroy(struct gtk_shell1 *gtk_shell1)
{
wl_proxy_destroy((struct wl_proxy *) gtk_shell1);
}
/**
* @ingroup iface_gtk_shell1
*/
static inline struct gtk_surface1 *
gtk_shell1_get_gtk_surface(struct gtk_shell1 *gtk_shell1, struct wl_surface *surface)
{
struct wl_proxy *gtk_surface;
gtk_surface = wl_proxy_marshal_constructor((struct wl_proxy *) gtk_shell1,
GTK_SHELL1_GET_GTK_SURFACE, &gtk_surface1_interface, NULL, surface);
return (struct gtk_surface1 *) gtk_surface;
}
/**
* @ingroup iface_gtk_shell1
*/
static inline void
gtk_shell1_set_startup_id(struct gtk_shell1 *gtk_shell1, const char *startup_id)
{
wl_proxy_marshal((struct wl_proxy *) gtk_shell1,
GTK_SHELL1_SET_STARTUP_ID, startup_id);
}
/**
* @ingroup iface_gtk_shell1
*/
static inline void
gtk_shell1_system_bell(struct gtk_shell1 *gtk_shell1, struct gtk_surface1 *surface)
{
wl_proxy_marshal((struct wl_proxy *) gtk_shell1,
GTK_SHELL1_SYSTEM_BELL, surface);
}
/**
* @ingroup iface_gtk_shell1
*/
static inline void
gtk_shell1_notify_launch(struct gtk_shell1 *gtk_shell1, const char *startup_id)
{
wl_proxy_marshal((struct wl_proxy *) gtk_shell1,
GTK_SHELL1_NOTIFY_LAUNCH, startup_id);
}
#ifndef GTK_SURFACE1_STATE_ENUM
#define GTK_SURFACE1_STATE_ENUM
enum gtk_surface1_state {
GTK_SURFACE1_STATE_TILED = 1,
/**
* @since 2
*/
GTK_SURFACE1_STATE_TILED_TOP = 2,
/**
* @since 2
*/
GTK_SURFACE1_STATE_TILED_RIGHT = 3,
/**
* @since 2
*/
GTK_SURFACE1_STATE_TILED_BOTTOM = 4,
/**
* @since 2
*/
GTK_SURFACE1_STATE_TILED_LEFT = 5,
};
/**
* @ingroup iface_gtk_surface1
*/
#define GTK_SURFACE1_STATE_TILED_TOP_SINCE_VERSION 2
/**
* @ingroup iface_gtk_surface1
*/
#define GTK_SURFACE1_STATE_TILED_RIGHT_SINCE_VERSION 2
/**
* @ingroup iface_gtk_surface1
*/
#define GTK_SURFACE1_STATE_TILED_BOTTOM_SINCE_VERSION 2
/**
* @ingroup iface_gtk_surface1
*/
#define GTK_SURFACE1_STATE_TILED_LEFT_SINCE_VERSION 2
#endif /* GTK_SURFACE1_STATE_ENUM */
#ifndef GTK_SURFACE1_EDGE_CONSTRAINT_ENUM
#define GTK_SURFACE1_EDGE_CONSTRAINT_ENUM
enum gtk_surface1_edge_constraint {
GTK_SURFACE1_EDGE_CONSTRAINT_RESIZABLE_TOP = 1,
GTK_SURFACE1_EDGE_CONSTRAINT_RESIZABLE_RIGHT = 2,
GTK_SURFACE1_EDGE_CONSTRAINT_RESIZABLE_BOTTOM = 3,
GTK_SURFACE1_EDGE_CONSTRAINT_RESIZABLE_LEFT = 4,
};
#endif /* GTK_SURFACE1_EDGE_CONSTRAINT_ENUM */
#ifndef GTK_SURFACE1_GESTURE_ENUM
#define GTK_SURFACE1_GESTURE_ENUM
enum gtk_surface1_gesture {
GTK_SURFACE1_GESTURE_DOUBLE_CLICK = 1,
GTK_SURFACE1_GESTURE_RIGHT_CLICK = 2,
GTK_SURFACE1_GESTURE_MIDDLE_CLICK = 3,
};
#endif /* GTK_SURFACE1_GESTURE_ENUM */
#ifndef GTK_SURFACE1_ERROR_ENUM
#define GTK_SURFACE1_ERROR_ENUM
enum gtk_surface1_error {
GTK_SURFACE1_ERROR_INVALID_GESTURE = 0,
};
#endif /* GTK_SURFACE1_ERROR_ENUM */
/**
* @ingroup iface_gtk_surface1
* @struct gtk_surface1_listener
*/
struct gtk_surface1_listener {
/**
*/
void (*configure)(void *data,
struct gtk_surface1 *gtk_surface1,
struct wl_array *states);
/**
* @since 2
*/
void (*configure_edges)(void *data,
struct gtk_surface1 *gtk_surface1,
struct wl_array *constraints);
};
/**
* @ingroup iface_gtk_surface1
*/
static inline int
gtk_surface1_add_listener(struct gtk_surface1 *gtk_surface1,
const struct gtk_surface1_listener *listener, void *data)
{
return wl_proxy_add_listener((struct wl_proxy *) gtk_surface1,
(void (**)(void)) listener, data);
}
#define GTK_SURFACE1_SET_DBUS_PROPERTIES 0
#define GTK_SURFACE1_SET_MODAL 1
#define GTK_SURFACE1_UNSET_MODAL 2
#define GTK_SURFACE1_PRESENT 3
#define GTK_SURFACE1_REQUEST_FOCUS 4
#define GTK_SURFACE1_RELEASE 5
#define GTK_SURFACE1_TITLEBAR_GESTURE 6
/**
* @ingroup iface_gtk_surface1
*/
#define GTK_SURFACE1_CONFIGURE_SINCE_VERSION 1
/**
* @ingroup iface_gtk_surface1
*/
#define GTK_SURFACE1_CONFIGURE_EDGES_SINCE_VERSION 2
/**
* @ingroup iface_gtk_surface1
*/
#define GTK_SURFACE1_SET_DBUS_PROPERTIES_SINCE_VERSION 1
/**
* @ingroup iface_gtk_surface1
*/
#define GTK_SURFACE1_SET_MODAL_SINCE_VERSION 1
/**
* @ingroup iface_gtk_surface1
*/
#define GTK_SURFACE1_UNSET_MODAL_SINCE_VERSION 1
/**
* @ingroup iface_gtk_surface1
*/
#define GTK_SURFACE1_PRESENT_SINCE_VERSION 1
/**
* @ingroup iface_gtk_surface1
*/
#define GTK_SURFACE1_REQUEST_FOCUS_SINCE_VERSION 3
/**
* @ingroup iface_gtk_surface1
*/
#define GTK_SURFACE1_RELEASE_SINCE_VERSION 4
/**
* @ingroup iface_gtk_surface1
*/
#define GTK_SURFACE1_TITLEBAR_GESTURE_SINCE_VERSION 5
/** @ingroup iface_gtk_surface1 */
static inline void
gtk_surface1_set_user_data(struct gtk_surface1 *gtk_surface1, void *user_data)
{
wl_proxy_set_user_data((struct wl_proxy *) gtk_surface1, user_data);
}
/** @ingroup iface_gtk_surface1 */
static inline void *
gtk_surface1_get_user_data(struct gtk_surface1 *gtk_surface1)
{
return wl_proxy_get_user_data((struct wl_proxy *) gtk_surface1);
}
static inline uint32_t
gtk_surface1_get_version(struct gtk_surface1 *gtk_surface1)
{
return wl_proxy_get_version((struct wl_proxy *) gtk_surface1);
}
/** @ingroup iface_gtk_surface1 */
static inline void
gtk_surface1_destroy(struct gtk_surface1 *gtk_surface1)
{
wl_proxy_destroy((struct wl_proxy *) gtk_surface1);
}
/**
* @ingroup iface_gtk_surface1
*/
static inline void
gtk_surface1_set_dbus_properties(struct gtk_surface1 *gtk_surface1, const char *application_id, const char *app_menu_path, const char *menubar_path, const char *window_object_path, const char *application_object_path, const char *unique_bus_name)
{
wl_proxy_marshal((struct wl_proxy *) gtk_surface1,
GTK_SURFACE1_SET_DBUS_PROPERTIES, application_id, app_menu_path, menubar_path, window_object_path, application_object_path, unique_bus_name);
}
/**
* @ingroup iface_gtk_surface1
*/
static inline void
gtk_surface1_set_modal(struct gtk_surface1 *gtk_surface1)
{
wl_proxy_marshal((struct wl_proxy *) gtk_surface1,
GTK_SURFACE1_SET_MODAL);
}
/**
* @ingroup iface_gtk_surface1
*/
static inline void
gtk_surface1_unset_modal(struct gtk_surface1 *gtk_surface1)
{
wl_proxy_marshal((struct wl_proxy *) gtk_surface1,
GTK_SURFACE1_UNSET_MODAL);
}
/**
* @ingroup iface_gtk_surface1
*/
static inline void
gtk_surface1_present(struct gtk_surface1 *gtk_surface1, uint32_t time)
{
wl_proxy_marshal((struct wl_proxy *) gtk_surface1,
GTK_SURFACE1_PRESENT, time);
}
/**
* @ingroup iface_gtk_surface1
*/
static inline void
gtk_surface1_request_focus(struct gtk_surface1 *gtk_surface1, const char *startup_id)
{
wl_proxy_marshal((struct wl_proxy *) gtk_surface1,
GTK_SURFACE1_REQUEST_FOCUS, startup_id);
}
/**
* @ingroup iface_gtk_surface1
*/
static inline void
gtk_surface1_release(struct gtk_surface1 *gtk_surface1)
{
wl_proxy_marshal((struct wl_proxy *) gtk_surface1,
GTK_SURFACE1_RELEASE);
wl_proxy_destroy((struct wl_proxy *) gtk_surface1);
}
/**
* @ingroup iface_gtk_surface1
*/
static inline void
gtk_surface1_titlebar_gesture(struct gtk_surface1 *gtk_surface1, uint32_t serial, struct wl_seat *seat, uint32_t gesture)
{
wl_proxy_marshal((struct wl_proxy *) gtk_surface1,
GTK_SURFACE1_TITLEBAR_GESTURE, serial, seat, gesture);
}
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -0,0 +1,73 @@
/* Generated by wayland-scanner 1.19.0 */
#include <stdlib.h>
#include <stdint.h>
#include "wayland-util.h"
#ifndef __has_attribute
# define __has_attribute(x) 0 /* Compatibility with non-clang compilers. */
#endif
#if (__has_attribute(visibility) || defined(__GNUC__) && __GNUC__ >= 4)
#define WL_PRIVATE __attribute__ ((visibility("hidden")))
#else
#define WL_PRIVATE
#endif
extern const struct wl_interface gtk_surface1_interface;
extern const struct wl_interface wl_seat_interface;
extern const struct wl_interface wl_surface_interface;
static const struct wl_interface *gtk_types[] = {
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
&gtk_surface1_interface,
&wl_surface_interface,
&gtk_surface1_interface,
NULL,
&wl_seat_interface,
NULL,
};
static const struct wl_message gtk_shell1_requests[] = {
{ "get_gtk_surface", "no", gtk_types + 6 },
{ "set_startup_id", "?s", gtk_types + 0 },
{ "system_bell", "?o", gtk_types + 8 },
{ "notify_launch", "3s", gtk_types + 0 },
};
static const struct wl_message gtk_shell1_events[] = {
{ "capabilities", "u", gtk_types + 0 },
};
WL_PRIVATE const struct wl_interface gtk_shell1_interface = {
"gtk_shell1", 5,
4, gtk_shell1_requests,
1, gtk_shell1_events,
};
static const struct wl_message gtk_surface1_requests[] = {
{ "set_dbus_properties", "?s?s?s?s?s?s", gtk_types + 0 },
{ "set_modal", "", gtk_types + 0 },
{ "unset_modal", "", gtk_types + 0 },
{ "present", "u", gtk_types + 0 },
{ "request_focus", "3?s", gtk_types + 0 },
{ "release", "4", gtk_types + 0 },
{ "titlebar_gesture", "5uou", gtk_types + 9 },
};
static const struct wl_message gtk_surface1_events[] = {
{ "configure", "a", gtk_types + 0 },
{ "configure_edges", "2a", gtk_types + 0 },
};
WL_PRIVATE const struct wl_interface gtk_surface1_interface = {
"gtk_surface1", 5,
7, gtk_surface1_requests,
2, gtk_surface1_events,
};

View File