* cannot assume this means that the window actually has keyboard
* or pointer focus, in this compositor are they called together.
*/
-
void desktop_move_to_front(struct view *view);
void desktop_move_to_back(struct view *view);
void desktop_focus_and_activate_view(struct seat *seat, struct view *view);
--- /dev/null
+/* SPDX-License-Identifier: GPL-2.0-only */
+#ifndef __LABWC_VIEW_IMPL_COMMON_H
+#define __LABWC_VIEW_IMPL_COMMON_H
+/*
+ * Common code for view->impl functions
+ *
+ * Please note: only xdg-shell-toplevel-view and xwayland-view view_impl
+ * functions should call these functions.
+ */
+
+void view_impl_move_to_front(struct view *view);
+void view_impl_map(struct view *view);
+
+#endif /* __LABWC_VIEW_IMPL_COMMON_H */
void (*set_fullscreen)(struct view *view, bool fullscreen);
void (*unmap)(struct view *view);
void (*maximize)(struct view *view, bool maximize);
+ void (*move_to_front)(struct view *view);
};
struct view {
void view_update_app_id(struct view *view);
void view_reload_ssd(struct view *view);
-void view_impl_map(struct view *view);
void view_adjust_size(struct view *view, int *w, int *h);
void view_evacuate_region(struct view *view);
struct wlr_xwayland_surface *xwayland_surface_from_view(struct view *view);
bool xwayland_apply_size_hints(struct view *view, int *w, int *h);
-void xwayland_move_sub_views_to_front(struct view *parent,
- void (*move_to_front)(struct view *view));
void xwayland_server_init(struct server *server,
struct wlr_compositor *compositor);
#include "workspaces.h"
#include "xwayland.h"
-static void
-move_to_front(struct view *view)
-{
- wl_list_remove(&view->link);
- wl_list_insert(&view->server->views, &view->link);
- wlr_scene_node_raise_to_top(&view->scene_tree->node);
-}
-
void
desktop_move_to_front(struct view *view)
{
if (!view) {
return;
}
- move_to_front(view);
-#if HAVE_XWAYLAND
- xwayland_move_sub_views_to_front(view, move_to_front);
-#endif
- cursor_update_focus(view->server);
+ if (view->impl->move_to_front) {
+ view->impl->move_to_front(view);
+ cursor_update_focus(view->server);
+ }
}
void
#include "key-state.h"
#include "labwc.h"
#include "regions.h"
+#include "view.h"
#include "workspaces.h"
static bool should_cancel_cycling_on_next_key_release;
'touch.c',
'theme.c',
'view.c',
- 'view-impl.c',
+ 'view-impl-common.c',
'workspaces.c',
'xdg.c',
'xdg-deco.c',
// SPDX-License-Identifier: GPL-2.0-only
-/* view-impl.c: common code for shell view->impl functions */
+/* view-impl-common.c: common code for shell view->impl functions */
#include <stdio.h>
#include <strings.h>
#include "labwc.h"
#include "view.h"
+#include "view-impl-common.h"
+
+void
+view_impl_move_to_front(struct view *view)
+{
+ wl_list_remove(&view->link);
+ wl_list_insert(&view->server->views, &view->link);
+ wlr_scene_node_raise_to_top(&view->scene_tree->node);
+}
void
view_impl_map(struct view *view)
{
desktop_focus_and_activate_view(&view->server->seat, view);
desktop_move_to_front(view);
-
view_update_title(view);
view_update_app_id(view);
}
#include "labwc.h"
#include "node.h"
#include "view.h"
+#include "view-impl-common.h"
#include "workspaces.h"
struct wlr_xdg_surface *
.set_fullscreen = xdg_toplevel_view_set_fullscreen,
.unmap = xdg_toplevel_view_unmap,
.maximize = xdg_toplevel_view_maximize,
+ .move_to_front = view_impl_move_to_front,
};
void
#include "node.h"
#include "ssd.h"
#include "view.h"
+#include "view-impl-common.h"
#include "workspaces.h"
#include "xwayland.h"
return s;
}
-void
-xwayland_move_sub_views_to_front(struct view *parent,
- void (*move_to_front)(struct view *view))
-{
- assert(parent);
- assert(move_to_front);
-
- if (parent->type != LAB_XWAYLAND_VIEW) {
- return;
- }
-
- struct wlr_xwayland_surface *parent_xwayland_surface =
- xwayland_surface_from_view(parent);
- struct view *view, *next;
- wl_list_for_each_reverse_safe(view, next, &parent->server->views, link)
- {
- /* need to stop here, otherwise loops keeps going forever */
- if (view == parent) {
- break;
- }
- if (view->type != LAB_XWAYLAND_VIEW) {
- continue;
- }
- if (!view->mapped && !view->minimized) {
- continue;
- }
- if (top_parent_of(view) != parent_xwayland_surface) {
- continue;
- }
- move_to_front(view);
- /* TODO: we should probably focus on these too here */
- }
-}
-
static struct xwayland_view *
xwayland_view_from_view(struct view *view)
{
maximized);
}
+static void
+move_sub_views_to_front(struct view *parent)
+{
+ assert(parent);
+
+ if (parent->type != LAB_XWAYLAND_VIEW) {
+ return;
+ }
+
+ struct wlr_xwayland_surface *parent_xwayland_surface =
+ xwayland_surface_from_view(parent);
+ struct view *view, *next;
+ wl_list_for_each_reverse_safe(view, next, &parent->server->views, link)
+ {
+ /* need to stop here, otherwise loops keeps going forever */
+ if (view == parent) {
+ break;
+ }
+ if (view->type != LAB_XWAYLAND_VIEW) {
+ continue;
+ }
+ if (!view->mapped && !view->minimized) {
+ continue;
+ }
+ if (top_parent_of(view) != parent_xwayland_surface) {
+ continue;
+ }
+ view_impl_move_to_front(view);
+ }
+}
+
+static void
+move_to_front(struct view *view)
+{
+ view_impl_move_to_front(view);
+ move_sub_views_to_front(view);
+}
+
static void
set_activated(struct view *view, bool activated)
{
.set_activated = set_activated,
.set_fullscreen = set_fullscreen,
.unmap = unmap,
- .maximize = maximize
+ .maximize = maximize,
+ .move_to_front = move_to_front,
};
static void