} events;
};
-struct _E_Desktop_Surface
-{
- E_Surface *surface;
- E_Desktop_Surface_Interface *iface;
-
- struct wl_listener surface_destroy;
-};
-
-struct _E_Desktop_Toplevel
-{
- E_Desktop_Surface surface;
-};
-
static void
_shell_cb_display_destroy(struct wl_listener *listener, void *data)
{
static void _surface_finish(E_Desktop_Surface *surface);
-static void
-_toplevel_destroy(E_Desktop_Toplevel *toplevel)
-{
- _surface_finish(&toplevel->surface);
- free(toplevel);
-}
-
static E_Desktop_Toplevel *
_toplevel_from_surface(E_Desktop_Surface *surface)
{
e_shell_e_client_toplevel_set(ec);
}
-EINTERN E_Desktop_Toplevel *
-e_desktop_toplevel_create(E_Surface *e_surface, E_Desktop_Surface_Interface *iface, struct wl_resource *shell_surface_resource)
+EINTERN void
+e_desktop_toplevel_init(E_Desktop_Toplevel *toplevel, E_Desktop_Surface_Interface *iface, E_Surface *e_surface, struct wl_resource *shell_surface_resource)
{
- E_Desktop_Toplevel *toplevel;
-
- toplevel = calloc(1, sizeof(*toplevel));
- if (!toplevel)
- return NULL;
-
_surface_init(&toplevel->surface, e_surface, iface);
_toplevel_init(toplevel, shell_surface_resource);
+}
- return toplevel;
+EINTERN void
+e_desktop_toplevel_finish(E_Desktop_Toplevel *toplevel)
+{
+ _surface_finish(&toplevel->surface);
}
EINTERN E_Desktop_Toplevel *
return _toplevel_from_surface(surface);
}
-EINTERN void
-e_desktop_toplevel_destroy(E_Desktop_Toplevel *toplevel)
-{
- _toplevel_destroy(toplevel);
-}
-
EINTERN void
e_desktop_toplevel_title_set(E_Desktop_Toplevel *toplevel, const char *title)
{
struct _E_Desktop_Xdg_Toplevel_V6
{
- struct ds_xdg_toplevel_v6 *ds_toplevel;
- E_Desktop_Toplevel *toplevel;
-
+ E_Desktop_Toplevel base;
E_Desktop_Surface_Interface impl;
+ struct ds_xdg_toplevel_v6 *ds_toplevel;
struct wl_listener set_parent;
struct wl_listener set_title;
EINTERN E_Desktop_Toplevel *
e_desktop_xdg_toplevel_v6_desktop_toplevel_get(E_Desktop_Xdg_Toplevel_V6 *toplevel)
{
- return toplevel->toplevel;
+ return &toplevel->base;
}
static void
_toplevel_fullscreen_send(E_Desktop_Xdg_Toplevel_V6 *toplevel)
{
struct ds_xdg_toplevel_v6 *ds_toplevel = toplevel->ds_toplevel;
- bool fullscreen = e_desktop_toplevel_is_fullscreen(toplevel->toplevel);
+ bool fullscreen = e_desktop_toplevel_is_fullscreen(&toplevel->base);
if (ds_toplevel->scheduled.fullscreen == fullscreen)
return;
_toplevel_maximized_send(E_Desktop_Xdg_Toplevel_V6 *toplevel)
{
struct ds_xdg_toplevel_v6 *ds_toplevel = toplevel->ds_toplevel;
- bool maximized = e_desktop_toplevel_is_maximized(toplevel->toplevel);
+ bool maximized = e_desktop_toplevel_is_maximized(&toplevel->base);
if (ds_toplevel->scheduled.maximized == maximized)
return;
_toplevel_activated_send(E_Desktop_Xdg_Toplevel_V6 *toplevel)
{
struct ds_xdg_toplevel_v6 *ds_toplevel = toplevel->ds_toplevel;
- bool activated = e_desktop_toplevel_is_activated(toplevel->toplevel);
+ bool activated = e_desktop_toplevel_is_activated(&toplevel->base);
if (ds_toplevel->scheduled.activated == activated)
return;
struct ds_xdg_toplevel_v6 *ds_toplevel = toplevel->ds_toplevel;
int32_t cw = 0, ch = 0;
- if (e_desktop_toplevel_is_fullscreen(toplevel->toplevel))
+ if (e_desktop_toplevel_is_fullscreen(&toplevel->base))
{
- e_desktop_toplevel_fullscreen_size_get(toplevel->toplevel, &cw, &ch);
+ e_desktop_toplevel_fullscreen_size_get(&toplevel->base, &cw, &ch);
LOG("toplevel_v6(%p) FORCELY STAY current size (%d %d) of E_Client, requested size "
"is (%d %d), the state: fullscreen", toplevel, cw, ch, width, height);
}
- else if (e_desktop_toplevel_is_maximized(toplevel->toplevel))
+ else if (e_desktop_toplevel_is_maximized(&toplevel->base))
{
- e_desktop_toplevel_maximized_size_get(toplevel->toplevel, &cw, &ch);
+ e_desktop_toplevel_maximized_size_get(&toplevel->base, &cw, &ch);
LOG("toplevel_v6(%p) FORCELY STAY current size (%d %d) of E_Client, requested size "
"is (%d %d), the state: maximized", toplevel, cw, ch, width, height);
}
{
E_Desktop_Xdg_Toplevel_V6 *toplevel = wl_container_of(iface, toplevel, impl);
- if (!toplevel->toplevel)
- return;
-
_toplevel_fullscreen_send(toplevel);
_toplevel_maximized_send(toplevel);
_toplevel_resizing_send(toplevel, !!edges);
LOG("toplevel_v6(%p) Set parent(%p)", toplevel, parent);
- e_desktop_toplevel_parent_set(toplevel->toplevel, parent ? parent->toplevel : NULL);
+ e_desktop_toplevel_parent_set(&toplevel->base, parent ? &parent->base : NULL);
}
static void
LOG("toplevel_v6(%p) Set title: %s", toplevel, title ? title : "(null)");
- e_desktop_toplevel_title_set(toplevel->toplevel, title);
+ e_desktop_toplevel_title_set(&toplevel->base, title);
}
static void
LOG("toplevel_v6(%p) Set app_id: %s", toplevel, app_id ? app_id : "(null)");
- e_desktop_toplevel_app_id_set(toplevel->toplevel, app_id);
+ e_desktop_toplevel_app_id_set(&toplevel->base, app_id);
}
static void
{
LOG("toplevel_v6(%p) Begin interactive move", toplevel);
- e_desktop_toplevel_interactive_move_begin(toplevel->toplevel, seat_resource);
+ e_desktop_toplevel_interactive_move_begin(&toplevel->base, seat_resource);
}
static void
LOG("toplevel_v6(%p) Begin interactive resize", toplevel);
- e_desktop_toplevel_interactive_resize_begin(toplevel->toplevel, toplevel_resource, seat_resource, edges);
+ e_desktop_toplevel_interactive_resize_begin(&toplevel->base, toplevel_resource, seat_resource, edges);
}
static void
{
struct ds_xdg_surface_v6 *ds_xdg_surface = toplevel->ds_toplevel->base;
- e_desktop_toplevel_window_geometry_set(toplevel->toplevel,
+ e_desktop_toplevel_window_geometry_set(&toplevel->base,
ds_xdg_surface->current.geometry.x,
ds_xdg_surface->current.geometry.y,
ds_xdg_surface->current.geometry.width,
{
struct ds_xdg_toplevel_v6 *ds_toplevel = toplevel->ds_toplevel;
- e_desktop_toplevel_min_size_set(toplevel->toplevel,
+ e_desktop_toplevel_min_size_set(&toplevel->base,
ds_toplevel->current.min_width,
ds_toplevel->current.min_height);
- e_desktop_toplevel_max_size_set(toplevel->toplevel,
+ e_desktop_toplevel_max_size_set(&toplevel->base,
ds_toplevel->current.max_width,
ds_toplevel->current.max_height);
}
LOG("toplevel_v6(%p) Request maximize(%d)", toplevel, toplevel->ds_toplevel->requested.maximized);
if (toplevel->ds_toplevel->requested.maximized)
- e_desktop_toplevel_maximize_request(toplevel->toplevel);
+ e_desktop_toplevel_maximize_request(&toplevel->base);
else
- e_desktop_toplevel_unmaximize_request(toplevel->toplevel);
+ e_desktop_toplevel_unmaximize_request(&toplevel->base);
}
static void
LOG("toplevel_v6(%p) Request fullscreen(%d)", toplevel, toplevel->ds_toplevel->requested.fullscreen);
if (toplevel->ds_toplevel->requested.fullscreen)
- e_desktop_toplevel_fullscreen_request(toplevel->toplevel);
+ e_desktop_toplevel_fullscreen_request(&toplevel->base);
else
- e_desktop_toplevel_unfullscreen_request(toplevel->toplevel);
+ e_desktop_toplevel_unfullscreen_request(&toplevel->base);
}
static void
LOG("toplevel_v6(%p) Set minimize", toplevel);
- e_desktop_toplevel_minimize_request(toplevel->toplevel);
+ e_desktop_toplevel_minimize_request(&toplevel->base);
}
static void
_toplevel_app_id_update(toplevel);
if (ds_toplevel->requested.maximized)
- e_desktop_toplevel_maximize_request(toplevel->toplevel);
+ e_desktop_toplevel_maximize_request(&toplevel->base);
if (ds_toplevel->requested.fullscreen)
- e_desktop_toplevel_fullscreen_request(toplevel->toplevel);
+ e_desktop_toplevel_fullscreen_request(&toplevel->base);
}
static void
return;
}
- _toplevel_desktop_surface_interface_init(&toplevel->impl);
-
- toplevel->toplevel = e_desktop_toplevel_create(surface, &toplevel->impl, ds_xdg_surface->resource);
- if (!toplevel->toplevel)
- {
- ERR("Could not create E_Desktop_Shell");
- free(toplevel);
- return;
- }
-
toplevel->ds_toplevel = ds_xdg_surface->toplevel;
+ _toplevel_desktop_surface_interface_init(&toplevel->impl);
+ e_desktop_toplevel_init(&toplevel->base, &toplevel->impl, surface, ds_xdg_surface->resource);
+
_toplevel_init(toplevel);
_toplevel_listener_init(toplevel);
- e_desktop_shell_toplevel_add(shell->desktop_shell, toplevel->toplevel);
+ e_desktop_shell_toplevel_add(shell->desktop_shell, &toplevel->base);
ELOGF("XDG6", "Created E_Desktop_Xdg_Toplevel_V6(%p)", e_surface_ec_get(surface), toplevel);
}
LOG("Destroy E_Desktop_Xdg_Toplevel_V6(%p)", toplevel);
_toplevel_listener_finish(toplevel);
- e_desktop_toplevel_destroy(toplevel->toplevel);
+ e_desktop_toplevel_finish(&toplevel->base);
free(toplevel);
}