支持窗口最大化操作
This commit is contained in:
@@ -87,3 +87,9 @@ void toggle_client_fullscreen(const user_action_arg_t *arg) {
|
|||||||
|
|
||||||
client_set_fullscreen(wm.client_focused, !wm.client_focused->fullscreen);
|
client_set_fullscreen(wm.client_focused, !wm.client_focused->fullscreen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void toggle_client_maximize(const user_action_arg_t *arg) {
|
||||||
|
if (!wm.client_focused) return;
|
||||||
|
|
||||||
|
client_set_maximize(wm.client_focused, !wm.client_focused->maximize);
|
||||||
|
}
|
||||||
|
|||||||
@@ -57,3 +57,4 @@ void quit(const user_action_arg_t *arg);
|
|||||||
void raise_or_run(const user_action_arg_t *arg);
|
void raise_or_run(const user_action_arg_t *arg);
|
||||||
void toggle_client_floating(const user_action_arg_t *arg);
|
void toggle_client_floating(const user_action_arg_t *arg);
|
||||||
void toggle_client_fullscreen(const user_action_arg_t *arg);
|
void toggle_client_fullscreen(const user_action_arg_t *arg);
|
||||||
|
void toggle_client_maximize(const user_action_arg_t *arg);
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ _NET_WM_DESKTOP
|
|||||||
_NET_WM_NAME
|
_NET_WM_NAME
|
||||||
_NET_WM_STATE
|
_NET_WM_STATE
|
||||||
_NET_WM_STATE_FULLSCREEN
|
_NET_WM_STATE_FULLSCREEN
|
||||||
|
_NET_WM_STATE_MAXIMIZED_HORZ
|
||||||
|
_NET_WM_STATE_MAXIMIZED_VERT
|
||||||
_NET_WM_WINDOW_TYPE
|
_NET_WM_WINDOW_TYPE
|
||||||
_NET_WM_WINDOW_TYPE_DIALOG
|
_NET_WM_WINDOW_TYPE_DIALOG
|
||||||
_NET_SUPPORTED
|
_NET_SUPPORTED
|
||||||
|
|||||||
27
src/client.c
27
src/client.c
@@ -434,6 +434,33 @@ void client_set_fullscreen(client_t *client, bool fullscreen) {
|
|||||||
client_focus(client);
|
client_focus(client);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void client_set_maximize(client_t *client, bool maximize) {
|
||||||
|
if (client->maximize == maximize) return;
|
||||||
|
|
||||||
|
client->maximize = maximize;
|
||||||
|
if (maximize) {
|
||||||
|
xcb_atom_t max_atoms[] = {
|
||||||
|
_NET_WM_STATE_MAXIMIZED_HORZ,
|
||||||
|
_NET_WM_STATE_MAXIMIZED_VERT,
|
||||||
|
};
|
||||||
|
xcb_change_property(wm.xcb_conn, XCB_PROP_MODE_REPLACE, client->window,
|
||||||
|
_NET_WM_STATE, XCB_ATOM_ATOM, 32, countof(max_atoms),
|
||||||
|
max_atoms);
|
||||||
|
client->old_border_width = client->border_width;
|
||||||
|
if (client->floating) client->old_geometry = client->geometry;
|
||||||
|
client_change_border_width(client, 0);
|
||||||
|
client_apply_geometry(client, client->monitor->workarea);
|
||||||
|
client_stack_raise(client);
|
||||||
|
} else {
|
||||||
|
xcb_change_property(wm.xcb_conn, XCB_PROP_MODE_REPLACE, client->window,
|
||||||
|
_NET_WM_STATE, XCB_ATOM_ATOM, 32, 0, 0);
|
||||||
|
client_change_border_width(client, client->old_border_width);
|
||||||
|
client_apply_geometry(client, client->old_geometry);
|
||||||
|
}
|
||||||
|
monitor_arrange(client->monitor);
|
||||||
|
client_focus(client);
|
||||||
|
}
|
||||||
|
|
||||||
static void update_client_list(void) {
|
static void update_client_list(void) {
|
||||||
xcb_connection_t *conn = wm.xcb_conn;
|
xcb_connection_t *conn = wm.xcb_conn;
|
||||||
xcb_window_t root = wm.screen->root;
|
xcb_window_t root = wm.screen->root;
|
||||||
|
|||||||
@@ -89,6 +89,7 @@ static const keyboard_t key_list[] = {
|
|||||||
|
|
||||||
{modifier_super | modifier_control, XK_space, toggle_client_floating, {0}},
|
{modifier_super | modifier_control, XK_space, toggle_client_floating, {0}},
|
||||||
{modifier_super, XK_f, toggle_client_fullscreen, {0}},
|
{modifier_super, XK_f, toggle_client_fullscreen, {0}},
|
||||||
|
{modifier_super, XK_m, toggle_client_maximize, {0}},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const layout_t layout_list[] = {
|
static const layout_t layout_list[] = {
|
||||||
|
|||||||
Reference in New Issue
Block a user