处理 EWMH 扩展的 _NET_ACTIVE_WINDOW 协议
This commit is contained in:
@@ -126,6 +126,7 @@ typedef enum atom_t {
|
|||||||
atom_wm_protocols,
|
atom_wm_protocols,
|
||||||
atom_wm_delete,
|
atom_wm_delete,
|
||||||
atom_wm_take_focus,
|
atom_wm_take_focus,
|
||||||
|
atom_net_active_window,
|
||||||
atom_net_wm_name,
|
atom_net_wm_name,
|
||||||
atom_net_wm_state,
|
atom_net_wm_state,
|
||||||
atom_net_wm_fullscreen,
|
atom_net_wm_fullscreen,
|
||||||
|
|||||||
18
src/main.c
18
src/main.c
@@ -909,6 +909,24 @@ void client_message(client_message_event_t *event) {
|
|||||||
bool toggle_to_fullscreen = event->data.data32[0] == 2 && !c->fullscreen;
|
bool toggle_to_fullscreen = event->data.data32[0] == 2 && !c->fullscreen;
|
||||||
set_client_fullscreen(c, set_fullscreen || toggle_to_fullscreen);
|
set_client_fullscreen(c, set_fullscreen || toggle_to_fullscreen);
|
||||||
}
|
}
|
||||||
|
} else if (event->message_type == get_xcb_atom(atom_net_active_window)) {
|
||||||
|
client_t *client = get_client_of_window(event->window);
|
||||||
|
if (client) {
|
||||||
|
logger("==== _NET_ACTIVE_WINDOW\n");
|
||||||
|
print_client(client);
|
||||||
|
|
||||||
|
uint32_t tag_mask = 0;
|
||||||
|
for (uint32_t i = 0; i < g_strv_length(client->monitor->tags); i++) {
|
||||||
|
tag_mask |= 1 << i;
|
||||||
|
}
|
||||||
|
uint32_t target_tag = tag_mask & client->tags;
|
||||||
|
const user_action_arg_t arg = {.ui = target_tag};
|
||||||
|
|
||||||
|
current_monitor = client->monitor;
|
||||||
|
select_tag(&arg);
|
||||||
|
focus(client);
|
||||||
|
restack(current_monitor);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ static atom_map_t atom_map[] = {
|
|||||||
{.atom = atom_wm_protocols, .name = "WM_PROTOCOLS"},
|
{.atom = atom_wm_protocols, .name = "WM_PROTOCOLS"},
|
||||||
{.atom = atom_wm_delete, .name = "WM_DELETE_WINDOW"},
|
{.atom = atom_wm_delete, .name = "WM_DELETE_WINDOW"},
|
||||||
{.atom = atom_wm_take_focus, .name = "WM_TAKE_FOCUS"},
|
{.atom = atom_wm_take_focus, .name = "WM_TAKE_FOCUS"},
|
||||||
|
{.atom = atom_net_active_window, .name = "_NET_ACTIVE_WINDOW"},
|
||||||
{.atom = atom_net_wm_name, .name = "_NET_WM_NAME"},
|
{.atom = atom_net_wm_name, .name = "_NET_WM_NAME"},
|
||||||
{.atom = atom_net_wm_state, .name = "_NET_WM_STATE"},
|
{.atom = atom_net_wm_state, .name = "_NET_WM_STATE"},
|
||||||
{.atom = atom_net_wm_fullscreen, .name = "_NET_WM_STATE_FULLSCREEN"},
|
{.atom = atom_net_wm_fullscreen, .name = "_NET_WM_STATE_FULLSCREEN"},
|
||||||
|
|||||||
Reference in New Issue
Block a user