]> git.pld-linux.org Git - packages/xfce4-power-manager.git/commitdiff
- updated from git, upower 0.99 and systemd support added auto/th/xfce4-power-manager-1.2.0-2
authorJan Rękorajski <baggins@pld-linux.org>
Sat, 10 May 2014 18:30:17 +0000 (20:30 +0200)
committerJan Rękorajski <baggins@pld-linux.org>
Sat, 10 May 2014 18:30:17 +0000 (20:30 +0200)
- rel 2

36 files changed:
0049-Autotools-updates.patch [new file with mode: 0644]
0061-Remove-custom-OSD-brightness-popup-use-libnotify-ins.patch [new file with mode: 0644]
0073-Ignore-useless-deprecation-warnings-for-now.patch [new file with mode: 0644]
0074-Don-t-init-thread-on-gobject-3.32.patch [new file with mode: 0644]
0075-Change-brightness-level-from-glong-to-gint32.patch [new file with mode: 0644]
0079-Fix-Typo-in-xfpm-power.c.patch [new file with mode: 0644]
0080-Fix-typo-in-error-message.patch [new file with mode: 0644]
0081-Fix-typo.patch [new file with mode: 0644]
0082-Fix-incorrect-check-for-suspend-permissions-bug-8438.patch [new file with mode: 0644]
0145-Add-shutdown-reboot-functionality-for-systemd-Bug-10.patch [new file with mode: 0644]
0146-Fix-empty-systray-icon-in-some-panels-on-battery-rem.patch [new file with mode: 0644]
0147-Display-power-percentage.patch [new file with mode: 0644]
0148-Fix-status-icon-for-devices-other-than-battery-and-u.patch [new file with mode: 0644]
0149-Update-to-XFCE_PANEL_PLUGIN_REGISTER.patch [new file with mode: 0644]
0150-Add-support-for-keyboard-backlight-control-Bug-10470.patch [new file with mode: 0644]
0151-Don-t-allow-systemd-to-handle-suspend-hibernate-even.patch [new file with mode: 0644]
0152-xfpm-power-info-add-current-percentage-of-batteries.patch [new file with mode: 0644]
0153-xfpm-battery-do-not-show-an-icon-for-HID-devices.patch [new file with mode: 0644]
0154-Update-xfce4-session-lock-screen-setting.patch [new file with mode: 0644]
0155-Use-the-online-docs-for-help.patch [new file with mode: 0644]
0156-Add-xfpm-backlight.c-to-potfiles.patch [new file with mode: 0644]
0157-Remove-the-doc-configure-deps.patch [new file with mode: 0644]
0171-Add-support-for-logind-suspend-resume-Bug-9963.patch [new file with mode: 0644]
0172-Update-min-requirements-and-autotools.patch [new file with mode: 0644]
0175-port-xfpm-to-libupower-glib-add-support-for-upower-0.patch [new file with mode: 0644]
0176-get-rid-of-XfpmDeviceState-and-XfpmDeviceType.patch [new file with mode: 0644]
0177-xfpm_backlight_button_pressed_cb-fix-popup-display.patch [new file with mode: 0644]
0178-Fix-potential-uninitialized-variable.patch [new file with mode: 0644]
0200-Add-a-option-for-network-manager-sleep-Bug-10702.patch [new file with mode: 0644]
0201-Fix-for-enable-deprecared-and-gseal.patch [new file with mode: 0644]
0202-Uninitialized-variable-start_time.patch [new file with mode: 0644]
0203-Fix-uninitialized-pointer-read.patch [new file with mode: 0644]
0206-Warn-when-no-lock-tool-succeeded-Bug-6413.patch [new file with mode: 0644]
xfce4-power-manager-ac-am.patch [deleted file]
xfce4-power-manager.spec
xfpm-enum-types.patch [new file with mode: 0644]

diff --git a/0049-Autotools-updates.patch b/0049-Autotools-updates.patch
new file mode 100644 (file)
index 0000000..64aff54
--- /dev/null
@@ -0,0 +1,27 @@
+From 6176d68fc8e9717d2c96ff55e29a42c48e1395e8 Mon Sep 17 00:00:00 2001
+From: Nick Schermer <nick@xfce.org>
+Date: Sun, 6 Jan 2013 12:20:20 +0100
+Subject: [PATCH 049/219] Autotools updates.
+
+---
+ configure.ac.in | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index aca782a..633b340 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -9,8 +9,8 @@ m4_define([xfpm_version], [xfpm_version_major().xfpm_version_minor().xfpm_versio
+ AC_INIT([xfce4-power-manager], [xfpm_version], [http://bugzilla.xfce.org/])
+ AC_PREREQ(2.50)
+-AM_INIT_AUTOMAKE([1.8 dist-bzip2 tar-ustar])
+-AM_CONFIG_HEADER([config.h])
++AM_INIT_AUTOMAKE([1.8 dist-bzip2 tar-ustar no-dist-gzip])
++AC_CONFIG_HEADERS([config.h])
+ AM_MAINTAINER_MODE()
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+-- 
+1.9.3
+
diff --git a/0061-Remove-custom-OSD-brightness-popup-use-libnotify-ins.patch b/0061-Remove-custom-OSD-brightness-popup-use-libnotify-ins.patch
new file mode 100644 (file)
index 0000000..5494779
--- /dev/null
@@ -0,0 +1,1418 @@
+From 5ac47c842bb53ba7ae9240ccd2af7c93fe7eecaf Mon Sep 17 00:00:00 2001
+From: Jannis Pohlmann <jannis@xfce.org>
+Date: Sun, 3 Feb 2013 00:30:48 +0100
+Subject: [PATCH 061/219] Remove custom OSD brightness popup, use libnotify
+ instead
+
+The custom rendered OSD popup to indicate the current brightness
+state whenever it changed looked nice but it is better handled in
+the notification daemon. E.g. we could include an extension hint
+in the notification to have xfce4-notifyd render certain
+notifications (e.g. brightness, volume changes) in a different style
+than regular notifications.
+
+This commit simplifies the whole brightness notification logic
+quite a bit.
+
+Signed-off-by: Jannis Pohlmann <jannis@xfce.org>
+---
+ src/Makefile.am             |    4 +-
+ src/gsd-media-keys-window.c | 1078 -------------------------------------------
+ src/gsd-media-keys-window.h |   71 ---
+ src/xfpm-backlight.c        |  128 +----
+ src/xfpm-notify.c           |    2 +-
+ 5 files changed, 19 insertions(+), 1264 deletions(-)
+ delete mode 100644 src/gsd-media-keys-window.c
+ delete mode 100644 src/gsd-media-keys-window.h
+
+diff --git a/src/Makefile.am b/src/Makefile.am
+index eaca181..0435bed 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -37,9 +37,7 @@ xfce4_power_manager_SOURCES =                   \
+       xfpm-polkit.c                           \
+       xfpm-polkit.h                           \
+       xfpm-errors.c                           \
+-      xfpm-errors.h                           \
+-      gsd-media-keys-window.c                 \
+-      gsd-media-keys-window.h
++      xfpm-errors.h
+ xfce4_power_manager_CFLAGS =                    \
+       -I$(top_srcdir)                         \
+diff --git a/src/gsd-media-keys-window.c b/src/gsd-media-keys-window.c
+deleted file mode 100644
+index b2664e2..0000000
+--- a/src/gsd-media-keys-window.c
++++ /dev/null
+@@ -1,1078 +0,0 @@
+-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+- *
+- * Copyright (C) 2006-2007 William Jon McCann <mccann@jhu.edu>
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation; either version 2 of the License, or
+- * (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+- *
+- */
+-
+-#include "config.h"
+-
+-#include <stdlib.h>
+-#include <string.h>
+-#include <math.h>
+-#include <glib.h>
+-#include <glib/gi18n.h>
+-#include <gtk/gtk.h>
+-
+-#include "gsd-media-keys-window.h"
+-
+-#include "data/interfaces/acme_ui.h"
+-
+-#define DIALOG_TIMEOUT 2000     /* dialog timeout in ms */
+-#define DIALOG_FADE_TIMEOUT 1500 /* timeout before fade starts */
+-#define FADE_TIMEOUT 10        /* timeout in ms between each frame of the fade */
+-
+-#define BG_ALPHA 0.75
+-#define FG_ALPHA 1.00
+-
+-#define GSD_MEDIA_KEYS_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSD_TYPE_MEDIA_KEYS_WINDOW, GsdMediaKeysWindowPrivate))
+-
+-struct GsdMediaKeysWindowPrivate
+-{
+-        guint                    is_composited : 1;
+-        guint                    hide_timeout_id;
+-        guint                    fade_timeout_id;
+-        double                   fade_out_alpha;
+-        GsdMediaKeysWindowAction action;
+-        char                    *icon_name;
+-        gboolean                 show_level;
+-
+-        guint                    volume_muted : 1;
+-        int                      volume_level;
+-
+-        GtkImage                *image;
+-        GtkWidget               *progress;
+-};
+-
+-G_DEFINE_TYPE (GsdMediaKeysWindow, gsd_media_keys_window, GTK_TYPE_WINDOW)
+-
+-static gboolean
+-fade_timeout (GsdMediaKeysWindow *window)
+-{
+-        if (window->priv->fade_out_alpha <= 0.0) {
+-                gtk_widget_hide (GTK_WIDGET (window));
+-
+-                /* Reset it for the next time */
+-                window->priv->fade_out_alpha = 1.0;
+-                window->priv->fade_timeout_id = 0;
+-
+-                return FALSE;
+-        } else {
+-                GdkRectangle rect;
+-                GtkWidget *win = GTK_WIDGET (window);
+-                GtkAllocation allocation;
+-
+-                window->priv->fade_out_alpha -= 0.10;
+-
+-                rect.x = 0;
+-                rect.y = 0;
+-                gtk_widget_get_allocation (win, &allocation);
+-                rect.width = allocation.width;
+-                rect.height = allocation.height;
+-
+-                gtk_widget_realize (win);
+-                gdk_window_invalidate_rect (gtk_widget_get_window (win), &rect, FALSE);
+-        }
+-
+-        return TRUE;
+-}
+-
+-static gboolean
+-hide_timeout (GsdMediaKeysWindow *window)
+-{
+-        if (window->priv->is_composited) {
+-                window->priv->hide_timeout_id = 0;
+-                window->priv->fade_timeout_id = g_timeout_add (FADE_TIMEOUT,
+-                                                               (GSourceFunc) fade_timeout,
+-                                                               window);
+-        } else {
+-                gtk_widget_hide (GTK_WIDGET (window));
+-        }
+-
+-        return FALSE;
+-}
+-
+-static void
+-remove_hide_timeout (GsdMediaKeysWindow *window)
+-{
+-        if (window->priv->hide_timeout_id != 0) {
+-                g_source_remove (window->priv->hide_timeout_id);
+-                window->priv->hide_timeout_id = 0;
+-        }
+-
+-        if (window->priv->fade_timeout_id != 0) {
+-                g_source_remove (window->priv->fade_timeout_id);
+-                window->priv->fade_timeout_id = 0;
+-                window->priv->fade_out_alpha = 1.0;
+-        }
+-}
+-
+-static void
+-add_hide_timeout (GsdMediaKeysWindow *window)
+-{
+-        int timeout;
+-
+-        if (window->priv->is_composited) {
+-                timeout = DIALOG_FADE_TIMEOUT;
+-        } else {
+-                timeout = DIALOG_TIMEOUT;
+-        }
+-        window->priv->hide_timeout_id = g_timeout_add (timeout,
+-                                                       (GSourceFunc) hide_timeout,
+-                                                       window);
+-}
+-
+-static void
+-update_window (GsdMediaKeysWindow *window)
+-{
+-        remove_hide_timeout (window);
+-        add_hide_timeout (window);
+-
+-        if (window->priv->is_composited) {
+-                gtk_widget_queue_draw (GTK_WIDGET (window));
+-        }
+-}
+-
+-static void
+-volume_controls_set_visible (GsdMediaKeysWindow *window,
+-                             gboolean            visible)
+-{
+-        if (window->priv->progress == NULL)
+-                return;
+-
+-        if (visible) {
+-                gtk_widget_show (window->priv->progress);
+-        } else {
+-                gtk_widget_hide (window->priv->progress);
+-        }
+-}
+-
+-static void
+-window_set_icon_name (GsdMediaKeysWindow *window,
+-                      const char         *name)
+-{
+-        if (window->priv->image == NULL)
+-                return;
+-
+-        gtk_image_set_from_icon_name (window->priv->image,
+-                                      name, GTK_ICON_SIZE_DIALOG);
+-}
+-
+-static void
+-action_changed (GsdMediaKeysWindow *window)
+-{
+-        if (! window->priv->is_composited) {
+-                switch (window->priv->action) {
+-                case GSD_MEDIA_KEYS_WINDOW_ACTION_VOLUME:
+-                        volume_controls_set_visible (window, TRUE);
+-
+-                        if (window->priv->volume_muted) {
+-                                window_set_icon_name (window, "audio-volume-muted");
+-                        } else {
+-                                window_set_icon_name (window, "audio-volume-high");
+-                        }
+-
+-                        break;
+-                case GSD_MEDIA_KEYS_WINDOW_ACTION_CUSTOM:
+-                        volume_controls_set_visible (window, window->priv->show_level);
+-                        window_set_icon_name (window, window->priv->icon_name);
+-                        break;
+-                default:
+-                        g_assert_not_reached ();
+-                        break;
+-                }
+-        }
+-
+-        update_window (window);
+-}
+-
+-static void
+-volume_level_changed (GsdMediaKeysWindow *window)
+-{
+-        update_window (window);
+-
+-        if (!window->priv->is_composited && window->priv->progress != NULL) {
+-                double fraction;
+-
+-                fraction = (double) window->priv->volume_level / 100.0;
+-
+-                gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (window->priv->progress),
+-                                               fraction);
+-        }
+-}
+-
+-static void
+-volume_muted_changed (GsdMediaKeysWindow *window)
+-{
+-        update_window (window);
+-
+-        if (! window->priv->is_composited) {
+-                if (window->priv->volume_muted) {
+-                        window_set_icon_name (window, "audio-volume-muted");
+-                } else {
+-                        window_set_icon_name (window, "audio-volume-high");
+-                }
+-        }
+-}
+-
+-void
+-gsd_media_keys_window_set_action (GsdMediaKeysWindow      *window,
+-                                  GsdMediaKeysWindowAction action)
+-{
+-        g_return_if_fail (GSD_IS_MEDIA_KEYS_WINDOW (window));
+-        g_return_if_fail (action == GSD_MEDIA_KEYS_WINDOW_ACTION_VOLUME);
+-
+-        if (window->priv->action != action) {
+-                window->priv->action = action;
+-                action_changed (window);
+-        } else {
+-                update_window (window);
+-        }
+-}
+-
+-void
+-gsd_media_keys_window_set_action_custom (GsdMediaKeysWindow      *window,
+-                                         const char              *icon_name,
+-                                         gboolean                 show_level)
+-{
+-        g_return_if_fail (GSD_IS_MEDIA_KEYS_WINDOW (window));
+-        g_return_if_fail (icon_name != NULL);
+-
+-        if (window->priv->action != GSD_MEDIA_KEYS_WINDOW_ACTION_CUSTOM ||
+-            g_strcmp0 (window->priv->icon_name, icon_name) != 0 ||
+-            window->priv->show_level != show_level) {
+-                window->priv->action = GSD_MEDIA_KEYS_WINDOW_ACTION_CUSTOM;
+-                g_free (window->priv->icon_name);
+-                window->priv->icon_name = g_strdup (icon_name);
+-                window->priv->show_level = show_level;
+-                action_changed (window);
+-        } else {
+-                update_window (window);
+-        }
+-}
+-
+-void
+-gsd_media_keys_window_set_volume_muted (GsdMediaKeysWindow *window,
+-                                        gboolean            muted)
+-{
+-        g_return_if_fail (GSD_IS_MEDIA_KEYS_WINDOW (window));
+-
+-        if (window->priv->volume_muted != muted) {
+-                window->priv->volume_muted = muted;
+-                volume_muted_changed (window);
+-        }
+-}
+-
+-void
+-gsd_media_keys_window_set_volume_level (GsdMediaKeysWindow *window,
+-                                        int                 level)
+-{
+-        g_return_if_fail (GSD_IS_MEDIA_KEYS_WINDOW (window));
+-
+-        if (window->priv->volume_level != level) {
+-                window->priv->volume_level = level;
+-                volume_level_changed (window);
+-        }
+-}
+-
+-static void
+-rounded_rectangle (cairo_t* cr,
+-                   gdouble  aspect,
+-                   gdouble  x,
+-                   gdouble  y,
+-                   gdouble  corner_radius,
+-                   gdouble  width,
+-                   gdouble  height)
+-{
+-        gdouble radius = corner_radius / aspect;
+-
+-        cairo_move_to (cr, x + radius, y);
+-
+-        cairo_line_to (cr,
+-                       x + width - radius,
+-                       y);
+-        cairo_arc (cr,
+-                   x + width - radius,
+-                   y + radius,
+-                   radius,
+-                   -90.0f * G_PI / 180.0f,
+-                   0.0f * G_PI / 180.0f);
+-        cairo_line_to (cr,
+-                       x + width,
+-                       y + height - radius);
+-        cairo_arc (cr,
+-                   x + width - radius,
+-                   y + height - radius,
+-                   radius,
+-                   0.0f * G_PI / 180.0f,
+-                   90.0f * G_PI / 180.0f);
+-        cairo_line_to (cr,
+-                       x + radius,
+-                       y + height);
+-        cairo_arc (cr,
+-                   x + radius,
+-                   y + height - radius,
+-                   radius,
+-                   90.0f * G_PI / 180.0f,
+-                   180.0f * G_PI / 180.0f);
+-        cairo_line_to (cr,
+-                       x,
+-                       y + radius);
+-        cairo_arc (cr,
+-                   x + radius,
+-                   y + radius,
+-                   radius,
+-                   180.0f * G_PI / 180.0f,
+-                   270.0f * G_PI / 180.0f);
+-        cairo_close_path (cr);
+-}
+-
+-static GdkPixbuf *
+-load_pixbuf (GsdMediaKeysWindow *window,
+-             const char         *name,
+-             int                 icon_size)
+-{
+-        GtkIconTheme *theme;
+-        GdkPixbuf    *pixbuf;
+-
+-        if (window != NULL && gtk_widget_has_screen (GTK_WIDGET (window))) {
+-                theme = gtk_icon_theme_get_for_screen (gtk_widget_get_screen (GTK_WIDGET (window)));
+-        } else {
+-                theme = gtk_icon_theme_get_default ();
+-        }
+-
+-        pixbuf = gtk_icon_theme_load_icon (theme,
+-                                           name,
+-                                           icon_size,
+-                                           GTK_ICON_LOOKUP_FORCE_SVG,
+-                                           NULL);
+-
+-        /* make sure the pixbuf is close to the requested size
+-         * this is necessary because GTK_ICON_LOOKUP_FORCE_SVG
+-         * seems to be broken */
+-        if (pixbuf != NULL) {
+-                int width;
+-
+-                width = gdk_pixbuf_get_width (pixbuf);
+-                if (width < (float)icon_size * 0.75) {
+-                        g_object_unref (pixbuf);
+-                        pixbuf = NULL;
+-                }
+-        }
+-
+-        return pixbuf;
+-}
+-
+-static void
+-draw_eject (cairo_t *cr,
+-            double   _x0,
+-            double   _y0,
+-            double   width,
+-            double   height)
+-{
+-        int box_height;
+-        int tri_height;
+-        int separation;
+-
+-        box_height = height * 0.2;
+-        separation = box_height / 3;
+-        tri_height = height - box_height - separation;
+-
+-        cairo_rectangle (cr, _x0, _y0 + height - box_height, width, box_height);
+-
+-        cairo_move_to (cr, _x0, _y0 + tri_height);
+-        cairo_rel_line_to (cr, width, 0);
+-        cairo_rel_line_to (cr, -width / 2, -tri_height);
+-        cairo_rel_line_to (cr, -width / 2, tri_height);
+-        cairo_close_path (cr);
+-        cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, FG_ALPHA);
+-        cairo_fill_preserve (cr);
+-
+-        cairo_set_source_rgba (cr, 0.6, 0.6, 0.6, FG_ALPHA / 2);
+-        cairo_set_line_width (cr, 2);
+-        cairo_stroke (cr);
+-}
+-
+-static void
+-draw_waves (cairo_t *cr,
+-            double   cx,
+-            double   cy,
+-            double   max_radius,
+-            int      volume_level)
+-{
+-        const int n_waves = 3;
+-        int last_wave;
+-        int i;
+-
+-        last_wave = n_waves * volume_level / 100;
+-
+-        for (i = 0; i < n_waves; i++) {
+-                double angle1;
+-                double angle2;
+-                double radius;
+-                double alpha;
+-
+-                angle1 = -M_PI / 4;
+-                angle2 = M_PI / 4;
+-
+-                if (i < last_wave)
+-                        alpha = 1.0;
+-                else if (i > last_wave)
+-                        alpha = 0.1;
+-                else alpha = 0.1 + 0.9 * (n_waves * volume_level % 100) / 100.0;
+-
+-                radius = (i + 1) * (max_radius / n_waves);
+-                cairo_arc (cr, cx, cy, radius, angle1, angle2);
+-                cairo_set_source_rgba (cr, 0.6, 0.6, 0.6, alpha / 2);
+-                cairo_set_line_width (cr, 14);
+-                cairo_set_line_cap  (cr, CAIRO_LINE_CAP_ROUND);
+-                cairo_stroke_preserve (cr);
+-
+-                cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, alpha);
+-                cairo_set_line_width (cr, 10);
+-                cairo_set_line_cap  (cr, CAIRO_LINE_CAP_ROUND);
+-                cairo_stroke (cr);
+-        }
+-}
+-
+-static void
+-draw_cross (cairo_t *cr,
+-            double   cx,
+-            double   cy,
+-            double   size)
+-{
+-        cairo_move_to (cr, cx, cy - size/2.0);
+-        cairo_rel_line_to (cr, size, size);
+-
+-        cairo_move_to (cr, cx, cy + size/2.0);
+-        cairo_rel_line_to (cr, size, -size);
+-
+-        cairo_set_source_rgba (cr, 0.6, 0.6, 0.6, FG_ALPHA / 2);
+-        cairo_set_line_width (cr, 14);
+-        cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND);
+-        cairo_stroke_preserve (cr);
+-
+-        cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, FG_ALPHA);
+-        cairo_set_line_width (cr, 10);
+-        cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND);
+-        cairo_stroke (cr);
+-}
+-
+-static void
+-draw_speaker (cairo_t *cr,
+-              double   cx,
+-              double   cy,
+-              double   width,
+-              double   height)
+-{
+-        double box_width;
+-        double box_height;
+-        double _x0;
+-        double _y0;
+-
+-        box_width = width / 3;
+-        box_height = height / 3;
+-
+-        _x0 = cx - (width / 2) + box_width;
+-        _y0 = cy - box_height / 2;
+-
+-        cairo_move_to (cr, _x0, _y0);
+-        cairo_rel_line_to (cr, - box_width, 0);
+-        cairo_rel_line_to (cr, 0, box_height);
+-        cairo_rel_line_to (cr, box_width, 0);
+-
+-        cairo_line_to (cr, cx + box_width, cy + height / 2);
+-        cairo_rel_line_to (cr, 0, -height);
+-        cairo_line_to (cr, _x0, _y0);
+-        cairo_close_path (cr);
+-
+-        cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, FG_ALPHA);
+-        cairo_fill_preserve (cr);
+-
+-        cairo_set_source_rgba (cr, 0.6, 0.6, 0.6, FG_ALPHA / 2);
+-        cairo_set_line_width (cr, 2);
+-        cairo_stroke (cr);
+-}
+-
+-static gboolean
+-render_speaker (GsdMediaKeysWindow *window,
+-                cairo_t            *cr,
+-                double              _x0,
+-                double              _y0,
+-                double              width,
+-                double              height)
+-{
+-        GdkPixbuf         *pixbuf;
+-        int                icon_size;
+-        int                n;
+-        static const char *icon_names[] = {
+-                "audio-volume-muted",
+-                "audio-volume-low",
+-                "audio-volume-medium",
+-                "audio-volume-high",
+-                NULL
+-        };
+-
+-        if (window->priv->volume_muted) {
+-                n = 0;
+-        } else {
+-                /* select image */
+-                n = 3 * window->priv->volume_level / 100 + 1;
+-                if (n < 1) {
+-                        n = 1;
+-                } else if (n > 3) {
+-                        n = 3;
+-                }
+-        }
+-
+-        icon_size = (int)width;
+-
+-        pixbuf = load_pixbuf (window, icon_names[n], icon_size);
+-
+-        if (pixbuf == NULL) {
+-                return FALSE;
+-        }
+-
+-        gdk_cairo_set_source_pixbuf (cr, pixbuf, _x0, _y0);
+-        cairo_paint_with_alpha (cr, FG_ALPHA);
+-
+-        g_object_unref (pixbuf);
+-
+-        return TRUE;
+-}
+-
+-static void
+-color_reverse (const GdkColor *a,
+-               GdkColor       *b)
+-{
+-        gdouble red;
+-        gdouble green;
+-        gdouble blue;
+-        gdouble h;
+-        gdouble s;
+-        gdouble v;
+-
+-        red = (gdouble) a->red / 65535.0;
+-        green = (gdouble) a->green / 65535.0;
+-        blue = (gdouble) a->blue / 65535.0;
+-
+-        gtk_rgb_to_hsv (red, green, blue, &h, &s, &v);
+-
+-        v = 0.5 + (0.5 - v);
+-        if (v > 1.0)
+-                v = 1.0;
+-        else if (v < 0.0)
+-                v = 0.0;
+-
+-        gtk_hsv_to_rgb (h, s, v, &red, &green, &blue);
+-
+-        b->red = red * 65535.0;
+-        b->green = green * 65535.0;
+-        b->blue = blue * 65535.0;
+-}
+-
+-static void
+-draw_volume_boxes (GsdMediaKeysWindow *window,
+-                   cairo_t            *cr,
+-                   double              percentage,
+-                   double              _x0,
+-                   double              _y0,
+-                   double              width,
+-                   double              height)
+-{
+-        gdouble   x1;
+-        GdkColor  color;
+-        double    r, g, b;
+-        GtkStyle *style;
+-
+-        _x0 += 0.5;
+-        _y0 += 0.5;
+-        height = round (height) - 1;
+-        width = round (width) - 1;
+-        x1 = round ((width - 1) * percentage);
+-        style = gtk_widget_get_style (GTK_WIDGET (window));
+-
+-        /* bar background */
+-        color_reverse (&style->dark[GTK_STATE_NORMAL], &color);
+-        r = (float)color.red / 65535.0;
+-        g = (float)color.green / 65535.0;
+-        b = (float)color.blue / 65535.0;
+-        rounded_rectangle (cr, 1.0, _x0, _y0, height / 6, width, height);
+-        cairo_set_source_rgba (cr, r, g, b, FG_ALPHA / 2);
+-        cairo_fill_preserve (cr);
+-
+-        /* bar border */
+-        color_reverse (&style->light[GTK_STATE_NORMAL], &color);
+-        r = (float)color.red / 65535.0;
+-        g = (float)color.green / 65535.0;
+-        b = (float)color.blue / 65535.0;
+-        cairo_set_source_rgba (cr, r, g, b, FG_ALPHA / 2);
+-        cairo_set_line_width (cr, 1);
+-        cairo_stroke (cr);
+-
+-        /* bar progress */
+-        if (percentage < 0.01)
+-                return;
+-        color = style->bg[GTK_STATE_NORMAL];
+-        r = (float)color.red / 65535.0;
+-        g = (float)color.green / 65535.0;
+-        b = (float)color.blue / 65535.0;
+-        rounded_rectangle (cr, 1.0, _x0 + 0.5, _y0 + 0.5, height / 6 - 0.5, x1, height - 1);
+-        cairo_set_source_rgba (cr, r, g, b, FG_ALPHA);
+-        cairo_fill (cr);
+-}
+-
+-static void
+-draw_action_volume (GsdMediaKeysWindow *window,
+-                    cairo_t            *cr)
+-{
+-        int window_width;
+-        int window_height;
+-        double icon_box_width;
+-        double icon_box_height;
+-        double icon_box_x0;
+-        double icon_box_y0;
+-        double volume_box_x0;
+-        double volume_box_y0;
+-        double volume_box_width;
+-        double volume_box_height;
+-        gboolean res;
+-
+-        gtk_window_get_size (GTK_WINDOW (window), &window_width, &window_height);
+-
+-        icon_box_width = round (window_width * 0.65);
+-        icon_box_height = round (window_height * 0.65);
+-        volume_box_width = icon_box_width;
+-        volume_box_height = round (window_height * 0.05);
+-
+-        icon_box_x0 = (window_width - icon_box_width) / 2;
+-        icon_box_y0 = (window_height - icon_box_height - volume_box_height) / 2;
+-        volume_box_x0 = round (icon_box_x0);
+-        volume_box_y0 = round (icon_box_height + icon_box_y0);
+-
+-#if 0
+-        g_message ("icon box: w=%f h=%f _x0=%f _y0=%f",
+-                   icon_box_width,
+-                   icon_box_height,
+-                   icon_box_x0,
+-                   icon_box_y0);
+-        g_message ("volume box: w=%f h=%f _x0=%f _y0=%f",
+-                   volume_box_width,
+-                   volume_box_height,
+-                   volume_box_x0,
+-                   volume_box_y0);
+-#endif
+-
+-        res = render_speaker (window,
+-                              cr,
+-                              icon_box_x0, icon_box_y0,
+-                              icon_box_width, icon_box_height);
+-        if (! res) {
+-                double speaker_width;
+-                double speaker_height;
+-                double speaker_cx;
+-                double speaker_cy;
+-
+-                speaker_width = icon_box_width * 0.5;
+-                speaker_height = icon_box_height * 0.75;
+-                speaker_cx = icon_box_x0 + speaker_width / 2;
+-                speaker_cy = icon_box_y0 + speaker_height / 2;
+-
+-#if 0
+-                g_message ("speaker box: w=%f h=%f cx=%f cy=%f",
+-                           speaker_width,
+-                           speaker_height,
+-                           speaker_cx,
+-                           speaker_cy);
+-#endif
+-
+-                /* draw speaker symbol */
+-                draw_speaker (cr, speaker_cx, speaker_cy, speaker_width, speaker_height);
+-
+-                if (! window->priv->volume_muted) {
+-                        /* draw sound waves */
+-                        double wave_x0;
+-                        double wave_y0;
+-                        double wave_radius;
+-
+-                        wave_x0 = window_width / 2;
+-                        wave_y0 = speaker_cy;
+-                        wave_radius = icon_box_width / 2;
+-
+-                        draw_waves (cr, wave_x0, wave_y0, wave_radius, window->priv->volume_level);
+-                } else {
+-                        /* draw 'mute' cross */
+-                        double cross_x0;
+-                        double cross_y0;
+-                        double cross_size;
+-
+-                        cross_size = speaker_width * 3 / 4;
+-                        cross_x0 = icon_box_x0 + icon_box_width - cross_size;
+-                        cross_y0 = speaker_cy;
+-
+-                        draw_cross (cr, cross_x0, cross_y0, cross_size);
+-                }
+-        }
+-
+-        /* draw volume meter */
+-        draw_volume_boxes (window,
+-                           cr,
+-                           (double)window->priv->volume_level / 100.0,
+-                           volume_box_x0,
+-                           volume_box_y0,
+-                           volume_box_width,
+-                           volume_box_height);
+-}
+-
+-static gboolean
+-render_custom (GsdMediaKeysWindow *window,
+-               cairo_t            *cr,
+-               double              _x0,
+-               double              _y0,
+-               double              width,
+-               double              height)
+-{
+-        GdkPixbuf         *pixbuf;
+-        int                icon_size;
+-
+-        icon_size = (int)width;
+-
+-        pixbuf = load_pixbuf (window, window->priv->icon_name, icon_size);
+-
+-        if (pixbuf == NULL) {
+-                char *name;
+-                if (gtk_widget_get_direction (GTK_WIDGET (window)) == GTK_TEXT_DIR_RTL)
+-                        name = g_strdup_printf ("%s-rtl", window->priv->icon_name);
+-                else
+-                        name = g_strdup_printf ("%s-ltr", window->priv->icon_name);
+-                pixbuf = load_pixbuf (window, name, icon_size);
+-                g_free (name);
+-                if (pixbuf == NULL)
+-                        return FALSE;
+-        }
+-
+-        gdk_cairo_set_source_pixbuf (cr, pixbuf, _x0, _y0);
+-        cairo_paint_with_alpha (cr, FG_ALPHA);
+-
+-        g_object_unref (pixbuf);
+-
+-        return TRUE;
+-}
+-
+-static void
+-draw_action_custom (GsdMediaKeysWindow *window,
+-                    cairo_t            *cr)
+-{
+-        int window_width;
+-        int window_height;
+-        double icon_box_width;
+-        double icon_box_height;
+-        double icon_box_x0;
+-        double icon_box_y0;
+-        double bright_box_x0;
+-        double bright_box_y0;
+-        double bright_box_width;
+-        double bright_box_height;
+-        gboolean res;
+-
+-        gtk_window_get_size (GTK_WINDOW (window), &window_width, &window_height);
+-
+-        icon_box_width = round (window_width * 0.65);
+-        icon_box_height = round (window_height * 0.65);
+-        bright_box_width = round (icon_box_width);
+-        bright_box_height = round (window_height * 0.05);
+-
+-        icon_box_x0 = (window_width - icon_box_width) / 2;
+-        icon_box_y0 = (window_height - icon_box_height - bright_box_height) / 2;
+-        bright_box_x0 = round (icon_box_x0);
+-        bright_box_y0 = round (icon_box_height + icon_box_y0);
+-
+-#if 0
+-        g_message ("icon box: w=%f h=%f _x0=%f _y0=%f",
+-                   icon_box_width,
+-                   icon_box_height,
+-                   icon_box_x0,
+-                   icon_box_y0);
+-        g_message ("brightness box: w=%f h=%f _x0=%f _y0=%f",
+-                   bright_box_width,
+-                   bright_box_height,
+-                   bright_box_x0,
+-                   bright_box_y0);
+-#endif
+-
+-        res = render_custom (window,
+-                             cr,
+-                             icon_box_x0, icon_box_y0,
+-                             icon_box_width, icon_box_height);
+-        if (! res && g_strcmp0 (window->priv->icon_name, "media-eject") == 0) {
+-                /* draw eject symbol */
+-                draw_eject (cr,
+-                            icon_box_x0, icon_box_y0,
+-                            icon_box_width, icon_box_height);
+-        }
+-
+-        if (window->priv->show_level != FALSE) {
+-                /* draw volume meter */
+-                draw_volume_boxes (window,
+-                                   cr,
+-                                   (double)window->priv->volume_level / 100.0,
+-                                   bright_box_x0,
+-                                   bright_box_y0,
+-                                   bright_box_width,
+-                                   bright_box_height);
+-        }
+-}
+-
+-static void
+-draw_action (GsdMediaKeysWindow *window,
+-             cairo_t            *cr)
+-{
+-        switch (window->priv->action) {
+-        case GSD_MEDIA_KEYS_WINDOW_ACTION_VOLUME:
+-                draw_action_volume (window, cr);
+-                break;
+-        case GSD_MEDIA_KEYS_WINDOW_ACTION_CUSTOM:
+-                draw_action_custom (window, cr);
+-                break;
+-        default:
+-                break;
+-        }
+-}
+-
+-static gboolean
+-on_expose_event (GtkWidget          *widget,
+-                 GdkEventExpose     *event,
+-                 GsdMediaKeysWindow *window)
+-{
+-        cairo_t         *context;
+-        cairo_t         *cr;
+-        cairo_surface_t *surface;
+-        int              width;
+-        int              height;
+-        GtkStyle        *style;
+-        GdkColor         color;
+-        double           r, g, b;
+-
+-        context = gdk_cairo_create (gtk_widget_get_window (widget));
+-
+-        style = gtk_widget_get_style (widget);
+-        cairo_set_operator (context, CAIRO_OPERATOR_SOURCE);
+-        gtk_window_get_size (GTK_WINDOW (widget), &width, &height);
+-
+-        surface = cairo_surface_create_similar (cairo_get_target (context),
+-                                                CAIRO_CONTENT_COLOR_ALPHA,
+-                                                width,
+-                                                height);
+-
+-        if (cairo_surface_status (surface) != CAIRO_STATUS_SUCCESS) {
+-                goto done;
+-        }
+-
+-        cr = cairo_create (surface);
+-        if (cairo_status (cr) != CAIRO_STATUS_SUCCESS) {
+-                goto done;
+-        }
+-        cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, 0.0);
+-        cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
+-        cairo_paint (cr);
+-
+-        /* draw a box */
+-        rounded_rectangle (cr, 1.0, 0.5, 0.5, height / 10, width-1, height-1);
+-        color_reverse (&style->bg[GTK_STATE_NORMAL], &color);
+-        r = (float)color.red / 65535.0;
+-        g = (float)color.green / 65535.0;
+-        b = (float)color.blue / 65535.0;
+-        cairo_set_source_rgba (cr, r, g, b, BG_ALPHA);
+-        cairo_fill_preserve (cr);
+-
+-        color_reverse (&style->text_aa[GTK_STATE_NORMAL], &color);
+-        r = (float)color.red / 65535.0;
+-        g = (float)color.green / 65535.0;
+-        b = (float)color.blue / 65535.0;
+-        cairo_set_source_rgba (cr, r, g, b, BG_ALPHA / 2);
+-        cairo_set_line_width (cr, 1);
+-        cairo_stroke (cr);
+-
+-        /* draw action */
+-        draw_action (window, cr);
+-
+-        cairo_destroy (cr);
+-
+-        /* Make sure we have a transparent background */
+-        cairo_rectangle (context, 0, 0, width, height);
+-        cairo_set_source_rgba (context, 0.0, 0.0, 0.0, 0.0);
+-        cairo_fill (context);
+-
+-        cairo_set_source_surface (context, surface, 0, 0);
+-        cairo_paint_with_alpha (context, window->priv->fade_out_alpha);
+-
+- done:
+-        if (surface != NULL) {
+-                cairo_surface_destroy (surface);
+-        }
+-        cairo_destroy (context);
+-
+-        return FALSE;
+-}
+-
+-static void
+-gsd_media_keys_window_real_show (GtkWidget *widget)
+-{
+-        GsdMediaKeysWindow *window;
+-
+-        if (GTK_WIDGET_CLASS (gsd_media_keys_window_parent_class)->show) {
+-                GTK_WIDGET_CLASS (gsd_media_keys_window_parent_class)->show (widget);
+-        }
+-
+-        window = GSD_MEDIA_KEYS_WINDOW (widget);
+-        remove_hide_timeout (window);
+-        add_hide_timeout (window);
+-}
+-
+-static void
+-gsd_media_keys_window_real_hide (GtkWidget *widget)
+-{
+-        GsdMediaKeysWindow *window;
+-
+-        if (GTK_WIDGET_CLASS (gsd_media_keys_window_parent_class)->hide) {
+-                GTK_WIDGET_CLASS (gsd_media_keys_window_parent_class)->hide (widget);
+-        }
+-
+-        window = GSD_MEDIA_KEYS_WINDOW (widget);
+-        remove_hide_timeout (window);
+-}
+-
+-static void
+-gsd_media_keys_window_real_realize (GtkWidget *widget)
+-{
+-        GdkColormap *colormap;
+-        GtkAllocation allocation;
+-        GdkBitmap *mask;
+-        cairo_t *cr;
+-
+-        colormap = gdk_screen_get_rgba_colormap (gtk_widget_get_screen (widget));
+-
+-        if (colormap != NULL) {
+-                gtk_widget_set_colormap (widget, colormap);
+-        }
+-
+-        if (GTK_WIDGET_CLASS (gsd_media_keys_window_parent_class)->realize) {
+-                GTK_WIDGET_CLASS (gsd_media_keys_window_parent_class)->realize (widget);
+-        }
+-
+-        gtk_widget_get_allocation (widget, &allocation);
+-        mask = gdk_pixmap_new (gtk_widget_get_window (widget),
+-                               allocation.width,
+-                               allocation.height,
+-                               1);
+-        cr = gdk_cairo_create (mask);
+-
+-        cairo_set_source_rgba (cr, 1., 1., 1., 0.);
+-        cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
+-        cairo_paint (cr);
+-
+-        /* make the whole window ignore events */
+-        gdk_window_input_shape_combine_mask (gtk_widget_get_window (widget), mask, 0, 0);
+-        g_object_unref (mask);
+-        cairo_destroy (cr);
+-}
+-
+-static void
+-gsd_media_keys_window_class_init (GsdMediaKeysWindowClass *klass)
+-{
+-        GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+-
+-        widget_class->show = gsd_media_keys_window_real_show;
+-        widget_class->hide = gsd_media_keys_window_real_hide;
+-        widget_class->realize = gsd_media_keys_window_real_realize;
+-
+-        g_type_class_add_private (klass, sizeof (GsdMediaKeysWindowPrivate));
+-}
+-
+-gboolean
+-gsd_media_keys_window_is_valid (GsdMediaKeysWindow *window)
+-{
+-        GdkScreen *screen = gtk_widget_get_screen (GTK_WIDGET (window));
+-        return gdk_screen_is_composited (screen) == window->priv->is_composited;
+-}
+-
+-static void
+-gsd_media_keys_window_init (GsdMediaKeysWindow *window)
+-{
+-        GdkScreen *screen;
+-
+-        window->priv = GSD_MEDIA_KEYS_WINDOW_GET_PRIVATE (window);
+-
+-        screen = gtk_widget_get_screen (GTK_WIDGET (window));
+-
+-        window->priv->is_composited = gdk_screen_is_composited (screen);
+-
+-        if (window->priv->is_composited) {
+-                gdouble scalew, scaleh, scale;
+-                gint size;
+-
+-                gtk_window_set_decorated (GTK_WINDOW (window), FALSE);
+-                gtk_widget_set_app_paintable (GTK_WIDGET (window), TRUE);
+-
+-                /* assume 130x130 on a 640x480 display and scale from there */
+-                scalew = gdk_screen_get_width (screen) / 640.0;
+-                scaleh = gdk_screen_get_height (screen) / 480.0;
+-                scale = MIN (scalew, scaleh);
+-                size = 130 * MAX (1, scale);
+-
+-                gtk_window_set_default_size (GTK_WINDOW (window), size, size);
+-                g_signal_connect (window, "expose-event", G_CALLBACK (on_expose_event), window);
+-
+-                window->priv->fade_out_alpha = 1.0;
+-        } else {
+-                GtkBuilder *builder;
+-                const gchar *objects[] = {"acme_frame", NULL};
+-                GtkWidget *frame;
+-
+-                builder = gtk_builder_new ();
+-              gtk_builder_add_objects_from_string (builder, acme_ui, acme_ui_length, (char **)objects, NULL);
+-
+-                window->priv->image = GTK_IMAGE (gtk_builder_get_object (builder, "acme_image"));
+-                window->priv->progress = GTK_WIDGET (gtk_builder_get_object (builder, "acme_volume_progressbar"));
+-                frame = GTK_WIDGET (gtk_builder_get_object (builder,
+-                                                            "acme_frame"));
+-
+-                if (frame != NULL) {
+-                        gtk_container_add (GTK_CONTAINER (window), frame);
+-                        gtk_widget_show_all (frame);
+-                }
+-
+-                /* The builder needs to stay alive until the window
+-                   takes ownership of the frame (and its children)  */
+-                g_object_unref (builder);
+-        }
+-}
+-
+-GtkWidget *
+-gsd_media_keys_window_new (void)
+-{
+-        GObject *object;
+-
+-        object = g_object_new (GSD_TYPE_MEDIA_KEYS_WINDOW,
+-                               "type", GTK_WINDOW_POPUP,
+-                               "type-hint", GDK_WINDOW_TYPE_HINT_NOTIFICATION,
+-                               "skip-taskbar-hint", TRUE,
+-                               "skip-pager-hint", TRUE,
+-                               "focus-on-map", FALSE,
+-                               NULL);
+-
+-        return GTK_WIDGET (object);
+-}
+diff --git a/src/gsd-media-keys-window.h b/src/gsd-media-keys-window.h
+deleted file mode 100644
+index 9c74bf5..0000000
+--- a/src/gsd-media-keys-window.h
++++ /dev/null
+@@ -1,71 +0,0 @@
+-/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*-
+- *
+- * Copyright (C) 2006 William Jon McCann <mccann@jhu.edu>
+- *
+- * This program is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU General Public License as
+- * published by the Free Software Foundation; either version 2 of the
+- * License, or (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public
+- * License along with this program; if not, write to the
+- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- * Boston, MA 02111-1307, USA.
+- *
+- */
+-
+-#ifndef GSD_MEDIA_KEYS_WINDOW_H
+-#define GSD_MEDIA_KEYS_WINDOW_H
+-
+-#include <glib-object.h>
+-#include <gtk/gtk.h>
+-
+-G_BEGIN_DECLS
+-
+-#define GSD_TYPE_MEDIA_KEYS_WINDOW            (gsd_media_keys_window_get_type ())
+-#define GSD_MEDIA_KEYS_WINDOW(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj),  GSD_TYPE_MEDIA_KEYS_WINDOW, GsdMediaKeysWindow))
+-#define GSD_MEDIA_KEYS_WINDOW_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass),   GSD_TYPE_MEDIA_KEYS_WINDOW, GsdMediaKeysWindowClass))
+-#define GSD_IS_MEDIA_KEYS_WINDOW(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj),  GSD_TYPE_MEDIA_KEYS_WINDOW))
+-#define GSD_IS_MEDIA_KEYS_WINDOW_CLASS(klass) (G_TYPE_INSTANCE_GET_CLASS ((klass), GSD_TYPE_MEDIA_KEYS_WINDOW))
+-
+-typedef struct GsdMediaKeysWindow                   GsdMediaKeysWindow;
+-typedef struct GsdMediaKeysWindowClass              GsdMediaKeysWindowClass;
+-typedef struct GsdMediaKeysWindowPrivate            GsdMediaKeysWindowPrivate;
+-
+-struct GsdMediaKeysWindow {
+-        GtkWindow                   parent;
+-
+-        GsdMediaKeysWindowPrivate  *priv;
+-};
+-
+-struct GsdMediaKeysWindowClass {
+-        GtkWindowClass parent_class;
+-};
+-
+-typedef enum {
+-        GSD_MEDIA_KEYS_WINDOW_ACTION_VOLUME,
+-        GSD_MEDIA_KEYS_WINDOW_ACTION_CUSTOM
+-} GsdMediaKeysWindowAction;
+-
+-GType                 gsd_media_keys_window_get_type          (void);
+-
+-GtkWidget *           gsd_media_keys_window_new               (void);
+-void                  gsd_media_keys_window_set_action        (GsdMediaKeysWindow      *window,
+-                                                               GsdMediaKeysWindowAction action);
+-void                  gsd_media_keys_window_set_action_custom (GsdMediaKeysWindow      *window,
+-                                                               const char              *icon_name,
+-                                                               gboolean                 show_level);
+-void                  gsd_media_keys_window_set_volume_muted  (GsdMediaKeysWindow      *window,
+-                                                               gboolean                 muted);
+-void                  gsd_media_keys_window_set_volume_level  (GsdMediaKeysWindow      *window,
+-                                                               int                      level);
+-gboolean              gsd_media_keys_window_is_valid          (GsdMediaKeysWindow      *window);
+-
+-G_END_DECLS
+-
+-#endif
+diff --git a/src/xfpm-backlight.c b/src/xfpm-backlight.c
+index 73bd5f6..baeeb43 100644
+--- a/src/xfpm-backlight.c
++++ b/src/xfpm-backlight.c
+@@ -42,14 +42,9 @@
+ #include "xfpm-debug.h"
+ #include "xfpm-icons.h"
+-#include "gsd-media-keys-window.h"
+-
+ static void xfpm_backlight_finalize     (GObject *object);
+-static void xfpm_backlight_create_popup (XfpmBacklight *backlight);
+-
+ #define ALARM_DISABLED 9
+-#define BRIGHTNESS_POPUP_SIZE 180
+ #define XFPM_BACKLIGHT_GET_PRIVATE(o) \
+ (G_TYPE_INSTANCE_GET_PRIVATE ((o), XFPM_TYPE_BACKLIGHT, XfpmBacklightPrivate))
+@@ -63,12 +58,8 @@ struct XfpmBacklightPrivate
+     XfpmButton     *button;
+     XfpmNotify     *notify;
+     
+-    GtkWidget    *osd;
+     NotifyNotification *n;
+     
+-    
+-    gulong        destroy_id;
+-    
+     gboolean      has_hw;
+     gboolean      on_battery;
+     
+@@ -123,12 +114,6 @@ xfpm_backlight_destroy_popup (gpointer data)
+     
+     backlight = XFPM_BACKLIGHT (data);
+     
+-    if ( backlight->priv->osd )
+-    {
+-      gtk_widget_destroy (backlight->priv->osd);
+-      backlight->priv->osd = NULL;
+-    }
+-    
+     if ( backlight->priv->n )
+     {
+       g_object_unref (backlight->priv->n);
+@@ -139,120 +124,43 @@ xfpm_backlight_destroy_popup (gpointer data)
+ }
+ static void
+-xfpm_backlight_composited_changed_cb (XfpmBacklight *backlight)
+-{
+-    xfpm_backlight_destroy_popup (backlight);
+-    xfpm_backlight_create_popup (backlight);
+-}
+-
+-static void
+ xfpm_backlight_show_notification (XfpmBacklight *backlight, gfloat value)
+ {
+-    gint i;
+-    
+-    static const char *display_icon_name[] = 
+-    {
+-      "notification-display-brightness-off",
+-      "notification-display-brightness-low",
+-      "notification-display-brightness-medium",
+-      "notification-display-brightness-high",
+-      "notification-display-brightness-full",
+-      NULL
+-    };
+-    
++    gchar *summary;
++
++    /* create the notification on demand */
+     if ( backlight->priv->n == NULL )
+     {
+-      backlight->priv->n = xfpm_notify_new_notification (backlight->priv->notify, 
+-                                                         " ", 
+-                                                         "", 
+-                                                         NULL, 
+-                                                         0, 
++      backlight->priv->n = xfpm_notify_new_notification (backlight->priv->notify,
++                                                         "",
++                                                         "",
++                                                         "xfpm-brightness-lcd",
++                                                         0,
+                                                          XFPM_NOTIFY_NORMAL,
+                                                          NULL);
+     }
++
++    /* generate a human-readable summary for the notification */
++    summary = g_strdup_printf (_("Brightness: %.0f percent"), value);
++    notify_notification_update (backlight->priv->n, summary, NULL, NULL);
++    g_free (summary);
+     
+-    i = (gint)value / 25;
+-    
+-    if ( i > 4 || i < 0 )
+-      return;
+-    
+-    notify_notification_set_hint_int32  (backlight->priv->n,
+-                                       "value",
+-                                       value);
+-    
+-    notify_notification_set_hint_string (backlight->priv->n,
+-                                       "x-canonical-private-synchronous",
+-                                       "brightness");
++    /* add the brightness value to the notification */
++    notify_notification_set_hint_int32 (backlight->priv->n, "value", value);
+     
+-    notify_notification_update (backlight->priv->n,
+-                              " ",
+-                              "",
+-                              display_icon_name[i]);
+-                              
++    /* show the notification */
+     notify_notification_show (backlight->priv->n, NULL);
+ }
+ static void
+-xfpm_backlight_create_popup (XfpmBacklight *backlight)
+-{
+-    if ( backlight->priv->osd != NULL )
+-      return;
+-      
+-    backlight->priv->osd = gsd_media_keys_window_new ();
+-    gsd_media_keys_window_set_action_custom (GSD_MEDIA_KEYS_WINDOW (backlight->priv->osd),
+-                                           XFPM_DISPLAY_BRIGHTNESS_ICON,
+-                                           TRUE);
+-    gtk_window_set_position (GTK_WINDOW (backlight->priv->osd), GTK_WIN_POS_CENTER);
+-    
+-    g_signal_connect_swapped (backlight->priv->osd, "composited-changed",
+-                            G_CALLBACK (xfpm_backlight_composited_changed_cb), backlight);
+-                            
+-}
+-
+-static void
+ xfpm_backlight_show (XfpmBacklight *backlight, gint level)
+ {
+     gfloat value;
+-    gboolean sync_notify;
+-    gboolean show_popup;
+     
+     XFPM_DEBUG ("Level %u", level);
+     
+-    g_object_get (G_OBJECT (backlight->priv->conf),
+-                  SHOW_BRIGHTNESS_POPUP, &show_popup,
+-                  NULL);
+-                
+-    if ( !show_popup )
+-      goto out;
+-    
+-    g_object_get (G_OBJECT (backlight->priv->notify),
+-                "sync", &sync_notify,
+-                NULL);
+-    
+     value = (gfloat) 100 * level / backlight->priv->max_level;
+-    
+-    if ( !sync_notify ) /*Notification server doesn't support sync notifications*/
+-    {
+-      xfpm_backlight_create_popup (backlight);
+-      gsd_media_keys_window_set_volume_level (GSD_MEDIA_KEYS_WINDOW (backlight->priv->osd),
+-                                              round (value));
+-      if ( !GTK_WIDGET_VISIBLE (backlight->priv->osd))
+-          gtk_window_present (GTK_WINDOW (backlight->priv->osd));
+-    }
+-    else
+-    {
+-      xfpm_backlight_show_notification (backlight, value);
+-    }
+-    
+-    if ( backlight->priv->destroy_id != 0 )
+-    {
+-      g_source_remove (backlight->priv->destroy_id);
+-      backlight->priv->destroy_id = 0;
+-    }
+-    
+-out:
+-    /* Release the memory after 60 seconds */
+-    backlight->priv->destroy_id = g_timeout_add_seconds (60, (GSourceFunc) xfpm_backlight_destroy_popup, backlight);
++    xfpm_backlight_show_notification (backlight, value);
+ }
+@@ -386,7 +294,6 @@ xfpm_backlight_init (XfpmBacklight *backlight)
+     backlight->priv->brightness = xfpm_brightness_new ();
+     backlight->priv->has_hw     = xfpm_brightness_setup (backlight->priv->brightness);
+     
+-    backlight->priv->osd    = NULL;
+     backlight->priv->notify = NULL;
+     backlight->priv->idle   = NULL;
+     backlight->priv->conf   = NULL;
+@@ -394,7 +301,6 @@ xfpm_backlight_init (XfpmBacklight *backlight)
+     backlight->priv->power    = NULL;
+     backlight->priv->dimmed = FALSE;
+     backlight->priv->block = FALSE;
+-    backlight->priv->destroy_id = 0;
+     
+     if ( !backlight->priv->has_hw )
+     {
+diff --git a/src/xfpm-notify.c b/src/xfpm-notify.c
+index 9b485aa..e4fd548 100644
+--- a/src/xfpm-notify.c
++++ b/src/xfpm-notify.c
+@@ -69,7 +69,7 @@ struct XfpmNotifyPrivate
+     gulong            notify_id;
+     
+     gboolean          supports_actions;
+-    gboolean          supports_sync; /*For x-canonical-private-synchronous */
++    gboolean          supports_sync; /* For x-canonical-private-synchronous */
+ };
+ enum
+-- 
+1.9.3
+
diff --git a/0073-Ignore-useless-deprecation-warnings-for-now.patch b/0073-Ignore-useless-deprecation-warnings-for-now.patch
new file mode 100644 (file)
index 0000000..c37cfc0
--- /dev/null
@@ -0,0 +1,81 @@
+From 83f83ffb63e8d55a0d44ca5a38765f0ea058de1d Mon Sep 17 00:00:00 2001
+From: Nick Schermer <nick@xfce.org>
+Date: Tue, 23 Jul 2013 11:26:21 +0200
+Subject: [PATCH 073/219] Ignore useless deprecation warnings for now.
+
+---
+ src/xfpm-polkit.c | 17 +++++++++++++++--
+ 1 file changed, 15 insertions(+), 2 deletions(-)
+
+diff --git a/src/xfpm-polkit.c b/src/xfpm-polkit.c
+index b63093a..ccc4233 100644
+--- a/src/xfpm-polkit.c
++++ b/src/xfpm-polkit.c
+@@ -239,7 +239,10 @@ xfpm_polkit_free_data (gpointer data)
+     g_hash_table_destroy (polkit->priv->details);
+     g_hash_table_destroy (polkit->priv->subject_hash);
++
++    G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+     g_value_array_free   (polkit->priv->subject);
++    G_GNUC_END_IGNORE_DEPRECATIONS
+     
+     polkit->priv->details      = NULL;
+     polkit->priv->subject_hash = NULL;
+@@ -342,8 +345,10 @@ xfpm_polkit_init_data (XfpmPolkit *polkit)
+       if ( G_LIKELY (start_time != 0 ) )
+       {
+           GValue val = { 0 }, pid_val = { 0 }, start_time_val = { 0 };
+-          
++
++          G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+           polkit->priv->subject = g_value_array_new (2);
++          G_GNUC_END_IGNORE_DEPRECATIONS
+           polkit->priv->subject_hash = g_hash_table_new_full (g_str_hash, 
+                                                               g_str_equal, 
+                                                               g_free, 
+@@ -351,7 +356,9 @@ xfpm_polkit_init_data (XfpmPolkit *polkit)
+       
+           g_value_init (&val, G_TYPE_STRING);
+           g_value_set_string (&val, "unix-process");
++          G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+           g_value_array_append (polkit->priv->subject, &val);
++          G_GNUC_END_IGNORE_DEPRECATIONS
+           
+           g_value_unset (&val);
+           
+@@ -379,7 +386,9 @@ xfpm_polkit_init_data (XfpmPolkit *polkit)
+                                      G_TYPE_VALUE));
+     
+     g_value_set_static_boxed (&hash_elem, polkit->priv->subject_hash);
++    G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+     g_value_array_append (polkit->priv->subject, &hash_elem);
++    G_GNUC_END_IGNORE_DEPRECATIONS
+     
+     /**
+      * Polkit details, will leave it empty.
+@@ -421,8 +430,10 @@ xfpm_polkit_check_auth_intern (XfpmPolkit *polkit, const gchar *action_id)
+     
+     g_return_val_if_fail (polkit->priv->proxy != NULL, FALSE);
+     g_return_val_if_fail (polkit->priv->subject_valid, FALSE);
+-     
++    
++    G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+     result = g_value_array_new (0);
++    G_GNUC_END_IGNORE_DEPRECATIONS
+     
+     ret = dbus_g_proxy_call (polkit->priv->proxy, "CheckAuthorization", &error,
+                            polkit->priv->subject_gtype, polkit->priv->subject,
+@@ -450,7 +461,9 @@ xfpm_polkit_check_auth_intern (XfpmPolkit *polkit, const gchar *action_id)
+       g_error_free (error);
+     }
++    G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+     g_value_array_free (result);
++    G_GNUC_END_IGNORE_DEPRECATIONS
+     
+     XFPM_DEBUG ("Action=%s is authorized=%s", action_id, xfpm_bool_to_string (is_authorized));
+     
+-- 
+1.9.3
+
diff --git a/0074-Don-t-init-thread-on-gobject-3.32.patch b/0074-Don-t-init-thread-on-gobject-3.32.patch
new file mode 100644 (file)
index 0000000..3eed42d
--- /dev/null
@@ -0,0 +1,49 @@
+From baabf7a258679464ef31610481e4a80c39cf942c Mon Sep 17 00:00:00 2001
+From: Nick Schermer <nick@xfce.org>
+Date: Tue, 23 Jul 2013 11:26:48 +0200
+Subject: [PATCH 074/219] Don't init thread on >= gobject 3.32.
+
+---
+ settings/xfpm-settings-main.c | 6 ++++--
+ src/xfpm-main.c               | 4 +++-
+ 2 files changed, 7 insertions(+), 3 deletions(-)
+
+diff --git a/settings/xfpm-settings-main.c b/settings/xfpm-settings-main.c
+index 995be00..6071315 100644
+--- a/settings/xfpm-settings-main.c
++++ b/settings/xfpm-settings-main.c
+@@ -125,10 +125,12 @@ int main (int argc, char **argv)
+               error = NULL;
+               return EXIT_FAILURE;
+           }
+-          
++      
++#if !GLIB_CHECK_VERSION (2, 32, 0)
+           if ( !g_thread_supported () )
+               g_thread_init (NULL);
+-              
++#endif
++
+           dbus_g_thread_init ();
+           
+           channel = xfconf_channel_new(XFPM_CHANNEL_CFG);
+diff --git a/src/xfpm-main.c b/src/xfpm-main.c
+index a98583b..40959c8 100644
+--- a/src/xfpm-main.c
++++ b/src/xfpm-main.c
+@@ -272,9 +272,11 @@ int main (int argc, char **argv)
+       { NULL, },
+     };
++#if !GLIB_CHECK_VERSION (2, 32, 0)
+     if ( !g_thread_supported () )
+       g_thread_init (NULL);
+-       
++#endif
++
+     dbus_g_thread_init ();
+     xfce_textdomain (GETTEXT_PACKAGE, LOCALEDIR, "UTF-8");
+-- 
+1.9.3
+
diff --git a/0075-Change-brightness-level-from-glong-to-gint32.patch b/0075-Change-brightness-level-from-glong-to-gint32.patch
new file mode 100644 (file)
index 0000000..eee4516
--- /dev/null
@@ -0,0 +1,313 @@
+From 05d12e12596512f7a31d3cdb4845a69dc2d4c611 Mon Sep 17 00:00:00 2001
+From: Martin Matuska <martin@matuska.org>
+Date: Tue, 23 Jul 2013 11:27:41 +0200
+Subject: [PATCH 075/219] Change brightness level from glong to gint32
+
+The "Backlight" RandR property is a 32-bit integer. This means that the int32 (gint32) type should be used to represent brightness levels. The attached patch does nothing else than changing the brightness level representation from glong to gint32. This fixes the screen auto-dimming issue and brightness panel plugin issue.
+---
+ common/xfpm-brightness.c                     | 50 ++++++++++++++--------------
+ common/xfpm-brightness.h                     |  8 ++---
+ panel-plugins/brightness/brightness-button.c | 10 +++---
+ src/xfpm-backlight.c                         | 12 +++----
+ 4 files changed, 40 insertions(+), 40 deletions(-)
+
+diff --git a/common/xfpm-brightness.c b/common/xfpm-brightness.c
+index aa1ef33..f1524cb 100644
+--- a/common/xfpm-brightness.c
++++ b/common/xfpm-brightness.c
+@@ -92,11 +92,11 @@ out:
+ }
+ static gboolean
+-xfpm_brightness_xrandr_get_level (XfpmBrightness *brightness, RROutput output, long *current)
++xfpm_brightness_xrandr_get_level (XfpmBrightness *brightness, RROutput output, gint32 *current)
+ {
+     unsigned long nitems;
+     unsigned long bytes_after;
+-    long *prop;
++    gint32 *prop;
+     Atom actual_type;
+     int actual_format;
+     gboolean ret = FALSE;
+@@ -124,7 +124,7 @@ xfpm_brightness_xrandr_get_level (XfpmBrightness *brightness, RROutput output, l
+ }
+ static gboolean
+-xfpm_brightness_xrandr_set_level (XfpmBrightness *brightness, RROutput output, long level)
++xfpm_brightness_xrandr_set_level (XfpmBrightness *brightness, RROutput output, gint32 level)
+ {
+     gboolean ret = TRUE;
+@@ -137,7 +137,7 @@ xfpm_brightness_xrandr_set_level (XfpmBrightness *brightness, RROutput output, l
+     
+     if ( gdk_error_trap_pop () ) 
+     {
+-          g_warning ("failed to XRRChangeOutputProperty for brightness %li", level);
++          g_warning ("failed to XRRChangeOutputProperty for brightness %d", level);
+           ret = FALSE;
+     }
+     
+@@ -225,11 +225,11 @@ xfpm_brightness_setup_xrandr (XfpmBrightness *brightness)
+ }
+ static gboolean
+-xfpm_brightness_xrand_up (XfpmBrightness *brightness, glong *new_level)
++xfpm_brightness_xrand_up (XfpmBrightness *brightness, gint32 *new_level)
+ {
+-    long hw_level;
++    gint32 hw_level;
+     gboolean ret = FALSE;
+-    long set_level;
++    gint32 set_level;
+     
+     ret = xfpm_brightness_xrandr_get_level (brightness, brightness->priv->output, &hw_level);
+     
+@@ -250,14 +250,14 @@ xfpm_brightness_xrand_up (XfpmBrightness *brightness, glong *new_level)
+     
+     if ( !ret )
+     {
+-      g_warning ("xfpm_brightness_xrand_up failed for %li", set_level);
++      g_warning ("xfpm_brightness_xrand_up failed for %d", set_level);
+       return FALSE;
+     }
+       
+     /* Nothing changed in the hardware*/
+     if ( *new_level == hw_level )
+     {
+-      g_warning ("xfpm_brightness_xrand_up did not change the hw level to %li", set_level);
++      g_warning ("xfpm_brightness_xrand_up did not change the hw level to %d", set_level);
+       return FALSE;
+     }
+     
+@@ -265,11 +265,11 @@ xfpm_brightness_xrand_up (XfpmBrightness *brightness, glong *new_level)
+ }
+ static gboolean
+-xfpm_brightness_xrand_down (XfpmBrightness *brightness, long *new_level)
++xfpm_brightness_xrand_down (XfpmBrightness *brightness, gint32 *new_level)
+ {
+-    long hw_level;
++    gint32 hw_level;
+     gboolean ret;
+-    long set_level;
++    gint32 set_level;
+     
+     ret = xfpm_brightness_xrandr_get_level (brightness, brightness->priv->output, &hw_level);
+     
+@@ -290,14 +290,14 @@ xfpm_brightness_xrand_down (XfpmBrightness *brightness, long *new_level)
+     
+     if ( !ret )
+     {
+-      g_warning ("xfpm_brightness_xrand_down failed for %li", set_level);
++      g_warning ("xfpm_brightness_xrand_down failed for %d", set_level);
+       return FALSE;
+     }
+     
+     /* Nothing changed in the hardware*/
+     if ( *new_level == hw_level )
+     {
+-      g_warning ("xfpm_brightness_xrand_down did not change the hw level to %li", set_level);
++      g_warning ("xfpm_brightness_xrand_down did not change the hw level to %d", set_level);
+       return FALSE;
+     }
+     
+@@ -361,7 +361,7 @@ xfpm_brightness_setup_helper (XfpmBrightness *brightness)
+ }
+ static gboolean
+-xfpm_brightness_helper_get_level (XfpmBrightness *brg, glong *level)
++xfpm_brightness_helper_get_level (XfpmBrightness *brg, gint32 *level)
+ {
+     int ret;
+@@ -406,11 +406,11 @@ out:
+ }
+ static gboolean
+-xfpm_brightness_helper_up (XfpmBrightness *brightness, glong *new_level)
++xfpm_brightness_helper_up (XfpmBrightness *brightness, gint32 *new_level)
+ {
+-    glong hw_level;
++    gint32 hw_level;
+     gboolean ret = FALSE;
+-    gint set_level;
++    gint32 set_level;
+     
+     ret = xfpm_brightness_helper_get_level (brightness, &hw_level);
+     
+@@ -446,11 +446,11 @@ xfpm_brightness_helper_up (XfpmBrightness *brightness, glong *new_level)
+ }
+ static gboolean
+-xfpm_brightness_helper_down (XfpmBrightness *brightness, glong *new_level)
++xfpm_brightness_helper_down (XfpmBrightness *brightness, gint32 *new_level)
+ {
+-    glong hw_level;
++    gint32 hw_level;
+     gboolean ret;
+-    gint set_level;
++    gint32 set_level;
+     
+     ret = xfpm_brightness_helper_get_level (brightness, &hw_level);
+     
+@@ -572,7 +572,7 @@ xfpm_brightness_setup (XfpmBrightness *brightness)
+     return FALSE;
+ }
+-gboolean xfpm_brightness_up (XfpmBrightness *brightness, glong *new_level)
++gboolean xfpm_brightness_up (XfpmBrightness *brightness, gint32 *new_level)
+ {
+     gboolean ret = FALSE;
+     
+@@ -589,7 +589,7 @@ gboolean xfpm_brightness_up (XfpmBrightness *brightness, glong *new_level)
+     return ret;
+ }
+-gboolean xfpm_brightness_down (XfpmBrightness *brightness, glong *new_level)
++gboolean xfpm_brightness_down (XfpmBrightness *brightness, gint32 *new_level)
+ {
+     gboolean ret = FALSE;
+     
+@@ -618,7 +618,7 @@ gint xfpm_brightness_get_max_level (XfpmBrightness *brightness)
+     return brightness->priv->max_level;
+ }
+-gboolean xfpm_brightness_get_level    (XfpmBrightness *brightness, glong *level)
++gboolean xfpm_brightness_get_level    (XfpmBrightness *brightness, gint32 *level)
+ {
+     gboolean ret = FALSE;
+     
+@@ -632,7 +632,7 @@ gboolean xfpm_brightness_get_level (XfpmBrightness *brightness, glong *level)
+     return ret;
+ }
+-gboolean xfpm_brightness_set_level (XfpmBrightness *brightness, glong level)
++gboolean xfpm_brightness_set_level (XfpmBrightness *brightness, gint32 level)
+ {
+     gboolean ret = FALSE;
+     
+diff --git a/common/xfpm-brightness.h b/common/xfpm-brightness.h
+index 0c4e3ed..26b3dbe 100644
+--- a/common/xfpm-brightness.h
++++ b/common/xfpm-brightness.h
+@@ -51,20 +51,20 @@ XfpmBrightness                    *xfpm_brightness_new             (void);
+ gboolean                      xfpm_brightness_setup           (XfpmBrightness *brightness);
+ gboolean                      xfpm_brightness_up              (XfpmBrightness *brightness,
+-                                                               glong *new_level);
++                                                               gint32 *new_level);
+ gboolean                      xfpm_brightness_down            (XfpmBrightness *brightness,
+-                                                               glong *new_level);
++                                                               gint32 *new_level);
+ gboolean                      xfpm_brightness_has_hw          (XfpmBrightness *brightness);
+ gint                          xfpm_brightness_get_max_level   (XfpmBrightness *brightness);
+ gboolean                      xfpm_brightness_get_level       (XfpmBrightness *brightness,
+-                                                               glong *level);
++                                                               gint32 *level);
+ gboolean                      xfpm_brightness_set_level       (XfpmBrightness *brightness,
+-                                                               glong level);
++                                                               gint32 level);
+ gboolean                      xfpm_brightness_dim_down        (XfpmBrightness *brightness);
+diff --git a/panel-plugins/brightness/brightness-button.c b/panel-plugins/brightness/brightness-button.c
+index 6e60c29..bd466c9 100644
+--- a/panel-plugins/brightness/brightness-button.c
++++ b/panel-plugins/brightness/brightness-button.c
+@@ -186,7 +186,7 @@ static gboolean
+ brightness_button_popup_win (GtkWidget *widget, GdkEvent *ev, guint32 ev_time)
+ {
+     gint x, y;
+-    glong current_level = 0;
++    gint32 current_level = 0;
+     GdkDisplay *display;
+     GdkScreen *screen;
+     BrightnessButton *button;
+@@ -342,7 +342,7 @@ plus_clicked (GtkWidget *widget, BrightnessButton *button)
+ static void
+ range_value_changed (GtkWidget *widget, BrightnessButton *button)
+ {
+-    glong range_level, hw_level;
++    gint32 range_level, hw_level;
+     
+     range_level = (gint) gtk_range_get_value (GTK_RANGE (button->priv->range));
+     
+@@ -428,8 +428,8 @@ brightness_button_create_popup (BrightnessButton *button)
+ static void
+ brightness_button_up (BrightnessButton *button)
+ {
+-    glong level;
+-    glong max_level;
++    gint32 level;
++    gint32 max_level;
+     
+     xfpm_brightness_get_level (button->priv->brightness, &level);
+     max_level = xfpm_brightness_get_max_level (button->priv->brightness);
+@@ -443,7 +443,7 @@ brightness_button_up (BrightnessButton *button)
+ static void
+ brightness_button_down (BrightnessButton *button)
+ {
+-    glong level;
++    gint32 level;
+     xfpm_brightness_get_level (button->priv->brightness, &level);
+     
+     if ( level != 0 )
+diff --git a/src/xfpm-backlight.c b/src/xfpm-backlight.c
+index baeeb43..45c990f 100644
+--- a/src/xfpm-backlight.c
++++ b/src/xfpm-backlight.c
+@@ -63,8 +63,8 @@ struct XfpmBacklightPrivate
+     gboolean      has_hw;
+     gboolean      on_battery;
+     
+-    glong            last_level;
+-    glong         max_level;
++    gint32          last_level;
++    gint32        max_level;
+     
+     gboolean        dimmed;
+     gboolean      block;
+@@ -79,7 +79,7 @@ xfpm_backlight_dim_brightness (XfpmBacklight *backlight)
+     
+     if (xfpm_power_get_mode (backlight->priv->power) == XFPM_POWER_MODE_NORMAL )
+     {
+-      glong dim_level;
++      gint32 dim_level;
+       
+       g_object_get (G_OBJECT (backlight->priv->conf),
+                     backlight->priv->on_battery ? BRIGHTNESS_LEVEL_ON_BATTERY : BRIGHTNESS_LEVEL_ON_AC, &dim_level,
+@@ -101,7 +101,7 @@ xfpm_backlight_dim_brightness (XfpmBacklight *backlight)
+        **/
+       if (backlight->priv->last_level > dim_level)
+       {
+-          XFPM_DEBUG ("Current brightness level before dimming : %li, new %li", backlight->priv->last_level, dim_level);
++          XFPM_DEBUG ("Current brightness level before dimming : %d, new %d", backlight->priv->last_level, dim_level);
+           backlight->priv->dimmed = xfpm_brightness_set_level (backlight->priv->brightness, dim_level);
+       }
+     }
+@@ -182,7 +182,7 @@ xfpm_backlight_reset_cb (EggIdletime *idle, XfpmBacklight *backlight)
+     {
+       if ( !backlight->priv->block)
+       {
+-          XFPM_DEBUG ("Alarm reset, setting level to %li", backlight->priv->last_level);
++          XFPM_DEBUG ("Alarm reset, setting level to %d", backlight->priv->last_level);
+           xfpm_brightness_set_level (backlight->priv->brightness, backlight->priv->last_level);
+       }
+       backlight->priv->dimmed = FALSE;
+@@ -192,7 +192,7 @@ xfpm_backlight_reset_cb (EggIdletime *idle, XfpmBacklight *backlight)
+ static void
+ xfpm_backlight_button_pressed_cb (XfpmButton *button, XfpmButtonKey type, XfpmBacklight *backlight)
+ {
+-    glong level;
++    gint32 level;
+     gboolean ret = TRUE;
+     
+     gboolean enable_brightness, show_popup;
+-- 
+1.9.3
+
diff --git a/0079-Fix-Typo-in-xfpm-power.c.patch b/0079-Fix-Typo-in-xfpm-power.c.patch
new file mode 100644 (file)
index 0000000..21c3d41
--- /dev/null
@@ -0,0 +1,25 @@
+From b35cee55e065a7ebcbe6062cdcc5916cbe04973f Mon Sep 17 00:00:00 2001
+From: Benjamin Kerensa <bkerensa@ubuntu.com>
+Date: Sun, 10 Mar 2013 19:36:13 -0700
+Subject: [PATCH 079/219] Fix Typo in xfpm-power.c
+
+---
+ src/xfpm-power.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/xfpm-power.c b/src/xfpm-power.c
+index 796bef8..bcf2fbd 100644
+--- a/src/xfpm-power.c
++++ b/src/xfpm-power.c
+@@ -1034,7 +1034,7 @@ xfpm_power_add_device (XfpmPower *power, const gchar *object_path)
+     }
+     else if ( device_type != XFPM_DEVICE_TYPE_LINE_POWER )
+     {
+-      g_warning ("Unable to monitor unkown power device with object_path : %s", object_path);
++      g_warning ("Unable to monitor unknown power device with object_path : %s", object_path);
+       g_object_unref (proxy_prop);
+     }
+ }
+-- 
+1.9.3
+
diff --git a/0080-Fix-typo-in-error-message.patch b/0080-Fix-typo-in-error-message.patch
new file mode 100644 (file)
index 0000000..8ef4f61
--- /dev/null
@@ -0,0 +1,553 @@
+From 3b4815eeb2b0edc7e8f24a453feddf069bbea3bc Mon Sep 17 00:00:00 2001
+From: Ian <ifreecarve@gmail.com>
+Date: Sun, 11 Aug 2013 22:34:57 +0200
+Subject: [PATCH 080/219] Fix typo in error message.
+
+---
+ src/xfpm-manager.c | 180 ++++++++++++++++++++++++++---------------------------
+ 1 file changed, 90 insertions(+), 90 deletions(-)
+
+diff --git a/src/xfpm-manager.c b/src/xfpm-manager.c
+index 472ee3e..853d78c 100644
+--- a/src/xfpm-manager.c
++++ b/src/xfpm-manager.c
+@@ -73,9 +73,9 @@ static gboolean xfpm_manager_quit (XfpmManager *manager);
+ struct XfpmManagerPrivate
+ {
+     DBusGConnection *session_bus;
+-    
++
+     XfceSMClient    *client;
+-    
++
+     XfpmPower       *power;
+     XfpmButton      *button;
+     XfpmXfconf      *conf;
+@@ -90,7 +90,7 @@ struct XfpmManagerPrivate
+ #endif
+     GTimer        *timer;
+-    
++
+     gboolean       inhibited;
+     gboolean       session_managed;
+ };
+@@ -113,7 +113,7 @@ xfpm_manager_init (XfpmManager *manager)
+     manager->priv = XFPM_MANAGER_GET_PRIVATE (manager);
+     manager->priv->timer = g_timer_new ();
+-    
++
+     notify_init ("xfce4-power-manager");
+ }
+@@ -126,7 +126,7 @@ xfpm_manager_finalize (GObject *object)
+     if ( manager->priv->session_bus )
+       dbus_g_connection_unref (manager->priv->session_bus);
+-      
++
+     g_object_unref (manager->priv->power);
+     g_object_unref (manager->priv->button);
+     g_object_unref (manager->priv->conf);
+@@ -136,15 +136,15 @@ xfpm_manager_finalize (GObject *object)
+     g_object_unref (manager->priv->disks);
+     g_object_unref (manager->priv->inhibit);
+     g_object_unref (manager->priv->idle);
+-    
++
+     g_timer_destroy (manager->priv->timer);
+-    
++
+ #ifdef HAVE_DPMS
+     g_object_unref (manager->priv->dpms);
+ #endif
+-    
++
+     g_object_unref (manager->priv->backlight);
+-      
++
+     G_OBJECT_CLASS (xfpm_manager_parent_class)->finalize (object);
+ }
+@@ -162,7 +162,7 @@ static gboolean
+ xfpm_manager_quit (XfpmManager *manager)
+ {
+     XFPM_DEBUG ("Exiting");
+-    
++
+     xfpm_manager_release_names (manager);
+     gtk_main_quit ();
+     return TRUE;
+@@ -188,10 +188,10 @@ xfpm_manager_reserve_names (XfpmManager *manager)
+                                 "org.freedesktop.PowerManagement") )
+     {
+       g_warning ("Unable to reserve bus name: Maybe any already running instance?\n");
+-      
++
+       g_object_unref (G_OBJECT (manager));
+       gtk_main_quit ();
+-      
++
+       return FALSE;
+     }
+     return TRUE;
+@@ -202,7 +202,7 @@ xfpm_manager_shutdown (XfpmManager *manager)
+ {
+     GError *error = NULL;
+     xfpm_console_kit_shutdown (manager->priv->console, &error );
+-    
++
+     if ( error )
+     {
+       g_warning ("Failed to shutdown the system : %s", error->message);
+@@ -255,12 +255,12 @@ static void
+ xfpm_manager_button_pressed_cb (XfpmButton *bt, XfpmButtonKey type, XfpmManager *manager)
+ {
+     XfpmShutdownRequest req = XFPM_DO_NOTHING;
+-    
++
+     XFPM_DEBUG_ENUM (type, XFPM_TYPE_BUTTON_KEY, "Received button press event");
+-  
++
+     if ( type == BUTTON_MON_BRIGHTNESS_DOWN || type == BUTTON_MON_BRIGHTNESS_UP )
+         return;
+-      
++
+     if ( type == BUTTON_POWER_OFF )
+     {
+         g_object_get (G_OBJECT (manager->priv->conf),
+@@ -285,7 +285,7 @@ xfpm_manager_button_pressed_cb (XfpmButton *bt, XfpmButtonKey type, XfpmManager
+     }
+     XFPM_DEBUG_ENUM (req, XFPM_TYPE_SHUTDOWN_REQUEST, "Shutdown request : ");
+-        
++
+     if ( req == XFPM_ASK )
+       xfpm_manager_ask_shutdown (manager);
+     else
+@@ -303,11 +303,11 @@ xfpm_manager_lid_changed_cb (XfpmPower *power, gboolean lid_is_closed, XfpmManag
+ {
+     XfpmLidTriggerAction action;
+     gboolean on_battery;
+-    
++
+     g_object_get (G_OBJECT (power),
+                 "on-battery", &on_battery,
+                 NULL);
+-    
++
+     g_object_get (G_OBJECT (manager->priv->conf),
+                 on_battery ? LID_SWITCH_ON_BATTERY_CFG : LID_SWITCH_ON_AC_CFG, &action,
+                 NULL);
+@@ -315,7 +315,7 @@ xfpm_manager_lid_changed_cb (XfpmPower *power, gboolean lid_is_closed, XfpmManag
+     if ( lid_is_closed )
+     {
+       XFPM_DEBUG_ENUM (action, XFPM_TYPE_LID_TRIGGER_ACTION, "LID close event");
+-      
++
+       if ( action == LID_TRIGGER_NOTHING )
+       {
+ #ifdef HAVE_DPMS
+@@ -328,16 +328,16 @@ xfpm_manager_lid_changed_cb (XfpmPower *power, gboolean lid_is_closed, XfpmManag
+           if ( !xfpm_is_multihead_connected () )
+               xfpm_lock_screen ();
+       }
+-      else 
++      else
+       {
+           /*
+            * Force sleep here as lid is closed and no point of asking the
+            * user for confirmation in case of an application is inhibiting
+-           * the power manager. 
++           * the power manager.
+            */
+           xfpm_manager_sleep_request (manager, action, TRUE);
+       }
+-      
++
+     }
+     else
+     {
+@@ -359,34 +359,34 @@ xfpm_manager_alarm_timeout_cb (EggIdletime *idle, guint id, XfpmManager *manager
+ {
+     if (xfpm_power_get_mode (manager->priv->power) == XFPM_POWER_MODE_PRESENTATION)
+       return;
+-    
++
+     XFPM_DEBUG ("Alarm inactivity timeout id %d", id);
+-    
++
+     if ( id == TIMEOUT_INACTIVITY_ON_AC || id == TIMEOUT_INACTIVITY_ON_BATTERY )
+     {
+       XfpmShutdownRequest req = XFPM_DO_NOTHING;
+       gchar *sleep_mode;
+       gboolean on_battery;
+-      
++
+       if ( manager->priv->inhibited )
+       {
+           XFPM_DEBUG ("Idle sleep alarm timeout, but power manager is currently inhibited, action ignored");
+           return;
+       }
+-    
++
+       g_object_get (G_OBJECT (manager->priv->conf),
+                     INACTIVITY_SLEEP_MODE, &sleep_mode,
+                     NULL);
+-      
++
+       g_object_get (G_OBJECT (manager->priv->power),
+                     "on-battery", &on_battery,
+                     NULL);
+-                
++
+       if ( !g_strcmp0 (sleep_mode, "Suspend") )
+           req = XFPM_DO_SUSPEND;
+       else
+           req = XFPM_DO_HIBERNATE;
+-      
++
+       g_free (sleep_mode);
+       if ( id == TIMEOUT_INACTIVITY_ON_AC && on_battery == FALSE )
+@@ -400,18 +400,18 @@ static void
+ xfpm_manager_set_idle_alarm_on_ac (XfpmManager *manager)
+ {
+     guint on_ac;
+-    
++
+     g_object_get (G_OBJECT (manager->priv->conf),
+                 ON_AC_INACTIVITY_TIMEOUT, &on_ac,
+                 NULL);
+-    
++
+ #ifdef DEBUG
+     if ( on_ac == 14 )
+       TRACE ("setting inactivity sleep timeout on ac to never");
+     else
+       TRACE ("setting inactivity sleep timeout on ac to %d", on_ac);
+ #endif
+-    
++
+     if ( on_ac == 14 )
+     {
+       egg_idletime_alarm_remove (manager->priv->idle, TIMEOUT_INACTIVITY_ON_AC );
+@@ -426,18 +426,18 @@ static void
+ xfpm_manager_set_idle_alarm_on_battery (XfpmManager *manager)
+ {
+     guint on_battery;
+-    
++
+     g_object_get (G_OBJECT (manager->priv->conf),
+                 ON_BATTERY_INACTIVITY_TIMEOUT, &on_battery,
+                 NULL);
+-    
++
+ #ifdef DEBUG
+     if ( on_battery == 14 )
+       TRACE ("setting inactivity sleep timeout on battery to never");
+     else
+       TRACE ("setting inactivity sleep timeout on battery to %d", on_battery);
+ #endif
+-    
++
+     if ( on_battery == 14 )
+     {
+       egg_idletime_alarm_remove (manager->priv->idle, TIMEOUT_INACTIVITY_ON_BATTERY );
+@@ -459,7 +459,7 @@ xfpm_manager_set_idle_alarm (XfpmManager *manager)
+ {
+     xfpm_manager_set_idle_alarm_on_ac (manager);
+     xfpm_manager_set_idle_alarm_on_battery (manager);
+-    
++
+ }
+ XfpmManager *
+@@ -468,18 +468,18 @@ xfpm_manager_new (DBusGConnection *bus, const gchar *client_id)
+     XfpmManager *manager = NULL;
+     GError *error = NULL;
+     gchar *current_dir;
+-    
++
+     const gchar *restart_command[] =
+     {
+       "xfce4-power-manager",
+       "--restart",
+       NULL
+     };
+-      
++
+     manager = g_object_new (XFPM_TYPE_MANAGER, NULL);
+     manager->priv->session_bus = bus;
+-    
++
+     current_dir = g_get_current_dir ();
+     manager->priv->client = xfce_sm_client_get_full (XFCE_SM_CLIENT_RESTART_NORMAL,
+                                                    XFCE_SM_CLIENT_PRIORITY_DEFAULT,
+@@ -487,14 +487,14 @@ xfpm_manager_new (DBusGConnection *bus, const gchar *client_id)
+                                                    current_dir,
+                                                    restart_command,
+                                                    SYSCONFDIR "/xdg/autostart/" PACKAGE_NAME ".desktop");
+-    
++
+     g_free (current_dir);
+-    
++
+     manager->priv->session_managed = xfce_sm_client_connect (manager->priv->client, &error);
+-    
++
+     if ( error )
+     {
+-      g_warning ("Unable to connect to session managet : %s", error->message);
++      g_warning ("Unable to connect to session manager : %s", error->message);
+       g_error_free (error);
+     }
+     else
+@@ -502,10 +502,10 @@ xfpm_manager_new (DBusGConnection *bus, const gchar *client_id)
+       g_signal_connect_swapped (manager->priv->client, "quit",
+                                 G_CALLBACK (xfpm_manager_quit), manager);
+     }
+-    
++
+     xfpm_manager_dbus_class_init (XFPM_MANAGER_GET_CLASS (manager));
+     xfpm_manager_dbus_init (manager);
+-    
++
+     return manager;
+ }
+@@ -513,11 +513,11 @@ void xfpm_manager_start (XfpmManager *manager)
+ {
+     if ( !xfpm_manager_reserve_names (manager) )
+       goto out;
+-      
++
+     dbus_g_error_domain_register (XFPM_ERROR,
+                                 NULL,
+                                 XFPM_TYPE_ERROR);
+-    
++
+     manager->priv->power = xfpm_power_get ();
+     manager->priv->button = xfpm_button_new ();
+     manager->priv->conf = xfpm_xfconf_new ();
+@@ -526,51 +526,51 @@ void xfpm_manager_start (XfpmManager *manager)
+     manager->priv->disks = xfpm_disks_new ();
+     manager->priv->inhibit = xfpm_inhibit_new ();
+     manager->priv->idle = egg_idletime_new ();
+-    
++
+     g_signal_connect (manager->priv->idle, "alarm-expired",
+                     G_CALLBACK (xfpm_manager_alarm_timeout_cb), manager);
+-    
++
+     g_signal_connect_swapped (manager->priv->conf, "notify::" ON_AC_INACTIVITY_TIMEOUT,
+                             G_CALLBACK (xfpm_manager_set_idle_alarm_on_ac), manager);
+-                    
++
+     g_signal_connect_swapped (manager->priv->conf, "notify::" ON_BATTERY_INACTIVITY_TIMEOUT,
+                             G_CALLBACK (xfpm_manager_set_idle_alarm_on_battery), manager);
+-    
++
+     xfpm_manager_set_idle_alarm (manager);
+-    
++
+     g_signal_connect (manager->priv->inhibit, "has-inhibit-changed",
+                     G_CALLBACK (xfpm_manager_inhibit_changed_cb), manager);
+-    
++
+     g_signal_connect (manager->priv->monitor, "system-bus-connection-changed",
+                     G_CALLBACK (xfpm_manager_system_bus_connection_changed_cb), manager);
+-   
++
+     manager->priv->backlight = xfpm_backlight_new ();
+-    
++
+ #ifdef HAVE_DPMS
+     manager->priv->dpms = xfpm_dpms_new ();
+ #endif
+-    
++
+     g_signal_connect (manager->priv->button, "button_pressed",
+                     G_CALLBACK (xfpm_manager_button_pressed_cb), manager);
+-    
++
+     g_signal_connect (manager->priv->power, "lid-changed",
+                     G_CALLBACK (xfpm_manager_lid_changed_cb), manager);
+-    
++
+     g_signal_connect (manager->priv->power, "on-battery-changed",
+                     G_CALLBACK (xfpm_manager_on_battery_changed_cb), manager);
+-    
++
+     g_signal_connect_swapped (manager->priv->power, "waking-up",
+                             G_CALLBACK (xfpm_manager_reset_sleep_timer), manager);
+-    
++
+     g_signal_connect_swapped (manager->priv->power, "sleeping",
+                             G_CALLBACK (xfpm_manager_reset_sleep_timer), manager);
+-                            
++
+     g_signal_connect_swapped (manager->priv->power, "ask-shutdown",
+                             G_CALLBACK (xfpm_manager_ask_shutdown), manager);
+-    
++
+     g_signal_connect_swapped (manager->priv->power, "shutdown",
+                             G_CALLBACK (xfpm_manager_shutdown), manager);
+-                            
++
+ out:
+       ;
+ }
+@@ -585,7 +585,7 @@ void xfpm_manager_stop (XfpmManager *manager)
+ GHashTable *xfpm_manager_get_config (XfpmManager *manager)
+ {
+     GHashTable *hash;
+-    
++
+     guint8 mapped_buttons;
+     gboolean auth_hibernate = FALSE;
+     gboolean auth_suspend = FALSE;
+@@ -600,9 +600,9 @@ GHashTable *xfpm_manager_get_config (XfpmManager *manager)
+     gboolean has_lid = FALSE;
+     gboolean can_spin = FALSE;
+     gboolean devkit_disk = FALSE;
+-    
++
+     hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+-    
++
+     g_object_get (G_OBJECT (manager->priv->console),
+                 "can-shutdown", &can_shutdown,
+                 NULL);
+@@ -611,25 +611,25 @@ GHashTable *xfpm_manager_get_config (XfpmManager *manager)
+                   "auth-suspend", &auth_suspend,
+                 "auth-hibernate", &auth_hibernate,
+                   "can-suspend", &can_suspend,
+-                  "can-hibernate", &can_hibernate, 
++                  "can-hibernate", &can_hibernate,
+                 "has-lid", &has_lid,
+                 NULL);
+     can_spin = xfpm_disks_get_can_spin (manager->priv->disks);
+     devkit_disk = xfpm_disks_kit_is_running (manager->priv->disks);
+-    
++
+     has_battery = xfpm_power_has_battery (manager->priv->power);
+     has_lcd_brightness = xfpm_backlight_has_hw (manager->priv->backlight);
+-    
++
+     mapped_buttons = xfpm_button_get_mapped (manager->priv->button);
+-    
++
+     if ( mapped_buttons & SLEEP_KEY )
+         has_sleep_button = TRUE;
+     if ( mapped_buttons & HIBERNATE_KEY )
+         has_hibernate_button = TRUE;
+     if ( mapped_buttons & POWER_KEY )
+         has_power_button = TRUE;
+-      
++
+     g_hash_table_insert (hash, g_strdup ("sleep-button"), g_strdup (xfpm_bool_to_string (has_sleep_button)));
+     g_hash_table_insert (hash, g_strdup ("power-button"), g_strdup (xfpm_bool_to_string (has_power_button)));
+     g_hash_table_insert (hash, g_strdup ("hibernate-button"), g_strdup (xfpm_bool_to_string (has_hibernate_button)));
+@@ -638,32 +638,32 @@ GHashTable *xfpm_manager_get_config (XfpmManager *manager)
+     g_hash_table_insert (hash, g_strdup ("can-suspend"), g_strdup (xfpm_bool_to_string (can_suspend)));
+     g_hash_table_insert (hash, g_strdup ("can-hibernate"), g_strdup (xfpm_bool_to_string (can_hibernate)));
+     g_hash_table_insert (hash, g_strdup ("can-shutdown"), g_strdup (xfpm_bool_to_string (can_shutdown)));
+-    
++
+     g_hash_table_insert (hash, g_strdup ("has-battery"), g_strdup (xfpm_bool_to_string (has_battery)));
+     g_hash_table_insert (hash, g_strdup ("has-lid"), g_strdup (xfpm_bool_to_string (has_lid)));
+     g_hash_table_insert (hash, g_strdup ("can-spin"), g_strdup (xfpm_bool_to_string (can_spin)));
+     g_hash_table_insert (hash, g_strdup ("devkit-disk"), g_strdup (xfpm_bool_to_string (devkit_disk)));
+-    
++
+     g_hash_table_insert (hash, g_strdup ("has-brightness"), g_strdup (xfpm_bool_to_string (has_lcd_brightness)));
+-    
++
+     return hash;
+ }
+ /*
+- * 
++ *
+  * DBus server implementation
+- * 
++ *
+  */
+ static gboolean xfpm_manager_dbus_quit       (XfpmManager *manager,
+                                             GError **error);
+-                                            
++
+ static gboolean xfpm_manager_dbus_restart     (XfpmManager *manager,
+                                              GError **error);
+-                                            
++
+ static gboolean xfpm_manager_dbus_get_config (XfpmManager *manager,
+                                             GHashTable **OUT_config,
+                                             GError **error);
+-                                                                                    
++
+ static gboolean xfpm_manager_dbus_get_info   (XfpmManager *manager,
+                                             gchar **OUT_name,
+                                             gchar **OUT_version,
+@@ -691,9 +691,9 @@ static gboolean
+ xfpm_manager_dbus_quit (XfpmManager *manager, GError **error)
+ {
+     XFPM_DEBUG("Quit message received\n");
+-    
++
+     xfpm_manager_quit (manager);
+-    
++
+     return TRUE;
+ }
+@@ -701,11 +701,11 @@ static gboolean xfpm_manager_dbus_restart     (XfpmManager *manager,
+                                              GError **error)
+ {
+     XFPM_DEBUG("Restart message received");
+-    
++
+     xfpm_manager_quit (manager);
+-    
++
+     g_spawn_command_line_async ("xfce4-power-manager", NULL);
+-    
++
+     return TRUE;
+ }
+@@ -713,22 +713,22 @@ static gboolean xfpm_manager_dbus_get_config (XfpmManager *manager,
+                                             GHashTable **OUT_config,
+                                             GError **error)
+ {
+-    
++
+     *OUT_config = xfpm_manager_get_config (manager);
+     return TRUE;
+ }
+-                                            
+-static gboolean 
++
++static gboolean
+ xfpm_manager_dbus_get_info (XfpmManager *manager,
+                           gchar **OUT_name,
+                           gchar **OUT_version,
+                           gchar **OUT_vendor,
+                           GError **error)
+ {
+-    
++
+     *OUT_name    = g_strdup(PACKAGE);
+     *OUT_version = g_strdup(VERSION);
+     *OUT_vendor  = g_strdup("Xfce-goodies");
+-    
++
+     return TRUE;
+ }
+-- 
+1.9.3
+
diff --git a/0081-Fix-typo.patch b/0081-Fix-typo.patch
new file mode 100644 (file)
index 0000000..97a5dae
--- /dev/null
@@ -0,0 +1,744 @@
+From d7252850d8070a0d8247d4af9d8930014f2a423b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Guelfucci?= <jeromeg@xfce.org>
+Date: Sun, 11 Aug 2013 22:40:11 +0200
+Subject: [PATCH 081/219] Fix typo.
+
+---
+ src/xfpm-battery.c | 252 ++++++++++++++++++++++++++---------------------------
+ 1 file changed, 126 insertions(+), 126 deletions(-)
+
+diff --git a/src/xfpm-battery.c b/src/xfpm-battery.c
+index 34a1da1..b3690d2 100644
+--- a/src/xfpm-battery.c
++++ b/src/xfpm-battery.c
+@@ -55,9 +55,9 @@ struct XfpmBatteryPrivate
+     XfpmButton             *button;
+     DBusGProxy             *proxy;
+     DBusGProxy                   *proxy_prop;
+-    
++
+     gchar                *icon_prefix;
+-    
++
+     XfpmBatteryCharge       charge;
+     XfpmDeviceState         state;
+     XfpmDeviceType          type;
+@@ -68,10 +68,10 @@ struct XfpmBatteryPrivate
+     gint64                time_to_empty;
+     const gchar            *battery_name;
+-    
++
+     gulong                sig;
+     gulong                sig_bt;
+-    
++
+     guint                   notify_idle;
+ };
+@@ -82,7 +82,7 @@ enum
+     PROP_CHARGE_STATUS,
+     PROP_DEVICE_TYPE
+ };
+-    
++
+ enum
+ {
+     BATTERY_CHARGE_CHANGED,
+@@ -96,27 +96,27 @@ G_DEFINE_TYPE (XfpmBattery, xfpm_battery, GTK_TYPE_STATUS_ICON)
+ static const gchar * G_GNUC_CONST
+ xfpm_battery_get_icon_index (XfpmDeviceType type, guint percent)
+ {
+-    if (percent < 10) 
++    if (percent < 10)
+     {
+         return "000";
+-    } 
+-    else if (percent < 30) 
++    }
++    else if (percent < 30)
+     {
+         return ( (type == XFPM_DEVICE_TYPE_BATTERY || type == XFPM_DEVICE_TYPE_UPS) ? "020" : "030");
+-    } 
+-    else if (percent < 50) 
++    }
++    else if (percent < 50)
+     {
+         return ( (type == XFPM_DEVICE_TYPE_BATTERY || type == XFPM_DEVICE_TYPE_UPS ) ? "040" : "030");
+-    } 
+-    else if (percent < 70) 
++    }
++    else if (percent < 70)
+     {
+         return "060";
+-    } 
+-    else if (percent < 90) 
++    }
++    else if (percent < 90)
+     {
+         return ((type == XFPM_DEVICE_TYPE_BATTERY || type == XFPM_DEVICE_TYPE_UPS) ? "080" : "060");
+     }
+-    
++
+     return "100";
+ }
+@@ -125,11 +125,11 @@ xfpm_battery_refresh_visible (XfpmBattery *battery)
+ {
+     XfpmShowIcon show_icon;
+     gboolean visible = TRUE;
+-    
++
+     g_object_get (G_OBJECT (battery->priv->conf),
+                 SHOW_TRAY_ICON_CFG, &show_icon,
+                 NULL);
+-                
++
+     if ( show_icon == SHOW_ICON_ALWAYS )
+       visible = TRUE;
+     else if ( show_icon == NEVER_SHOW_ICON )
+@@ -148,7 +148,7 @@ xfpm_battery_refresh_visible (XfpmBattery *battery)
+     }
+     XFPM_DEBUG_ENUM (show_icon, XFPM_TYPE_SHOW_ICON, "visible=%s", xfpm_bool_to_string (visible));
+-                        
++
+     gtk_status_icon_set_visible (GTK_STATUS_ICON (battery), visible);
+ }
+@@ -166,13 +166,13 @@ xfpm_battery_get_time_string (guint seconds)
+     /* Add 0.5 to do rounding */
+     minutes = (int) ( ( seconds / 60.0 ) + 0.5 );
+-    if (minutes == 0) 
++    if (minutes == 0)
+     {
+       timestring = g_strdup (_("Unknown time"));
+       return timestring;
+     }
+-    if (minutes < 60) 
++    if (minutes < 60)
+     {
+       timestring = g_strdup_printf (ngettext ("%i minute",
+                                     "%i minutes",
+@@ -201,8 +201,8 @@ static gchar *
+ xfpm_battery_get_message_from_battery_state (XfpmBattery *battery)
+ {
+     gchar *msg  = NULL;
+-    
+-    
++
++
+     if (battery->priv->type == XFPM_DEVICE_TYPE_BATTERY || battery->priv->type == XFPM_DEVICE_TYPE_UPS)
+     {
+       switch (battery->priv->state)
+@@ -212,16 +212,16 @@ xfpm_battery_get_message_from_battery_state (XfpmBattery *battery)
+               break;
+           case XFPM_DEVICE_STATE_CHARGING:
+               msg = g_strdup_printf (_("Your %s is charging"), battery->priv->battery_name);
+-              
++
+               if ( battery->priv->time_to_full != 0 )
+               {
+                   gchar *tmp, *est_time_str;
+                   tmp = g_strdup (msg);
+                   g_free (msg);
+-                  
++
+                   est_time_str = xfpm_battery_get_time_string (battery->priv->time_to_full);
+-                  
+-                  msg = g_strdup_printf (_("%s (%i%%)\n%s until is fully charged."), tmp, battery->priv->percentage, est_time_str);
++
++                  msg = g_strdup_printf (_("%s (%i%%)\n%s until it is fully charged."), tmp, battery->priv->percentage, est_time_str);
+                   g_free (est_time_str);
+                   g_free (tmp);
+               }
+@@ -232,15 +232,15 @@ xfpm_battery_get_message_from_battery_state (XfpmBattery *battery)
+                   msg =  g_strdup_printf (_("Your %s is discharging"), battery->priv->battery_name);
+               else
+                   msg =  g_strdup_printf (_("System is running on %s power"), battery->priv->battery_name);
+-                  
++
+                   if ( battery->priv->time_to_empty != 0 )
+                   {
+                       gchar *tmp, *est_time_str;
+                       tmp = g_strdup (msg);
+                       g_free (msg);
+-                      
++
+                       est_time_str = xfpm_battery_get_time_string (battery->priv->time_to_empty);
+-                      
++
+                       msg = g_strdup_printf (_("%s (%i%%)\nEstimated time left is %s."), tmp, battery->priv->percentage, est_time_str);
+                       g_free (tmp);
+                       g_free (est_time_str);
+@@ -252,7 +252,7 @@ xfpm_battery_get_message_from_battery_state (XfpmBattery *battery)
+           default:
+               break;
+       }
+-      
++
+     }
+     else if (battery->priv->type >= XFPM_DEVICE_TYPE_MONITOR)
+     {
+@@ -274,7 +274,7 @@ xfpm_battery_get_message_from_battery_state (XfpmBattery *battery)
+               break;
+       }
+     }
+-    
++
+     return msg;
+ }
+@@ -282,10 +282,10 @@ static void
+ xfpm_battery_refresh_icon (XfpmBattery *battery)
+ {
+     gchar icon_name[128];
+-    
++
+     XFPM_DEBUG ("Battery state %d", battery->priv->state);
+-    
+-    if ( battery->priv->type == XFPM_DEVICE_TYPE_BATTERY || 
++
++    if ( battery->priv->type == XFPM_DEVICE_TYPE_BATTERY ||
+        battery->priv->type == XFPM_DEVICE_TYPE_UPS )
+     {
+       if (!battery->priv->present)
+@@ -296,19 +296,19 @@ xfpm_battery_refresh_icon (XfpmBattery *battery)
+       {
+           g_snprintf (icon_name, 128, "%s%s", battery->priv->icon_prefix, battery->priv->ac_online ? "charged" : "100");
+       }
+-      else if ( battery->priv->state == XFPM_DEVICE_STATE_CHARGING || 
++      else if ( battery->priv->state == XFPM_DEVICE_STATE_CHARGING ||
+                 battery->priv->state == XFPM_DEVICE_STATE_PENDING_CHARGING)
+       {
+-          g_snprintf (icon_name, 128, "%s%s-%s", 
+-                      battery->priv->icon_prefix, 
++          g_snprintf (icon_name, 128, "%s%s-%s",
++                      battery->priv->icon_prefix,
+                       xfpm_battery_get_icon_index (battery->priv->type, battery->priv->percentage),
+                       "charging");
+       }
+       else if ( battery->priv->state == XFPM_DEVICE_STATE_DISCHARGING ||
+                 battery->priv->state == XFPM_DEVICE_STATE_PENDING_DISCHARGING)
+       {
+-          g_snprintf (icon_name, 128, "%s%s", 
+-                      battery->priv->icon_prefix, 
++          g_snprintf (icon_name, 128, "%s%s",
++                      battery->priv->icon_prefix,
+                       xfpm_battery_get_icon_index (battery->priv->type, battery->priv->percentage));
+       }
+       else if ( battery->priv->state == XFPM_DEVICE_STATE_EMPTY)
+@@ -328,12 +328,12 @@ xfpm_battery_refresh_icon (XfpmBattery *battery)
+       }
+       else if ( battery->priv->state == XFPM_DEVICE_STATE_DISCHARGING )
+       {
+-          g_snprintf (icon_name, 128, "%s-%s", 
+-                      battery->priv->icon_prefix, 
++          g_snprintf (icon_name, 128, "%s-%s",
++                      battery->priv->icon_prefix,
+                       xfpm_battery_get_icon_index (battery->priv->type, battery->priv->percentage));
+       }
+     }
+-    
++
+     gtk_status_icon_set_from_icon_name (GTK_STATUS_ICON (battery), icon_name);
+ }
+@@ -341,21 +341,21 @@ static void
+ xfpm_battery_notify (XfpmBattery *battery)
+ {
+     gchar *message = NULL;
+-    
++
+     message = xfpm_battery_get_message_from_battery_state (battery);
+-    
++
+     if ( !message )
+       return;
+-      
+-    xfpm_notify_show_notification (battery->priv->notify, 
+-                                 _("Power Manager"), 
+-                                 message, 
++
++    xfpm_notify_show_notification (battery->priv->notify,
++                                 _("Power Manager"),
++                                 message,
+                                  gtk_status_icon_get_icon_name (GTK_STATUS_ICON (battery)),
+                                  8000,
+                                  FALSE,
+                                  XFPM_NOTIFY_NORMAL,
+                                  GTK_STATUS_ICON (battery));
+-    
++
+     g_free (message);
+ }
+@@ -363,10 +363,10 @@ static gboolean
+ xfpm_battery_notify_idle (gpointer data)
+ {
+     XfpmBattery *battery = XFPM_BATTERY (data);
+-    
++
+     xfpm_battery_notify (battery);
+     battery->priv->notify_idle = 0;
+-    
++
+     return FALSE;
+ }
+@@ -375,10 +375,10 @@ xfpm_battery_notify_state (XfpmBattery *battery)
+ {
+     gboolean notify;
+     static gboolean starting_up = TRUE;
+-    
++
+     if ( !gtk_status_icon_get_visible (GTK_STATUS_ICON (battery)) )
+       return;
+-    
++
+     if ( battery->priv->type == XFPM_DEVICE_TYPE_BATTERY ||
+        battery->priv->type == XFPM_DEVICE_TYPE_UPS )
+     {
+@@ -387,11 +387,11 @@ xfpm_battery_notify_state (XfpmBattery *battery)
+           starting_up = FALSE;
+           return;
+       }
+-    
++
+       g_object_get (G_OBJECT (battery->priv->conf),
+                     GENERAL_NOTIFICATION_CFG, &notify,
+                     NULL);
+-                    
++
+       if ( notify )
+       {
+           if (battery->priv->notify_idle == 0)
+@@ -409,24 +409,24 @@ xfpm_battery_set_tooltip_primary (XfpmBattery *battery, GtkTooltip *tooltip)
+     gchar *tip;
+     gchar *est_time_str = NULL;
+     gchar *power_status = NULL;
+-    
++
+     power_status = g_strdup_printf (battery->priv->ac_online ? _("Adaptor is online") : _("System is running on battery power"));
+-    
++
+     if ( battery->priv->state == XFPM_DEVICE_STATE_FULLY_CHARGED )
+     {
+       if ( battery->priv->time_to_empty > 0 )
+       {
+           est_time_str = xfpm_battery_get_time_string (battery->priv->time_to_empty);
+-          tip = g_strdup_printf (_("%s\nYour %s is fully charged (%i%%).\nProvides %s runtime"), 
++          tip = g_strdup_printf (_("%s\nYour %s is fully charged (%i%%).\nProvides %s runtime"),
+                                  power_status,
+-                                 battery->priv->battery_name, 
++                                 battery->priv->battery_name,
+                                  battery->priv->percentage,
+                                  est_time_str);
+           g_free (est_time_str);
+       }
+       else
+       {
+-          tip = g_strdup_printf (_("%s\nYour %s is fully charged (%i%%)."), 
++          tip = g_strdup_printf (_("%s\nYour %s is fully charged (%i%%)."),
+                                  power_status,
+                                  battery->priv->battery_name,
+                                  battery->priv->percentage);
+@@ -437,10 +437,10 @@ xfpm_battery_set_tooltip_primary (XfpmBattery *battery, GtkTooltip *tooltip)
+       if ( battery->priv->time_to_full != 0 )
+       {
+           est_time_str = xfpm_battery_get_time_string (battery->priv->time_to_full);
+-          tip = g_strdup_printf (_("%s\nYour %s is charging (%i%%)\n%s until is fully charged."), 
++          tip = g_strdup_printf (_("%s\nYour %s is charging (%i%%)\n%s until is fully charged."),
+                                  power_status,
+-                                 battery->priv->battery_name, 
+-                                 battery->priv->percentage, 
++                                 battery->priv->battery_name,
++                                 battery->priv->percentage,
+                                  est_time_str);
+           g_free (est_time_str);
+       }
+@@ -457,10 +457,10 @@ xfpm_battery_set_tooltip_primary (XfpmBattery *battery, GtkTooltip *tooltip)
+       if ( battery->priv->time_to_empty != 0 )
+       {
+           est_time_str = xfpm_battery_get_time_string (battery->priv->time_to_empty);
+-          tip = g_strdup_printf (_("%s\nYour %s is discharging (%i%%)\nEstimated time left is %s."), 
++          tip = g_strdup_printf (_("%s\nYour %s is discharging (%i%%)\nEstimated time left is %s."),
+                                  power_status,
+-                                 battery->priv->battery_name, 
+-                                 battery->priv->percentage, 
++                                 battery->priv->battery_name,
++                                 battery->priv->percentage,
+                                  est_time_str);
+           g_free (est_time_str);
+       }
+@@ -471,7 +471,7 @@ xfpm_battery_set_tooltip_primary (XfpmBattery *battery, GtkTooltip *tooltip)
+                                  battery->priv->battery_name,
+                                  battery->priv->percentage);
+       }
+-      
++
+     }
+     else if ( battery->priv->state == XFPM_DEVICE_STATE_PENDING_CHARGING )
+     {
+@@ -485,7 +485,7 @@ xfpm_battery_set_tooltip_primary (XfpmBattery *battery, GtkTooltip *tooltip)
+     {
+       tip = g_strdup_printf (_("%s\nYour %s is empty"), power_status, battery->priv->battery_name);
+     }
+-    
++
+     gtk_tooltip_set_text (tooltip, tip);
+     g_free (power_status);
+     g_free (tip);
+@@ -496,20 +496,20 @@ xfpm_battery_check_charge (XfpmBattery *battery)
+ {
+     XfpmBatteryCharge charge;
+     guint critical_level, low_level;
+-    
++
+     g_object_get (G_OBJECT (battery->priv->conf),
+                 CRITICAL_POWER_LEVEL, &critical_level,
+                 NULL);
+-                
++
+     low_level = critical_level + 10;
+-    
++
+     if ( battery->priv->percentage > low_level )
+       charge = XFPM_BATTERY_CHARGE_OK;
+     else if ( battery->priv->percentage <= low_level && battery->priv->percentage > critical_level )
+       charge = XFPM_BATTERY_CHARGE_LOW;
+     else if ( battery->priv->percentage <= critical_level )
+       charge = XFPM_BATTERY_CHARGE_CRITICAL;
+-      
++
+     if ( charge != battery->priv->charge)
+     {
+       battery->priv->charge = charge;
+@@ -527,24 +527,24 @@ xfpm_battery_refresh (XfpmBattery *battery, GHashTable *props)
+ {
+     GValue *value;
+     guint state;
+-    
++
+     value = g_hash_table_lookup (props, "IsPresent");
+-    
++
+     if ( value == NULL )
+     {
+       g_warning ("No 'IsPresent' property found");
+       goto out;
+     }
+-    
++
+     battery->priv->present = g_value_get_boolean (value);
+-    
++
+     value = g_hash_table_lookup (props, "State");
+-    
++
+     if ( value == NULL )
+     {
+       g_warning ("No 'State' property found");
+     }
+-    
++
+     state = g_value_get_uint (value);
+     if ( state != battery->priv->state )
+     {
+@@ -552,45 +552,45 @@ xfpm_battery_refresh (XfpmBattery *battery, GHashTable *props)
+       xfpm_battery_refresh_visible (battery);
+       xfpm_battery_notify_state (battery);
+     }
+-    
++
+     value = g_hash_table_lookup (props, "Percentage");
+-    
++
+     if ( value == NULL )
+     {
+       g_warning ("No 'Percentage' property found on battery device");
+       goto out;
+     }
+-    
++
+     battery->priv->percentage = (guint) g_value_get_double (value);
+-    
++
+     xfpm_battery_check_charge (battery);
+-    
++
+     xfpm_battery_refresh_icon (battery);
+-    
++
+     if ( battery->priv->type == XFPM_DEVICE_TYPE_BATTERY ||
+        battery->priv->type == XFPM_DEVICE_TYPE_UPS )
+     {
+       value = g_hash_table_lookup (props, "TimeToEmpty");
+-      
++
+       if ( value == NULL )
+       {
+           g_warning ("No 'TimeToEmpty' property found on battery device");
+           goto out;
+       }
+-      
++
+       battery->priv->time_to_empty = g_value_get_int64 (value);
+-      
++
+       value = g_hash_table_lookup (props, "TimeToFull");
+-      
++
+       if ( value == NULL )
+       {
+           g_warning ("No 'TimeToFull' property found on battery device");
+           goto out;
+       }
+-      
++
+       battery->priv->time_to_full = g_value_get_int64 (value);
+     }
+-    
++
+     out:
+       g_hash_table_destroy (props);
+ }
+@@ -606,23 +606,23 @@ static void
+ xfpm_battery_changed_cb (DBusGProxy *proxy, XfpmBattery *battery)
+ {
+     GHashTable *props;
+-    
+-    props = xfpm_power_get_interface_properties (battery->priv->proxy_prop, 
++
++    props = xfpm_power_get_interface_properties (battery->priv->proxy_prop,
+                                                UPOWER_IFACE_DEVICE);
+-    
++
+     if ( props )
+       xfpm_battery_refresh (battery, props);
+ }
+ static gboolean
+-xfpm_battery_query_tooltip (GtkStatusIcon *icon, 
++xfpm_battery_query_tooltip (GtkStatusIcon *icon,
+                           gint x,
+                           gint y,
+                           gboolean keyboard_mode,
+                           GtkTooltip *tooltip)
+ {
+     XfpmBattery *battery;
+-    
++
+     battery = XFPM_BATTERY (icon);
+     if ( battery->priv->type == XFPM_DEVICE_TYPE_BATTERY ||
+@@ -631,7 +631,7 @@ xfpm_battery_query_tooltip (GtkStatusIcon *icon,
+       xfpm_battery_set_tooltip_primary (battery, tooltip);
+       return TRUE;
+     }
+-    
++
+     return FALSE;
+ }
+@@ -647,9 +647,9 @@ static void xfpm_battery_get_property (GObject *object,
+                                      GParamSpec *pspec)
+ {
+     XfpmBattery *battery;
+-    
++
+     battery = XFPM_BATTERY (object);
+-    
++
+     switch (prop_id)
+     {
+       case PROP_AC_ONLINE:
+@@ -673,9 +673,9 @@ static void xfpm_battery_set_property (GObject *object,
+                                      GParamSpec *pspec)
+ {
+     XfpmBattery *battery;
+-    
++
+     battery = XFPM_BATTERY (object);
+-    
++
+     switch (prop_id)
+     {
+       case PROP_AC_ONLINE:
+@@ -700,8 +700,8 @@ xfpm_battery_class_init (XfpmBatteryClass *klass)
+     object_class->set_property = xfpm_battery_set_property;
+     status_icon_class->query_tooltip = xfpm_battery_query_tooltip;
+-    
+-    signals [BATTERY_CHARGE_CHANGED] = 
++
++    signals [BATTERY_CHARGE_CHANGED] =
+         g_signal_new ("battery-charge-changed",
+                       XFPM_TYPE_BATTERY,
+                       G_SIGNAL_RUN_LAST,
+@@ -709,7 +709,7 @@ xfpm_battery_class_init (XfpmBatteryClass *klass)
+                       NULL, NULL,
+                       g_cclosure_marshal_VOID__VOID,
+                       G_TYPE_NONE, 0, G_TYPE_NONE);
+-    
++
+     g_object_class_install_property (object_class,
+                                      PROP_AC_ONLINE,
+                                      g_param_spec_boolean("ac-online",
+@@ -740,7 +740,7 @@ static void
+ xfpm_battery_init (XfpmBattery *battery)
+ {
+     battery->priv = XFPM_BATTERY_GET_PRIVATE (battery);
+-    
++
+     battery->priv->conf          = xfpm_xfconf_new ();
+     battery->priv->notify        = xfpm_notify_new ();
+     battery->priv->proxy_prop    = NULL;
+@@ -752,11 +752,11 @@ xfpm_battery_init (XfpmBattery *battery)
+     battery->priv->time_to_empty = 0;
+     battery->priv->button        = xfpm_button_new ();
+     battery->priv->ac_online     = TRUE;
+-    
++
+     battery->priv->sig = g_signal_connect (G_OBJECT (battery->priv->conf), "notify::" SHOW_TRAY_ICON_CFG,
+                                          G_CALLBACK (xfpm_battery_tray_icon_settings_changed), battery);
+-                                         
+-    
++
++
+     battery->priv->sig_bt = g_signal_connect (G_OBJECT (battery->priv->button), "button-pressed",
+                                          G_CALLBACK (xfpm_battery_button_pressed_cb), battery);
+ }
+@@ -767,7 +767,7 @@ xfpm_battery_finalize (GObject *object)
+     XfpmBattery *battery;
+     battery = XFPM_BATTERY (object);
+-    
++
+     g_free (battery->priv->icon_prefix);
+     if (battery->priv->notify_idle != 0)
+@@ -775,13 +775,13 @@ xfpm_battery_finalize (GObject *object)
+     dbus_g_proxy_disconnect_signal (battery->priv->proxy, "Changed",
+                                   G_CALLBACK (xfpm_battery_changed_cb), battery);
+-                                  
++
+     if ( g_signal_handler_is_connected (battery->priv->conf, battery->priv->sig ) )
+       g_signal_handler_disconnect (G_OBJECT (battery->priv->conf), battery->priv->sig);
+-      
++
+      if ( g_signal_handler_is_connected (battery->priv->button, battery->priv->sig_bt ) )
+       g_signal_handler_disconnect (G_OBJECT (battery->priv->button), battery->priv->sig_bt);
+-                                  
++
+     g_object_unref (battery->priv->proxy);
+     g_object_unref (battery->priv->proxy_prop);
+     g_object_unref (battery->priv->conf);
+@@ -798,23 +798,23 @@ xfpm_battery_get_icon_prefix_device_enum_type (XfpmDeviceType type)
+     {
+       return g_strdup (XFPM_PRIMARY_ICON_PREFIX);
+     }
+-    else if ( type == XFPM_DEVICE_TYPE_UPS ) 
++    else if ( type == XFPM_DEVICE_TYPE_UPS )
+     {
+       return g_strdup (XFPM_UPS_ICON_PREFIX);
+     }
+-    else if ( type == XFPM_DEVICE_TYPE_MOUSE ) 
++    else if ( type == XFPM_DEVICE_TYPE_MOUSE )
+     {
+       return g_strdup (XFPM_MOUSE_ICON_PREFIX);
+     }
+-    else if ( type == XFPM_DEVICE_TYPE_KBD ) 
++    else if ( type == XFPM_DEVICE_TYPE_KBD )
+     {
+       return g_strdup (XFPM_KBD_ICON_PREFIX);
+     }
+-    else if ( type == XFPM_DEVICE_TYPE_PHONE ) 
++    else if ( type == XFPM_DEVICE_TYPE_PHONE )
+     {
+       return g_strdup (XFPM_PHONE_ICON_PREFIX);
+     }
+-    
++
+     return g_strdup (XFPM_PRIMARY_ICON_PREFIX);
+ }
+@@ -822,7 +822,7 @@ static const gchar *
+ xfpm_battery_get_name (XfpmDeviceType type)
+ {
+     const gchar *name = NULL;
+-    
++
+     switch (type)
+     {
+       case XFPM_DEVICE_TYPE_BATTERY:
+@@ -850,7 +850,7 @@ xfpm_battery_get_name (XfpmDeviceType type)
+           name = _("Unknown");
+           break;
+     }
+-    
++
+     return name;
+ }
+@@ -858,9 +858,9 @@ GtkStatusIcon *
+ xfpm_battery_new (void)
+ {
+     XfpmBattery *battery = NULL;
+-    
++
+     battery = g_object_new (XFPM_TYPE_BATTERY, NULL);
+-    
++
+     return GTK_STATUS_ICON (battery);
+ }
+@@ -874,8 +874,8 @@ void xfpm_battery_monitor_device (XfpmBattery *battery,
+     battery->priv->proxy = proxy;
+     battery->priv->icon_prefix = xfpm_battery_get_icon_prefix_device_enum_type (device_type);
+     battery->priv->battery_name = xfpm_battery_get_name (device_type);
+-    
+-    
++
++
+     dbus_g_proxy_add_signal (proxy, "Changed", G_TYPE_INVALID);
+     dbus_g_proxy_connect_signal (proxy, "Changed",
+                                G_CALLBACK (xfpm_battery_changed_cb), battery, NULL);
+@@ -890,27 +890,27 @@ void xfpm_battery_monitor_device (XfpmBattery *battery,
+ XfpmDeviceType xfpm_battery_get_device_type (XfpmBattery *battery)
+ {
+     g_return_val_if_fail (XFPM_IS_BATTERY (battery), XFPM_DEVICE_TYPE_UNKNOWN );
+-    
++
+     return battery->priv->type;
+ }
+ XfpmBatteryCharge xfpm_battery_get_charge (XfpmBattery *battery)
+ {
+     g_return_val_if_fail (XFPM_IS_BATTERY (battery), XFPM_BATTERY_CHARGE_UNKNOWN);
+-    
++
+     return battery->priv->charge;
+ }
+ const gchar *xfpm_battery_get_battery_name (XfpmBattery *battery)
+ {
+     g_return_val_if_fail (XFPM_IS_BATTERY (battery), NULL);
+-    
++
+     return battery->priv->battery_name;
+ }
+ gchar *xfpm_battery_get_time_left (XfpmBattery *battery)
+ {
+     g_return_val_if_fail (XFPM_IS_BATTERY (battery), NULL);
+-    
++
+     return xfpm_battery_get_time_string (battery->priv->time_to_empty);
+ }
+-- 
+1.9.3
+
diff --git a/0082-Fix-incorrect-check-for-suspend-permissions-bug-8438.patch b/0082-Fix-incorrect-check-for-suspend-permissions-bug-8438.patch
new file mode 100644 (file)
index 0000000..8ef09d2
--- /dev/null
@@ -0,0 +1,1418 @@
+From 83b20fd2335a2cc54577019ea9af1a664a93ac28 Mon Sep 17 00:00:00 2001
+From: Lionel Le Folgoc <lionel@lefolgoc.net>
+Date: Sun, 11 Aug 2013 22:47:24 +0200
+Subject: [PATCH 082/219] Fix incorrect check for suspend permissions (bug
+ #8438).
+
+---
+ src/xfpm-power.c | 508 +++++++++++++++++++++++++++----------------------------
+ 1 file changed, 254 insertions(+), 254 deletions(-)
+
+diff --git a/src/xfpm-power.c b/src/xfpm-power.c
+index bcf2fbd..d703f8e 100644
+--- a/src/xfpm-power.c
++++ b/src/xfpm-power.c
+@@ -69,25 +69,25 @@ static void xfpm_power_refresh_adaptor_visible (XfpmPower *power);
+ struct XfpmPowerPrivate
+ {
+     DBusGConnection *bus;
+-    
++
+     DBusGProxy      *proxy;
+     DBusGProxy      *proxy_prop;
+-    
++
+     GHashTable      *hash;
+-    
++
+     XfpmConsoleKit  *console;
+     XfpmInhibit           *inhibit;
+     XfpmXfconf      *conf;
+     GtkStatusIcon   *adapter_icon;
+-    
++
+     XfpmBatteryCharge overall_state;
+     gboolean         critical_action_done;
+-    
++
+     XfpmPowerMode    power_mode;
+     EggIdletime     *idletime;
+-    
++
+     gboolean       inhibited;
+-    
++
+     XfpmNotify            *notify;
+ #ifdef ENABLE_POLKIT
+     XfpmPolkit            *polkit;
+@@ -103,9 +103,9 @@ struct XfpmPowerPrivate
+     gchar           *daemon_version;
+     gboolean       can_suspend;
+     gboolean         can_hibernate;
+-    
++
+     /**
+-     * Warning dialog to use when notification daemon 
++     * Warning dialog to use when notification daemon
+      * doesn't support actions.
+      **/
+     GtkWidget             *dialog;
+@@ -144,10 +144,10 @@ G_DEFINE_TYPE (XfpmPower, xfpm_power, G_TYPE_OBJECT)
+ static void
+ xfpm_power_check_polkit_auth (XfpmPower *power)
+ {
+-    power->priv->auth_suspend = xfpm_polkit_check_auth (power->priv->polkit, 
++    power->priv->auth_suspend = xfpm_polkit_check_auth (power->priv->polkit,
+                                                       POLKIT_AUTH_SUSPEND);
+-    power->priv->auth_hibernate = xfpm_polkit_check_auth (power->priv->polkit, 
++    power->priv->auth_hibernate = xfpm_polkit_check_auth (power->priv->polkit,
+                                                         POLKIT_AUTH_HIBERNATE);
+ }
+@@ -158,30 +158,30 @@ xfpm_power_check_pm (XfpmPower *power, GHashTable *props)
+ {
+     GValue *value;
+     gboolean ret;
+-    
++
+     value = g_hash_table_lookup (props, "CanSuspend");
+-    
+-    if (value == NULL) 
++
++    if (value == NULL)
+     {
+       g_warning ("No 'CanSuspend' property");
+     }
+     ret = g_value_get_boolean (value);
+-    
+-    if (ret != power->priv->can_suspend) 
++
++    if (ret != power->priv->can_suspend)
+     {
+       power->priv->can_suspend = ret;
+     }
+     value = g_hash_table_lookup (props, "CanHibernate");
+-    
+-    if (value == NULL) 
++
++    if (value == NULL)
+     {
+       g_warning ("No 'CanHibernate' property");
+     }
+-    
++
+     ret = g_value_get_boolean (value);
+-    
+-    if (ret != power->priv->can_hibernate) 
++
++    if (ret != power->priv->can_hibernate)
+     {
+       power->priv->can_hibernate = ret;
+     }
+@@ -192,14 +192,14 @@ xfpm_power_check_power (XfpmPower *power, GHashTable *props)
+ {
+     GValue *value;
+     gboolean on_battery;
+-    
++
+     value = g_hash_table_lookup (props, "OnBattery");
+-    
+-    if (G_LIKELY (value)) 
++
++    if (G_LIKELY (value))
+     {
+       on_battery = g_value_get_boolean (value);
+-    
+-      if (on_battery != power->priv->on_battery ) 
++
++      if (on_battery != power->priv->on_battery )
+       {
+           GList *list;
+           guint len, i;
+@@ -209,7 +209,7 @@ xfpm_power_check_power (XfpmPower *power, GHashTable *props)
+           len = g_list_length (list);
+           for ( i = 0; i < len; i++)
+           {
+-              g_object_set (G_OBJECT (g_list_nth_data (list, i)), 
++              g_object_set (G_OBJECT (g_list_nth_data (list, i)),
+                             "ac-online", !on_battery,
+                             NULL);
+           }
+@@ -225,10 +225,10 @@ static void
+ xfpm_power_check_lid (XfpmPower *power, GHashTable *props)
+ {
+     GValue *value;
+-    
++
+     value = g_hash_table_lookup (props, "LidIsPresent");
+-    
+-    if (value == NULL) 
++
++    if (value == NULL)
+     {
+       g_warning ("No 'LidIsPresent' property");
+       return;
+@@ -236,21 +236,21 @@ xfpm_power_check_lid (XfpmPower *power, GHashTable *props)
+     power->priv->lid_is_present = g_value_get_boolean (value);
+-    if (power->priv->lid_is_present) 
++    if (power->priv->lid_is_present)
+     {
+       gboolean closed;
+-      
++
+       value = g_hash_table_lookup (props, "LidIsClosed");
+-    
+-      if (value == NULL) 
++
++      if (value == NULL)
+       {
+           g_warning ("No 'LidIsClosed' property");
+           return;
+       }
+-      
++
+       closed = g_value_get_boolean (value);
+-      
+-      if (closed != power->priv->lid_is_closed ) 
++
++      if (closed != power->priv->lid_is_closed )
+       {
+           power->priv->lid_is_closed = closed;
+           g_signal_emit (G_OBJECT (power), signals [LID_CHANGED], 0, power->priv->lid_is_closed);
+@@ -260,7 +260,7 @@ xfpm_power_check_lid (XfpmPower *power, GHashTable *props)
+ /*
+  * Get the properties on org.freedesktop.DeviceKit.Power
+- * 
++ *
+  * DaemonVersion      's'
+  * CanSuspend'        'b'
+  * CanHibernate'      'b'
+@@ -273,9 +273,9 @@ static void
+ xfpm_power_get_properties (XfpmPower *power)
+ {
+     GHashTable *props;
+-    
++
+     props = xfpm_power_get_interface_properties (power->priv->proxy_prop, UPOWER_IFACE);
+-    
++
+     xfpm_power_check_pm (power, props);
+     xfpm_power_check_lid (power, props);
+     xfpm_power_check_power (power, props);
+@@ -289,10 +289,10 @@ xfpm_power_report_error (XfpmPower *power, const gchar *error, const gchar *icon
+     GtkStatusIcon *battery = NULL;
+     guint i, len;
+     GList *list;
+-    
++
+     list = g_hash_table_get_values (power->priv->hash);
+     len = g_list_length (list);
+-    
++
+     for ( i = 0; i < len; i++)
+     {
+       XfpmDeviceType type;
+@@ -302,16 +302,16 @@ xfpm_power_report_error (XfpmPower *power, const gchar *error, const gchar *icon
+            type == XFPM_DEVICE_TYPE_UPS )
+            break;
+     }
+-    
+-    xfpm_notify_show_notification (power->priv->notify, 
+-                                 _("Power Manager"), 
+-                                 error, 
++
++    xfpm_notify_show_notification (power->priv->notify,
++                                 _("Power Manager"),
++                                 error,
+                                  icon_name,
+                                  10000,
+                                  FALSE,
+                                  XFPM_NOTIFY_CRITICAL,
+                                  battery);
+-    
++
+ }
+ static void
+@@ -319,7 +319,7 @@ xfpm_power_sleep (XfpmPower *power, const gchar *sleep_time, gboolean force)
+ {
+     GError *error = NULL;
+     gboolean lock_screen;
+-    
++
+     if ( power->priv->inhibited && force == FALSE)
+     {
+       gboolean ret;
+@@ -333,24 +333,24 @@ xfpm_power_sleep (XfpmPower *power, const gchar *sleep_time, gboolean force)
+       if ( !ret )
+           return;
+     }
+-    
++
+     g_signal_emit (G_OBJECT (power), signals [SLEEPING], 0);
+     xfpm_network_manager_sleep (TRUE);
+-        
++
+     g_object_get (G_OBJECT (power->priv->conf),
+                 LOCK_SCREEN_ON_SLEEP, &lock_screen,
+                 NULL);
+-    
++
+     if ( lock_screen )
+     {
+       g_usleep (2000000); /* 2 seconds */
+       xfpm_lock_screen ();
+     }
+-    
++
+     dbus_g_proxy_call (power->priv->proxy, sleep_time, &error,
+                      G_TYPE_INVALID,
+                      G_TYPE_INVALID);
+-    
++
+     if ( error )
+     {
+       if ( g_error_matches (error, DBUS_GERROR, DBUS_GERROR_NO_REPLY) )
+@@ -364,12 +364,12 @@ xfpm_power_sleep (XfpmPower *power, const gchar *sleep_time, gboolean force)
+               icon_name = XFPM_HIBERNATE_ICON;
+           else
+               icon_name = XFPM_SUSPEND_ICON;
+-          
++
+           xfpm_power_report_error (power, error->message, icon_name);
+           g_error_free (error);
+       }
+     }
+-    
++
+     g_signal_emit (G_OBJECT (power), signals [WAKING_UP], 0);
+     xfpm_network_manager_sleep (FALSE);
+ }
+@@ -420,9 +420,9 @@ static void
+ xfpm_power_tray_exit_activated_cb (gpointer data)
+ {
+     gboolean ret;
+-    
+-    ret = xfce_dialog_confirm (NULL, 
+-                             GTK_STOCK_YES, 
++
++    ret = xfce_dialog_confirm (NULL,
++                             GTK_STOCK_YES,
+                              _("Quit"),
+                              _("All running instances of the power manager will exit"),
+                              "%s",
+@@ -439,19 +439,19 @@ xfpm_power_change_mode (XfpmPower *power, XfpmPowerMode mode)
+ {
+ #ifdef HAVE_DPMS
+     XfpmDpms *dpms;
+-    
++
+     power->priv->power_mode = mode;
+-    
++
+     dpms = xfpm_dpms_new ();
+     xfpm_dpms_refresh (dpms);
+     g_object_unref (dpms);
+-    
++
+     if (mode == XFPM_POWER_MODE_NORMAL)
+     {
+       EggIdletime *idletime;
+       idletime = egg_idletime_new ();
+       egg_idletime_alarm_reset_all (idletime);
+-    
++
+       g_object_unref (idletime);
+     }
+ #endif
+@@ -470,9 +470,9 @@ xfpm_power_presentation_mode_cb (XfpmPower *power)
+ }
+ static void
+-xfpm_power_show_tray_menu (XfpmPower *power, 
+-                       GtkStatusIcon *icon, 
+-                       guint button, 
++xfpm_power_show_tray_menu (XfpmPower *power,
++                       GtkStatusIcon *icon,
++                       guint button,
+                        guint activate_time,
+                        gboolean show_info_item)
+ {
+@@ -485,7 +485,7 @@ xfpm_power_show_tray_menu (XfpmPower *power,
+     img = gtk_image_new_from_icon_name (XFPM_HIBERNATE_ICON, GTK_ICON_SIZE_MENU);
+     gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), img);
+     gtk_widget_set_sensitive (mi, FALSE);
+-    
++
+     if ( power->priv->can_hibernate && power->priv->auth_hibernate)
+     {
+       gtk_widget_set_sensitive (mi, TRUE);
+@@ -494,21 +494,21 @@ xfpm_power_show_tray_menu (XfpmPower *power,
+     }
+     gtk_widget_show (mi);
+     gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+-    
++
+     // Suspend menu option
+     mi = gtk_image_menu_item_new_with_label (_("Suspend"));
+     img = gtk_image_new_from_icon_name (XFPM_SUSPEND_ICON, GTK_ICON_SIZE_MENU);
+     gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), img);
+-    
++
+     gtk_widget_set_sensitive (mi, FALSE);
+-    
+-    if ( power->priv->can_suspend && power->priv->auth_hibernate)
++
++    if ( power->priv->can_suspend && power->priv->auth_suspend)
+     {
+       gtk_widget_set_sensitive (mi, TRUE);
+       g_signal_connect_swapped (mi, "activate",
+                                 G_CALLBACK (xfpm_power_suspend_cb), power);
+     }
+-    
++
+     gtk_widget_show (mi);
+     gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+ /*
+@@ -518,14 +518,14 @@ xfpm_power_show_tray_menu (XfpmPower *power,
+     gtk_widget_set_tooltip_text (mi, _("Disable or enable monitor power control, "\
+                                        "for example you could disable the screen power "\
+                                      "control to avoid screen blanking when watching a movie."));
+-    
++
+     g_signal_connect (G_OBJECT (mi), "activate",
+                     G_CALLBACK (xfpm_tray_icon_inhibit_active_cb), tray);
+     gtk_widget_set_sensitive (mi, TRUE);
+     gtk_widget_show(mi);
+     gtk_menu_shell_append(GTK_MENU_SHELL(menu),mi);
+ */
+-    
++
+     mi = gtk_separator_menu_item_new ();
+     gtk_widget_show (mi);
+     gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+@@ -536,14 +536,14 @@ xfpm_power_show_tray_menu (XfpmPower *power,
+     gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), img);
+     gtk_widget_set_sensitive (mi,TRUE);
+-    
++
+     g_signal_connect_swapped (mi, "activate",
+                             G_CALLBACK (xfpm_power_power_info_cb), icon);
+-                   
++
+     gtk_widget_show (mi);
+     gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+-    
+-    /** 
++
++    /**
+      * Power Mode
+      **/
+     /* TRANSLATOR: Mode here is the power profile (presentation, power save, normal) */
+@@ -552,55 +552,55 @@ xfpm_power_show_tray_menu (XfpmPower *power,
+     gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), img);
+     gtk_widget_set_sensitive (mi,TRUE);
+     gtk_widget_show (mi);
+-    
++
+     subm = gtk_menu_new ();
+     gtk_menu_item_set_submenu (GTK_MENU_ITEM (mi), subm);
+     gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+-    
++
+     /* Normal*/
+     mi = gtk_check_menu_item_new_with_label (_("Normal"));
+     gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (mi), power->priv->power_mode == XFPM_POWER_MODE_NORMAL);
+     gtk_widget_set_sensitive (mi,TRUE);
+-    
++
+     g_signal_connect_swapped (mi, "activate",
+                             G_CALLBACK (xfpm_power_normal_mode_cb), power);
+     gtk_widget_show (mi);
+     gtk_menu_shell_append (GTK_MENU_SHELL (subm), mi);
+-    
++
+     /* Normal*/
+     mi = gtk_check_menu_item_new_with_label (_("Presentation"));
+     gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (mi), power->priv->power_mode == XFPM_POWER_MODE_PRESENTATION);
+     gtk_widget_set_sensitive (mi, TRUE);
+-    
++
+     g_signal_connect_swapped (mi, "activate",
+                             G_CALLBACK (xfpm_power_presentation_mode_cb), power);
+     gtk_widget_show (mi);
+     gtk_menu_shell_append (GTK_MENU_SHELL (subm), mi);
+-    
+-    
++
++
+     mi = gtk_separator_menu_item_new ();
+     gtk_widget_show (mi);
+     gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+-                   
++
+     mi = gtk_image_menu_item_new_from_stock (GTK_STOCK_HELP, NULL);
+     gtk_widget_set_sensitive (mi, TRUE);
+     gtk_widget_show (mi);
+     g_signal_connect (mi, "activate", G_CALLBACK (xfpm_help), NULL);
+-      
++
+     gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+-    
++
+     mi = gtk_image_menu_item_new_from_stock (GTK_STOCK_ABOUT, NULL);
+     gtk_widget_set_sensitive (mi, TRUE);
+     gtk_widget_show (mi);
+     g_signal_connect (mi, "activate", G_CALLBACK (xfpm_about), _("Power Manager"));
+-    
++
+     gtk_menu_shell_append (GTK_MENU_SHELL(menu), mi);
+-    
++
+     mi = gtk_image_menu_item_new_from_stock (GTK_STOCK_PREFERENCES, NULL);
+     gtk_widget_set_sensitive (mi, TRUE);
+     gtk_widget_show (mi);
+     g_signal_connect (mi, "activate",G_CALLBACK (xfpm_preferences), NULL);
+-    
++
+     gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+     mi = gtk_separator_menu_item_new ();
+@@ -618,20 +618,20 @@ xfpm_power_show_tray_menu (XfpmPower *power,
+     // Popup the menu
+     gtk_menu_popup(GTK_MENU(menu), NULL, NULL,
+-                 gtk_status_icon_position_menu, 
++                 gtk_status_icon_position_menu,
+                  icon, button, activate_time);
+-    
++
+ }
+-static void 
+-xfpm_power_show_tray_menu_battery (GtkStatusIcon *icon, guint button, 
++static void
++xfpm_power_show_tray_menu_battery (GtkStatusIcon *icon, guint button,
+                                guint activate_time, XfpmPower *power)
+ {
+     xfpm_power_show_tray_menu (power, icon, button, activate_time, TRUE);
+ }
+-static void 
+-xfpm_power_show_tray_menu_adaptor (GtkStatusIcon *icon, guint button, 
++static void
++xfpm_power_show_tray_menu_adaptor (GtkStatusIcon *icon, guint button,
+                                guint activate_time, XfpmPower *power)
+ {
+     xfpm_power_show_tray_menu (power, icon, button, activate_time, FALSE);
+@@ -643,26 +643,26 @@ xfpm_power_get_current_charge_state (XfpmPower *power)
+     GList *list;
+     guint len, i;
+     XfpmBatteryCharge max_charge_status = XFPM_BATTERY_CHARGE_UNKNOWN;
+-    
++
+     list = g_hash_table_get_values (power->priv->hash);
+     len = g_list_length (list);
+-    
++
+     for ( i = 0; i < len; i++)
+     {
+       XfpmBatteryCharge battery_charge;
+       XfpmDeviceType type;
+-      
++
+       g_object_get (G_OBJECT (g_list_nth_data (list, i)),
+                     "charge-status", &battery_charge,
+                     "device-type", &type,
+                     NULL);
+-      if ( type != XFPM_DEVICE_TYPE_BATTERY && 
++      if ( type != XFPM_DEVICE_TYPE_BATTERY &&
+            type != XFPM_DEVICE_TYPE_UPS )
+           continue;
+-      
++
+       max_charge_status = MAX (max_charge_status, battery_charge);
+     }
+-    
++
+     return max_charge_status;
+ }
+@@ -679,11 +679,11 @@ static void
+ xfpm_power_add_actions_to_notification (XfpmPower *power, NotifyNotification *n)
+ {
+     gboolean can_shutdown;
+-    
++
+     g_object_get (G_OBJECT (power->priv->console),
+                 "can-shutdown", &can_shutdown,
+                 NULL);
+-                
++
+     if (  power->priv->can_hibernate && power->priv->auth_hibernate )
+     {
+         xfpm_notify_add_action_to_notification(
+@@ -692,9 +692,9 @@ xfpm_power_add_actions_to_notification (XfpmPower *power, NotifyNotification *n)
+                                "Hibernate",
+                                _("Hibernate the system"),
+                                (NotifyActionCallback)xfpm_power_notify_action_callback,
+-                               power);      
++                               power);
+     }
+-    
++
+     if (  power->priv->can_suspend && power->priv->auth_suspend )
+     {
+         xfpm_notify_add_action_to_notification(
+@@ -703,9 +703,9 @@ xfpm_power_add_actions_to_notification (XfpmPower *power, NotifyNotification *n)
+                                "Suspend",
+                                _("Suspend the system"),
+                                (NotifyActionCallback)xfpm_power_notify_action_callback,
+-                               power);      
++                               power);
+     }
+-    
++
+     if (can_shutdown )
+       xfpm_notify_add_action_to_notification(
+                                  power->priv->notify,
+@@ -713,7 +713,7 @@ xfpm_power_add_actions_to_notification (XfpmPower *power, NotifyNotification *n)
+                                  "Shutdown",
+                                  _("Shutdown the system"),
+                                  (NotifyActionCallback)xfpm_power_notify_action_callback,
+-                                 power);    
++                                 power);
+ }
+ static void
+@@ -721,19 +721,19 @@ xfpm_power_show_critical_action_notification (XfpmPower *power, XfpmBattery *bat
+ {
+     const gchar *message;
+     NotifyNotification *n;
+-    
++
+     message = _("System is running on low power. "\
+                "Save your work to avoid losing data");
+-            
+-    n = 
+-      xfpm_notify_new_notification (power->priv->notify, 
+-                                    _("Power Manager"), 
+-                                    message, 
++
++    n =
++      xfpm_notify_new_notification (power->priv->notify,
++                                    _("Power Manager"),
++                                    message,
+                                     gtk_status_icon_get_icon_name (GTK_STATUS_ICON (battery)),
+                                     20000,
+                                     XFPM_NOTIFY_CRITICAL,
+                                     GTK_STATUS_ICON (battery));
+-    
++
+     xfpm_power_add_actions_to_notification (power, n);
+     xfpm_notify_critical (power->priv->notify, n);
+@@ -755,24 +755,24 @@ xfpm_power_show_critical_action_gtk (XfpmPower *power)
+     GtkWidget *cancel;
+     const gchar *message;
+     gboolean can_shutdown;
+-    
++
+     g_object_get (G_OBJECT (power->priv->console),
+                 "can-shutdown", &can_shutdown,
+                 NULL);
+-    
++
+     message = _("System is running on low power. "\
+                "Save your work to avoid losing data");
+-    
++
+     dialog = gtk_dialog_new_with_buttons (_("Power Manager"), NULL, GTK_DIALOG_MODAL,
+                                           NULL);
+-    
++
+     gtk_dialog_set_default_response (GTK_DIALOG (dialog),
+                                      GTK_RESPONSE_CANCEL);
+-    
++
+     content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
+     gtk_box_pack_start_defaults (GTK_BOX (content_area), gtk_label_new (message));
+-    
++
+     if ( power->priv->can_hibernate && power->priv->auth_hibernate )
+     {
+       GtkWidget *hibernate;
+@@ -780,50 +780,50 @@ xfpm_power_show_critical_action_gtk (XfpmPower *power)
+       img = gtk_image_new_from_icon_name (XFPM_HIBERNATE_ICON, GTK_ICON_SIZE_BUTTON);
+       gtk_button_set_image (GTK_BUTTON (hibernate), img);
+       gtk_dialog_add_action_widget (GTK_DIALOG (dialog), hibernate, GTK_RESPONSE_NONE);
+-      
++
+       g_signal_connect_swapped (hibernate, "clicked",
+                                 G_CALLBACK (xfpm_power_hibernate_clicked), power);
+     }
+-    
++
+     if ( power->priv->can_suspend && power->priv->auth_suspend )
+     {
+       GtkWidget *suspend;
+-      
++
+       suspend = gtk_button_new_with_label (_("Suspend"));
+       img = gtk_image_new_from_icon_name (XFPM_SUSPEND_ICON, GTK_ICON_SIZE_BUTTON);
+       gtk_button_set_image (GTK_BUTTON (suspend), img);
+       gtk_dialog_add_action_widget (GTK_DIALOG (dialog), suspend, GTK_RESPONSE_NONE);
+-      
++
+       g_signal_connect_swapped (suspend, "clicked",
+                                 G_CALLBACK (xfpm_power_suspend_clicked), power);
+     }
+-    
++
+     if ( can_shutdown )
+     {
+       GtkWidget *shutdown;
+-      
++
+       shutdown = gtk_button_new_with_label (_("Shutdown"));
+       img = gtk_image_new_from_icon_name (XFPM_SUSPEND_ICON, GTK_ICON_SIZE_BUTTON);
+       gtk_button_set_image (GTK_BUTTON (shutdown), img);
+       gtk_dialog_add_action_widget (GTK_DIALOG (dialog), shutdown, GTK_RESPONSE_NONE);
+-      
++
+       g_signal_connect_swapped (shutdown, "clicked",
+                                 G_CALLBACK (xfpm_power_shutdown_clicked), power);
+     }
+-    
++
+     cancel = gtk_button_new_from_stock (GTK_STOCK_CANCEL);
+     gtk_dialog_add_action_widget (GTK_DIALOG (dialog), cancel, GTK_RESPONSE_NONE);
+-    
++
+     g_signal_connect_swapped (cancel, "clicked",
+                             G_CALLBACK (xfpm_power_close_critical_dialog), power);
+-    
++
+     g_signal_connect_swapped (dialog, "destroy",
+                             G_CALLBACK (xfpm_power_close_critical_dialog), power);
+     if ( power->priv->dialog )
+     {
+       gtk_widget_destroy (power->priv->dialog);
+       power->priv->dialog = NULL;
+-      
++
+     }
+     power->priv->dialog = dialog;
+     gtk_widget_show_all (dialog);
+@@ -833,11 +833,11 @@ static void
+ xfpm_power_show_critical_action (XfpmPower *power, XfpmBattery *battery)
+ {
+     gboolean supports_actions;
+-    
++
+     g_object_get (G_OBJECT (power->priv->notify),
+                 "actions", &supports_actions,
+                 NULL);
+-                
++
+     if ( supports_actions )
+       xfpm_power_show_critical_action_notification (power, battery);
+     else
+@@ -861,7 +861,7 @@ static void
+ xfpm_power_system_on_critical_power (XfpmPower *power, XfpmBattery *battery)
+ {
+     XfpmShutdownRequest critical_action;
+-    
++
+     g_object_get (G_OBJECT (power->priv->conf),
+                 CRITICAL_BATT_ACTION_CFG, &critical_action,
+                 NULL);
+@@ -893,53 +893,53 @@ xfpm_power_battery_charge_changed_cb (XfpmBattery *battery, XfpmPower *power)
+     gboolean notify;
+     XfpmBatteryCharge battery_charge;
+     XfpmBatteryCharge current_charge;
+-    
++
+     battery_charge = xfpm_battery_get_charge (battery);
+     current_charge = xfpm_power_get_current_charge_state (power);
+-    
++
+     XFPM_DEBUG_ENUM (current_charge, XFPM_TYPE_BATTERY_CHARGE, "Current system charge status");
+-    
++
+     if (current_charge == power->priv->overall_state)
+       return;
+-    
++
+     if (current_charge >= XFPM_BATTERY_CHARGE_LOW)
+       power->priv->critical_action_done = FALSE;
+-    
++
+     power->priv->overall_state = current_charge;
+-    
++
+     if ( current_charge == XFPM_BATTERY_CHARGE_CRITICAL && power->priv->on_battery)
+     {
+       xfpm_power_system_on_critical_power (power, battery);
+-      
++
+       power->priv->on_low_battery = TRUE;
+       g_signal_emit (G_OBJECT (power), signals [LOW_BATTERY_CHANGED], 0, power->priv->on_low_battery);
+       return;
+     }
+-    
++
+     if ( power->priv->on_low_battery )
+     {
+       power->priv->on_low_battery = FALSE;
+       g_signal_emit (G_OBJECT (power), signals [LOW_BATTERY_CHANGED], 0, power->priv->on_low_battery);
+     }
+-    
++
+     g_object_get (G_OBJECT (power->priv->conf),
+                 GENERAL_NOTIFICATION_CFG, &notify,
+                 NULL);
+-    
++
+     if ( power->priv->on_battery )
+     {
+       if ( current_charge == XFPM_BATTERY_CHARGE_LOW )
+       {
+           if ( notify )
+-              xfpm_notify_show_notification (power->priv->notify, 
+-                                             _("Power Manager"), 
+-                                             _("System is running on low power"), 
++              xfpm_notify_show_notification (power->priv->notify,
++                                             _("Power Manager"),
++                                             _("System is running on low power"),
+                                              gtk_status_icon_get_icon_name (GTK_STATUS_ICON (battery)),
+                                              10000,
+                                              FALSE,
+                                              XFPM_NOTIFY_NORMAL,
+                                              GTK_STATUS_ICON (battery));
+-          
++
+       }
+       else if ( battery_charge == XFPM_BATTERY_CHARGE_LOW )
+       {
+@@ -947,17 +947,17 @@ xfpm_power_battery_charge_changed_cb (XfpmBattery *battery, XfpmPower *power)
+           {
+               gchar *msg;
+               gchar *time_str;
+-              
++
+               const gchar *battery_name = xfpm_battery_get_battery_name (battery);
+-              
++
+               time_str = xfpm_battery_get_time_left (battery);
+-              
++
+               msg = g_strdup_printf (_("Your %s charge level is low\nEstimated time left %s"), battery_name, time_str);
+-              
+-              
+-              xfpm_notify_show_notification (power->priv->notify, 
+-                                             _("Power Manager"), 
+-                                             msg, 
++
++
++              xfpm_notify_show_notification (power->priv->notify,
++                                             _("Power Manager"),
++                                             msg,
+                                              gtk_status_icon_get_icon_name (GTK_STATUS_ICON (battery)),
+                                              10000,
+                                              FALSE,
+@@ -968,7 +968,7 @@ xfpm_power_battery_charge_changed_cb (XfpmBattery *battery, XfpmPower *power)
+           }
+       }
+     }
+-    
++
+     /*Current charge is okay now, then close the dialog*/
+     if ( power->priv->dialog )
+     {
+@@ -983,25 +983,25 @@ xfpm_power_add_device (XfpmPower *power, const gchar *object_path)
+     DBusGProxy *proxy_prop;
+     guint device_type = XFPM_DEVICE_TYPE_UNKNOWN;
+     GValue value;
+-    
+-    proxy_prop = dbus_g_proxy_new_for_name (power->priv->bus, 
++
++    proxy_prop = dbus_g_proxy_new_for_name (power->priv->bus,
+                                           UPOWER_NAME,
+                                           object_path,
+                                           DBUS_INTERFACE_PROPERTIES);
+-                                     
++
+     if ( !proxy_prop )
+     {
+       g_warning ("Unable to create proxy for : %s", object_path);
+       return;
+     }
+-    
++
+     value = xfpm_power_get_interface_property (proxy_prop, UPOWER_IFACE_DEVICE, "Type");
+-    
++
+     device_type = g_value_get_uint (&value);
+-    
++
+     XFPM_DEBUG_ENUM (device_type, XFPM_TYPE_DEVICE_TYPE, " device added");
+-    
+-    if ( device_type == XFPM_DEVICE_TYPE_BATTERY || 
++
++    if ( device_type == XFPM_DEVICE_TYPE_BATTERY ||
+        device_type == XFPM_DEVICE_TYPE_UPS     ||
+        device_type == XFPM_DEVICE_TYPE_MOUSE   ||
+        device_type == XFPM_DEVICE_TYPE_KBD     ||
+@@ -1009,7 +1009,7 @@ xfpm_power_add_device (XfpmPower *power, const gchar *object_path)
+     {
+       GtkStatusIcon *battery;
+       DBusGProxy *proxy;
+-      XFPM_DEBUG_ENUM (device_type, XFPM_TYPE_DEVICE_TYPE, 
++      XFPM_DEBUG_ENUM (device_type, XFPM_TYPE_DEVICE_TYPE,
+                       "Battery device detected at : %s", object_path);
+       proxy = dbus_g_proxy_new_for_name (power->priv->bus,
+                                          UPOWER_NAME,
+@@ -1017,19 +1017,19 @@ xfpm_power_add_device (XfpmPower *power, const gchar *object_path)
+                                          UPOWER_IFACE_DEVICE);
+       battery = xfpm_battery_new ();
+       gtk_status_icon_set_visible (battery, FALSE);
+-      xfpm_battery_monitor_device (XFPM_BATTERY (battery), 
+-                                   proxy, 
+-                                   proxy_prop, 
++      xfpm_battery_monitor_device (XFPM_BATTERY (battery),
++                                   proxy,
++                                   proxy_prop,
+                                    device_type);
+       g_hash_table_insert (power->priv->hash, g_strdup (object_path), battery);
+-      
++
+       g_signal_connect (battery, "popup-menu",
+                         G_CALLBACK (xfpm_power_show_tray_menu_battery), power);
+-      
++
+       g_signal_connect (battery, "battery-charge-changed",
+                         G_CALLBACK (xfpm_power_battery_charge_changed_cb), power);
+-                        
++
+       xfpm_power_refresh_adaptor_visible (power);
+     }
+     else if ( device_type != XFPM_DEVICE_TYPE_LINE_POWER )
+@@ -1044,9 +1044,9 @@ xfpm_power_get_power_devices (XfpmPower *power)
+ {
+     GPtrArray *array = NULL;
+     guint i;
+-    
++
+     array = xfpm_power_enumerate_devices (power->priv->proxy);
+-    
++
+     if ( array )
+     {
+       for ( i = 0; i < array->len; i++)
+@@ -1057,7 +1057,7 @@ xfpm_power_get_power_devices (XfpmPower *power)
+       }
+       g_ptr_array_free (array, TRUE);
+     }
+-    
++
+ }
+ static void
+@@ -1111,7 +1111,7 @@ static void
+ xfpm_power_hide_adapter_icon (XfpmPower *power)
+ {
+      XFPM_DEBUG ("Hide adaptor icon");
+-     
++
+     if ( power->priv->adapter_icon )
+     {
+         g_object_unref (power->priv->adapter_icon);
+@@ -1123,15 +1123,15 @@ static void
+ xfpm_power_show_adapter_icon (XfpmPower *power)
+ {
+     g_return_if_fail (power->priv->adapter_icon == NULL);
+-    
++
+     power->priv->adapter_icon = gtk_status_icon_new ();
+-    
++
+     XFPM_DEBUG ("Showing adaptor icon");
+-    
++
+     gtk_status_icon_set_from_icon_name (power->priv->adapter_icon, XFPM_AC_ADAPTER_ICON);
+-    
++
+     gtk_status_icon_set_visible (power->priv->adapter_icon, TRUE);
+-    
++
+     g_signal_connect (power->priv->adapter_icon, "popup-menu",
+                     G_CALLBACK (xfpm_power_show_tray_menu_adaptor), power);
+ }
+@@ -1140,26 +1140,26 @@ static void
+ xfpm_power_refresh_adaptor_visible (XfpmPower *power)
+ {
+     XfpmShowIcon show_icon;
+-    
++
+     g_object_get (G_OBJECT (power->priv->conf),
+                 SHOW_TRAY_ICON_CFG, &show_icon,
+                 NULL);
+-                
++
+     XFPM_DEBUG_ENUM (show_icon, XFPM_TYPE_SHOW_ICON, "Tray icon configuration: ");
+-    
++
+     if ( show_icon == SHOW_ICON_ALWAYS )
+     {
+       if ( g_hash_table_size (power->priv->hash) == 0 )
+       {
+           xfpm_power_show_adapter_icon (power);
+ #if GTK_CHECK_VERSION (2, 16, 0)
+-          gtk_status_icon_set_tooltip_text (power->priv->adapter_icon, 
+-                                            power->priv->on_battery ? 
++          gtk_status_icon_set_tooltip_text (power->priv->adapter_icon,
++                                            power->priv->on_battery ?
+                                             _("Adaptor is offline") :
+                                             _("Adaptor is online") );
+ #else
+-          gtk_status_icon_set_tooltip (power->priv->adapter_icon, 
+-                                       power->priv->on_battery ? 
++          gtk_status_icon_set_tooltip (power->priv->adapter_icon,
++                                       power->priv->on_battery ?
+                                        _("Adaptor is offline") :
+                                        _("Adaptor is online") );
+ #endif
+@@ -1184,7 +1184,7 @@ xfpm_power_class_init (XfpmPowerClass *klass)
+     object_class->get_property = xfpm_power_get_property;
+-    signals [ON_BATTERY_CHANGED] = 
++    signals [ON_BATTERY_CHANGED] =
+         g_signal_new ("on-battery-changed",
+                       XFPM_TYPE_POWER,
+                       G_SIGNAL_RUN_LAST,
+@@ -1193,7 +1193,7 @@ xfpm_power_class_init (XfpmPowerClass *klass)
+                       g_cclosure_marshal_VOID__BOOLEAN,
+                       G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+-    signals [LOW_BATTERY_CHANGED] = 
++    signals [LOW_BATTERY_CHANGED] =
+         g_signal_new ("low-battery-changed",
+                       XFPM_TYPE_POWER,
+                       G_SIGNAL_RUN_LAST,
+@@ -1202,7 +1202,7 @@ xfpm_power_class_init (XfpmPowerClass *klass)
+                       g_cclosure_marshal_VOID__BOOLEAN,
+                       G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+-    signals [LID_CHANGED] = 
++    signals [LID_CHANGED] =
+         g_signal_new ("lid-changed",
+                       XFPM_TYPE_POWER,
+                       G_SIGNAL_RUN_LAST,
+@@ -1211,7 +1211,7 @@ xfpm_power_class_init (XfpmPowerClass *klass)
+                       g_cclosure_marshal_VOID__BOOLEAN,
+                       G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+-    signals [WAKING_UP] = 
++    signals [WAKING_UP] =
+         g_signal_new ("waking-up",
+                       XFPM_TYPE_POWER,
+                       G_SIGNAL_RUN_LAST,
+@@ -1220,7 +1220,7 @@ xfpm_power_class_init (XfpmPowerClass *klass)
+                       g_cclosure_marshal_VOID__VOID,
+                       G_TYPE_NONE, 0, G_TYPE_NONE);
+-    signals [SLEEPING] = 
++    signals [SLEEPING] =
+         g_signal_new ("sleeping",
+                       XFPM_TYPE_POWER,
+                       G_SIGNAL_RUN_LAST,
+@@ -1229,7 +1229,7 @@ xfpm_power_class_init (XfpmPowerClass *klass)
+                       g_cclosure_marshal_VOID__VOID,
+                       G_TYPE_NONE, 0, G_TYPE_NONE);
+-    signals [ASK_SHUTDOWN] = 
++    signals [ASK_SHUTDOWN] =
+         g_signal_new ("ask-shutdown",
+                       XFPM_TYPE_POWER,
+                       G_SIGNAL_RUN_LAST,
+@@ -1238,7 +1238,7 @@ xfpm_power_class_init (XfpmPowerClass *klass)
+                       g_cclosure_marshal_VOID__VOID,
+                       G_TYPE_NONE, 0, G_TYPE_NONE);
+-    signals [SHUTDOWN] = 
++    signals [SHUTDOWN] =
+         g_signal_new ("shutdown",
+                       XFPM_TYPE_POWER,
+                       G_SIGNAL_RUN_LAST,
+@@ -1297,7 +1297,7 @@ xfpm_power_class_init (XfpmPowerClass *klass)
+                                                           G_PARAM_READABLE));
+     g_type_class_add_private (klass, sizeof (XfpmPowerPrivate));
+-    
++
+     xfpm_power_dbus_class_init (klass);
+ }
+@@ -1305,9 +1305,9 @@ static void
+ xfpm_power_init (XfpmPower *power)
+ {
+     GError *error = NULL;
+-    
++
+     power->priv = XFPM_POWER_GET_PRIVATE (power);
+-    
++
+     power->priv->hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
+     power->priv->lid_is_present  = FALSE;
+     power->priv->lid_is_closed   = FALSE;
+@@ -1323,26 +1323,26 @@ xfpm_power_init (XfpmPower *power)
+     power->priv->overall_state   = XFPM_BATTERY_CHARGE_OK;
+     power->priv->critical_action_done = FALSE;
+     power->priv->power_mode      = XFPM_POWER_MODE_NORMAL;
+-    
++
+     power->priv->inhibit = xfpm_inhibit_new ();
+     power->priv->notify  = xfpm_notify_new ();
+     power->priv->conf    = xfpm_xfconf_new ();
+     power->priv->console = xfpm_console_kit_new ();
+-    
++
+     g_signal_connect_swapped (power->priv->conf, "notify::" SHOW_TRAY_ICON_CFG,
+                             G_CALLBACK (xfpm_power_refresh_adaptor_visible), power);
+-    
++
+ #ifdef ENABLE_POLKIT
+     power->priv->polkit  = xfpm_polkit_get ();
+     g_signal_connect_swapped (power->priv->polkit, "auth-changed",
+                             G_CALLBACK (xfpm_power_polkit_auth_changed_cb), power);
+ #endif
+-    
++
+     g_signal_connect (power->priv->inhibit, "has-inhibit-changed",
+                     G_CALLBACK (xfpm_power_inhibit_changed_cb), power);
+-    
++
+     power->priv->bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
+-    
++
+     if ( error )
+     {
+       g_critical ("Unable to connect to the system bus : %s", error->message);
+@@ -1354,18 +1354,18 @@ xfpm_power_init (XfpmPower *power)
+                                                   UPOWER_NAME,
+                                                   UPOWER_PATH,
+                                                   UPOWER_IFACE);
+-    
+-    
++
++
+     power->priv->proxy_prop = dbus_g_proxy_new_for_name (power->priv->bus,
+                                                        UPOWER_NAME,
+                                                        UPOWER_PATH,
+                                                        DBUS_INTERFACE_PROPERTIES);
+-    if (power->priv->proxy_prop == NULL) 
++    if (power->priv->proxy_prop == NULL)
+     {
+       g_critical ("Unable to create proxy for %s", UPOWER_NAME);
+       goto out;
+     }
+-    
++
+     xfpm_power_get_power_devices (power);
+     xfpm_power_get_properties (power);
+ #ifdef ENABLE_POLKIT
+@@ -1376,18 +1376,18 @@ xfpm_power_init (XfpmPower *power)
+     dbus_g_proxy_add_signal (power->priv->proxy, "DeviceAdded", G_TYPE_STRING, G_TYPE_INVALID);
+     dbus_g_proxy_add_signal (power->priv->proxy, "DeviceRemoved", G_TYPE_STRING, G_TYPE_INVALID);
+     dbus_g_proxy_add_signal (power->priv->proxy, "DeviceChanged", G_TYPE_STRING, G_TYPE_INVALID);
+-    
++
+     dbus_g_proxy_connect_signal (power->priv->proxy, "Changed",
+                                G_CALLBACK (xfpm_power_changed_cb), power, NULL);
+     dbus_g_proxy_connect_signal (power->priv->proxy, "DeviceRemoved",
+                                G_CALLBACK (xfpm_power_device_removed_cb), power, NULL);
+     dbus_g_proxy_connect_signal (power->priv->proxy, "DeviceAdded",
+                                G_CALLBACK (xfpm_power_device_added_cb), power, NULL);
+-   
++
+     dbus_g_proxy_connect_signal (power->priv->proxy, "DeviceChanged",
+                                G_CALLBACK (xfpm_power_device_changed_cb), power, NULL);
+-    
++
+ out:
+     xfpm_power_refresh_adaptor_visible (power);
+@@ -1439,18 +1439,18 @@ xfpm_power_finalize (GObject *object)
+     XfpmPower *power;
+     power = XFPM_POWER (object);
+-    
++
+     g_free (power->priv->daemon_version);
+-    
++
+     g_object_unref (power->priv->inhibit);
+     g_object_unref (power->priv->notify);
+     g_object_unref (power->priv->conf);
+     g_object_unref (power->priv->console);
+-    
++
+     xfpm_power_hide_adapter_icon (power);
+-    
++
+     dbus_g_connection_unref (power->priv->bus);
+-    
++
+     if ( power->priv->proxy )
+     {
+       dbus_g_proxy_disconnect_signal (power->priv->proxy, "Changed",
+@@ -1463,7 +1463,7 @@ xfpm_power_finalize (GObject *object)
+                                       G_CALLBACK (xfpm_power_device_changed_cb), power);
+       g_object_unref (power->priv->proxy);
+     }
+-    
++
+     if ( power->priv->proxy_prop )
+       g_object_unref (power->priv->proxy_prop);
+@@ -1480,7 +1480,7 @@ XfpmPower *
+ xfpm_power_get (void)
+ {
+     static gpointer xfpm_power_object = NULL;
+-    
++
+     if ( G_LIKELY (xfpm_power_object != NULL ) )
+     {
+       g_object_ref (xfpm_power_object);
+@@ -1490,7 +1490,7 @@ xfpm_power_get (void)
+       xfpm_power_object = g_object_new (XFPM_TYPE_POWER, NULL);
+       g_object_add_weak_pointer (xfpm_power_object, &xfpm_power_object);
+     }
+-    
++
+     return XFPM_POWER (xfpm_power_object);
+ }
+@@ -1509,12 +1509,12 @@ gboolean xfpm_power_has_battery (XfpmPower *power)
+     GtkStatusIcon *battery = NULL;
+     guint i, len;
+     GList *list;
+-    
++
+     gboolean ret = FALSE;
+-    
++
+     list = g_hash_table_get_values (power->priv->hash);
+     len = g_list_length (list);
+-    
++
+     for ( i = 0; i < len; i++)
+     {
+       XfpmDeviceType type;
+@@ -1527,28 +1527,28 @@ gboolean xfpm_power_has_battery (XfpmPower *power)
+           break;
+       }
+     }
+-    
++
+     return ret;
+ }
+ XfpmPowerMode  xfpm_power_get_mode (XfpmPower *power)
+ {
+     g_return_val_if_fail (XFPM_IS_POWER (power), XFPM_POWER_MODE_NORMAL);
+-    
++
+     return power->priv->power_mode;
+ }
+ /*
+- * 
++ *
+  * DBus server implementation for org.freedesktop.PowerManagement
+- * 
++ *
+  */
+ static gboolean xfpm_power_dbus_shutdown (XfpmPower *power,
+                                       GError **error);
+ static gboolean xfpm_power_dbus_reboot   (XfpmPower *power,
+                                       GError **error);
+-                                         
++
+ static gboolean xfpm_power_dbus_hibernate (XfpmPower * power,
+                                        GError **error);
+@@ -1556,11 +1556,11 @@ static gboolean xfpm_power_dbus_suspend (XfpmPower * power,
+                                      GError ** error);
+ static gboolean xfpm_power_dbus_can_reboot (XfpmPower * power,
+-                                        gboolean * OUT_can_reboot, 
++                                        gboolean * OUT_can_reboot,
+                                         GError ** error);
+ static gboolean xfpm_power_dbus_can_shutdown (XfpmPower * power,
+-                                          gboolean * OUT_can_reboot, 
++                                          gboolean * OUT_can_reboot,
+                                           GError ** error);
+ static gboolean xfpm_power_dbus_can_hibernate (XfpmPower * power,
+@@ -1606,20 +1606,20 @@ static gboolean xfpm_power_dbus_shutdown (XfpmPower *power,
+                                       GError **error)
+ {
+     gboolean can_reboot;
+-    
++
+     g_object_get (G_OBJECT (power->priv->console),
+                 "can-shutdown", &can_reboot,
+                 NULL);
+-    
++
+     if ( !can_reboot)
+     {
+       g_set_error (error, XFPM_ERROR, XFPM_ERROR_PERMISSION_DENIED,
+                     _("Permission denied"));
+         return FALSE;
+     }
+-    
++
+     xfpm_console_kit_shutdown (power->priv->console, error);
+-    
++
+     return TRUE;
+ }
+@@ -1627,23 +1627,23 @@ static gboolean xfpm_power_dbus_reboot   (XfpmPower *power,
+                                       GError **error)
+ {
+     gboolean can_reboot;
+-    
++
+     g_object_get (G_OBJECT (power->priv->console),
+                 "can-restart", &can_reboot,
+                 NULL);
+-    
++
+     if ( !can_reboot)
+     {
+       g_set_error (error, XFPM_ERROR, XFPM_ERROR_PERMISSION_DENIED,
+                     _("Permission denied"));
+         return FALSE;
+     }
+-    
++
+     xfpm_console_kit_reboot (power->priv->console, error);
+-    
++
+     return TRUE;
+ }
+-                                         
++
+ static gboolean xfpm_power_dbus_hibernate (XfpmPower * power,
+                                        GError **error)
+ {
+@@ -1652,18 +1652,18 @@ static gboolean xfpm_power_dbus_hibernate (XfpmPower * power,
+       g_set_error (error, XFPM_ERROR, XFPM_ERROR_PERMISSION_DENIED,
+                     _("Permission denied"));
+         return FALSE;
+-      
++
+     }
+-    
++
+     if (!power->priv->can_hibernate )
+     {
+       g_set_error (error, XFPM_ERROR, XFPM_ERROR_NO_HARDWARE_SUPPORT,
+                     _("Suspend not supported"));
+         return FALSE;
+     }
+-    
++
+     xfpm_power_sleep (power, "Hibernate", FALSE);
+-    
++
+     return TRUE;
+ }
+@@ -1675,34 +1675,34 @@ static gboolean xfpm_power_dbus_suspend (XfpmPower * power,
+       g_set_error (error, XFPM_ERROR, XFPM_ERROR_PERMISSION_DENIED,
+                     _("Permission denied"));
+         return FALSE;
+-      
++
+     }
+-    
++
+     if (!power->priv->can_suspend )
+     {
+       g_set_error (error, XFPM_ERROR, XFPM_ERROR_NO_HARDWARE_SUPPORT,
+                     _("Suspend not supported"));
+         return FALSE;
+     }
+-    
++
+     xfpm_power_sleep (power, "Suspend", FALSE);
+-    
++
+     return TRUE;
+ }
+ static gboolean xfpm_power_dbus_can_reboot (XfpmPower * power,
+-                                        gboolean * OUT_can_reboot, 
++                                        gboolean * OUT_can_reboot,
+                                         GError ** error)
+ {
+     g_object_get (G_OBJECT (power->priv->console),
+                 "can-reboot", OUT_can_reboot,
+                 NULL);
+-                
++
+     return TRUE;
+ }
+ static gboolean xfpm_power_dbus_can_shutdown (XfpmPower * power,
+-                                          gboolean * OUT_can_shutdown, 
++                                          gboolean * OUT_can_shutdown,
+                                           GError ** error)
+ {
+     g_object_get (G_OBJECT (power->priv->console),
+@@ -1724,7 +1724,7 @@ static gboolean xfpm_power_dbus_can_suspend (XfpmPower * power,
+                                          GError ** error)
+ {
+     *OUT_can_suspend = power->priv->can_suspend;
+-    
++
+     return TRUE;
+ }
+@@ -1741,7 +1741,7 @@ static gboolean xfpm_power_dbus_get_on_battery (XfpmPower * power,
+                                             GError ** error)
+ {
+     *OUT_on_battery = power->priv->on_battery;
+-    
++
+     return TRUE;
+ }
+@@ -1750,6 +1750,6 @@ static gboolean xfpm_power_dbus_get_low_battery (XfpmPower * power,
+                                              GError ** error)
+ {
+     *OUT_low_battery = power->priv->on_low_battery;
+-    
++
+     return TRUE;
+ }
+-- 
+1.9.3
+
diff --git a/0145-Add-shutdown-reboot-functionality-for-systemd-Bug-10.patch b/0145-Add-shutdown-reboot-functionality-for-systemd-Bug-10.patch
new file mode 100644 (file)
index 0000000..efc0266
--- /dev/null
@@ -0,0 +1,639 @@
+From 12f16e0e6a24ee009bc534e00c476939824cd4aa Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Mon, 13 Jan 2014 13:20:15 +0300
+Subject: [PATCH 145/219] Add shutdown/reboot functionality for systemd (Bug
+ 10167)
+
+based on the xfce4-session implementation [1]
+[1] http://git.xfce.org/xfce/xfce4-session/commit/?id=ae28aef315a7a6b90f1649ce6d1f30b842791cbf
+
+Guido Berhoerster assisted by allowing polkit support without
+needing systemd.
+
+Eric Koegel changed the xfpm-systemd.c code to use xfpm's internal
+polkit code rather than require an external dependancy so the checks
+can be done at runtime.
+---
+ src/Makefile.am    |   2 +
+ src/xfpm-manager.c |  38 +++++++--
+ src/xfpm-power.c   | 123 +++++++++++++++++++++++-----
+ src/xfpm-systemd.c | 229 +++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/xfpm-systemd.h |  62 +++++++++++++++
+ 5 files changed, 426 insertions(+), 28 deletions(-)
+ create mode 100644 src/xfpm-systemd.c
+ create mode 100644 src/xfpm-systemd.h
+
+diff --git a/src/Makefile.am b/src/Makefile.am
+index 0435bed..e6e8ed3 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -20,6 +20,8 @@ xfce4_power_manager_SOURCES =                   \
+       xfpm-disks.h                            \
+       xfpm-console-kit.c                      \
+       xfpm-console-kit.h                      \
++      xfpm-systemd.c                          \
++      xfpm-systemd.h                          \
+       egg-idletime.c                          \
+       egg-idletime.h                          \
+       xfpm-backlight.c                        \
+diff --git a/src/xfpm-manager.c b/src/xfpm-manager.c
+index 853d78c..aff9431 100644
+--- a/src/xfpm-manager.c
++++ b/src/xfpm-manager.c
+@@ -57,6 +57,8 @@
+ #include "xfpm-enum-glib.h"
+ #include "xfpm-enum-types.h"
+ #include "xfpm-dbus-monitor.h"
++#include "xfpm-systemd.h"
++
+ static void xfpm_manager_finalize   (GObject *object);
+@@ -81,6 +83,7 @@ struct XfpmManagerPrivate
+     XfpmXfconf      *conf;
+     XfpmBacklight   *backlight;
+     XfpmConsoleKit  *console;
++    XfpmSystemd     *systemd;
+     XfpmDBusMonitor *monitor;
+     XfpmDisks       *disks;
+     XfpmInhibit     *inhibit;
+@@ -131,7 +134,10 @@ xfpm_manager_finalize (GObject *object)
+     g_object_unref (manager->priv->button);
+     g_object_unref (manager->priv->conf);
+     g_object_unref (manager->priv->client);
+-    g_object_unref (manager->priv->console);
++    if ( manager->priv->systemd != NULL )
++        g_object_unref (manager->priv->systemd);
++    if ( manager->priv->console != NULL )
++        g_object_unref (manager->priv->console);
+     g_object_unref (manager->priv->monitor);
+     g_object_unref (manager->priv->disks);
+     g_object_unref (manager->priv->inhibit);
+@@ -201,7 +207,11 @@ static void
+ xfpm_manager_shutdown (XfpmManager *manager)
+ {
+     GError *error = NULL;
+-    xfpm_console_kit_shutdown (manager->priv->console, &error );
++
++    if ( LOGIND_RUNNING () )
++        xfpm_systemd_shutdown (manager->priv->systemd, &error );
++    else
++        xfpm_console_kit_shutdown (manager->priv->console, &error );
+     if ( error )
+     {
+@@ -521,7 +531,14 @@ void xfpm_manager_start (XfpmManager *manager)
+     manager->priv->power = xfpm_power_get ();
+     manager->priv->button = xfpm_button_new ();
+     manager->priv->conf = xfpm_xfconf_new ();
+-    manager->priv->console = xfpm_console_kit_new ();
++    manager->priv->console = NULL;
++    manager->priv->systemd = NULL;
++
++    if ( LOGIND_RUNNING () )
++        manager->priv->systemd = xfpm_systemd_new ();
++    else
++        manager->priv->console = xfpm_console_kit_new ();
++
+     manager->priv->monitor = xfpm_dbus_monitor_new ();
+     manager->priv->disks = xfpm_disks_new ();
+     manager->priv->inhibit = xfpm_inhibit_new ();
+@@ -603,9 +620,18 @@ GHashTable *xfpm_manager_get_config (XfpmManager *manager)
+     hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+-    g_object_get (G_OBJECT (manager->priv->console),
+-                "can-shutdown", &can_shutdown,
+-                NULL);
++    if ( LOGIND_RUNNING () )
++    {
++        g_object_get (G_OBJECT (manager->priv->systemd),
++                      "can-shutdown", &can_shutdown,
++                      NULL);
++    }
++    else
++    {
++        g_object_get (G_OBJECT (manager->priv->console),
++                      "can-shutdown", &can_shutdown,
++                      NULL);
++    }
+     g_object_get (G_OBJECT (manager->priv->power),
+                   "auth-suspend", &auth_suspend,
+diff --git a/src/xfpm-power.c b/src/xfpm-power.c
+index d703f8e..a53753f 100644
+--- a/src/xfpm-power.c
++++ b/src/xfpm-power.c
+@@ -50,6 +50,8 @@
+ #include "xfpm-debug.h"
+ #include "xfpm-enum-types.h"
+ #include "egg-idletime.h"
++#include "xfpm-systemd.h"
++
+ static void xfpm_power_finalize     (GObject *object);
+@@ -75,6 +77,8 @@ struct XfpmPowerPrivate
+     GHashTable      *hash;
++
++    XfpmSystemd     *systemd;
+     XfpmConsoleKit  *console;
+     XfpmInhibit           *inhibit;
+     XfpmXfconf      *conf;
+@@ -680,9 +684,19 @@ xfpm_power_add_actions_to_notification (XfpmPower *power, NotifyNotification *n)
+ {
+     gboolean can_shutdown;
+-    g_object_get (G_OBJECT (power->priv->console),
+-                "can-shutdown", &can_shutdown,
+-                NULL);
++
++    if ( LOGIND_RUNNING () )
++    {
++        g_object_get (G_OBJECT (power->priv->systemd),
++                      "can-shutdown", &can_shutdown,
++                      NULL);
++    }
++    else
++    {
++        g_object_get (G_OBJECT (power->priv->console),
++                      "can-shutdown", &can_shutdown,
++                      NULL);
++    }
+     if (  power->priv->can_hibernate && power->priv->auth_hibernate )
+     {
+@@ -756,9 +770,18 @@ xfpm_power_show_critical_action_gtk (XfpmPower *power)
+     const gchar *message;
+     gboolean can_shutdown;
+-    g_object_get (G_OBJECT (power->priv->console),
+-                "can-shutdown", &can_shutdown,
+-                NULL);
++    if ( LOGIND_RUNNING () )
++    {
++        g_object_get (G_OBJECT (power->priv->systemd),
++                      "can-shutdown", &can_shutdown,
++                      NULL);
++    }
++    else
++    {
++        g_object_get (G_OBJECT (power->priv->console),
++                      "can-shutdown", &can_shutdown,
++                      NULL);
++    }
+     message = _("System is running on low power. "\
+                "Save your work to avoid losing data");
+@@ -1327,7 +1350,13 @@ xfpm_power_init (XfpmPower *power)
+     power->priv->inhibit = xfpm_inhibit_new ();
+     power->priv->notify  = xfpm_notify_new ();
+     power->priv->conf    = xfpm_xfconf_new ();
+-    power->priv->console = xfpm_console_kit_new ();
++
++    power->priv->systemd = NULL;
++    power->priv->console = NULL;
++    if ( LOGIND_RUNNING () )
++        power->priv->systemd = xfpm_systemd_new ();
++    else
++      power->priv->console = xfpm_console_kit_new ();
+     g_signal_connect_swapped (power->priv->conf, "notify::" SHOW_TRAY_ICON_CFG,
+                             G_CALLBACK (xfpm_power_refresh_adaptor_visible), power);
+@@ -1445,7 +1474,11 @@ xfpm_power_finalize (GObject *object)
+     g_object_unref (power->priv->inhibit);
+     g_object_unref (power->priv->notify);
+     g_object_unref (power->priv->conf);
+-    g_object_unref (power->priv->console);
++
++    if ( power->priv->systemd != NULL )
++        g_object_unref (power->priv->systemd);
++    if ( power->priv->console != NULL )
++        g_object_unref (power->priv->console);
+     xfpm_power_hide_adapter_icon (power);
+@@ -1607,9 +1640,18 @@ static gboolean xfpm_power_dbus_shutdown (XfpmPower *power,
+ {
+     gboolean can_reboot;
+-    g_object_get (G_OBJECT (power->priv->console),
+-                "can-shutdown", &can_reboot,
+-                NULL);
++    if ( LOGIND_RUNNING () )
++    {
++        g_object_get (G_OBJECT (power->priv->systemd),
++                      "can-shutdown", &can_reboot,
++                      NULL);
++    }
++    else
++    {
++        g_object_get (G_OBJECT (power->priv->console),
++                      "can-shutdown", &can_reboot,
++                      NULL);
++    }
+     if ( !can_reboot)
+     {
+@@ -1618,7 +1660,10 @@ static gboolean xfpm_power_dbus_shutdown (XfpmPower *power,
+         return FALSE;
+     }
+-    xfpm_console_kit_shutdown (power->priv->console, error);
++    if ( LOGIND_RUNNING () )
++        xfpm_systemd_shutdown (power->priv->systemd, error);
++    else
++      xfpm_console_kit_shutdown (power->priv->console, error);
+     return TRUE;
+ }
+@@ -1628,9 +1673,18 @@ static gboolean xfpm_power_dbus_reboot   (XfpmPower *power,
+ {
+     gboolean can_reboot;
+-    g_object_get (G_OBJECT (power->priv->console),
+-                "can-restart", &can_reboot,
+-                NULL);
++    if ( LOGIND_RUNNING () )
++    {
++        g_object_get (G_OBJECT (power->priv->systemd),
++                      "can-restart", &can_reboot,
++                      NULL);
++    }
++    else
++    {
++        g_object_get (G_OBJECT (power->priv->console),
++                      "can-restart", &can_reboot,
++                      NULL);
++    }
+     if ( !can_reboot)
+     {
+@@ -1639,7 +1693,11 @@ static gboolean xfpm_power_dbus_reboot   (XfpmPower *power,
+         return FALSE;
+     }
+-    xfpm_console_kit_reboot (power->priv->console, error);
++   if ( LOGIND_RUNNING () )
++        xfpm_systemd_reboot (power->priv->systemd, error);
++    else
++      xfpm_console_kit_reboot (power->priv->console, error);
++
+     return TRUE;
+ }
+@@ -1694,9 +1752,19 @@ static gboolean xfpm_power_dbus_can_reboot (XfpmPower * power,
+                                         gboolean * OUT_can_reboot,
+                                         GError ** error)
+ {
+-    g_object_get (G_OBJECT (power->priv->console),
+-                "can-reboot", OUT_can_reboot,
+-                NULL);
++
++    if ( LOGIND_RUNNING () )
++    {
++        g_object_get (G_OBJECT (power->priv->systemd),
++                      "can-reboot", OUT_can_reboot,
++                      NULL);
++    }
++    else
++    {
++        g_object_get (G_OBJECT (power->priv->console),
++                      "can-reboot", OUT_can_reboot,
++                    NULL);
++    }
+     return TRUE;
+ }
+@@ -1705,9 +1773,20 @@ static gboolean xfpm_power_dbus_can_shutdown (XfpmPower * power,
+                                           gboolean * OUT_can_shutdown,
+                                           GError ** error)
+ {
+-    g_object_get (G_OBJECT (power->priv->console),
+-                "can-shutdown", OUT_can_shutdown,
+-                NULL);
++
++    if ( LOGIND_RUNNING () )
++    {
++        g_object_get (G_OBJECT (power->priv->systemd),
++                  "can-shutdown", OUT_can_shutdown,
++                  NULL);
++    }
++    else
++    {
++      g_object_get (G_OBJECT (power->priv->console),
++                    "can-shutdown", OUT_can_shutdown,
++                    NULL);
++    }
++
+     return TRUE;
+ }
+diff --git a/src/xfpm-systemd.c b/src/xfpm-systemd.c
+new file mode 100644
+index 0000000..2b840db
+--- /dev/null
++++ b/src/xfpm-systemd.c
+@@ -0,0 +1,229 @@
++/*
++ * * Copyright (C) 2009-2011 Ali <aliov@xfce.org>
++ * * Copyright (C) 2013 Andreas Müller <schnitzeltony@googlemail.com>
++ *
++ * Licensed under the GNU General Public License Version 2
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
++ */
++
++#ifdef HAVE_CONFIG_H
++#include <config.h>
++#endif
++
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++
++#include <gio/gio.h>
++
++#include "xfpm-systemd.h"
++#include "xfpm-polkit.h"
++
++static void xfpm_systemd_finalize   (GObject *object);
++
++static void xfpm_systemd_get_property (GObject *object,
++                                       guint prop_id,
++                                       GValue *value,
++                                       GParamSpec *pspec);
++
++#define XFPM_SYSTEMD_GET_PRIVATE(o) \
++(G_TYPE_INSTANCE_GET_PRIVATE ((o), XFPM_TYPE_SYSTEMD, XfpmSystemdPrivate))
++
++struct XfpmSystemdPrivate
++{
++    gboolean         can_shutdown;
++    gboolean         can_restart;
++#ifdef ENABLE_POLKIT
++    XfpmPolkit      *polkit;
++#endif
++};
++
++enum
++{
++    PROP_0,
++    PROP_CAN_RESTART,
++    PROP_CAN_SHUTDOWN
++};
++
++G_DEFINE_TYPE (XfpmSystemd, xfpm_systemd, G_TYPE_OBJECT)
++
++#define SYSTEMD_DBUS_NAME               "org.freedesktop.login1"
++#define SYSTEMD_DBUS_PATH               "/org/freedesktop/login1"
++#define SYSTEMD_DBUS_INTERFACE          "org.freedesktop.login1.Manager"
++#define SYSTEMD_REBOOT_ACTION           "Reboot"
++#define SYSTEMD_POWEROFF_ACTION         "PowerOff"
++#define SYSTEMD_REBOOT_TEST             "org.freedesktop.login1.reboot"
++#define SYSTEMD_POWEROFF_TEST           "org.freedesktop.login1.power-off"
++
++static void
++xfpm_systemd_class_init (XfpmSystemdClass *klass)
++{
++    GObjectClass *object_class = G_OBJECT_CLASS (klass);
++
++    object_class->finalize = xfpm_systemd_finalize;
++
++    object_class->get_property = xfpm_systemd_get_property;
++
++    g_object_class_install_property (object_class,
++                                     PROP_CAN_RESTART,
++                                     g_param_spec_boolean ("can-restart",
++                                                           NULL, NULL,
++                                                           FALSE,
++                                                           G_PARAM_READABLE));
++
++    g_object_class_install_property (object_class,
++                                     PROP_CAN_SHUTDOWN,
++                                     g_param_spec_boolean ("can-shutdown",
++                                                           NULL, NULL,
++                                                           FALSE,
++                                                           G_PARAM_READABLE));
++
++    g_type_class_add_private (klass, sizeof (XfpmSystemdPrivate));
++}
++
++static gboolean
++xfpm_systemd_can_method (XfpmSystemd  *systemd,
++                         gboolean     *can_method,
++                         const gchar  *method)
++{
++    *can_method = FALSE;
++
++#ifdef ENABLE_POLKIT
++    *can_method = xfpm_polkit_check_auth(systemd->priv->polkit, method);
++
++    return TRUE;
++#endif
++
++    return FALSE;
++}
++
++static void
++xfpm_systemd_init (XfpmSystemd *systemd)
++{
++    systemd->priv = XFPM_SYSTEMD_GET_PRIVATE (systemd);
++    systemd->priv->can_shutdown = FALSE;
++    systemd->priv->can_restart  = FALSE;
++#ifdef ENABLE_POLKIT
++    systemd->priv->polkit = xfpm_polkit_get();
++#endif
++
++    xfpm_systemd_can_method (systemd,
++                             &systemd->priv->can_shutdown,
++                             SYSTEMD_POWEROFF_TEST);
++    xfpm_systemd_can_method (systemd,
++                             &systemd->priv->can_restart,
++                             SYSTEMD_REBOOT_TEST);
++}
++
++static void xfpm_systemd_get_property (GObject *object,
++                       guint prop_id,
++                       GValue *value,
++                       GParamSpec *pspec)
++{
++    XfpmSystemd *systemd;
++    systemd = XFPM_SYSTEMD (object);
++
++    switch (prop_id)
++    {
++    case PROP_CAN_SHUTDOWN:
++        g_value_set_boolean (value, systemd->priv->can_shutdown);
++        break;
++    case PROP_CAN_RESTART:
++        g_value_set_boolean (value, systemd->priv->can_restart);
++        break;
++        default:
++            G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
++            break;
++    }
++}
++
++static void
++xfpm_systemd_finalize (GObject *object)
++{
++    XfpmSystemd *systemd;
++
++    systemd = XFPM_SYSTEMD (object);
++
++#ifdef ENABLE_POLKIT
++    if(systemd->priv->polkit)
++    {
++        g_object_unref (G_OBJECT (systemd->priv->polkit));
++        systemd->priv->polkit = NULL;
++    }
++#endif
++
++    G_OBJECT_CLASS (xfpm_systemd_parent_class)->finalize (object);
++}
++
++XfpmSystemd *
++xfpm_systemd_new (void)
++{
++    static gpointer systemd_obj = NULL;
++
++    if ( G_LIKELY (systemd_obj != NULL ) )
++    {
++    g_object_ref (systemd_obj);
++    }
++    else
++    {
++    systemd_obj = g_object_new (XFPM_TYPE_SYSTEMD, NULL);
++    g_object_add_weak_pointer (systemd_obj, &systemd_obj);
++    }
++
++    return XFPM_SYSTEMD (systemd_obj);
++}
++
++static void
++xfpm_systemd_try_method (XfpmSystemd  *systemd,
++                         const gchar  *method,
++                         GError      **error)
++{
++    GDBusConnection *bus;
++    GError          *local_error = NULL;
++
++    bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, error);
++    if (G_LIKELY (bus != NULL))
++    {
++        g_dbus_connection_call_sync (bus,
++                                     SYSTEMD_DBUS_NAME,
++                                     SYSTEMD_DBUS_PATH,
++                                     SYSTEMD_DBUS_INTERFACE,
++                                     method,
++                                     g_variant_new ("(b)", TRUE),
++                                     NULL, 0, G_MAXINT, NULL,
++                                     &local_error);
++        g_object_unref (G_OBJECT (bus));
++
++        if (local_error != NULL)
++        {
++            g_propagate_error (error, local_error);
++        }
++    }
++}
++
++void xfpm_systemd_shutdown (XfpmSystemd *systemd, GError **error)
++{
++    xfpm_systemd_try_method (systemd,
++                             SYSTEMD_POWEROFF_ACTION,
++                             error);
++}
++
++void xfpm_systemd_reboot (XfpmSystemd *systemd, GError **error)
++{
++    xfpm_systemd_try_method (systemd,
++                             SYSTEMD_REBOOT_ACTION,
++                             error);
++}
+diff --git a/src/xfpm-systemd.h b/src/xfpm-systemd.h
+new file mode 100644
+index 0000000..7ade4f4
+--- /dev/null
++++ b/src/xfpm-systemd.h
+@@ -0,0 +1,62 @@
++/*
++ * * Copyright (C) 2009-2011 Ali <aliov@xfce.org>
++ * * Copyright (C) 2013 Andreas Müller <schnitzeltony@googlemail.com>
++ *
++ * Licensed under the GNU General Public License Version 2
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
++ */
++
++#ifndef __XFPM_SYSTEMD_H
++#define __XFPM_SYSTEMD_H
++
++#include <glib-object.h>
++
++G_BEGIN_DECLS
++
++#define LOGIND_RUNNING() (access ("/run/systemd/seats/", F_OK) >= 0)
++
++#define XFPM_TYPE_SYSTEMD            (xfpm_systemd_get_type () )
++#define XFPM_SYSTEMD(o)              (G_TYPE_CHECK_INSTANCE_CAST ((o), XFPM_TYPE_SYSTEMD, XfpmSystemd))
++#define XFPM_IS_SYSTEMD(o)           (G_TYPE_CHECK_INSTANCE_TYPE ((o), XFPM_TYPE_SYSTEMD))
++
++typedef struct XfpmSystemdPrivate XfpmSystemdPrivate;
++
++typedef struct
++{
++    GObject                 parent;
++    XfpmSystemdPrivate      *priv;
++
++} XfpmSystemd;
++
++typedef struct
++{
++    GObjectClass        parent_class;
++
++} XfpmSystemdClass;
++
++GType               xfpm_systemd_get_type   (void) G_GNUC_CONST;
++
++XfpmSystemd         *xfpm_systemd_new   (void);
++
++void                xfpm_systemd_shutdown   (XfpmSystemd *systemd,
++                                             GError **error);
++
++void                xfpm_systemd_reboot (XfpmSystemd *systemd,
++                                         GError **error);
++
++G_END_DECLS
++
++#endif /* __XFPM_SYSTEMD_H */
+-- 
+1.9.3
+
diff --git a/0146-Fix-empty-systray-icon-in-some-panels-on-battery-rem.patch b/0146-Fix-empty-systray-icon-in-some-panels-on-battery-rem.patch
new file mode 100644 (file)
index 0000000..7ae313b
--- /dev/null
@@ -0,0 +1,49 @@
+From 8f87339354585949ba8033196b1e8b57623f5a52 Mon Sep 17 00:00:00 2001
+From: Henry Gebhardt <hsggebhardt@googlemail.com>
+Date: Wed, 29 Feb 2012 14:14:33 +0100
+Subject: [PATCH 146/219] Fix empty systray icon in some panels on battery
+ removal and addition
+
+Unreferencing a GtkStatusIcon is not enough to get rid of it entirely.
+
+This fixes these bugs:
+
+    https://bugzilla.xfce.org/show_bug.cgi?id=7603
+    http://bugzilla.xfce.org/show_bug.cgi?id=8424
+    https://bugs.launchpad.net/ubuntu/+source/lxpanel/+bug/846878
+    https://bugzilla.redhat.com/show_bug.cgi?id=765726
+
+Signed-off-by: Eric Koegel <eric.koegel@gmail.com>
+---
+ src/xfpm-battery.c | 2 ++
+ src/xfpm-power.c   | 1 +
+ 2 files changed, 3 insertions(+)
+
+diff --git a/src/xfpm-battery.c b/src/xfpm-battery.c
+index b3690d2..2e0e504 100644
+--- a/src/xfpm-battery.c
++++ b/src/xfpm-battery.c
+@@ -788,6 +788,8 @@ xfpm_battery_finalize (GObject *object)
+     g_object_unref (battery->priv->notify);
+     g_object_unref (battery->priv->button);
++    gtk_status_icon_set_visible(GTK_STATUS_ICON(battery), FALSE);
++
+     G_OBJECT_CLASS (xfpm_battery_parent_class)->finalize (object);
+ }
+diff --git a/src/xfpm-power.c b/src/xfpm-power.c
+index a53753f..febac1d 100644
+--- a/src/xfpm-power.c
++++ b/src/xfpm-power.c
+@@ -1137,6 +1137,7 @@ xfpm_power_hide_adapter_icon (XfpmPower *power)
+     if ( power->priv->adapter_icon )
+     {
++        gtk_status_icon_set_visible (power->priv->adapter_icon, FALSE);
+         g_object_unref (power->priv->adapter_icon);
+         power->priv->adapter_icon = NULL;
+     }
+-- 
+1.9.3
+
diff --git a/0147-Display-power-percentage.patch b/0147-Display-power-percentage.patch
new file mode 100644 (file)
index 0000000..004ad5e
--- /dev/null
@@ -0,0 +1,42 @@
+From 788ca362f2ce261da75e10a0637bf2b057257771 Mon Sep 17 00:00:00 2001
+From: Pascal de Bruijn <pmjdebruijn@pcode.nl>
+Date: Mon, 23 Dec 2013 16:43:34 +0100
+Subject: [PATCH 147/219] Display power percentage
+
+This is particularly relevant for Logitech Unifying devices.
+
+My test device was a Logitech M185 wireless mouse, which has no power
+related properties except for "percentage".
+
+Signed-off-by: Eric Koegel <eric.koegel@gmail.com>
+---
+ src/xfpm-power-info.c | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+diff --git a/src/xfpm-power-info.c b/src/xfpm-power-info.c
+index e365da9..f0c9e50 100644
+--- a/src/xfpm-power-info.c
++++ b/src/xfpm-power-info.c
+@@ -465,6 +465,19 @@ xfpm_info_add_device_view (XfpmInfo *info, GHashTable *props, const gchar *objec
+           g_free (str);
+       }
+       
++      /*Percentage*/
++      str = xfpm_info_get_energy_property (props, "Percentage", _("%"));
++      if ( str )
++      {
++          gtk_list_store_append (list_store, &iter);
++          gtk_list_store_set (list_store, &iter,
++                              XFPM_DEVICE_INFO_NAME, _("Percentage"),
++                              XFPM_DEVICE_INFO_VALUE, str,
++                              -1);
++          i++;
++          g_free (str);
++      }
++
+       /*Vendor*/
+       value = g_hash_table_lookup (props, "Vendor");
+       
+-- 
+1.9.3
+
diff --git a/0148-Fix-status-icon-for-devices-other-than-battery-and-u.patch b/0148-Fix-status-icon-for-devices-other-than-battery-and-u.patch
new file mode 100644 (file)
index 0000000..27ef018
--- /dev/null
@@ -0,0 +1,52 @@
+From 30ce194f569bc7d0d7ac38356c366b9527b1e6c8 Mon Sep 17 00:00:00 2001
+From: Eric Koegel <eric.koegel@gmail.com>
+Date: Sun, 19 Jan 2014 09:44:31 +0300
+Subject: [PATCH 148/219] Fix status icon for devices other than battery and
+ ups (Bug 8188)
+
+xfpm_battery_refresh_icon incorrectly adds an additional dash to
+the icon prefix when the device is not a battery or a ups.
+
+Additionally, this patch correctly shows the icon when the device
+reports that it is charging.
+
+This patch only combines the patches submitted by
+Daniel Schubert and Dean Montgomery.
+---
+ src/xfpm-battery.c | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/src/xfpm-battery.c b/src/xfpm-battery.c
+index 2e0e504..31576d6 100644
+--- a/src/xfpm-battery.c
++++ b/src/xfpm-battery.c
+@@ -320,20 +320,22 @@ xfpm_battery_refresh_icon (XfpmBattery *battery)
+     {
+       if ( !battery->priv->present || battery->priv->state == XFPM_DEVICE_STATE_EMPTY )
+       {
+-          g_snprintf (icon_name, 128, "%s-000", battery->priv->icon_prefix);
++          g_snprintf (icon_name, 128, "%s000", battery->priv->icon_prefix);
+       }
+       else if ( battery->priv->state == XFPM_DEVICE_STATE_FULLY_CHARGED )
+       {
+-          g_snprintf (icon_name, 128, "%s-100", battery->priv->icon_prefix);
++          g_snprintf (icon_name, 128, "%s100", battery->priv->icon_prefix);
+       }
+-      else if ( battery->priv->state == XFPM_DEVICE_STATE_DISCHARGING )
++      else if ( battery->priv->state == XFPM_DEVICE_STATE_DISCHARGING || battery->priv->state == XFPM_DEVICE_STATE_CHARGING )
+       {
+-          g_snprintf (icon_name, 128, "%s-%s",
++          g_snprintf (icon_name, 128, "%s%s",
+                       battery->priv->icon_prefix,
+                       xfpm_battery_get_icon_index (battery->priv->type, battery->priv->percentage));
+       }
+     }
++    XFPM_DEBUG ("Battery icon %s", icon_name);
++
+     gtk_status_icon_set_from_icon_name (GTK_STATUS_ICON (battery), icon_name);
+ }
+-- 
+1.9.3
+
diff --git a/0149-Update-to-XFCE_PANEL_PLUGIN_REGISTER.patch b/0149-Update-to-XFCE_PANEL_PLUGIN_REGISTER.patch
new file mode 100644 (file)
index 0000000..e99a22e
--- /dev/null
@@ -0,0 +1,192 @@
+From 81ca9ce560854b6c2c6f6194ef5652ff16ba4eea Mon Sep 17 00:00:00 2001
+From: Eric Koegel <eric.koegel@gmail.com>
+Date: Mon, 13 Jan 2014 15:42:42 +0300
+Subject: [PATCH 149/219] Update to XFCE_PANEL_PLUGIN_REGISTER
+
+Updates from the per-4.8 panel registration method. Also updates
+the gtk about function for the new field and updates the makefile
+for the plugin.
+---
+ common/xfpm-common.c                               |  4 +-
+ panel-plugins/brightness/Makefile.am               | 31 ++++++++---
+ panel-plugins/brightness/brightness-button.c       |  7 +--
+ panel-plugins/brightness/brightness-plugin.c       | 62 +++++++++++++++++++---
+ .../xfce4-brightness-plugin.desktop.in.in          |  3 +-
+ 5 files changed, 83 insertions(+), 24 deletions(-)
+
+diff --git a/common/xfpm-common.c b/common/xfpm-common.c
+index eca2ed5..ecfc6c9 100644
+--- a/common/xfpm-common.c
++++ b/common/xfpm-common.c
+@@ -151,10 +151,10 @@ xfpm_about (GtkWidget *widget, gpointer data)
+                    "destroy-with-parent", TRUE,
+                    "documenters", documenters,
+                    "license", XFCE_LICENSE_GPL,
+-                   "name", package,
++                   "program-name", package,
+                    "translator-credits", _("translator-credits"),
+                    "version", PACKAGE_VERSION,
+-                   "website", "http://goodies.xfce.org",
++                   "website", "http://goodies.xfce.org/projects/applications/xfce4-power-manager",
+                    NULL);
+                                                
+ }
+diff --git a/panel-plugins/brightness/Makefile.am b/panel-plugins/brightness/Makefile.am
+index 33836b0..a89ca8b 100644
+--- a/panel-plugins/brightness/Makefile.am
++++ b/panel-plugins/brightness/Makefile.am
+@@ -1,12 +1,24 @@
+-plugindir = $(libdir)/xfce4/panel-plugins
+-plugin_PROGRAMS = xfce4-brightness-plugin
++INCLUDES = \
++      -I$(top_srcdir) \
++      -DG_LOG_DOMAIN=\"xfce4-brightness-plugin\" \
++      -DPACKAGE_LOCALE_DIR=\"$(localedir)\" \
++      $(PLATFORM_CPPFLAGS)
+-xfce4_brightness_plugin_SOURCES =             \
++#
++# xfce4 brightness plugin
++#
++plugin_LTLIBRARIES = \
++      libxfce4brightness.la
++
++plugindir = \
++      $(libdir)/xfce4/panel/plugins
++
++libxfce4brightness_la_SOURCES =               \
+       brightness-plugin.c                     \
+       brightness-button.c                     \
+       brightness-button.h
+-xfce4_brightness_plugin_CFLAGS =              \
++libxfce4brightness_la_CFLAGS =                \
+       -I$(top_srcdir)                         \
+       -I$(top_srcdir)/src                     \
+       -DLOCALEDIR=\"$(localedir)\"            \
+@@ -19,11 +31,14 @@ xfce4_brightness_plugin_CFLAGS =           \
+       $(PLATFORM_CPPFLAGS)                    \
+       $(PLATFORM_CFLAGS)
+-xfce4_brightness_plugin_LDFLAGS =             \
+-      -no-undefined                           \
+-      $(PLATFORM_LDFLAGS)
++libxfce4brightness_la_LDFLAGS =               \
++       -avoid-version \
++       -module \
++       -no-undefined \
++       -export-symbols-regex '^xfce_panel_module_(preinit|init|construct)' \
++       $(PLATFORM_LDFLAGS)
+-xfce4_brightness_plugin_LDADD =                       \
++libxfce4brightness_la_LIBADD =                        \
+       $(top_builddir)/common/libxfpmcommon.la \
+       $(LIBXFCE4PANEL_LIBS)                   \
+       $(LIBXFCE4UI_LIBS)                      \
+diff --git a/panel-plugins/brightness/brightness-button.c b/panel-plugins/brightness/brightness-button.c
+index bd466c9..8c527bf 100644
+--- a/panel-plugins/brightness/brightness-button.c
++++ b/panel-plugins/brightness/brightness-button.c
+@@ -619,12 +619,9 @@ void brightness_button_show (BrightnessButton *button)
+     GtkWidget *mi;
+     
+     g_return_if_fail (BRIGHTNESS_IS_BUTTON (button));
+-    
+-    gtk_container_add (GTK_CONTAINER (button->priv->plugin),
+-                     GTK_WIDGET (button));
+-                     
++
+     xfce_panel_plugin_add_action_widget (button->priv->plugin, GTK_WIDGET (button));
+-    
++
+     button->priv->image = gtk_image_new ();
+     gtk_container_add (GTK_CONTAINER (button), button->priv->image);
+     
+diff --git a/panel-plugins/brightness/brightness-plugin.c b/panel-plugins/brightness/brightness-plugin.c
+index f7e84d0..3df91dc 100644
+--- a/panel-plugins/brightness/brightness-plugin.c
++++ b/panel-plugins/brightness/brightness-plugin.c
+@@ -34,14 +34,60 @@
+ #include "brightness-button.h"
+-static void
+-register_brightness_plugin (XfcePanelPlugin *plugin)
++/* plugin structure */
++typedef struct
+ {
+-    GtkWidget *button;
+-    
+-    button = brightness_button_new (plugin);
+-    
+-    brightness_button_show (BRIGHTNESS_BUTTON (button));
++    XfcePanelPlugin *plugin;
++
++    /* panel widgets */
++    GtkWidget       *ebox;
++    GtkWidget       *brightness_button;
+ }
++BrightnessPlugin;
++
++/* prototypes */
++static void brightness_plugin_construct (XfcePanelPlugin *plugin);
++
++
++/* register the plugin */
++XFCE_PANEL_PLUGIN_REGISTER (brightness_plugin_construct);
++
++
++static BrightnessPlugin *
++brightness_plugin_new (XfcePanelPlugin *plugin)
++{
++    BrightnessPlugin *brightness_plugin;
++
++    /* allocate memory for the plugin structure */
++    brightness_plugin = panel_slice_new0 (BrightnessPlugin);
++
++    /* pointer to plugin */
++    brightness_plugin->plugin = plugin;
++
++    /* pointer to plugin */
++    brightness_plugin->plugin = plugin;
+-XFCE_PANEL_PLUGIN_REGISTER_EXTERNAL(register_brightness_plugin);
++    /* create some panel ebox */
++    brightness_plugin->ebox = gtk_event_box_new ();
++    gtk_widget_show (brightness_plugin->ebox);
++    gtk_event_box_set_visible_window (GTK_EVENT_BOX(brightness_plugin->ebox), FALSE);
++
++    brightness_plugin->brightness_button = brightness_button_new (plugin);
++    brightness_button_show(BRIGHTNESS_BUTTON(brightness_plugin->brightness_button));
++    gtk_container_add (GTK_CONTAINER (brightness_plugin->ebox), brightness_plugin->brightness_button);
++
++    return brightness_plugin;
++}
++
++
++static void
++brightness_plugin_construct (XfcePanelPlugin *plugin)
++{
++    BrightnessPlugin *brightness_plugin;
++
++    /* create the plugin */
++    brightness_plugin = brightness_plugin_new (plugin);
++
++    /* add the ebox to the panel */
++    gtk_container_add (GTK_CONTAINER (plugin), brightness_plugin->ebox);
++}
+diff --git a/panel-plugins/brightness/xfce4-brightness-plugin.desktop.in.in b/panel-plugins/brightness/xfce4-brightness-plugin.desktop.in.in
+index 6adccea..f03f4fd 100644
+--- a/panel-plugins/brightness/xfce4-brightness-plugin.desktop.in.in
++++ b/panel-plugins/brightness/xfce4-brightness-plugin.desktop.in.in
+@@ -3,5 +3,6 @@ Type=X-XFCE-PanelPlugin
+ _Name=Brightness plugin
+ _Comment=Control your LCD brightness
+ Icon=xfpm-brightness-lcd
+-X-XFCE-Exec=@libdir@/xfce4/panel-plugins/xfce4-brightness-plugin
++X-XFCE-Module=xfce4brightness
+ X-XFCE-Unique=TRUE
++X-XFCE-Internal=false
+-- 
+1.9.3
+
diff --git a/0150-Add-support-for-keyboard-backlight-control-Bug-10470.patch b/0150-Add-support-for-keyboard-backlight-control-Bug-10470.patch
new file mode 100644 (file)
index 0000000..bf1ab09
--- /dev/null
@@ -0,0 +1,544 @@
+From 1d33e3eb8b9fd684c3a0fb6eaaa44b9ca0d13604 Mon Sep 17 00:00:00 2001
+From: Sonal Santan <sonal.santan@gmail.com>
+Date: Mon, 20 Jan 2014 10:01:47 +0300
+Subject: [PATCH 150/219] Add support for keyboard backlight control (Bug
+ 10470)
+
+I have enhanced xfce4-power-manager to support backlit keyboard brightness
+control through keyboard brightness keys. It uses
+org.freedesktop.UPower.KbdBacklight interface for increasing or decreasing
+the keyboard backlight brightness and binds with keys
+XF86XK_KbdBrightnessUp and XF86XK_KbdBrightnessDown.
+
+This feature is useful when the firmware does not handle the keyboard
+brightness control automatically. For example MacBook Pro leaves it to the
+OS to control the keyboard brightness through special keys. With this
+change, I can light up the keyboard on MacBook Pro and control its
+brightness through the special keys.
+
+I have also tested this on Lenovo X1 Carbon where the keyboard brightness
+is automatically handled by the firmware and this enhancement steps aside
+without interfering.
+---
+ src/Makefile.am          |   2 +
+ src/xfpm-button.c        |   8 +-
+ src/xfpm-enum-glib.h     |   2 +
+ src/xfpm-enum.h          |  16 +--
+ src/xfpm-kbd-backlight.c | 276 +++++++++++++++++++++++++++++++++++++++++++++++
+ src/xfpm-kbd-backlight.h |  55 ++++++++++
+ src/xfpm-manager.c       |  45 ++++----
+ 7 files changed, 378 insertions(+), 26 deletions(-)
+ create mode 100644 src/xfpm-kbd-backlight.c
+ create mode 100644 src/xfpm-kbd-backlight.h
+
+diff --git a/src/Makefile.am b/src/Makefile.am
+index e6e8ed3..316a823 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -26,6 +26,8 @@ xfce4_power_manager_SOURCES =                   \
+       egg-idletime.h                          \
+       xfpm-backlight.c                        \
+       xfpm-backlight.h                        \
++      xfpm-kbd-backlight.c                    \
++      xfpm-kbd-backlight.h                    \
+       xfpm-dpms.c                             \
+       xfpm-dpms.h                             \
+       xfpm-button.c                           \
+diff --git a/src/xfpm-button.c b/src/xfpm-button.c
+index 70c07a1..accf76d 100644
+--- a/src/xfpm-button.c
++++ b/src/xfpm-button.c
+@@ -208,12 +208,18 @@ xfpm_button_setup (XfpmButton *button)
+       
+     if ( xfpm_button_xevent_key (button, XF86XK_MonBrightnessUp, BUTTON_MON_BRIGHTNESS_UP) )
+       button->priv->mapped_buttons |= BRIGHTNESS_KEY_UP;
+-      
++
+     if (xfpm_button_xevent_key (button, XF86XK_MonBrightnessDown, BUTTON_MON_BRIGHTNESS_DOWN) )
+       button->priv->mapped_buttons |= BRIGHTNESS_KEY_DOWN;
+       
+     xfpm_button_xevent_key (button, XF86XK_Battery, BUTTON_BATTERY);
++    if ( xfpm_button_xevent_key (button, XF86XK_KbdBrightnessUp, BUTTON_KBD_BRIGHTNESS_UP) )
++      button->priv->mapped_buttons |= KBD_BRIGHTNESS_KEY_UP;
++
++    if (xfpm_button_xevent_key (button, XF86XK_KbdBrightnessDown, BUTTON_KBD_BRIGHTNESS_DOWN) )
++      button->priv->mapped_buttons |= KBD_BRIGHTNESS_KEY_DOWN;
++
+     gdk_window_add_filter (button->priv->window, 
+                          xfpm_button_filter_x_events, button);
+ }
+diff --git a/src/xfpm-enum-glib.h b/src/xfpm-enum-glib.h
+index b047eb4..5bb70fa 100644
+--- a/src/xfpm-enum-glib.h
++++ b/src/xfpm-enum-glib.h
+@@ -94,6 +94,8 @@ typedef enum
+     BUTTON_MON_BRIGHTNESS_DOWN,
+     BUTTON_LID_CLOSED,
+     BUTTON_BATTERY,
++    BUTTON_KBD_BRIGHTNESS_UP,
++    BUTTON_KBD_BRIGHTNESS_DOWN,
+     NUMBER_OF_BUTTONS
+     
+ } XfpmButtonKey;
+diff --git a/src/xfpm-enum.h b/src/xfpm-enum.h
+index 5a9f630..e254218 100644
+--- a/src/xfpm-enum.h
++++ b/src/xfpm-enum.h
+@@ -40,13 +40,15 @@ typedef enum
+ typedef enum
+ {
+-    LID_KEY                   = (1 << 0),
+-    BRIGHTNESS_KEY_UP = (1 << 1),
+-    BRIGHTNESS_KEY_DOWN       = (1 << 2),
+-    SLEEP_KEY                 = (1 << 3),
+-    HIBERNATE_KEY     = (1 << 4),
+-    POWER_KEY                 = (1 << 5)
+-    
++    LID_KEY                           = (1 << 0),
++    BRIGHTNESS_KEY_UP         = (1 << 1),
++    BRIGHTNESS_KEY_DOWN       = (1 << 2),
++    SLEEP_KEY                         = (1 << 3),
++    HIBERNATE_KEY             = (1 << 4),
++    POWER_KEY                         = (1 << 5),
++    KBD_BRIGHTNESS_KEY_UP     = (1 << 6),
++    KBD_BRIGHTNESS_KEY_DOWN   = (1 << 7)
++
+ } XfpmKeys;
+ typedef enum
+diff --git a/src/xfpm-kbd-backlight.c b/src/xfpm-kbd-backlight.c
+new file mode 100644
+index 0000000..c45283d
+--- /dev/null
++++ b/src/xfpm-kbd-backlight.c
+@@ -0,0 +1,276 @@
++/*
++ * * Copyright (C) 2013 Sonal Santan <sonal.santan@gmail.com>
++ *
++ * Licensed under the GNU General Public License Version 2
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
++ */
++
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++
++#include <dbus/dbus-glib.h>
++
++#include "xfpm-kbd-backlight.h"
++#include "xfpm-button.h"
++#include "xfpm-power.h"
++
++#define XFPM_KBD_BACKLIGHT_GET_PRIVATE(o) \
++(G_TYPE_INSTANCE_GET_PRIVATE ((o), XFPM_TYPE_KBD_BACKLIGHT, XfpmKbdBacklightPrivate))
++
++static void xfpm_kbd_backlight_finalize     (GObject *object);
++
++struct XfpmKbdBacklightPrivate
++{
++    XfpmPower       *power;
++    XfpmButton      *button;
++
++    DBusGConnection *bus;
++    DBusGProxy      *proxy;
++
++    gboolean         dimmed;
++    gboolean         on_battery;
++    gint             max_level;
++    gint             min_level;
++    gint             step;
++};
++
++G_DEFINE_TYPE (XfpmKbdBacklight, xfpm_kbd_backlight, G_TYPE_OBJECT)
++
++
++static void
++xfpm_kbd_backlight_on_battery_changed_cb (XfpmPower *power, gboolean on_battery, XfpmKbdBacklight *backlight)
++{
++    backlight->priv->on_battery = on_battery;
++}
++
++
++static void
++xfpm_kbd_backlight_init_max_level (XfpmKbdBacklight *backlight)
++{
++    GError *error = NULL;
++
++    dbus_g_proxy_call (backlight->priv->proxy, "GetMaxBrightness", &error,
++                       G_TYPE_INVALID,
++                       G_TYPE_INT, &backlight->priv->max_level,
++                       G_TYPE_INVALID);
++
++    if ( error )
++    {
++        g_warning ("Failed to get keyboard max brightness level : %s", error->message);
++        g_error_free (error);
++    }
++}
++
++
++static gint
++xfpm_kbd_backlight_get_level (XfpmKbdBacklight *backlight)
++{
++    GError *error = NULL;
++    gint level = -1;
++
++    dbus_g_proxy_call (backlight->priv->proxy, "GetBrightness", &error,
++                       G_TYPE_INVALID,
++                       G_TYPE_INT, &level,
++                       G_TYPE_INVALID);
++    if ( error )
++    {
++        g_warning ("Failed to get keyboard brightness level : %s", error->message);
++        g_error_free (error);
++    }
++    return level;
++}
++
++
++static void
++xfpm_kbd_backlight_set_level (XfpmKbdBacklight *backlight, gint level)
++{
++    GError *error = NULL;
++
++    dbus_g_proxy_call (backlight->priv->proxy, "SetBrightness", &error,
++                       G_TYPE_INT, level,
++                       G_TYPE_INVALID, G_TYPE_INVALID);
++    if ( error )
++    {
++        g_warning ("Failed to set keyboard brightness level : %s", error->message);
++        g_error_free (error);
++    }
++}
++
++static void
++xfpm_kbd_backlight_up (XfpmKbdBacklight *backlight)
++{
++    gint level;
++
++    level = xfpm_kbd_backlight_get_level(backlight);
++
++    if ( level == -1)
++        return;
++
++    if ( level == backlight->priv->max_level )
++        return;
++
++    level += backlight->priv->step;
++
++    if ( level > backlight->priv->max_level )
++        level = backlight->priv->max_level;
++
++    xfpm_kbd_backlight_set_level(backlight, level);
++}
++
++
++static void
++xfpm_kbd_backlight_down (XfpmKbdBacklight *backlight)
++{
++    gint level;
++
++    level = xfpm_kbd_backlight_get_level(backlight);
++
++    if ( level == -1)
++        return;
++
++    if ( level == backlight->priv->min_level )
++        return;
++
++    level -= backlight->priv->step;
++
++    if ( level < backlight->priv->min_level )
++        level = backlight->priv->min_level;
++
++    xfpm_kbd_backlight_set_level(backlight, level);
++}
++
++
++static void
++xfpm_kbd_backlight_button_pressed_cb (XfpmButton *button, XfpmButtonKey type, XfpmKbdBacklight *backlight)
++{
++    if ( type == BUTTON_KBD_BRIGHTNESS_UP )
++    {
++        xfpm_kbd_backlight_up (backlight);
++    }
++    else if ( type == BUTTON_KBD_BRIGHTNESS_DOWN )
++    {
++        xfpm_kbd_backlight_down (backlight);
++    }
++}
++
++
++static void
++xfpm_kbd_backlight_class_init (XfpmKbdBacklightClass *klass)
++{
++    GObjectClass *object_class = G_OBJECT_CLASS (klass);
++
++    object_class->finalize = xfpm_kbd_backlight_finalize;
++
++    g_type_class_add_private (klass, sizeof (XfpmKbdBacklightPrivate));
++}
++
++
++static void
++xfpm_kbd_backlight_init (XfpmKbdBacklight *backlight)
++{
++    GError *error = NULL;
++
++    backlight->priv = XFPM_KBD_BACKLIGHT_GET_PRIVATE (backlight);
++
++    backlight->priv->bus = NULL;
++    backlight->priv->proxy = NULL;
++    backlight->priv->power = NULL;
++    backlight->priv->button = NULL;
++    backlight->priv->dimmed = FALSE;
++    backlight->priv->on_battery = FALSE;
++    backlight->priv->max_level = 0;
++    backlight->priv->min_level = 0;
++
++    backlight->priv->bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
++
++    if ( error )
++    {
++        g_critical ("Unable to get system bus connection : %s", error->message);
++        g_error_free (error);
++        goto out;
++    }
++
++    backlight->priv->proxy = dbus_g_proxy_new_for_name (backlight->priv->bus,
++                                                        "org.freedesktop.UPower",
++                                                        "/org/freedesktop/UPower/KbdBacklight",
++                                                        "org.freedesktop.UPower.KbdBacklight");
++    if ( backlight->priv->proxy == NULL )
++    {
++        g_warning ("Unable to get the interface, org.freedesktop.UPower.KbdBacklight");
++        goto out;
++    }
++
++    xfpm_kbd_backlight_init_max_level (backlight);
++
++    if ( backlight->priv->max_level == 0 )
++        goto out;
++
++    backlight->priv->step = backlight->priv->max_level / 5;
++    backlight->priv->power = xfpm_power_get ();
++    backlight->priv->button = xfpm_button_new ();
++
++    g_signal_connect (backlight->priv->button, "button-pressed",
++                      G_CALLBACK (xfpm_kbd_backlight_button_pressed_cb), backlight);
++
++    g_signal_connect (backlight->priv->power, "on-battery-changed",
++                      G_CALLBACK (xfpm_kbd_backlight_on_battery_changed_cb), backlight);
++
++    g_object_get (G_OBJECT (backlight->priv->power),
++                  "on-battery", &backlight->priv->on_battery,
++                  NULL);
++
++out:
++    ;
++}
++
++
++static void
++xfpm_kbd_backlight_finalize (GObject *object)
++{
++    XfpmKbdBacklight *backlight = NULL;
++
++    backlight = XFPM_KBD_BACKLIGHT (object);
++
++    if ( backlight->priv->power )
++        g_object_unref (backlight->priv->power );
++
++    if ( backlight->priv->button )
++        g_object_unref (backlight->priv->button);
++
++    if ( backlight->priv->proxy )
++        g_object_unref (backlight->priv->proxy);
++
++    if ( backlight->priv->bus )
++        dbus_g_connection_unref (backlight->priv->bus);
++
++    G_OBJECT_CLASS (xfpm_kbd_backlight_parent_class)->finalize (object);
++}
++
++
++XfpmKbdBacklight *
++xfpm_kbd_backlight_new (void)
++{
++    XfpmKbdBacklight *backlight = NULL;
++    backlight = g_object_new (XFPM_TYPE_KBD_BACKLIGHT, NULL);
++    return backlight;
++}
++
++
++gboolean xfpm_kbd_backlight_has_hw (XfpmKbdBacklight *backlight)
++{
++    return ( backlight->priv->proxy == NULL ) ? FALSE : TRUE;
++}
+diff --git a/src/xfpm-kbd-backlight.h b/src/xfpm-kbd-backlight.h
+new file mode 100644
+index 0000000..99569d7
+--- /dev/null
++++ b/src/xfpm-kbd-backlight.h
+@@ -0,0 +1,55 @@
++/*
++ * * Copyright (C) 2013 Sonal Santan <sonal.santan@gmail.com>
++ *
++ * Licensed under the GNU General Public License Version 2
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
++ */
++
++#ifndef __XFPM_KBD_BACKLIGHT_H
++#define __XFPM_KBD_BACKLIGHT_H
++
++#include <glib-object.h>
++
++G_BEGIN_DECLS
++
++#define XFPM_TYPE_KBD_BACKLIGHT        (xfpm_kbd_backlight_get_type () )
++#define XFPM_KBD_BACKLIGHT(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), XFPM_TYPE_KBD_BACKLIGHT, XfpmKbdBacklight))
++#define XFPM_IS_KBD_BACKLIGHT(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), XFPM_TYPE_KBD_BACKLIGHT))
++
++typedef struct XfpmKbdBacklightPrivate XfpmKbdBacklightPrivate;
++
++typedef struct
++{
++    GObject                     parent;
++    XfpmKbdBacklightPrivate    *priv;
++
++} XfpmKbdBacklight;
++
++typedef struct
++{
++    GObjectClass                parent_class;
++
++} XfpmKbdBacklightClass;
++
++GType                           xfpm_kbd_backlight_get_type         (void) G_GNUC_CONST;
++
++XfpmKbdBacklight               *xfpm_kbd_backlight_new              (void);
++
++gboolean                        xfpm_kbd_backlight_has_hw           (XfpmKbdBacklight *backlight);
++
++G_END_DECLS
++
++#endif /* __XFPM_KBD_BACKLIGHT_H */
+diff --git a/src/xfpm-manager.c b/src/xfpm-manager.c
+index aff9431..889ff7a 100644
+--- a/src/xfpm-manager.c
++++ b/src/xfpm-manager.c
+@@ -46,6 +46,7 @@
+ #include "xfpm-console-kit.h"
+ #include "xfpm-button.h"
+ #include "xfpm-backlight.h"
++#include "xfpm-kbd-backlight.h"
+ #include "xfpm-inhibit.h"
+ #include "egg-idletime.h"
+ #include "xfpm-config.h"
+@@ -74,28 +75,29 @@ static gboolean xfpm_manager_quit (XfpmManager *manager);
+ struct XfpmManagerPrivate
+ {
+-    DBusGConnection *session_bus;
+-
+-    XfceSMClient    *client;
+-
+-    XfpmPower       *power;
+-    XfpmButton      *button;
+-    XfpmXfconf      *conf;
+-    XfpmBacklight   *backlight;
+-    XfpmConsoleKit  *console;
+-    XfpmSystemd     *systemd;
+-    XfpmDBusMonitor *monitor;
+-    XfpmDisks       *disks;
+-    XfpmInhibit     *inhibit;
+-    EggIdletime     *idle;
++    DBusGConnection    *session_bus;
++
++    XfceSMClient       *client;
++
++    XfpmPower          *power;
++    XfpmButton         *button;
++    XfpmXfconf         *conf;
++    XfpmBacklight      *backlight;
++    XfpmKbdBacklight   *kbd_backlight;
++    XfpmConsoleKit     *console;
++    XfpmSystemd        *systemd;
++    XfpmDBusMonitor    *monitor;
++    XfpmDisks          *disks;
++    XfpmInhibit        *inhibit;
++    EggIdletime        *idle;
+ #ifdef HAVE_DPMS
+-    XfpmDpms        *dpms;
++    XfpmDpms           *dpms;
+ #endif
+-    GTimer        *timer;
++    GTimer           *timer;
+-    gboolean       inhibited;
+-    gboolean       session_managed;
++    gboolean          inhibited;
++    gboolean          session_managed;
+ };
+ G_DEFINE_TYPE (XfpmManager, xfpm_manager, G_TYPE_OBJECT)
+@@ -151,6 +153,8 @@ xfpm_manager_finalize (GObject *object)
+     g_object_unref (manager->priv->backlight);
++    g_object_unref (manager->priv->kbd_backlight);
++
+     G_OBJECT_CLASS (xfpm_manager_parent_class)->finalize (object);
+ }
+@@ -271,6 +275,9 @@ xfpm_manager_button_pressed_cb (XfpmButton *bt, XfpmButtonKey type, XfpmManager
+     if ( type == BUTTON_MON_BRIGHTNESS_DOWN || type == BUTTON_MON_BRIGHTNESS_UP )
+         return;
++    if ( type == BUTTON_KBD_BRIGHTNESS_DOWN || type == BUTTON_KBD_BRIGHTNESS_UP )
++        return;
++
+     if ( type == BUTTON_POWER_OFF )
+     {
+         g_object_get (G_OBJECT (manager->priv->conf),
+@@ -563,6 +570,8 @@ void xfpm_manager_start (XfpmManager *manager)
+     manager->priv->backlight = xfpm_backlight_new ();
++    manager->priv->kbd_backlight = xfpm_kbd_backlight_new ();
++
+ #ifdef HAVE_DPMS
+     manager->priv->dpms = xfpm_dpms_new ();
+ #endif
+-- 
+1.9.3
+
diff --git a/0151-Don-t-allow-systemd-to-handle-suspend-hibernate-even.patch b/0151-Don-t-allow-systemd-to-handle-suspend-hibernate-even.patch
new file mode 100644 (file)
index 0000000..0c094b3
--- /dev/null
@@ -0,0 +1,128 @@
+From c8824f344e8523bc48990e584493b8a2ef590699 Mon Sep 17 00:00:00 2001
+From: Mikhail Efremov <sem@altlinux.org>
+Date: Thu, 21 Feb 2013 15:03:44 +0400
+Subject: [PATCH 151/219] Don't allow systemd to handle suspend/hibernate
+ events.
+
+Signed-off-by: Eric Koegel <eric.koegel@gmail.com>
+---
+ src/xfpm-main.c | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 85 insertions(+), 2 deletions(-)
+
+diff --git a/src/xfpm-main.c b/src/xfpm-main.c
+index 40959c8..24dacae 100644
+--- a/src/xfpm-main.c
++++ b/src/xfpm-main.c
+@@ -194,16 +194,96 @@ xfpm_dump_remote (DBusGConnection *bus)
+     g_hash_table_destroy (hash);
+ }
++static gint
++xfpm_inhibit_sleep_systemd (DBusGConnection *bus)
++{
++    DBusConnection *bus_connection;
++    DBusMessage *message = NULL, *reply = NULL;
++    DBusError error;
++    gint fd = -1;
++    const char *what = "handle-power-key:handle-suspend-key:handle-hibernate-key:handle-lid-switch";
++    const char *who = "xfce4-power-manager";
++    const char *why = "xfce4-power-manager handles these events";
++    const char *mode = "block";
++
++    bus_connection = dbus_g_connection_get_connection (bus);
++    if (!xfpm_dbus_name_has_owner (bus_connection, "org.freedesktop.login1"))
++        return -1;
++
++    dbus_error_init (&error);
++
++    message = dbus_message_new_method_call ("org.freedesktop.login1",
++                                            "/org/freedesktop/login1",
++                                            "org.freedesktop.login1.Manager",
++                                            "Inhibit");
++
++    if (!message)
++    {
++        g_warning ("Unable to call Inhibit()");
++        goto done;
++    }
++
++
++    if (!dbus_message_append_args (message,
++                            DBUS_TYPE_STRING, &what,
++                            DBUS_TYPE_STRING, &who,
++                            DBUS_TYPE_STRING, &why,
++                            DBUS_TYPE_STRING, &mode,
++                            DBUS_TYPE_INVALID))
++    {
++        g_warning ("Unable to call Inhibit()");
++        goto done;
++    }
++
++
++    reply = dbus_connection_send_with_reply_and_block (bus_connection, message, -1, &error);
++    if (!reply)
++    {
++        g_warning ("Unable to inhibit systemd sleep: %s", error.message);
++        goto done;
++    }
++
++    if (!dbus_message_get_args (reply, &error,
++                                DBUS_TYPE_UNIX_FD, &fd,
++                                DBUS_TYPE_INVALID))
++    {
++        g_warning ("Inhibit() reply parsing failed: %s", error.message);
++    }
++
++done:
++
++    if (message)
++        dbus_message_unref (message);
++    if (reply)
++        dbus_message_unref (reply);
++    dbus_error_free (&error);
++
++    return fd;
++}
++
+ static void G_GNUC_NORETURN
+ xfpm_start (DBusGConnection *bus, const gchar *client_id, gboolean dump)
+ {
++    DBusGConnection *system_bus;
+     XfpmManager *manager;
+     GError *error = NULL;
++    gint inhibit_fd = -1;
+     
+     XFPM_DEBUG ("Starting the power manager");
+     
+     manager = xfpm_manager_new (bus, client_id);
+-    
++
++    /* Don't allow systemd to handle power/suspend/hibernate buttons
++     * and lid-switch */
++    system_bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
++    if (system_bus)
++        inhibit_fd = xfpm_inhibit_sleep_systemd (system_bus);
++    else
++    {
++        g_warning ("Unable connect to system bus: %s", error->message);
++        g_clear_error (&error);
++    }
++
+     if ( xfce_posix_signal_handler_init (&error)) 
+     {
+         xfce_posix_signal_handler_set_handler (SIGHUP,
+@@ -238,7 +318,10 @@ xfpm_start (DBusGConnection *bus, const gchar *client_id, gboolean dump)
+     gtk_main ();
+     
+     g_object_unref (manager);
+-    
++
++    if (inhibit_fd >= 0)
++        close (inhibit_fd);
++
+     exit (EXIT_SUCCESS);
+ }
+-- 
+1.9.3
+
diff --git a/0152-xfpm-power-info-add-current-percentage-of-batteries.patch b/0152-xfpm-power-info-add-current-percentage-of-batteries.patch
new file mode 100644 (file)
index 0000000..03d73a5
--- /dev/null
@@ -0,0 +1,41 @@
+From 12a6838500c368b6319119172ed1b8a10f044d7c Mon Sep 17 00:00:00 2001
+From: Stefan Seyfried <seife+obs@b1-systems.com>
+Date: Fri, 27 Apr 2012 11:38:59 +0200
+Subject: [PATCH 152/219] xfpm-power-info: add current percentage of batteries
+
+a bluetooth mouse's battery might not have any Energy* properties (all
+zero), but a Percentage property, so it might be useful to show that.
+
+Signed-off-by: Eric Koegel <eric.koegel@gmail.com>
+---
+ src/xfpm-power-info.c | 14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+diff --git a/src/xfpm-power-info.c b/src/xfpm-power-info.c
+index f0c9e50..a53a6be 100644
+--- a/src/xfpm-power-info.c
++++ b/src/xfpm-power-info.c
+@@ -410,6 +410,20 @@ xfpm_info_add_device_view (XfpmInfo *info, GHashTable *props, const gchar *objec
+           i++;
+       }
+       
++      value = g_hash_table_lookup (props, "Percentage");
++
++      if ( value )
++      {
++          str = g_strdup_printf("%d", (guint) g_value_get_double (value));
++          gtk_list_store_append (list_store, &iter);
++          gtk_list_store_set (list_store, &iter,
++                              XFPM_DEVICE_INFO_NAME, _("Energy percent"),
++                              XFPM_DEVICE_INFO_VALUE, str,
++                              -1);
++          i++;
++          g_free(str);
++      }
++
+       /* TRANSLATORS: Unit here is What hour*/
+       str = xfpm_info_get_energy_property (props, "EnergyFullDesign", _("Wh"));
+       
+-- 
+1.9.3
+
diff --git a/0153-xfpm-battery-do-not-show-an-icon-for-HID-devices.patch b/0153-xfpm-battery-do-not-show-an-icon-for-HID-devices.patch
new file mode 100644 (file)
index 0000000..0cdcace
--- /dev/null
@@ -0,0 +1,47 @@
+From f8cbc326354c32c010b8656625aa3e105fd01a31 Mon Sep 17 00:00:00 2001
+From: Stefan Seyfried <seife+obs@b1-systems.com>
+Date: Fri, 27 Apr 2012 11:03:17 +0200
+Subject: [PATCH 153/219] xfpm-battery: do not show an icon for HID devices
+
+my bluetooth mouse always shows up as a second battery which is not too
+useful -- ignore devices starting with "hid-"
+TODO: check if this affects UPSs.
+
+Signed-off-by: Eric Koegel <eric.koegel@gmail.com>
+---
+ src/xfpm-battery.c | 15 +++++++++++++++
+ 1 file changed, 15 insertions(+)
+
+diff --git a/src/xfpm-battery.c b/src/xfpm-battery.c
+index 31576d6..2034c60 100644
+--- a/src/xfpm-battery.c
++++ b/src/xfpm-battery.c
+@@ -608,10 +608,25 @@ static void
+ xfpm_battery_changed_cb (DBusGProxy *proxy, XfpmBattery *battery)
+ {
+     GHashTable *props;
++    GValue *value;
++    const gchar *cstr;
++    const gchar *p;
+     props = xfpm_power_get_interface_properties (battery->priv->proxy_prop,
+                                                UPOWER_IFACE_DEVICE);
++    value = g_hash_table_lookup (props, "NativePath");
++    if ( value )
++    {
++      cstr = g_value_get_string (value);
++      p = strrchr (cstr, '/');
++      if ( p && (strncmp( p, "/hid-", 5 ) == 0) )
++      {
++          XFPM_DEBUG("Ignoring battery '%s' - is a HID device\n", cstr);
++          return;
++      }
++    }
++
+     if ( props )
+       xfpm_battery_refresh (battery, props);
+ }
+-- 
+1.9.3
+
diff --git a/0154-Update-xfce4-session-lock-screen-setting.patch b/0154-Update-xfce4-session-lock-screen-setting.patch
new file mode 100644 (file)
index 0000000..bc58bd5
--- /dev/null
@@ -0,0 +1,137 @@
+From bed10b8068d549bf0dd59542c90dec9f6b576e64 Mon Sep 17 00:00:00 2001
+From: Eric Koegel <eric.koegel@gmail.com>
+Date: Sun, 6 Apr 2014 18:13:25 +0300
+Subject: [PATCH 154/219] Update xfce4-session lock-screen setting
+
+When xfpm changes it's lock-screen setting, it will also attempt
+to update xfce4-session. Additionally, xfpm will watch session's
+lock-screen setting and update its own. This way there is one
+single setting for both programs in the future, however xfpm will
+continue to function stand-alone.
+---
+ settings/xfpm-settings.c |  8 +++++++-
+ src/xfpm-xfconf.c        | 52 ++++++++++++++++++++++++++++++++++++++++++++++--
+ 2 files changed, 57 insertions(+), 3 deletions(-)
+
+diff --git a/settings/xfpm-settings.c b/settings/xfpm-settings.c
+index 5275247..513503a 100644
+--- a/settings/xfpm-settings.c
++++ b/settings/xfpm-settings.c
+@@ -728,8 +728,14 @@ critical_level_value_changed_cb (GtkSpinButton *w, XfconfChannel *channel)
+ void
+ lock_screen_toggled_cb (GtkWidget *w, XfconfChannel *channel)
+ {
++    XfconfChannel *session_channel = xfconf_channel_get ("xfce4-session");
+     gboolean val = (gint) gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(w));
+-    
++
++    if ( !xfconf_channel_set_bool (session_channel, "/shutdown/LockScreen", val) )
++    {
++      g_critical ("Unable to set value for property %s\n", LOCK_SCREEN_ON_SLEEP);
++    }
++
+     if ( !xfconf_channel_set_bool (channel, PROPERTIES_PREFIX LOCK_SCREEN_ON_SLEEP, val) )
+     {
+       g_critical ("Unable to set value for property %s\n", LOCK_SCREEN_ON_SLEEP);
+diff --git a/src/xfpm-xfconf.c b/src/xfpm-xfconf.c
+index 7e1e086..7ef8ae8 100644
+--- a/src/xfpm-xfconf.c
++++ b/src/xfpm-xfconf.c
+@@ -44,6 +44,7 @@ static void xfpm_xfconf_finalize   (GObject *object);
+ struct XfpmXfconfPrivate
+ {
+     XfconfChannel     *channel;
++    XfconfChannel   *session_channel;
+     GValue              *values;
+ };
+@@ -180,12 +181,37 @@ xfpm_xfconf_property_changed_cb (XfconfChannel *channel, gchar *property,
+     if ( !g_str_has_prefix (property, PROPERTIES_PREFIX) || strlen (property) <= strlen (PROPERTIES_PREFIX) )
+       return;
+-    XFPM_DEBUG("Property modified: %s\n", property);
++    XFPM_DEBUG ("Property modified: %s\n", property);
+     
+     g_object_set_property (G_OBJECT (conf), property + strlen (PROPERTIES_PREFIX), value);
+ }
+ static void
++xfpm_xfsession_property_changed_cb (XfconfChannel *channel, gchar *property,
++                               GValue *value, XfpmXfconf *conf)
++{
++    /*FIXME: Set default for this key*/
++    if ( G_VALUE_TYPE(value) == G_TYPE_INVALID )
++        return;
++
++    XFPM_DEBUG ("property %s\n", property);
++
++    if ( g_strcmp0 (property, "/shutdown/LockScreen") != 0)
++        return;
++
++    /* sanity check */
++    if ( !G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) )
++        return;
++
++    XFPM_DEBUG ("Property modified: %s\n", property);
++
++    /* update xfconf which will update xfpm and keep things in sync */
++    xfconf_channel_set_bool (conf->priv->channel,
++                             PROPERTIES_PREFIX LOCK_SCREEN_ON_SLEEP,
++                             g_value_get_boolean(value));
++}
++
++static void
+ xfpm_xfconf_class_init (XfpmXfconfClass *klass)
+ {
+     GObjectClass *object_class = G_OBJECT_CLASS(klass);
+@@ -543,6 +569,7 @@ xfpm_xfconf_init (XfpmXfconf *conf)
+ {
+     GError *error = NULL;
+     gboolean channel_valid;
++    gboolean lock_screen;
+       
+     conf->priv = XFPM_XFCONF_GET_PRIVATE (conf);
+     
+@@ -557,9 +584,27 @@ xfpm_xfconf_init (XfpmXfconf *conf)
+     else
+     {
+       conf->priv->channel = xfconf_channel_new ("xfce4-power-manager");
++    conf->priv->session_channel = xfconf_channel_new ("xfce4-session");
++
++    /* if xfce4-session is around, sync to it on startup */
++    if ( xfconf_channel_has_property (conf->priv->session_channel, "/shutdown/LockScreen") )
++    {
++        lock_screen = xfconf_channel_get_bool (conf->priv->session_channel,
++                                               "/shutdown/LockScreen",
++                                               TRUE);
++
++        XFPM_DEBUG("lock screen %s", lock_screen ? "TRUE" : "FALSE");
++
++        g_object_set (G_OBJECT (conf), LOCK_SCREEN_ON_SLEEP, lock_screen, NULL);
++    }
+       g_signal_connect (conf->priv->channel, "property-changed",
+                         G_CALLBACK (xfpm_xfconf_property_changed_cb), conf);
++
++    /* watch for session's property change so we can stay in sync */
++    g_signal_connect (conf->priv->session_channel, "property-changed",
++              G_CALLBACK (xfpm_xfsession_property_changed_cb), conf);
++
+       channel_valid = TRUE;
+     }
+     xfpm_xfconf_load (conf, channel_valid);
+@@ -583,7 +628,10 @@ xfpm_xfconf_finalize(GObject *object)
+     
+     if (conf->priv->channel )
+       g_object_unref (conf->priv->channel);
+-    
++
++    if (conf->priv->session_channel )
++        g_object_unref (conf->priv->session_channel);
++
+     G_OBJECT_CLASS(xfpm_xfconf_parent_class)->finalize(object);
+ }
+-- 
+1.9.3
+
diff --git a/0155-Use-the-online-docs-for-help.patch b/0155-Use-the-online-docs-for-help.patch
new file mode 100644 (file)
index 0000000..917fc71
--- /dev/null
@@ -0,0 +1,1318 @@
+From 5add232a73e348b0aa56aedfb4cb75051e817c84 Mon Sep 17 00:00:00 2001
+From: Eric Koegel <eric.koegel@gmail.com>
+Date: Mon, 7 Apr 2014 20:15:45 +0300
+Subject: [PATCH 155/219] Use the online docs for help
+
+Point to the online docs for xfpm's help. This also fixes it where
+the help button was causing the preferences dialog to quit. Now
+xfpm will also display the help page when plugged into the settings
+dialog. This patch removes the old local docs as well.
+---
+ Makefile.am                                      |   6 +-
+ common/xfpm-common.c                             |   6 -
+ common/xfpm-common.h                             |   2 -
+ configure.ac.in                                  |   4 -
+ data/interfaces/xfpm-settings.ui                 |   4 +-
+ doc/C/Makefile.am                                |  21 -
+ doc/C/images/Makefile.am                         |  10 -
+ doc/C/images/xfpm-brightness-plugin.png          | Bin 3629 -> 0 bytes
+ doc/C/images/xfpm-context-menu.png               | Bin 12777 -> 0 bytes
+ doc/C/images/xfpm-extended-settings.png          | Bin 39242 -> 0 bytes
+ doc/C/images/xfpm-general-settings.png           | Bin 36129 -> 0 bytes
+ doc/C/xfce4-power-manager.html                   | 149 -----
+ doc/C/xfce4-power-manager.xml.in                 | 797 -----------------------
+ doc/Makefile.am                                  |   7 -
+ doc/xfce-nochunk.xsl                             | 270 --------
+ settings/xfce4-power-manager-settings.desktop.in |   3 +-
+ settings/xfpm-settings.c                         |   3 +-
+ src/xfpm-power.c                                 |   9 +-
+ 18 files changed, 15 insertions(+), 1276 deletions(-)
+ delete mode 100644 doc/C/Makefile.am
+ delete mode 100644 doc/C/images/Makefile.am
+ delete mode 100644 doc/C/images/xfpm-brightness-plugin.png
+ delete mode 100644 doc/C/images/xfpm-context-menu.png
+ delete mode 100644 doc/C/images/xfpm-extended-settings.png
+ delete mode 100644 doc/C/images/xfpm-general-settings.png
+ delete mode 100644 doc/C/xfce4-power-manager.html
+ delete mode 100644 doc/C/xfce4-power-manager.xml.in
+ delete mode 100644 doc/Makefile.am
+ delete mode 100644 doc/xfce-nochunk.xsl
+
+diff --git a/Makefile.am b/Makefile.am
+index 1c42d91..96a6738 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -11,8 +11,7 @@ SUBDIRS =            \
+       src             \
+       settings        \
+       $(plugins_dir)  \
+-      po              \
+-      doc
++      po
+ EXTRA_DIST =                  \
+@@ -41,9 +40,6 @@ dist-hook: ChangeLog
+ distclean-local:
+       rm -rf *.cache
+-html: Makefile
+-      make -C doc html
+-
+ dist-bz2: dist
+       zcat $(PACKAGE)-$(VERSION).tar.gz | \
+       bzip2 --best -c > $(PACKAGE)-$(VERSION).tar.bz2
+diff --git a/common/xfpm-common.c b/common/xfpm-common.c
+index ecfc6c9..b859f16 100644
+--- a/common/xfpm-common.c
++++ b/common/xfpm-common.c
+@@ -112,12 +112,6 @@ xfpm_preferences (void)
+     g_spawn_command_line_async ("xfce4-power-manager-settings", NULL);
+ }
+-void       
+-xfpm_help (void)
+-{
+-    g_spawn_command_line_async ("xfhelp4 xfce4-power-manager.html", NULL);
+-}
+-
+ void
+ xfpm_quit (void)
+ {
+diff --git a/common/xfpm-common.h b/common/xfpm-common.h
+index 2dce854..d5b181e 100644
+--- a/common/xfpm-common.h
++++ b/common/xfpm-common.h
+@@ -44,8 +44,6 @@ void         xfpm_lock_screen                (void);
+ void          xfpm_preferences                (void);
+-void          xfpm_help                       (void);
+-
+ void            xfpm_quit                       (void);
+ void          xfpm_about                      (GtkWidget *widget, 
+diff --git a/configure.ac b/configure.ac
+index 633b340..affba31 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -235,10 +235,6 @@ data/icons/scalable/Makefile
+ data/icons/scalable/status/Makefile
+ data/icons/scalable/actions/Makefile
+ data/interfaces/Makefile
+-doc/Makefile
+-doc/C/Makefile
+-doc/C/xfce4-power-manager.xml
+-doc/C/images/Makefile
+ po/Makefile.in
+ ])
+diff --git a/data/interfaces/xfpm-settings.ui b/data/interfaces/xfpm-settings.ui
+index 98f8710..fa8f72d 100644
+--- a/data/interfaces/xfpm-settings.ui
++++ b/data/interfaces/xfpm-settings.ui
+@@ -1425,8 +1425,8 @@
+       </object>
+     </child>
+     <action-widgets>
+-      <action-widget response="0">help-button</action-widget>
+-      <action-widget response="0">close-button</action-widget>
++      <action-widget response="-11">help-button</action-widget>
++      <action-widget response="-3">close-button</action-widget>
+     </action-widgets>
+   </object>
+   <object class="GtkAdjustment" id="adjustment10">
+diff --git a/doc/C/Makefile.am b/doc/C/Makefile.am
+deleted file mode 100644
+index 4fc661b..0000000
+--- a/doc/C/Makefile.am
++++ /dev/null
+@@ -1,21 +0,0 @@
+-SUBDIRS = \
+-       images
+-
+-noinst_DATA = \
+-      xfce4-power-manager.xml
+-
+-docdir=$(datadir)/xfce4/doc/C
+-
+-doc_DATA= \
+-      xfce4-power-manager.html
+-
+-EXTRA_DIST = $(noinst_DATA) $(doc_DATA)
+-
+-if MAINTAINER_MODE
+-if HAVE_XSLTPROC
+-
+-xfce4-power-manager.html: $(srcdir)/xfce4-power-manager.xml
+-      $(XSLTPROC) $(top_srcdir)/doc/xfce-nochunk.xsl $(srcdir)/xfce4-power-manager.xml
+-
+-endif
+-endif
+diff --git a/doc/C/images/Makefile.am b/doc/C/images/Makefile.am
+deleted file mode 100644
+index cfc3b3b..0000000
+--- a/doc/C/images/Makefile.am
++++ /dev/null
+@@ -1,10 +0,0 @@
+-imagesdir = $(datadir)/xfce4/doc/C/images
+-
+-images_DATA = xfpm-general-settings.png               \
+-              xfpm-extended-settings.png      \
+-            xfpm-context-menu.png             \
+-            xfpm-brightness-plugin.png
+-
+-EXTRA_DIST = $(images_DATA)
+-
+-
+diff --git a/doc/C/xfce4-power-manager.xml.in b/doc/C/xfce4-power-manager.xml.in
+deleted file mode 100644
+index 5c7c292..0000000
+--- a/doc/C/xfce4-power-manager.xml.in
++++ /dev/null
+@@ -1,797 +0,0 @@
+-<?xml version='1.0'?> 
+-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" 
+-          "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
+-  <!ENTITY date "October 2008"> 
+-  <!ENTITY appversion "@PACKAGE_VERSION@"> 
+-  <!ENTITY app "<application>@PACKAGE_NAME@</application>"> 
+-]>
+-
+-<article id="xfce4-power-manager" lang="en">
+-<!-- Header --> 
+-<articleinfo>
+-
+-  <title>Xfce 4 Power Manager</title>
+- 
+-  <copyright>
+-    <year>2008</year> <holder>Ali Abdallah</holder>
+-  </copyright>
+-
+-
+-<authorgroup>
+-
+-    <author>
+-      <firstname>Ali</firstname> <surname>Abdallah</surname>
+-      <affiliation>
+-      <address><email>aliov@xfce.org</email></address>
+-      </affiliation>
+-    </author>
+-    
+-<!-- This is appropriate place for other contributors: translators,
+-maintainers, etc. Commented out by default.
+-
+-    <othercredit role="translator">
+-      <firstname>Latin</firstname> <surname>Translator 1</surname>
+-      <affiliation>
+-      <orgname>Latin Translation Team</orgname>
+-      <address><email>translator@gnome.org</email> </address>
+-      </affiliation> <contrib>Latin translation</contrib>
+-    </othercredit>
+--->
+-
+-</authorgroup>
+-
+-<releaseinfo>This manual describes &app; version &appversion;
+-</releaseinfo>
+-
+-</articleinfo>
+-
+-  <!-- extra space -->
+-  <para>&nbsp;</para>
+-    
+-<sect1 id="xfpm-intro">
+-  <title>Introduction</title>
+- This software is a power manager for the Xfce desktop, Xfce power manager manages the power sources on the computer and the devices that can 
+- be controlled to reduce their power consumption (such as LCD brightness level, monitor sleep, CPU frequency scaling). 
+- In addition, xfce4-power-manager provides a set of freedesktop-compliant DBus interfaces to inform other applications about current power level so that 
+- they can adjust their power consumption, and it provides the inhibit interface which allows applications to prevent automatic sleep actions via the power manager; 
+- as an example, the operating system’s package manager should make use of this interface while it is performing update operations.
+-  
+-  <sect2 id="xfpm-started">
+-  
+-  <title>Getting Started</title>
+-  <para>If your distribution doesn't come with a default installation of &app; usually when you install it, it will be started next time you log into your Xfce desktop.
+-  In order to start it manually you just need to run  the following command &app; from your terminal emulator. Please note that running this &app; command 
+-  will cause the power manager to run in daemon mode. You can optionally add --no-daemon as a command line argument to disable this behaviour, 
+-  This can be useful if you want to see debugging outputs from your terminal emulator.
+-  </para>
+-   
+-  </sect2>
+-   
+-
+-</sect1>
+-
+- <!-- extra space -->
+-  <para>&nbsp;</para>
+- 
+- <sect1 id="xfpm">
+- <title>Power Manager</title>
+-
+-<sect2 id="xfpm-command-line">
+-<title>Command line options</title>
+-
+-<variablelist><title></title>
+-
+-      <varlistentry><term><keycap>--no-daemon</keycap></term>
+-      <listitem>
+-      <para>
+-      Starts the power manager in non-daemon mode: useful for debugging.
+-      </para>
+-      </listitem>
+-      </varlistentry>
+-      
+-    <varlistentry><term><keycap>--restart</keycap></term>
+-      <listitem>
+-      <para>
+-      Restarts the power manager.
+-      </para>
+-      </listitem>
+-      </varlistentry> 
+-      
+-    <varlistentry><term><keycap>--quit</keycap></term>
+-      <listitem>
+-      <para>
+-      Causes any running instance of the power manager to exit.
+-      </para>
+-      </listitem>
+-      </varlistentry> 
+-      
+-</variablelist>
+-
+-</sect2> 
+- 
+-<sect2 id="xfpm-menu">
+-<title>Context menu</title>
+-
+-<para><figure float="0">
+-      <title>Context menu</title>
+-      <screenshot><mediaobject>
+-      <imageobject>
+-      <imagedata fileref="images/xfpm-context-menu.png" format="png"/>
+-      </imageobject>
+-      <textobject>
+-      <phrase></phrase>
+-      </textobject>
+-      </mediaobject></screenshot>
+-</figure></para>
+-
+-<para>
+-The context menu pops up when you click on the icon placed in your notification area for example a battery or an adapter icon. It contains some useful options like suspend/hibernate,
+-display information of the battery device and open the settings dialog. It contains as well option to inhibit the power manager. If enabled, the power manager will not attempt
+-to dim the screen or switch off the monitor.
+-
+-<note><para>If the inhibit option is selected and the computer is in idle for a long time the power manager will not put the system in suspend or hibernate, even
+-if it is enabled in the settings dialog. Only critical actions are processed.</para></note>
+-
+-</para>
+-
+-</sect2> 
+-  </sect1>
+-  
+-  <!--- Xfpm configurations --> 
+- 
+-<sect1 id="xfpm-configuration">
+-  <title>Power Manager Configuration</title>
+-  <para>
+-  In this section we will explain in details the possible configuration of the power manager running on laptop computer. Please note that the configurations are different when 
+-  the power manager is running on a desktop computer, for example you will not have LCD brightness etc.
+-  </para>
+-  
+-  <sect2 id="xfpm-general">
+-  <title>General options</title>
+-
+-<para><figure float="0">
+-      <title>General settings</title>
+-      <screenshot><mediaobject>
+-      <imageobject>
+-      <imagedata fileref="images/xfpm-general-settings.png" format="png"/>
+-      </imageobject>
+-      <textobject>
+-      <phrase></phrase>
+-      </textobject>
+-      </mediaobject></screenshot>
+-</figure></para>
+-
+-<para>
+-
+-<variablelist><title></title>
+-
+-      <varlistentry>
+-      <term><keycap>Notification area:</keycap></term>
+-      <listitem>
+-      <para>The notification area settings allow you to control the behaviour of the icon placed in your notification area. You can set it to be always visible. For battery devices,
+-      you can select the icon to be visible only when your are running on battery for example.</para>
+-      </listitem>
+-      </varlistentry>
+-      
+-    <varlistentry>
+-      <term><keycap>Keyboard special keys:</keycap></term>
+-      <listitem>
+-      <para>
+-      Enable you to specify which key will trigger which action. These keys are not found on all the systems. For example, in the screen shot the hibernate key is missing
+-      since the screen shot was taken on a computer which doesn't have this key.
+-      The default action of all these keys is set to do nothing. 
+-      </para>
+-      </listitem>
+-      </varlistentry>
+-      
+-      <varlistentry>
+-      <term><keycap>Monitor power management control:</keycap></term>
+-      <listitem>
+-      <para>Enable/Disable the Display Power Management Signaling (DPMS).</para>
+-      </listitem>
+-      </varlistentry>
+-      
+-      <varlistentry>
+-      <term><keycap>Power manager Notification:</keycap></term>
+-      <listitem>
+-      <para>If the notification of a battery status change are annoying you, you can always disable them by unselecting the checkbox. Please note this
+-      doesn't apply on the notification that the power manager sends notifying the user of errors or that the system is running out of power.
+-       </para>
+-      </listitem>
+-      </varlistentry> 
+-      
+-</variablelist>
+-</para>  
+-  
+-  </sect2>  
+-  
+-   <sect2 id="xfpm-on-ac">
+-  <title>Running on  AC power</title>
+-
+-  <para>
+-  The on AC power tab contains self explanatory options such as lid close, system idle and monitor sleep configurations.   
+-  </para>
+-  
+-  </sect2> 
+-  
+-  <sect2 id="xfpm-on-battery">
+-  <title>Running on battery power</title>
+-  
+-<para>
+-The on battery tab is only shown on systems that have battery devices. It contains the same options as the AC power tabs plus two other important options:
+-
+-<variablelist><title></title>
+-
+-      <varlistentry><term><keycap>Power is critical</keycap></term>
+-      <listitem>
+-      <para>
+-      With this option you can specify the action taken by the power manager in case the system is running on low power. If this option is disabled and the computer
+-      is running on low battery power, the power manager will display a warning message.
+-      </para></listitem>
+-      </varlistentry>
+-      
+-      <varlistentry><term><keycap>Prefer power savings over performance:</keycap></term>
+-      <listitem>
+-      <para>
+-      This is the power profile when running on battery. With this option your battery will last more when running on battery power.
+-      Enabling this option is always a good idea.
+-      </para></listitem>
+-      </varlistentry>
+-      
+-</variablelist>
+-</para>  
+-  
+-  </sect2>   
+-  
+-  <sect2 id="xfpm-extended">
+-  <title>Extended options</title>
+-  
+-  <para><figure float="0">
+-      <title>Extended settings</title>
+-      <screenshot><mediaobject>
+-      <imageobject>
+-      <imagedata fileref="images/xfpm-extended-settings.png" format="png"/>
+-      </imageobject>
+-      <textobject>
+-      <phrase></phrase>
+-      </textobject>
+-      </mediaobject></screenshot>
+-</figure></para>
+-
+-<para>
+-<variablelist><title></title>
+-
+-      <varlistentry>
+-      <term><keycap>Inactivity sleep mode:</keycap></term>
+-      <listitem>
+-      <para>You can select the inactivity sleep action to be taken by the power manger when the system is idle for a interval of  time set by you
+-      either on ac power or on battery power. Of course if you disable idle timeout those settings will have no effects.</para>
+-      </listitem>
+-      </varlistentry>
+-      
+-    <varlistentry>
+-      <term><keycap>Monitor sleep mode:</keycap></term>
+-      <listitem>
+-      <para>
+-      DPMS sleep modes before switching off the monitor are either standby or suspend. They are technically different and provided for convenience.
+-      </para>
+-      </listitem>
+-      </varlistentry>
+-      
+-      <varlistentry>
+-      <term><keycap>Computer on low power level:</keycap></term>
+-      <listitem>
+-      <para>
+-      Ideally when the battery giving the main power to the computer reaches 10 percent of charge, the computer can be considered on low power. However, for some broken or old
+-      batteries the interval of time between 10 percent and a power cut is a matter of minutes if not seconds. You can adjust the level at which your computer will be considered on low power.
+-      <note><para>This option might disappear in future releases.</para></note>
+-
+-      </para>
+-      </listitem>
+-      </varlistentry>
+-      
+-      <varlistentry>
+-      <term><keycap>CPU Frequency control:</keycap></term>
+-      <listitem>
+-      <para>
+-      Unselecting this checkbox, the power manager don't attempt to play with the CPU frequency.
+-      </para>
+-      </listitem>
+-      </varlistentry> 
+-      
+-    <varlistentry>
+-      <term><keycap>Lock screen when going for suspend/hibernate:</keycap></term>
+-      <listitem>
+-      <para>
+-      Just tell your power manager if it should lock the screen before suspending or hibernating the computer. It is enabled by default.
+-      </para>
+-      </listitem>
+-      </varlistentry>         
+-      
+-</variablelist>
+-      
+-</para>
+-
+-</sect2>
+-
+-<!-- Hidden options -->
+-<sect2 id="xfpm-hidden-options">
+-<title>Hidden options</title>
+-
+-<para>
+-Hidden options are the options that in normal situations one should not be changed, but these options are provided in case of misbehaviour of the backend
+-that the power manager is relying on.
+-</para>
+-
+-<para>
+-Since &app; relies on xfconf to store and retreive configurations, you can change any settings by using xfconf-query or by using your Xfce settings editor.
+-</para>
+-
+-<variablelist><title></title>
+-
+-      <varlistentry><term>LCD Brightness</term>
+-      <listitem>
+-      
+-      <para>
+-       The &app; detects brightness key events and interacts with the backend to update the brightness level. This might be problematic on some systems therefore the key
+-      "/xfce4-power-manager/change-brightness-on-key-events" is provided. Just set this key to false if you have any such problem. Please refer
+-    to the xfconf-query manual, but as an example you can disable this property by running the following command.
+-       
+-      <programlisting>xfconf-query -c &app; -n -p "/&app;/change-brightness-on-key-events" -t bool -s false</programlisting>
+-       
+-      </para>
+-      
+-      </listitem>
+-      
+-      </varlistentry>
+-      
+-<varlistentry><term>Disabling Brightness popup</term>
+-      <listitem>
+-      
+-      <para>
+-      If you want for some reason to disable the brightness popup indicator (the one which popup to display the brightness level), just run the following command
+-      in your terminal. 
+-       
+-      <programlisting>xfconf-query -c &app; -n -p "/&app;/show-brightness-popup" -t bool -s false</programlisting>
+-       
+-      </para>
+-      
+-      </listitem>
+-      
+-      </varlistentry> 
+-      
+-</variablelist>
+-
+-</sect2>
+-   
+-  
+-</sect1>
+-
+-<!-- Panel Plugins -->
+-<sect1 id="xfpm-plugins">
+-<title> Panel plugins </title>
+-
+-<para><figure float="0">
+-      <title>Brightness plugin</title>
+-      <screenshot><mediaobject>
+-      <imageobject>
+-      <imagedata fileref="images/xfpm-brightness-plugin.png" format="png"/>
+-      </imageobject>
+-      <textobject>
+-      <phrase></phrase>
+-      </textobject>
+-      </mediaobject></screenshot>
+-</figure></para>
+-
+-<para>
+-&app; version &appversion; includes one panel plugin for LCD brightness control (possible other plugins might be added for future releases). The usage of the brightness plugin
+-is simple; just add the plugin to the panel same way  as the one used to add any other plugin; then click on the plugin; a slider will pop up that you move/scroll on it to change
+-the brightness level of your screen. Of course the plugin will not work on a system with no back light panel. 
+-</para>
+-
+-</sect1>
+-
+- <!-- extra space -->
+-  <para>&nbsp;</para>
+-  
+-<sect1 id="xfpm-faq">
+-  <title>FAQ</title>
+-  <variablelist>
+-
+-   <varlistentry>
+-      <term>Q: Why the icons look very similar to the icon of gnome power manager?</term>
+-      <listitem>
+-      <para>A: No, they are not similar; they are the same. Just there is no point of re-drawing icons.
+-      gnome power manager icons are good enough. Not all the gnome power manager icons are used. Please note that 
+-      for version &appversion; the icons are renamed to avoid possible conflicts with a gnome power manager installation.   
+-      </para>
+-      </listitem>
+-      </varlistentry>
+-
+-       <varlistentry>
+-      <term>Q: What is the difference between suspend and hibernate?</term>
+-      <listitem>
+-      <para>A: Suspend is a power save feature. When suspending, the computer is still using power,
+-      since the running applications are kept in the memory, but it is the lowest power level that the computer
+-      can use. While Hibernate saves the system state on the hard drive and turns off the power, when you start up your 
+-      computer        again those data will be loaded and the system back up. 
+-      </para>
+-      </listitem>
+-      </varlistentry>
+-      
+-       <varlistentry>
+-      <term>Q: Why the options of suspend/hibernate are not there or I can not select them?</term>
+-      <listitem>
+-      <para>A: Many possible reasons, for example your kernel is not compiled with suspend/hibernate options.
+-      Another possible reason is the fact that you don't have engough premission to use them.
+-      </para>
+-      </listitem>
+-      </varlistentry>
+-      
+-   <varlistentry>
+-      <term>Q: I had put my computer into suspend or hibernate mode, but the computer is not waking up?</term>
+-      <listitem>
+-      <para>A: This was subject for many bug reports, please note that the power manager has nothing to do with these problems, since the kernel
+-      is responsible of these tasks. The kernel team are puting a lot of efforts into fixing these kind of problems, if you still have troubles please
+-      report a bug to your distribution provider, they can contact the kernel team and possibly they can provide you a work-around.  
+-      </para>
+-      </listitem>
+-      </varlistentry> 
+-              
+-       <varlistentry>
+-      <term>Q: I'm not able to control my laptop brightness and/or my brightness plug in is reporting no device found?</term>
+-      <listitem>
+-      
+-      <para>A: One possible reason is the fact that the correct kernel driver is missing or doesn't exist for your laptop brightness panel, you can debug this fact by running this
+-      command:  
+-      <programlisting>lshal > output.txt</programlisting>
+-      then search in output.txt for "laptop_panel", if you don't find this key this means a driver problem, but in the other hand if you find it then come to us complaining.
+-      </para>
+-      
+-      </listitem>
+-      </varlistentry>
+-                      
+-</variablelist>
+-
+-</sect1>  
+-
+-
+-<!-- Technical stuff -->
+-<sect1 id="xfpm-technical">
+- <title>
+- Technical information
+- </title>
+- 
+-<para>
+-Ideally these details should go in a technical guide not the user guide, but we need someplace to keep this information, please
+- ignore if these is not what you are looking for.
+-</para> 
+- 
+- <sect2 id="xfpm-dbus">
+- <title>DBus interfaces</title>
+- 
+- <para>
+- in this section the DBus interfaces provided by &app; are expanded, those interfaces listed here are freedesktop compliant power
+- management interfaces. This section might be useful if you are developing an application and wishing to use these interfaces, or they
+- can be useful for debugging purpose.
+- 
+- </para>
+- 
+-<keycap>Power management DBus interface.</keycap>
+-
+-<para>
+-
+-<table frame='all'><title>Standard methods (org.freedesktop.PowerManagement):</title>
+-<tgroup cols='5' align='left' colsep='1' rowsep='1'>
+-<colspec colname='c1'/>
+-<colspec colname='c2'/>
+-<colspec colname='c3'/>
+-<colspec colnum='5' colname='c5'/>
+-
+-<thead>
+-<row>
+-  <entry namest="c1" nameend="c2" align="center">Name</entry>
+-  <entry>Input parameter</entry>
+-  <entry>Return Values</entry>
+-  <entry>Errors</entry>
+-  <entry>Description</entry>
+-</row>
+-</thead>
+-
+-<thead>
+-<row>
+-  <entry namest="c1" nameend="c2" align="center">CanHibernate</entry>
+-  <entry></entry>
+-  <entry>bool</entry>
+-  <entry></entry>
+-  <entry>whether the system is able to hibernate</entry>
+-</row>
+-</thead>
+-
+-<thead>
+-<row>
+-  <entry namest="c1" nameend="c2" align="center">CanSuspend</entry>
+-  <entry></entry>
+-  <entry>bool</entry>
+-  <entry></entry>
+-  <entry>whether the system is able to suspend</entry>
+-</row>
+-</thead>
+-
+-<thead>
+-<row>
+-  <entry namest="c1" nameend="c2" align="center">CanReboot</entry>
+-  <entry></entry>
+-  <entry>bool</entry>
+-  <entry></entry>
+-  <entry>whether the system is able to reboot</entry>
+-</row>
+-</thead>
+-
+-<thead>
+-<row>
+-  <entry namest="c1" nameend="c2" align="center">CanShutdown</entry>
+-  <entry></entry>
+-  <entry>bool</entry>
+-  <entry></entry>
+-  <entry>whether the system is able to shutdown</entry>
+-</row>
+-</thead>
+-
+-<thead>
+-<row>
+-  <entry namest="c1" nameend="c2" align="center">GetOnBattery</entry>
+-  <entry></entry>
+-  <entry>bool</entry>
+-  <entry></entry>
+-  <entry>whether the system is running on battery</entry>
+-</row>
+-</thead>
+-
+-<thead>
+-<row>
+-  <entry namest="c1" nameend="c2" align="center">GetLowBattery</entry>
+-  <entry></entry>
+-  <entry>bool</entry>
+-  <entry></entry>
+-  <entry>whether the system is running on low battery</entry>
+-</row>
+-</thead>
+-
+-<thead>
+-<row>
+-  <entry namest="c1" nameend="c2" align="center">GetPowerSaveStatus</entry>
+-  <entry></entry>
+-  <entry>bool</entry>
+-  <entry></entry>
+-  <entry>whether the system is running in power save mode.</entry>
+-</row>
+-</thead>
+-
+-
+-<thead>
+-<row>
+-  <entry namest="c1" nameend="c2" align="center">Hibernate</entry>
+-  <entry></entry>
+-  <entry></entry>
+-  <entry>PermissionDenied, NoHardwareSupport</entry>
+-  <entry></entry>
+-</row>
+-</thead>
+-
+-<thead>
+-<row>
+-  <entry namest="c1" nameend="c2" align="center">Suspend</entry>
+-  <entry></entry>
+-  <entry></entry>
+-  <entry>PermissionDenied, NoHardwareSupport</entry>
+-  <entry></entry>
+-</row>
+-</thead>
+-
+-<thead>
+-<row>
+-  <entry namest="c1" nameend="c2" align="center">Reboot</entry>
+-  <entry></entry>
+-  <entry></entry>
+-  <entry>PermissionDenied, NoHardwareSupport</entry>
+-  <entry></entry>
+-</row>
+-</thead>
+-
+-<thead>
+-<row>
+-  <entry namest="c1" nameend="c2" align="center">Shutdown</entry>
+-  <entry></entry>
+-  <entry></entry>
+-  <entry>PermissionDenied, NoHardwareSupport</entry>
+-  <entry></entry>
+-</row>
+-</thead>
+-
+-</tgroup>
+-</table>
+-
+-<!-- Signals -->
+-    <table frame='all'><title>Standard signals (org.freedesktop.PowerManagement):</title>
+-<tgroup cols='3' align='left' colsep='1' rowsep='1'>
+-<colspec colname='c1'/>
+-<colspec colname='c2'/>
+-<colspec colname='c3'/>
+-
+-<thead>
+-<row>
+-  <entry namest="c1" nameend="c2" align="center">Name</entry>
+-  <entry>Values</entry>
+-  <entry>Description</entry>
+-</row>
+-</thead>
+-
+-<thead>
+-<row>
+-  <entry namest="c1" nameend="c2" align="center">OnBatteryChanged</entry>
+-  <entry>bool</entry>
+-  <entry>whether on battery status changed</entry>
+-</row>
+-</thead>
+-
+-<thead>
+-<row>
+-  <entry namest="c1" nameend="c2" align="center">LowBatteryChanged</entry>
+-  <entry>bool</entry>
+-  <entry>whether on low battery status changed</entry>
+-</row>
+-</thead>
+-
+-</tgroup>
+-</table>
+-
+-</para>
+-
+- <keycap>Power management DBus inhibit interface.</keycap>
+-
+-<para>
+-
+-<table frame='all'><title>Standard methods (org.freedesktop.PowerManagement.Inhibit):</title>
+-<tgroup cols='5' align='left' colsep='1' rowsep='1'>
+-<colspec colname='c1'/>
+-<colspec colname='c2'/>
+-<colspec colname='c3'/>
+-<colspec colnum='5' colname='c5'/>
+-
+-<thead>
+-<row>
+-  <entry namest="c1" nameend="c2" align="center">Name</entry>
+-  <entry>Input parameter</entry>
+-  <entry>Return Values</entry>
+-  <entry>Errors</entry>
+-  <entry>Description</entry>
+-</row>
+-</thead>
+-
+-<thead>
+-<row>
+-  <entry namest="c1" nameend="c2" align="center">Inhibit</entry>
+-  <entry>string application name, string reason</entry>
+-  <entry>uint32 (random cookie)</entry>
+-  <entry></entry>
+-  <entry>Inhibit the power manager.</entry>
+-</row>
+-</thead>
+-
+-<thead>
+-<row>
+-  <entry namest="c1" nameend="c2" align="center">UnInhibit</entry>
+-  <entry>uint32 cookie</entry>
+-  <entry></entry>
+-  <entry>InvalidCookie</entry>
+-  <entry>Unihibit the power manager.</entry>
+-</row>
+-</thead>
+-
+-<thead>
+-<row>
+-  <entry namest="c1" nameend="c2" align="center">HasInhibit</entry>
+-  <entry></entry>
+-  <entry>bool</entry>
+-  <entry></entry>
+-  <entry>Whether the power manager is currently inhibited or not.</entry>
+-</row>
+-</thead>
+-
+-<thead>
+-<row>
+-  <entry namest="c1" nameend="c2" align="center">GetInhibitors</entry>
+-  <entry></entry>
+-  <entry>Array of strings</entry>
+-  <entry></entry>
+-  <entry>List all the applications currently inhibiting the power manager (Not standard, use just for debugging)</entry>
+-</row>
+-</thead>
+-
+-</tgroup>
+-</table>
+-
+-<!-- Signals -->
+-    <table frame='all'><title>Standard signals (org.freedesktop.PowerManagement.Inhibit):</title>
+-<tgroup cols='3' align='left' colsep='1' rowsep='1'>
+-<colspec colname='c1'/>
+-<colspec colname='c2'/>
+-<colspec colname='c3'/>
+-
+-<thead>
+-<row>
+-  <entry namest="c1" nameend="c2" align="center">Name</entry>
+-  <entry>Values</entry>
+-  <entry>Description</entry>
+-</row>
+-</thead>
+-
+-<thead>
+-<row>
+-  <entry namest="c1" nameend="c2" align="center">HasInhibitChanged</entry>
+-  <entry>bool</entry>
+-  <entry>whether the inhibit status changed.</entry>
+-</row>
+-</thead>
+-
+-</tgroup>
+-</table>
+-
+-</para>
+-
+-
+-<para>
+-In addition, &app; has other interfaces, but those interfaces are mainly used internally, for example the settings application uses such interface to
+-get information about the current status of the running instance of the power manager.
+-</para>
+-
+-</sect2>
+-
+-</sect1>
+-
+-
+-<!-- ABOUT -->
+-
+- <!-- extra space -->
+-  <para>&nbsp;</para>
+-<sect1 id="xfpm-about">
+-  <title>About &app;</title>
+-  <para>
+-      This power manager was written following the philosophy of Xfce, having light weight application that does
+-      what the user is expecting from it.
+-      </para>
+-
+-  <para>To report a bug or make a suggestion regarding this application or
+-    this manual, use the bug tracking system at <ulink 
+-      url="http://bugzilla.xfce.org/" 
+-      type="http">http://bugzilla.xfce.org/</ulink>. 
+-  </para>
+-
+-  <para>If you have questions about the use or installation of this package,
+-    please ask on the <ulink 
+-      url="http://lunar-linux.org/mailman/listinfo/xfce"
+-      type="http">xfce</ulink> mailing list. Development discussion takes
+-    place on the <ulink 
+-      url="http://lunar-linux.org/mailman/listinfo/xfce4-dev"
+-      type="http">xfce4-dev</ulink> mailing list
+-    or on  <ulink 
+-      url="http://lunar-linux.org/mailman/listinfo/xfce4-goodies-dev"
+-      type="http">xfce4-goodies-dev</ulink> mailing list.
+-  </para>
+-  
+-</sect1>  
+-
+- <!-- extra space -->
+-  <para>&nbsp;</para>
+-  <para> This program is distributed under the terms of the
+-    GNU General Public License as published by the Free Software Foundation; 
+-    either version 2 of the License, or (at your option) any later version.
+-  </para>
+-
+-  <para>You should have received a copy of the GNU General Public License 
+-    along with this program; if not, write to the Free Software 
+-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA.
+-  </para>
+-
+-</article>
+diff --git a/doc/Makefile.am b/doc/Makefile.am
+deleted file mode 100644
+index b951679..0000000
+--- a/doc/Makefile.am
++++ /dev/null
+@@ -1,7 +0,0 @@
+-SUBDIRS = \
+-      C 
+-
+-noinst_DATA = \
+-      xfce-nochunk.xsl
+-
+-EXTRA_DIST = $(noinst_DATA)
+\ No newline at end of file
+diff --git a/doc/xfce-nochunk.xsl b/doc/xfce-nochunk.xsl
+deleted file mode 100644
+index 3dae476..0000000
+--- a/doc/xfce-nochunk.xsl
++++ /dev/null
+@@ -1,270 +0,0 @@
+-<?xml version='1.0'?>
+-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+-                version='1.0'
+-                xmlns="http://www.w3.org/TR/xhtml1/transitional"
+-                exclude-result-prefixes="#default">
+-
+-<!-- Load onechunk.xsl stylesheet 
+-     TODO: how can I put a location independent link here?
+-This should work. The url can be translated to a local one in the catalog
+-file"
+--->
+-<xsl:import href="http://docbook.sourceforge.net/release/xsl/current/html/onechunk.xsl"/>
+-
+-<xsl:param name="suppress.navigation">1</xsl:param>
+-
+-<!-- Use stylesheet -->
+-<xsl:param name="html.stylesheet" select="'../xfce.css'"/>
+-
+-<!-- labels and numbering -->
+-<xsl:param name="autotoc.label.separator" select="'. '"/>
+-<xsl:param name="chapter.autolabel" select="1"/>
+-
+-<!-- Don't force the use of index.html as root filename -->
+-<xsl:param name="root.filename" select="''"/>
+-
+-<!--  Use element id (if present) as file name  -->
+-<xsl:variable name="use.id.as.filename">1</xsl:variable>
+-
+-<xsl:template match="releaseinfo" mode="titlepage.mode">
+-  <span class="{name(.)}">
+-    <xsl:apply-templates mode="titlepage.mode"/>
+-    <br/>
+-  </span>
+-</xsl:template>
+-
+-<!-- Use graphics in admonitions (note, warning, etc)  -->
+-<xsl:variable name="admon.graphics">0</xsl:variable>
+-
+-<xsl:param name="admon.style">
+-      <xsl:text>text-align: left;</xsl:text></xsl:param>
+-
+-<xsl:variable name="admon.graphics.path">stylesheet-images/</xsl:variable>
+-
+-<xsl:variable name="admon.graphics.extension">.gif</xsl:variable>
+-
+-<xsl:param name="table.border.thickness" select="'0.2pt'"/>
+-
+-<xsl:param name="graphic.default.extension" select="png"/>
+-
+-<xsl:attribute-set name="shade.verbatim.style">
+-      <xsl:attribute name="border">0</xsl:attribute>
+-      <xsl:attribute name="bgcolor">#F3F4F8</xsl:attribute>
+-      <xsl:attribute name="width">100%</xsl:attribute>
+-</xsl:attribute-set>
+-
+-<!-- Addition by Jasper Huijsmans to be able to set background color -->
+-<!-- and cell attributes. -->
+-<!-- This requires an adapted template for tgroup (see end of stylesheet) -->
+-<xsl:attribute-set name="table.style">
+-      <xsl:attribute name="bgcolor">#F8F9FD</xsl:attribute>
+-      <xsl:attribute name="cellspacing">0</xsl:attribute>
+-      <xsl:attribute name="cellpadding">4</xsl:attribute> 
+-</xsl:attribute-set>
+-
+-
+-<xsl:param name="generate.legalnotice.link" select="0"/>
+-
+-<xsl:param name="shade.verbatim" select="1"/>
+-
+-<!-- set font styles for various tags   -->
+-<xsl:template match="guibutton">
+-<xsl:call-template name="inline.boldseq"/>
+-</xsl:template>
+-
+-<xsl:template match="guiicon">
+-<xsl:call-template name="inline.boldseq"/>
+-</xsl:template>
+-
+-<xsl:template match="guilabel">
+-<xsl:call-template name="inline.boldseq"/>
+-</xsl:template>
+-
+-<xsl:template match="guimenu">
+-<xsl:call-template name="inline.boldseq"/>
+-</xsl:template>
+-
+-<xsl:template match="guimenuitem">
+-<xsl:call-template name="inline.boldseq"/>
+-</xsl:template>
+-
+-<xsl:template match="guisubmenu">
+-<xsl:call-template name="inline.boldseq"/>
+-</xsl:template>
+-
+-<xsl:template match="application">
+-<xsl:call-template name="inline.boldmonoseq"/>
+-</xsl:template>
+-
+-<xsl:template match="caption">
+-<xsl:call-template name="inline.boldseq"/>
+-</xsl:template>
+-
+-<!-- Adapted template for tgroup. The only change is the addition of -->
+-<!-- table.style attributes -->
+-<xsl:template match="tgroup">
+-  <table xsl:use-attribute-sets="table.style">
+-    <xsl:choose>
+-      <!-- If there's a <?dbhtml table-summary="foo"?> PI, use it for
+-           the HTML table summary attribute -->
+-      <xsl:when test="processing-instruction('dbhtml')">
+-        <xsl:variable name="summary">
+-          <xsl:call-template name="dbhtml-attribute">
+-            <xsl:with-param name="pis"
+-                            select="processing-instruction('dbhtml')[1]"/>
+-            <xsl:with-param name="attribute" select="'table-summary'"/>
+-          </xsl:call-template>
+-        </xsl:variable>
+-        <xsl:if test="$summary != ''">
+-          <xsl:attribute name="summary">
+-            <xsl:value-of select="$summary"/>
+-          </xsl:attribute>
+-        </xsl:if>
+-      </xsl:when>
+-      <!-- Otherwise, if there's a title, use that -->
+-      <xsl:when test="../title">
+-        <xsl:attribute name="summary">
+-          <xsl:value-of select="string(../title)"/>
+-        </xsl:attribute>
+-      </xsl:when>
+-      <!-- Otherwise, forget the whole idea -->
+-      <xsl:otherwise><!-- nevermind --></xsl:otherwise>
+-    </xsl:choose>
+-
+-    <xsl:if test="../@pgwide=1">
+-      <xsl:attribute name="width">100%</xsl:attribute>
+-    </xsl:if>
+-
+-    <xsl:choose>
+-      <xsl:when test="../@frame='none'">
+-        <xsl:attribute name="border">0</xsl:attribute>
+-      </xsl:when>
+-      <xsl:when test="$table.borders.with.css != 0">
+-        <xsl:attribute name="border">0</xsl:attribute>
+-        <xsl:choose>
+-          <xsl:when test="../@frame='topbot' or ../@frame='top'">
+-            <xsl:attribute name="style">
+-              <xsl:call-template name="border">
+-                <xsl:with-param name="side" select="'top'"/>
+-              </xsl:call-template>
+-            </xsl:attribute>
+-          </xsl:when>
+-          <xsl:when test="../@frame='sides'">
+-            <xsl:attribute name="style">
+-              <xsl:call-template name="border">
+-                <xsl:with-param name="side" select="'left'"/>
+-              </xsl:call-template>
+-              <xsl:call-template name="border">
+-                <xsl:with-param name="side" select="'right'"/>
+-              </xsl:call-template>
+-            </xsl:attribute>
+-          </xsl:when>
+-        </xsl:choose>
+-      </xsl:when>
+-      <xsl:otherwise>
+-        <xsl:attribute name="border">1</xsl:attribute>
+-      </xsl:otherwise>
+-    </xsl:choose>
+-
+-    <xsl:variable name="colgroup">
+-      <colgroup>
+-        <xsl:call-template name="generate.colgroup">
+-          <xsl:with-param name="cols" select="@cols"/>
+-        </xsl:call-template>
+-      </colgroup>
+-    </xsl:variable>
+-
+-    <xsl:variable name="explicit.table.width">
+-      <xsl:call-template name="dbhtml-attribute">
+-        <xsl:with-param name="pis"
+-                        select="../processing-instruction('dbhtml')[1]"/>
+-        <xsl:with-param name="attribute" select="'table-width'"/>
+-      </xsl:call-template>
+-    </xsl:variable>
+-
+-    <xsl:variable name="table.width">
+-      <xsl:choose>
+-        <xsl:when test="$explicit.table.width != ''">
+-          <xsl:value-of select="$explicit.table.width"/>
+-        </xsl:when>
+-        <xsl:when test="$default.table.width = ''">
+-          <xsl:text>100%</xsl:text>
+-        </xsl:when>
+-        <xsl:otherwise>
+-          <xsl:value-of select="$default.table.width"/>
+-        </xsl:otherwise>
+-      </xsl:choose>
+-    </xsl:variable>
+-
+-    <xsl:if test="$default.table.width != ''
+-                  or $explicit.table.width != ''">
+-      <xsl:attribute name="width">
+-        <xsl:choose>
+-          <xsl:when test="contains($table.width, '%')">
+-            <xsl:value-of select="$table.width"/>
+-          </xsl:when>
+-          <xsl:when test="$use.extensions != 0
+-                          and $tablecolumns.extension != 0">
+-            <xsl:choose>
+-              <xsl:when test="function-available('stbl:convertLength')">
+-                <xsl:value-of select="stbl:convertLength($table.width)"/>
+-              </xsl:when>
+-              <xsl:when test="function-available('xtbl:convertLength')">
+-                <xsl:value-of select="xtbl:convertLength($table.width)"/>
+-              </xsl:when>
+-              <xsl:otherwise>
+-                <xsl:message terminate="yes">
+-                  <xsl:text>No convertLength function available.</xsl:text>
+-                </xsl:message>
+-              </xsl:otherwise>
+-            </xsl:choose>
+-          </xsl:when>
+-          <xsl:otherwise>
+-            <xsl:value-of select="$table.width"/>
+-          </xsl:otherwise>
+-        </xsl:choose>
+-      </xsl:attribute>
+-    </xsl:if>
+-
+-    <xsl:choose>
+-      <xsl:when test="$use.extensions != 0
+-                      and $tablecolumns.extension != 0">
+-        <xsl:choose>
+-          <xsl:when test="function-available('stbl:adjustColumnWidths')">
+-            <xsl:copy-of select="stbl:adjustColumnWidths($colgroup)"/>
+-          </xsl:when>
+-          <xsl:when test="function-available('xtbl:adjustColumnWidths')">
+-            <xsl:copy-of select="xtbl:adjustColumnWidths($colgroup)"/>
+-          </xsl:when>
+-          <xsl:otherwise>
+-            <xsl:message terminate="yes">
+-              <xsl:text>No adjustColumnWidths function available.</xsl:text>
+-            </xsl:message>
+-          </xsl:otherwise>
+-        </xsl:choose>
+-      </xsl:when>
+-      <xsl:otherwise>
+-        <xsl:copy-of select="$colgroup"/>
+-      </xsl:otherwise>
+-    </xsl:choose>
+-
+-    <xsl:apply-templates select="thead"/>
+-    <xsl:apply-templates select="tbody"/>
+-    <xsl:apply-templates select="tfoot"/>
+-
+-    <xsl:if test=".//footnote">
+-      <tbody class="footnotes">
+-        <tr>
+-          <td colspan="{@cols}">
+-            <xsl:apply-templates select=".//footnote" 
+-                                 mode="table.footnote.mode"/>
+-          </td>
+-        </tr>
+-      </tbody>
+-    </xsl:if>
+-  </table>
+-</xsl:template>
+-
+-
+-</xsl:stylesheet>
+-
+diff --git a/settings/xfce4-power-manager-settings.desktop.in b/settings/xfce4-power-manager-settings.desktop.in
+index 65d97e3..e42f581 100644
+--- a/settings/xfce4-power-manager-settings.desktop.in
++++ b/settings/xfce4-power-manager-settings.desktop.in
+@@ -11,4 +11,5 @@ Categories=XFCE;GTK;Settings;DesktopSettings;X-XFCE-SettingsDialog;X-XFCE-Hardwa
+ OnlyShowIn=XFCE;
+ StartupNotify=true
+ X-XfcePluggable=true
+-X-XfceHelpFile=xfce4-power-manager
++X-XfceHelpComponent=xfce4-power-manager
++X-XfceHelpPage=start
+diff --git a/settings/xfpm-settings.c b/settings/xfpm-settings.c
+index 513503a..123ef5b 100644
+--- a/settings/xfpm-settings.c
++++ b/settings/xfpm-settings.c
+@@ -1620,10 +1620,11 @@ settings_quit (GtkWidget *widget, XfconfChannel *channel)
+ static void dialog_response_cb (GtkDialog *dialog, gint response, XfconfChannel *channel)
+ {
++    DBG("response %d", response);
+     switch(response)
+     {
+       case GTK_RESPONSE_HELP:
+-          xfpm_help();
++          xfce_dialog_show_help (GTK_WINDOW (dialog), "xfce4-power-manager", "start", NULL);
+           break;
+       default:
+           settings_quit (GTK_WIDGET (dialog), channel);
+diff --git a/src/xfpm-power.c b/src/xfpm-power.c
+index febac1d..dd952bd 100644
+--- a/src/xfpm-power.c
++++ b/src/xfpm-power.c
+@@ -474,6 +474,13 @@ xfpm_power_presentation_mode_cb (XfpmPower *power)
+ }
+ static void
++xfpm_power_help_cb (GtkMenuItem *menuitem, gpointer user_data)
++{
++    XfpmPower *power = XFPM_POWER (user_data);
++    xfce_dialog_show_help (GTK_WINDOW (power->priv->dialog), "xfce4-power-manager", "start", NULL);
++}
++
++static void
+ xfpm_power_show_tray_menu (XfpmPower *power,
+                        GtkStatusIcon *icon,
+                        guint button,
+@@ -589,7 +596,7 @@ xfpm_power_show_tray_menu (XfpmPower *power,
+     mi = gtk_image_menu_item_new_from_stock (GTK_STOCK_HELP, NULL);
+     gtk_widget_set_sensitive (mi, TRUE);
+     gtk_widget_show (mi);
+-    g_signal_connect (mi, "activate", G_CALLBACK (xfpm_help), NULL);
++    g_signal_connect (mi, "activate", G_CALLBACK (xfpm_power_help_cb), power);
+     gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+-- 
+1.9.3
+
diff --git a/0156-Add-xfpm-backlight.c-to-potfiles.patch b/0156-Add-xfpm-backlight.c-to-potfiles.patch
new file mode 100644 (file)
index 0000000..e03a58a
--- /dev/null
@@ -0,0 +1,24 @@
+From ca5ae60db97787c6d433ebcb7deeb81c90e32104 Mon Sep 17 00:00:00 2001
+From: Eric Koegel <eric.koegel@gmail.com>
+Date: Mon, 7 Apr 2014 20:31:57 +0300
+Subject: [PATCH 156/219] Add xfpm-backlight.c to potfiles
+
+---
+ po/POTFILES.in | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/po/POTFILES.in b/po/POTFILES.in
+index 109452b..4ac54bf 100644
+--- a/po/POTFILES.in
++++ b/po/POTFILES.in
+@@ -6,6 +6,7 @@ settings/xfce4-power-manager-settings.desktop.in
+ common/xfpm-common.c
+ src/xfpm-power.c
+ src/xfpm-power-common.c
++src/xfpm-backlight.c
+ src/xfpm-battery.c
+ src/xfpm-battery.c
+ src/xfpm-main.c
+-- 
+1.9.3
+
diff --git a/0157-Remove-the-doc-configure-deps.patch b/0157-Remove-the-doc-configure-deps.patch
new file mode 100644 (file)
index 0000000..021411b
--- /dev/null
@@ -0,0 +1,53 @@
+From e7e279fa6435fe6814066b934237f27b0cd3c5f1 Mon Sep 17 00:00:00 2001
+From: Eric Koegel <eric.koegel@gmail.com>
+Date: Tue, 8 Apr 2014 19:38:38 +0300
+Subject: [PATCH 157/219] Remove the doc configure deps
+
+---
+ configure.ac.in | 30 ------------------------------
+ 1 file changed, 30 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index affba31..aef3d68 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -160,36 +160,6 @@ fi
+ AM_CONDITIONAL([BUILD_PANEL_PLUGINS], [test "x$build_panel_plugins" = "xyes"])
+ #=======================================================#
+-#              Generate html doc                      #
+-#=======================================================#
+-AC_ARG_ENABLE([xsltproc],
+-              [AC_HELP_STRING([--enable-xsltproc],
+-                              [Use xsltproc to generate HTML documentation @<:@default=no@:>@])],
+-                              , [enable_xsltproc=no])
+-if test "x$enable_xsltproc" = "xyes"; then
+-    AC_PATH_PROG([XSLTPROC], [xsltproc], [no])
+-    if test "x$XSLTPROC" = "xno"; then
+-        AC_MSG_FAILURE([*** xsltproc was requested, but not found.])
+-    fi
+-fi
+-AM_CONDITIONAL([HAVE_XSLTPROC], [test "x$enable_xsltproc" = "xyes"])
+-
+-#=======================================================#
+-#              Support for doc translations           #
+-#=======================================================#
+-AC_ARG_ENABLE([xml2po],
+-              [AC_HELP_STRING([--enable-xml2po],
+-                              [Use xml2po to translate documentation @<:@default=no@:>@])],
+-              [], [enable_xml2po=no])
+-if test "x$enable_xml2po" = "xyes"; then
+-    AC_PATH_PROG([XML2PO], [xml2po], [no])
+-    if test "x$XML2PO" = "xno"; then
+-        AC_MSG_FAILURE([*** xml2po was requested, but not found.])
+-    fi
+-fi
+-AM_CONDITIONAL([ENABLE_XML2PO], [test "x$enable_xml2po" = "xyes"])
+-
+-#=======================================================#
+ #              Check for debugging support              #
+ #=======================================================#
+ XDT_FEATURE_DEBUG
+-- 
+1.9.3
+
diff --git a/0171-Add-support-for-logind-suspend-resume-Bug-9963.patch b/0171-Add-support-for-logind-suspend-resume-Bug-9963.patch
new file mode 100644 (file)
index 0000000..7845e26
--- /dev/null
@@ -0,0 +1,185 @@
+From 6cdc97e979b6924913ce270b06ad92d304e61ee4 Mon Sep 17 00:00:00 2001
+From: Eric Koegel <eric.koegel@gmail.com>
+Date: Sat, 12 Apr 2014 18:32:49 +0300
+Subject: [PATCH 171/219] Add support for logind suspend/resume (Bug 9963)
+
+This patch does runtime checks to see if we can use logind for
+suspend/resume same as poweroff/reboot. There's still full support
+for ConsoleKit.
+---
+ src/xfpm-power.c   | 28 ++++++++++++++++++++++++----
+ src/xfpm-systemd.c | 47 +++++++++++++++++++++++++++++++++++++++++++----
+ src/xfpm-systemd.h |  4 ++++
+ 3 files changed, 71 insertions(+), 8 deletions(-)
+
+diff --git a/src/xfpm-power.c b/src/xfpm-power.c
+index dd952bd..618944a 100644
+--- a/src/xfpm-power.c
++++ b/src/xfpm-power.c
+@@ -280,7 +280,20 @@ xfpm_power_get_properties (XfpmPower *power)
+     props = xfpm_power_get_interface_properties (power->priv->proxy_prop, UPOWER_IFACE);
+-    xfpm_power_check_pm (power, props);
++    if ( LOGIND_RUNNING () )
++    {
++        g_object_get (G_OBJECT (power->priv->systemd),
++                      "can-suspend", &power->priv->can_suspend,
++                      NULL);
++      g_object_get (G_OBJECT (power->priv->systemd),
++                      "can-hibernate", &power->priv->can_hibernate,
++                      NULL);
++    }
++    else
++    {
++      xfpm_power_check_pm (power, props);
++    }
++
+     xfpm_power_check_lid (power, props);
+     xfpm_power_check_power (power, props);
+@@ -351,9 +364,16 @@ xfpm_power_sleep (XfpmPower *power, const gchar *sleep_time, gboolean force)
+       xfpm_lock_screen ();
+     }
+-    dbus_g_proxy_call (power->priv->proxy, sleep_time, &error,
+-                     G_TYPE_INVALID,
+-                     G_TYPE_INVALID);
++    if ( LOGIND_RUNNING () )
++    {
++      xfpm_systemd_sleep (power->priv->systemd, sleep_time, &error);
++    }
++    else
++    {
++      dbus_g_proxy_call (power->priv->proxy, sleep_time, &error,
++                         G_TYPE_INVALID,
++                         G_TYPE_INVALID);
++    }
+     if ( error )
+     {
+diff --git a/src/xfpm-systemd.c b/src/xfpm-systemd.c
+index 2b840db..236d8cc 100644
+--- a/src/xfpm-systemd.c
++++ b/src/xfpm-systemd.c
+@@ -46,6 +46,8 @@ struct XfpmSystemdPrivate
+ {
+     gboolean         can_shutdown;
+     gboolean         can_restart;
++    gboolean         can_suspend;
++    gboolean         can_hibernate;
+ #ifdef ENABLE_POLKIT
+     XfpmPolkit      *polkit;
+ #endif
+@@ -55,7 +57,9 @@ enum
+ {
+     PROP_0,
+     PROP_CAN_RESTART,
+-    PROP_CAN_SHUTDOWN
++    PROP_CAN_SHUTDOWN,
++    PROP_CAN_SUSPEND,
++    PROP_CAN_HIBERNATE,
+ };
+ G_DEFINE_TYPE (XfpmSystemd, xfpm_systemd, G_TYPE_OBJECT)
+@@ -67,6 +71,8 @@ G_DEFINE_TYPE (XfpmSystemd, xfpm_systemd, G_TYPE_OBJECT)
+ #define SYSTEMD_POWEROFF_ACTION         "PowerOff"
+ #define SYSTEMD_REBOOT_TEST             "org.freedesktop.login1.reboot"
+ #define SYSTEMD_POWEROFF_TEST           "org.freedesktop.login1.power-off"
++#define SYSTEMD_SUSPEND_TEST            "org.freedesktop.login1.suspend"
++#define SYSTEMD_HIBERNATE_TEST          "org.freedesktop.login1.hibernate"
+ static void
+ xfpm_systemd_class_init (XfpmSystemdClass *klass)
+@@ -91,6 +97,20 @@ xfpm_systemd_class_init (XfpmSystemdClass *klass)
+                                                            FALSE,
+                                                            G_PARAM_READABLE));
++    g_object_class_install_property (object_class,
++                                     PROP_CAN_SUSPEND,
++                                     g_param_spec_boolean ("can-suspend",
++                                                           NULL, NULL,
++                                                           FALSE,
++                                                           G_PARAM_READABLE));
++
++    g_object_class_install_property (object_class,
++                                     PROP_CAN_HIBERNATE,
++                                     g_param_spec_boolean ("can-hibernate",
++                                                           NULL, NULL,
++                                                           FALSE,
++                                                           G_PARAM_READABLE));
++
+     g_type_class_add_private (klass, sizeof (XfpmSystemdPrivate));
+ }
+@@ -126,6 +146,12 @@ xfpm_systemd_init (XfpmSystemd *systemd)
+     xfpm_systemd_can_method (systemd,
+                              &systemd->priv->can_restart,
+                              SYSTEMD_REBOOT_TEST);
++    xfpm_systemd_can_method (systemd,
++                             &systemd->priv->can_suspend,
++                             SYSTEMD_SUSPEND_TEST);
++    xfpm_systemd_can_method (systemd,
++                             &systemd->priv->can_hibernate,
++                             SYSTEMD_HIBERNATE_TEST);
+ }
+ static void xfpm_systemd_get_property (GObject *object,
+@@ -144,6 +170,12 @@ static void xfpm_systemd_get_property (GObject *object,
+     case PROP_CAN_RESTART:
+         g_value_set_boolean (value, systemd->priv->can_restart);
+         break;
++    case PROP_CAN_SUSPEND:
++        g_value_set_boolean (value, systemd->priv->can_suspend);
++        break;
++    case PROP_CAN_HIBERNATE:
++        g_value_set_boolean (value, systemd->priv->can_hibernate);
++        break;
+         default:
+             G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+             break;
+@@ -175,12 +207,12 @@ xfpm_systemd_new (void)
+     if ( G_LIKELY (systemd_obj != NULL ) )
+     {
+-    g_object_ref (systemd_obj);
++        g_object_ref (systemd_obj);
+     }
+     else
+     {
+-    systemd_obj = g_object_new (XFPM_TYPE_SYSTEMD, NULL);
+-    g_object_add_weak_pointer (systemd_obj, &systemd_obj);
++        systemd_obj = g_object_new (XFPM_TYPE_SYSTEMD, NULL);
++        g_object_add_weak_pointer (systemd_obj, &systemd_obj);
+     }
+     return XFPM_SYSTEMD (systemd_obj);
+@@ -227,3 +259,10 @@ void xfpm_systemd_reboot (XfpmSystemd *systemd, GError **error)
+                              SYSTEMD_REBOOT_ACTION,
+                              error);
+ }
++
++void xfpm_systemd_sleep (XfpmSystemd *systemd,
++                         const gchar *method,
++                         GError **error)
++{
++    xfpm_systemd_try_method (systemd, method, error);
++}
+diff --git a/src/xfpm-systemd.h b/src/xfpm-systemd.h
+index 7ade4f4..f50e9fd 100644
+--- a/src/xfpm-systemd.h
++++ b/src/xfpm-systemd.h
+@@ -57,6 +57,10 @@ void                xfpm_systemd_shutdown   (XfpmSystemd *systemd,
+ void                xfpm_systemd_reboot (XfpmSystemd *systemd,
+                                          GError **error);
++void                xfpm_systemd_sleep (XfpmSystemd *systemd,
++                                        const gchar *method,
++                                        GError **error);
++
+ G_END_DECLS
+ #endif /* __XFPM_SYSTEMD_H */
+-- 
+1.9.3
+
diff --git a/0172-Update-min-requirements-and-autotools.patch b/0172-Update-min-requirements-and-autotools.patch
new file mode 100644 (file)
index 0000000..eb9239c
--- /dev/null
@@ -0,0 +1,179 @@
+From 3601a62bac73daaa6d9a7abd095b973c5e473f23 Mon Sep 17 00:00:00 2001
+From: Eric Koegel <eric.koegel@gmail.com>
+Date: Sat, 12 Apr 2014 21:20:12 +0300
+Subject: [PATCH 172/219] Update min requirements and autotools
+
+Update autotools, fix whitespace issue, change how the version
+string is presented with make distcheck, fix --disable-dpms so
+it will actually compile, and update the minimum versions for
+the 4.12 roadmap.
+---
+ Makefile.am                          |  4 +--
+ configure.ac.in                      | 54 +++++++++++++++++-------------------
+ panel-plugins/brightness/Makefile.am |  2 +-
+ 3 files changed, 28 insertions(+), 32 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 96a6738..bb04112 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -25,7 +25,7 @@ DISTCLEANFILES = \
+       intltool-merge \
+       intltool-update
+-distuninstallcheck_listfiles =                                                \ 
++distuninstallcheck_listfiles =                                                \
+       find . -type f -print | grep -v ./share/icons/hicolor/icon-theme.cache
+ .PHONY: ChangeLog
+@@ -54,4 +54,4 @@ snapshot: dist
+ snapshot-bz2: dist-bz2
+       mv $(PACKAGE)-$(VERSION).tar.bz2 \
+-      $(PACKAGE)-$(VERSION)-r@REVISION@.tar.bz2         
++      $(PACKAGE)-$(VERSION)-r@REVISION@.tar.bz2
+diff --git a/configure.ac b/configure.ac
+index aef3d68..7a4af87 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -2,12 +2,12 @@ m4_define([intltool_minimum_version], [0.31])
+ m4_define([xfpm_version_major], [1])
+ m4_define([xfpm_version_minor], [2])
+ m4_define([xfpm_version_micro], [0])
+-m4_define([xfpm_version_build], [])
++m4_define([xfpm_version_build], [@REVISION@])
+ m4_define([xfpm_version_tag],   [])
+-m4_define([xfpm_version], [xfpm_version_major().xfpm_version_minor().xfpm_version_micro()ifelse(xfpm_version_tag(), [git], [xfpm_version_tag().xfpm_version_build()], [xfpm_version_tag()])])
++m4_define([xfpm_version], [xfpm_version_major().xfpm_version_minor().xfpm_version_micro()ifelse(xfpm_version_tag(), [git], [xfpm_version_tag()-xfpm_version_build()], [xfpm_version_tag()])])
+-AC_INIT([xfce4-power-manager], [xfpm_version], [http://bugzilla.xfce.org/])
+-AC_PREREQ(2.50)
++AC_INIT([xfce4-power-manager],[xfpm_version],[http://bugzilla.xfce.org/])
++AC_PREREQ([2.69])
+ AM_INIT_AUTOMAKE([1.8 dist-bzip2 tar-ustar no-dist-gzip])
+ AC_CONFIG_HEADERS([config.h])
+@@ -21,9 +21,9 @@ AC_USE_SYSTEM_EXTENSIONS()
+ # ===================================================== #
+ AC_PROG_CC()
+ AM_PROG_CC_C_O()
+-AC_PROG_LD()
++LT_PATH_LD([])
+ AC_PROG_INSTALL()
+-AC_PROG_INTLTOOL([intltool_minimum_version], [no-xml])
++IT_PROG_INTLTOOL([intltool_minimum_version],[no-xml])
+ # ===================================================== #
+ #               Initialize libtool                      #
+@@ -53,15 +53,15 @@ XDT_I18N([@LINGUAS@])
+ #==================================================== #
+ #          Check for required packages                      #
+ #=====================================================#
+-m4_define([gtk_minimum_version], [2.12.0])
+-m4_define([glib_minimum_version], [2.16.0]) 
+-m4_define([dbus_minimum_version], [0.60])
+-m4_define([dbus_glib_minimum_version], [0.70])
++m4_define([gtk_minimum_version], [2.24.0])
++m4_define([glib_minimum_version], [2.30.0])
++m4_define([dbus_minimum_version], [1.1])
++m4_define([dbus_glib_minimum_version], [0.84])
+-m4_define([xfconf_minimum_version], [4.6.0])
+-m4_define([libxfce4ui_minimum_version],[4.7.0])
+-m4_define([libxfce4util_minimum_version],[4.6.0])
+-m4_define([libxfce4panel_minimum_version],[4.6.0])
++m4_define([xfconf_minimum_version], [4.10.0])
++m4_define([libxfce4ui_minimum_version],[4.10.0])
++m4_define([libxfce4util_minimum_version],[4.10.0])
++m4_define([libxfce4panel_minimum_version],[4.10.0])
+ m4_define([libnotify_minimum_version], [0.4.1])
+ m4_define([xrandr_minimum_version], [1.2.0])
+@@ -85,8 +85,7 @@ XDT_CHECK_PACKAGE([X11], [x11], [x11_minimum_version])
+ #              Polkit?                                        #
+ #=======================================================#
+ AC_ARG_ENABLE([polkit],
+-        [AC_HELP_STRING([--disable-polkit],
+-                [Do not enable PolicyKit support (default=enabled)])],
++        [AS_HELP_STRING([--disable-polkit],[Do not enable PolicyKit support (default=enabled)])],
+         [ac_cv_enable_polkit=$enableval],
+         [ac_cv_enable_polkit=polkit])
+     AC_MSG_CHECKING([whether to build with polkit support])
+@@ -105,17 +104,14 @@ AM_CONDITIONAL([ENABLE_POLKIT], [test "x$polkit" = "xyes"])
+ #=======================================================#
+ DPMS_LIBS=
+ AC_ARG_ENABLE([dpms],
+-AC_HELP_STRING([--enable-dpms], [use dpms extension])
+-AC_HELP_STRING([--disable-dpms], [don't use dpms extension]),
++AS_HELP_STRING([--enable-dpms],[use dpms extension])
++AS_HELP_STRING([--disable-dpms],[don't use dpms extension]),
+   [], [enable_dpms=yes])
+-have_dpms="no"
+ if test x"$enable_dpms" = x"yes"; then
+-     AC_CHECK_LIB([Xext], [DPMSQueryExtension],
+-        [ have_dpms="yes"
+-          DPMS_LIBS=" -lXext -lX11"
+-          AC_DEFINE([HAVE_DPMS], [1], [Define to enable dpms])
+-        ],[])
++  AC_DEFINE([HAVE_DPMS], [1], [Define to enable dpms])
+ fi
++
++AC_CHECK_LIB([Xext], [DPMSQueryExtension], [DPMS_LIBS=" -lXext -lX11"],[])
+ AC_SUBST([DPMS_LIBS])
+ #=======================================================#
+@@ -134,7 +130,7 @@ fi
+ #=======================================================#
+ #              Network Manager support                  #
+ #=======================================================#
+-AC_ARG_ENABLE([network-manager], AC_HELP_STRING([--disable-network-manager], [Disable network manager support]),
++AC_ARG_ENABLE([network-manager], AS_HELP_STRING([--disable-network-manager],[Disable network manager support]),
+   [ac_network_manager=$enableval], [ac_network_manager=yes])
+ AC_MSG_CHECKING([whether to build with network manager support.])
+ if test "x$ac_network_manager = xyes"; then
+@@ -146,8 +142,7 @@ AC_MSG_RESULT([$ac_network_manager])
+ #                 Panel plugins ?                       #
+ #=======================================================#
+ AC_ARG_ENABLE([panel_plugins],
+-      [AC_HELP_STRING([--disable-panel-plugins],
+-              [Do not build panel plugins (default=enabled)])],
++      [AS_HELP_STRING([--disable-panel-plugins],[Do not build panel plugins (default=enabled)])],
+       [ac_cv_enable_panel_plugins=$enableval],
+       [ac_cv_enable_panel_plugins=yes])
+ if test "x$ac_cv_enable_panel_plugins" = "xno"; then
+@@ -177,7 +172,7 @@ AC_MSG_CHECKING([PLATFORM_LDFLAGS])
+ AC_MSG_RESULT([$PLATFORM_LDFLAGS])
+ AC_SUBST([PLATFORM_LDFLAGS])
+-AC_OUTPUT([
++AC_CONFIG_FILES([
+ Makefile
+ libdbus/Makefile
+ common/Makefile
+@@ -207,11 +202,12 @@ data/icons/scalable/actions/Makefile
+ data/interfaces/Makefile
+ po/Makefile.in
+ ])
++AC_OUTPUT
+ echo "prefix:                 ${prefix}"
+ echo "xdg autostart:          ${sysconfdir}/xdg/autostart"
+ echo "POLKIT:                 ${polkit}"
+-echo "DPMS:                   ${have_dpms}"
++echo "DPMS:                   ${enable_dpms}"
+ echo "Network manager:        ${ac_network_manager}"
+ echo "Build panel plugins:    ${build_panel_plugins}"
+ echo "Debug:                  ${enable_debug}"
+diff --git a/panel-plugins/brightness/Makefile.am b/panel-plugins/brightness/Makefile.am
+index a89ca8b..65e0f5c 100644
+--- a/panel-plugins/brightness/Makefile.am
++++ b/panel-plugins/brightness/Makefile.am
+@@ -1,4 +1,4 @@
+-INCLUDES = \
++AM_CPPFLAGS = \
+       -I$(top_srcdir) \
+       -DG_LOG_DOMAIN=\"xfce4-brightness-plugin\" \
+       -DPACKAGE_LOCALE_DIR=\"$(localedir)\" \
+-- 
+1.9.3
+
diff --git a/0175-port-xfpm-to-libupower-glib-add-support-for-upower-0.patch b/0175-port-xfpm-to-libupower-glib-add-support-for-upower-0.patch
new file mode 100644 (file)
index 0000000..c8c2dcb
--- /dev/null
@@ -0,0 +1,1240 @@
+From ae97be6f3500eea509d61c914e22c5355e7d57de Mon Sep 17 00:00:00 2001
+From: Stefan Seyfried <seife+dev@b1-systems.com>
+Date: Sun, 13 Apr 2014 12:05:19 +0200
+Subject: [PATCH 175/219] port xfpm to libupower-glib / add support for
+ upower-0.99.0 API
+
+* port most of the upower interfaces to upower-glib
+* conditionalize stuff that has been deprecated in upower >= 0.99.0
+* suspend / hibernate is handled by systemd/logind
+* if upower is >= 0.99.0 and logind is not running, log errors
+  (as functionality will be missing)
+
+Signed-off-by: Eric Koegel <eric.koegel@gmail.com>
+---
+ configure.ac.in         |   2 +
+ src/Makefile.am         |   4 +
+ src/xfpm-battery.c      | 136 ++++++++-----------------
+ src/xfpm-battery.h      |   3 +-
+ src/xfpm-power-common.c |  79 ---------------
+ src/xfpm-power-common.h |  13 +--
+ src/xfpm-power-info.c   | 220 +++++++++++++++-------------------------
+ src/xfpm-power.c        | 265 +++++++++++++++++-------------------------------
+ 8 files changed, 225 insertions(+), 497 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 7a4af87..527f399 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -64,6 +64,7 @@ m4_define([libxfce4util_minimum_version],[4.10.0])
+ m4_define([libxfce4panel_minimum_version],[4.10.0])
+ m4_define([libnotify_minimum_version], [0.4.1])
++m4_define([upower_minimum_version], [0.9.8])
+ m4_define([xrandr_minimum_version], [1.2.0])
+ m4_define([x11_minimum_version], [1.0.0])
+@@ -78,6 +79,7 @@ XDT_CHECK_PACKAGE([XFCONF], [libxfconf-0],[xfconf_minimum_version])
+ XDT_CHECK_PACKAGE([LIBXFCE4UI], [libxfce4ui-1],[libxfce4ui_minimum_version])
+ XDT_CHECK_PACKAGE([LIBXFCE4UTIL], [libxfce4util-1.0],[libxfce4util_minimum_version])
+ XDT_CHECK_PACKAGE([LIBNOTIFY],[libnotify], [libnotify_minimum_version])
++XDT_CHECK_PACKAGE([UPOWER],[upower-glib], [upower_minimum_version])
+ XDT_CHECK_PACKAGE([XRANDR],[xrandr], [xrandr_minimum_version])
+ XDT_CHECK_PACKAGE([X11], [x11], [x11_minimum_version])
+diff --git a/src/Makefile.am b/src/Makefile.am
+index 316a823..9899733 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -56,6 +56,7 @@ xfce4_power_manager_CFLAGS =                    \
+       $(LIBXFCE4UI_CFLAGS)                    \
+       $(XFCONF_CFLAGS)                        \
+       $(LIBNOTIFY_CFLAGS)                     \
++      $(UPOWER_CFLAGS)                        \
+       $(XRANDR_CFLAGS)                        \
+       $(DPMS_CFLAGS)                          \
+       $(PLATFORM_CPPFLAGS)                    \
+@@ -74,6 +75,7 @@ xfce4_power_manager_LDADD =                     \
+       $(LIBXFCE4UI_LIBS)                      \
+       $(XFCONF_LIBS)                          \
+       $(LIBNOTIFY_LIBS)                       \
++      $(UPOWER_LIBS)                          \
+       $(XRANDR_LIBS)                          \
+       $(DPMS_LIBS)
+@@ -90,6 +92,7 @@ xfce4_power_information_CFLAGS =             \
+       -DG_LOG_DOMAIN=\"xfce4-power-information\"\
+       $(GOBJECT_CFLAGS)                       \
+       $(DBUS_GLIB_CFLAGS)                     \
++      $(UPOWER_CFLAGS)                        \
+       $(LIBXFCE4UI_CFLAGS)                    \
+       $(PLATFORM_CPPFLAGS)                    \
+       $(PLATFORM_CFLAGS)
+@@ -101,6 +104,7 @@ xfce4_power_information_LDFLAGS =          \
+ xfce4_power_information_LDADD =                       \
+       $(GOBJECT_LIBS)                         \
+       $(DBUS_GLIB_LIBS)                       \
++      $(UPOWER_LIBS)                          \
+       $(LIBXFCE4UI_LIBS)                      \
+       $(top_builddir)/libdbus/libxfpmdbus.la
+diff --git a/src/xfpm-battery.c b/src/xfpm-battery.c
+index 2034c60..9d1b590 100644
+--- a/src/xfpm-battery.c
++++ b/src/xfpm-battery.c
+@@ -27,6 +27,7 @@
+ #include <string.h>
+ #include <gtk/gtk.h>
++#include <upower.h>
+ #include <libxfce4util/libxfce4util.h>
+@@ -53,8 +54,8 @@ struct XfpmBatteryPrivate
+     XfpmXfconf             *conf;
+     XfpmNotify                   *notify;
+     XfpmButton             *button;
+-    DBusGProxy             *proxy;
+-    DBusGProxy                   *proxy_prop;
++    UpDevice               *device;
++    UpClient               *client;
+     gchar                *icon_prefix;
+@@ -71,6 +72,7 @@ struct XfpmBatteryPrivate
+     gulong                sig;
+     gulong                sig_bt;
++    gulong                sig_up;
+     guint                   notify_idle;
+ };
+@@ -525,45 +527,28 @@ xfpm_battery_check_charge (XfpmBattery *battery)
+ }
+ static void
+-xfpm_battery_refresh (XfpmBattery *battery, GHashTable *props)
++xfpm_battery_refresh (XfpmBattery *battery, UpDevice *device)
+ {
+-    GValue *value;
++    gboolean present;
+     guint state;
+-
+-    value = g_hash_table_lookup (props, "IsPresent");
+-
+-    if ( value == NULL )
+-    {
+-      g_warning ("No 'IsPresent' property found");
+-      goto out;
+-    }
+-
+-    battery->priv->present = g_value_get_boolean (value);
+-
+-    value = g_hash_table_lookup (props, "State");
+-
+-    if ( value == NULL )
+-    {
+-      g_warning ("No 'State' property found");
+-    }
+-
+-    state = g_value_get_uint (value);
++    gdouble percentage;
++    guint64 to_empty, to_full;
++    g_object_get(device,
++               "is-present", &present,
++               "percentage", &percentage,
++               "state", &state,
++               "time-to-empty", &to_empty,
++               "time-to-full", &to_full,
++               NULL);
++
++    battery->priv->present = present;
+     if ( state != battery->priv->state )
+     {
+       battery->priv->state = state;
+       xfpm_battery_refresh_visible (battery);
+       xfpm_battery_notify_state (battery);
+     }
+-
+-    value = g_hash_table_lookup (props, "Percentage");
+-
+-    if ( value == NULL )
+-    {
+-      g_warning ("No 'Percentage' property found on battery device");
+-      goto out;
+-    }
+-
+-    battery->priv->percentage = (guint) g_value_get_double (value);
++    battery->priv->percentage = (guint) percentage;
+     xfpm_battery_check_charge (battery);
+@@ -572,29 +557,9 @@ xfpm_battery_refresh (XfpmBattery *battery, GHashTable *props)
+     if ( battery->priv->type == XFPM_DEVICE_TYPE_BATTERY ||
+        battery->priv->type == XFPM_DEVICE_TYPE_UPS )
+     {
+-      value = g_hash_table_lookup (props, "TimeToEmpty");
+-
+-      if ( value == NULL )
+-      {
+-          g_warning ("No 'TimeToEmpty' property found on battery device");
+-          goto out;
+-      }
+-
+-      battery->priv->time_to_empty = g_value_get_int64 (value);
+-
+-      value = g_hash_table_lookup (props, "TimeToFull");
+-
+-      if ( value == NULL )
+-      {
+-          g_warning ("No 'TimeToFull' property found on battery device");
+-          goto out;
+-      }
+-
+-      battery->priv->time_to_full = g_value_get_int64 (value);
++      battery->priv->time_to_empty = to_empty;
++      battery->priv->time_to_full  = to_empty;
+     }
+-
+-    out:
+-      g_hash_table_destroy (props);
+ }
+ static void
+@@ -605,30 +570,13 @@ xfpm_battery_button_pressed_cb (XfpmButton *button, XfpmButtonKey type, XfpmBatt
+ }
+ static void
+-xfpm_battery_changed_cb (DBusGProxy *proxy, XfpmBattery *battery)
++xfpm_battery_changed_cb (UpDevice *device,
++#if UP_CHECK_VERSION(0, 99, 0)
++                       GParamSpec *pspec,
++#endif
++                       XfpmBattery *battery)
+ {
+-    GHashTable *props;
+-    GValue *value;
+-    const gchar *cstr;
+-    const gchar *p;
+-
+-    props = xfpm_power_get_interface_properties (battery->priv->proxy_prop,
+-                                               UPOWER_IFACE_DEVICE);
+-
+-    value = g_hash_table_lookup (props, "NativePath");
+-    if ( value )
+-    {
+-      cstr = g_value_get_string (value);
+-      p = strrchr (cstr, '/');
+-      if ( p && (strncmp( p, "/hid-", 5 ) == 0) )
+-      {
+-          XFPM_DEBUG("Ignoring battery '%s' - is a HID device\n", cstr);
+-          return;
+-      }
+-    }
+-
+-    if ( props )
+-      xfpm_battery_refresh (battery, props);
++    xfpm_battery_refresh (battery, device);
+ }
+ static gboolean
+@@ -760,7 +708,8 @@ xfpm_battery_init (XfpmBattery *battery)
+     battery->priv->conf          = xfpm_xfconf_new ();
+     battery->priv->notify        = xfpm_notify_new ();
+-    battery->priv->proxy_prop    = NULL;
++    battery->priv->device        = NULL;
++    battery->priv->client        = NULL;
+     battery->priv->state         = XFPM_DEVICE_STATE_UNKNOWN;
+     battery->priv->type          = XFPM_DEVICE_TYPE_UNKNOWN;
+     battery->priv->charge        = XFPM_BATTERY_CHARGE_UNKNOWN;
+@@ -790,8 +739,8 @@ xfpm_battery_finalize (GObject *object)
+     if (battery->priv->notify_idle != 0)
+         g_source_remove (battery->priv->notify_idle);
+-    dbus_g_proxy_disconnect_signal (battery->priv->proxy, "Changed",
+-                                  G_CALLBACK (xfpm_battery_changed_cb), battery);
++    if ( g_signal_handler_is_connected (battery->priv->device, battery->priv->sig_up ) )
++      g_signal_handler_disconnect (G_OBJECT (battery->priv->device), battery->priv->sig_up);
+     if ( g_signal_handler_is_connected (battery->priv->conf, battery->priv->sig ) )
+       g_signal_handler_disconnect (G_OBJECT (battery->priv->conf), battery->priv->sig);
+@@ -799,8 +748,7 @@ xfpm_battery_finalize (GObject *object)
+      if ( g_signal_handler_is_connected (battery->priv->button, battery->priv->sig_bt ) )
+       g_signal_handler_disconnect (G_OBJECT (battery->priv->button), battery->priv->sig_bt);
+-    g_object_unref (battery->priv->proxy);
+-    g_object_unref (battery->priv->proxy_prop);
++    g_object_unref (battery->priv->device);
+     g_object_unref (battery->priv->conf);
+     g_object_unref (battery->priv->notify);
+     g_object_unref (battery->priv->button);
+@@ -884,26 +832,28 @@ xfpm_battery_new (void)
+ }
+ void xfpm_battery_monitor_device (XfpmBattery *battery,
+-                                DBusGProxy *proxy,
+-                                DBusGProxy *proxy_prop,
++                                const char *object_path,
+                                 XfpmDeviceType device_type)
+ {
++    UpDevice *device;
+     battery->priv->type = device_type;
+-    battery->priv->proxy_prop = proxy_prop;
+-    battery->priv->proxy = proxy;
++    battery->priv->client = up_client_new();
+     battery->priv->icon_prefix = xfpm_battery_get_icon_prefix_device_enum_type (device_type);
+     battery->priv->battery_name = xfpm_battery_get_name (device_type);
+-
+-    dbus_g_proxy_add_signal (proxy, "Changed", G_TYPE_INVALID);
+-    dbus_g_proxy_connect_signal (proxy, "Changed",
+-                               G_CALLBACK (xfpm_battery_changed_cb), battery, NULL);
+-
++    device = up_device_new();
++    up_device_set_object_path_sync (device, object_path, NULL, NULL);
++    battery->priv->device = device;
++#if UP_CHECK_VERSION(0, 99, 0)
++    battery->priv->sig_up = g_signal_connect (battery->priv->device, "notify", G_CALLBACK (xfpm_battery_changed_cb), battery);
++#else
++    battery->priv->sig_up = g_signal_connect (battery->priv->device, "changed", G_CALLBACK (xfpm_battery_changed_cb), battery);
++#endif
+     g_object_set (G_OBJECT (battery),
+                 "has-tooltip", TRUE,
+                 NULL);
+-    xfpm_battery_changed_cb (proxy, battery);
++    xfpm_battery_refresh (battery, device);
+ }
+ XfpmDeviceType xfpm_battery_get_device_type (XfpmBattery *battery)
+diff --git a/src/xfpm-battery.h b/src/xfpm-battery.h
+index 4d4ca34..a3b57cf 100644
+--- a/src/xfpm-battery.h
++++ b/src/xfpm-battery.h
+@@ -56,8 +56,7 @@ GType                            xfpm_battery_get_type        (void) G_GNUC_CONST;
+ GtkStatusIcon              *xfpm_battery_new             (void);
+ void                      xfpm_battery_monitor_device  (XfpmBattery *battery,
+-                                                        DBusGProxy *proxy,
+-                                                        DBusGProxy *proxy_prop,
++                                                        const char *object_path,
+                                                         XfpmDeviceType device_type);
+ XfpmDeviceType                    xfpm_battery_get_device_type (XfpmBattery *battery);
+diff --git a/src/xfpm-power-common.c b/src/xfpm-power-common.c
+index 39ecc18..d2c4ab5 100644
+--- a/src/xfpm-power-common.c
++++ b/src/xfpm-power-common.c
+@@ -31,85 +31,6 @@
+ #include "xfpm-icons.h"
+ /**
+- * xfpm_power_enumerate_devices:
+- * 
+- **/
+-GPtrArray *
+-xfpm_power_enumerate_devices (DBusGProxy *proxy)
+-{
+-    gboolean ret;
+-    GError *error = NULL;
+-    GPtrArray *array = NULL;
+-    GType g_type_array;
+-
+-    g_type_array = dbus_g_type_get_collection ("GPtrArray", DBUS_TYPE_G_OBJECT_PATH);
+-    
+-    ret = dbus_g_proxy_call (proxy, "EnumerateDevices", &error,
+-                           G_TYPE_INVALID,
+-                           g_type_array, &array,
+-                           G_TYPE_INVALID);
+-    if (!ret) 
+-    {
+-      g_critical ("Couldn't enumerate power devices: %s", error->message);
+-      g_error_free (error);
+-    }
+-    
+-    return array;
+-}
+-
+-/**
+- * xfpm_power_get_interface_properties:
+- * 
+- **/
+-GHashTable *xfpm_power_get_interface_properties (DBusGProxy *proxy_prop, const gchar *iface_name)
+-{
+-    gboolean ret;
+-    GError *error = NULL;
+-    GHashTable *props = NULL;
+-
+-    props = NULL;
+-
+-    ret = dbus_g_proxy_call (proxy_prop, "GetAll", &error,
+-                           G_TYPE_STRING, iface_name,
+-                           G_TYPE_INVALID,
+-                           dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_VALUE), &props,
+-                           G_TYPE_INVALID);
+-                          
+-    if (!ret) 
+-    {
+-      g_warning ("Unable to get interface properties for : %s : %s", iface_name, error->message);
+-      g_error_free (error);
+-    }
+-    
+-    return props;
+-}
+-
+-/**
+- * xfpm_power_get_interface_property:
+- * 
+- **/
+-GValue xfpm_power_get_interface_property (DBusGProxy *proxy, const gchar *iface_name, const gchar *prop_name)
+-{
+-    gboolean ret;
+-    GError *error = NULL;
+-    GValue value = { 0, };
+-
+-    ret = dbus_g_proxy_call (proxy, "Get", &error,
+-                           G_TYPE_STRING, iface_name,
+-                           G_TYPE_STRING, prop_name,
+-                           G_TYPE_INVALID,
+-                           G_TYPE_VALUE, &value, G_TYPE_INVALID);
+-                                                      
+-    if (!ret) 
+-    {
+-      g_warning ("Unable to get property %s on interface  %s : %s", prop_name, iface_name, error->message);
+-      g_error_free (error);
+-    }
+-    
+-    return value;
+-}
+-
+-/**
+  * xfpm_power_translate_device_type:
+  * 
+  **/
+diff --git a/src/xfpm-power-common.h b/src/xfpm-power-common.h
+index 1040aed..dbf6e16 100644
+--- a/src/xfpm-power-common.h
++++ b/src/xfpm-power-common.h
+@@ -33,18 +33,13 @@
+ #define UPOWER_PATH_WAKEUPS   "/org/freedesktop/UPower/Wakeups"
+ #define UPOWER_IFACE_WAKEUPS  "org.freedesktop.UPower.Wakeups"
+-#define POLKIT_AUTH_SUSPEND   "org.freedesktop.upower.suspend"
+-#define       POLKIT_AUTH_HIBERNATE "org.freedesktop.upower.hibernate"
++#define POLKIT_AUTH_SUSPEND_UPOWER    "org.freedesktop.upower.suspend"
++#define POLKIT_AUTH_HIBERNATE_UPOWER  "org.freedesktop.upower.hibernate"
++#define POLKIT_AUTH_SUSPEND_LOGIND    "org.freedesktop.login1.suspend"
++#define POLKIT_AUTH_HIBERNATE_LOGIND  "org.freedesktop.login1.hibernate"
+-GPtrArray     *xfpm_power_enumerate_devices           (DBusGProxy *proxy);
+-GHashTable    *xfpm_power_get_interface_properties    (DBusGProxy *proxy_prop, 
+-                                                       const gchar *iface_name);
+-
+-GValue                 xfpm_power_get_interface_property      (DBusGProxy *proxy, 
+-                                                       const gchar *iface_name, 
+-                                                       const gchar *prop_name);
+ const gchar   *xfpm_power_translate_device_type       (guint type);
+diff --git a/src/xfpm-power-info.c b/src/xfpm-power-info.c
+index a53a6be..263ccbd 100644
+--- a/src/xfpm-power-info.c
++++ b/src/xfpm-power-info.c
+@@ -39,6 +39,7 @@
+ #include <dbus/dbus-glib.h>
+ #include <dbus/dbus-glib-lowlevel.h>
++#include <upower.h>
+ #include "xfpm-icons.h"
+ #include "xfpm-power-common.h"
+@@ -59,6 +60,8 @@ typedef struct
+     
+     GtkWidget     *wakeups; /* Tree view processor wakeups*/
+     
++    UpClient        *upower;
++
+ } XfpmInfo;
+ enum
+@@ -253,18 +256,9 @@ gpm_stats_format_details (const gchar *command_details)
+ }
+ static gchar *
+-xfpm_info_get_energy_property (GHashTable *props, const gchar *prop, const gchar *unit)
++xfpm_info_get_energy_property (gdouble energy, const gchar *unit)
+ {
+-    GValue *value;
+     gchar *val = NULL;
+-    gdouble energy;
+-    
+-    value = g_hash_table_lookup (props, prop);
+-    
+-    if ( !value )
+-      return NULL;
+-      
+-    energy = g_value_get_double (value);
+     
+     val = g_strdup_printf ("%.1f %s", energy, unit);
+     
+@@ -301,7 +295,7 @@ xfpm_info_add_sidebar_icon (XfpmInfo *info, const gchar *name, const gchar *icon
+ }
+ static void
+-xfpm_info_add_device_view (XfpmInfo *info, GHashTable *props, const gchar *object_path)
++xfpm_info_add_device_view (XfpmInfo *info, UpDevice *device, const gchar *object_path)
+ {
+     GtkWidget *view;
+@@ -309,11 +303,12 @@ xfpm_info_add_device_view (XfpmInfo *info, GHashTable *props, const gchar *objec
+     GtkTreeIter iter;
+     GtkTreeViewColumn *col;
+     GtkCellRenderer *renderer;
+-    GValue *value;
+-    const gchar *cstr;
+     gchar *str;
+     gint i = 0;
+-    guint type = 0;
++    guint type = 0, tech = 0;
++    gdouble energy_full_design = -1.0, energy_full = -1.0, energy_empty = -1.0, voltage = -1.0, percent = -1.0;
++    gboolean p_supply = FALSE;
++    gchar *model = NULL, *vendor = NULL, *serial = NULL;
+     const gchar *battery_type = NULL;
+     
+     view = gtk_tree_view_new ();
+@@ -352,11 +347,26 @@ xfpm_info_add_device_view (XfpmInfo *info, GHashTable *props, const gchar *objec
+     
+     
+     /*Type*/
+-    value = g_hash_table_lookup (props, "Type");
+-    
+-    if ( value )
++    /* hack, this depends on XFPM_DEVICE_TYPE_* being in sync with UP_DEVICE_KIND_* */
++    g_object_get (device,
++                "kind", &type,
++                "power-supply", &p_supply,
++                "model", &model,
++                "vendor", &vendor,
++                "serial", &serial,
++                "technology", &tech,
++                "energy-full-design", &energy_full_design,
++                "energy-full", &energy_full,
++                "energy-empty", &energy_empty,
++                "voltage", &voltage,
++                "percentage", &percent,
++                NULL);
++
++    if (type > XFPM_DEVICE_TYPE_PHONE)
++        type = XFPM_DEVICE_TYPE_UNKNOWN;
++
++    if (type != XFPM_DEVICE_TYPE_UNKNOWN)
+     {
+-      type = g_value_get_uint (value);
+       battery_type = xfpm_power_translate_device_type (type);
+       gtk_list_store_append (list_store, &iter);
+       gtk_list_store_set (list_store, &iter, 
+@@ -366,55 +376,37 @@ xfpm_info_add_device_view (XfpmInfo *info, GHashTable *props, const gchar *objec
+       i++;
+     }
+     
+-    value = g_hash_table_lookup (props, "PowerSupply");
+-    
+-    if ( value )
+-    {
+-      gtk_list_store_append (list_store, &iter);
+-      gtk_list_store_set (list_store, &iter, 
+-                          XFPM_DEVICE_INFO_NAME, _("PowerSupply"), 
+-                          XFPM_DEVICE_INFO_VALUE, g_value_get_boolean (value) == TRUE ? _("True") : _("False"),
+-                          -1);
+-      i++;
+-    }
++    gtk_list_store_append (list_store, &iter);
++    gtk_list_store_set (list_store, &iter,
++                      XFPM_DEVICE_INFO_NAME, _("PowerSupply"),
++                      XFPM_DEVICE_INFO_VALUE, p_supply == TRUE ? _("True") : _("False"),
++                      -1);
++    i++;
+     
+     if ( type != XFPM_DEVICE_TYPE_LINE_POWER )
+     {
+       /*Model*/
+-      value = g_hash_table_lookup (props, "Model");
+-      
+-      if ( value )
+-      {
+-          cstr = g_value_get_string (value);
+-          if ( cstr && strlen (cstr) > 0)
+-          {
+-              gtk_list_store_append (list_store, &iter);
+-              gtk_list_store_set (list_store, &iter, 
+-                                  XFPM_DEVICE_INFO_NAME, _("Model"), 
+-                                  XFPM_DEVICE_INFO_VALUE, g_value_get_string (value),
+-                                  -1);
+-              i++;
+-          }
+-      }
+-      
+-      /*Technology*/
+-      value = g_hash_table_lookup (props, "Technology");
+-      
+-      if ( value )
++      if (model && strlen (model) > 0)
+       {
+           gtk_list_store_append (list_store, &iter);
+-          gtk_list_store_set (list_store, &iter, 
+-                              XFPM_DEVICE_INFO_NAME, _("Technology"), 
+-                              XFPM_DEVICE_INFO_VALUE, xfpm_power_translate_technology (g_value_get_uint (value)),
++          gtk_list_store_set (list_store, &iter,
++                              XFPM_DEVICE_INFO_NAME, _("Model"),
++                              XFPM_DEVICE_INFO_VALUE, model,
+                               -1);
+           i++;
+       }
+       
+-      value = g_hash_table_lookup (props, "Percentage");
++      gtk_list_store_append (list_store, &iter);
++      gtk_list_store_set (list_store, &iter,
++                          XFPM_DEVICE_INFO_NAME, _("Technology"),
++                          XFPM_DEVICE_INFO_VALUE, xfpm_power_translate_technology (tech),
++                          -1);
++      i++;
+-      if ( value )
++      /*Percentage*/
++      if (percent >= 0)
+       {
+-          str = g_strdup_printf("%d", (guint) g_value_get_double (value));
++          str = g_strdup_printf("%d", (guint) percent);
+           gtk_list_store_append (list_store, &iter);
+           gtk_list_store_set (list_store, &iter,
+                               XFPM_DEVICE_INFO_NAME, _("Energy percent"),
+@@ -424,11 +416,10 @@ xfpm_info_add_device_view (XfpmInfo *info, GHashTable *props, const gchar *objec
+           g_free(str);
+       }
+-      /* TRANSLATORS: Unit here is What hour*/
+-      str = xfpm_info_get_energy_property (props, "EnergyFullDesign", _("Wh"));
+-      
+-      if ( str )
++      if (energy_full_design > 0)
+       {
++          /* TRANSLATORS: Unit here is Watt hour*/
++          str = xfpm_info_get_energy_property (energy_full_design, _("Wh"));
+           gtk_list_store_append (list_store, &iter);
+           gtk_list_store_set (list_store, &iter, 
+                               XFPM_DEVICE_INFO_NAME, _("Energy full design"), 
+@@ -438,11 +429,10 @@ xfpm_info_add_device_view (XfpmInfo *info, GHashTable *props, const gchar *objec
+           g_free (str);
+       }
+       
+-      /* TRANSLATORS: Unit here is What hour*/
+-      str = xfpm_info_get_energy_property (props, "EnergyFull", _("Wh"));
+-      
+-      if ( str )
++      if (energy_full > 0)
+       {
++          /* TRANSLATORS: Unit here is Watt hour*/
++          str = xfpm_info_get_energy_property (energy_full, _("Wh"));
+           gtk_list_store_append (list_store, &iter);
+           gtk_list_store_set (list_store, &iter, 
+                               XFPM_DEVICE_INFO_NAME, _("Energy full"), 
+@@ -452,11 +442,10 @@ xfpm_info_add_device_view (XfpmInfo *info, GHashTable *props, const gchar *objec
+           g_free (str);
+       }
+       
+-      /* TRANSLATORS: Unit here is What hour*/
+-      str = xfpm_info_get_energy_property (props, "EnergyEmpty", _("Wh"));
+-      
+-      if ( str )
++      if (energy_empty > 0)
+       {
++          /* TRANSLATORS: Unit here is Watt hour*/
++          str = xfpm_info_get_energy_property (energy_empty, _("Wh"));
+           gtk_list_store_append (list_store, &iter);
+           gtk_list_store_set (list_store, &iter, 
+                               XFPM_DEVICE_INFO_NAME, _("Energy empty"), 
+@@ -466,10 +455,10 @@ xfpm_info_add_device_view (XfpmInfo *info, GHashTable *props, const gchar *objec
+           g_free (str);
+       }
+       
+-      /* TRANSLATORS: Unit here is volt*/
+-      str = xfpm_info_get_energy_property (props, "Voltage", _("V"));
+-      if ( str )
++      if (voltage > 0)
+       {
++          /* TRANSLATORS: Unit here is Volt*/
++          str = xfpm_info_get_energy_property (voltage, _("V"));
+           gtk_list_store_append (list_store, &iter);
+           gtk_list_store_set (list_store, &iter, 
+                               XFPM_DEVICE_INFO_NAME, _("Voltage"), 
+@@ -478,52 +467,25 @@ xfpm_info_add_device_view (XfpmInfo *info, GHashTable *props, const gchar *objec
+           i++;
+           g_free (str);
+       }
+-      
+-      /*Percentage*/
+-      str = xfpm_info_get_energy_property (props, "Percentage", _("%"));
+-      if ( str )
++
++      if (vendor && strlen (vendor) > 0)
+       {
+           gtk_list_store_append (list_store, &iter);
+           gtk_list_store_set (list_store, &iter,
+-                              XFPM_DEVICE_INFO_NAME, _("Percentage"),
+-                              XFPM_DEVICE_INFO_VALUE, str,
++                              XFPM_DEVICE_INFO_NAME, _("Vendor"),
++                              XFPM_DEVICE_INFO_VALUE, vendor,
+                               -1);
+           i++;
+-          g_free (str);
+       }
+-      /*Vendor*/
+-      value = g_hash_table_lookup (props, "Vendor");
+-      
+-      if ( value )
++      if (serial && strlen (serial) > 0)
+       {
+-          cstr = g_value_get_string (value);
+-          if ( cstr && strlen (cstr) > 0)
+-          {
+-              gtk_list_store_append (list_store, &iter);
+-              gtk_list_store_set (list_store, &iter, 
+-                                  XFPM_DEVICE_INFO_NAME, _("Vendor"), 
+-                                  XFPM_DEVICE_INFO_VALUE, g_value_get_string (value),
+-                                  -1);
+-              i++;
+-          }
+-      }
+-      
+-      /*Serial*/
+-      value = g_hash_table_lookup (props, "Serial");
+-      
+-      if ( value )
+-      {
+-          cstr = g_value_get_string (value);
+-          if ( cstr && strlen (cstr) > 0)
+-          {
+-              gtk_list_store_append (list_store, &iter);
+-              gtk_list_store_set (list_store, &iter, 
+-                                  XFPM_DEVICE_INFO_NAME, _("Serial"), 
+-                                  XFPM_DEVICE_INFO_VALUE, g_value_get_string (value),
+-                                  -1);
+-              i++;
+-          }
++          gtk_list_store_append (list_store, &iter);
++          gtk_list_store_set (list_store, &iter,
++                              XFPM_DEVICE_INFO_NAME, _("Serial"),
++                              XFPM_DEVICE_INFO_VALUE, serial,
++                              -1);
++          i++;
+       }
+     }
+     
+@@ -534,29 +496,10 @@ xfpm_info_add_device_view (XfpmInfo *info, GHashTable *props, const gchar *objec
+ }
+ static void
+-xfpm_info_add_device (XfpmInfo *info, const gchar *object_path)
++xfpm_info_add_device (XfpmInfo *info, UpDevice *device)
+ {
+-    DBusGProxy *proxy_prop;
+-    GHashTable *props;
+-    
+-    proxy_prop = dbus_g_proxy_new_for_name (info->bus, 
+-                                          UPOWER_NAME,
+-                                          object_path,
+-                                          DBUS_INTERFACE_PROPERTIES);
+-                                          
+-    if ( !proxy_prop )
+-    {
+-      g_warning ("Unable to create proxy for : %s", object_path);
+-      return;
+-    }
+-    
+-    props = xfpm_power_get_interface_properties (proxy_prop, UPOWER_IFACE_DEVICE);
+-    
+-    if ( props )
+-    {
+-      xfpm_info_add_device_view (info, props, object_path);
+-      g_hash_table_destroy (props);
+-    }
++    const gchar *object_path = up_device_get_object_path(device);
++    xfpm_info_add_device_view (info, device, object_path);
+ }
+ static void
+@@ -564,22 +507,18 @@ xfpm_info_power_devices (XfpmInfo *info)
+ {
+     GPtrArray *array = NULL;
+     guint i;
+-    
++#if !UP_CHECK_VERSION(0, 99, 0)
++    up_client_enumerate_devices_sync(info->upower, NULL, NULL);
++#endif
+     /*Check for upower/devkit power here*/
+-
+-    info->power_proxy = dbus_g_proxy_new_for_name (info->bus,
+-                                                 UPOWER_NAME,
+-                                                 UPOWER_PATH,
+-                                                 UPOWER_IFACE);
+-    
+-    array = xfpm_power_enumerate_devices (info->power_proxy);
++    array = up_client_get_devices(info->upower);
+     
+     if ( array )
+     {
+       for ( i = 0; i < array->len; i++)
+       {
+-          const gchar *object_path = ( const gchar *) g_ptr_array_index (array, i);
+-          xfpm_info_add_device (info, object_path);
++          UpDevice *device = g_ptr_array_index (array, i);
++          xfpm_info_add_device (info, device);
+       }
+       g_ptr_array_free (array, TRUE);
+     }
+@@ -928,6 +867,7 @@ xfpm_info_new (void)
+     info->power_proxy   = NULL;
+     info->wakeups_proxy = NULL;
+     info->dialog        = NULL;
++    info->upower        = up_client_new ();
+     
+     return info;
+ }
+diff --git a/src/xfpm-power.c b/src/xfpm-power.c
+index 618944a..35fbd12 100644
+--- a/src/xfpm-power.c
++++ b/src/xfpm-power.c
+@@ -28,6 +28,7 @@
+ #include <dbus/dbus-glib.h>
+ #include <dbus/dbus-glib-lowlevel.h>
++#include <upower.h>
+ #include <libxfce4util/libxfce4util.h>
+ #include <libxfce4ui/libxfce4ui.h>
+@@ -72,8 +73,7 @@ struct XfpmPowerPrivate
+ {
+     DBusGConnection *bus;
+-    DBusGProxy      *proxy;
+-    DBusGProxy      *proxy_prop;
++    UpClient        *upower;
+     GHashTable      *hash;
+@@ -148,61 +148,28 @@ G_DEFINE_TYPE (XfpmPower, xfpm_power, G_TYPE_OBJECT)
+ static void
+ xfpm_power_check_polkit_auth (XfpmPower *power)
+ {
+-    power->priv->auth_suspend = xfpm_polkit_check_auth (power->priv->polkit,
+-                                                      POLKIT_AUTH_SUSPEND);
+-
+-    power->priv->auth_hibernate = xfpm_polkit_check_auth (power->priv->polkit,
+-                                                        POLKIT_AUTH_HIBERNATE);
+-
+-}
+-#endif
+-
+-static void
+-xfpm_power_check_pm (XfpmPower *power, GHashTable *props)
+-{
+-    GValue *value;
+-    gboolean ret;
+-
+-    value = g_hash_table_lookup (props, "CanSuspend");
+-
+-    if (value == NULL)
++    const char *suspend, *hibernate;
++    if (LOGIND_RUNNING())
+     {
+-      g_warning ("No 'CanSuspend' property");
++      suspend   = POLKIT_AUTH_SUSPEND_LOGIND;
++      hibernate = POLKIT_AUTH_HIBERNATE_LOGIND;
+     }
+-    ret = g_value_get_boolean (value);
+-
+-    if (ret != power->priv->can_suspend)
+-    {
+-      power->priv->can_suspend = ret;
+-    }
+-
+-    value = g_hash_table_lookup (props, "CanHibernate");
+-
+-    if (value == NULL)
++    else
+     {
+-      g_warning ("No 'CanHibernate' property");
++      suspend   = POLKIT_AUTH_SUSPEND_UPOWER;
++      hibernate = POLKIT_AUTH_HIBERNATE_UPOWER;
+     }
++    power->priv->auth_suspend = xfpm_polkit_check_auth (power->priv->polkit,
++                                                      suspend);
+-    ret = g_value_get_boolean (value);
+-
+-    if (ret != power->priv->can_hibernate)
+-    {
+-      power->priv->can_hibernate = ret;
+-    }
++    power->priv->auth_hibernate = xfpm_polkit_check_auth (power->priv->polkit,
++                                                        hibernate);
+ }
++#endif
+ static void
+-xfpm_power_check_power (XfpmPower *power, GHashTable *props)
++xfpm_power_check_power (XfpmPower *power, gboolean on_battery)
+ {
+-    GValue *value;
+-    gboolean on_battery;
+-
+-    value = g_hash_table_lookup (props, "OnBattery");
+-
+-    if (G_LIKELY (value))
+-    {
+-      on_battery = g_value_get_boolean (value);
+-
+       if (on_battery != power->priv->on_battery )
+       {
+           GList *list;
+@@ -218,42 +185,15 @@ xfpm_power_check_power (XfpmPower *power, GHashTable *props)
+                             NULL);
+           }
+       }
+-    }
+-    else
+-    {
+-      g_warning ("No 'OnBattery' property");
+-    }
+ }
+ static void
+-xfpm_power_check_lid (XfpmPower *power, GHashTable *props)
++xfpm_power_check_lid (XfpmPower *power, gboolean present, gboolean closed)
+ {
+-    GValue *value;
+-
+-    value = g_hash_table_lookup (props, "LidIsPresent");
+-
+-    if (value == NULL)
+-    {
+-      g_warning ("No 'LidIsPresent' property");
+-      return;
+-    }
+-
+-    power->priv->lid_is_present = g_value_get_boolean (value);
++    power->priv->lid_is_present = present;
+     if (power->priv->lid_is_present)
+     {
+-      gboolean closed;
+-
+-      value = g_hash_table_lookup (props, "LidIsClosed");
+-
+-      if (value == NULL)
+-      {
+-          g_warning ("No 'LidIsClosed' property");
+-          return;
+-      }
+-
+-      closed = g_value_get_boolean (value);
+-
+       if (closed != power->priv->lid_is_closed )
+       {
+           power->priv->lid_is_closed = closed;
+@@ -276,10 +216,15 @@ xfpm_power_check_lid (XfpmPower *power, GHashTable *props)
+ static void
+ xfpm_power_get_properties (XfpmPower *power)
+ {
+-    GHashTable *props;
+-
+-    props = xfpm_power_get_interface_properties (power->priv->proxy_prop, UPOWER_IFACE);
++    gboolean on_battery;
++    gboolean lid_is_closed;
++    gboolean lid_is_present;
++    /* TODO: newer versions of upower don't have that => logind handles it */
++#if !UP_CHECK_VERSION(0, 99, 0)
++    power->priv->can_suspend = up_client_get_can_suspend(power->priv->upower);
++    power->priv->can_hibernate = up_client_get_can_hibernate(power->priv->upower);
++#else
+     if ( LOGIND_RUNNING () )
+     {
+         g_object_get (G_OBJECT (power->priv->systemd),
+@@ -291,13 +236,17 @@ xfpm_power_get_properties (XfpmPower *power)
+     }
+     else
+     {
+-      xfpm_power_check_pm (power, props);
++      g_warning("Error: using upower >= 0.99.0 but logind is not running");
++      g_warning("       suspend / hibernate will not work!");
+     }
+-
+-    xfpm_power_check_lid (power, props);
+-    xfpm_power_check_power (power, props);
+-
+-    g_hash_table_destroy (props);
++#endif
++    g_object_get (power->priv->upower,
++                  "on-battery", &on_battery,
++                  "lid-is-closed", &lid_is_closed,
++                  "lid-is-present", &lid_is_present,
++                  NULL);
++    xfpm_power_check_lid (power, lid_is_present, lid_is_closed);
++    xfpm_power_check_power (power, on_battery);
+ }
+ static void
+@@ -370,9 +319,19 @@ xfpm_power_sleep (XfpmPower *power, const gchar *sleep_time, gboolean force)
+     }
+     else
+     {
+-      dbus_g_proxy_call (power->priv->proxy, sleep_time, &error,
+-                         G_TYPE_INVALID,
+-                         G_TYPE_INVALID);
++#if !UP_CHECK_VERSION(0, 99, 0)
++      if (!g_strcmp0 (sleep_time, "Hibernate"))
++      {
++          up_client_hibernate_sync(power->priv->upower, NULL, &error);
++      }
++      else
++      {
++          up_client_suspend_sync(power->priv->upower, NULL, &error);
++      }
++#else
++      g_warning("Error: using upower >= 0.99.0 but logind is not running");
++      g_warning("       suspend / hibernate will not work!");
++#endif
+     }
+     if ( error )
+@@ -1028,26 +987,18 @@ xfpm_power_battery_charge_changed_cb (XfpmBattery *battery, XfpmPower *power)
+ }
+ static void
+-xfpm_power_add_device (XfpmPower *power, const gchar *object_path)
++xfpm_power_add_device (UpDevice *device, XfpmPower *power)
+ {
+-    DBusGProxy *proxy_prop;
+     guint device_type = XFPM_DEVICE_TYPE_UNKNOWN;
+-    GValue value;
++    const gchar *object_path = up_device_get_object_path(device);
+-    proxy_prop = dbus_g_proxy_new_for_name (power->priv->bus,
+-                                          UPOWER_NAME,
+-                                          object_path,
+-                                          DBUS_INTERFACE_PROPERTIES);
+-
+-    if ( !proxy_prop )
+-    {
+-      g_warning ("Unable to create proxy for : %s", object_path);
+-      return;
+-    }
+-
+-    value = xfpm_power_get_interface_property (proxy_prop, UPOWER_IFACE_DEVICE, "Type");
++    /* hack, this depends on XFPM_DEVICE_TYPE_* being in sync with UP_DEVICE_KIND_* */
++    g_object_get (device,
++                "kind", &device_type,
++                NULL);
+-    device_type = g_value_get_uint (&value);
++    if (device_type > XFPM_DEVICE_TYPE_PHONE)
++        device_type = XFPM_DEVICE_TYPE_UNKNOWN;
+     XFPM_DEBUG_ENUM (device_type, XFPM_TYPE_DEVICE_TYPE, " device added");
+@@ -1058,20 +1009,13 @@ xfpm_power_add_device (XfpmPower *power, const gchar *object_path)
+        device_type == XFPM_DEVICE_TYPE_PHONE)
+     {
+       GtkStatusIcon *battery;
+-      DBusGProxy *proxy;
+       XFPM_DEBUG_ENUM (device_type, XFPM_TYPE_DEVICE_TYPE,
+                       "Battery device detected at : %s", object_path);
+-      proxy = dbus_g_proxy_new_for_name (power->priv->bus,
+-                                         UPOWER_NAME,
+-                                         object_path,
+-                                         UPOWER_IFACE_DEVICE);
+       battery = xfpm_battery_new ();
+       gtk_status_icon_set_visible (battery, FALSE);
+       xfpm_battery_monitor_device (XFPM_BATTERY (battery),
+-                                   proxy,
+-                                   proxy_prop,
++                                   object_path,
+                                    device_type);
+-
+       g_hash_table_insert (power->priv->hash, g_strdup (object_path), battery);
+       g_signal_connect (battery, "popup-menu",
+@@ -1082,32 +1026,32 @@ xfpm_power_add_device (XfpmPower *power, const gchar *object_path)
+       xfpm_power_refresh_adaptor_visible (power);
+     }
+-    else if ( device_type != XFPM_DEVICE_TYPE_LINE_POWER )
+-    {
+-      g_warning ("Unable to monitor unknown power device with object_path : %s", object_path);
+-      g_object_unref (proxy_prop);
+-    }
+ }
+ static void
+ xfpm_power_get_power_devices (XfpmPower *power)
+ {
++#if !UP_CHECK_VERSION(0, 99, 0)
++    /* the device-add callback is called for each device */
++    up_client_enumerate_devices_sync(power->priv->upower, NULL, NULL);
++#else
+     GPtrArray *array = NULL;
+     guint i;
+-    array = xfpm_power_enumerate_devices (power->priv->proxy);
++    array = up_client_get_devices(power->priv->upower);
+     if ( array )
+     {
+       for ( i = 0; i < array->len; i++)
+       {
+-          const gchar *object_path = ( const gchar *) g_ptr_array_index (array, i);
++          UpDevice *device = g_ptr_array_index (array, i);
++          const gchar *object_path = up_device_get_object_path(device);
+           XFPM_DEBUG ("Power device detected at : %s", object_path);
+-          xfpm_power_add_device (power, object_path);
++          xfpm_power_add_device (device, power);
+       }
+       g_ptr_array_free (array, TRUE);
+     }
+-
++#endif
+ }
+ static void
+@@ -1124,23 +1068,36 @@ xfpm_power_inhibit_changed_cb (XfpmInhibit *inhibit, gboolean is_inhibit, XfpmPo
+ }
+ static void
+-xfpm_power_changed_cb (DBusGProxy *proxy, XfpmPower *power)
++xfpm_power_changed_cb (UpClient *upower,
++#if UP_CHECK_VERSION(0, 99, 0)
++                     GParamSpec *pspec,
++#endif
++                     XfpmPower *power)
+ {
+     xfpm_power_get_properties (power);
+     xfpm_power_refresh_adaptor_visible (power);
+ }
+ static void
+-xfpm_power_device_added_cb (DBusGProxy *proxy, const gchar *object_path, XfpmPower *power)
++xfpm_power_device_added_cb (UpClient *upower, UpDevice *device, XfpmPower *power)
+ {
+-    xfpm_power_add_device (power, object_path);
++    xfpm_power_add_device (device, power);
+ }
++#if UP_CHECK_VERSION(0, 99, 0)
++static void
++xfpm_power_device_removed_cb (UpClient *upower, const gchar *object_path, XfpmPower *power)
++{
++    xfpm_power_remove_device (power, object_path);
++}
++#else
+ static void
+-xfpm_power_device_removed_cb (DBusGProxy *proxy, const gchar *object_path, XfpmPower *power)
++xfpm_power_device_removed_cb (UpClient *upower, UpDevice *device, XfpmPower *power)
+ {
++    const gchar *object_path = up_device_get_object_path(device);
+     xfpm_power_remove_device (power, object_path);
+ }
++#endif
+ static void
+ xfpm_power_device_changed_cb (DBusGProxy *proxy, const gchar *object_path, XfpmPower *power)
+@@ -1378,6 +1335,7 @@ xfpm_power_init (XfpmPower *power)
+     power->priv->inhibit = xfpm_inhibit_new ();
+     power->priv->notify  = xfpm_notify_new ();
+     power->priv->conf    = xfpm_xfconf_new ();
++    power->priv->upower  = up_client_new ();
+     power->priv->systemd = NULL;
+     power->priv->console = NULL;
+@@ -1407,44 +1365,19 @@ xfpm_power_init (XfpmPower *power)
+       goto out;
+     }
+-    power->priv->proxy = dbus_g_proxy_new_for_name (power->priv->bus,
+-                                                  UPOWER_NAME,
+-                                                  UPOWER_PATH,
+-                                                  UPOWER_IFACE);
+-
+-
+-    power->priv->proxy_prop = dbus_g_proxy_new_for_name (power->priv->bus,
+-                                                       UPOWER_NAME,
+-                                                       UPOWER_PATH,
+-                                                       DBUS_INTERFACE_PROPERTIES);
+-    if (power->priv->proxy_prop == NULL)
+-    {
+-      g_critical ("Unable to create proxy for %s", UPOWER_NAME);
+-      goto out;
+-    }
+-
++    g_signal_connect (power->priv->upower, "device-added", G_CALLBACK (xfpm_power_device_added_cb), power);
++    g_signal_connect (power->priv->upower, "device-removed", G_CALLBACK (xfpm_power_device_removed_cb), power);
++#if UP_CHECK_VERSION(0, 99, 0)
++    g_signal_connect (power->priv->upower, "notify", G_CALLBACK (xfpm_power_changed_cb), power);
++#else
++    g_signal_connect (power->priv->upower, "changed", G_CALLBACK (xfpm_power_changed_cb), power);
++#endif
+     xfpm_power_get_power_devices (power);
+     xfpm_power_get_properties (power);
+ #ifdef ENABLE_POLKIT
+     xfpm_power_check_polkit_auth (power);
+ #endif
+-    dbus_g_proxy_add_signal (power->priv->proxy, "Changed", G_TYPE_INVALID);
+-    dbus_g_proxy_add_signal (power->priv->proxy, "DeviceAdded", G_TYPE_STRING, G_TYPE_INVALID);
+-    dbus_g_proxy_add_signal (power->priv->proxy, "DeviceRemoved", G_TYPE_STRING, G_TYPE_INVALID);
+-    dbus_g_proxy_add_signal (power->priv->proxy, "DeviceChanged", G_TYPE_STRING, G_TYPE_INVALID);
+-
+-    dbus_g_proxy_connect_signal (power->priv->proxy, "Changed",
+-                               G_CALLBACK (xfpm_power_changed_cb), power, NULL);
+-    dbus_g_proxy_connect_signal (power->priv->proxy, "DeviceRemoved",
+-                               G_CALLBACK (xfpm_power_device_removed_cb), power, NULL);
+-    dbus_g_proxy_connect_signal (power->priv->proxy, "DeviceAdded",
+-                               G_CALLBACK (xfpm_power_device_added_cb), power, NULL);
+-
+-    dbus_g_proxy_connect_signal (power->priv->proxy, "DeviceChanged",
+-                               G_CALLBACK (xfpm_power_device_changed_cb), power, NULL);
+-
+-
+ out:
+     xfpm_power_refresh_adaptor_visible (power);
+@@ -1512,22 +1445,6 @@ xfpm_power_finalize (GObject *object)
+     dbus_g_connection_unref (power->priv->bus);
+-    if ( power->priv->proxy )
+-    {
+-      dbus_g_proxy_disconnect_signal (power->priv->proxy, "Changed",
+-                                      G_CALLBACK (xfpm_power_changed_cb), power);
+-      dbus_g_proxy_disconnect_signal (power->priv->proxy, "DeviceRemoved",
+-                                      G_CALLBACK (xfpm_power_device_removed_cb), power);
+-      dbus_g_proxy_disconnect_signal (power->priv->proxy, "DeviceAdded",
+-                                      G_CALLBACK (xfpm_power_device_added_cb), power);
+-      dbus_g_proxy_disconnect_signal (power->priv->proxy, "DeviceChanged",
+-                                      G_CALLBACK (xfpm_power_device_changed_cb), power);
+-      g_object_unref (power->priv->proxy);
+-    }
+-
+-    if ( power->priv->proxy_prop )
+-      g_object_unref (power->priv->proxy_prop);
+-
+     g_hash_table_destroy (power->priv->hash);
+ #ifdef ENABLE_POLKIT
+-- 
+1.9.3
+
diff --git a/0176-get-rid-of-XfpmDeviceState-and-XfpmDeviceType.patch b/0176-get-rid-of-XfpmDeviceState-and-XfpmDeviceType.patch
new file mode 100644 (file)
index 0000000..758ccd5
--- /dev/null
@@ -0,0 +1,661 @@
+From 7f4fb9c021fb80d28d2ef7dcdbd3839a39d16f99 Mon Sep 17 00:00:00 2001
+From: Stefan Seyfried <seife+dev@b1-systems.com>
+Date: Sun, 13 Apr 2014 17:26:51 +0200
+Subject: [PATCH 176/219] get rid of XfpmDeviceState and XfpmDeviceType
+
+They are only mirroring UpDeviceState and UpDeviceKind
+from libupower-glib anyway.
+
+Signed-off-by: Eric Koegel <eric.koegel@gmail.com>
+---
+ src/xfpm-battery.c      | 125 ++++++++++++++++++++++++------------------------
+ src/xfpm-battery.h      |   5 +-
+ src/xfpm-enum-glib.h    |  26 ----------
+ src/xfpm-power-common.c |  47 +++++++++++-------
+ src/xfpm-power-info.c   |   7 +--
+ src/xfpm-power.c        |  39 +++++++--------
+ 6 files changed, 115 insertions(+), 134 deletions(-)
+
+diff --git a/src/xfpm-battery.c b/src/xfpm-battery.c
+index 9d1b590..dc38d32 100644
+--- a/src/xfpm-battery.c
++++ b/src/xfpm-battery.c
+@@ -60,8 +60,8 @@ struct XfpmBatteryPrivate
+     gchar                *icon_prefix;
+     XfpmBatteryCharge       charge;
+-    XfpmDeviceState         state;
+-    XfpmDeviceType          type;
++    UpDeviceState         state;
++    UpDeviceKind          type;
+     gboolean              ac_online;
+     gboolean                present;
+     guint                 percentage;
+@@ -96,7 +96,7 @@ static guint signals [LAST_SIGNAL] = { 0 };
+ G_DEFINE_TYPE (XfpmBattery, xfpm_battery, GTK_TYPE_STATUS_ICON)
+ static const gchar * G_GNUC_CONST
+-xfpm_battery_get_icon_index (XfpmDeviceType type, guint percent)
++xfpm_battery_get_icon_index (UpDeviceKind type, guint percent)
+ {
+     if (percent < 10)
+     {
+@@ -104,11 +104,11 @@ xfpm_battery_get_icon_index (XfpmDeviceType type, guint percent)
+     }
+     else if (percent < 30)
+     {
+-        return ( (type == XFPM_DEVICE_TYPE_BATTERY || type == XFPM_DEVICE_TYPE_UPS) ? "020" : "030");
++        return ( (type == UP_DEVICE_KIND_BATTERY || type == UP_DEVICE_KIND_UPS) ? "020" : "030");
+     }
+     else if (percent < 50)
+     {
+-        return ( (type == XFPM_DEVICE_TYPE_BATTERY || type == XFPM_DEVICE_TYPE_UPS ) ? "040" : "030");
++        return ( (type == UP_DEVICE_KIND_BATTERY || type == UP_DEVICE_KIND_UPS ) ? "040" : "030");
+     }
+     else if (percent < 70)
+     {
+@@ -116,7 +116,7 @@ xfpm_battery_get_icon_index (XfpmDeviceType type, guint percent)
+     }
+     else if (percent < 90)
+     {
+-        return ((type == XFPM_DEVICE_TYPE_BATTERY || type == XFPM_DEVICE_TYPE_UPS) ? "080" : "060");
++        return ((type == UP_DEVICE_KIND_BATTERY || type == UP_DEVICE_KIND_UPS) ? "080" : "060");
+     }
+     return "100";
+@@ -144,7 +144,7 @@ xfpm_battery_refresh_visible (XfpmBattery *battery)
+     }
+     else if ( show_icon == SHOW_ICON_WHEN_BATTERY_CHARGING_DISCHARGING )
+     {
+-      if ( battery->priv->state == XFPM_DEVICE_STATE_FULLY_CHARGED )
++      if ( battery->priv->state == UP_DEVICE_STATE_FULLY_CHARGED )
+           visible = FALSE;
+       else visible = TRUE;
+     }
+@@ -205,14 +205,14 @@ xfpm_battery_get_message_from_battery_state (XfpmBattery *battery)
+     gchar *msg  = NULL;
+-    if (battery->priv->type == XFPM_DEVICE_TYPE_BATTERY || battery->priv->type == XFPM_DEVICE_TYPE_UPS)
++    if (battery->priv->type == UP_DEVICE_KIND_BATTERY || battery->priv->type == UP_DEVICE_KIND_UPS)
+     {
+       switch (battery->priv->state)
+       {
+-          case XFPM_DEVICE_STATE_FULLY_CHARGED:
++          case UP_DEVICE_STATE_FULLY_CHARGED:
+               msg = g_strdup_printf (_("Your %s is fully charged"), battery->priv->battery_name);
+               break;
+-          case XFPM_DEVICE_STATE_CHARGING:
++          case UP_DEVICE_STATE_CHARGING:
+               msg = g_strdup_printf (_("Your %s is charging"), battery->priv->battery_name);
+               if ( battery->priv->time_to_full != 0 )
+@@ -229,7 +229,7 @@ xfpm_battery_get_message_from_battery_state (XfpmBattery *battery)
+               }
+               break;
+-          case XFPM_DEVICE_STATE_DISCHARGING:
++          case UP_DEVICE_STATE_DISCHARGING:
+               if (battery->priv->ac_online)
+                   msg =  g_strdup_printf (_("Your %s is discharging"), battery->priv->battery_name);
+               else
+@@ -248,7 +248,7 @@ xfpm_battery_get_message_from_battery_state (XfpmBattery *battery)
+                       g_free (est_time_str);
+                   }
+               break;
+-          case XFPM_DEVICE_STATE_EMPTY:
++          case UP_DEVICE_STATE_EMPTY:
+               msg = g_strdup_printf (_("Your %s is empty"), battery->priv->battery_name);
+               break;
+           default:
+@@ -256,20 +256,20 @@ xfpm_battery_get_message_from_battery_state (XfpmBattery *battery)
+       }
+     }
+-    else if (battery->priv->type >= XFPM_DEVICE_TYPE_MONITOR)
++    else if (battery->priv->type >= UP_DEVICE_KIND_MONITOR)
+     {
+       switch (battery->priv->state)
+       {
+-          case XFPM_DEVICE_STATE_FULLY_CHARGED:
++          case UP_DEVICE_STATE_FULLY_CHARGED:
+               msg = g_strdup_printf (_("Your %s is fully charged"), battery->priv->battery_name);
+               break;
+-          case XFPM_DEVICE_STATE_CHARGING:
++          case UP_DEVICE_STATE_CHARGING:
+               msg = g_strdup_printf (_("Your %s is charging"), battery->priv->battery_name);
+               break;
+-          case XFPM_DEVICE_STATE_DISCHARGING:
++          case UP_DEVICE_STATE_DISCHARGING:
+               msg =  g_strdup_printf (_("Your %s is discharging"), battery->priv->battery_name);
+               break;
+-          case XFPM_DEVICE_STATE_EMPTY:
++          case UP_DEVICE_STATE_EMPTY:
+               msg = g_strdup_printf (_("Your %s is empty"), battery->priv->battery_name);
+               break;
+           default:
+@@ -287,48 +287,48 @@ xfpm_battery_refresh_icon (XfpmBattery *battery)
+     XFPM_DEBUG ("Battery state %d", battery->priv->state);
+-    if ( battery->priv->type == XFPM_DEVICE_TYPE_BATTERY ||
+-       battery->priv->type == XFPM_DEVICE_TYPE_UPS )
++    if ( battery->priv->type == UP_DEVICE_KIND_BATTERY ||
++       battery->priv->type == UP_DEVICE_KIND_UPS )
+     {
+       if (!battery->priv->present)
+       {
+           g_snprintf (icon_name, 128, "%s%s", battery->priv->icon_prefix, "missing");
+       }
+-      else if (battery->priv->state == XFPM_DEVICE_STATE_FULLY_CHARGED )
++      else if (battery->priv->state == UP_DEVICE_STATE_FULLY_CHARGED )
+       {
+           g_snprintf (icon_name, 128, "%s%s", battery->priv->icon_prefix, battery->priv->ac_online ? "charged" : "100");
+       }
+-      else if ( battery->priv->state == XFPM_DEVICE_STATE_CHARGING ||
+-                battery->priv->state == XFPM_DEVICE_STATE_PENDING_CHARGING)
++      else if ( battery->priv->state == UP_DEVICE_STATE_CHARGING ||
++                battery->priv->state == UP_DEVICE_STATE_PENDING_CHARGE)
+       {
+           g_snprintf (icon_name, 128, "%s%s-%s",
+                       battery->priv->icon_prefix,
+                       xfpm_battery_get_icon_index (battery->priv->type, battery->priv->percentage),
+                       "charging");
+       }
+-      else if ( battery->priv->state == XFPM_DEVICE_STATE_DISCHARGING ||
+-                battery->priv->state == XFPM_DEVICE_STATE_PENDING_DISCHARGING)
++      else if ( battery->priv->state == UP_DEVICE_STATE_DISCHARGING ||
++                battery->priv->state == UP_DEVICE_STATE_PENDING_DISCHARGE)
+       {
+           g_snprintf (icon_name, 128, "%s%s",
+                       battery->priv->icon_prefix,
+                       xfpm_battery_get_icon_index (battery->priv->type, battery->priv->percentage));
+       }
+-      else if ( battery->priv->state == XFPM_DEVICE_STATE_EMPTY)
++      else if ( battery->priv->state == UP_DEVICE_STATE_EMPTY)
+       {
+           g_snprintf (icon_name, 128, "%s%s", battery->priv->icon_prefix, battery->priv->ac_online ? "000-charging" : "000");
+       }
+     }
+     else
+     {
+-      if ( !battery->priv->present || battery->priv->state == XFPM_DEVICE_STATE_EMPTY )
++      if ( !battery->priv->present || battery->priv->state == UP_DEVICE_STATE_EMPTY )
+       {
+           g_snprintf (icon_name, 128, "%s000", battery->priv->icon_prefix);
+       }
+-      else if ( battery->priv->state == XFPM_DEVICE_STATE_FULLY_CHARGED )
++      else if ( battery->priv->state == UP_DEVICE_STATE_FULLY_CHARGED )
+       {
+           g_snprintf (icon_name, 128, "%s100", battery->priv->icon_prefix);
+       }
+-      else if ( battery->priv->state == XFPM_DEVICE_STATE_DISCHARGING || battery->priv->state == XFPM_DEVICE_STATE_CHARGING )
++      else if ( battery->priv->state == UP_DEVICE_STATE_DISCHARGING || battery->priv->state == UP_DEVICE_STATE_CHARGING )
+       {
+           g_snprintf (icon_name, 128, "%s%s",
+                       battery->priv->icon_prefix,
+@@ -383,8 +383,8 @@ xfpm_battery_notify_state (XfpmBattery *battery)
+     if ( !gtk_status_icon_get_visible (GTK_STATUS_ICON (battery)) )
+       return;
+-    if ( battery->priv->type == XFPM_DEVICE_TYPE_BATTERY ||
+-       battery->priv->type == XFPM_DEVICE_TYPE_UPS )
++    if ( battery->priv->type == UP_DEVICE_KIND_BATTERY ||
++       battery->priv->type == UP_DEVICE_KIND_UPS )
+     {
+       if ( starting_up )
+       {
+@@ -416,7 +416,7 @@ xfpm_battery_set_tooltip_primary (XfpmBattery *battery, GtkTooltip *tooltip)
+     power_status = g_strdup_printf (battery->priv->ac_online ? _("Adaptor is online") : _("System is running on battery power"));
+-    if ( battery->priv->state == XFPM_DEVICE_STATE_FULLY_CHARGED )
++    if ( battery->priv->state == UP_DEVICE_STATE_FULLY_CHARGED )
+     {
+       if ( battery->priv->time_to_empty > 0 )
+       {
+@@ -436,7 +436,7 @@ xfpm_battery_set_tooltip_primary (XfpmBattery *battery, GtkTooltip *tooltip)
+                                  battery->priv->percentage);
+       }
+     }
+-    else if ( battery->priv->state == XFPM_DEVICE_STATE_CHARGING )
++    else if ( battery->priv->state == UP_DEVICE_STATE_CHARGING )
+     {
+       if ( battery->priv->time_to_full != 0 )
+       {
+@@ -456,7 +456,7 @@ xfpm_battery_set_tooltip_primary (XfpmBattery *battery, GtkTooltip *tooltip)
+                                  battery->priv->percentage);
+       }
+     }
+-    else if ( battery->priv->state == XFPM_DEVICE_STATE_DISCHARGING )
++    else if ( battery->priv->state == UP_DEVICE_STATE_DISCHARGING )
+     {
+       if ( battery->priv->time_to_empty != 0 )
+       {
+@@ -477,15 +477,15 @@ xfpm_battery_set_tooltip_primary (XfpmBattery *battery, GtkTooltip *tooltip)
+       }
+     }
+-    else if ( battery->priv->state == XFPM_DEVICE_STATE_PENDING_CHARGING )
++    else if ( battery->priv->state == UP_DEVICE_STATE_PENDING_CHARGE )
+     {
+       tip = g_strdup_printf (_("%s\n%s waiting to discharge (%i%%)."), power_status, battery->priv->battery_name, battery->priv->percentage);
+     }
+-    else if ( battery->priv->state == XFPM_DEVICE_STATE_PENDING_DISCHARGING )
++    else if ( battery->priv->state == UP_DEVICE_STATE_PENDING_DISCHARGE )
+     {
+       tip = g_strdup_printf (_("%s\n%s waiting to charge (%i%%)."), power_status, battery->priv->battery_name, battery->priv->percentage);
+     }
+-    else if ( battery->priv->state == XFPM_DEVICE_STATE_EMPTY )
++    else if ( battery->priv->state == UP_DEVICE_STATE_EMPTY )
+     {
+       tip = g_strdup_printf (_("%s\nYour %s is empty"), power_status, battery->priv->battery_name);
+     }
+@@ -554,8 +554,8 @@ xfpm_battery_refresh (XfpmBattery *battery, UpDevice *device)
+     xfpm_battery_refresh_icon (battery);
+-    if ( battery->priv->type == XFPM_DEVICE_TYPE_BATTERY ||
+-       battery->priv->type == XFPM_DEVICE_TYPE_UPS )
++    if ( battery->priv->type == UP_DEVICE_KIND_BATTERY ||
++       battery->priv->type == UP_DEVICE_KIND_UPS )
+     {
+       battery->priv->time_to_empty = to_empty;
+       battery->priv->time_to_full  = to_empty;
+@@ -590,8 +590,8 @@ xfpm_battery_query_tooltip (GtkStatusIcon *icon,
+     battery = XFPM_BATTERY (icon);
+-    if ( battery->priv->type == XFPM_DEVICE_TYPE_BATTERY ||
+-       battery->priv->type == XFPM_DEVICE_TYPE_UPS )
++    if ( battery->priv->type == UP_DEVICE_KIND_BATTERY ||
++       battery->priv->type == UP_DEVICE_KIND_UPS )
+     {
+       xfpm_battery_set_tooltip_primary (battery, tooltip);
+       return TRUE;
+@@ -684,10 +684,11 @@ xfpm_battery_class_init (XfpmBatteryClass *klass)
+     g_object_class_install_property (object_class,
+                                      PROP_DEVICE_TYPE,
+-                                     g_param_spec_enum ("device-type",
++                                     g_param_spec_uint ("device-type",
+                                                         NULL, NULL,
+-                                                      XFPM_TYPE_DEVICE_TYPE,
+-                                                      XFPM_DEVICE_TYPE_UNKNOWN,
++                                                      UP_DEVICE_KIND_UNKNOWN,
++                                                      UP_DEVICE_KIND_LAST,
++                                                      UP_DEVICE_KIND_UNKNOWN,
+                                                         G_PARAM_READABLE));
+     g_object_class_install_property (object_class,
+@@ -710,8 +711,8 @@ xfpm_battery_init (XfpmBattery *battery)
+     battery->priv->notify        = xfpm_notify_new ();
+     battery->priv->device        = NULL;
+     battery->priv->client        = NULL;
+-    battery->priv->state         = XFPM_DEVICE_STATE_UNKNOWN;
+-    battery->priv->type          = XFPM_DEVICE_TYPE_UNKNOWN;
++    battery->priv->state         = UP_DEVICE_STATE_UNKNOWN;
++    battery->priv->type          = UP_DEVICE_KIND_UNKNOWN;
+     battery->priv->charge        = XFPM_BATTERY_CHARGE_UNKNOWN;
+     battery->priv->icon_prefix   = NULL;
+     battery->priv->time_to_full  = 0;
+@@ -759,25 +760,25 @@ xfpm_battery_finalize (GObject *object)
+ }
+ static gchar *
+-xfpm_battery_get_icon_prefix_device_enum_type (XfpmDeviceType type)
++xfpm_battery_get_icon_prefix_device_enum_type (UpDeviceKind type)
+ {
+-    if ( type == XFPM_DEVICE_TYPE_BATTERY )
++    if ( type == UP_DEVICE_KIND_BATTERY )
+     {
+       return g_strdup (XFPM_PRIMARY_ICON_PREFIX);
+     }
+-    else if ( type == XFPM_DEVICE_TYPE_UPS )
++    else if ( type == UP_DEVICE_KIND_UPS )
+     {
+       return g_strdup (XFPM_UPS_ICON_PREFIX);
+     }
+-    else if ( type == XFPM_DEVICE_TYPE_MOUSE )
++    else if ( type == UP_DEVICE_KIND_MOUSE )
+     {
+       return g_strdup (XFPM_MOUSE_ICON_PREFIX);
+     }
+-    else if ( type == XFPM_DEVICE_TYPE_KBD )
++    else if ( type == UP_DEVICE_KIND_KEYBOARD )
+     {
+       return g_strdup (XFPM_KBD_ICON_PREFIX);
+     }
+-    else if ( type == XFPM_DEVICE_TYPE_PHONE )
++    else if ( type == UP_DEVICE_KIND_PHONE )
+     {
+       return g_strdup (XFPM_PHONE_ICON_PREFIX);
+     }
+@@ -786,31 +787,31 @@ xfpm_battery_get_icon_prefix_device_enum_type (XfpmDeviceType type)
+ }
+ static const gchar *
+-xfpm_battery_get_name (XfpmDeviceType type)
++xfpm_battery_get_name (UpDeviceKind type)
+ {
+     const gchar *name = NULL;
+     switch (type)
+     {
+-      case XFPM_DEVICE_TYPE_BATTERY:
++      case UP_DEVICE_KIND_BATTERY:
+           name = _("battery");
+           break;
+-      case XFPM_DEVICE_TYPE_UPS:
++      case UP_DEVICE_KIND_UPS:
+           name = _("UPS");
+           break;
+-      case XFPM_DEVICE_TYPE_MONITOR:
++      case UP_DEVICE_KIND_MONITOR:
+           name = _("monitor battery");
+           break;
+-      case XFPM_DEVICE_TYPE_MOUSE:
++      case UP_DEVICE_KIND_MOUSE:
+           name = _("mouse battery");
+           break;
+-      case XFPM_DEVICE_TYPE_KBD:
++      case UP_DEVICE_KIND_KEYBOARD:
+           name = _("keyboard battery");
+           break;
+-      case XFPM_DEVICE_TYPE_PDA:
++      case UP_DEVICE_KIND_PDA:
+           name = _("PDA battery");
+           break;
+-      case XFPM_DEVICE_TYPE_PHONE:
++      case UP_DEVICE_KIND_PHONE:
+           name = _("Phone battery");
+           break;
+       default:
+@@ -833,7 +834,7 @@ xfpm_battery_new (void)
+ void xfpm_battery_monitor_device (XfpmBattery *battery,
+                                 const char *object_path,
+-                                XfpmDeviceType device_type)
++                                UpDeviceKind device_type)
+ {
+     UpDevice *device;
+     battery->priv->type = device_type;
+@@ -856,9 +857,9 @@ void xfpm_battery_monitor_device (XfpmBattery *battery,
+     xfpm_battery_refresh (battery, device);
+ }
+-XfpmDeviceType xfpm_battery_get_device_type (XfpmBattery *battery)
++UpDeviceKind xfpm_battery_get_device_type (XfpmBattery *battery)
+ {
+-    g_return_val_if_fail (XFPM_IS_BATTERY (battery), XFPM_DEVICE_TYPE_UNKNOWN );
++    g_return_val_if_fail (XFPM_IS_BATTERY (battery), UP_DEVICE_KIND_UNKNOWN );
+     return battery->priv->type;
+ }
+diff --git a/src/xfpm-battery.h b/src/xfpm-battery.h
+index a3b57cf..049e335 100644
+--- a/src/xfpm-battery.h
++++ b/src/xfpm-battery.h
+@@ -24,6 +24,7 @@
+ #include <glib-object.h>
+ #include <gtk/gtk.h>
+ #include <dbus/dbus-glib.h>
++#include <upower.h>
+ #include "xfpm-enum-glib.h"
+@@ -57,9 +58,9 @@ GtkStatusIcon              *xfpm_battery_new             (void);
+ void                      xfpm_battery_monitor_device  (XfpmBattery *battery,
+                                                         const char *object_path,
+-                                                        XfpmDeviceType device_type);
++                                                        UpDeviceKind device_type);
+-XfpmDeviceType                    xfpm_battery_get_device_type (XfpmBattery *battery);
++UpDeviceKind              xfpm_battery_get_device_type (XfpmBattery *battery);
+ XfpmBatteryCharge         xfpm_battery_get_charge      (XfpmBattery *battery);
+diff --git a/src/xfpm-enum-glib.h b/src/xfpm-enum-glib.h
+index 5bb70fa..b29a611 100644
+--- a/src/xfpm-enum-glib.h
++++ b/src/xfpm-enum-glib.h
+@@ -27,32 +27,6 @@
+ G_BEGIN_DECLS
+-typedef enum
+-{
+-    XFPM_DEVICE_TYPE_UNKNOWN,
+-    XFPM_DEVICE_TYPE_LINE_POWER,
+-    XFPM_DEVICE_TYPE_BATTERY,
+-    XFPM_DEVICE_TYPE_UPS,
+-    XFPM_DEVICE_TYPE_MONITOR,
+-    XFPM_DEVICE_TYPE_MOUSE,
+-    XFPM_DEVICE_TYPE_KBD,
+-    XFPM_DEVICE_TYPE_PDA,
+-    XFPM_DEVICE_TYPE_PHONE
+-    
+-} XfpmDeviceType;
+-  
+-typedef enum
+-{
+-    XFPM_DEVICE_STATE_UNKNOWN,
+-    XFPM_DEVICE_STATE_CHARGING,
+-    XFPM_DEVICE_STATE_DISCHARGING,
+-    XFPM_DEVICE_STATE_EMPTY,
+-    XFPM_DEVICE_STATE_FULLY_CHARGED,
+-    XFPM_DEVICE_STATE_PENDING_CHARGING,
+-    XFPM_DEVICE_STATE_PENDING_DISCHARGING
+-    
+-} XfpmDeviceState;
+-
+ /*
+  * Order matters
+  */
+diff --git a/src/xfpm-power-common.c b/src/xfpm-power-common.c
+index d2c4ab5..5da6928 100644
+--- a/src/xfpm-power-common.c
++++ b/src/xfpm-power-common.c
+@@ -24,6 +24,7 @@
+ #include <libxfce4util/libxfce4util.h>
+ #include <dbus/dbus-glib-lowlevel.h>
++#include <upower.h>
+ #include "xfpm-power-common.h"
+ #include "xfpm-enum-glib.h"
+@@ -39,23 +40,27 @@ xfpm_power_translate_device_type (guint type)
+ {
+     switch (type)
+     {
+-        case XFPM_DEVICE_TYPE_BATTERY:
++        case UP_DEVICE_KIND_BATTERY:
+             return _("Battery");
+-        case XFPM_DEVICE_TYPE_UPS:
++        case UP_DEVICE_KIND_UPS:
+             return _("UPS");
+-        case XFPM_DEVICE_TYPE_LINE_POWER:
++        case UP_DEVICE_KIND_LINE_POWER:
+             return _("Line power");
+-        case XFPM_DEVICE_TYPE_MOUSE:
++        case UP_DEVICE_KIND_MOUSE:
+             return _("Mouse");
+-        case XFPM_DEVICE_TYPE_KBD:
++        case UP_DEVICE_KIND_KEYBOARD:
+             return _("Keyboard");
+-      case XFPM_DEVICE_TYPE_MONITOR:
++      case UP_DEVICE_KIND_MONITOR:
+           return _("Monitor");
+-      case XFPM_DEVICE_TYPE_PDA:
++      case UP_DEVICE_KIND_PDA:
+           return _("PDA");
+-      case XFPM_DEVICE_TYPE_PHONE:
++      case UP_DEVICE_KIND_PHONE:
+           return _("Phone");
+-      case XFPM_DEVICE_TYPE_UNKNOWN:
++      case UP_DEVICE_KIND_TABLET:
++          return _("Tablet");
++      case UP_DEVICE_KIND_COMPUTER:
++          return _("Computer");
++      case UP_DEVICE_KIND_UNKNOWN:
+           return _("Unknown");
+     }
+     
+@@ -93,23 +98,29 @@ const gchar *xfpm_power_get_icon_name (guint device_type)
+ {
+     switch (device_type)
+     {
+-        case XFPM_DEVICE_TYPE_BATTERY:
++        case UP_DEVICE_KIND_BATTERY:
+             return XFPM_BATTERY_ICON;
+-        case XFPM_DEVICE_TYPE_UPS:
++        case UP_DEVICE_KIND_UPS:
+             return XFPM_UPS_ICON;
+-        case XFPM_DEVICE_TYPE_LINE_POWER:
++        case UP_DEVICE_KIND_LINE_POWER:
+             return XFPM_AC_ADAPTER_ICON;
+-        case XFPM_DEVICE_TYPE_MOUSE:
++        case UP_DEVICE_KIND_MOUSE:
+             return XFPM_MOUSE_ICON;
+-        case XFPM_DEVICE_TYPE_KBD:
++        case UP_DEVICE_KIND_KEYBOARD:
+             return XFPM_KBD_ICON;
+-      case XFPM_DEVICE_TYPE_MONITOR:
++      case UP_DEVICE_KIND_MONITOR:
+           return "monitor";
+-      case XFPM_DEVICE_TYPE_PDA:
++      case UP_DEVICE_KIND_COMPUTER:
++          return "monitor";           /* fixme */
++      case UP_DEVICE_KIND_PDA:
+           return XFPM_PDA_ICON;
+-      case XFPM_DEVICE_TYPE_PHONE:
++      case UP_DEVICE_KIND_PHONE:
+           return XFPM_PHONE_ICON;
+-      case XFPM_DEVICE_TYPE_UNKNOWN:
++      case UP_DEVICE_KIND_TABLET:
++          return XFPM_PHONE_ICON;
++      case UP_DEVICE_KIND_MEDIA_PLAYER:
++          return XFPM_PHONE_ICON;     /* fixme */
++      case UP_DEVICE_KIND_UNKNOWN:
+           return XFPM_BATTERY_ICON;
+     }
+     
+diff --git a/src/xfpm-power-info.c b/src/xfpm-power-info.c
+index 263ccbd..72f2403 100644
+--- a/src/xfpm-power-info.c
++++ b/src/xfpm-power-info.c
+@@ -362,10 +362,7 @@ xfpm_info_add_device_view (XfpmInfo *info, UpDevice *device, const gchar *object
+                 "percentage", &percent,
+                 NULL);
+-    if (type > XFPM_DEVICE_TYPE_PHONE)
+-        type = XFPM_DEVICE_TYPE_UNKNOWN;
+-
+-    if (type != XFPM_DEVICE_TYPE_UNKNOWN)
++    if (type != UP_DEVICE_KIND_UNKNOWN)
+     {
+       battery_type = xfpm_power_translate_device_type (type);
+       gtk_list_store_append (list_store, &iter);
+@@ -383,7 +380,7 @@ xfpm_info_add_device_view (XfpmInfo *info, UpDevice *device, const gchar *object
+                       -1);
+     i++;
+     
+-    if ( type != XFPM_DEVICE_TYPE_LINE_POWER )
++    if ( type != UP_DEVICE_KIND_LINE_POWER )
+     {
+       /*Model*/
+       if (model && strlen (model) > 0)
+diff --git a/src/xfpm-power.c b/src/xfpm-power.c
+index 35fbd12..8283432 100644
+--- a/src/xfpm-power.c
++++ b/src/xfpm-power.c
+@@ -261,11 +261,11 @@ xfpm_power_report_error (XfpmPower *power, const gchar *error, const gchar *icon
+     for ( i = 0; i < len; i++)
+     {
+-      XfpmDeviceType type;
++      UpDeviceKind type;
+       battery = g_list_nth_data (list, i);
+       type = xfpm_battery_get_device_type (XFPM_BATTERY (battery));
+-      if ( type == XFPM_DEVICE_TYPE_BATTERY ||
+-           type == XFPM_DEVICE_TYPE_UPS )
++      if ( type == UP_DEVICE_KIND_BATTERY ||
++           type == UP_DEVICE_KIND_UPS )
+            break;
+     }
+@@ -640,14 +640,14 @@ xfpm_power_get_current_charge_state (XfpmPower *power)
+     for ( i = 0; i < len; i++)
+     {
+       XfpmBatteryCharge battery_charge;
+-      XfpmDeviceType type;
++      UpDeviceKind type;
+       g_object_get (G_OBJECT (g_list_nth_data (list, i)),
+                     "charge-status", &battery_charge,
+                     "device-type", &type,
+                     NULL);
+-      if ( type != XFPM_DEVICE_TYPE_BATTERY &&
+-           type != XFPM_DEVICE_TYPE_UPS )
++      if ( type != UP_DEVICE_KIND_BATTERY &&
++           type != UP_DEVICE_KIND_UPS )
+           continue;
+       max_charge_status = MAX (max_charge_status, battery_charge);
+@@ -989,7 +989,7 @@ xfpm_power_battery_charge_changed_cb (XfpmBattery *battery, XfpmPower *power)
+ static void
+ xfpm_power_add_device (UpDevice *device, XfpmPower *power)
+ {
+-    guint device_type = XFPM_DEVICE_TYPE_UNKNOWN;
++    guint device_type = UP_DEVICE_KIND_UNKNOWN;
+     const gchar *object_path = up_device_get_object_path(device);
+     /* hack, this depends on XFPM_DEVICE_TYPE_* being in sync with UP_DEVICE_KIND_* */
+@@ -997,20 +997,17 @@ xfpm_power_add_device (UpDevice *device, XfpmPower *power)
+                 "kind", &device_type,
+                 NULL);
+-    if (device_type > XFPM_DEVICE_TYPE_PHONE)
+-        device_type = XFPM_DEVICE_TYPE_UNKNOWN;
++    XFPM_DEBUG ("'%s' device added", up_device_kind_to_string(device_type));
+-    XFPM_DEBUG_ENUM (device_type, XFPM_TYPE_DEVICE_TYPE, " device added");
+-
+-    if ( device_type == XFPM_DEVICE_TYPE_BATTERY ||
+-       device_type == XFPM_DEVICE_TYPE_UPS     ||
+-       device_type == XFPM_DEVICE_TYPE_MOUSE   ||
+-       device_type == XFPM_DEVICE_TYPE_KBD     ||
+-       device_type == XFPM_DEVICE_TYPE_PHONE)
++    if ( device_type == UP_DEVICE_KIND_BATTERY        ||
++       device_type == UP_DEVICE_KIND_UPS      ||
++       device_type == UP_DEVICE_KIND_MOUSE    ||
++       device_type == UP_DEVICE_KIND_KEYBOARD ||
++       device_type == UP_DEVICE_KIND_PHONE)
+     {
+       GtkStatusIcon *battery;
+-      XFPM_DEBUG_ENUM (device_type, XFPM_TYPE_DEVICE_TYPE,
+-                      "Battery device detected at : %s", object_path);
++      XFPM_DEBUG( "Battery device type '%s' detected at: %s",
++                   up_device_kind_to_string(device_type), object_path);
+       battery = xfpm_battery_new ();
+       gtk_status_icon_set_visible (battery, FALSE);
+       xfpm_battery_monitor_device (XFPM_BATTERY (battery),
+@@ -1495,11 +1492,11 @@ gboolean xfpm_power_has_battery (XfpmPower *power)
+     for ( i = 0; i < len; i++)
+     {
+-      XfpmDeviceType type;
++      UpDeviceKind type;
+       battery = g_list_nth_data (list, i);
+       type = xfpm_battery_get_device_type (XFPM_BATTERY (battery));
+-      if ( type == XFPM_DEVICE_TYPE_BATTERY ||
+-           type == XFPM_DEVICE_TYPE_UPS )
++      if ( type == UP_DEVICE_KIND_BATTERY ||
++           type == UP_DEVICE_KIND_UPS )
+       {
+           ret = TRUE;
+           break;
+-- 
+1.9.3
+
diff --git a/0177-xfpm_backlight_button_pressed_cb-fix-popup-display.patch b/0177-xfpm_backlight_button_pressed_cb-fix-popup-display.patch
new file mode 100644 (file)
index 0000000..2d65dd0
--- /dev/null
@@ -0,0 +1,56 @@
+From cc57e74499209ca28b4bc0b2d12c6569e254c449 Mon Sep 17 00:00:00 2001
+From: Stefan Seyfried <seife+dev@b1-systems.com>
+Date: Sun, 13 Apr 2014 18:17:29 +0200
+Subject: [PATCH 177/219] xfpm_backlight_button_pressed_cb: fix popup display
+
+With /xfce4-power-manager/change-brightness-on-key-events=false, the
+level variable is used uninitialized and the popup's level gauge is
+wrong. Slight Code reformatting included, to avoid duplicating most
+of the code.  (Rebased version of a patch I wrote a year ago)
+
+Signed-off-by: Eric Koegel <eric.koegel@gmail.com>
+---
+ src/xfpm-backlight.c | 23 +++++++++++------------
+ 1 file changed, 11 insertions(+), 12 deletions(-)
+
+diff --git a/src/xfpm-backlight.c b/src/xfpm-backlight.c
+index 45c990f..a13ab84 100644
+--- a/src/xfpm-backlight.c
++++ b/src/xfpm-backlight.c
+@@ -202,22 +202,21 @@ xfpm_backlight_button_pressed_cb (XfpmButton *button, XfpmButtonKey type, XfpmBa
+                 SHOW_BRIGHTNESS_POPUP, &show_popup,
+                   NULL);
+     
+-    if ( type == BUTTON_MON_BRIGHTNESS_UP )
++    if ( type != BUTTON_MON_BRIGHTNESS_UP && type != BUTTON_MON_BRIGHTNESS_DOWN )
++      return; /* sanity check, can this ever happen? */
++
++    backlight->priv->block = TRUE;
++    if ( !enable_brightness )
++      ret = xfpm_brightness_get_level (backlight->priv->brightness, &level);
++    else
+     {
+-      backlight->priv->block = TRUE;
+-      if ( enable_brightness )
++      if ( type == BUTTON_MON_BRIGHTNESS_UP )
+           ret = xfpm_brightness_up (backlight->priv->brightness, &level);
+-      if ( ret && show_popup)
+-          xfpm_backlight_show (backlight, level);
+-    }
+-    else if ( type == BUTTON_MON_BRIGHTNESS_DOWN )
+-    {
+-      backlight->priv->block = TRUE;
+-      if ( enable_brightness )
++      else
+           ret = xfpm_brightness_down (backlight->priv->brightness, &level);
+-      if ( ret && show_popup)
+-          xfpm_backlight_show (backlight, level);
+     }
++    if ( ret && show_popup)
++      xfpm_backlight_show (backlight, level);
+ }
+ static void
+-- 
+1.9.3
+
diff --git a/0178-Fix-potential-uninitialized-variable.patch b/0178-Fix-potential-uninitialized-variable.patch
new file mode 100644 (file)
index 0000000..1d18cc9
--- /dev/null
@@ -0,0 +1,25 @@
+From 6efb453da4050aea8fc7f84105061e8392e69c1f Mon Sep 17 00:00:00 2001
+From: Eric Koegel <eric.koegel@gmail.com>
+Date: Sun, 13 Apr 2014 15:35:30 +0300
+Subject: [PATCH 178/219] Fix potential uninitialized variable
+
+---
+ src/xfpm-battery.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/xfpm-battery.c b/src/xfpm-battery.c
+index dc38d32..603c8de 100644
+--- a/src/xfpm-battery.c
++++ b/src/xfpm-battery.c
+@@ -513,6 +513,8 @@ xfpm_battery_check_charge (XfpmBattery *battery)
+       charge = XFPM_BATTERY_CHARGE_LOW;
+     else if ( battery->priv->percentage <= critical_level )
+       charge = XFPM_BATTERY_CHARGE_CRITICAL;
++    else
++      charge = XFPM_BATTERY_CHARGE_UNKNOWN;
+     if ( charge != battery->priv->charge)
+     {
+-- 
+1.9.3
+
diff --git a/0200-Add-a-option-for-network-manager-sleep-Bug-10702.patch b/0200-Add-a-option-for-network-manager-sleep-Bug-10702.patch
new file mode 100644 (file)
index 0000000..9297c2b
--- /dev/null
@@ -0,0 +1,170 @@
+From 345ec22154f6e922394f5d9e228a611048eee172 Mon Sep 17 00:00:00 2001
+From: Eric Koegel <eric.koegel@gmail.com>
+Date: Mon, 21 Apr 2014 08:45:22 +0300
+Subject: [PATCH 200/219] Add a option for network manager sleep (Bug 10702)
+
+An xfconf and settings option has been added so the user can disable
+sending network manager to sleep.
+---
+ data/interfaces/xfpm-settings.ui | 14 ++++++++++++++
+ settings/xfpm-settings.c         | 17 +++++++++++++++++
+ src/xfpm-config.h                |  1 +
+ src/xfpm-power.c                 | 22 ++++++++++++++++++++--
+ src/xfpm-xfconf.c                | 15 +++++++++++++++
+ 5 files changed, 67 insertions(+), 2 deletions(-)
+
+diff --git a/data/interfaces/xfpm-settings.ui b/data/interfaces/xfpm-settings.ui
+index fa8f72d..b0520f2 100644
+--- a/data/interfaces/xfpm-settings.ui
++++ b/data/interfaces/xfpm-settings.ui
+@@ -1348,6 +1348,20 @@
+                                         <property name="position">1</property>
+                                       </packing>
+                                     </child>
++                                    <child>
++                                      <object class="GtkCheckButton" id="network-manager-sleep">
++                                        <property name="label" translatable="yes">Notify Network Manager of suspend/hibernate</property>
++                                        <property name="visible">True</property>
++                                        <property name="can_focus">True</property>
++                                        <property name="receives_default">False</property>
++                                        <property name="draw_indicator">True</property>
++                                        <property name="tooltip-text" translatable="yes">When enabled this signals to network manager that the system is going to suspend/hibernate so it can power down the network interfaces, saving power.</property>
++                                      </object>
++                                      <packing>
++                                        <property name="expand">False</property>
++                                        <property name="position">2</property>
++                                      </packing>
++                                    </child>
+                                   </object>
+                                 </child>
+                               </object>
+diff --git a/settings/xfpm-settings.c b/settings/xfpm-settings.c
+index 123ef5b..cd3d6dd 100644
+--- a/settings/xfpm-settings.c
++++ b/settings/xfpm-settings.c
+@@ -1375,6 +1375,7 @@ xfpm_settings_advanced (XfconfChannel *channel, gboolean system_laptop,
+     GtkWidget *label;
+     GtkWidget *sleep_dpms_mode;
+     GtkWidget *suspend_dpms_mode;
++    GtkWidget *network_manager_sleep;
+     
+     GtkWidget *inact_suspend = GTK_WIDGET (gtk_builder_get_object (xml, "inactivity-suspend"));
+     GtkWidget *inact_hibernate = GTK_WIDGET (gtk_builder_get_object (xml, "inactivity-hibernate"));
+@@ -1483,6 +1484,22 @@ xfpm_settings_advanced (XfconfChannel *channel, gboolean system_laptop,
+     
+     val = xfconf_channel_get_bool (channel, PROPERTIES_PREFIX LOCK_SCREEN_ON_SLEEP, TRUE);
+     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(lock), val);
++
++    /*
++     * Network Manager Sleep for suspend/hibernate
++     */
++    network_manager_sleep = GTK_WIDGET (gtk_builder_get_object (xml, "network-manager-sleep"));
++
++#ifdef WITH_NETWORK_MANAGER
++    val = xfconf_channel_get_bool (channel, PROPERTIES_PREFIX NETWORK_MANAGER_SLEEP, TRUE);
++    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(network_manager_sleep), val);
++
++    xfconf_g_property_bind(channel, PROPERTIES_PREFIX NETWORK_MANAGER_SLEEP,
++                           G_TYPE_BOOLEAN, G_OBJECT(network_manager_sleep),
++                           "active");
++#else
++    gtk_widget_hide (network_manager_sleep);
++#endif
+ }
+ void
+diff --git a/src/xfpm-config.h b/src/xfpm-config.h
+index 39f55cc..7696826 100644
+--- a/src/xfpm-config.h
++++ b/src/xfpm-config.h
+@@ -82,6 +82,7 @@ G_BEGIN_DECLS
+ #define         SPIN_DOWN_ON_AC_TIMEOUT               "spin-down-on-ac-timeout"
+ #define         SPIN_DOWN_ON_BATTERY_TIMEOUT  "spin-down-on-battery-timeout"
++#define         NETWORK_MANAGER_SLEEP           "network-manager-sleep"
+ G_END_DECLS
+ #endif /* __XFPM_CONFIG_H */
+diff --git a/src/xfpm-power.c b/src/xfpm-power.c
+index 8283432..63b7070 100644
+--- a/src/xfpm-power.c
++++ b/src/xfpm-power.c
+@@ -285,6 +285,9 @@ xfpm_power_sleep (XfpmPower *power, const gchar *sleep_time, gboolean force)
+ {
+     GError *error = NULL;
+     gboolean lock_screen;
++#ifdef WITH_NETWORK_MANAGER
++    gboolean network_manager_sleep;
++#endif
+     if ( power->priv->inhibited && force == FALSE)
+     {
+@@ -301,7 +304,17 @@ xfpm_power_sleep (XfpmPower *power, const gchar *sleep_time, gboolean force)
+     }
+     g_signal_emit (G_OBJECT (power), signals [SLEEPING], 0);
+-    xfpm_network_manager_sleep (TRUE);
++
++#ifdef WITH_NETWORK_MANAGER
++    g_object_get (G_OBJECT (power->priv->conf),
++                  NETWORK_MANAGER_SLEEP, &network_manager_sleep,
++                  NULL);
++
++    if ( network_manager_sleep )
++    {
++        xfpm_network_manager_sleep (TRUE);
++    }
++#endif
+     g_object_get (G_OBJECT (power->priv->conf),
+                 LOCK_SCREEN_ON_SLEEP, &lock_screen,
+@@ -354,7 +367,12 @@ xfpm_power_sleep (XfpmPower *power, const gchar *sleep_time, gboolean force)
+     }
+     g_signal_emit (G_OBJECT (power), signals [WAKING_UP], 0);
+-    xfpm_network_manager_sleep (FALSE);
++#ifdef WITH_NETWORK_MANAGER
++    if ( network_manager_sleep )
++    {
++        xfpm_network_manager_sleep (FALSE);
++    }
++#endif
+ }
+ static void
+diff --git a/src/xfpm-xfconf.c b/src/xfpm-xfconf.c
+index 7ef8ae8..e7b1877 100644
+--- a/src/xfpm-xfconf.c
++++ b/src/xfpm-xfconf.c
+@@ -84,6 +84,9 @@ enum
+     PROP_SPIN_DOWN_DISK_ON_BATTERY,
+     PROP_SPIN_DOWN_DISK_ON_AC_TIMEOUT,
+     PROP_SPIN_DOWN_DISK_ON_BATTERY_TIMEOUT,
++#ifdef WITH_NETWORK_MANAGER
++    PROP_NETWORK_MANAGER_SLEEP,
++#endif
+     N_PROPERTIES
+ };
+@@ -561,6 +564,18 @@ xfpm_xfconf_class_init (XfpmXfconfClass *klass)
+                                                       120,
+                                                         G_PARAM_READWRITE));
++#ifdef WITH_NETWORK_MANAGER
++    /**
++     * XfpmXfconf::network-manager-sleep
++     **/
++    g_object_class_install_property (object_class,
++                                     PROP_NETWORK_MANAGER_SLEEP,
++                                     g_param_spec_boolean (NETWORK_MANAGER_SLEEP,
++                                                           NULL, NULL,
++                                                           TRUE,
++                                                           G_PARAM_READWRITE));
++#endif
++
+     g_type_class_add_private (klass, sizeof (XfpmXfconfPrivate));
+ }
+-- 
+1.9.3
+
diff --git a/0201-Fix-for-enable-deprecared-and-gseal.patch b/0201-Fix-for-enable-deprecared-and-gseal.patch
new file mode 100644 (file)
index 0000000..837776b
--- /dev/null
@@ -0,0 +1,527 @@
+From f2ba5b74f21b6d9a8d0eb2ff088a6aeab8c60530 Mon Sep 17 00:00:00 2001
+From: Eric Koegel <eric.koegel@gmail.com>
+Date: Mon, 28 Apr 2014 10:21:51 +0300
+Subject: [PATCH 201/219] Fix for enable deprecared and gseal
+
+Make changes so that xfpm will compile in --enable-debug=full with
+the nick/xfce4-dev-tools deprecated+seal branch.
+---
+ common/xfpm-brightness.c                     | 24 +++++-----
+ common/xfpm-common.c                         | 31 ------------
+ panel-plugins/brightness/brightness-button.c | 71 ++++++++++++++--------------
+ settings/xfpm-settings.c                     |  4 +-
+ src/egg-idletime.c                           |  2 +-
+ src/xfpm-button.c                            |  4 +-
+ src/xfpm-dpms.c                              | 22 ++++-----
+ src/xfpm-power-info.c                        |  2 +-
+ src/xfpm-power.c                             | 17 +++----
+ 9 files changed, 70 insertions(+), 107 deletions(-)
+
+diff --git a/common/xfpm-brightness.c b/common/xfpm-brightness.c
+index f1524cb..e18c617 100644
+--- a/common/xfpm-brightness.c
++++ b/common/xfpm-brightness.c
+@@ -67,7 +67,7 @@ xfpm_brightness_xrand_get_limit (XfpmBrightness *brightness, RROutput output, gi
+     gboolean ret = TRUE;
+     gdk_error_trap_push ();
+-    info = XRRQueryOutputProperty (GDK_DISPLAY (), output, brightness->priv->backlight);
++    info = XRRQueryOutputProperty (gdk_x11_get_default_xdisplay (), output, brightness->priv->backlight);
+     
+     if (gdk_error_trap_pop () != 0
+         || info == NULL)
+@@ -102,7 +102,7 @@ xfpm_brightness_xrandr_get_level (XfpmBrightness *brightness, RROutput output, g
+     gboolean ret = FALSE;
+     gdk_error_trap_push ();
+-    if (XRRGetOutputProperty (GDK_DISPLAY (), output, brightness->priv->backlight,
++    if (XRRGetOutputProperty (gdk_x11_get_default_xdisplay (), output, brightness->priv->backlight,
+                             0, 4, False, False, None,
+                             &actual_type, &actual_format,
+                             &nitems, &bytes_after, ((unsigned char **)&prop)) != Success
+@@ -129,10 +129,10 @@ xfpm_brightness_xrandr_set_level (XfpmBrightness *brightness, RROutput output, g
+     gboolean ret = TRUE;
+     gdk_error_trap_push ();
+-    XRRChangeOutputProperty (GDK_DISPLAY (), output, brightness->priv->backlight, XA_INTEGER, 32,
++    XRRChangeOutputProperty (gdk_x11_get_default_xdisplay (), output, brightness->priv->backlight, XA_INTEGER, 32,
+                            PropModeReplace, (unsigned char *) &level, 1);
+                            
+-    XFlush (GDK_DISPLAY ());
++    XFlush (gdk_x11_get_default_xdisplay ());
+     gdk_flush ();
+     
+     if ( gdk_error_trap_pop () ) 
+@@ -157,8 +157,8 @@ xfpm_brightness_setup_xrandr (XfpmBrightness *brightness)
+     gint i;
+     
+     gdk_error_trap_push ();
+-    if (!XRRQueryExtension (GDK_DISPLAY (), &event_base, &error_base) ||
+-      !XRRQueryVersion (GDK_DISPLAY (), &major, &minor) )
++    if (!XRRQueryExtension (gdk_x11_get_default_xdisplay (), &event_base, &error_base) ||
++      !XRRQueryVersion (gdk_x11_get_default_xdisplay (), &major, &minor) )
+     {
+       gdk_error_trap_pop ();
+       g_warning ("No XRANDR extension found");
+@@ -173,10 +173,10 @@ xfpm_brightness_setup_xrandr (XfpmBrightness *brightness)
+     }
+     
+ #ifdef RR_PROPERTY_BACKLIGHT
+-    brightness->priv->backlight = XInternAtom (GDK_DISPLAY (), RR_PROPERTY_BACKLIGHT, True);
++    brightness->priv->backlight = XInternAtom (gdk_x11_get_default_xdisplay (), RR_PROPERTY_BACKLIGHT, True);
+     if (brightness->priv->backlight == None) /* fall back to deprecated name */
+ #endif
+-    brightness->priv->backlight = XInternAtom (GDK_DISPLAY (), "BACKLIGHT", True);
++    brightness->priv->backlight = XInternAtom (gdk_x11_get_default_xdisplay (), "BACKLIGHT", True);
+     
+     if (brightness->priv->backlight == None) 
+     {
+@@ -190,18 +190,18 @@ xfpm_brightness_setup_xrandr (XfpmBrightness *brightness)
+     gdk_error_trap_push ();
+     
+-    window = RootWindow (GDK_DISPLAY (), screen_num);
++    window = RootWindow (gdk_x11_get_default_xdisplay (), screen_num);
+     
+ #if (RANDR_MAJOR == 1 && RANDR_MINOR >=3 )
+     if (major > 1 || minor >= 3)
+-      brightness->priv->resource = XRRGetScreenResourcesCurrent (GDK_DISPLAY (), window);
++      brightness->priv->resource = XRRGetScreenResourcesCurrent (gdk_x11_get_default_xdisplay (), window);
+     else
+ #endif
+-      brightness->priv->resource = XRRGetScreenResources (GDK_DISPLAY (), window);
++      brightness->priv->resource = XRRGetScreenResources (gdk_x11_get_default_xdisplay (), window);
+     for ( i = 0; i < brightness->priv->resource->noutput; i++)
+     {
+-      info = XRRGetOutputInfo (GDK_DISPLAY (), brightness->priv->resource, brightness->priv->resource->outputs[i]);
++      info = XRRGetOutputInfo (gdk_x11_get_default_xdisplay (), brightness->priv->resource, brightness->priv->resource->outputs[i]);
+       if ( g_str_has_prefix (info->name, "LVDS") )
+       {
+diff --git a/common/xfpm-common.c b/common/xfpm-common.c
+index b859f16..4297585 100644
+--- a/common/xfpm-common.c
++++ b/common/xfpm-common.c
+@@ -52,33 +52,6 @@ GtkBuilder *xfpm_builder_new_from_string (const gchar *ui, GError **error)
+     return builder;
+ }
+-static void
+-xfpm_link_browser (GtkAboutDialog *about, const gchar *linkto, gpointer data)
+-{
+-    gchar *cmd;
+-    
+-    cmd = g_strdup_printf ("%s %s","xdg-open", linkto);
+-    
+-    if ( !g_spawn_command_line_async (cmd, NULL) )
+-    {
+-      g_free (cmd);
+-      cmd = g_strdup_printf ("%s %s","xfbrowser4", linkto);
+-      g_spawn_command_line_async (cmd, NULL);
+-    }
+-    g_free (cmd);
+-      
+-}
+-
+-static void
+-xfpm_link_mailto (GtkAboutDialog *about, const gchar *linkto, gpointer data)
+-{
+-    gchar *cmd = g_strdup_printf( "%s %s", "xdg-email", linkto);
+-
+-    g_spawn_command_line_async (cmd, NULL);
+-    
+-    g_free (cmd);
+-}
+-      
+ void       
+ xfpm_lock_screen (void)
+ {
+@@ -134,11 +107,7 @@ xfpm_about (GtkWidget *widget, gpointer data)
+       "Ali Abdallah <aliov@xfce.org>",
+       NULL,
+     };
+-    
+-    gtk_about_dialog_set_url_hook (xfpm_link_browser, NULL, NULL);
+-    gtk_about_dialog_set_email_hook (xfpm_link_mailto, NULL, NULL);
+-    
+     gtk_show_about_dialog (NULL,
+                    "authors", authors,
+                    "copyright", "Copyright \302\251 2008-2011 Ali Abdallah",
+diff --git a/panel-plugins/brightness/brightness-button.c b/panel-plugins/brightness/brightness-button.c
+index 8c527bf..c2ee38b 100644
+--- a/panel-plugins/brightness/brightness-button.c
++++ b/panel-plugins/brightness/brightness-button.c
+@@ -96,7 +96,7 @@ brightness_button_grab_notify (BrightnessButton *button, gboolean was_grabbed)
+     if (was_grabbed != FALSE)
+       return;
+-    if (!GTK_WIDGET_HAS_GRAB (button->priv->popup))
++    if (!gtk_widget_has_grab (button->priv->popup))
+       return;
+     if (gtk_widget_is_ancestor (gtk_grab_get_current (), button->priv->popup))
+@@ -143,7 +143,7 @@ brightness_button_release_grab (BrightnessButton *button, GdkEventButton *event)
+     gtk_widget_hide (button->priv->popup);
+     e = (GdkEventButton *) gdk_event_copy ((GdkEvent *) event);
+-    e->window = GTK_WIDGET (button)->window;
++    e->window = gtk_widget_get_window (GTK_WIDGET (button));
+     e->type = GDK_BUTTON_RELEASE;
+     gtk_widget_event (GTK_WIDGET (button), (GdkEvent *) e);
+     e->window = event->window;
+@@ -192,6 +192,7 @@ brightness_button_popup_win (GtkWidget *widget, GdkEvent *ev, guint32 ev_time)
+     BrightnessButton *button;
+     XfceScreenPosition pos;
+     gboolean has_hw;
++    GtkAllocation widget_allocation, popup_allocation;
+     
+     button = BRIGHTNESS_BUTTON (widget);
+     
+@@ -209,7 +210,7 @@ brightness_button_popup_win (GtkWidget *widget, GdkEvent *ev, guint32 ev_time)
+     
+     gtk_grab_add (button->priv->popup);
+-    if (gdk_pointer_grab (button->priv->popup->window, TRUE,
++    if (gdk_pointer_grab (gtk_widget_get_window (button->priv->popup), TRUE,
+                       GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
+                       GDK_POINTER_MOTION_MASK, NULL, NULL, ev_time)
+         != GDK_GRAB_SUCCESS)
+@@ -219,7 +220,7 @@ brightness_button_popup_win (GtkWidget *widget, GdkEvent *ev, guint32 ev_time)
+       return FALSE;
+     }
+-    if (gdk_keyboard_grab (button->priv->popup->window, TRUE, ev_time) != GDK_GRAB_SUCCESS)
++    if (gdk_keyboard_grab (gtk_widget_get_window (button->priv->popup), TRUE, ev_time) != GDK_GRAB_SUCCESS)
+     {
+       gdk_display_pointer_ungrab (display, ev_time);
+       gtk_grab_remove (button->priv->popup);
+@@ -231,69 +232,67 @@ brightness_button_popup_win (GtkWidget *widget, GdkEvent *ev, guint32 ev_time)
+     gtk_widget_grab_focus (button->priv->range);
+     
+     /* Position */
+-    gdk_window_get_origin (widget->window, &x, &y);
++    gdk_window_get_origin (gtk_widget_get_window (widget), &x, &y);
+     pos = xfce_panel_plugin_get_screen_position (button->priv->plugin);
+-    
++
++    gtk_widget_get_allocation (widget, &widget_allocation);
++    gtk_widget_get_allocation (button->priv->popup, &popup_allocation);
++
+     /* top */
+     if ( pos == XFCE_SCREEN_POSITION_NW_H || 
+        pos == XFCE_SCREEN_POSITION_N    ||
+        pos == XFCE_SCREEN_POSITION_NE_H )
+     {
+-      x += widget->allocation.x
+-              + widget->allocation.width/2;
+-      y += widget->allocation.height;
+-      x -= button->priv->popup->allocation.width/2;
++      x += widget_allocation.x + widget_allocation.width/2;
++      y += widget_allocation.height;
++      x -= popup_allocation.width/2;
+     }
+     /* left */
+     else if ( pos == XFCE_SCREEN_POSITION_NW_V ||
+             pos == XFCE_SCREEN_POSITION_W    ||
+             pos == XFCE_SCREEN_POSITION_SW_V )
+     {
+-      y += widget->allocation.y
+-              + widget->allocation.height/2;
+-      x += widget->allocation.width;
+-      y -= button->priv->popup->allocation.height/2;
++      y += widget_allocation.y + widget_allocation.height/2;
++      x += widget_allocation.width;
++      y -= popup_allocation.height/2;
+     }
+     /* right */
+     else if ( pos == XFCE_SCREEN_POSITION_NE_V ||
+             pos == XFCE_SCREEN_POSITION_E    ||
+             pos == XFCE_SCREEN_POSITION_SE_V )
+     {
+-      y += widget->allocation.y
+-              + widget->allocation.height/2;
+-      x -= button->priv->popup->allocation.width;
+-      y -= button->priv->popup->allocation.height/2;
++      y += widget_allocation.y
++              + widget_allocation.height/2;
++      x -= popup_allocation.width;
++      y -= popup_allocation.height/2;
+     }
+     /* bottom */
+     else if ( pos == XFCE_SCREEN_POSITION_SW_H ||
+             pos == XFCE_SCREEN_POSITION_S    ||
+             pos == XFCE_SCREEN_POSITION_SE_H )
+     {
+-      x += widget->allocation.x
+-              + widget->allocation.width/2;
+-      y -= button->priv->popup->allocation.height;
+-      x -= button->priv->popup->allocation.width/2;
++      x += widget_allocation.x + widget_allocation.width/2;
++      y -= popup_allocation.height;
++      x -= popup_allocation.width/2;
+     }
+     else if ( pos == XFCE_SCREEN_POSITION_FLOATING_H )
+     {
+-      x += widget->allocation.x
+-              + widget->allocation.width/2;
+-      x -= button->priv->popup->allocation.width/2;
+-      if ( y > button->priv->popup->allocation.height )
+-          y -= button->priv->popup->allocation.height;
++      x += widget_allocation.x + widget_allocation.width/2;
++      x -= popup_allocation.width/2;
++      if ( y > popup_allocation.height )
++          y -= popup_allocation.height;
+       else 
+-           y += widget->allocation.height;
++           y += widget_allocation.height;
+     }
+     else if ( pos == XFCE_SCREEN_POSITION_FLOATING_V )
+     {
+-      y -= button->priv->popup->allocation.height/2;
+-      y += widget->allocation.y
+-              + widget->allocation.height/2;
+-      if ( x < button->priv->popup->allocation.width )
+-          x += widget->allocation.width;
++      y -= popup_allocation.height/2;
++      y += widget_allocation.y + widget_allocation.height/2;
++      if ( x < popup_allocation.width )
++          x += widget_allocation.width;
+       else
+-          x -= button->priv->popup->allocation.width;
++          x -= popup_allocation.width;
+     }
+     else
+     {
+@@ -579,8 +578,8 @@ brightness_button_set_icon (BrightnessButton *button, gint width)
+ static gboolean
+ brightness_button_size_changed_cb (XfcePanelPlugin *plugin, gint size, BrightnessButton *button)
+ {
+-    gint width = size -2 - 2* MAX(GTK_WIDGET(button)->style->xthickness,
+-                                GTK_WIDGET(button)->style->xthickness);
++    gint width = size -2 - 2* MAX(gtk_widget_get_style(GTK_WIDGET(button))->xthickness,
++                                gtk_widget_get_style(GTK_WIDGET(button))->xthickness);
+                                
+     gtk_widget_set_size_request (GTK_WIDGET(plugin), size, size);
+     return brightness_button_set_icon (button, width);
+diff --git a/settings/xfpm-settings.c b/settings/xfpm-settings.c
+index cd3d6dd..3321ee5 100644
+--- a/settings/xfpm-settings.c
++++ b/settings/xfpm-settings.c
+@@ -943,7 +943,7 @@ xfpm_settings_on_battery (XfconfChannel *channel, gboolean auth_hibernate,
+     else
+     {
+       frame = GTK_WIDGET (gtk_builder_get_object (xml, "on-battery-brg-frame"));
+-      gtk_widget_hide_all (frame);
++      gtk_widget_hide (frame);
+     }
+ #ifndef HAVE_DPMS
+     if ( !has_lcd_brightness )
+@@ -1092,7 +1092,7 @@ xfpm_settings_on_ac (XfconfChannel *channel, gboolean auth_suspend,
+     else
+     {
+       frame = GTK_WIDGET (gtk_builder_get_object (xml, "on-ac-brg-frame"));
+-      gtk_widget_hide_all (frame);
++      gtk_widget_hide (frame);
+     }
+ #ifndef HAVE_DPMS
+     if ( !has_lcd_brightness )
+diff --git a/src/egg-idletime.c b/src/egg-idletime.c
+index 9db5fd7..2c6b2a8 100644
+--- a/src/egg-idletime.c
++++ b/src/egg-idletime.c
+@@ -396,7 +396,7 @@ egg_idletime_init (EggIdletime *idletime)
+       idletime->priv->reset_set = FALSE;
+       idletime->priv->idle_counter = None;
+       idletime->priv->sync_event = 0;
+-      idletime->priv->dpy = GDK_DISPLAY ();
++      idletime->priv->dpy = gdk_x11_get_default_xdisplay ();
+       /* get the sync event */
+       if (!XSyncQueryExtension (idletime->priv->dpy, &idletime->priv->sync_event, &sync_error)) {
+diff --git a/src/xfpm-button.c b/src/xfpm-button.c
+index accf76d..b7023bf 100644
+--- a/src/xfpm-button.c
++++ b/src/xfpm-button.c
+@@ -127,7 +127,7 @@ xfpm_button_grab_keystring (XfpmButton *button, guint keycode)
+     guint ret;
+     guint modmask = AnyModifier;
+     
+-    display = GDK_DISPLAY ();
++    display = gdk_x11_get_default_xdisplay ();
+     
+     gdk_error_trap_push ();
+@@ -162,7 +162,7 @@ xfpm_button_grab_keystring (XfpmButton *button, guint keycode)
+ static gboolean
+ xfpm_button_xevent_key (XfpmButton *button, guint keysym , XfpmButtonKey key)
+ {
+-    guint keycode = XKeysymToKeycode (GDK_DISPLAY(), keysym);
++    guint keycode = XKeysymToKeycode (gdk_x11_get_default_xdisplay(), keysym);
+     if ( keycode == 0 )
+     {
+diff --git a/src/xfpm-dpms.c b/src/xfpm-dpms.c
+index 53f3721..fdc573c 100644
+--- a/src/xfpm-dpms.c
++++ b/src/xfpm-dpms.c
+@@ -67,12 +67,12 @@ xfpm_dpms_set_timeouts (XfpmDpms *dpms, guint16 standby, guint16 suspend, guint
+ {
+     CARD16 x_standby = 0 , x_suspend = 0, x_off = 0;
+     
+-    DPMSGetTimeouts (GDK_DISPLAY(), &x_standby, &x_suspend, &x_off);
++    DPMSGetTimeouts (gdk_x11_get_default_xdisplay(), &x_standby, &x_suspend, &x_off);
+     
+     if ( standby != x_standby || suspend != x_suspend || off != x_off )
+     {
+       XFPM_DEBUG ("Settings dpms: standby=%d suspend=%d off=%d\n", standby, suspend, off);
+-      DPMSSetTimeouts (GDK_DISPLAY(), standby,
++      DPMSSetTimeouts (gdk_x11_get_default_xdisplay(), standby,
+                                       suspend,
+                                       off );
+     }
+@@ -87,11 +87,11 @@ xfpm_dpms_disable (XfpmDpms *dpms)
+     BOOL state;
+     CARD16 power_level;
+     
+-    if (!DPMSInfo (GDK_DISPLAY(), &power_level, &state) )
++    if (!DPMSInfo (gdk_x11_get_default_xdisplay(), &power_level, &state) )
+       g_warning ("Cannot get DPMSInfo");
+       
+     if ( state )
+-      DPMSDisable (GDK_DISPLAY());
++      DPMSDisable (gdk_x11_get_default_xdisplay());
+ }
+ /*
+@@ -103,11 +103,11 @@ xfpm_dpms_enable (XfpmDpms *dpms)
+     BOOL state;
+     CARD16 power_level;
+     
+-    if (!DPMSInfo (GDK_DISPLAY(), &power_level, &state) )
++    if (!DPMSInfo (gdk_x11_get_default_xdisplay(), &power_level, &state) )
+       g_warning ("Cannot get DPMSInfo");
+       
+     if ( !state )
+-      DPMSEnable (GDK_DISPLAY());
++      DPMSEnable (gdk_x11_get_default_xdisplay());
+ }
+ static void
+@@ -229,7 +229,7 @@ xfpm_dpms_init(XfpmDpms *dpms)
+ {
+     dpms->priv = XFPM_DPMS_GET_PRIVATE(dpms);
+     
+-    dpms->priv->dpms_capable = DPMSCapable (GDK_DISPLAY());
++    dpms->priv->dpms_capable = DPMSCapable (gdk_x11_get_default_xdisplay());
+     dpms->priv->switch_off_timeout_id = 0;
+     dpms->priv->switch_on_timeout_id = 0;
+@@ -304,7 +304,7 @@ void xfpm_dpms_force_level (XfpmDpms *dpms, CARD16 level)
+     if ( !dpms->priv->dpms_capable )
+       goto out;
+     
+-    if ( G_UNLIKELY (!DPMSInfo (GDK_DISPLAY (), &current_level, &current_state)) )
++    if ( G_UNLIKELY (!DPMSInfo (gdk_x11_get_default_xdisplay (), &current_level, &current_state)) )
+     {
+       g_warning ("Cannot get DPMSInfo");
+       goto out;
+@@ -320,14 +320,14 @@ void xfpm_dpms_force_level (XfpmDpms *dpms, CARD16 level)
+     {
+       XFPM_DEBUG ("Forcing DPMS mode %d", level);
+       
+-      if ( !DPMSForceLevel (GDK_DISPLAY (), level ) )
++      if ( !DPMSForceLevel (gdk_x11_get_default_xdisplay (), level ) )
+       {
+           g_warning ("Cannot set Force DPMS level %d", level);
+           goto out;
+       }
+       if ( level == DPMSModeOn )
+-          XResetScreenSaver (GDK_DISPLAY ());
+-      XSync (GDK_DISPLAY (), FALSE);
++          XResetScreenSaver (gdk_x11_get_default_xdisplay ());
++      XSync (gdk_x11_get_default_xdisplay (), FALSE);
+     }
+     else
+     {
+diff --git a/src/xfpm-power-info.c b/src/xfpm-power-info.c
+index 72f2403..2ffaa83 100644
+--- a/src/xfpm-power-info.c
++++ b/src/xfpm-power-info.c
+@@ -656,7 +656,7 @@ xfpm_info_update_wakeups_idle (gpointer data)
+     
+     info = (XfpmInfo*)data;
+     
+-    if ( GTK_WIDGET_VISIBLE (info->wakeups) ) 
++    if ( gtk_widget_get_visible (info->wakeups) )
+         xfpm_info_update_wakeups (info);
+     
+     return TRUE;
+diff --git a/src/xfpm-power.c b/src/xfpm-power.c
+index 63b7070..2ae9dc8 100644
+--- a/src/xfpm-power.c
++++ b/src/xfpm-power.c
+@@ -221,7 +221,7 @@ xfpm_power_get_properties (XfpmPower *power)
+     gboolean lid_is_present;
+     /* TODO: newer versions of upower don't have that => logind handles it */
+-#if !UP_CHECK_VERSION(0, 99, 0)
++#if !UP_CHECK_VERSION(0, 9, 0)
+     power->priv->can_suspend = up_client_get_can_suspend(power->priv->upower);
+     power->priv->can_hibernate = up_client_get_can_hibernate(power->priv->upower);
+ #else
+@@ -236,7 +236,7 @@ xfpm_power_get_properties (XfpmPower *power)
+     }
+     else
+     {
+-      g_warning("Error: using upower >= 0.99.0 but logind is not running");
++      g_warning("Error: using upower >= 0.9.0 but logind is not running");
+       g_warning("       suspend / hibernate will not work!");
+     }
+ #endif
+@@ -332,7 +332,7 @@ xfpm_power_sleep (XfpmPower *power, const gchar *sleep_time, gboolean force)
+     }
+     else
+     {
+-#if !UP_CHECK_VERSION(0, 99, 0)
++#if !UP_CHECK_VERSION(0, 9, 0)
+       if (!g_strcmp0 (sleep_time, "Hibernate"))
+       {
+           up_client_hibernate_sync(power->priv->upower, NULL, &error);
+@@ -342,7 +342,7 @@ xfpm_power_sleep (XfpmPower *power, const gchar *sleep_time, gboolean force)
+           up_client_suspend_sync(power->priv->upower, NULL, &error);
+       }
+ #else
+-      g_warning("Error: using upower >= 0.99.0 but logind is not running");
++      g_warning("Error: using upower >= 0.9.0 but logind is not running");
+       g_warning("       suspend / hibernate will not work!");
+ #endif
+     }
+@@ -798,7 +798,8 @@ xfpm_power_show_critical_action_gtk (XfpmPower *power)
+     content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
+-    gtk_box_pack_start_defaults (GTK_BOX (content_area), gtk_label_new (message));
++    gtk_box_pack_start (GTK_BOX (content_area), gtk_label_new (message),
++                      TRUE, TRUE, 8);
+     if ( power->priv->can_hibernate && power->priv->auth_hibernate )
+     {
+@@ -1114,12 +1115,6 @@ xfpm_power_device_removed_cb (UpClient *upower, UpDevice *device, XfpmPower *pow
+ }
+ #endif
+-static void
+-xfpm_power_device_changed_cb (DBusGProxy *proxy, const gchar *object_path, XfpmPower *power)
+-{
+-    xfpm_power_refresh_adaptor_visible (power);
+-}
+-
+ #ifdef ENABLE_POLKIT
+ static void
+ xfpm_power_polkit_auth_changed_cb (XfpmPower *power)
+-- 
+1.9.3
+
diff --git a/0202-Uninitialized-variable-start_time.patch b/0202-Uninitialized-variable-start_time.patch
new file mode 100644 (file)
index 0000000..b6e1d79
--- /dev/null
@@ -0,0 +1,25 @@
+From 3387f3fe0abfb454b5d3596203a790048cd8f943 Mon Sep 17 00:00:00 2001
+From: Eric Koegel <eric.koegel@gmail.com>
+Date: Mon, 28 Apr 2014 18:32:48 +0300
+Subject: [PATCH 202/219] Uninitialized variable: start_time
+
+---
+ src/xfpm-polkit.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/xfpm-polkit.c b/src/xfpm-polkit.c
+index ccc4233..221c2d8 100644
+--- a/src/xfpm-polkit.c
++++ b/src/xfpm-polkit.c
+@@ -116,7 +116,7 @@ get_kinfo_proc (pid_t pid, struct kinfo_proc *p)
+ static guint64
+ get_start_time_for_pid (pid_t pid)
+ {
+-    guint64 start_time;
++    guint64 start_time = 0;
+ #if defined(__linux)
+     gchar *filename;
+     gchar *contents;
+-- 
+1.9.3
+
diff --git a/0203-Fix-uninitialized-pointer-read.patch b/0203-Fix-uninitialized-pointer-read.patch
new file mode 100644 (file)
index 0000000..aa23fb8
--- /dev/null
@@ -0,0 +1,81 @@
+From 6189440308723dd72fa9a97a0f19db34083c95a9 Mon Sep 17 00:00:00 2001
+From: Eric Koegel <eric.koegel@gmail.com>
+Date: Tue, 29 Apr 2014 08:00:17 +0300
+Subject: [PATCH 203/219] Fix uninitialized pointer read
+
+The tip pointer could be used uninitialized when the device state
+is unknown. Also tooltips are now shown for all device types rather
+than just UPS and battery (i.e. for the mouse/keyboard icons). This
+should prevent some confustion over what the other icons represent.
+---
+ src/xfpm-battery.c | 33 ++++++++++++++++++++++-----------
+ 1 file changed, 22 insertions(+), 11 deletions(-)
+
+diff --git a/src/xfpm-battery.c b/src/xfpm-battery.c
+index 603c8de..3a246ad 100644
+--- a/src/xfpm-battery.c
++++ b/src/xfpm-battery.c
+@@ -405,16 +405,25 @@ xfpm_battery_notify_state (XfpmBattery *battery)
+ }
+ /*
+- * Refresh tooltip function for UPS and battery device only.
++ * Refresh tooltip function for devices with a battery.
+  */
+ static void
+ xfpm_battery_set_tooltip_primary (XfpmBattery *battery, GtkTooltip *tooltip)
+ {
+-    gchar *tip;
++    gchar *tip = NULL;
+     gchar *est_time_str = NULL;
+     gchar *power_status = NULL;
+-    power_status = g_strdup_printf (battery->priv->ac_online ? _("Adaptor is online") : _("System is running on battery power"));
++    if ( battery->priv->type == UP_DEVICE_KIND_BATTERY ||
++         battery->priv->type == UP_DEVICE_KIND_UPS )
++    {
++        power_status = g_strdup_printf (battery->priv->ac_online ? _("Adaptor is online") : _("System is running on battery power"));
++    }
++    else
++    {
++      /* Let the user know it's not a system battery being monitored */
++        power_status = g_strdup(_("Peripheral Device"));
++    }
+     if ( battery->priv->state == UP_DEVICE_STATE_FULLY_CHARGED )
+     {
+@@ -489,6 +498,14 @@ xfpm_battery_set_tooltip_primary (XfpmBattery *battery, GtkTooltip *tooltip)
+     {
+       tip = g_strdup_printf (_("%s\nYour %s is empty"), power_status, battery->priv->battery_name);
+     }
++    else
++    {
++      /* unknown device state, just display the percentage */
++      tip = g_strdup_printf (_("%s\nYour %s is at (%i%%)."),
++                                 power_status,
++                                 battery->priv->battery_name,
++                                 battery->priv->percentage);
++    }
+     gtk_tooltip_set_text (tooltip, tip);
+     g_free (power_status);
+@@ -592,14 +609,8 @@ xfpm_battery_query_tooltip (GtkStatusIcon *icon,
+     battery = XFPM_BATTERY (icon);
+-    if ( battery->priv->type == UP_DEVICE_KIND_BATTERY ||
+-       battery->priv->type == UP_DEVICE_KIND_UPS )
+-    {
+-      xfpm_battery_set_tooltip_primary (battery, tooltip);
+-      return TRUE;
+-    }
+-
+-    return FALSE;
++    xfpm_battery_set_tooltip_primary (battery, tooltip);
++    return TRUE;
+ }
+ static void
+-- 
+1.9.3
+
diff --git a/0206-Warn-when-no-lock-tool-succeeded-Bug-6413.patch b/0206-Warn-when-no-lock-tool-succeeded-Bug-6413.patch
new file mode 100644 (file)
index 0000000..f94f968
--- /dev/null
@@ -0,0 +1,118 @@
+From 73ed5e362f7e0754b466d7d0e824ab14fec9cd17 Mon Sep 17 00:00:00 2001
+From: Eric Koegel <eric.koegel@gmail.com>
+Date: Tue, 29 Apr 2014 15:51:57 +0300
+Subject: [PATCH 206/219] Warn when no lock tool succeeded (Bug 6413)
+
+This patch now pops up a dialog when locking the screen fails
+either from a lock on lid-close or when going to suspend. If from
+suspend it will allow the user to choose wether to continue with
+the suspend operation.
+---
+ common/xfpm-common.c |  6 ++++--
+ common/xfpm-common.h |  2 +-
+ src/xfpm-manager.c   | 10 +++++++++-
+ src/xfpm-power.c     | 24 ++++++++++++++++++++++--
+ 4 files changed, 36 insertions(+), 6 deletions(-)
+
+diff --git a/common/xfpm-common.c b/common/xfpm-common.c
+index 4297585..9073d85 100644
+--- a/common/xfpm-common.c
++++ b/common/xfpm-common.c
+@@ -52,14 +52,14 @@ GtkBuilder *xfpm_builder_new_from_string (const gchar *ui, GError **error)
+     return builder;
+ }
+-void       
++gboolean
+ xfpm_lock_screen (void)
+ {
+     gboolean ret = g_spawn_command_line_async ("xflock4", NULL);
+     
+     if ( !ret )
+     {
+-        g_spawn_command_line_async ("gnome-screensaver-command -l", NULL);
++        ret = g_spawn_command_line_async ("gnome-screensaver-command -l", NULL);
+     }
+     
+     if ( !ret )
+@@ -77,6 +77,8 @@ xfpm_lock_screen (void)
+     {
+         g_critical ("Connot lock screen\n");
+     }
++
++    return ret;
+ }
+ void       
+diff --git a/common/xfpm-common.h b/common/xfpm-common.h
+index d5b181e..ec3dd9f 100644
+--- a/common/xfpm-common.h
++++ b/common/xfpm-common.h
+@@ -40,7 +40,7 @@ gboolean        xfpm_string_to_bool          (const gchar *string) G_GNUC_PURE;
+ GtkBuilder     *xfpm_builder_new_from_string          (const gchar *file,
+                                                GError **error);
+-void          xfpm_lock_screen                (void);
++gboolean      xfpm_lock_screen                (void);
+ void          xfpm_preferences                (void);
+diff --git a/src/xfpm-manager.c b/src/xfpm-manager.c
+index 889ff7a..dd8e0c4 100644
+--- a/src/xfpm-manager.c
++++ b/src/xfpm-manager.c
+@@ -343,7 +343,15 @@ xfpm_manager_lid_changed_cb (XfpmPower *power, gboolean lid_is_closed, XfpmManag
+       else if ( action == LID_TRIGGER_LOCK_SCREEN )
+       {
+           if ( !xfpm_is_multihead_connected () )
+-              xfpm_lock_screen ();
++          {
++              if (!xfpm_lock_screen ())
++              {
++                  xfce_dialog_show_error (NULL, NULL,
++                                          _("None of the screen lock tools ran "
++                                            "successfully, the screen will not "
++                                            "be locked."));
++              }
++          }
+       }
+       else
+       {
+diff --git a/src/xfpm-power.c b/src/xfpm-power.c
+index 2ae9dc8..3512ded 100644
+--- a/src/xfpm-power.c
++++ b/src/xfpm-power.c
+@@ -322,8 +322,28 @@ xfpm_power_sleep (XfpmPower *power, const gchar *sleep_time, gboolean force)
+     if ( lock_screen )
+     {
+-      g_usleep (2000000); /* 2 seconds */
+-      xfpm_lock_screen ();
++#ifdef WITH_NETWORK_MANAGER
++        if ( network_manager_sleep )
++        {
++          /* 2 seconds, to give network manager time to sleep */
++            g_usleep (2000000);
++      }
++#endif
++        if (!xfpm_lock_screen ())
++        {
++          gboolean ret;
++
++          ret = xfce_dialog_confirm (NULL,
++                                     GTK_STOCK_OK, _("Continue"),
++                                     _("None of the screen lock tools ran "
++                                       "successfully, the screen will not "
++                                       "be locked."),
++                                     _("Do you still want to continue to "
++                                       "suspend the system?"));
++
++          if ( !ret )
++              return;
++        }
+     }
+     if ( LOGIND_RUNNING () )
+-- 
+1.9.3
+
diff --git a/xfce4-power-manager-ac-am.patch b/xfce4-power-manager-ac-am.patch
deleted file mode 100644 (file)
index 3da485a..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-diff -urN xfce4-power-manager-1.0.3/src/Makefile.am xfce4-power-manager-1.0.3.new//src/Makefile.am
---- xfce4-power-manager-1.0.3/src/Makefile.am  2011-01-04 12:22:56.000000000 +0000
-+++ xfce4-power-manager-1.0.3.new//src/Makefile.am     2011-02-11 19:45:51.306668083 +0000
-@@ -97,10 +97,11 @@
-       $(PLATFORM_LDFLAGS)
- xfce4_power_information_LDADD =                       \
-+      $(top_builddir)/libdbus/libxfpmdbus.la  \
-       $(GOBJECT_LIBS)                         \
-       $(DBUS_GLIB_LIBS)                       \
--      $(LIBXFCE4UI_LIBS)                      \
--      $(top_builddir)/libdbus/libxfpmdbus.la
-+      $(LIBXFCE4UI_LIBS)
-+
- if ENABLE_POLKIT
index 1a4dcc3545893aee0e1d7af6e876ea491ed5e4c7..021b63b06a94d96c722ece76d3b75ac174d883e4 100644 (file)
@@ -2,12 +2,45 @@ Summary:      Power manager for the Xfce desktop environment
 Summary(pl.UTF-8):     Zarządca energii dla środowiska Xfce
 Name:          xfce4-power-manager
 Version:       1.2.0
-Release:       1
+Release:       2
 License:       GPL v2
 Group:         X11/Applications
 Source0:       http://archive.xfce.org/src/apps/xfce4-power-manager/1.2/%{name}-%{version}.tar.bz2
 # Source0-md5: 935599b7114b0a4b0e2c9a5d6c72524c
-Patch0:                %{name}-ac-am.patch
+Patch100:      0049-Autotools-updates.patch
+Patch101:      0061-Remove-custom-OSD-brightness-popup-use-libnotify-ins.patch
+Patch102:      0073-Ignore-useless-deprecation-warnings-for-now.patch
+Patch103:      0074-Don-t-init-thread-on-gobject-3.32.patch
+Patch104:      0075-Change-brightness-level-from-glong-to-gint32.patch
+Patch105:      0079-Fix-Typo-in-xfpm-power.c.patch
+Patch106:      0080-Fix-typo-in-error-message.patch
+Patch107:      0081-Fix-typo.patch
+Patch108:      0082-Fix-incorrect-check-for-suspend-permissions-bug-8438.patch
+Patch109:      0145-Add-shutdown-reboot-functionality-for-systemd-Bug-10.patch
+Patch110:      0146-Fix-empty-systray-icon-in-some-panels-on-battery-rem.patch
+Patch111:      0147-Display-power-percentage.patch
+Patch112:      0148-Fix-status-icon-for-devices-other-than-battery-and-u.patch
+Patch113:      0149-Update-to-XFCE_PANEL_PLUGIN_REGISTER.patch
+Patch114:      0150-Add-support-for-keyboard-backlight-control-Bug-10470.patch
+Patch115:      0151-Don-t-allow-systemd-to-handle-suspend-hibernate-even.patch
+Patch116:      0152-xfpm-power-info-add-current-percentage-of-batteries.patch
+Patch117:      0153-xfpm-battery-do-not-show-an-icon-for-HID-devices.patch
+Patch118:      0154-Update-xfce4-session-lock-screen-setting.patch
+Patch119:      0155-Use-the-online-docs-for-help.patch
+Patch120:      0156-Add-xfpm-backlight.c-to-potfiles.patch
+Patch121:      0157-Remove-the-doc-configure-deps.patch
+Patch122:      0171-Add-support-for-logind-suspend-resume-Bug-9963.patch
+Patch123:      0172-Update-min-requirements-and-autotools.patch
+Patch124:      0175-port-xfpm-to-libupower-glib-add-support-for-upower-0.patch
+Patch125:      0176-get-rid-of-XfpmDeviceState-and-XfpmDeviceType.patch
+Patch126:      0177-xfpm_backlight_button_pressed_cb-fix-popup-display.patch
+Patch127:      0178-Fix-potential-uninitialized-variable.patch
+Patch128:      0200-Add-a-option-for-network-manager-sleep-Bug-10702.patch
+Patch129:      0201-Fix-for-enable-deprecared-and-gseal.patch
+Patch130:      0202-Uninitialized-variable-start_time.patch
+Patch131:      0203-Fix-uninitialized-pointer-read.patch
+Patch132:      0206-Warn-when-no-lock-tool-succeeded-Bug-6413.patch
+Patch133:      xfpm-enum-types.patch
 URL:           http://goodies.xfce.org/projects/applications/xfce4-power-manager
 BuildRequires: autoconf >= 2.50
 BuildRequires: automake >= 1:1.8
@@ -38,7 +71,40 @@ Zarządca energii dla środowiska Xfce.
 
 %prep
 %setup -q
-%patch0 -p1
+%patch100 -p1
+%patch101 -p1
+%patch102 -p1
+%patch103 -p1
+%patch104 -p1
+%patch105 -p1
+%patch106 -p1
+%patch107 -p1
+%patch108 -p1
+%patch109 -p1
+%patch110 -p1
+%patch111 -p1
+%patch112 -p1
+%patch113 -p1
+%patch114 -p1
+%patch115 -p1
+%patch116 -p1
+%patch117 -p1
+%patch118 -p1
+%patch119 -p1
+%patch120 -p1
+%patch121 -p1
+%patch122 -p1
+%patch123 -p1
+%patch124 -p1
+%patch125 -p1
+%patch126 -p1
+%patch127 -p1
+%patch128 -p1
+%patch129 -p1
+%patch130 -p1
+%patch131 -p1
+%patch132 -p1
+%patch133 -p1
 
 %build
 %{__intltoolize}
@@ -79,11 +145,9 @@ rm -rf $RPM_BUILD_ROOT
 %attr(755,root,root) %{_bindir}/xfce4-power-manager
 %attr(755,root,root) %{_bindir}/xfce4-power-manager-settings
 %attr(755,root,root) %{_sbindir}/xfpm-power-backlight-helper
-%attr(755,root,root) %{_libdir}/xfce4/panel-plugins/xfce4-brightness-plugin
+%attr(755,root,root) %{_libdir}/xfce4/panel/plugins/libxfce4brightness.so
 %{_desktopdir}/xfce4-power-manager-settings.desktop
 %{_datadir}/xfce4/panel-plugins/xfce4-brightness-plugin.desktop
 %{_iconsdir}/hicolor/*/*/*
 %{_datadir}/polkit-1/actions/org.xfce.power.policy
-%{_datadir}/xfce4/doc/C/*.html
-%{_datadir}/xfce4/doc/C/images/*.png
 %{_mandir}/man1/xfce4-power-manager*.1*
diff --git a/xfpm-enum-types.patch b/xfpm-enum-types.patch
new file mode 100644 (file)
index 0000000..9111251
--- /dev/null
@@ -0,0 +1,71 @@
+--- xfce4-power-manager-1.2.0/src/xfpm-enum-types.c.orig       2014-05-10 20:06:28.630845667 +0200
++++ xfce4-power-manager-1.2.0/src/xfpm-enum-types.c    2014-05-10 20:06:39.554119824 +0200
+@@ -7,46 +7,6 @@
+ /* enumerations from "./xfpm-enum-glib.h" */
+ GType
+-xfpm_device_type_get_type (void)
+-{
+-      static GType type = 0;
+-      if (type == 0) {
+-      static const GEnumValue values[] = {
+-      { XFPM_DEVICE_TYPE_UNKNOWN, "XFPM_DEVICE_TYPE_UNKNOWN", "unknown" },
+-      { XFPM_DEVICE_TYPE_LINE_POWER, "XFPM_DEVICE_TYPE_LINE_POWER", "line-power" },
+-      { XFPM_DEVICE_TYPE_BATTERY, "XFPM_DEVICE_TYPE_BATTERY", "battery" },
+-      { XFPM_DEVICE_TYPE_UPS, "XFPM_DEVICE_TYPE_UPS", "ups" },
+-      { XFPM_DEVICE_TYPE_MONITOR, "XFPM_DEVICE_TYPE_MONITOR", "monitor" },
+-      { XFPM_DEVICE_TYPE_MOUSE, "XFPM_DEVICE_TYPE_MOUSE", "mouse" },
+-      { XFPM_DEVICE_TYPE_KBD, "XFPM_DEVICE_TYPE_KBD", "kbd" },
+-      { XFPM_DEVICE_TYPE_PDA, "XFPM_DEVICE_TYPE_PDA", "pda" },
+-      { XFPM_DEVICE_TYPE_PHONE, "XFPM_DEVICE_TYPE_PHONE", "phone" },
+-      { 0, NULL, NULL }
+-      };
+-      type = g_enum_register_static ("XfpmDeviceType", values);
+-  }
+-      return type;
+-}
+-GType
+-xfpm_device_state_get_type (void)
+-{
+-      static GType type = 0;
+-      if (type == 0) {
+-      static const GEnumValue values[] = {
+-      { XFPM_DEVICE_STATE_UNKNOWN, "XFPM_DEVICE_STATE_UNKNOWN", "unknown" },
+-      { XFPM_DEVICE_STATE_CHARGING, "XFPM_DEVICE_STATE_CHARGING", "charging" },
+-      { XFPM_DEVICE_STATE_DISCHARGING, "XFPM_DEVICE_STATE_DISCHARGING", "discharging" },
+-      { XFPM_DEVICE_STATE_EMPTY, "XFPM_DEVICE_STATE_EMPTY", "empty" },
+-      { XFPM_DEVICE_STATE_FULLY_CHARGED, "XFPM_DEVICE_STATE_FULLY_CHARGED", "fully-charged" },
+-      { XFPM_DEVICE_STATE_PENDING_CHARGING, "XFPM_DEVICE_STATE_PENDING_CHARGING", "pending-charging" },
+-      { XFPM_DEVICE_STATE_PENDING_DISCHARGING, "XFPM_DEVICE_STATE_PENDING_DISCHARGING", "pending-discharging" },
+-      { 0, NULL, NULL }
+-      };
+-      type = g_enum_register_static ("XfpmDeviceState", values);
+-  }
+-      return type;
+-}
+-GType
+ xfpm_battery_charge_get_type (void)
+ {
+       static GType type = 0;
+@@ -109,6 +69,8 @@
+       { BUTTON_MON_BRIGHTNESS_DOWN, "BUTTON_MON_BRIGHTNESS_DOWN", "button-mon-brightness-down" },
+       { BUTTON_LID_CLOSED, "BUTTON_LID_CLOSED", "button-lid-closed" },
+       { BUTTON_BATTERY, "BUTTON_BATTERY", "button-battery" },
++      { BUTTON_KBD_BRIGHTNESS_UP, "BUTTON_KBD_BRIGHTNESS_UP", "button-kbd-brightness-up" },
++      { BUTTON_KBD_BRIGHTNESS_DOWN, "BUTTON_KBD_BRIGHTNESS_DOWN", "button-kbd-brightness-down" },
+       { NUMBER_OF_BUTTONS, "NUMBER_OF_BUTTONS", "number-of-buttons" },
+       { 0, NULL, NULL }
+       };
+--- xfce4-power-manager-1.2.0/src/xfpm-enum-types.h.orig       2014-05-10 20:06:34.087482773 +0200
++++ xfce4-power-manager-1.2.0/src/xfpm-enum-types.h    2014-05-10 20:06:39.437453789 +0200
+@@ -6,10 +6,6 @@
+ #include <glib-object.h>
+ G_BEGIN_DECLS
+ /* enumerations from "./xfpm-enum-glib.h" */
+-GType xfpm_device_type_get_type (void);
+-#define XFPM_TYPE_DEVICE_TYPE (xfpm_device_type_get_type())
+-GType xfpm_device_state_get_type (void);
+-#define XFPM_TYPE_DEVICE_STATE (xfpm_device_state_get_type())
+ GType xfpm_battery_charge_get_type (void);
+ #define XFPM_TYPE_BATTERY_CHARGE (xfpm_battery_charge_get_type())
+ GType xfpm_shutdown_request_get_type (void);
This page took 0.50922 seconds and 4 git commands to generate.