|
|
@ -582,6 +582,14 @@ static struct sway_workspace *select_workspace(struct sway_view *view) {
|
|
|
|
return NULL;
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static void update_ext_foreign_toplevel(struct sway_view *view) {
|
|
|
|
|
|
|
|
struct wlr_ext_foreign_toplevel_handle_v1_state toplevel_state = {
|
|
|
|
|
|
|
|
.app_id = view_get_app_id(view),
|
|
|
|
|
|
|
|
.title = view_get_title(view),
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
wlr_ext_foreign_toplevel_handle_v1_update_state(view->ext_foreign_toplevel, &toplevel_state);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static bool should_focus(struct sway_view *view) {
|
|
|
|
static bool should_focus(struct sway_view *view) {
|
|
|
|
struct sway_seat *seat = input_manager_current_seat();
|
|
|
|
struct sway_seat *seat = input_manager_current_seat();
|
|
|
|
struct sway_container *prev_con = seat_get_focused_container(seat);
|
|
|
|
struct sway_container *prev_con = seat_get_focused_container(seat);
|
|
|
@ -751,6 +759,15 @@ void view_map(struct sway_view *view, struct wlr_surface *wlr_surface,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct wlr_ext_foreign_toplevel_handle_v1_state foreign_toplevel_state = {
|
|
|
|
|
|
|
|
.app_id = view_get_app_id(view),
|
|
|
|
|
|
|
|
.title = view_get_title(view),
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
view->ext_foreign_toplevel =
|
|
|
|
|
|
|
|
wlr_ext_foreign_toplevel_handle_v1_create(server.foreign_toplevel_list, &foreign_toplevel_state);
|
|
|
|
|
|
|
|
wl_signal_add(&view->ext_foreign_toplevel->events.destroy,
|
|
|
|
|
|
|
|
&view->ext_foreign_destroy);
|
|
|
|
|
|
|
|
|
|
|
|
view->foreign_toplevel =
|
|
|
|
view->foreign_toplevel =
|
|
|
|
wlr_foreign_toplevel_handle_v1_create(server.foreign_toplevel_manager);
|
|
|
|
wlr_foreign_toplevel_handle_v1_create(server.foreign_toplevel_manager);
|
|
|
|
view->foreign_activate_request.notify = handle_foreign_activate_request;
|
|
|
|
view->foreign_activate_request.notify = handle_foreign_activate_request;
|
|
|
@ -828,6 +845,10 @@ void view_map(struct sway_view *view, struct wlr_surface *wlr_surface,
|
|
|
|
input_manager_set_focus(&view->container->node);
|
|
|
|
input_manager_set_focus(&view->container->node);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (view->ext_foreign_toplevel) {
|
|
|
|
|
|
|
|
update_ext_foreign_toplevel(view);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const char *app_id;
|
|
|
|
const char *app_id;
|
|
|
|
const char *class;
|
|
|
|
const char *class;
|
|
|
|
if ((app_id = view_get_app_id(view)) != NULL) {
|
|
|
|
if ((app_id = view_get_app_id(view)) != NULL) {
|
|
|
@ -847,6 +868,11 @@ void view_unmap(struct sway_view *view) {
|
|
|
|
view->urgent_timer = NULL;
|
|
|
|
view->urgent_timer = NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (view->ext_foreign_toplevel) {
|
|
|
|
|
|
|
|
wlr_ext_foreign_toplevel_handle_v1_destroy(view->ext_foreign_toplevel);
|
|
|
|
|
|
|
|
view->ext_foreign_toplevel = NULL;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (view->foreign_toplevel) {
|
|
|
|
if (view->foreign_toplevel) {
|
|
|
|
wlr_foreign_toplevel_handle_v1_destroy(view->foreign_toplevel);
|
|
|
|
wlr_foreign_toplevel_handle_v1_destroy(view->foreign_toplevel);
|
|
|
|
view->foreign_toplevel = NULL;
|
|
|
|
view->foreign_toplevel = NULL;
|
|
|
@ -1014,6 +1040,18 @@ static size_t parse_title_format(struct sway_view *view, char *buffer) {
|
|
|
|
return len;
|
|
|
|
return len;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void view_update_app_id(struct sway_view *view) {
|
|
|
|
|
|
|
|
const char *app_id = view_get_app_id(view);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (view->foreign_toplevel && app_id) {
|
|
|
|
|
|
|
|
wlr_foreign_toplevel_handle_v1_set_app_id(view->foreign_toplevel, app_id);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (view->ext_foreign_toplevel) {
|
|
|
|
|
|
|
|
update_ext_foreign_toplevel(view);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void view_update_title(struct sway_view *view, bool force) {
|
|
|
|
void view_update_title(struct sway_view *view, bool force) {
|
|
|
|
const char *title = view_get_title(view);
|
|
|
|
const char *title = view_get_title(view);
|
|
|
|
|
|
|
|
|
|
|
@ -1060,6 +1098,10 @@ void view_update_title(struct sway_view *view, bool force) {
|
|
|
|
if (view->foreign_toplevel && title) {
|
|
|
|
if (view->foreign_toplevel && title) {
|
|
|
|
wlr_foreign_toplevel_handle_v1_set_title(view->foreign_toplevel, title);
|
|
|
|
wlr_foreign_toplevel_handle_v1_set_title(view->foreign_toplevel, title);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (view->ext_foreign_toplevel) {
|
|
|
|
|
|
|
|
update_ext_foreign_toplevel(view);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool view_is_visible(struct sway_view *view) {
|
|
|
|
bool view_is_visible(struct sway_view *view) {
|
|
|
|