#endif
#include <X11/extensions/XKBcommon.h>
+#include <X11/X.h>
#include <linux/input.h>
#include <wayland-client.h>
enum {
TYPE_TOPLEVEL,
TYPE_FULLSCREEN,
+ TYPE_MAXIMIZED,
TYPE_TRANSIENT,
TYPE_MENU,
TYPE_CUSTOM
case TYPE_FULLSCREEN:
wl_shell_surface_set_fullscreen(window->shell_surface);
break;
+ case TYPE_MAXIMIZED:
+ wl_shell_surface_set_maximized(window->shell_surface, NULL);
+ break;
case TYPE_TOPLEVEL:
wl_shell_surface_set_toplevel(window->shell_surface);
break;
else
input->modifiers &= ~d->xkb->map->modmap[code];
- if (window->key_handler)
- (*window->key_handler)(window, input, time, key, sym, state,
- window->user_data);
+ if (key == KEY_F5 && input->modifiers == Mod4Mask) {
+ if (state)
+ window_set_maximized(window,
+ window->type != TYPE_MAXIMIZED);
+ } else if (window->key_handler) {
+ (*window->key_handler)(window, input, time, key,
+ sym, state, window->user_data);
+ }
}
static void
}
void
+window_set_maximized(struct window *window, int maximized)
+{
+ if (!window->display->shell)
+ return;
+
+ if ((window->type == TYPE_MAXIMIZED) == maximized)
+ return;
+
+ if (window->type == TYPE_TOPLEVEL) {
+ window->saved_allocation = window->allocation;
+ wl_shell_surface_set_maximized(window->shell_surface, NULL);
+ window->type = TYPE_MAXIMIZED;
+ } else {
+ wl_shell_surface_set_toplevel(window->shell_surface);
+ window->type = TYPE_TOPLEVEL;
+ window_schedule_resize(window,
+ window->saved_allocation.width,
+ window->saved_allocation.height);
+ }
+}
+
+void
window_set_user_data(struct window *window, void *data)
{
window->user_data = data;