From: Kristian Høgsberg Date: Thu, 16 Feb 2012 20:53:46 +0000 (-0500) Subject: window: Toggle maximized with super-f5 X-Git-Tag: 0.94.90~609 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d6bcd7daa753673621f6bd7c36e4324fa2f8454a;p=platform%2Fupstream%2Fweston.git window: Toggle maximized with super-f5 --- diff --git a/clients/window.c b/clients/window.c index ae5a791..0dfd7f3 100644 --- a/clients/window.c +++ b/clients/window.c @@ -50,6 +50,7 @@ #endif #include +#include #include #include @@ -99,6 +100,7 @@ struct display { enum { TYPE_TOPLEVEL, TYPE_FULLSCREEN, + TYPE_MAXIMIZED, TYPE_TRANSIENT, TYPE_MENU, TYPE_CUSTOM @@ -790,6 +792,9 @@ window_set_type(struct window *window) 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; @@ -1566,9 +1571,14 @@ input_handle_key(void *data, struct wl_input_device *input_device, 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 @@ -2173,6 +2183,28 @@ window_set_fullscreen(struct window *window, int fullscreen) } 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; diff --git a/clients/window.h b/clients/window.h index a199f6f..fd6e57b 100644 --- a/clients/window.h +++ b/clients/window.h @@ -271,6 +271,9 @@ void window_set_fullscreen(struct window *window, int fullscreen); void +window_set_maximized(struct window *window, int maximized); + +void window_set_custom(struct window *window); void