Hello community, here is the log from the commit of package pinpoint for openSUSE:Factory checked in at 2016-01-15 10:40:59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/pinpoint (Old) and /work/SRC/openSUSE:Factory/.pinpoint.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "pinpoint" Changes: -------- --- /work/SRC/openSUSE:Factory/pinpoint/pinpoint.changes 2015-08-01 11:38:03.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.pinpoint.new/pinpoint.changes 2016-01-15 10:41:00.000000000 +0100 @@ -1,0 +2,9 @@ +Tue Jan 12 13:49:37 UTC 2016 - [email protected] + +- Update to version 0.1.8: + + Make pinpoint work on Wayland (includes depending on Gtk+ to + have window decorations). + + Remove more deprecation warnings (still so many left). +- Add pkgconfig(clutter-gtk-1.0) BuildRequires: new dependency. + +------------------------------------------------------------------- Old: ---- pinpoint-0.1.6.tar.xz New: ---- pinpoint-0.1.8.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ pinpoint.spec ++++++ --- /var/tmp/diff_new_pack.kzHbsq/_old 2016-01-15 10:41:01.000000000 +0100 +++ /var/tmp/diff_new_pack.kzHbsq/_new 2016-01-15 10:41:01.000000000 +0100 @@ -1,7 +1,7 @@ # # spec file for package pinpoint # -# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: pinpoint -Version: 0.1.6 +Version: 0.1.8 Release: 0 Summary: Simple Presentation Tool for Excellent Presentations License: LGPL-2.1+ @@ -25,8 +25,9 @@ Url: http://live.gnome.org/Pinpoint Source: http://download.gnome.org/sources/pinpoint/0.1/%{name}-%{version}.tar.xz BuildRequires: pkgconfig(cairo-pdf) -BuildRequires: pkgconfig(clutter-1.0) >= 1.12 +BuildRequires: pkgconfig(clutter-1.0) >= 1.23.7 BuildRequires: pkgconfig(clutter-gst-3.0) >= 3.0.0 +BuildRequires: pkgconfig(clutter-gtk-1.0) >= 1.6 BuildRequires: pkgconfig(gdk-pixbuf-2.0) BuildRequires: pkgconfig(gio-2.0) BuildRequires: pkgconfig(librsvg-2.0) ++++++ pinpoint-0.1.6.tar.xz -> pinpoint-0.1.8.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pinpoint-0.1.6/Makefile.in new/pinpoint-0.1.8/Makefile.in --- old/pinpoint-0.1.6/Makefile.in 2015-07-28 00:18:50.000000000 +0200 +++ new/pinpoint-0.1.8/Makefile.in 2015-09-22 20:12:20.000000000 +0200 @@ -328,6 +328,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pinpoint-0.1.6/NEWS new/pinpoint-0.1.8/NEWS --- old/pinpoint-0.1.6/NEWS 2015-07-28 00:16:52.000000000 +0200 +++ new/pinpoint-0.1.8/NEWS 2015-09-22 20:11:48.000000000 +0200 @@ -1,4 +1,10 @@ -Pinpoint 0.1.6 - Bodean's - 2015-07-127 +Pinpoint 0.1.8 - Burrito Tuesday - 2015-09-22 + +- Make pinpoint work on Wayland (includes depending on Gtk+ to have window + decorations) +- Remove more deprecation warnings (still so many left) + +Pinpoint 0.1.6 - Bodean's - 2015-07-27 - --ignore-comments to generate slides without comments - Switched to a more recent version of GStreamer diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pinpoint-0.1.6/config.h.in new/pinpoint-0.1.8/config.h.in --- old/pinpoint-0.1.6/config.h.in 2015-07-28 00:24:47.000000000 +0200 +++ new/pinpoint-0.1.8/config.h.in 2015-09-22 20:12:21.000000000 +0200 @@ -1,8 +1,5 @@ /* config.h.in. Generated from configure.ac by autoheader. */ -/* Whether clutter is compiled for x11 */ -#undef HAVE_CLUTTER_X11 - /* Whether pinpoint will generate PDFs */ #undef HAVE_PDF diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pinpoint-0.1.6/configure new/pinpoint-0.1.8/configure --- old/pinpoint-0.1.6/configure 2015-07-28 00:10:18.000000000 +0200 +++ new/pinpoint-0.1.8/configure 2015-09-22 20:12:20.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for pinpoint 0.1.6. +# Generated by GNU Autoconf 2.69 for pinpoint 0.1.8. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -577,8 +577,8 @@ # Identity of this package. PACKAGE_NAME='pinpoint' PACKAGE_TARNAME='pinpoint' -PACKAGE_VERSION='0.1.6' -PACKAGE_STRING='pinpoint 0.1.6' +PACKAGE_VERSION='0.1.8' +PACKAGE_STRING='pinpoint 0.1.8' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -672,6 +672,7 @@ docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -753,6 +754,7 @@ sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -1005,6 +1007,15 @@ | -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=* \ @@ -1142,7 +1153,7 @@ 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. @@ -1255,7 +1266,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures pinpoint 0.1.6 to adapt to many kinds of systems. +\`configure' configures pinpoint 0.1.8 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1295,6 +1306,7 @@ --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] @@ -1321,7 +1333,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of pinpoint 0.1.6:";; + short | recursive ) echo "Configuration of pinpoint 0.1.8:";; esac cat <<\_ACEOF @@ -1427,7 +1439,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -pinpoint configure 0.1.6 +pinpoint configure 0.1.8 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1561,7 +1573,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by pinpoint $as_me 0.1.6, which was +It was created by pinpoint $as_me 0.1.8, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2425,7 +2437,7 @@ # Define the identity of the package. PACKAGE='pinpoint' - VERSION='0.1.6' + VERSION='0.1.8' # Some tools Automake needs. @@ -2669,8 +2681,8 @@ PINPOINT_MAJOR_VERSION=0 PINPOINT_MINOR_VERSION=1 -PINPOINT_MICRO_VERSION=6 -PINPOINT_VERSION=0.1.6 +PINPOINT_MICRO_VERSION=8 +PINPOINT_VERSION=0.1.8 @@ -4286,7 +4298,7 @@ fi -PINPOINT_DEPS="clutter-1.0 >= 1.12 gio-2.0 >= 2.26 cairo-pdf pangocairo gdk-pixbuf-2.0" +PINPOINT_DEPS="clutter-gtk-1.0 >= 1.6 clutter-1.0 >= 1.23.7 gio-2.0 >= 2.26 cairo-pdf pangocairo gdk-pixbuf-2.0" list=-Wall @@ -4333,18 +4345,6 @@ -# Do we have clutter compiled for x11? -if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"clutter-x11-1.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "clutter-x11-1.0") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - -$as_echo "#define HAVE_CLUTTER_X11 1" >>confdefs.h - -fi - # PDF output support # Check whether --enable-pdf was given. if test "${enable_pdf+set}" = set; then : @@ -5208,7 +5208,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by pinpoint $as_me 0.1.6, which was +This file was extended by pinpoint $as_me 0.1.8, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -5274,7 +5274,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -pinpoint config.status 0.1.6 +pinpoint config.status 0.1.8 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pinpoint-0.1.6/configure.ac new/pinpoint-0.1.8/configure.ac --- old/pinpoint-0.1.6/configure.ac 2015-07-28 00:10:15.000000000 +0200 +++ new/pinpoint-0.1.8/configure.ac 2015-09-22 20:12:16.000000000 +0200 @@ -1,6 +1,6 @@ m4_define(pinpoint_major_version, 0) m4_define(pinpoint_minor_version, 1) -m4_define(pinpoint_micro_version, 6) +m4_define(pinpoint_micro_version, 8) m4_define([pinpoint_version], [pinpoint_major_version.pinpoint_minor_version.pinpoint_micro_version]) @@ -27,16 +27,11 @@ PKG_PROG_PKG_CONFIG AC_HEADER_STDC -PINPOINT_DEPS="clutter-1.0 >= 1.12 gio-2.0 >= 2.26 cairo-pdf pangocairo gdk-pixbuf-2.0" +PINPOINT_DEPS="clutter-gtk-1.0 >= 1.6 clutter-1.0 >= 1.23.7 gio-2.0 >= 2.26 cairo-pdf pangocairo gdk-pixbuf-2.0" AS_COMPILER_FLAGS([MAINTAINER_CFLAGS], [-Wall]) AC_SUBST(MAINTAINER_CFLAGS) -# Do we have clutter compiled for x11? -PKG_CHECK_EXISTS([clutter-x11-1.0], - [AC_DEFINE([HAVE_CLUTTER_X11], [1], - [Whether clutter is compiled for x11])]) - # PDF output support AC_ARG_ENABLE([pdf], [AS_HELP_STRING([--enable-pdf=@<:no/auto/yes:>@], diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pinpoint-0.1.6/pinpoint.c new/pinpoint-0.1.8/pinpoint.c --- old/pinpoint-0.1.6/pinpoint.c 2015-07-27 23:37:04.000000000 +0200 +++ new/pinpoint-0.1.8/pinpoint.c 2015-09-13 22:48:58.000000000 +0200 @@ -200,7 +200,6 @@ context = g_option_context_new ("- Presentations made easy"); g_option_context_add_main_entries (context, entries, NULL); g_option_context_add_group (context, clutter_get_option_group_without_init ()); - g_option_context_add_group (context, cogl_get_option_group ()); if (!g_option_context_parse (context, &argc, &argv, &error)) { g_print ("option parsing failed: %s\n", error->message); @@ -225,10 +224,11 @@ } } + if (!gtk_clutter_init (&argc, &argv)) + return EXIT_FAILURE; #ifdef USE_CLUTTER_GST - clutter_gst_init (&argc, &argv); -#else - clutter_init (&argc, &argv); + if (!clutter_gst_init (&argc, &argv)) + return EXIT_FAILURE; #endif #ifdef USE_DAX dax_init (&argc, &argv); @@ -952,17 +952,19 @@ } break; case '#': /* comment */ - if (startofline && ! pp_ignore_comments) + if (startofline) { const char *end = p + 1; while (*end != '\n' && *end != '\0') { - g_string_append_c (notes_str, *end); + if (!pp_ignore_comments) + g_string_append_c (notes_str, *end); end++; } if (end) { - g_string_append_c (notes_str, '\n'); + if (!pp_ignore_comments) + g_string_append_c (notes_str, '\n'); p = end; break; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pinpoint-0.1.6/pinpoint.h new/pinpoint-0.1.8/pinpoint.h --- old/pinpoint-0.1.6/pinpoint.h 2015-07-27 23:30:23.000000000 +0200 +++ new/pinpoint-0.1.8/pinpoint.h 2015-09-13 01:52:56.000000000 +0200 @@ -28,7 +28,7 @@ #include "config.h" #endif -#include <clutter/clutter.h> +#include <clutter-gtk/clutter-gtk.h> typedef struct _PinPointPoint PinPointPoint; typedef struct _PinPointRenderer PinPointRenderer; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pinpoint-0.1.6/pp-clutter.c new/pinpoint-0.1.8/pp-clutter.c --- old/pinpoint-0.1.6/pp-clutter.c 2015-07-27 23:30:45.000000000 +0200 +++ new/pinpoint-0.1.8/pp-clutter.c 2015-09-22 19:35:07.000000000 +0200 @@ -27,9 +27,6 @@ #include "pinpoint.h" -#if HAVE_CLUTTER_X11 -#include <clutter/x11/clutter-x11.h> -#endif #include <gio/gio.h> #ifdef USE_CLUTTER_GST #include <clutter-gst/clutter-gst.h> @@ -41,6 +38,9 @@ #include <stdlib.h> #include <string.h> +#define DEFAULT_WIDTH (800) +#define DEFAULT_HEIGHT (600) + void cairo_renderer_unset_cr (PinPointRenderer *pp_renderer); void cairo_renderer_set_cr (PinPointRenderer *pp_renderer, @@ -87,16 +87,15 @@ PinPointRenderer *pp_cairo_renderer (void); #endif -typedef enum _PPClutterBackend -{ - PP_CLUTTER_BACKEND_X11, - PP_CLUTTER_BACKEND_UNKNOWN -} PPClutterBackend; - typedef struct _ClutterRenderer { PinPointRenderer renderer; + + GtkApplication *application; + GHashTable *bg_cache; /* only load the same backgrounds once */ + + GtkWidget *window; ClutterActor *stage; ClutterActor *root; @@ -117,6 +116,7 @@ gboolean autoadvance; gboolean speaker_mode; + GtkWidget *speaker_window; ClutterActor *speaker_screen; gdouble slide_start_time; @@ -154,16 +154,11 @@ PinPointRenderer *cairo_renderer; - /* Proxy object for the Gnome Session Manager; used to inhibit suspend during - * presentations. - */ - GDBusProxy *gsm; - /* Token returned by the Inhibit() method; passed to Uninhibit() when we - * leave fullscreen to tell GSM it's free to turn the screen off now. + /* Token returned by the gtk_application_inhibit() method; passed to + * gtk_application_uninhibit() when we leave fullscreen to tell GSM + * it's free to turn the screen off now. */ guint32 inhibit_cookie; - - PPClutterBackend clutter_backend; } ClutterRenderer; typedef struct @@ -288,103 +283,33 @@ clutter_actor_set_position (data->background, bg_x, bg_y); } -#ifdef HAVE_CLUTTER_X11 -static void pp_set_fullscreen_x11 (ClutterStage *stage, - gboolean fullscreen) -{ - static gboolean is_fullscreen = FALSE; - static float old_width=640, old_height=480; - - struct { - unsigned long flags; - unsigned long functions; - unsigned long decorations; - long inputMode; - unsigned long status; - } MWMHints = { 2, 0, 0, 0, 0}; - - Display *xdisplay = clutter_x11_get_default_display (); - int xscreen = clutter_x11_get_default_screen (); - Atom wm_hints = XInternAtom(xdisplay, "_MOTIF_WM_HINTS", True); - Window xwindow = clutter_x11_get_stage_window (stage); - - if (!pp_maximized) - return clutter_stage_set_fullscreen (stage, fullscreen); - - pp_fullscreen = fullscreen; - if (is_fullscreen == fullscreen) - return; - is_fullscreen = fullscreen; - - if (fullscreen) - { - int full_width = DisplayWidth (xdisplay, xscreen); - int full_height = DisplayHeight (xdisplay, xscreen)+5; - /* avoid being detected as fullscreen, workaround for some - windowmanagers */ - clutter_actor_get_size (CLUTTER_ACTOR (stage), &old_width, &old_height); - - if (wm_hints != None) - XChangeProperty (xdisplay, xwindow, wm_hints, wm_hints, 32, - PropModeReplace, (guchar*)&MWMHints, - sizeof(MWMHints)/sizeof(long)); - clutter_actor_set_size (CLUTTER_ACTOR (stage), full_width, full_height); - XMoveResizeWindow (xdisplay, xwindow, - 0, 0, full_width, full_height); - } - else - { - MWMHints.decorations = 7; - if (wm_hints != None ) - XChangeProperty (xdisplay, xwindow, wm_hints, wm_hints, 32, - PropModeReplace, (guchar*)&MWMHints, - sizeof(MWMHints)/sizeof(long)); - clutter_stage_set_fullscreen (stage, FALSE); - clutter_actor_set_size (CLUTTER_ACTOR (stage), old_width, old_height); - } +static void +pp_monitor_window_state (GtkWidget *widget, + GdkEventWindowState *event, + gpointer user_data) +{ + gboolean fullscreen = (event->new_window_state & GDK_WINDOW_STATE_FULLSCREEN) != 0; + g_object_set_data (G_OBJECT (widget), + "fullscreen-state", GUINT_TO_POINTER (fullscreen)); } -static gboolean pp_get_fullscreen_x11 (ClutterStage *stage) -{ - if (!pp_maximized) - return clutter_stage_get_fullscreen (stage); - return pp_fullscreen; -} -#endif - static void -pp_set_fullscreen (ClutterRenderer *renderer, - ClutterStage *stage, - gboolean fullscreen) -{ - switch (renderer->clutter_backend) - { -#ifdef HAVE_CLUTTER_X11 - case PP_CLUTTER_BACKEND_X11: - pp_set_fullscreen_x11 (stage, fullscreen); - break; -#endif - - default: - clutter_stage_set_fullscreen (stage, fullscreen); - break; - } +pp_set_fullscreen (ClutterRenderer *renderer, + GtkWindow *window, + gboolean fullscreen) +{ + if (fullscreen) + gtk_window_fullscreen (window); + else + gtk_window_unfullscreen (window); } static gboolean pp_get_fullscreen (ClutterRenderer *renderer, - ClutterStage *stage) + GtkWindow *window) { - switch (renderer->clutter_backend) - { -#ifdef HAVE_CLUTTER_X11 - case PP_CLUTTER_BACKEND_X11: - return pp_get_fullscreen_x11 (stage); -#endif - - default: - return clutter_stage_get_fullscreen (stage); - } + return GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (window), + "fullscreen-state")); } static void @@ -439,8 +364,8 @@ PinPointPoint *point = pp_slidep->data; if (clutter_event_type (event) == CLUTTER_KEY_PRESS && - (clutter_event_get_key_symbol (event) == CLUTTER_Escape || - clutter_event_get_key_symbol (event) == CLUTTER_Tab)) + (clutter_event_get_key_symbol (event) == CLUTTER_KEY_Escape || + clutter_event_get_key_symbol (event) == CLUTTER_KEY_Tab)) { clutter_actor_grab_key_focus (renderer->stage); pp_actor_animate (renderer->commandline, @@ -512,7 +437,8 @@ clutter_stage_show_cursor (CLUTTER_STAGE (actor)); hide_cursor = g_timeout_add (500, hide_cursor_cb, actor); - if (!pp_get_fullscreen (renderer, CLUTTER_STAGE (actor))) + if (!pp_get_fullscreen (renderer, + GTK_WINDOW (((ClutterRenderer *)renderer)->window))) return FALSE; clutter_actor_get_size (CLUTTER_RENDERER (renderer)->stage, @@ -579,7 +505,7 @@ gpointer data) { ClutterRenderer *renderer = CLUTTER_RENDERER (data); - if (!renderer->speaker_screen) { + if (!renderer->speaker_window) { return TRUE; } if (renderer->timer_paused) @@ -721,11 +647,25 @@ static void clutter_renderer_init_speaker_screen (ClutterRenderer *renderer) { + GtkWidget *embed; - renderer->speaker_screen = clutter_stage_new (); - clutter_stage_set_title(CLUTTER_STAGE(renderer->speaker_screen), "Pinpoint speaker screen"); - + renderer->speaker_window = g_object_new (GTK_TYPE_WINDOW, + "type", GTK_WINDOW_TOPLEVEL, + "hide-titlebar-when-maximized", TRUE, + "resizable", TRUE, + "title", "Pinpoint speaker screen", + "default-width", DEFAULT_WIDTH, + "default-height", DEFAULT_HEIGHT, + NULL); + gtk_application_add_window (renderer->application, + GTK_WINDOW (renderer->speaker_window)); + g_signal_connect (renderer->speaker_window, "window-state-event", + G_CALLBACK (pp_monitor_window_state), NULL); + embed = gtk_clutter_embed_new (); + gtk_container_add (GTK_CONTAINER (renderer->speaker_window), + embed); + renderer->speaker_screen = gtk_clutter_embed_get_stage (GTK_CLUTTER_EMBED (embed)); renderer->speaker_notes = g_object_new (CLUTTER_TYPE_TEXT, "x", 10.0, @@ -866,7 +806,6 @@ clutter_actor_set_background_color (renderer->speaker_screen, &black); clutter_actor_set_background_color (renderer->speaker_screen, &black); - clutter_stage_set_user_resizable (CLUTTER_STAGE (renderer->speaker_screen), TRUE); renderer->speaker_preview_bar = pp_rectangle_new_with_color (&lightgray); @@ -917,16 +856,20 @@ g_signal_connect (renderer->speaker_next, "button-press-event", G_CALLBACK (go_next), renderer); - g_signal_connect (renderer->speaker_screen, "delete-event", + g_signal_connect (renderer->speaker_window, "delete-event", G_CALLBACK (speaker_screen_deleted), renderer); + + gtk_widget_show_all (embed); } static gboolean -stage_deleted (ClutterStage *stage, - ClutterEvent *event, - gpointer user_data) +window_deleted (ClutterStage *stage, + ClutterEvent *event, + gpointer user_data) { - clutter_main_quit (); + ClutterRenderer *renderer = CLUTTER_RENDERER (user_data); + + g_application_quit (G_APPLICATION (renderer->application)); return TRUE; } @@ -938,11 +881,34 @@ ClutterRenderer *renderer = CLUTTER_RENDERER (pp_renderer); GFileMonitor *monitor; ClutterActor *stage; - GDBusConnection *session_bus; - ClutterBackend *backend; + GtkWidget *embed; - renderer->stage = stage = clutter_stage_new (); - clutter_stage_set_title(CLUTTER_STAGE(stage), "Pinpoint presentation"); + renderer->application = gtk_application_new ("org.gnome.Pinpoint", + G_APPLICATION_NON_UNIQUE); + g_application_register (G_APPLICATION (renderer->application), NULL, NULL); + + renderer->window = g_object_new (GTK_TYPE_WINDOW, + "type", GTK_WINDOW_TOPLEVEL, + "hide-titlebar-when-maximized", TRUE, + "resizable", TRUE, + "title", "Pinpoint presentation", + "default-width", DEFAULT_WIDTH, + "default-height", DEFAULT_HEIGHT, + NULL); + g_signal_connect_swapped (renderer->application, "activate", + G_CALLBACK (gtk_window_present), renderer->window); + gtk_application_add_window (renderer->application, + GTK_WINDOW (renderer->window)); + g_signal_connect (renderer->window, "window-state-event", + G_CALLBACK (pp_monitor_window_state), NULL); + g_signal_connect (renderer->window, "delete-event", + G_CALLBACK (window_deleted), renderer); + + embed = gtk_clutter_embed_new (); + gtk_container_add (GTK_CONTAINER (renderer->window), embed); + gtk_window_set_focus (GTK_WINDOW (renderer->window), embed); + + renderer->stage = stage = gtk_clutter_embed_get_stage (GTK_CLUTTER_EMBED (embed)); renderer->root = clutter_actor_new (); renderer->curtain = pp_rectangle_new_with_color (&black); renderer->rest_y = STARTPOS; @@ -954,15 +920,6 @@ renderer->commandline_shading = pp_rectangle_new_with_color (&black); renderer->commandline = clutter_text_new (); - /* Clutter doesn't seem to have a good way to infer which backend it - is using so we'll try to guess from the name of the backend - class */ - backend = clutter_get_default_backend (); - if (strcmp (G_OBJECT_TYPE_NAME (backend), "ClutterBackendX11") == 0) - renderer->clutter_backend = PP_CLUTTER_BACKEND_X11; - else - renderer->clutter_backend = PP_CLUTTER_BACKEND_UNKNOWN; - clutter_actor_set_size (renderer->curtain, 10000, 10000); clutter_actor_hide (renderer->curtain); clutter_actor_set_opacity (renderer->shading, 0x77); @@ -987,12 +944,9 @@ if (pp_speakermode) toggle_speaker_screen (renderer); - clutter_actor_show (stage); - + gtk_widget_show_all (renderer->window); clutter_actor_set_background_color (stage, &black); - g_signal_connect (stage, "delete-event", - G_CALLBACK (stage_deleted), renderer); g_signal_connect (stage, "key-press-event", G_CALLBACK (key_pressed), renderer); g_signal_connect (stage, "button-press-event", @@ -1021,10 +975,8 @@ g_signal_connect (renderer->commandline, "notify::width", G_CALLBACK (commandline_notify_cb), renderer); - clutter_stage_set_user_resizable (CLUTTER_STAGE (stage), TRUE); - if (pp_fullscreen) { - pp_set_fullscreen (renderer, CLUTTER_STAGE (stage), TRUE); + pp_set_fullscreen (renderer, GTK_WINDOW (renderer->window), TRUE); pp_inhibit (renderer, pp_fullscreen); } @@ -1042,22 +994,6 @@ renderer->cairo_renderer = pp_cairo_renderer (); renderer->cairo_renderer->init (renderer->cairo_renderer, pinpoint_file); - - session_bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL); - if (session_bus != NULL) - { - renderer->gsm = g_dbus_proxy_new_sync (session_bus, - G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES | - G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS | - G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START, - NULL, - "org.gnome.SessionManager", - "/org/gnome/SessionManager", - "org.gnome.SessionManager", - NULL, - NULL); - g_clear_object (&session_bus); - } } static gboolean update_speaker_screen (ClutterRenderer *renderer); @@ -1073,7 +1009,7 @@ renderer->total_seconds = point_defaults->duration * 60; g_timeout_add (15, (GSourceFunc)update_speaker_screen, renderer); - clutter_main (); + g_application_run (G_APPLICATION (renderer->application), 0, NULL); } static void @@ -1081,9 +1017,10 @@ { ClutterRenderer *renderer = CLUTTER_RENDERER (pp_renderer); - clutter_actor_destroy (renderer->stage); + gtk_widget_destroy (renderer->window); + gtk_widget_destroy (renderer->speaker_window); + g_hash_table_unref (renderer->bg_cache); - g_clear_object (&renderer->gsm); } static ClutterActor * @@ -1377,81 +1314,53 @@ toggle_autoadvance (NULL, NULL, renderer); } - -static void -toggle_speaker_screen (ClutterRenderer *renderer) +static gboolean +toggle_speaker_screen_internal (ClutterRenderer *renderer) { - if (!renderer->speaker_screen) + if (!renderer->speaker_window) clutter_renderer_init_speaker_screen (renderer); if (renderer->speaker_mode) { renderer->speaker_mode = FALSE; - clutter_actor_hide (renderer->speaker_screen); + gtk_widget_hide (renderer->speaker_window); } else { renderer->speaker_mode = TRUE; - clutter_actor_show (renderer->speaker_screen); + gtk_widget_show_all (renderer->speaker_window); } + return FALSE; +} + +static void +toggle_speaker_screen (ClutterRenderer *renderer) +{ + /* Because of the complex interaction between Clutter & GTK+, we + * need to break out the event processing chain. This timeout ensure + * we don't process an event in each framework within the same + * call stack. + */ + g_timeout_add (0, (GSourceFunc) toggle_speaker_screen_internal, renderer); } static void pp_inhibit (ClutterRenderer *renderer, gboolean fullscreen) { -#if HAVE_CLUTTER_X11 - if (renderer->clutter_backend != PP_CLUTTER_BACKEND_X11) - return; - - /* Hey maybe we don't have D-Bus. */ - if (renderer->gsm == NULL) - return; - if (fullscreen) { - GVariant *args = g_variant_new ("(susu)", - "Pinpoint", - clutter_x11_get_stage_window ( - CLUTTER_STAGE (renderer->stage)), - "Presenting some blingin' slides", - /* The flag '8' means "Inhibit the - * session being marked as idle", as - * opposed to logging out, user - * switching, or suspending. - */ - 8); - GVariant *ret = g_dbus_proxy_call_sync (renderer->gsm, - "Inhibit", - args, - G_DBUS_CALL_FLAGS_NONE, - -1, - NULL, - NULL); - - if (ret != NULL) - { - if (g_variant_is_of_type (ret, G_VARIANT_TYPE ("(u)"))) - g_variant_get (ret, "(u)", &renderer->inhibit_cookie); - - g_variant_unref (ret); - } - /* Bleh, maybe this is an older version of Gnome where it was the - * screensaver which had the inhibition API. - */ + renderer->inhibit_cookie = + gtk_application_inhibit (renderer->application, + GTK_WINDOW (renderer->window), + GTK_APPLICATION_INHIBIT_IDLE, + "Presenting some blingin' slides"); } else if (renderer->inhibit_cookie != 0) { - g_dbus_proxy_call_sync (renderer->gsm, - "Uninhibit", - g_variant_new ("(u)", renderer->inhibit_cookie), - G_DBUS_CALL_FLAGS_NONE, - -1, - NULL, - NULL); + gtk_application_uninhibit (renderer->application, + renderer->inhibit_cookie); renderer->inhibit_cookie = 0; } - /* else I guess Inhibit() failed. */ -#endif /* HAVE_CLUTTER_X11 */ } static gboolean @@ -1462,75 +1371,75 @@ if (event) /* There is no event for the first triggering */ switch (clutter_event_get_key_symbol (event)) { - case CLUTTER_Left: - case CLUTTER_Up: - case CLUTTER_BackSpace: - case CLUTTER_Prior: + case CLUTTER_KEY_Left: + case CLUTTER_KEY_Up: + case CLUTTER_KEY_BackSpace: + case CLUTTER_KEY_Prior: prev_slide (renderer); break; - case CLUTTER_Right: - case CLUTTER_space: - case CLUTTER_Next: - case CLUTTER_Down: + case CLUTTER_KEY_Right: + case CLUTTER_KEY_space: + case CLUTTER_KEY_Next: + case CLUTTER_KEY_Down: next_slide (renderer); break; - case CLUTTER_Escape: - case CLUTTER_Q: - case CLUTTER_q: - clutter_main_quit (); + case CLUTTER_KEY_Escape: + case CLUTTER_KEY_Q: + case CLUTTER_KEY_q: + g_application_quit (G_APPLICATION (renderer->application)); break; - case CLUTTER_F1: + case CLUTTER_KEY_F1: { gboolean was_fullscreen = pp_get_fullscreen (renderer, - CLUTTER_STAGE (renderer->stage)); + GTK_WINDOW (renderer->window)); toggle_speaker_screen (renderer); - if (renderer->speaker_mode && renderer->speaker_screen) + if (renderer->speaker_mode && renderer->speaker_window) pp_set_fullscreen (renderer, - CLUTTER_STAGE (renderer->speaker_screen), + GTK_WINDOW (renderer->speaker_window), was_fullscreen); } break; - case CLUTTER_F2: + case CLUTTER_KEY_F2: if (renderer->autoadvance) renderer->autoadvance = FALSE; else renderer->autoadvance = TRUE; break; - case CLUTTER_F11: - case CLUTTER_F: - case CLUTTER_f: + case CLUTTER_KEY_F11: + case CLUTTER_KEY_F: + case CLUTTER_KEY_f: { gboolean was_fullscreen = pp_get_fullscreen (renderer, - CLUTTER_STAGE (renderer->stage)); + GTK_WINDOW (renderer->window)); pp_set_fullscreen (renderer, - CLUTTER_STAGE (renderer->stage), + GTK_WINDOW (renderer->window), !was_fullscreen); - if (renderer->speaker_mode && renderer->speaker_screen) + if (renderer->speaker_mode && renderer->speaker_window) pp_set_fullscreen (renderer, - CLUTTER_STAGE (renderer->speaker_screen), + GTK_WINDOW (renderer->speaker_window), !was_fullscreen); pp_inhibit (renderer, !was_fullscreen); } break; - case CLUTTER_Return: + case CLUTTER_KEY_Return: action_slide (renderer); break; - case CLUTTER_Tab: + case CLUTTER_KEY_Tab: activate_commandline (renderer); break; - case CLUTTER_b: - case CLUTTER_B: - if (CLUTTER_ACTOR_IS_VISIBLE (renderer->curtain)) + case CLUTTER_KEY_b: + case CLUTTER_KEY_B: + if (clutter_actor_is_visible (renderer->curtain)) clutter_actor_hide (renderer->curtain); else clutter_actor_show (renderer->curtain); break; - case CLUTTER_H: - case CLUTTER_h: - case CLUTTER_Home: + case CLUTTER_KEY_H: + case CLUTTER_KEY_h: + case CLUTTER_KEY_Home: start (NULL, NULL, renderer); break; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pinpoint-0.1.6/transitions/Makefile.in new/pinpoint-0.1.8/transitions/Makefile.in --- old/pinpoint-0.1.6/transitions/Makefile.in 2015-07-28 00:10:17.000000000 +0200 +++ new/pinpoint-0.1.8/transitions/Makefile.in 2015-09-22 20:12:20.000000000 +0200 @@ -239,6 +239,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@
