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