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];
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * 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) \
 | 
			
		||||
  (GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD &&   \
 | 
			
		||||
   GDK_WINDOW_TYPE (window) != GDK_WINDOW_OFFSCREEN)
 | 
			
		||||
@ -182,6 +175,10 @@ struct _GdkWindowImplWayland
 | 
			
		||||
    gint rect_anchor_dx;
 | 
			
		||||
    gint rect_anchor_dy;
 | 
			
		||||
  } pending_move_to_rect;
 | 
			
		||||
 | 
			
		||||
  struct {
 | 
			
		||||
    GdkWindowState state;
 | 
			
		||||
  } pending;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _GdkWindowImplWaylandClass
 | 
			
		||||
@ -1252,16 +1249,15 @@ xdg_surface_configure (void               *data,
 | 
			
		||||
          break;
 | 
			
		||||
        case XDG_SURFACE_STATE_RESIZING:
 | 
			
		||||
          break;
 | 
			
		||||
        /* GNOME additional states to xdg-shell */
 | 
			
		||||
        case XDG_SURFACE_STATE_GNOME_TILED:
 | 
			
		||||
          new_state |= GDK_WINDOW_STATE_TILED;
 | 
			
		||||
          break;
 | 
			
		||||
        default:
 | 
			
		||||
          /* Unknown state */
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  new_state |= impl->pending.state;
 | 
			
		||||
  impl->pending.state = 0;
 | 
			
		||||
 | 
			
		||||
  fixed_size =
 | 
			
		||||
    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;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
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 =
 | 
			
		||||
    gtk_shell1_get_gtk_surface (display->gtk_shell,
 | 
			
		||||
                                impl->display_server.wl_surface);
 | 
			
		||||
  gtk_surface1_add_listener (impl->display_server.gtk_surface,
 | 
			
		||||
                             >k_surface_listener,
 | 
			
		||||
                             window);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
 | 
			
		||||
@ -46,6 +46,16 @@
 | 
			
		||||
    <request name="present">
 | 
			
		||||
      <arg name="time" type="uint"/>
 | 
			
		||||
    </request>
 | 
			
		||||
 | 
			
		||||
    <!-- Version 2 additions -->
 | 
			
		||||
 | 
			
		||||
    <enum name="state">
 | 
			
		||||
      <entry name="tiled" value="1"/>
 | 
			
		||||
    </enum>
 | 
			
		||||
 | 
			
		||||
    <event name="configure">
 | 
			
		||||
      <arg name="states" type="array"/>
 | 
			
		||||
    </event>
 | 
			
		||||
  </interface>
 | 
			
		||||
 | 
			
		||||
</protocol>
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user