diff options
author | Alexander Larsson <alexl@redhat.com> | 2015-06-26 13:49:23 +0200 |
---|---|---|
committer | Alexander Larsson <alexl@redhat.com> | 2015-07-01 21:07:28 +0200 |
commit | ff94923666a48feee8707b86148aaf4d3f905367 (patch) | |
tree | aed32795616c0610a33cd0f1b45ae439088b7004 /gdk/broadway | |
parent | 77b8495bc4e51826afa451914d6a3b0df1b62a24 (diff) | |
download | gtk+-ff94923666a48feee8707b86148aaf4d3f905367.tar.gz |
broadway: Implement maximization
Diffstat (limited to 'gdk/broadway')
-rw-r--r-- | gdk/broadway/gdkscreen-broadway.c | 20 | ||||
-rw-r--r-- | gdk/broadway/gdkwindow-broadway.c | 44 | ||||
-rw-r--r-- | gdk/broadway/gdkwindow-broadway.h | 6 |
3 files changed, 67 insertions, 3 deletions
diff --git a/gdk/broadway/gdkscreen-broadway.c b/gdk/broadway/gdkscreen-broadway.c index 122e5be4c6..51ee140c67 100644 --- a/gdk/broadway/gdkscreen-broadway.c +++ b/gdk/broadway/gdkscreen-broadway.c @@ -92,6 +92,7 @@ _gdk_broadway_screen_size_changed (GdkScreen *screen, { GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (screen); gint width, height; + GList *toplevels, *l; width = gdk_screen_get_width (screen); height = gdk_screen_get_height (screen); @@ -99,9 +100,22 @@ _gdk_broadway_screen_size_changed (GdkScreen *screen, broadway_screen->width = msg->width; broadway_screen->height = msg->height; - if (width != gdk_screen_get_width (screen) || - height != gdk_screen_get_height (screen)) - g_signal_emit_by_name (screen, "size-changed"); + if (width == gdk_screen_get_width (screen) && + height == gdk_screen_get_height (screen)) + return; + + g_signal_emit_by_name (screen, "size-changed"); + toplevels = gdk_screen_get_toplevel_windows (screen); + for (l = toplevels; l != NULL; l = l->next) + { + GdkWindow *toplevel = l->data; + GdkWindowImplBroadway *toplevel_impl = GDK_WINDOW_IMPL_BROADWAY (toplevel->impl); + + if (toplevel_impl->maximized) + gdk_window_move_resize (toplevel, 0, 0, + gdk_screen_get_width (screen), + gdk_screen_get_height (screen)); + } } static void diff --git a/gdk/broadway/gdkwindow-broadway.c b/gdk/broadway/gdkwindow-broadway.c index e0bded15e6..ebde1b9198 100644 --- a/gdk/broadway/gdkwindow-broadway.c +++ b/gdk/broadway/gdkwindow-broadway.c @@ -886,19 +886,57 @@ gdk_broadway_window_unstick (GdkWindow *window) static void gdk_broadway_window_maximize (GdkWindow *window) { + GdkWindowImplBroadway *impl; + GdkScreen *screen; + if (GDK_WINDOW_DESTROYED (window) || !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window)) return; + impl = GDK_WINDOW_IMPL_BROADWAY (window->impl); + + if (impl->maximized) + return; + + impl->maximized = TRUE; + + gdk_synthesize_window_state (window, 0, GDK_WINDOW_STATE_MAXIMIZED); + + impl->pre_maximize_x = window->x; + impl->pre_maximize_y = window->y; + impl->pre_maximize_width = window->width; + impl->pre_maximize_height = window->height; + + screen = gdk_window_get_screen (window); + + gdk_window_move_resize (window, 0, 0, + gdk_screen_get_width (screen), + gdk_screen_get_height (screen)); } static void gdk_broadway_window_unmaximize (GdkWindow *window) { + GdkWindowImplBroadway *impl; + if (GDK_WINDOW_DESTROYED (window) || !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window)) return; + impl = GDK_WINDOW_IMPL_BROADWAY (window->impl); + + if (!impl->maximized) + return; + + impl->maximized = FALSE; + + gdk_synthesize_window_state (window, GDK_WINDOW_STATE_MAXIMIZED, 0); + + gdk_window_move_resize (window, + impl->pre_maximize_x, + impl->pre_maximize_y, + impl->pre_maximize_width, + impl->pre_maximize_height); } static void @@ -1397,6 +1435,9 @@ gdk_broadway_window_begin_resize_drag (GdkWindow *window, !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window)) return; + if (impl->maximized) + return; + mv_resize = get_move_resize_data (gdk_window_get_display (window), TRUE); mv_resize->is_resize = TRUE; @@ -1434,6 +1475,9 @@ gdk_broadway_window_begin_move_drag (GdkWindow *window, !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window)) return; + if (impl->maximized) + return; + mv_resize = get_move_resize_data (gdk_window_get_display (window), TRUE); mv_resize->is_resize = FALSE; diff --git a/gdk/broadway/gdkwindow-broadway.h b/gdk/broadway/gdkwindow-broadway.h index c4d1b215a4..f6a9ec1c65 100644 --- a/gdk/broadway/gdkwindow-broadway.h +++ b/gdk/broadway/gdkwindow-broadway.h @@ -59,8 +59,14 @@ struct _GdkWindowImplBroadway int id; gboolean visible; + gboolean maximized; int transient_for; + int pre_maximize_x; + int pre_maximize_y; + int pre_maximize_width; + int pre_maximize_height; + gint8 toplevel_window_type; gboolean dirty; gboolean last_synced; |