From: "U. Artie Eoff" <ullysses.a.e...@intel.com>

Signed-off-by: U. Artie Eoff <ullysses.a.e...@intel.com>
---
 src/test/gtk+/Makefile.am                |   3 +-
 src/test/gtk+/test_window_fullscreen.cpp | 184 +++++++++++++++++++++++++++++++
 2 files changed, 186 insertions(+), 1 deletion(-)
 create mode 100644 src/test/gtk+/test_window_fullscreen.cpp

diff --git a/src/test/gtk+/Makefile.am b/src/test/gtk+/Makefile.am
index c514ad8..dbdf065 100644
--- a/src/test/gtk+/Makefile.am
+++ b/src/test/gtk+/Makefile.am
@@ -6,7 +6,8 @@ noinst_LTLIBRARIES = libwfits-gtk.la
 
 libwfits_gtk_la_SOURCES =              \
        testharness.cpp                 \
-       test_window_geometry.cpp
+       test_window_geometry.cpp        \
+       test_window_fullscreen.cpp
 
 AM_CXXFLAGS =                          \
        $(WAYLAND_CFLAGS)               \
diff --git a/src/test/gtk+/test_window_fullscreen.cpp 
b/src/test/gtk+/test_window_fullscreen.cpp
new file mode 100644
index 0000000..f13ac6c
--- /dev/null
+++ b/src/test/gtk+/test_window_fullscreen.cpp
@@ -0,0 +1,184 @@
+/*
+ * Copyright © 2013 Intel Corporation
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and
+ * its documentation for any purpose is hereby granted without fee, provided
+ * that the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the copyright holders not be used in
+ * advertising or publicity pertaining to distribution of the software
+ * without specific, written prior permission.  The copyright holders make
+ * no representations about the suitability of this software for any
+ * purpose.  It is provided "as is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
+ * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
+ * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "testharness.h"
+
+namespace wfits {
+namespace test {
+namespace gtk {
+
+class WindowFullscreenTest :  public GtkTestHarness
+{
+public:
+       WindowFullscreenTest()
+               : GtkTestHarness::GtkTestHarness()
+               , win_(gtk_window_new(GTK_WINDOW_TOPLEVEL))
+               , isFullscreen_(false)
+               , isConfigured_(false)
+       {
+               gtk_window_set_title(*this, fullname(*this).c_str());
+               gtk_window_resize(*this, 360, 225);
+       }
+
+       ~WindowFullscreenTest()
+       {
+               gtk_widget_destroy(win_);
+       }
+
+       void setup()
+       {
+               g_signal_connect(win_, "window-state-event", 
G_CALLBACK(onState), this);
+               g_signal_connect(win_, "configure-event", 
G_CALLBACK(onConfigure), this);
+
+               gtk_widget_show(win_);
+
+               for (unsigned i(0); i < 3; ++i) {
+                       queueStep(boost::bind(&WindowFullscreenTest::test, 
boost::ref(*this)));
+               }
+       }
+
+       /**
+        * The assumption is that window fullscreening is honored by the window
+        * manager/compositor and fills the entire screen size when 
fullscreened.
+        * When unfullscreened, the window should restore to its initial size
+        * and position.
+        */
+       void test()
+       {
+               gint width, height;
+               GdkScreen *screen(gtk_window_get_screen(*this));
+               Geometry fullscreen(
+                       0, 0,
+                       gdk_screen_get_width(screen),
+                       gdk_screen_get_height(screen)
+               );
+               const Geometry initial(getSurfaceGeometry(*this));
+
+               std::cout << "...initial server geometry " << initial << 
std::endl;
+
+               gtk_window_get_size(*this, &width, &height);
+
+               std::cout << "...checking server size == client size" << 
std::endl;
+               FAIL_UNLESS_EQUAL(width, initial.width);
+               FAIL_UNLESS_EQUAL(height, initial.height);
+
+               std::cout << "...checking client size != fullscreen size" << 
std::endl;
+               FAIL_IF_EQUAL(width, fullscreen.width);
+               FAIL_IF_EQUAL(height, fullscreen.height);
+
+               isConfigured_ = false;
+
+               std::cout << "...fullscreening client" << std::endl;
+               gtk_window_fullscreen(*this);
+
+               std::cout << "...checking for fullscreen state event" << 
std::endl;
+               YIELD_UNTIL(isFullscreen_);
+
+               std::cout << "...checking for configure event" << std::endl;
+               YIELD_UNTIL(isConfigured_);
+
+               std::cout << "...checking client size == fullscreen size" << 
std::endl;
+               gtk_window_get_size(*this, &width, &height);
+               FAIL_UNLESS_EQUAL(width, fullscreen.width);
+               FAIL_UNLESS_EQUAL(height, fullscreen.height);
+
+               std::cout << "...checking server geometry == fullscreen 
geometry" << std::endl;
+               YIELD_UNTIL(isServerGeometry(fullscreen));
+
+               isConfigured_ = false;
+               std::cout << "...unfullscreening client" << std::endl;
+               gtk_window_unfullscreen(*this);
+
+               std::cout << "...checking for fullscreen state event" << 
std::endl;
+               YIELD_UNTIL(not isFullscreen_);
+
+               std::cout << "...checking for configure event" << std::endl;
+               YIELD_UNTIL(isConfigured_);
+
+               gtk_window_get_size(*this, &width, &height);
+
+               std::cout << "...checking client size == initial size" << 
std::endl;
+               FAIL_UNLESS_EQUAL(width, initial.width);
+               FAIL_UNLESS_EQUAL(height, initial.height);
+
+               std::cout << "...checking server geometry == initial geometry" 
<< std::endl;
+               YIELD_UNTIL(isServerGeometry(initial));
+       }
+
+       bool isServerGeometry(const Geometry what)
+       {
+               const Geometry geometry(getSurfaceGeometry(*this));
+               return geometry.width == what.width
+                       and geometry.height == what.height
+                       and geometry.x == what.x
+                       and geometry.y == what.y
+               ;
+       }
+
+       static gboolean onState(GtkWidget *widget, GdkEvent *event, gpointer 
data)
+       {
+               WindowFullscreenTest *test = 
static_cast<WindowFullscreenTest*>(data);
+               GdkEventWindowState *ev = (GdkEventWindowState*)(event);
+               if (ev->changed_mask & GDK_WINDOW_STATE_FULLSCREEN) {
+                       test->isFullscreen_ = ev->new_window_state & 
GDK_WINDOW_STATE_FULLSCREEN;
+                       std::cout << "...got fullscreen state change " << 
test->isFullscreen_ << std::endl;
+               }
+               return gtk_false();
+       }
+
+       static gboolean onConfigure(GtkWidget *widget, GdkEvent *event, 
gpointer data)
+       {
+               WindowFullscreenTest *test = 
static_cast<WindowFullscreenTest*>(data);
+               GdkEventConfigure *ev = (GdkEventConfigure*)(event);
+               Geometry conf;
+               conf.x = ev->x;
+               conf.y = ev->y;
+               conf.width = ev->width;
+               conf.height = ev->height;
+               test->isConfigured_ = true;
+               std::cout << "...got configure event " << conf << std::endl;
+               return gtk_false();
+       }
+
+       operator wl_surface *()
+       {
+               return gdk_wayland_window_get_wl_surface(
+                       gtk_widget_get_window(win_)
+               );
+       }
+
+       operator GtkWindow *()
+       {
+               return GTK_WINDOW(win_);
+       }
+
+private:
+       GtkWidget       *win_;
+       bool            isFullscreen_;
+       bool            isConfigured_;
+};
+
+WFITS_GTK_HARNESS_TEST_CASE(WindowFullscreenTest);
+
+} // namespace gtk
+} // namespace test
+} // namespace wfits
-- 
1.7.11.7

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to