Commit 711cd10e authored by Sean Davis's avatar Sean Davis
Browse files

Add RANDER support, drop unused definitions

parent 2958215a
......@@ -27,3 +27,62 @@ po/Makefile.in.in
savers/Makefile.in
src/.deps/
src/Makefile.in
Makefile
config.h
config.log
config.status
data/Makefile
data/images/Makefile
data/images/cosmos/Makefile
data/images/cosmos/background-1.xml
data/images/cosmos/cosmos.xml
data/images/cosmos/cosmos.xml.in
data/org.mate.ScreenSaver.service
data/org.mate.screensaver.gschema.valid
data/org.mate.screensaver.gschema.xml
data/xfce4-screensaver-preferences.desktop
data/xfce4-screensaver.directory
data/xfce4-screensaver.pc
data/xfce4-screensavers.menu
doc/Makefile
doc/xfce4-screensaver.xml
libtool
po/.intltool-merge-cache
po/Makefile
po/POTFILES
po/stamp-it
*.gmo
savers/.deps/
savers/Makefile
savers/cosmos-slideshow.desktop
savers/cosmos-slideshow.desktop.in
savers/floaters
savers/footlogo-floaters.desktop
savers/footlogo-floaters.desktop.in
savers/gnomelogo-floaters.desktop
savers/gnomelogo-floaters.desktop.in
savers/gs-theme-engine-marshal.c
savers/gs-theme-engine-marshal.h
savers/libgs-theme-engine.a
savers/personal-slideshow.desktop
savers/personal-slideshow.desktop.in
savers/popsquares
savers/popsquares.desktop
savers/popsquares.desktop.in
savers/slideshow
src/Makefile
src/gs-marshal.c
src/gs-marshal.h
src/test-fade
src/test-passwd
src/test-watcher
src/test-window
src/xfce4-screensaver
src/xfce4-screensaver-command
src/xfce4-screensaver-dialog
src/xfce4-screensaver-gl-helper
src/xfce4-screensaver-preferences
src/xfce4-screensaver.desktop
src/xfce4-screensaver.desktop.in
src/xfcekbd-indicator-marshal.h
stamp-h1
......@@ -48,6 +48,7 @@ GLIB_REQUIRED_VERSION=2.50.0
GTK_REQUIRED_VERSION=3.22.0
X11_REQUIRED_VERSION=1.0
LIBXKLAVIER_REQUIRED=5.2
XRANDR_REQUIRED=1.3
AC_CHECK_HEADERS(unistd.h)
AC_CHECK_HEADERS(crypt.h sys/select.h)
......@@ -56,6 +57,23 @@ AC_CHECK_FUNCS(sigaction syslog realpath setrlimit)
AC_CHECK_FUNCS(getresuid)
AC_TYPE_UID_T
dnl Checks for X is RANDR extension
AC_MSG_CHECKING(for xrandr)
if $PKG_CONFIG --atleast-version $XRANDR_REQUIRED xrandr; then
AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_RANDR, 1,
[Define if the xrandr-$XRANDR_REQUIRED library is present])
have_randr=yes
RANDR_PACKAGE=xrandr
else
AC_MSG_RESULT(no)
have_randr=no
RANDR_PACKAGE=
fi
AC_SUBST(RANDR_PACKAGE)
AC_CHECK_FUNCS([setresuid setenv unsetenv clearenv])
PKG_CHECK_MODULES(MATE_SCREENSAVER,
x11 >= $X11_REQUIRED_VERSION
......@@ -63,7 +81,8 @@ PKG_CHECK_MODULES(MATE_SCREENSAVER,
gtk+-3.0 >= $GTK_REQUIRED_VERSION
dbus-glib-1 >= $DBUS_REQUIRED_VERSION
gio-2.0 >= $GLIB_REQUIRED_VERSION
libxklavier >= $LIBXKLAVIER_REQUIRED)
libxklavier >= $LIBXKLAVIER_REQUIRED
$RANDR_PACKAGE)
AC_SUBST(MATE_SCREENSAVER_CFLAGS)
AC_SUBST(MATE_SCREENSAVER_LIBS)
......
......@@ -253,218 +253,6 @@ get_thumbnailers_dirs (void)
return g_once (&once_init, init_thumbnailers_dirs, NULL);
}
static void
size_prepared_cb (GdkPixbufLoader *loader,
int width,
int height,
gpointer data)
{
SizePrepareContext *info = data;
g_return_if_fail (width > 0 && height > 0);
info->input_width = width;
info->input_height = height;
if (width < info->width && height < info->height) return;
if (info->preserve_aspect_ratio &&
(info->width > 0 || info->height > 0)) {
if (info->width < 0)
{
width = width * (double)info->height/(double)height;
height = info->height;
}
else if (info->height < 0)
{
height = height * (double)info->width/(double)width;
width = info->width;
}
else if ((double)height * (double)info->width >
(double)width * (double)info->height) {
width = 0.5 + (double)width * (double)info->height / (double)height;
height = info->height;
} else {
height = 0.5 + (double)height * (double)info->width / (double)width;
width = info->width;
}
} else {
if (info->width > 0)
width = info->width;
if (info->height > 0)
height = info->height;
}
gdk_pixbuf_loader_set_size (loader, width, height);
}
static GdkPixbufLoader *
create_loader (GFile *file,
const guchar *data,
gsize size)
{
GdkPixbufLoader *loader = NULL;
GError *error = NULL;
char *mime_type;
char *filename;
/* need to specify the type here because the gdk_pixbuf_loader_write
doesn't have access to the filename in order to correct detect
the image type. */
filename = g_file_get_basename (file);
mime_type = g_content_type_guess (filename, data, size, NULL);
g_free (filename);
if (mime_type != NULL) {
loader = gdk_pixbuf_loader_new_with_mime_type (mime_type, &error);
}
if (loader == NULL && error != NULL) {
g_warning ("Unable to create loader for mime type %s: %s", mime_type, error->message);
g_clear_error (&error);
loader = gdk_pixbuf_loader_new ();
}
g_free (mime_type);
return loader;
}
static GdkPixbuf *
_gdk_pixbuf_new_from_uri_at_scale (const char *uri,
gint width,
gint height,
gboolean preserve_aspect_ratio)
{
gboolean result;
guchar buffer[LOAD_BUFFER_SIZE];
gsize bytes_read;
GdkPixbufLoader *loader = NULL;
GdkPixbuf *pixbuf;
GdkPixbufAnimation *animation;
GdkPixbufAnimationIter *iter;
gboolean has_frame;
SizePrepareContext info;
GFile *file;
GFileInfo *file_info;
GInputStream *input_stream;
GError *error = NULL;
g_return_val_if_fail (uri != NULL, NULL);
input_stream = NULL;
file = g_file_new_for_uri (uri);
/* First see if we can get an input stream via preview::icon */
file_info = g_file_query_info (file,
G_FILE_ATTRIBUTE_PREVIEW_ICON,
G_FILE_QUERY_INFO_NONE,
NULL, /* GCancellable */
NULL); /* return location for GError */
if (file_info != NULL) {
GObject *object;
object = g_file_info_get_attribute_object (file_info,
G_FILE_ATTRIBUTE_PREVIEW_ICON);
if (object != NULL && G_IS_LOADABLE_ICON (object)) {
input_stream = g_loadable_icon_load (G_LOADABLE_ICON (object),
0, /* size */
NULL, /* return location for type */
NULL, /* GCancellable */
NULL); /* return location for GError */
}
g_object_unref (file_info);
}
if (input_stream == NULL) {
input_stream = G_INPUT_STREAM (g_file_read (file, NULL, NULL));
if (input_stream == NULL) {
g_object_unref (file);
return NULL;
}
}
has_frame = FALSE;
result = FALSE;
while (!has_frame) {
bytes_read = g_input_stream_read (input_stream,
buffer,
sizeof (buffer),
NULL,
&error);
if (error != NULL) {
g_warning ("Error reading from %s: %s", uri, error->message);
g_clear_error (&error);
}
if (bytes_read == -1) {
break;
}
result = TRUE;
if (bytes_read == 0) {
break;
}
if (loader == NULL) {
loader = create_loader (file, buffer, bytes_read);
if (1 <= width || 1 <= height) {
info.width = width;
info.height = height;
info.input_width = info.input_height = 0;
info.preserve_aspect_ratio = preserve_aspect_ratio;
g_signal_connect (loader, "size-prepared", G_CALLBACK (size_prepared_cb), &info);
}
g_assert (loader != NULL);
}
if (!gdk_pixbuf_loader_write (loader,
(unsigned char *)buffer,
bytes_read,
&error)) {
g_warning ("Error creating thumbnail for %s: %s", uri, error->message);
g_clear_error (&error);
result = FALSE;
break;
}
animation = gdk_pixbuf_loader_get_animation (loader);
if (animation) {
iter = gdk_pixbuf_animation_get_iter (animation, NULL);
if (!gdk_pixbuf_animation_iter_on_currently_loading_frame (iter)) {
has_frame = TRUE;
}
g_object_unref (iter);
}
}
gdk_pixbuf_loader_close (loader, NULL);
if (!result) {
g_object_unref (G_OBJECT (loader));
g_input_stream_close (input_stream, NULL, NULL);
g_object_unref (input_stream);
g_object_unref (file);
return NULL;
}
g_input_stream_close (input_stream, NULL, NULL);
g_object_unref (input_stream);
g_object_unref (file);
pixbuf = gdk_pixbuf_loader_get_pixbuf (loader);
if (pixbuf != NULL) {
g_object_ref (G_OBJECT (pixbuf));
g_object_set_data (G_OBJECT (pixbuf), "mate-original-width",
GINT_TO_POINTER (info.input_width));
g_object_set_data (G_OBJECT (pixbuf), "mate-original-height",
GINT_TO_POINTER (info.input_height));
}
g_object_unref (G_OBJECT (loader));
return pixbuf;
}
static void
xfce_desktop_thumbnail_factory_finalize (GObject *object)
{
......@@ -1089,75 +877,6 @@ xfce_desktop_thumbnail_factory_can_thumbnail (XfceDesktopThumbnailFactory *facto
return FALSE;
}
static char *
expand_thumbnailing_script (const char *script,
const int size,
const char *inuri,
const char *outfile)
{
GString *str;
const char *p, *last;
char *localfile, *quoted;
gboolean got_in;
str = g_string_new (NULL);
got_in = FALSE;
last = script;
while ((p = strchr (last, '%')) != NULL)
{
g_string_append_len (str, last, p - last);
p++;
switch (*p) {
case 'u':
quoted = g_shell_quote (inuri);
g_string_append (str, quoted);
g_free (quoted);
got_in = TRUE;
p++;
break;
case 'i':
localfile = g_filename_from_uri (inuri, NULL, NULL);
if (localfile)
{
quoted = g_shell_quote (localfile);
g_string_append (str, quoted);
got_in = TRUE;
g_free (quoted);
g_free (localfile);
}
p++;
break;
case 'o':
quoted = g_shell_quote (outfile);
g_string_append (str, quoted);
g_free (quoted);
p++;
break;
case 's':
g_string_append_printf (str, "%d", size);
p++;
break;
case '%':
g_string_append_c (str, '%');
p++;
break;
case 0:
default:
break;
}
last = p;
}
g_string_append (str, last);
if (got_in)
return g_string_free (str, FALSE);
g_string_free (str, TRUE);
return NULL;
}
static gboolean
make_thumbnail_dirs (XfceDesktopThumbnailFactory *factory)
{
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment