summaryrefslogtreecommitdiff
path: root/gdk/broadway
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2015-06-26 13:49:23 +0200
committerAlexander Larsson <alexl@redhat.com>2015-07-01 21:07:28 +0200
commitff94923666a48feee8707b86148aaf4d3f905367 (patch)
treeaed32795616c0610a33cd0f1b45ae439088b7004 /gdk/broadway
parent77b8495bc4e51826afa451914d6a3b0df1b62a24 (diff)
downloadgtk+-ff94923666a48feee8707b86148aaf4d3f905367.tar.gz
broadway: Implement maximization
Diffstat (limited to 'gdk/broadway')
-rw-r--r--gdk/broadway/gdkscreen-broadway.c20
-rw-r--r--gdk/broadway/gdkwindow-broadway.c44
-rw-r--r--gdk/broadway/gdkwindow-broadway.h6
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;