opt: optimize handle foreign toplevel
This commit is contained in:
@@ -6,7 +6,7 @@ void handle_foreign_activate_request(struct wl_listener *listener, void *data) {
|
||||
Client *c = wl_container_of(listener, c, foreign_activate_request);
|
||||
uint32_t target;
|
||||
|
||||
if (c && c->swallowing)
|
||||
if (c->swallowing)
|
||||
return;
|
||||
|
||||
if (c->isminimized) {
|
||||
@@ -22,29 +22,39 @@ void handle_foreign_activate_request(struct wl_listener *listener, void *data) {
|
||||
target = get_tags_first_tag(c->tags);
|
||||
view_in_mon(&(Arg){.ui = target}, true, c->mon, true);
|
||||
focusclient(c, 1);
|
||||
wlr_foreign_toplevel_handle_v1_set_activated(c->foreign_toplevel, true);
|
||||
}
|
||||
|
||||
void handle_foreign_maximize_request(struct wl_listener *listener, void *data) {
|
||||
Client *c = wl_container_of(listener, c, foreign_maximize_request);
|
||||
if (c->ismaximizescreen) {
|
||||
struct wlr_foreign_toplevel_handle_v1_maximized_event *event = data;
|
||||
|
||||
if (c->swallowing)
|
||||
return;
|
||||
|
||||
if (c->ismaximizescreen && !event->maximized) {
|
||||
setmaximizescreen(c, 0);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!c->ismaximizescreen && event->maximized) {
|
||||
setmaximizescreen(c, 1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void handle_foreign_minimize_request(struct wl_listener *listener, void *data) {
|
||||
Client *c = wl_container_of(listener, c, foreign_minimize_request);
|
||||
if (c && c->swallowing)
|
||||
struct wlr_foreign_toplevel_handle_v1_minimized_event *event = data;
|
||||
|
||||
if (c->swallowing)
|
||||
return;
|
||||
|
||||
if (c && !c->isminimized && c == selmon->sel) {
|
||||
if (!c->isminimized && event->minimized) {
|
||||
set_minimized(c);
|
||||
return;
|
||||
}
|
||||
|
||||
if (c->isminimized) {
|
||||
if (c->isminimized && !event->minimized) {
|
||||
c->is_in_scratchpad = 0;
|
||||
c->isnamedscratchpad = 0;
|
||||
c->is_scratchpad_show = 0;
|
||||
@@ -57,19 +67,31 @@ void handle_foreign_minimize_request(struct wl_listener *listener, void *data) {
|
||||
|
||||
void handle_foreign_fullscreen_request(struct wl_listener *listener,
|
||||
void *data) {
|
||||
|
||||
Client *c = wl_container_of(listener, c, foreign_fullscreen_request);
|
||||
struct wlr_foreign_toplevel_handle_v1_fullscreen_event *event = data;
|
||||
|
||||
if (c->swallowing)
|
||||
return;
|
||||
|
||||
if (c->isfullscreen && !event->fullscreen) {
|
||||
setfullscreen(c, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!c->isfullscreen && event->fullscreen) {
|
||||
setfullscreen(c, 1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void handle_foreign_close_request(struct wl_listener *listener, void *data) {
|
||||
Client *c = wl_container_of(listener, c, foreign_close_request);
|
||||
if (c) {
|
||||
pending_kill_client(c);
|
||||
}
|
||||
}
|
||||
|
||||
void handle_foreign_destroy(struct wl_listener *listener, void *data) {
|
||||
Client *c = wl_container_of(listener, c, foreign_destroy);
|
||||
if (c) {
|
||||
wl_list_remove(&c->foreign_activate_request.link);
|
||||
wl_list_remove(&c->foreign_minimize_request.link);
|
||||
wl_list_remove(&c->foreign_maximize_request.link);
|
||||
@@ -77,7 +99,6 @@ void handle_foreign_destroy(struct wl_listener *listener, void *data) {
|
||||
wl_list_remove(&c->foreign_close_request.link);
|
||||
wl_list_remove(&c->foreign_destroy.link);
|
||||
}
|
||||
}
|
||||
|
||||
void remove_foreign_topleve(Client *c) {
|
||||
wlr_foreign_toplevel_handle_v1_destroy(c->foreign_toplevel);
|
||||
|
||||
@@ -682,4 +682,6 @@ arrange(Monitor *m, bool want_animation) {
|
||||
motionnotify(0, NULL, 0, 0, 0, 0);
|
||||
checkidleinhibitor(NULL);
|
||||
}
|
||||
|
||||
printstatus();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user