[mate-power-manager] add upstream patch to add keyboard backlight support

leigh123linux leigh123linux at fedoraproject.org
Wed Nov 14 16:20:32 UTC 2012


commit 042bfb168fef3dd7399eb511d6e40e2c70a1d5ce
Author: leigh123linux <leigh123linux at googlemail.com>
Date:   Wed Nov 14 16:20:22 2012 +0000

    add upstream patch to add keyboard backlight support

 ...cklight-patches-tested-as-working-against.patch | 1025 ++++++++++++++++++++
 ...sue-where-displays-would-not-turn-off-des.patch |   25 +
 ...s-fixes-the-mismatched-dbus-library-issue.patch |   38 +
 ...e-some-components-to-mate-friendly-values.patch |   48 +
 mate-power-manager.spec                            |   17 +-
 panelapplet_versionfix.patch                       |   11 -
 6 files changed, 1152 insertions(+), 12 deletions(-)
---
diff --git a/0001-Keyboard-backlight-patches-tested-as-working-against.patch b/0001-Keyboard-backlight-patches-tested-as-working-against.patch
new file mode 100644
index 0000000..8d38749
--- /dev/null
+++ b/0001-Keyboard-backlight-patches-tested-as-working-against.patch
@@ -0,0 +1,1025 @@
+From 9361bbfbb5f7fda96f147310125fc709f4da2200 Mon Sep 17 00:00:00 2001
+From: William Brown <william at firstyear.id.au>
+Date: Sun, 11 Nov 2012 20:02:11 +1030
+Subject: [PATCH 1/4] Keyboard backlight patches, tested as working against
+ 1.5.0 on F18
+
+---
+ data/org.mate.power-manager.gschema.xml.in |  20 +
+ src/Makefile.am                            |   2 +
+ src/gpm-common.c                           |  46 ++
+ src/gpm-common.h                           |  11 +
+ src/gpm-kbd-backlight.c                    | 734 +++++++++++++++++++++++++++++
+ src/gpm-kbd-backlight.h                    |  79 ++++
+ src/gpm-manager.c                          |  10 +
+ 7 files changed, 902 insertions(+)
+ create mode 100644 src/gpm-kbd-backlight.c
+ create mode 100644 src/gpm-kbd-backlight.h
+
+diff --git a/data/org.mate.power-manager.gschema.xml.in b/data/org.mate.power-manager.gschema.xml.in
+index 99ee820..dcd2cd4 100644
+--- a/data/org.mate.power-manager.gschema.xml.in
++++ b/data/org.mate.power-manager.gschema.xml.in
+@@ -61,6 +61,26 @@
+       <_summary>Reduce the backlight brightness when on battery power</_summary>
+       <_description>If the screen should be reduced in brightness when the computer is on battery power.</_description>
+     </key>
++    <key name="kbd-backlight-battery-reduce" type="b">
++      <default>true</default>
++      <summary>Reduce the keyboard backlight when on battery power</summary>
++      <description>If the keyboard backlight brightness should be reduced when the computer is on battery power</description>
++    </key>
++    <key name="kbd-brightness-on-ac" type="i">
++      <default>100</default>
++      <summary>Keyboard backlight brightness when on AC power.</summary>
++      <description>Percent brightness to set keyboard backlight at when on AC power. Legal values are between 0 and 100.</description>
++    </key>
++    <key name="kbd-brightness-dim-by-on-battery" type="i">
++      <default>50</default>
++      <summary>Percent to reduce keyboard backlight by when on battery power.</summary>
++      <description>The percentage to reduce the keyboard backlight by when on battery power. For example, if set to '60', the backlight will be cut by 40% on battery power. Legal values are between 0 and 100.</description>
++    </key>
++    <key name="kbd-brightness-dim-by-on-idle" type="i">
++      <default>75</default>
++        <summary>Percent to reduce keyboard backlight by when idle.</summary>
++        <description>The percentage to reduce the keyboard backlight by when idle. For example, if set to '60', the backlight will be cut by 40% when idle. Legal values are between 0 and 100.</description>
++    </key>
+     <key name="idle-brightness" type="i">
+       <default>30</default>
+       <_summary>The brightness of the screen when idle</_summary>
+diff --git a/src/Makefile.am b/src/Makefile.am
+index 2fdf9d0..6393bbd 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -158,6 +158,8 @@ mate_power_manager_SOURCES =				\
+ 	gpm-control.c					\
+ 	gpm-button.h					\
+ 	gpm-button.c					\
++	gpm-kbd-backlight.h 			\
++	gpm-kbd-backlight.c 			\
+ 	gpm-main.c					\
+ 	gpm-manager.h					\
+ 	gpm-manager.c					\
+diff --git a/src/gpm-common.c b/src/gpm-common.c
+index 861837a..e7d1d66 100644
+--- a/src/gpm-common.c
++++ b/src/gpm-common.c
+@@ -79,6 +79,52 @@ gpm_get_timestring (guint time_secs)
+ }
+ 
+ /**
++ * gpm_discrete_from_percent:
++ * @percentage: The percentage to convert
++ * @levels: The number of discrete levels
++ *
++ * We have to be carefull when converting from %->discrete as precision is very
++ * important if we want the highest value.
++ *
++ * Return value: The discrete value for this percentage.
++ **/
++guint
++gpm_discrete_from_percent (guint percentage, guint levels)
++{
++    /* check we are in range */
++    if (percentage > 100)
++        return levels;
++    if (levels == 0) {
++        g_warning ("levels is 0!");
++        return 0;
++    }
++    return (guint) ((((gfloat) percentage * (gfloat) (levels - 1)) / 100.0f) + 0.5f);
++}
++
++/**
++ * gpm_discrete_to_percent:
++ * @hw: The discrete level
++ * @levels: The number of discrete levels
++ *
++ * We have to be carefull when converting from discrete->%.
++ *
++ * Return value: The percentage for this discrete value.
++ **/
++guint
++gpm_discrete_to_percent (guint discrete, guint levels)
++{
++    /* check we are in range */
++    if (discrete > levels)
++        return 100;
++    if (levels == 0) {
++        g_warning ("levels is 0!");
++        return 0;
++    }
++    return (guint) (((gfloat) discrete * (100.0f / (gfloat) (levels - 1))) + 0.5f);
++}
++
++
++/**
+  * gpm_help_display:
+  * @link_id: Subsection of mate-power-manager help section
+  **/
+diff --git a/src/gpm-common.h b/src/gpm-common.h
+index 48bb89d..6029b2f 100644
+--- a/src/gpm-common.h
++++ b/src/gpm-common.h
+@@ -31,6 +31,7 @@ G_BEGIN_DECLS
+ #define	GPM_DBUS_INTERFACE_BACKLIGHT	"org.mate.PowerManager.Backlight"
+ #define	GPM_DBUS_PATH			"/org/mate/PowerManager"
+ #define	GPM_DBUS_PATH_BACKLIGHT		"/org/mate/PowerManager/Backlight"
++#define GPM_DBUS_PATH_KBD_BACKLIGHT    "/org/gnome/PowerManager/KbdBacklight"
+ 
+ /* common descriptions of this program */
+ #define GPM_NAME 			_("Power Manager")
+@@ -59,6 +60,12 @@ G_BEGIN_DECLS
+ #define GPM_SETTINGS_BRIGHTNESS_AC			"brightness-ac"
+ #define GPM_SETTINGS_BRIGHTNESS_DIM_BATT		"brightness-dim-battery"
+ 
++/* keyboard backlight */
++#define GPM_SETTINGS_KBD_BACKLIGHT_BATT_REDUCE     "kbd-backlight-battery-reduce"
++#define GPM_SETTINGS_KBD_BRIGHTNESS_ON_AC      "kbd-brightness-on-ac"
++#define GPM_SETTINGS_KBD_BRIGHTNESS_DIM_BY_ON_BATT      "kbd-brightness-dim-by-on-battery"
++#define GPM_SETTINGS_KBD_BRIGHTNESS_DIM_BY_ON_IDLE "kbd-brightness-dim-by-on-idle"
++
+ /* buttons */
+ #define GPM_SETTINGS_BUTTON_LID_AC			"button-lid-ac"
+ #define GPM_SETTINGS_BUTTON_LID_BATT			"button-lid-battery"
+@@ -149,6 +156,10 @@ typedef enum {
+ } GpmActionPolicy;
+ 
+ gchar		*gpm_get_timestring				(guint		 time);
++guint        gpm_discrete_from_percent          (guint       percentage,
++                                guint        levels);
++guint        gpm_discrete_to_percent            (guint       discrete,
++                                guint        levels);
+ void 		 gpm_help_display				(const gchar	*link_id);
+ #ifdef EGG_TEST
+ void		 gpm_common_test				(gpointer	 data);
+diff --git a/src/gpm-kbd-backlight.c b/src/gpm-kbd-backlight.c
+new file mode 100644
+index 0000000..8c8ba69
+--- /dev/null
++++ b/src/gpm-kbd-backlight.c
+@@ -0,0 +1,734 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
++ *
++ * Copyright (C) 2010 Alex Launi <alex launi canonical 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 <gio/gio.h>
++#include <glib.h>
++#include <libupower-glib/upower.h>
++
++#include "gpm-button.h"
++#include "gpm-common.h"
++#include "gpm-control.h"
++#include "gpm-idle.h"
++#include "gpm-kbd-backlight.h"
++
++static const gchar *kbd_backlight_introspection = ""
++"<?xml version=\"1.0\" encoding=\"UTF-8\"?>""<node name=\"/\">"
++  "<interface name=\"org.gnome.PowerManager.Backlight\">"
++    "<method name=\"GetBrightness\">"
++      "<arg type=\"u\" name=\"percentage_brightness\" direction=\"out\"/>"
++    "</method>"
++    "<method name=\"SetBrightness\">"
++      "<arg type=\"u\" name=\"percentage_brightness\" direction=\"in\"/>"
++    "</method>"
++    "<signal name=\"BrightnessChanged\">"
++      "<arg type=\"u\" name=\"percentage_brightness\" direction=\"out\"/>"
++    "</signal>"
++  "</interface>"
++"</node>";
++
++#define GPM_KBD_BACKLIGHT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GPM_TYPE_KBD_BACKLIGHT, GpmKbdBacklightPrivate))
++
++struct GpmKbdBacklightPrivate
++{
++   UpClient        *client;
++   GpmButton       *button;
++   GSettings       *settings;
++   GSettings       *settings_gsd;
++   GpmControl      *control;
++   GpmIdle         *idle;
++   gboolean         can_dim;
++   gboolean         system_is_idle;
++   GTimer          *idle_timer;
++   guint            idle_dim_timeout;
++   guint            master_percentage;
++   guint            brightness;
++   guint            max_brightness;
++   guint            brightness_percent;
++   GDBusProxy      *upower_proxy;
++   GDBusConnection     *bus_connection;
++   guint            bus_object_id;
++};
++
++enum {
++   BRIGHTNESS_CHANGED,
++   LAST_SIGNAL
++};
++
++static guint signals [LAST_SIGNAL] = { 0 };
++
++G_DEFINE_TYPE (GpmKbdBacklight, gpm_kbd_backlight, G_TYPE_OBJECT)
++
++/**
++ * gpm_kbd_backlight_error_quark:
++ * Return value: Our personal error quark.
++ **/
++GQuark
++gpm_kbd_backlight_error_quark (void)
++{
++   static GQuark quark = 0;
++   if (!quark)
++       quark = g_quark_from_static_string ("gpm_kbd_backlight_error");
++   return quark;
++}
++
++/**
++ * gpm_kbd_backlight_get_brightness:
++ * @backlight:
++ * @brightness:
++ * @error:
++ *
++ * Return value:
++ */
++gboolean
++gpm_kbd_backlight_get_brightness (GpmKbdBacklight *backlight,
++                 guint *brightness,
++                 GError **error)
++{
++   g_return_val_if_fail (backlight != NULL, FALSE);
++   g_return_val_if_fail (GPM_IS_KBD_BACKLIGHT (backlight), FALSE);
++   g_return_val_if_fail (brightness != NULL, FALSE);
++
++   if (backlight->priv->can_dim == FALSE) {
++       g_set_error_literal (error, gpm_kbd_backlight_error_quark (),
++                    GPM_KBD_BACKLIGHT_ERROR_HARDWARE_NOT_PRESENT,
++                    "Dim capable hardware not present");
++       return FALSE;
++   }
++
++   *brightness = backlight->priv->brightness_percent;
++   return TRUE;
++}
++
++static gboolean
++gpm_kbd_backlight_set (GpmKbdBacklight *backlight,
++              guint percentage)
++{
++   gint scale;
++   guint goal;
++
++   g_return_val_if_fail (GPM_IS_KBD_BACKLIGHT (backlight), FALSE);
++   /* if we're setting the same we are, don't bother */
++   //g_return_val_if_fail (backlight->priv->brightness_percent != percentage, FALSE);
++
++   goal = gpm_discrete_from_percent (percentage, backlight->priv->max_brightness);
++   scale = percentage > backlight->priv->brightness_percent ? 1 : -1;
++
++   /* step loop down by 1 for a dimming effect */
++   while (backlight->priv->brightness != goal) {
++       backlight->priv->brightness += scale;
++       backlight->priv->brightness_percent = gpm_discrete_to_percent (backlight->priv->brightness, backlight->priv->max_brightness);
++
++       g_dbus_proxy_call (backlight->priv->upower_proxy,
++                      "SetBrightness",
++                   g_variant_new ("(i)", (gint) backlight->priv->brightness),
++                   G_DBUS_CALL_FLAGS_NONE,
++                   -1,
++                   NULL,
++                   NULL,
++                   NULL);
++   }
++
++   return TRUE;
++}
++
++/**
++ * gpm_kbd_backlight_brightness_up:
++ **/
++static gboolean
++gpm_kbd_backlight_brightness_up (GpmKbdBacklight *backlight)
++{
++   guint new;
++
++   new = MIN (backlight->priv->brightness_percent + GPM_KBD_BACKLIGHT_STEP, 100u);
++   return gpm_kbd_backlight_set (backlight, new);
++}
++
++/**
++ * gpm_kbd_backlight_brightness_down:
++ **/
++static gboolean
++gpm_kbd_backlight_brightness_down (GpmKbdBacklight *backlight)
++{
++   guint new;
++
++   // we can possibly go below 0 here, so by converting to a gint we avoid underflow errors.
++   new = MAX ((gint) backlight->priv->brightness_percent - GPM_KBD_BACKLIGHT_STEP, 0);
++   return gpm_kbd_backlight_set (backlight, new);
++}
++
++/**
++ * gpm_kbd_backlight_set_brightness:
++ * @backlight:
++ * @percentage:
++ * @error:
++ *
++ * Return value:
++ **/
++gboolean
++gpm_kbd_backlight_set_brightness (GpmKbdBacklight *backlight,
++                 guint percentage,
++                 GError **error)
++{
++   gboolean ret;
++
++   g_return_val_if_fail (backlight != NULL, FALSE);
++   g_return_val_if_fail (GPM_IS_KBD_BACKLIGHT (backlight), FALSE);
++
++   if (backlight->priv->can_dim == FALSE) {
++       g_set_error_literal (error, gpm_kbd_backlight_error_quark (),
++                    GPM_KBD_BACKLIGHT_ERROR_HARDWARE_NOT_PRESENT,
++                    "Dim capable hardware not present");
++       return FALSE;
++   }
++
++   backlight->priv->master_percentage = percentage;
++
++   ret = gpm_kbd_backlight_set (backlight, percentage);
++   if (!ret) {
++       g_set_error_literal (error, gpm_kbd_backlight_error_quark (),
++                    GPM_KBD_BACKLIGHT_ERROR_GENERAL,
++                    "Cannot set keyboard backlight brightness");
++   }
++
++   return ret;
++}
++
++static void
++gpm_kbd_backlight_on_brightness_changed (GpmKbdBacklight *backlight,
++                    guint value)
++{
++   backlight->priv->brightness = value;
++   backlight->priv->brightness_percent = gpm_discrete_to_percent (value, backlight->priv->max_brightness);
++   backlight->priv->master_percentage = backlight->priv->brightness_percent;
++   g_signal_emit (backlight, signals [BRIGHTNESS_CHANGED], 0, backlight->priv->brightness_percent);
++}
++
++/**
++ * gpm_kbd_backlight_on_dbus_signal:
++ **/
++static void
++gpm_kbd_backlight_on_dbus_signal (GDBusProxy *proxy,
++                 gchar      *sender_name,
++                 gchar      *signal_name,
++                 GVariant   *parameters,
++                 gpointer    user_data)
++{
++   guint value;
++   GpmKbdBacklight *backlight = GPM_KBD_BACKLIGHT (user_data);
++
++   if (g_strcmp0 (signal_name, "BrightnessChanged") == 0) {
++       g_variant_get (parameters, "(i)", &value);
++       gpm_kbd_backlight_on_brightness_changed (backlight, value);
++       return;
++   }
++
++   g_assert_not_reached ();
++}
++
++/**
++ * gpm_kbd_backlight_dbus_method_call:
++ * @connection:
++ * @object_path:
++ * @interface_name:
++ * @method_name:
++ * @parameters:
++ * @invocation:
++ * @user_data:
++ **/
++static void
++gpm_kbd_backlight_dbus_method_call (GDBusConnection *connection,
++                   const gchar *sender,
++                   const gchar *object_path,
++                   const gchar *interface_name,
++                   const gchar *method_name,
++                   GVariant *parameters,
++                   GDBusMethodInvocation *invocation,
++                   gpointer user_data)
++{
++   guint value;
++   gboolean ret;
++   GError *error = NULL;
++   GpmKbdBacklight *backlight = GPM_KBD_BACKLIGHT (user_data);
++
++   if (g_strcmp0 (method_name, "GetBrightness") == 0) {
++       ret = gpm_kbd_backlight_get_brightness (backlight, &value, &error);
++       if (!ret) {
++           g_dbus_method_invocation_return_gerror (invocation, error);
++           g_error_free (error);
++       } else {
++           g_dbus_method_invocation_return_value (invocation, g_variant_new ("(u)", value));
++       }
++       return;
++   }
++
++   if (g_strcmp0 (method_name, "SetBrightness") == 0) {
++       g_variant_get (parameters, "(u)", &value);
++       ret = gpm_kbd_backlight_set_brightness (backlight, value, &error);
++       if (!ret) {
++           g_dbus_method_invocation_return_gerror (invocation, error);
++           g_error_free (error);
++       } else {
++           g_dbus_method_invocation_return_value (invocation, NULL);
++       }
++       return;
++   }
++
++   g_assert_not_reached ();
++}
++
++
++/**
++ * gpm_kbd_backlight_dbus_property_get:
++ * @sender:
++ * @object_path:
++ * @interface_name:
++ * @property_name:
++ * @error:
++ * @user_data:
++ *
++ * Return value:
++ **/
++static GVariant *
++gpm_kbd_backlight_dbus_property_get (GDBusConnection *connection,
++                    const gchar *sender,
++                    const gchar *object_path,
++                    const gchar *interface_name,
++                    const gchar *property_name,
++                    GError **error,
++                    gpointer user_data)
++{
++   /* Do nothing, we have no props */
++   return NULL;
++}
++
++/**
++ * gpm_kbd_backlight_dbus_property_set:
++ * @connection:
++ * @sender:
++ * @object_path:
++ * @interface_name:
++ * @property_name:
++ *
++ * Return value:
++ **/
++static gboolean
++gpm_kbd_backlight_dbus_property_set (GDBusConnection *connection,
++                    const gchar *sender,
++                    const gchar *object_path,
++                        const gchar *interface_name,
++                        const gchar *property_name,
++                    GVariant *value,
++                    GError **error,
++                    gpointer user_data)
++{
++   /* do nothing, no properties defined */
++   return FALSE;
++}
++
++/**
++ * gpm_kbd_backlight_register_dbus:
++ * @backlight:
++ * @connection:
++ * @error:
++ **/
++void
++gpm_kbd_backlight_register_dbus (GpmKbdBacklight *backlight,
++                GDBusConnection *connection,
++                GError **error)
++{
++   GDBusNodeInfo *node_info;
++   GDBusInterfaceInfo *interface_info;
++   GDBusInterfaceVTable interface_vtable = {
++           gpm_kbd_backlight_dbus_method_call,
++           gpm_kbd_backlight_dbus_property_get,
++           gpm_kbd_backlight_dbus_property_set
++   };
++
++   node_info = g_dbus_node_info_new_for_xml (kbd_backlight_introspection, NULL);
++   interface_info = g_dbus_node_info_lookup_interface (node_info, GPM_DBUS_INTERFACE_BACKLIGHT);
++
++   backlight->priv->bus_connection = g_object_ref (connection);
++   backlight->priv->bus_object_id =
++       g_dbus_connection_register_object (connection,
++                          GPM_DBUS_PATH_KBD_BACKLIGHT,
++                          interface_info,
++                          &interface_vtable,
++                          backlight,
++                          NULL,
++                          error);
++   g_dbus_node_info_unref (node_info);
++}
++
++static gboolean
++gpm_kbd_backlight_evaluate_power_source_and_set (GpmKbdBacklight *backlight)
++{
++   gfloat brightness;
++   gfloat scale;
++   gboolean on_battery;
++   gboolean battery_reduce;
++   guint value;
++   gboolean ret;
++
++   brightness = backlight->priv->master_percentage;
++
++   g_object_get (backlight->priv->client,
++             "on-battery",
++             &on_battery,
++             NULL);
++
++   battery_reduce = g_settings_get_boolean (backlight->priv->settings, GPM_SETTINGS_KBD_BACKLIGHT_BATT_REDUCE);
++
++   if (on_battery && battery_reduce) {
++       value = g_settings_get_int (backlight->priv->settings, GPM_SETTINGS_KBD_BRIGHTNESS_DIM_BY_ON_BATT);
++
++       if (value > 100) {
++           g_warning ("Cannot scale brightness down by more than 100%%. Scaling by 50%%");
++           value = 50;
++       }
++
++       scale = (100 - value) / 100.0f;
++       brightness *= scale;
++
++       value = (guint) brightness;
++
++   } else {
++       value = g_settings_get_int (backlight->priv->settings, GPM_SETTINGS_KBD_BRIGHTNESS_ON_AC);
++   }
++
++   ret = gpm_kbd_backlight_set (backlight, value);
++   return ret;
++}
++
++/**
++ * gpm_kbd_backlight_control_resume_cb:
++ * @control: The control class instance
++ * @backlight: This backlight class instance
++ *
++ * Just make sure that the backlight is back on
++ **/
++static void
++gpm_kbd_backlight_control_resume_cb (GpmControl *control,
++                    GpmControlAction action,
++                    GpmKbdBacklight *backlight)
++{
++   gboolean ret;
++
++   ret = gpm_kbd_backlight_evaluate_power_source_and_set (backlight);
++   if (!ret)
++       g_warning ("Failed to turn kbd brightness back on after resuming");
++}
++
++/**
++ * gpm_kbd_backlight_client_changed_cb:
++ * @client: The up_client class instance
++ * @backlight: This class instance
++ *
++ * Does the actions when the ac power source is inserted/removed.
++ **/
++static void
++gpm_kbd_backlight_client_changed_cb (UpClient *client,
++                    GpmKbdBacklight *backlight)
++{
++   gpm_kbd_backlight_evaluate_power_source_and_set (backlight);
++}
++
++/**
++ * gpm_kbd_backlight_button_pressed_cb:
++ * @power: The power class instance
++ * @type: The button type, but here we only care about keyboard brightness buttons
++ * @backlight: This class instance
++ **/
++static void
++gpm_kbd_backlight_button_pressed_cb (GpmButton *button,
++                    const gchar *type,
++                    GpmKbdBacklight *backlight)
++{
++   static guint saved_brightness;
++
++   saved_brightness = backlight->priv->master_percentage;
++
++   if (g_strcmp0 (type, GPM_BUTTON_KBD_BRIGHT_UP) == 0) {
++       gpm_kbd_backlight_brightness_up (backlight);
++
++   } else if (g_strcmp0 (type, GPM_BUTTON_KBD_BRIGHT_DOWN) == 0) {
++       gpm_kbd_backlight_brightness_down (backlight);
++
++   } else if (g_strcmp0 (type, GPM_BUTTON_KBD_BRIGHT_TOGGLE) == 0) {
++       if (backlight->priv->master_percentage == 0) {
++           /* backlight is off turn it back on */
++           gpm_kbd_backlight_set (backlight, saved_brightness);
++       } else {
++           /* backlight is on, turn it off and save current value */
++           saved_brightness = backlight->priv->master_percentage;
++           gpm_kbd_backlight_set (backlight, 0);
++       }
++   }
++}
++
++/**
++ * gpm_kbd_backlight_idle_changed_cb:
++ * @idle: The idle class instance
++ * @mode: The idle mode, e.g. GPM_IDLE_MODE_BLANK
++ * @backlight: This class instance
++ *
++ * This callback is called when gnome-screensaver detects that the idle state
++ * has changed. GPM_IDLE_MODE_BLANK is when the session has become inactive,
++ * and GPM_IDLE_MODE_SLEEP is where the session has become inactive, AND the
++ * session timeout has elapsed for the idle action.
++ **/
++static void
++gpm_kbd_backlight_idle_changed_cb (GpmIdle *idle,
++                  GpmIdleMode mode,
++                  GpmKbdBacklight *backlight)
++{
++   gfloat brightness;
++   gfloat scale;
++   guint value;
++   gboolean lid_closed;
++   gboolean on_battery;
++   gboolean enable_action;
++
++   lid_closed = gpm_button_is_lid_closed (backlight->priv->button);
++
++   if (lid_closed)
++       return;
++
++   g_object_get (backlight->priv->client,
++                 "on-battery",
++                 &on_battery,
++                 NULL);
++
++   enable_action = on_battery
++       ? g_settings_get_boolean (backlight->priv->settings_gsd, GPM_SETTINGS_IDLE_DIM_BATT)
++       : g_settings_get_boolean (backlight->priv->settings_gsd, GPM_SETTINGS_IDLE_DIM_AC);
++
++   if (!enable_action)
++       return;
++
++   if (mode == GPM_IDLE_MODE_NORMAL) {
++       backlight->priv->master_percentage = 100;
++       gpm_kbd_backlight_evaluate_power_source_and_set (backlight);
++   } else if (mode == GPM_IDLE_MODE_DIM) {
++       brightness = backlight->priv->master_percentage;
++       value = g_settings_get_int (backlight->priv->settings, GPM_SETTINGS_KBD_BRIGHTNESS_DIM_BY_ON_IDLE);
++
++       if (value > 100) {
++           g_warning ("Cannot scale brightness down by more than 100%%. Scaling by 50%%");
++           value = 50;
++       }
++
++       scale = (100 - value) / 100.0f;
++       brightness *= scale;
++
++       value = (guint) brightness;
++       gpm_kbd_backlight_set (backlight, value);
++   } else if (mode == GPM_IDLE_MODE_BLANK) {
++       gpm_kbd_backlight_set (backlight, 0u);
++   }
++}
++
++/**
++ * gpm_kbd_backlight_finalize:
++ * @object:
++ **/
++static void
++gpm_kbd_backlight_finalize (GObject *object)
++{
++   GpmKbdBacklight *backlight;
++
++   g_return_if_fail (object != NULL);
++   g_return_if_fail (GPM_IS_KBD_BACKLIGHT (object));
++
++   backlight = GPM_KBD_BACKLIGHT (object);
++
++   if (backlight->priv->upower_proxy != NULL) {
++       g_object_unref (backlight->priv->upower_proxy);
++   }
++   if (backlight->priv->bus_connection != NULL) {
++       g_dbus_connection_unregister_object (backlight->priv->bus_connection,
++                            backlight->priv->bus_object_id);
++       g_object_unref (backlight->priv->bus_connection);
++   }
++
++   g_timer_destroy (backlight->priv->idle_timer);
++
++   g_object_unref (backlight->priv->control);
++   g_object_unref (backlight->priv->settings);
++   g_object_unref (backlight->priv->settings_gsd);
++   g_object_unref (backlight->priv->client);
++   g_object_unref (backlight->priv->button);
++   g_object_unref (backlight->priv->idle);
++
++   g_return_if_fail (backlight->priv != NULL);
++   G_OBJECT_CLASS (gpm_kbd_backlight_parent_class)->finalize (object);
++}
++
++/**
++ * gpm_kbd_backlight_class_init:
++ * @klass:
++ **/
++static void
++gpm_kbd_backlight_class_init (GpmKbdBacklightClass *klass)
++{
++   GObjectClass *object_class = G_OBJECT_CLASS (klass);
++   object_class->finalize = gpm_kbd_backlight_finalize;
++
++   signals [BRIGHTNESS_CHANGED] =
++       g_signal_new ("brightness-changed",
++                  G_TYPE_FROM_CLASS (object_class),
++                  G_SIGNAL_RUN_LAST,
++                  G_STRUCT_OFFSET (GpmKbdBacklightClass, brightness_changed),
++                  NULL,
++                  NULL,
++                  g_cclosure_marshal_VOID__UINT,
++                  G_TYPE_NONE,
++                  1,
++                  G_TYPE_UINT);
++
++   g_type_class_add_private (klass, sizeof (GpmKbdBacklightPrivate));
++}
++
++/**
++ * gpm_kbd_backlight_init:
++ * @backlight: This KbdBacklight class instance
++ *
++ * Initializes the KbdBacklight class.
++ **/
++static void
++gpm_kbd_backlight_init (GpmKbdBacklight *backlight)
++{
++   GVariant *u_brightness;
++   GVariant *u_max_brightness;
++   GError   *error = NULL;
++
++   backlight->priv = GPM_KBD_BACKLIGHT_GET_PRIVATE (backlight);
++
++   backlight->priv->upower_proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
++                                      G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
++                                      NULL,
++                                      "org.freedesktop.UPower",
++                                      "/org/freedesktop/UPower/KbdBacklight",
++                                      "org.freedesktop.UPower.KbdBacklight",
++                                      NULL,
++                                      &error);
++   if (backlight->priv->upower_proxy == NULL) {
++       g_printerr ("Could not connect to UPower system bus: %s", error->message);
++       g_error_free (error);
++       goto err;
++   }
++
++   g_signal_connect (backlight->priv->upower_proxy,
++             "g-signal",
++             G_CALLBACK (gpm_kbd_backlight_on_dbus_signal),
++             backlight);
++
++   u_brightness = g_dbus_proxy_call_sync (backlight->priv->upower_proxy,
++                          "GetBrightness",
++                          NULL,
++                          G_DBUS_CALL_FLAGS_NONE,
++                          -1,
++                          NULL,
++                          &error);
++   if (u_brightness == NULL) {
++       g_warning ("Failed to get brightness: %s", error->message);
++       g_error_free (error);
++       goto err;
++   }
++
++   error = NULL;
++   u_max_brightness = g_dbus_proxy_call_sync (backlight->priv->upower_proxy,
++                          "GetMaxBrightness",
++                          NULL,
++                          G_DBUS_CALL_FLAGS_NONE,
++                          -1,
++                          NULL,
++                          &error);
++   if (u_max_brightness == NULL) {
++       g_warning ("Failed to get max brightness: %s", error->message);
++       g_error_free (error);
++       g_variant_unref (u_brightness);
++       goto err;
++   }
++
++   g_variant_get (u_brightness, "(i)", &backlight->priv->brightness);
++   g_variant_get (u_max_brightness, "(i)", &backlight->priv->max_brightness);
++
++   backlight->priv->brightness_percent = gpm_discrete_to_percent (backlight->priv->brightness,
++                                      backlight->priv->max_brightness);
++
++   g_variant_unref (u_brightness);
++   g_variant_unref (u_max_brightness);
++   goto noerr;
++
++err:
++   backlight->priv->brightness = 0;
++   backlight->priv->brightness_percent = 100;
++   backlight->priv->max_brightness = 0;
++
++noerr:
++   /* Initialize the master to full power. It will get scaled if needed */
++   backlight->priv->master_percentage = 100u;
++
++   backlight->priv->idle_timer = g_timer_new ();
++   backlight->priv->can_dim = backlight->priv->max_brightness > 1;
++
++   /* Use upower for ac changed signal */
++   backlight->priv->client = up_client_new ();
++   g_signal_connect (backlight->priv->client, "changed",
++             G_CALLBACK (gpm_kbd_backlight_client_changed_cb), backlight);
++
++   backlight->priv->settings = g_settings_new (GPM_SETTINGS_SCHEMA);
++   //backlight->priv->settings_gsd = g_settings_new (GSD_SETTINGS_SCHEMA);
++
++   /* watch for kbd brightness up and down button presses */
++   backlight->priv->button = gpm_button_new ();
++   g_signal_connect (backlight->priv->button, "button-pressed",
++             G_CALLBACK (gpm_kbd_backlight_button_pressed_cb), backlight);
++
++   backlight->priv->idle = gpm_idle_new ();
++   g_signal_connect (backlight->priv->idle, "idle-changed",
++             G_CALLBACK (gpm_kbd_backlight_idle_changed_cb), backlight);
++
++   /* since gpm is just starting we can pretty safely assume that we're not idle */
++   backlight->priv->system_is_idle = FALSE;
++   backlight->priv->idle_dim_timeout = g_settings_get_int (backlight->priv->settings_gsd, GPM_SETTINGS_IDLE_DIM_TIME);
++   gpm_idle_set_timeout_dim (backlight->priv->idle, backlight->priv->idle_dim_timeout);
++
++   /* make sure we turn the keyboard backlight back on after resuming */
++   backlight->priv->control = gpm_control_new ();
++   g_signal_connect (backlight->priv->control, "resume",
++             G_CALLBACK (gpm_kbd_backlight_control_resume_cb), backlight);
++
++   /* set initial values for whether we're on AC or battery*/
++   gpm_kbd_backlight_evaluate_power_source_and_set (backlight);
++}
++
++/**
++ * gpm_kbd_backlight_new:
++ * Return value: A new GpmKbdBacklight class instance.
++ **/
++GpmKbdBacklight *
++gpm_kbd_backlight_new (void)
++{
++   GpmKbdBacklight *backlight = g_object_new (GPM_TYPE_KBD_BACKLIGHT, NULL);
++   return backlight;
++}
++
+diff --git a/src/gpm-kbd-backlight.h b/src/gpm-kbd-backlight.h
+new file mode 100644
+index 0000000..78975b5
+--- /dev/null
++++ b/src/gpm-kbd-backlight.h
+@@ -0,0 +1,79 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
++ *
++ * Copyright (C) 2010 Alex Launi <alex launi canonical 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 __GPM_KBD_BACKLIGHT_H
++#define __GPM_KBD_BACKLIGHT_H
++
++#include <gio/gio.h>
++#include <glib.h>
++#include <glib-object.h>
++
++G_BEGIN_DECLS
++
++#define GPM_TYPE_KBD_BACKLIGHT     (gpm_kbd_backlight_get_type ())
++#define GPM_KBD_BACKLIGHT(o)       (G_TYPE_CHECK_INSTANCE_CAST ((o), GPM_TYPE_KBD_BACKLIGHT, GpmKbdBacklight))
++#define GPM_KBD_BACKLIGHT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GPM_TYPE_KBD_BACKLIGHT, GpmKbdBacklightClass))
++#define GPM_IS_KBD_BACKLIGHT(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), GPM_TYPE_KBD_BACKLIGHT))
++#define GPM_IS_KBD_BACKLIGHT_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), GPM_TYPE_KBD_BACKLIGHT))
++#define GPM_KBD_BACKLIGHT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GPM_TYPE_KBD_BACKLIGHT, GpmKbdBacklightClass))
++
++#define GPM_KBD_BACKLIGHT_DIM_INTERVAL 5 /* ms */
++#define GPM_KBD_BACKLIGHT_STEP 10 /* change by 10% each step */
++
++typedef struct GpmKbdBacklightPrivate GpmKbdBacklightPrivate;
++
++typedef struct
++{
++   GObject         parent;
++   GpmKbdBacklightPrivate *priv;
++} GpmKbdBacklight;
++
++typedef struct
++{
++   GObjectClass parent_class;
++   void         (* brightness_changed) (GpmKbdBacklight *backlight,
++                        gint         brightness);
++} GpmKbdBacklightClass;
++
++typedef enum
++{
++    GPM_KBD_BACKLIGHT_ERROR_GENERAL,
++    GPM_KBD_BACKLIGHT_ERROR_DATA_NOT_AVAILABLE,
++    GPM_KBD_BACKLIGHT_ERROR_HARDWARE_NOT_PRESENT
++} GpmKbdBacklightError;
++
++GType          gpm_kbd_backlight_get_type      (void);
++GQuark         gpm_kbd_backlight_error_quark       (void);
++GpmKbdBacklight           *gpm_kbd_backlight_new           (void);
++gboolean       gpm_kbd_backlight_get_brightness    (GpmKbdBacklight *backlight,
++                                guint *brightness,
++                                GError **error);
++gboolean       gpm_kbd_backlight_set_brightness    (GpmKbdBacklight *backlight,
++                                guint brightness,
++                                GError **error);
++void           gpm_kbd_backlight_register_dbus     (GpmKbdBacklight *backlight,
++                                GDBusConnection *connection,
++                                GError **error);
++
++G_END_DECLS
++
++#endif /* __GPM_KBD_BACKLIGHT_H */
++
+diff --git a/src/gpm-manager.c b/src/gpm-manager.c
+index 68ff788..13b0b8d 100644
+--- a/src/gpm-manager.c
++++ b/src/gpm-manager.c
+@@ -53,6 +53,7 @@
+ #include "gpm-manager.h"
+ #include "gpm-screensaver.h"
+ #include "gpm-backlight.h"
++#include "gpm-kbd-backlight.h"
+ #include "gpm-session.h"
+ #include "gpm-stock-icons.h"
+ #include "gpm-tray-icon.h"
+@@ -84,6 +85,7 @@ struct GpmManagerPrivate
+ 	GpmTrayIcon		*tray_icon;
+ 	GpmEngine		*engine;
+ 	GpmBacklight		*backlight;
++	GpmKbdBacklight		*kbd_backlight;
+ 	EggConsoleKit		*console;
+ 	guint32			 screensaver_ac_throttle_id;
+ 	guint32			 screensaver_dpms_throttle_id;
+@@ -1904,6 +1906,13 @@ gpm_manager_init (GpmManager *manager)
+ 						     G_OBJECT (manager->priv->backlight));
+ 	}
+ 
++    manager->priv->kbd_backlight = gpm_kbd_backlight_new ();
++    if (manager->priv->kbd_backlight != NULL) {
++        gpm_kbd_backlight_register_dbus (manager->priv->kbd_backlight,
++                                        connection,
++                                        NULL);
++    }
++
+ 	manager->priv->idle = gpm_idle_new ();
+ 	g_signal_connect (manager->priv->idle, "idle-changed",
+ 			  G_CALLBACK (gpm_manager_idle_changed_cb), manager);
+@@ -1998,6 +2007,7 @@ gpm_manager_finalize (GObject *object)
+ 	g_object_unref (manager->priv->control);
+ 	g_object_unref (manager->priv->button);
+ 	g_object_unref (manager->priv->backlight);
++	g_object_unref (manager->priv->kbd_backlight);
+ 	g_object_unref (manager->priv->console);
+ 	g_object_unref (manager->priv->client);
+ 	g_object_unref (manager->priv->status_icon);
+-- 
+1.7.11.7
+
diff --git a/0002-Fixes-an-issue-where-displays-would-not-turn-off-des.patch b/0002-Fixes-an-issue-where-displays-would-not-turn-off-des.patch
new file mode 100644
index 0000000..ade8e39
--- /dev/null
+++ b/0002-Fixes-an-issue-where-displays-would-not-turn-off-des.patch
@@ -0,0 +1,25 @@
+From fbe4f6cc621eab7520e72463434d192cf64c878d Mon Sep 17 00:00:00 2001
+From: William Brown <william at firstyear.id.au>
+Date: Wed, 14 Nov 2012 22:37:30 +1030
+Subject: [PATCH 2/4] Fixes an issue where displays would not turn off despite
+ the system being idle
+
+---
+ src/gpm-idle.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/gpm-idle.c b/src/gpm-idle.c
+index 0a7c33c..97e9072 100644
+--- a/src/gpm-idle.c
++++ b/src/gpm-idle.c
+@@ -352,6 +352,7 @@ static void
+ gpm_idle_session_idle_changed_cb (GpmSession *session, gboolean is_idle, GpmIdle *idle)
+ {
+ 	egg_debug ("Received mate session idle changed: %i", is_idle);
++	idle->priv->x_idle = TRUE;
+ 	gpm_idle_evaluate (idle);
+ }
+ 
+-- 
+1.7.11.7
+
diff --git a/0003-This-fixes-the-mismatched-dbus-library-issue.patch b/0003-This-fixes-the-mismatched-dbus-library-issue.patch
new file mode 100644
index 0000000..a973029
--- /dev/null
+++ b/0003-This-fixes-the-mismatched-dbus-library-issue.patch
@@ -0,0 +1,38 @@
+From 0453548baedf4e060bc3785555589b551cf5b98c Mon Sep 17 00:00:00 2001
+From: William Brown <william at firstyear.id.au>
+Date: Wed, 14 Nov 2012 23:21:58 +1030
+Subject: [PATCH 3/4] This fixes the mismatched dbus library issue
+
+---
+ src/gpm-manager.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/gpm-manager.c b/src/gpm-manager.c
+index 13b0b8d..9ee8781 100644
+--- a/src/gpm-manager.c
++++ b/src/gpm-manager.c
+@@ -1850,10 +1850,12 @@ gpm_manager_init (GpmManager *manager)
+ 	gboolean check_type_cpu;
+ 	gint timeout;
+ 	DBusGConnection *connection;
++    GDBusConnection *g_connection;
+ 	GError *error = NULL;
+ 
+ 	manager->priv = GPM_MANAGER_GET_PRIVATE (manager);
+ 	connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
++    g_connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
+ 
+ 	/* init to unthrottled */
+ 	manager->priv->screensaver_ac_throttle_id = 0;
+@@ -1909,7 +1911,7 @@ gpm_manager_init (GpmManager *manager)
+     manager->priv->kbd_backlight = gpm_kbd_backlight_new ();
+     if (manager->priv->kbd_backlight != NULL) {
+         gpm_kbd_backlight_register_dbus (manager->priv->kbd_backlight,
+-                                        connection,
++                                        g_connection,
+                                         NULL);
+     }
+ 
+-- 
+1.7.11.7
+
diff --git a/0004-Rename-some-components-to-mate-friendly-values.patch b/0004-Rename-some-components-to-mate-friendly-values.patch
new file mode 100644
index 0000000..7fba82d
--- /dev/null
+++ b/0004-Rename-some-components-to-mate-friendly-values.patch
@@ -0,0 +1,48 @@
+From 1ea3233503f84366afd4e0a76e47afa258d17d04 Mon Sep 17 00:00:00 2001
+From: William Brown <william at firstyear.id.au>
+Date: Wed, 14 Nov 2012 23:46:18 +1030
+Subject: [PATCH 4/4] Rename some components to mate friendly values
+
+---
+ src/gpm-common.h        | 2 +-
+ src/gpm-kbd-backlight.c | 4 ++--
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/gpm-common.h b/src/gpm-common.h
+index 6029b2f..ca4762c 100644
+--- a/src/gpm-common.h
++++ b/src/gpm-common.h
+@@ -31,7 +31,7 @@ G_BEGIN_DECLS
+ #define	GPM_DBUS_INTERFACE_BACKLIGHT	"org.mate.PowerManager.Backlight"
+ #define	GPM_DBUS_PATH			"/org/mate/PowerManager"
+ #define	GPM_DBUS_PATH_BACKLIGHT		"/org/mate/PowerManager/Backlight"
+-#define GPM_DBUS_PATH_KBD_BACKLIGHT    "/org/gnome/PowerManager/KbdBacklight"
++#define GPM_DBUS_PATH_KBD_BACKLIGHT    "/org/mate/PowerManager/KbdBacklight"
+ 
+ /* common descriptions of this program */
+ #define GPM_NAME 			_("Power Manager")
+diff --git a/src/gpm-kbd-backlight.c b/src/gpm-kbd-backlight.c
+index 8c8ba69..4ed3fcf 100644
+--- a/src/gpm-kbd-backlight.c
++++ b/src/gpm-kbd-backlight.c
+@@ -31,7 +31,7 @@
+ 
+ static const gchar *kbd_backlight_introspection = ""
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>""<node name=\"/\">"
+-  "<interface name=\"org.gnome.PowerManager.Backlight\">"
++  "<interface name=\"org.mate.PowerManager.Backlight\">"
+     "<method name=\"GetBrightness\">"
+       "<arg type=\"u\" name=\"percentage_brightness\" direction=\"out\"/>"
+     "</method>"
+@@ -489,7 +489,7 @@ gpm_kbd_backlight_button_pressed_cb (GpmButton *button,
+  * @mode: The idle mode, e.g. GPM_IDLE_MODE_BLANK
+  * @backlight: This class instance
+  *
+- * This callback is called when gnome-screensaver detects that the idle state
++ * This callback is called when mate-screensaver detects that the idle state
+  * has changed. GPM_IDLE_MODE_BLANK is when the session has become inactive,
+  * and GPM_IDLE_MODE_SLEEP is where the session has become inactive, AND the
+  * session timeout has elapsed for the idle action.
+-- 
+1.7.11.7
+
diff --git a/mate-power-manager.spec b/mate-power-manager.spec
index d84fda2..d527658 100644
--- a/mate-power-manager.spec
+++ b/mate-power-manager.spec
@@ -1,12 +1,20 @@
 Name:           mate-power-manager
 Version:        1.5.0
-Release:        1%{?dist}
+Release:        2%{?dist}
 Summary:        MATE power management service
 
 License:        GPLv2+
 URL:            http://pub.mate-desktop.org
 Source0:        http://pub.mate-desktop.org/releases/1.5/%{name}-%{version}.tar.xz
 
+# merged upstream commits
+# https://github.com/mate-desktop/mate-power-manager/commit/abf46d226f006c5b6843ccac2010469ae838d68b
+Patch0:         0001-Keyboard-backlight-patches-tested-as-working-against.patch
+Patch1:         0002-Fixes-an-issue-where-displays-would-not-turn-off-des.patch
+Patch2:         0003-This-fixes-the-mismatched-dbus-library-issue.patch
+Patch3:         0004-Rename-some-components-to-mate-friendly-values.patch
+
+
 
 BuildRequires: mate-panel-devel
 BuildRequires: popt-devel
@@ -34,6 +42,10 @@ displaying icons and handling user callbacks in an interactive MATE session.
 
 %prep
 %setup -q
+%patch0 -p1
+%patch1 -p1
+%patch2 -p1
+%patch3 -p1
 NOCONFIGURE=1 ./autogen.sh
 
 
@@ -96,6 +108,9 @@ fi
 
 
 %changelog
+* Wed Nov 14 2012 Leigh Scott <leigh123linux at googlemail.com> - 1.5.0-2
+- add upstream patch to add keyboard backlight support
+
 * Thu Nov 08 2012 Leigh Scott <leigh123linux at googlemail.com> - 1.5.0-1
 - update to 1.5.0 release
 


More information about the scm-commits mailing list