wayland: Get tiled state from gtk_shell instead of xdg_shell
Use our the 'tiled' entry from our new 'state' enum sent via xdg_surface.configure. https://bugzilla.gnome.org/show_bug.cgi?id=769937
This commit is contained in:
@ -45,13 +45,6 @@ enum {
|
|||||||
|
|
||||||
static guint signals[LAST_SIGNAL];
|
static guint signals[LAST_SIGNAL];
|
||||||
|
|
||||||
/*
|
|
||||||
* Define GNOME additional states to xdg-shell
|
|
||||||
* The current reserved range for GNOME is 0x1000 - 0x1FFF
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define XDG_SURFACE_STATE_GNOME_TILED 0x1000
|
|
||||||
|
|
||||||
#define WINDOW_IS_TOPLEVEL_OR_FOREIGN(window) \
|
#define WINDOW_IS_TOPLEVEL_OR_FOREIGN(window) \
|
||||||
(GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD && \
|
(GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD && \
|
||||||
GDK_WINDOW_TYPE (window) != GDK_WINDOW_OFFSCREEN)
|
GDK_WINDOW_TYPE (window) != GDK_WINDOW_OFFSCREEN)
|
||||||
@ -182,6 +175,10 @@ struct _GdkWindowImplWayland
|
|||||||
gint rect_anchor_dx;
|
gint rect_anchor_dx;
|
||||||
gint rect_anchor_dy;
|
gint rect_anchor_dy;
|
||||||
} pending_move_to_rect;
|
} pending_move_to_rect;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
GdkWindowState state;
|
||||||
|
} pending;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GdkWindowImplWaylandClass
|
struct _GdkWindowImplWaylandClass
|
||||||
@ -1252,16 +1249,15 @@ xdg_surface_configure (void *data,
|
|||||||
break;
|
break;
|
||||||
case XDG_SURFACE_STATE_RESIZING:
|
case XDG_SURFACE_STATE_RESIZING:
|
||||||
break;
|
break;
|
||||||
/* GNOME additional states to xdg-shell */
|
|
||||||
case XDG_SURFACE_STATE_GNOME_TILED:
|
|
||||||
new_state |= GDK_WINDOW_STATE_TILED;
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
/* Unknown state */
|
/* Unknown state */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
new_state |= impl->pending.state;
|
||||||
|
impl->pending.state = 0;
|
||||||
|
|
||||||
fixed_size =
|
fixed_size =
|
||||||
new_state & (GDK_WINDOW_STATE_MAXIMIZED | GDK_WINDOW_STATE_FULLSCREEN | GDK_WINDOW_STATE_TILED);
|
new_state & (GDK_WINDOW_STATE_MAXIMIZED | GDK_WINDOW_STATE_FULLSCREEN | GDK_WINDOW_STATE_TILED);
|
||||||
|
|
||||||
@ -2203,6 +2199,38 @@ gdk_wayland_window_get_type_hint (GdkWindow *window)
|
|||||||
return impl->hint;
|
return impl->hint;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gtk_surface_configure (void *data,
|
||||||
|
struct gtk_surface1 *gtk_surface,
|
||||||
|
struct wl_array *states)
|
||||||
|
{
|
||||||
|
GdkWindow *window = GDK_WINDOW (data);
|
||||||
|
GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
|
||||||
|
GdkWindowState new_state = 0;
|
||||||
|
uint32_t *p;
|
||||||
|
|
||||||
|
wl_array_for_each (p, states)
|
||||||
|
{
|
||||||
|
uint32_t state = *p;
|
||||||
|
|
||||||
|
switch (state)
|
||||||
|
{
|
||||||
|
case GTK_SURFACE1_STATE_TILED:
|
||||||
|
new_state |= GDK_WINDOW_STATE_TILED;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
/* Unknown state */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl->pending.state |= new_state;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct gtk_surface1_listener gtk_surface_listener = {
|
||||||
|
gtk_surface_configure
|
||||||
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gdk_wayland_window_init_gtk_surface (GdkWindow *window)
|
gdk_wayland_window_init_gtk_surface (GdkWindow *window)
|
||||||
{
|
{
|
||||||
@ -2220,6 +2248,9 @@ gdk_wayland_window_init_gtk_surface (GdkWindow *window)
|
|||||||
impl->display_server.gtk_surface =
|
impl->display_server.gtk_surface =
|
||||||
gtk_shell1_get_gtk_surface (display->gtk_shell,
|
gtk_shell1_get_gtk_surface (display->gtk_shell,
|
||||||
impl->display_server.wl_surface);
|
impl->display_server.wl_surface);
|
||||||
|
gtk_surface1_add_listener (impl->display_server.gtk_surface,
|
||||||
|
>k_surface_listener,
|
||||||
|
window);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|||||||
@ -46,6 +46,16 @@
|
|||||||
<request name="present">
|
<request name="present">
|
||||||
<arg name="time" type="uint"/>
|
<arg name="time" type="uint"/>
|
||||||
</request>
|
</request>
|
||||||
|
|
||||||
|
<!-- Version 2 additions -->
|
||||||
|
|
||||||
|
<enum name="state">
|
||||||
|
<entry name="tiled" value="1"/>
|
||||||
|
</enum>
|
||||||
|
|
||||||
|
<event name="configure">
|
||||||
|
<arg name="states" type="array"/>
|
||||||
|
</event>
|
||||||
</interface>
|
</interface>
|
||||||
|
|
||||||
</protocol>
|
</protocol>
|
||||||
|
|||||||
Reference in New Issue
Block a user