Skip to content

Commit

Permalink
Merge branch 'xscreensaver' of github:jrk-/X11
Browse files Browse the repository at this point in the history
  • Loading branch information
dmwit committed Sep 18, 2012
2 parents f750e32 + ac3933e commit d325078
Show file tree
Hide file tree
Showing 8 changed files with 514 additions and 1 deletion.
14 changes: 14 additions & 0 deletions Graphics/X11/Types.hsc
Expand Up @@ -434,6 +434,10 @@ module Graphics.X11.Types
rrCrtcChangeNotifyMask,
rrOutputChangeNotifyMask,
rrOutputPropertyNotifyMask,
#ifdef HAVE_X11_EXTENSIONS_SCRNSAVER_H
screenSaverCycleMask,
screenSaverNotifyMask,
#endif

-- ** Event types
EventType,
Expand Down Expand Up @@ -476,6 +480,9 @@ module Graphics.X11.Types
rrNotifyOutputChange,
rrNotifyOutputProperty,
lASTEvent,
#ifdef HAVE_X11_EXTENSIONS_SCRNSAVER_H
screenSaverNotify,
#endif

-- ** Modifiers
Modifier,
Expand Down Expand Up @@ -1285,6 +1292,10 @@ type EventMask = Mask
, rrCrtcChangeNotifyMask = RRCrtcChangeNotifyMask
, rrOutputChangeNotifyMask = RROutputChangeNotifyMask
, rrOutputPropertyNotifyMask = RROutputPropertyNotifyMask
#ifdef HAVE_X11_EXTENSIONS_SCRNSAVER_H
, screenSaverCycleMask = ScreenSaverCycleMask
, screenSaverNotifyMask = ScreenSaverNotifyMask
#endif
}

type EventType = Word32
Expand Down Expand Up @@ -1328,6 +1339,9 @@ type EventType = Word32
, rrNotifyOutputChange = RRNotify_OutputChange
, rrNotifyOutputProperty=RRNotify_OutputProperty
, lASTEvent = LASTEvent
#ifdef HAVE_X11_EXTENSIONS_SCRNSAVER_H
, screenSaverNotify = ScreenSaverNotify
#endif
}

type Modifier = CUInt
Expand Down
436 changes: 436 additions & 0 deletions Graphics/X11/XScreenSaver.hsc

Large diffs are not rendered by default.

35 changes: 34 additions & 1 deletion Graphics/X11/Xlib/Extras.hsc
Expand Up @@ -16,6 +16,9 @@ module Graphics.X11.Xlib.Extras where
import Data.Maybe
import Data.Typeable ( Typeable )
import Graphics.X11.Xrandr
#ifdef HAVE_X11_EXTENSIONS_SCRNSAVER_H
import Graphics.X11.XScreenSaver
#endif
import Graphics.X11.Xlib
import Graphics.X11.Xlib.Types
import Foreign (Storable, Ptr, peek, poke, peekElemOff, pokeElemOff, peekByteOff, pokeByteOff, peekArray, throwIfNull, nullPtr, sizeOf, alignment, alloca, with, throwIf, Word8, Word16, #{type unsigned long}, Int32, plusPtr, castPtr, withArrayLen, setBit, testBit, allocaBytes, FunPtr)
Expand Down Expand Up @@ -281,7 +284,20 @@ data Event
, ev_timestamp :: !Time
, ev_rr_state :: !CInt
}

#ifdef HAVE_X11_EXTENSIONS_SCRNSAVER_H
| ScreenSaverNotifyEvent
{ ev_event_type :: !EventType
, ev_serial :: !CULong
, ev_send_event :: !Bool
, ev_event_display :: Display
, ev_window :: !Window
, ev_root :: !Window
, ev_ss_state :: !XScreenSaverState
, ev_ss_kind :: !XScreenSaverKind
, ev_forced :: !Bool
, ev_time :: !Time
}
#endif
deriving ( Show, Typeable )

eventTable :: [(EventType, String)]
Expand Down Expand Up @@ -320,6 +336,9 @@ eventTable =
, (clientMessage , "ClientMessage")
, (mappingNotify , "MappingNotify")
, (lASTEvent , "LASTEvent")
#ifdef HAVE_X11_EXTENSIONS_SCRNSAVER_H
, (screenSaverNotify , "ScreenSaverNotify")
#endif
]

eventName :: Event -> String
Expand Down Expand Up @@ -804,6 +823,20 @@ getEvent p = do
, ev_subtype = subtype
}

#ifdef HAVE_X11_EXTENSIONS_SCRNSAVER_H
-----------------
-- ScreenSaverNotifyEvent:
-----------------
| type_ == screenSaverNotify -> do
return (ScreenSaverNotifyEvent type_ serial send_event display)
`ap` (#{peek XScreenSaverNotifyEvent, window } p )
`ap` (#{peek XScreenSaverNotifyEvent, root } p )
`ap` (#{peek XScreenSaverNotifyEvent, state } p )
`ap` (#{peek XScreenSaverNotifyEvent, kind } p )
`ap` (#{peek XScreenSaverNotifyEvent, forced } p )
`ap` (#{peek XScreenSaverNotifyEvent, time } p )
#endif

-- We don't handle this event specifically, so return the generic
-- AnyEvent.
| otherwise -> do
Expand Down
1 change: 1 addition & 0 deletions Makefile.nhc98
Expand Up @@ -20,6 +20,7 @@ SRCS = \
Graphics/X11/Xlib/Window.hs \
Graphics.X11.Xlib.Extras \
Graphics.X11.Xinerama \
Graphics.X11.XScreenSaver \
fdset.c \
XUtils.c \
auxiliaries.c
Expand Down
1 change: 1 addition & 0 deletions X11.cabal
Expand Up @@ -44,6 +44,7 @@ library
Graphics.X11.Xlib.Extras,
Graphics.X11.Xinerama
Graphics.X11.Xrandr
Graphics.X11.XScreenSaver
Graphics.X11.ExtraTypes,
Graphics.X11.ExtraTypes.AP,
Graphics.X11.ExtraTypes.DEC,
Expand Down
20 changes: 20 additions & 0 deletions configure.ac
Expand Up @@ -78,6 +78,26 @@ if ! test "$have_xrandr" = yes; then
AC_MSG_ERROR([X11/extensions/Xrandr.h (from libXrandr) is required])
fi

AC_MSG_CHECKING([whether to build XScreenSaver])
AC_ARG_WITH(xscreensaver,
AS_HELP_STRING([--without-xscreensaver], [do not build XScreenSaver support]),
[],
[with_xscreensaver=yes])
AC_MSG_RESULT([$with_xscreensaver])

if test "$with_xscreensaver" = yes; then
AC_CHECK_HEADERS([X11/extensions/scrnsaver.h], [have_xscreensaver=yes])
if test "$have_xscreensaver" = yes; then
EXTRA_LIBRARIES="extra-libraries: Xss"
else
EXTRA_LIBRARIES=""
echo "WARNING: XScreenSaver headers not found. Building without XScreenSaver support"
fi
else
EXTRA_LIBRARIES=""
echo "WARNING: Building without XScreenSaver support per user request"
fi

AC_MSG_CHECKING([whether to include X.org keysyms])
AC_ARG_WITH(xorg-keysym,
AS_HELP_STRING([--without-xorg-keysym], [do not build X.org keysym support]),
Expand Down
4 changes: 4 additions & 0 deletions include/HsXlib.h
Expand Up @@ -20,6 +20,10 @@

#include <X11/extensions/Xrandr.h>

#ifdef HAVE_X11_EXTENSIONS_SCRNSAVER_H
#include <X11/extensions/scrnsaver.h>
#endif

/* Xutil.h overrides some functions with macros.
* In recent versions of X this can be turned off with
*
Expand Down
4 changes: 4 additions & 0 deletions include/XlibExtras.h
Expand Up @@ -19,6 +19,10 @@

#include <X11/extensions/Xrandr.h>

#ifdef HAVE_X11_EXTENSIONS_SCRNSAVER_H
#include <X11/extensions/scrnsaver.h>
#endif

/* Xutil.h overrides some functions with macros.
* In recent versions of X this can be turned off with
* #define XUTIL_DEFINE_FUNCTIONS
Expand Down

0 comments on commit d325078

Please sign in to comment.