فهرست منبع

* Some refactoring and bug fixes. Thanks Micha? Kuchta!

Brandon Schaefer 8 سال پیش
والد
کامیت
7bbb13ea59
8فایلهای تغییر یافته به همراه434 افزوده شده و 140 حذف شده
  1. 14 2
      configure
  2. 339 21
      include/SDL_config.h
  3. 2 2
      include/SDL_revision.h
  4. 3 2
      src/video/SDL_video.c
  5. 6 6
      src/video/mir/SDL_mirevents.c
  6. 15 1
      src/video/mir/SDL_mirvideo.c
  7. 42 105
      src/video/mir/SDL_mirwindow.c
  8. 13 1
      test/configure

+ 14 - 2
configure

@@ -745,6 +745,7 @@ infodir
 docdir
 oldincludedir
 includedir
+runstatedir
 localstatedir
 sharedstatedir
 sysconfdir
@@ -916,6 +917,7 @@ datadir='${datarootdir}'
 sysconfdir='${prefix}/etc'
 sharedstatedir='${prefix}/com'
 localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
 includedir='${prefix}/include'
 oldincludedir='/usr/include'
 docdir='${datarootdir}/doc/${PACKAGE}'
@@ -1168,6 +1170,15 @@ do
   | -silent | --silent | --silen | --sile | --sil)
     silent=yes ;;
 
+  -runstatedir | --runstatedir | --runstatedi | --runstated \
+  | --runstate | --runstat | --runsta | --runst | --runs \
+  | --run | --ru | --r)
+    ac_prev=runstatedir ;;
+  -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+  | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+  | --run=* | --ru=* | --r=*)
+    runstatedir=$ac_optarg ;;
+
   -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
     ac_prev=sbindir ;;
   -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
@@ -1305,7 +1316,7 @@ fi
 for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
 		datadir sysconfdir sharedstatedir localstatedir includedir \
 		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
-		libdir localedir mandir
+		libdir localedir mandir runstatedir
 do
   eval ac_val=\$$ac_var
   # Remove trailing slashes.
@@ -1458,6 +1469,7 @@ Fine tuning of the installation directories:
   --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
   --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
   --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --runstatedir=DIR       modifiable per-process data [LOCALSTATEDIR/run]
   --libdir=DIR            object code libraries [EPREFIX/lib]
   --includedir=DIR        C header files [PREFIX/include]
   --oldincludedir=DIR     C header files for non-gcc [/usr/include]
@@ -19209,7 +19221,7 @@ int
 main ()
 {
 
-                    MirTouchAction actions = mir_touch_actions
+                    MirWindowAttrib attrib = mir_window_attrib_state
 
   ;
   return 0;

+ 339 - 21
include/SDL_config.h

@@ -1,3 +1,4 @@
+/* include/SDL_config.h.  Generated from SDL_config.h.in by configure.  */
 /*
   Simple DirectMedia Layer
   Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
@@ -22,32 +23,349 @@
 #ifndef SDL_config_h_
 #define SDL_config_h_
 
-#include "SDL_platform.h"
-
 /**
- *  \file SDL_config.h
+ *  \file SDL_config.h.in
+ *
+ *  This is a set of defines to configure the SDL features
  */
 
-/* Add any platform that doesn't build using the configure system. */
-#if defined(__WIN32__)
-#include "SDL_config_windows.h"
-#elif defined(__WINRT__)
-#include "SDL_config_winrt.h"
-#elif defined(__MACOSX__)
-#include "SDL_config_macosx.h"
-#elif defined(__IPHONEOS__)
-#include "SDL_config_iphoneos.h"
-#elif defined(__ANDROID__)
-#include "SDL_config_android.h"
-#elif defined(__PSP__)
-#include "SDL_config_psp.h"
+/* General platform specific identifiers */
+#include "SDL_platform.h"
+
+/* Make sure that this isn't included by Visual C++ */
+#ifdef _MSC_VER
+#error You should run hg revert SDL_config.h 
+#endif
+
+/* C language features */
+/* #undef const */
+/* #undef inline */
+/* #undef volatile */
+
+/* C datatypes */
+#ifdef __LP64__
+#define SIZEOF_VOIDP 8
 #else
-/* This is a minimal configuration just to get SDL running on new platforms */
-#include "SDL_config_minimal.h"
-#endif /* platform config */
+#define SIZEOF_VOIDP 4
+#endif
+#define HAVE_GCC_ATOMICS 1
+/* #undef HAVE_GCC_SYNC_LOCK_TEST_AND_SET */
 
-#ifdef USING_GENERATED_CONFIG_H
-#error Wrong SDL_config.h, check your include path?
+/* #undef HAVE_DDRAW_H */
+/* #undef HAVE_DINPUT_H */
+/* #undef HAVE_DSOUND_H */
+/* #undef HAVE_DXGI_H */
+/* #undef HAVE_XINPUT_H */
+
+/* Comment this if you want to build without any C library requirements */
+#define HAVE_LIBC 1
+#if HAVE_LIBC
+
+/* Useful headers */
+#define HAVE_ALLOCA_H 1
+#define HAVE_SYS_TYPES_H 1
+#define HAVE_STDIO_H 1
+#define STDC_HEADERS 1
+#define HAVE_STDLIB_H 1
+#define HAVE_STDARG_H 1
+#define HAVE_MALLOC_H 1
+#define HAVE_MEMORY_H 1
+#define HAVE_STRING_H 1
+#define HAVE_STRINGS_H 1
+#define HAVE_INTTYPES_H 1
+#define HAVE_STDINT_H 1
+#define HAVE_CTYPE_H 1
+#define HAVE_MATH_H 1
+#define HAVE_ICONV_H 1
+#define HAVE_SIGNAL_H 1
+/* #undef HAVE_ALTIVEC_H */
+/* #undef HAVE_PTHREAD_NP_H */
+#define HAVE_LIBUDEV_H 1
+#define HAVE_DBUS_DBUS_H 1
+#define HAVE_IBUS_IBUS_H 1
+/* #undef HAVE_FCITX_FRONTEND_H */
+#define HAVE_LIBSAMPLERATE_H 1
+
+/* C library functions */
+#define HAVE_MALLOC 1
+#define HAVE_CALLOC 1
+#define HAVE_REALLOC 1
+#define HAVE_FREE 1
+#define HAVE_ALLOCA 1
+#ifndef __WIN32__ /* Don't use C runtime versions of these on Windows */
+#define HAVE_GETENV 1
+#define HAVE_SETENV 1
+#define HAVE_PUTENV 1
+#define HAVE_UNSETENV 1
 #endif
+#define HAVE_QSORT 1
+#define HAVE_ABS 1
+#define HAVE_BCOPY 1
+#define HAVE_MEMSET 1
+#define HAVE_MEMCPY 1
+#define HAVE_MEMMOVE 1
+#define HAVE_MEMCMP 1
+#define HAVE_STRLEN 1
+/* #undef HAVE_STRLCPY */
+/* #undef HAVE_STRLCAT */
+#define HAVE_STRDUP 1
+/* #undef HAVE__STRREV */
+/* #undef HAVE__STRUPR */
+/* #undef HAVE__STRLWR */
+/* #undef HAVE_INDEX */
+/* #undef HAVE_RINDEX */
+#define HAVE_STRCHR 1
+#define HAVE_STRRCHR 1
+#define HAVE_STRSTR 1
+/* #undef HAVE_ITOA */
+/* #undef HAVE__LTOA */
+/* #undef HAVE__UITOA */
+/* #undef HAVE__ULTOA */
+#define HAVE_STRTOL 1
+#define HAVE_STRTOUL 1
+/* #undef HAVE__I64TOA */
+/* #undef HAVE__UI64TOA */
+#define HAVE_STRTOLL 1
+#define HAVE_STRTOULL 1
+#define HAVE_STRTOD 1
+#define HAVE_ATOI 1
+#define HAVE_ATOF 1
+#define HAVE_STRCMP 1
+#define HAVE_STRNCMP 1
+/* #undef HAVE__STRICMP */
+#define HAVE_STRCASECMP 1
+/* #undef HAVE__STRNICMP */
+#define HAVE_STRNCASECMP 1
+/* #undef HAVE_SSCANF */
+#define HAVE_VSSCANF 1
+/* #undef HAVE_SNPRINTF */
+#define HAVE_VSNPRINTF 1
+#define HAVE_M_PI /**/
+#define HAVE_ATAN 1
+#define HAVE_ATAN2 1
+#define HAVE_ACOS 1
+#define HAVE_ASIN 1
+#define HAVE_CEIL 1
+#define HAVE_COPYSIGN 1
+#define HAVE_COS 1
+#define HAVE_COSF 1
+#define HAVE_FABS 1
+#define HAVE_FLOOR 1
+#define HAVE_LOG 1
+#define HAVE_POW 1
+#define HAVE_SCALBN 1
+#define HAVE_SIN 1
+#define HAVE_SINF 1
+#define HAVE_SQRT 1
+#define HAVE_SQRTF 1
+#define HAVE_TAN 1
+#define HAVE_TANF 1
+#define HAVE_FSEEKO 1
+#define HAVE_FSEEKO64 1
+#define HAVE_SIGACTION 1
+#define HAVE_SA_SIGACTION 1
+#define HAVE_SETJMP 1
+#define HAVE_NANOSLEEP 1
+#define HAVE_SYSCONF 1
+/* #undef HAVE_SYSCTLBYNAME */
+#define HAVE_CLOCK_GETTIME 1
+/* #undef HAVE_GETPAGESIZE */
+#define HAVE_MPROTECT 1
+#define HAVE_ICONV 1
+#define HAVE_PTHREAD_SETNAME_NP 1
+/* #undef HAVE_PTHREAD_SET_NAME_NP */
+#define HAVE_SEM_TIMEDWAIT 1
+#define HAVE_GETAUXVAL 1
+
+#else
+#define HAVE_STDARG_H 1
+#define HAVE_STDDEF_H 1
+#define HAVE_STDINT_H 1
+#endif /* HAVE_LIBC */
+
+/* SDL internal assertion support */
+/* #undef SDL_DEFAULT_ASSERT_LEVEL */
+
+/* Allow disabling of core subsystems */
+/* #undef SDL_ATOMIC_DISABLED */
+/* #undef SDL_AUDIO_DISABLED */
+/* #undef SDL_CPUINFO_DISABLED */
+/* #undef SDL_EVENTS_DISABLED */
+/* #undef SDL_FILE_DISABLED */
+/* #undef SDL_JOYSTICK_DISABLED */
+/* #undef SDL_HAPTIC_DISABLED */
+/* #undef SDL_LOADSO_DISABLED */
+/* #undef SDL_RENDER_DISABLED */
+/* #undef SDL_THREADS_DISABLED */
+/* #undef SDL_TIMERS_DISABLED */
+/* #undef SDL_VIDEO_DISABLED */
+/* #undef SDL_POWER_DISABLED */
+/* #undef SDL_FILESYSTEM_DISABLED */
+
+/* Enable various audio drivers */
+#define SDL_AUDIO_DRIVER_ALSA 1
+#define SDL_AUDIO_DRIVER_ALSA_DYNAMIC "libasound.so.2"
+/* #undef SDL_AUDIO_DRIVER_ARTS */
+/* #undef SDL_AUDIO_DRIVER_ARTS_DYNAMIC */
+#define SDL_AUDIO_DRIVER_PULSEAUDIO 1
+#define SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC "libpulse-simple.so.0"
+/* #undef SDL_AUDIO_DRIVER_HAIKU */
+/* #undef SDL_AUDIO_DRIVER_BSD */
+/* #undef SDL_AUDIO_DRIVER_COREAUDIO */
+#define SDL_AUDIO_DRIVER_DISK 1
+#define SDL_AUDIO_DRIVER_DUMMY 1
+/* #undef SDL_AUDIO_DRIVER_ANDROID */
+/* #undef SDL_AUDIO_DRIVER_XAUDIO2 */
+/* #undef SDL_AUDIO_DRIVER_DSOUND */
+/* #undef SDL_AUDIO_DRIVER_ESD */
+/* #undef SDL_AUDIO_DRIVER_ESD_DYNAMIC */
+/* #undef SDL_AUDIO_DRIVER_NACL */
+/* #undef SDL_AUDIO_DRIVER_NAS */
+/* #undef SDL_AUDIO_DRIVER_NAS_DYNAMIC */
+/* #undef SDL_AUDIO_DRIVER_SNDIO */
+/* #undef SDL_AUDIO_DRIVER_SNDIO_DYNAMIC */
+#define SDL_AUDIO_DRIVER_OSS 1
+/* #undef SDL_AUDIO_DRIVER_OSS_SOUNDCARD_H */
+/* #undef SDL_AUDIO_DRIVER_PAUDIO */
+/* #undef SDL_AUDIO_DRIVER_QSA */
+/* #undef SDL_AUDIO_DRIVER_SUNAUDIO */
+/* #undef SDL_AUDIO_DRIVER_WINMM */
+/* #undef SDL_AUDIO_DRIVER_FUSIONSOUND */
+/* #undef SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC */
+/* #undef SDL_AUDIO_DRIVER_EMSCRIPTEN */
+
+/* Enable various input drivers */
+#define SDL_INPUT_LINUXEV 1
+#define SDL_INPUT_LINUXKD 1
+/* #undef SDL_INPUT_TSLIB */
+/* #undef SDL_JOYSTICK_HAIKU */
+/* #undef SDL_JOYSTICK_DINPUT */
+/* #undef SDL_JOYSTICK_XINPUT */
+/* #undef SDL_JOYSTICK_DUMMY */
+/* #undef SDL_JOYSTICK_IOKIT */
+#define SDL_JOYSTICK_LINUX 1
+/* #undef SDL_JOYSTICK_ANDROID */
+/* #undef SDL_JOYSTICK_WINMM */
+/* #undef SDL_JOYSTICK_USBHID */
+/* #undef SDL_JOYSTICK_USBHID_MACHINE_JOYSTICK_H */
+/* #undef SDL_JOYSTICK_EMSCRIPTEN */
+/* #undef SDL_HAPTIC_DUMMY */
+#define SDL_HAPTIC_LINUX 1
+/* #undef SDL_HAPTIC_IOKIT */
+/* #undef SDL_HAPTIC_DINPUT */
+/* #undef SDL_HAPTIC_XINPUT */
+
+/* Enable various shared object loading systems */
+#define SDL_LOADSO_DLOPEN 1
+/* #undef SDL_LOADSO_DUMMY */
+/* #undef SDL_LOADSO_LDG */
+/* #undef SDL_LOADSO_WINDOWS */
+
+/* Enable various threading systems */
+#define SDL_THREAD_PTHREAD 1
+#define SDL_THREAD_PTHREAD_RECURSIVE_MUTEX 1
+/* #undef SDL_THREAD_PTHREAD_RECURSIVE_MUTEX_NP */
+/* #undef SDL_THREAD_WINDOWS */
+
+/* Enable various timer systems */
+/* #undef SDL_TIMER_HAIKU */
+/* #undef SDL_TIMER_DUMMY */
+#define SDL_TIMER_UNIX 1
+/* #undef SDL_TIMER_WINDOWS */
+
+/* Enable various video drivers */
+/* #undef SDL_VIDEO_DRIVER_HAIKU */
+/* #undef SDL_VIDEO_DRIVER_COCOA */
+/* #undef SDL_VIDEO_DRIVER_DIRECTFB */
+/* #undef SDL_VIDEO_DRIVER_DIRECTFB_DYNAMIC */
+#define SDL_VIDEO_DRIVER_DUMMY 1
+/* #undef SDL_VIDEO_DRIVER_WINDOWS */
+#define SDL_VIDEO_DRIVER_WAYLAND 1
+#define SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH 1
+#define SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC "libwayland-client.so.0"
+#define SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL "libwayland-egl.so.1"
+#define SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR "libwayland-cursor.so.0"
+#define SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON "libxkbcommon.so.0"
+#define SDL_VIDEO_DRIVER_MIR 1
+#define SDL_VIDEO_DRIVER_MIR_DYNAMIC "libmirclient.so.9"
+#define SDL_VIDEO_DRIVER_MIR_DYNAMIC_XKBCOMMON "libxkbcommon.so.0"
+#define SDL_VIDEO_DRIVER_X11 1
+/* #undef SDL_VIDEO_DRIVER_RPI */
+/* #undef SDL_VIDEO_DRIVER_ANDROID */
+/* #undef SDL_VIDEO_DRIVER_EMSCRIPTEN */
+#define SDL_VIDEO_DRIVER_X11_DYNAMIC "libX11.so.6"
+#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT "libXext.so.6"
+#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR "libXcursor.so.1"
+#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA "libXinerama.so.1"
+#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2 "libXi.so.6"
+#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR "libXrandr.so.2"
+#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS "libXss.so.1"
+#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE "libXxf86vm.so.1"
+#define SDL_VIDEO_DRIVER_X11_XCURSOR 1
+#define SDL_VIDEO_DRIVER_X11_XDBE 1
+#define SDL_VIDEO_DRIVER_X11_XINERAMA 1
+#define SDL_VIDEO_DRIVER_X11_XINPUT2 1
+#define SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH 1
+#define SDL_VIDEO_DRIVER_X11_XRANDR 1
+#define SDL_VIDEO_DRIVER_X11_XSCRNSAVER 1
+#define SDL_VIDEO_DRIVER_X11_XSHAPE 1
+#define SDL_VIDEO_DRIVER_X11_XVIDMODE 1
+#define SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS 1
+#define SDL_VIDEO_DRIVER_X11_CONST_PARAM_XEXTADDDISPLAY 1
+#define SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM 1
+/* #undef SDL_VIDEO_DRIVER_NACL */
+/* #undef SDL_VIDEO_DRIVER_VIVANTE */
+/* #undef SDL_VIDEO_DRIVER_VIVANTE_VDK */
+
+/* #undef SDL_VIDEO_RENDER_D3D */
+/* #undef SDL_VIDEO_RENDER_D3D11 */
+#define SDL_VIDEO_RENDER_OGL 1
+#define SDL_VIDEO_RENDER_OGL_ES 1
+#define SDL_VIDEO_RENDER_OGL_ES2 1
+/* #undef SDL_VIDEO_RENDER_DIRECTFB */
+
+/* Enable OpenGL support */
+#define SDL_VIDEO_OPENGL 1
+#define SDL_VIDEO_OPENGL_ES 1
+#define SDL_VIDEO_OPENGL_ES2 1
+/* #undef SDL_VIDEO_OPENGL_BGL */
+/* #undef SDL_VIDEO_OPENGL_CGL */
+#define SDL_VIDEO_OPENGL_EGL 1
+#define SDL_VIDEO_OPENGL_GLX 1
+/* #undef SDL_VIDEO_OPENGL_WGL */
+/* #undef SDL_VIDEO_OPENGL_OSMESA */
+/* #undef SDL_VIDEO_OPENGL_OSMESA_DYNAMIC */
+
+/* Enable system power support */
+#define SDL_POWER_LINUX 1
+/* #undef SDL_POWER_WINDOWS */
+/* #undef SDL_POWER_MACOSX */
+/* #undef SDL_POWER_HAIKU */
+/* #undef SDL_POWER_ANDROID */
+/* #undef SDL_POWER_EMSCRIPTEN */
+/* #undef SDL_POWER_HARDWIRED */
+
+/* Enable system filesystem support */
+/* #undef SDL_FILESYSTEM_HAIKU */
+/* #undef SDL_FILESYSTEM_COCOA */
+/* #undef SDL_FILESYSTEM_DUMMY */
+#define SDL_FILESYSTEM_UNIX 1
+/* #undef SDL_FILESYSTEM_WINDOWS */
+/* #undef SDL_FILESYSTEM_NACL */
+/* #undef SDL_FILESYSTEM_ANDROID */
+/* #undef SDL_FILESYSTEM_EMSCRIPTEN */
+
+/* Enable assembly routines */
+#define SDL_ASSEMBLY_ROUTINES 1
+/* #undef SDL_ALTIVEC_BLITTERS */
+
+/* Enable ime support */
+#define SDL_USE_IME 1
+
+/* Enable dynamic udev support */
+#define SDL_UDEV_DYNAMIC "libudev.so.1"
+
+/* Enable dynamic libsamplerate support */
+#define SDL_LIBSAMPLERATE_DYNAMIC "libsamplerate.so.0"
 
 #endif /* SDL_config_h_ */

+ 2 - 2
include/SDL_revision.h

@@ -1,2 +1,2 @@
-#define SDL_REVISION "hg-0:aaaaaaaaaaah"
-#define SDL_REVISION_NUMBER 0
+#define SDL_REVISION "hg-10922:5f4b80b748dd"
+#define SDL_REVISION_NUMBER 10922

+ 3 - 2
src/video/SDL_video.c

@@ -210,6 +210,7 @@ ShouldUseTextureFramebuffer()
 #if SDL_VIDEO_OPENGL
     /* Ugh, find a way to cache this value! */
     {
+        /*
         SDL_Window *window;
         SDL_GLContext context;
         SDL_bool hasAcceleratedOpenGL = SDL_FALSE;
@@ -225,7 +226,6 @@ ShouldUseTextureFramebuffer()
                 if (glGetStringFunc) {
                     vendor = (const char *) glGetStringFunc(GL_VENDOR);
                 }
-                /* Add more vendors here at will... */
                 if (vendor &&
                     (SDL_strstr(vendor, "ATI Technologies") ||
                      SDL_strstr(vendor, "NVIDIA"))) {
@@ -235,7 +235,8 @@ ShouldUseTextureFramebuffer()
             }
             SDL_DestroyWindow(window);
         }
-        return hasAcceleratedOpenGL;
+        */
+        return 1;//hasAcceleratedOpenGL;
     }
 #elif SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
     /* Let's be optimistic about this! */

+ 6 - 6
src/video/mir/SDL_mirevents.c

@@ -237,7 +237,7 @@ HandleMouseEvent(MirPointerEvent const* pointer, SDL_Window* sdl_window)
 }
 
 static void
-MIR_HandleInput(MirInputEvent const* input_event, SDL_Window* window)
+HandleInput(MirInputEvent const* input_event, SDL_Window* window)
 {
     switch (MIR_mir_input_event_get_type(input_event)) {
         case (mir_input_event_type_key):
@@ -257,7 +257,7 @@ MIR_HandleInput(MirInputEvent const* input_event, SDL_Window* window)
 }
 
 static void
-MIR_HandleResize(MirResizeEvent const* resize_event, SDL_Window* window)
+HandleResize(MirResizeEvent const* resize_event, SDL_Window* window)
 {
     int new_w = MIR_mir_resize_event_get_width (resize_event);
     int new_h = MIR_mir_resize_event_get_height(resize_event);
@@ -270,7 +270,7 @@ MIR_HandleResize(MirResizeEvent const* resize_event, SDL_Window* window)
 }
 
 static void
-MIR_HandleWindow(MirWindowEvent const* event, SDL_Window* window)
+HandleWindow(MirWindowEvent const* event, SDL_Window* window)
 {
     MirWindowAttrib attrib = MIR_mir_window_event_get_attribute(event);
     int value              = MIR_mir_window_event_get_attribute_value(event);
@@ -294,13 +294,13 @@ MIR_HandleEvent(MirWindow* mirwindow, MirEvent const* ev, void* context)
     if (window) {
         switch (event_type) {
             case (mir_event_type_input):
-                MIR_HandleInput(MIR_mir_event_get_input_event(ev), window);
+                HandleInput(MIR_mir_event_get_input_event(ev), window);
                 break;
             case (mir_event_type_resize):
-                MIR_HandleResize(MIR_mir_event_get_resize_event(ev), window);
+                HandleResize(MIR_mir_event_get_resize_event(ev), window);
                 break;
             case (mir_event_type_window):
-                MIR_HandleWindow(MIR_mir_event_get_window_event(ev), window);
+                HandleWindow(MIR_mir_event_get_window_event(ev), window);
                 break;
             default:
                 break;

+ 15 - 1
src/video/mir/SDL_mirvideo.c

@@ -27,6 +27,8 @@
 
 #if SDL_VIDEO_DRIVER_MIR
 
+#include "SDL_log.h"
+
 #include "SDL_mirwindow.h"
 #include "SDL_video.h"
 
@@ -98,7 +100,19 @@ MIR_Available()
     int available = 0;
 
     if (SDL_MIR_LoadSymbols()) {
-        /* !!! FIXME: try to make a MirConnection here. */
+
+        /* Lets ensure we can connect to the mir server */
+        MirConnection* connection = MIR_mir_connect_sync(NULL, __PRETTY_FUNCTION__);
+
+        if (!MIR_mir_connection_is_valid(connection)) {
+            SDL_LogWarn(SDL_LOG_CATEGORY_VIDEO, "Unable to connect to the mir server %s",
+                MIR_mir_connection_get_error_message(connection));
+
+            return available;
+        }
+
+        MIR_mir_connection_release(connection);
+
         available = 1;
         SDL_MIR_UnloadSymbols();
     }

+ 42 - 105
src/video/mir/SDL_mirwindow.c

@@ -37,14 +37,14 @@
 #include "SDL_mirdyn.h"
 
 int
-IsSurfaceValid(MIR_Window* mir_window)
+IsMirWindowValid(MIR_Window* mir_window)
 {
     if (!MIR_mir_window_is_valid(mir_window->window)) {
         const char* error = MIR_mir_window_get_error_message(mir_window->window);
         return SDL_SetError("Failed to created a mir surface: %s", error);
     }
 
-    return 0;
+    return 1;
 }
 
 MirPixelFormat
@@ -194,153 +194,90 @@ MIR_GetWindowWMInfo(_THIS, SDL_Window* window, SDL_SysWMinfo* info)
     return SDL_FALSE;
 }
 
+static void
+UpdateMirWindowState(MIR_Data* mir_data, MIR_Window* mir_window, MirWindowState window_state)
+{
+    if (IsMirWindowValid(mir_window)) {
+        MirWindowSpec* spec = MIR_mir_create_window_spec(mir_data->connection);
+        MIR_mir_window_spec_set_state(spec, window_state);
+
+        MIR_mir_window_apply_spec(mir_window->window, spec);
+        MIR_mir_window_spec_release(spec);
+    }
+}
+
 void
 MIR_SetWindowFullscreen(_THIS, SDL_Window* window,
                         SDL_VideoDisplay* display,
                         SDL_bool fullscreen)
 {
-    MIR_Data*   mir_data   = _this->driverdata;
-    MIR_Window* mir_window = window->driverdata;
-    MirWindowSpec* spec;
-    MirWindowState state;
+    if (IsMirWindowValid(window->driverdata)) {
+        MirWindowState state;
 
-    if (IsSurfaceValid(mir_window) < 0)
-        return;
+        if (fullscreen) {
+            state = mir_window_state_fullscreen;
+        }
+        else {
+            state = mir_window_state_restored;
+        }
 
-    if (fullscreen) {
-        state = mir_window_state_fullscreen;
-    } else {
-        state = mir_window_state_restored;
+        UpdateMirWindowState(_this->driverdata, window->driverdata, state);
     }
-
-    spec = MIR_mir_create_window_spec(mir_data->connection);
-    MIR_mir_window_spec_set_state(spec, state);
-
-    MIR_mir_window_apply_spec(mir_window->window, spec);
-    MIR_mir_window_spec_release(spec);
 }
 
 void
 MIR_MaximizeWindow(_THIS, SDL_Window* window)
 {
-    MIR_Data*   mir_data   = _this->driverdata;
-    MIR_Window* mir_window = window->driverdata;
-    MirWindowSpec* spec;
-
-    if (IsSurfaceValid(mir_window) < 0)
-        return;
-
-    spec = MIR_mir_create_window_spec(mir_data->connection);
-    MIR_mir_window_spec_set_state(spec, mir_window_state_maximized);
-
-    MIR_mir_window_apply_spec(mir_window->window, spec);
-    MIR_mir_window_spec_release(spec);
+    UpdateMirWindowState(_this->driverdata, window->driverdata, mir_window_state_maximized);
 }
 
 void
 MIR_MinimizeWindow(_THIS, SDL_Window* window)
 {
-    MIR_Data*   mir_data   = _this->driverdata;
-    MIR_Window* mir_window = window->driverdata;
-    MirWindowSpec* spec;
-
-    if (IsSurfaceValid(mir_window) < 0)
-        return;
-
-    spec = MIR_mir_create_window_spec(mir_data->connection);
-    MIR_mir_window_spec_set_state(spec, mir_window_state_minimized);
-
-    MIR_mir_window_apply_spec(mir_window->window, spec);
-    MIR_mir_window_spec_release(spec);
+    UpdateMirWindowState(_this->driverdata, window->driverdata, mir_window_state_minimized);
 }
 
 void
 MIR_RestoreWindow(_THIS, SDL_Window * window)
 {
-    MIR_Data*   mir_data   = _this->driverdata;
-    MIR_Window* mir_window = window->driverdata;
-    MirWindowSpec* spec;
-
-    if (IsSurfaceValid(mir_window) < 0)
-        return;
-
-    spec = MIR_mir_create_window_spec(mir_data->connection);
-    MIR_mir_window_spec_set_state(spec, mir_window_state_restored);
-
-    MIR_mir_window_apply_spec(mir_window->window, spec);
-    MIR_mir_window_spec_release(spec);
+    UpdateMirWindowState(_this->driverdata, window->driverdata, mir_window_state_restored);
 }
 
 void
 MIR_HideWindow(_THIS, SDL_Window* window)
 {
-    MIR_Data*   mir_data   = _this->driverdata;
-    MIR_Window* mir_window = window->driverdata;
-    MirWindowSpec* spec;
-
-    if (IsSurfaceValid(mir_window) < 0)
-        return;
+    UpdateMirWindowState(_this->driverdata, window->driverdata, mir_window_state_hidden);
+}
 
-    spec = MIR_mir_create_window_spec(mir_data->connection);
-    MIR_mir_window_spec_set_state(spec, mir_window_state_hidden);
+static void
+UpdateMirWindowSize(MIR_Data* mir_data, MIR_Window* mir_window, int width, int height)
+{
+    if (IsMirWindowValid(mir_window)) {
+        MirWindowSpec* spec = MIR_mir_create_window_spec(mir_data->connection);
+        MIR_mir_window_spec_set_width (spec, width);
+        MIR_mir_window_spec_set_height(spec, height);
 
-    MIR_mir_window_apply_spec(mir_window->window, spec);
-    MIR_mir_window_spec_release(spec);
+        MIR_mir_window_apply_spec(mir_window->window, spec);
+        MIR_mir_window_spec_release(spec);
+    }
 }
 
 void
 MIR_SetWindowSize(_THIS, SDL_Window* window)
 {
-    MIR_Data*   mir_data   = _this->driverdata;
-    MIR_Window* mir_window = window->driverdata;
-    MirWindowSpec* spec;
-
-    if (IsSurfaceValid(mir_window) < 0)
-        return;
-
-    /* You cannot set the x/y of a mir window! So only update w/h */
-    spec = MIR_mir_create_window_spec(mir_data->connection);
-    MIR_mir_window_spec_set_width (spec, window->w);
-    MIR_mir_window_spec_set_height(spec, window->h);
-
-    MIR_mir_window_apply_spec(mir_window->window, spec);
-    MIR_mir_window_spec_release(spec);
+    UpdateMirWindowSize(_this->driverdata, window->driverdata, window->w, window->h);
 }
 
 void
 MIR_SetWindowMinimumSize(_THIS, SDL_Window* window)
 {
-    MIR_Data*   mir_data   = _this->driverdata;
-    MIR_Window* mir_window = window->driverdata;
-    MirWindowSpec* spec;
-
-    if (IsSurfaceValid(mir_window) < 0)
-        return;
-
-    spec = MIR_mir_create_window_spec(mir_data->connection);
-    MIR_mir_window_spec_set_width (spec, window->min_w);
-    MIR_mir_window_spec_set_height(spec, window->min_h);
-
-    MIR_mir_window_apply_spec(mir_window->window, spec);
-    MIR_mir_window_spec_release(spec);
+    UpdateMirWindowSize(_this->driverdata, window->driverdata, window->min_w, window->min_h);
 }
 
 void
 MIR_SetWindowMaximumSize(_THIS, SDL_Window* window)
 {
-    MIR_Data*   mir_data   = _this->driverdata;
-    MIR_Window* mir_window = window->driverdata;
-    MirWindowSpec* spec;
-
-    if (IsSurfaceValid(mir_window) < 0)
-        return;
-
-    spec = MIR_mir_create_window_spec(mir_data->connection);
-    MIR_mir_window_spec_set_max_width(spec, window->max_w);
-    MIR_mir_window_spec_set_max_height(spec, window->max_h);
-
-    MIR_mir_window_apply_spec(mir_window->window, spec);
-    MIR_mir_window_spec_release(spec);
+    UpdateMirWindowSize(_this->driverdata, window->driverdata, window->max_w, window->max_h);
 }
 
 void
@@ -351,7 +288,7 @@ MIR_SetWindowTitle(_THIS, SDL_Window* window)
     char const* title = window->title ? window->title : "";
     MirWindowSpec* spec;
 
-    if (IsSurfaceValid(mir_window) < 0)
+    if (IsMirWindowValid(mir_window) < 0)
         return;
 
     spec = MIR_mir_create_window_spec(mir_data->connection);

+ 13 - 1
test/configure

@@ -637,6 +637,7 @@ infodir
 docdir
 oldincludedir
 includedir
+runstatedir
 localstatedir
 sharedstatedir
 sysconfdir
@@ -717,6 +718,7 @@ datadir='${datarootdir}'
 sysconfdir='${prefix}/etc'
 sharedstatedir='${prefix}/com'
 localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
 includedir='${prefix}/include'
 oldincludedir='/usr/include'
 docdir='${datarootdir}/doc/${PACKAGE}'
@@ -969,6 +971,15 @@ do
   | -silent | --silent | --silen | --sile | --sil)
     silent=yes ;;
 
+  -runstatedir | --runstatedir | --runstatedi | --runstated \
+  | --runstate | --runstat | --runsta | --runst | --runs \
+  | --run | --ru | --r)
+    ac_prev=runstatedir ;;
+  -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+  | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+  | --run=* | --ru=* | --r=*)
+    runstatedir=$ac_optarg ;;
+
   -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
     ac_prev=sbindir ;;
   -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
@@ -1106,7 +1117,7 @@ fi
 for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
 		datadir sysconfdir sharedstatedir localstatedir includedir \
 		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
-		libdir localedir mandir
+		libdir localedir mandir runstatedir
 do
   eval ac_val=\$$ac_var
   # Remove trailing slashes.
@@ -1259,6 +1270,7 @@ Fine tuning of the installation directories:
   --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
   --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
   --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --runstatedir=DIR       modifiable per-process data [LOCALSTATEDIR/run]
   --libdir=DIR            object code libraries [EPREFIX/lib]
   --includedir=DIR        C header files [PREFIX/include]
   --oldincludedir=DIR     C header files for non-gcc [/usr/include]